@directive-run/ai 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anthropic.cjs +1 -1
- package/dist/anthropic.cjs.map +1 -1
- package/dist/anthropic.js +1 -1
- package/dist/anthropic.js.map +1 -1
- package/dist/{chunk-265ZKXYE.js → chunk-3PGRBK4E.js} +2 -2
- package/dist/chunk-3PGRBK4E.js.map +1 -0
- package/dist/{chunk-QXMXSHYS.cjs → chunk-KP3G32S7.cjs} +2 -2
- package/dist/chunk-KP3G32S7.cjs.map +1 -0
- package/dist/{chunk-5ERCL33C.js → chunk-Q3PQLWBR.js} +3 -3
- package/dist/chunk-Q3PQLWBR.js.map +1 -0
- package/dist/{chunk-K2LZMRLN.js → chunk-RW4R3O5P.js} +3 -3
- package/dist/{chunk-K2LZMRLN.js.map → chunk-RW4R3O5P.js.map} +1 -1
- package/dist/{chunk-KALRDVN5.cjs → chunk-X3VQ5F7D.cjs} +3 -3
- package/dist/{chunk-KALRDVN5.cjs.map → chunk-X3VQ5F7D.cjs.map} +1 -1
- package/dist/{chunk-L35IQAWD.cjs → chunk-XV2QSBBE.cjs} +7 -7
- package/dist/chunk-XV2QSBBE.cjs.map +1 -0
- package/dist/gemini.cjs +1 -1
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.js +1 -1
- package/dist/gemini.js.map +1 -1
- package/dist/index.cjs +18 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -6
- package/dist/index.d.ts +50 -6
- package/dist/index.js +18 -18
- package/dist/index.js.map +1 -1
- package/dist/{multi-agent-orchestrator-675FR2HF.js → multi-agent-orchestrator-4PXNYRHB.js} +2 -2
- package/dist/{multi-agent-orchestrator-675FR2HF.js.map → multi-agent-orchestrator-4PXNYRHB.js.map} +1 -1
- package/dist/multi-agent-orchestrator-KFGTEGE5.cjs +2 -0
- package/dist/{multi-agent-orchestrator-SH5TRRS3.cjs.map → multi-agent-orchestrator-KFGTEGE5.cjs.map} +1 -1
- package/dist/ollama.cjs +2 -2
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.js +1 -1
- package/dist/ollama.js.map +1 -1
- package/dist/openai.cjs +1 -1
- package/dist/openai.cjs.map +1 -1
- package/dist/openai.js +1 -1
- package/dist/openai.js.map +1 -1
- package/dist/{orchestrator-types-BmvoZgfO.d.cts → orchestrator-types-Bh8r3_Sq.d.cts} +1 -1
- package/dist/{orchestrator-types-D6gzobwg.d.ts → orchestrator-types-CTfIKk0W.d.ts} +1 -1
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-265ZKXYE.js.map +0 -1
- package/dist/chunk-5ERCL33C.js.map +0 -1
- package/dist/chunk-L35IQAWD.cjs.map +0 -1
- package/dist/chunk-QXMXSHYS.cjs.map +0 -1
- package/dist/multi-agent-orchestrator-SH5TRRS3.cjs +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/debug-timeline.ts","../src/guardrail-utils.ts","../src/health-monitor.ts","../src/meta-context.ts","../src/types.ts","../src/orchestrator-bridge.ts","../src/reflection.ts","../src/breakpoints.ts","../src/checkpoint.ts","../src/streaming.ts","../src/structured-output.ts","../src/orchestrator-utils.ts","../src/pattern-factories.ts","../src/pattern-serialization.ts","../src/pattern-composition.ts","../src/multi-agent-orchestrator.ts"],"names":["KNOWN_EVENT_TYPES","BLOCKED_IMPORT_KEYS","createDebugTimeline","options","maxEvents","goToSnapshot","events","nextId","listeners","event","fullEvent","overflow","listener","err","agentId","e","type","snapshotId","startMs","endMs","cutoffId","i","sliceEnd","json","parsed","key","data","validated","evt","createDebugTimelinePlugin","timeline","getSnapshotId","resolverStartTimes","id","active","resolver","req","startTime","_req","error","errorMessage","normalizeGuardrail","guardrail","index","calculateRetryDelay","attempt","config","backoff","baseDelayMs","maxDelayMs","delay","abortableDelay","ms","signal","resolve","reject","onAbort","timer","executeGuardrailWithRetry","context","retry","maxAttempts","lastError","calculateAgentRetryDelay","executeAgentWithRetry","runner","agent","input","retryConfig","isRetryable","onRetry","retryable","DEFAULT_WEIGHTS","createHealthMonitor","windowMs","maxNormalLatencyMs","maxEventsPerAgent","weights","value","weightSum","circuitStates","generation","cachedAll","cachedGen","getAgentEvents","agentEvents","pruneAndCap","now","cutoff","firstValid","excessFromCap","computeScore","successRate","avgLatency","s","normalizedLatency","state","circuitScore","raw","buildMetrics","successes","failures","avgLatencyMs","lastErrors","latencyMs","result","formatTags","meta","parts","tag","formatEntry","label","desc","tags","formatSystemMeta","inspection","sections","moduleEntries","activeConstraints","c","constraintMetaMap","reqEntries","constraintLabel","resolverEntries","r","eventEntries","factEntries","f","effectEntries","derivationEntries","d","toAIContext","system","GuardrailError","isGuardrailError","AGENT_KEY","APPROVAL_KEY","CONVERSATION_KEY","TOOL_CALLS_KEY","BREAKPOINT_KEY","SCRATCHPAD_KEY","orchestratorBridgeSchema","t","getAgentState","facts","getBridgeFact","setAgentState","setBridgeFact","getApprovalState","setApprovalState","getConversation","setConversation","messages","getToolCalls","setToolCalls","toolCalls","getBreakpointState","setBreakpointState","getOrchestratorState","convertOrchestratorConstraints","constraints","constraint","combinedFacts","convertOrchestratorResolvers","resolvers","runAgentWithGuardrails","getSystemFacts","orchestratorContext","opts","ReflectionExhaustedError","defaultBuildRetryInput","feedback","_iteration","withReflection","maxIterations","buildRetryInput","onExhausted","history","effectiveInput","accumulatedTokens","lastResult","iteration","iterationStart","evaluation","durationMs","MAX_BREAKPOINT_HISTORY","breakpointCounter","createBreakpointId","matchBreakpoint","breakpoints","bp","createInitialBreakpointState","BLOCKED_KEYS","createCheckpointId","timestamp","random","validateCheckpoint","obj","localState","InMemoryCheckpointStore","checkpoint","existingIdx","checkpointId","cp","pruned","toRemove","idx","oldest","StreamBuffer","strategy","maxSize","item","pullWaiter","pushWaiter","waiter","createStreamingRunner","baseRunner","streamingGuardrails","runOptions","backpressure","bufferSize","guardrailCheckInterval","stopOnGuardrail","buffer","abortController","partialOutput","tokenCount","stopped","abortHandler","cleanup","checkGuardrails","shouldStop","chunk","resultPromise","token","tool","args","message","duration","droppedTokens","errorChunk","createToxicityStreamingGuardrail","checkFn","threshold","stopOnFail","score","createLengthStreamingGuardrail","maxTokens","warnAt","warned","_partialOutput","createPatternStreamingGuardrail","patterns","regex","name","combineStreamingGuardrails","guardrails","stopOnFirstFail","adaptOutputGuardrail","minTokens","collectTokens","stream","output","tapStream","fn","filterStream","types","typeSet","mapStream","MAX_MULTIPLEX_BUFFER","mergeTaggedStreams","sources","done","waiters","activeSources","closed","droppedCount","push","finish","source","extractJsonFromOutput","trimmed","objectStart","arrayStart","start","openChar","closeChar","depth","inString","escaped","char","jsonStr","sanitized","match","formatValidationError","issue","withStructuredOutput","schema","maxRetries","extractJson","schemaDescription","schemaPrompt","structuredAgent","outputStr","extracted","StructuredOutputError","shallowEqual","a","b","aObj","bObj","aKeys","bKeys","Semaphore","max","released","entry","releaseFn","next","pending","getPatternStep","getCheckpointProgress","stepsCompleted","stepsTotal","tokensConsumed","sum","avgTokens","remaining","h","total","completed","satisfaction","estimateGoalSteps","metrics","avgDelta","m","diffCheckpoints","getTokens","diff","added","removed","changed","aCompleted","forkFromCheckpoint","checkpointStore","createMultiAgentOrchestrator","cloned","forked","validateDagAcyclic","patternId","nodes","nodeIds","nodeId","node","depId","deps","inDegree","adjacency","queue","visited","current","dependent","parallel","handlers","merge","sequential","supervisor","supervisorAgent","workers","dag","reflect","handler","evaluator","race","goal","when","allReadyStrategy","readyAgents","highestImpactStrategy","topN","aAvg","costEfficientStrategy","aM","bM","aCost","bCost","patternToJSON","pattern","cnodes","ALLOWED_PATTERN_TYPES","patternFromJSON","overrides","safe","k","v","selectAgent","priority","selectedAgent","selectedInput","runAgentRequirement","concatResults","results","separator","safeStringify","pickBestResult","best","collectOutputs","aggregateTokens","composePatterns","orchestrator","currentInput","lastOutput","parallelPattern","inputsArr","seqPattern","supPattern","maxRounds","workerResults","supervisorResult","round","action","stripped","workerResult","dagPattern","dagContext","nodeInput","upstreamOutputs","reflectPattern","maxIter","parseEval","buildInput","inp","producerOutput","producerStr","evalResult","racePattern","debatePattern","initialFacts","findAgentsByCapability","registry","requiredCapabilities","reg","caps","capabilityRoute","getCapabilities","getInput","select","cachedMatches","cacheGeneration","requireGeneration","matches","spawnOnConditionOptionsWarned","spawnOnCondition","effectivePriority","effectiveContext","debate","extract","parseJudgement","timeout","runDebate","derivedConstraint","derivationId","condition","lastValue","whenGeneration","spawnPool","isRunAgentReq","requirementGuard","inputAgents","onHandoff","onHandoffComplete","maxHandoffHistory","rawDebug","hooks","sharedMemory","defaultAgentRetry","maxTokenBudget","plugins","onApprovalRequest","autoApproveToolCalls","approvalTimeoutMs","userConstraints","userResolvers","orchestratorCircuitBreaker","budgetWarningThreshold","onBudgetWarning","selfHealing","breakpointConfigs","onBreakpoint","breakpointTimeoutMs","userDerivations","scratchpadConfig","inputTasks","debug","MAX_VERBOSE_LENGTH","agents","tasks","taskStates","taskId","taskSemaphores","RESERVED_IDS","taskReg","attempts","delayMs","registeredAgentIds","missingAgents","agentsToCheck","details","timelinePlugin","healthMonitorInstance","roundRobinCounters","fireHook","hookError","coordFacts","coordSchema","coordConstraints","coordResolvers","resolverCtx","globalStatus","runSingleAgent","coordinatorModule","createModule","modulesMap","registration","perAgentConstraints","perAgentResolvers","resolverContext","callbackPlugin","createCallbackPlugin","allPlugins","createSystem","MAX_CONVERSATION_MESSAGES","MAX_TOOL_CALLS","globalTokenCount","destroyed","pendingRuns","lastReflectionHistory","assertNotDestroyed","semaphores","agentStates","MAX_HANDOFF_RESULTS","pendingHandoffs","handoffResults","handoffCounter","addHandoffResult","approvalRequestIndex","idleWaiters","notifyIdleWaiters","derivedValues","derivedChangeCallbacks","buildCrossAgentSnapshot","agentsSnap","getAgentFacts","snapshot","recomputeDerivations","errors","derivId","derivFn","newValue","oldValue","hasChanged","derivError","cb","scratchpadChangeCallbacks","scratchpadKeyCallbacks","scratchpadInstance","changedKeys","notifyScratchpadChange","_","rest","values","safeValues","keys","callback","allKeys","keyCbs","breakpointModifications","breakpointCancelReasons","waitForBreakpointResolution","breakpointId","timeoutId","settled","agentFacts","cleanupAll","unsubscribe","bpState","mods","cancelReason","handleBreakpoint","agentName","extra","matched","bpId","request","currentBp","modifications","waitForApproval","requestId","approval","rejectedRequest","errorMsg","timeoutSeconds","runTask","bpResult","effectivePatternId","sem","buildContext","agentState","taskState","percent","clampedPercent","baseDelay","executeAttempt","timeoutTimer","rawOutput","MAX_BACKOFF_MS","rawDelay","available","effectiveCircuitBreaker","runSingleAgentInner","equivalents","findEquivalentAgents","alternate","selectBestEquivalent","rerouteEvent","originalInput","processedInput","semaphore","release","controller","effectiveMemory","contextMessages","contextStr","metaStr","inputGuardrailsList","g","guardStartTime","currentAgent","effectiveRunner","effectiveSchema","effectiveRetry","updated","toolCall","toolCallGuardrailsList","guardResult","approvalId","approvalRequest","currentApproval","updatedToolCalls","outputGuardrailsList","shouldFireBudgetWarning","budgetPercentage","newTotal","warningFired","callbackError","messagesToStore","memoryError","base","runAgentStreamImpl","taskChunks","taskWaiters","taskClosed","pushTaskChunk","closeTaskStream","w","taskAbortController","taskExternalAbortHandler","MAX_AGENT_STREAM_BUFFER","MAX_ACCUMULATED_OUTPUT","chunks","accumulatedOutput","pushChunk","closeStream","newTokens","runParallelPattern","patternStartTime","patternError","promises","successResults","failCount","savePatternCheckpoint","store","step","runSequentialPattern","initialInput","resumeFrom","pId","ckptConfig","ckptStore","ckptEveryN","ckptPrefix","collectedResults","startIdx","last","nextInput","runSupervisorPattern","serializedWorkerResults","wr","startRound","cleaned","runDagPattern","dagCkptConfig","dagCkptStore","dagCkptEveryN","dagCkptPrefix","dagCompletedCount","dagLastCheckpointCount","dagCheckpointChain","dagTotalNodes","status","nr","onNodeError","maxConcurrent","graphTimeoutId","evaluatePendingNodes","terminalStatuses","inflight","running","launchNode","nodeStartTime","nodeController","nodeTimeoutId","nodeResults","nid","ckptState","readyNodes","promise","runReflectPattern","effectiveSignal","reflectTimeoutId","reflectExternalOnAbort","parseEvaluation","reflectCkptConfig","reflectCkptStore","reflectCkptEveryN","reflectCkptPrefix","lastProducerResult","producerOutputs","startIteration","iterStart","producerResult","evaluatorResult","parseError","thresholdValue","iterDurationMs","record","cbError","retryError","p","bestIdx","bestScore","bestOutput","runRacePattern","minSuccess","raceTimeoutId","raceExternalOnAbort","agentErrors","startedAgents","entries","allPromises","settledCount","resolved","winner","failedCount","maxPossibleSuccesses","msg","first","winnerId","successIds","cancelledIds","allResults","runDebateInternal","debateAgents","debateTimeoutId","externalOnAbort","ctrl","parseJudge","rounds","lastWinnerId","lastWinnerOutput","debateCkptConfig","debateCkptStore","debateCkptEveryN","debateCkptPrefix","debateTotalTokens","proposalPromises","proposals","evalInput","judgement","GOAL_BLOCKED_KEYS","goalSafeMerge","target","validateGoalAcyclic","producerMap","reqKey","producers","producerId","validateProducerConflicts","safeCall","safeCallAsync","computeGoalMetrics","currentSatisfaction","stepMetrics","_step","recentSteps","estimatedStepsRemaining","decelerating","recent3","prior3","recentAvg","priorAvg","clampSatisfaction","runGoalInternal","originalNodes","goalWhen","satisfactionFn","maxSteps","selectionStrategy","relaxation","onStep","onStall","goalTimeoutId","timeoutMs","goalHandlers","n","executionOrder","out","relaxations","completedNodes","failedNodes","nodeInputHashes","agentMetrics","stallSteps","appliedRelaxationTiers","lastSatisfaction","goalAchieved","startStep","checkpointConfig","checkpointEveryN","checkpointStoreRef","checkpointLabelPrefix","lastCheckpointId","MAX_CONSECUTIVE_FAILURES","totalTokens","requires","inputHash","selectedNodes","rawSatisfaction","goalProgressMetrics","strategyMetrics","strategyResult","relaxationApplied","tierIdx","tier","altNode","altId","rawSat","ctx","stallMetrics","stepStart","rawPreSat","preSatisfaction","stepTokens","factsProduced","nodePromises","customInput","relevantFacts","outputFacts","rawPostSat","postSatisfaction","satisfactionDelta","savedId","seen","group","sourceReg","counter","selected","getPatternHandlers","handlerIds","agentIds","inputs","inputArray","fromAgent","toAgent","targetMemory","contextSummary","handoffResult","MAX_APPROVAL_HISTORY","approved","reason","MAX_REJECTION_HISTORY","rejected","allIdle","check","agentModule","referencedAgents","existing","tsem","local","perAgentStreams","streamResult","taggedSources","mergedStream","getDroppedCount","resultsPromise","mergePromise","raceOpts","evaluatorId","reflectOpts","exhausted","debateOpts","goalOpts","checkpointState","BLOCKED","replayInput","cancelled"],"mappings":"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","file":"chunk-KALRDVN5.cjs","sourcesContent":["/**\n * Debug Timeline — AI-specific event log with snapshot correlation.\n *\n * Records agent lifecycle events (start, complete, error, guardrail checks,\n * approvals, handoffs, patterns) and correlates them with core time-travel\n * snapshots for visual timeline UIs and fork-and-replay debugging.\n *\n * Zero-cost when debug=false — the timeline is simply `null`.\n *\n * @module\n */\n\nimport type { Plugin } from \"@directive-run/core\";\nimport type { DebugEvent, DebugEventType } from \"./types.js\";\n\n/** A12: Known event types for import validation */\nconst KNOWN_EVENT_TYPES: Set<string> = new Set([\n \"agent_start\",\n \"agent_complete\",\n \"agent_error\",\n \"agent_retry\",\n \"guardrail_check\",\n \"constraint_evaluate\",\n \"resolver_start\",\n \"resolver_complete\",\n \"resolver_error\",\n \"approval_request\",\n \"approval_response\",\n \"handoff_start\",\n \"handoff_complete\",\n \"pattern_start\",\n \"pattern_complete\",\n \"dag_node_update\",\n \"breakpoint_hit\",\n \"breakpoint_resumed\",\n \"derivation_update\",\n \"scratchpad_update\",\n \"reflection_iteration\",\n \"race_start\",\n \"race_winner\",\n \"race_cancelled\",\n \"debate_round\",\n \"reroute\",\n \"checkpoint_save\",\n \"checkpoint_restore\",\n \"task_start\",\n \"task_complete\",\n \"task_error\",\n \"task_progress\",\n \"goal_step\",\n]);\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Callback fired when a new event is recorded */\nexport type DebugTimelineListener = (event: DebugEvent) => void;\n\n/** Debug timeline instance */\nexport interface DebugTimeline {\n /** Record a new event (id is auto-assigned) */\n record(event: Omit<DebugEvent, \"id\"> & Record<string, unknown>): DebugEvent;\n /** Get all events in order */\n getEvents(): DebugEvent[];\n /** Get events for a specific agent */\n getEventsForAgent(agentId: string): DebugEvent[];\n /** Get events by type with type narrowing */\n getEventsByType<T extends DebugEventType>(\n type: T,\n ): Extract<DebugEvent, { type: T }>[];\n /** Get events at a specific snapshot */\n getEventsAtSnapshot(snapshotId: number): DebugEvent[];\n /** Get events in a time range */\n getEventsInRange(startMs: number, endMs: number): DebugEvent[];\n /** Fork from a snapshot — truncates events after it and calls goTo */\n forkFrom(snapshotId: number): void;\n /** Export timeline as JSON */\n export(): string;\n /** Import timeline from JSON */\n import(json: string): void;\n /** Clear all events */\n clear(): void;\n /** Subscribe to new events. Returns unsubscribe function. */\n subscribe(listener: DebugTimelineListener): () => void;\n /** Current number of events */\n readonly length: number;\n}\n\n/** Options for creating a debug timeline */\nexport interface DebugTimelineOptions {\n /** Maximum events before eviction. @default 2000 */\n maxEvents?: number;\n /** Callback to get current snapshot ID from the system */\n getSnapshotId?: () => number | null;\n /** Callback to navigate to a snapshot (for forkFrom) */\n goToSnapshot?: (snapshotId: number) => void;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\nconst BLOCKED_IMPORT_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n]);\n\n/**\n * Create a debug timeline for recording and correlating AI events.\n *\n * @example\n * ```typescript\n * const timeline = createDebugTimeline({ maxEvents: 1000 });\n *\n * timeline.record({\n * type: \"agent_start\",\n * timestamp: Date.now(),\n * agentId: \"researcher\",\n * snapshotId: null,\n * inputLength: 42,\n * });\n *\n * const agentEvents = timeline.getEventsForAgent(\"researcher\");\n * ```\n */\nexport function createDebugTimeline(\n options: DebugTimelineOptions = {},\n): DebugTimeline {\n const maxEvents = options.maxEvents ?? 2000;\n const goToSnapshot = options.goToSnapshot;\n\n // Validate config\n if (!Number.isFinite(maxEvents) || maxEvents < 1) {\n throw new Error(\"[Directive DebugTimeline] maxEvents must be >= 1\");\n }\n\n let events: DebugEvent[] = [];\n let nextId = 0;\n const listeners = new Set<DebugTimelineListener>();\n\n const timeline: DebugTimeline = {\n record(event: Omit<DebugEvent, \"id\">): DebugEvent {\n const fullEvent = { ...event, id: nextId++ } as DebugEvent;\n events.push(fullEvent);\n\n // Batch eviction — single splice instead of per-element shift\n const overflow = events.length - maxEvents;\n if (overflow > 0) {\n events.splice(0, overflow);\n }\n\n // Notify listeners\n for (const listener of listeners) {\n try {\n listener(fullEvent);\n } catch (err) {\n // A6: Log listener errors in dev mode instead of swallowing silently\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\"\n ) {\n console.error(\n \"[Directive DebugTimeline] Listener threw:\",\n err instanceof Error ? err.message : err,\n );\n }\n }\n }\n\n return fullEvent;\n },\n\n getEvents(): DebugEvent[] {\n return [...events];\n },\n\n getEventsForAgent(agentId: string): DebugEvent[] {\n return events.filter((e) => e.agentId === agentId);\n },\n\n getEventsByType<T extends DebugEventType>(\n type: T,\n ): Extract<DebugEvent, { type: T }>[] {\n return events.filter((e) => e.type === type) as Extract<\n DebugEvent,\n { type: T }\n >[];\n },\n\n getEventsAtSnapshot(snapshotId: number): DebugEvent[] {\n return events.filter((e) => e.snapshotId === snapshotId);\n },\n\n getEventsInRange(startMs: number, endMs: number): DebugEvent[] {\n return events.filter(\n (e) => e.timestamp >= startMs && e.timestamp <= endMs,\n );\n },\n\n forkFrom(snapshotId: number): void {\n // A8: Single reverse scan instead of two .filter() passes\n let cutoffId = -1;\n for (let i = events.length - 1; i >= 0; i--) {\n if (\n events[i]!.snapshotId !== null &&\n events[i]!.snapshotId! <= snapshotId\n ) {\n cutoffId = events[i]!.id;\n break;\n }\n }\n\n if (cutoffId >= 0) {\n // Find the index to slice at (events are monotonic by id)\n let sliceEnd = events.length;\n for (let i = events.length - 1; i >= 0; i--) {\n if (events[i]!.id <= cutoffId) {\n sliceEnd = i + 1;\n break;\n }\n }\n events = events.slice(0, sliceEnd);\n } else {\n // No matching events — clear all\n events = [];\n }\n\n // Navigate the system to the snapshot\n if (goToSnapshot) {\n goToSnapshot(snapshotId);\n }\n },\n\n export(): string {\n return JSON.stringify({ version: 1, events, nextId });\n },\n\n import(json: string): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch {\n throw new Error(\"[Directive DebugTimeline] Invalid JSON\");\n }\n\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"[Directive DebugTimeline] Invalid timeline data\");\n }\n\n // Prototype pollution defense\n for (const key of Object.keys(parsed)) {\n if (BLOCKED_IMPORT_KEYS.has(key)) {\n throw new Error(\n `[Directive DebugTimeline] Blocked key in import: ${key}`,\n );\n }\n }\n\n const data = parsed as {\n version?: number;\n events?: unknown[];\n nextId?: number;\n };\n\n if (!Array.isArray(data.events)) {\n throw new Error(\"[Directive DebugTimeline] Missing events array\");\n }\n\n // Validate each event has required fields\n const validated: DebugEvent[] = [];\n for (const evt of data.events) {\n if (!evt || typeof evt !== \"object\") {\n continue;\n }\n\n // Prototype pollution defense on event objects\n for (const key of Object.keys(evt)) {\n if (BLOCKED_IMPORT_KEYS.has(key)) {\n throw new Error(\n `[Directive DebugTimeline] Blocked key in event: ${key}`,\n );\n }\n }\n\n const e = evt as Record<string, unknown>;\n // A12: Also validate that event type is a known DebugEventType\n if (\n typeof e.id === \"number\" &&\n typeof e.type === \"string\" &&\n KNOWN_EVENT_TYPES.has(e.type) &&\n typeof e.timestamp === \"number\"\n ) {\n validated.push(evt as DebugEvent);\n }\n }\n\n // Enforce maxEvents cap on imported data\n events =\n validated.length > maxEvents ? validated.slice(-maxEvents) : validated;\n nextId = typeof data.nextId === \"number\" ? data.nextId : validated.length;\n },\n\n clear(): void {\n events = [];\n nextId = 0;\n },\n\n subscribe(listener: DebugTimelineListener): () => void {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\n };\n },\n\n get length(): number {\n return events.length;\n },\n };\n\n return timeline;\n}\n\n// ============================================================================\n// Plugin Factory\n// ============================================================================\n\n/**\n * Create a Directive plugin that bridges core constraint/resolver events\n * to the debug timeline.\n *\n * @example\n * ```typescript\n * const timeline = createDebugTimeline();\n * const plugin = createDebugTimelinePlugin(timeline, () => system.history?.currentIndex ?? null);\n * ```\n */\nexport function createDebugTimelinePlugin(\n timeline: DebugTimeline,\n getSnapshotId: () => number | null,\n): Plugin {\n const resolverStartTimes = new Map<string, number>();\n\n return {\n name: \"directive-ai-debug-timeline\",\n\n onConstraintEvaluate(id: string, active: boolean) {\n timeline.record({\n type: \"constraint_evaluate\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n constraintId: id,\n fired: active,\n });\n },\n\n onResolverStart(resolver: string, req) {\n resolverStartTimes.set(resolver, Date.now());\n timeline.record({\n type: \"resolver_start\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n resolverId: resolver,\n requirementType: req.requirement.type,\n });\n },\n\n onResolverComplete(resolver: string) {\n const startTime = resolverStartTimes.get(resolver);\n resolverStartTimes.delete(resolver);\n timeline.record({\n type: \"resolver_complete\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n resolverId: resolver,\n durationMs: startTime ? Date.now() - startTime : 0,\n });\n },\n\n onResolverError(resolver: string, _req, error) {\n const startTime = resolverStartTimes.get(resolver);\n resolverStartTimes.delete(resolver);\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n timeline.record({\n type: \"resolver_error\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n resolverId: resolver,\n errorMessage,\n durationMs: startTime ? Date.now() - startTime : 0,\n });\n },\n };\n}\n","/**\n * Shared guardrail and retry utilities — used by both single-agent and multi-agent orchestrators.\n *\n * Extracted from agent-orchestrator.ts to enable reuse without circular dependencies.\n * Internal module — not a public subpath export.\n *\n * @module\n */\n\nimport type {\n AgentLike,\n AgentRetryConfig,\n AgentRunner,\n GuardrailContext,\n GuardrailFn,\n GuardrailResult,\n GuardrailRetryConfig,\n NamedGuardrail,\n RunOptions,\n RunResult,\n} from \"./types.js\";\n\n// ============================================================================\n// Guardrail Helpers\n// ============================================================================\n\n/**\n * Normalize a bare guardrail function or a {@link NamedGuardrail} into a consistent\n * {@link NamedGuardrail} shape. Bare functions are wrapped with a generated name\n * and `critical: true` by default.\n *\n * @param guardrail - A guardrail function or named guardrail object.\n * @param index - Positional index used to generate a unique name for bare functions.\n * @param type - Guardrail category label (e.g. `\"input\"`, `\"output\"`) included in the generated name.\n * @returns A {@link NamedGuardrail} with a guaranteed `name`, `fn`, and `critical` flag.\n */\nexport function normalizeGuardrail<T>(\n guardrail: GuardrailFn<T> | NamedGuardrail<T>,\n index: number,\n type: string,\n): NamedGuardrail<T> {\n if (typeof guardrail === \"function\") {\n return {\n name: `${type}-guardrail-${index}`,\n fn: guardrail,\n critical: true,\n };\n }\n\n return guardrail;\n}\n\n/**\n * Calculate the delay in milliseconds before the next guardrail retry attempt.\n * Supports exponential, linear, and fixed backoff strategies.\n *\n * @param attempt - The just-completed attempt number (1-based).\n * @param config - Retry configuration controlling backoff strategy and delay bounds.\n * @returns Delay in milliseconds, clamped to {@link GuardrailRetryConfig.maxDelayMs}.\n */\nexport function calculateRetryDelay(\n attempt: number,\n config: GuardrailRetryConfig,\n): number {\n const {\n backoff = \"exponential\",\n baseDelayMs = 100,\n maxDelayMs = 5000,\n } = config;\n let delay: number;\n switch (backoff) {\n case \"exponential\":\n delay = baseDelayMs * 2 ** (attempt - 1);\n break;\n case \"linear\":\n delay = baseDelayMs * attempt;\n break;\n default:\n delay = baseDelayMs;\n }\n\n return Math.min(delay, maxDelayMs);\n}\n\n/** Sleep that respects an abort signal — resolves early if aborted */\nfunction abortableDelay(ms: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) {\n return Promise.reject(signal.reason ?? new Error(\"Aborted\"));\n }\n\n return new Promise<void>((resolve, reject) => {\n if (!signal) {\n setTimeout(resolve, ms);\n\n return;\n }\n\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal.reason ?? new Error(\"Aborted\"));\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/**\n * Execute a guardrail function, retrying on thrown errors up to the configured\n * number of attempts. Delays between retries respect the guardrail's\n * {@link GuardrailRetryConfig} and can be cancelled via an {@link AbortSignal}.\n *\n * @remarks\n * When all retries are exhausted the function returns a structured\n * `{ passed: false }` result rather than re-throwing, so callers can classify\n * the failure as a guardrail rejection instead of an unhandled error.\n *\n * @param guardrail - The named guardrail to execute (includes retry config).\n * @param data - The guardrail input data (input text, output value, or tool call).\n * @param context - Shared guardrail context providing access to system facts.\n * @param signal - Optional abort signal to cancel pending retry delays.\n * @returns The guardrail result from a successful attempt, or a failure result after all retries.\n */\nexport async function executeGuardrailWithRetry<T>(\n guardrail: NamedGuardrail<T>,\n data: T,\n context: GuardrailContext,\n signal?: AbortSignal,\n): Promise<GuardrailResult> {\n const { retry } = guardrail;\n const maxAttempts = Math.max(retry?.attempts ?? 1, 1);\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await guardrail.fn(data, context);\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Only retry if we have more attempts left\n if (attempt < maxAttempts) {\n const delay = calculateRetryDelay(attempt, retry ?? {});\n await abortableDelay(delay, signal);\n }\n }\n }\n\n // All retries exhausted — return structured failure instead of raw throw\n // so callers can classify this as a guardrail failure, not an unhandled error\n return {\n passed: false,\n reason: `Guardrail \"${guardrail.name}\" failed after ${maxAttempts} attempt(s): ${lastError!.message}`,\n };\n}\n\n// ============================================================================\n// Agent Retry Helpers\n// ============================================================================\n\n/**\n * Calculate the delay in milliseconds before the next agent-level retry attempt.\n * Supports exponential, linear, and fixed backoff strategies.\n *\n * @param attempt - The just-completed attempt number (1-based).\n * @param config - Retry configuration controlling backoff strategy and delay bounds.\n * @returns Delay in milliseconds, clamped to {@link AgentRetryConfig.maxDelayMs}.\n */\nexport function calculateAgentRetryDelay(\n attempt: number,\n config: AgentRetryConfig,\n): number {\n const {\n backoff = \"exponential\",\n baseDelayMs = 1000,\n maxDelayMs = 30000,\n } = config;\n let delay: number;\n switch (backoff) {\n case \"exponential\":\n delay = baseDelayMs * 2 ** (attempt - 1);\n break;\n case \"linear\":\n delay = baseDelayMs * attempt;\n break;\n default:\n delay = baseDelayMs;\n }\n\n return Math.min(delay, maxDelayMs);\n}\n\n/**\n * Execute an agent run via the provided {@link AgentRunner}, retrying on errors up to\n * the configured number of attempts. The optional `isRetryable` predicate and `onRetry`\n * callback in the retry config control which errors are retried and provide observability.\n *\n * @remarks\n * Unlike {@link executeGuardrailWithRetry}, this function re-throws the last error\n * when all retries are exhausted, since agent failures are not structured guardrail\n * rejections.\n *\n * @param runner - The agent runner function that performs the LLM call.\n * @param agent - The agent definition passed through to the runner.\n * @param input - The user input string for the agent run.\n * @param options - Optional run options including abort signal and message callbacks.\n * @param retryConfig - Optional retry configuration (attempts, backoff, predicates).\n * @returns The successful run result from the first passing attempt.\n * @throws The last error encountered when all retry attempts are exhausted.\n */\nexport async function executeAgentWithRetry<T>(\n runner: AgentRunner,\n agent: AgentLike,\n input: string,\n options: RunOptions | undefined,\n retryConfig: AgentRetryConfig | undefined,\n): Promise<RunResult<T>> {\n const maxAttempts = Math.max(retryConfig?.attempts ?? 1, 1);\n const isRetryable = retryConfig?.isRetryable ?? (() => true);\n const onRetry = retryConfig?.onRetry;\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await runner<T>(agent, input, options);\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Check if error is retryable and we have more attempts\n if (attempt < maxAttempts) {\n let retryable = true;\n try {\n retryable = isRetryable(lastError);\n } catch {\n // If isRetryable itself throws, treat as non-retryable\n break;\n }\n if (!retryable) {\n break;\n }\n const delay = calculateAgentRetryDelay(attempt, retryConfig ?? {});\n try {\n onRetry?.(attempt, lastError, delay);\n } catch {\n // onRetry is best-effort — don't let callback errors disrupt retry logic\n }\n await abortableDelay(delay, options?.signal);\n } else {\n // Out of attempts\n break;\n }\n }\n }\n // All retries exhausted, throw the last error\n throw lastError!;\n}\n","/**\n * Health Monitor — tracks per-agent health metrics for self-healing networks.\n *\n * Pure computation module with zero Directive dependency.\n * Maintains a rolling window of success/failure events and computes a health\n * score from 0-100 based on configurable weights.\n *\n * @module\n */\n\nimport type { HealthMonitorConfig } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Circuit state values */\nexport type HealthCircuitState = \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\";\n\n/** Per-agent health metrics */\nexport interface AgentHealthMetrics {\n agentId: string;\n circuitState: HealthCircuitState;\n successRate: number;\n avgLatencyMs: number;\n recentFailures: number;\n recentSuccesses: number;\n healthScore: number;\n /** Last N error messages (most recent last) */\n lastErrors: string[];\n}\n\n/** Internal event record */\ninterface HealthEvent {\n success: boolean;\n latencyMs: number;\n timestamp: number;\n errorMessage?: string;\n}\n\n/** Health monitor instance */\nexport interface HealthMonitor {\n recordSuccess(agentId: string, latencyMs: number): void;\n recordFailure(agentId: string, latencyMs: number, error?: Error): void;\n getMetrics(agentId: string): AgentHealthMetrics;\n getAllMetrics(): Record<string, AgentHealthMetrics>;\n /** Returns a 0-100 health score. Returns 50 (neutral) when no data is available for the agent. */\n getHealthScore(agentId: string): number;\n updateCircuitState(agentId: string, state: HealthCircuitState): void;\n /** Reset all metrics. Useful for testing. */\n reset(): void;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\nconst DEFAULT_WINDOW_MS = 60_000;\nconst DEFAULT_MAX_NORMAL_LATENCY_MS = 5_000;\nconst DEFAULT_MAX_EVENTS_PER_AGENT = 1_000;\nconst DEFAULT_MAX_STORED_ERRORS = 5;\nconst DEFAULT_WEIGHTS = {\n successRate: 0.5,\n latency: 0.3,\n circuitState: 0.2,\n};\n\n/**\n * Create a health monitor that tracks per-agent metrics.\n *\n * @example\n * ```typescript\n * const monitor = createHealthMonitor({ windowMs: 30000 });\n *\n * monitor.recordSuccess(\"agent-a\", 120);\n * monitor.recordFailure(\"agent-a\", 5000, new Error(\"timeout\"));\n *\n * const score = monitor.getHealthScore(\"agent-a\");\n * console.log(score); // 0-100\n * ```\n */\nexport function createHealthMonitor(\n config: HealthMonitorConfig = {},\n): HealthMonitor {\n const windowMs = config.windowMs ?? DEFAULT_WINDOW_MS;\n const maxNormalLatencyMs =\n config.maxNormalLatencyMs ?? DEFAULT_MAX_NORMAL_LATENCY_MS;\n const maxEventsPerAgent =\n config.maxEventsPerAgent ?? DEFAULT_MAX_EVENTS_PER_AGENT;\n const weights = {\n successRate: config.weights?.successRate ?? DEFAULT_WEIGHTS.successRate,\n latency: config.weights?.latency ?? DEFAULT_WEIGHTS.latency,\n circuitState: config.weights?.circuitState ?? DEFAULT_WEIGHTS.circuitState,\n };\n\n // Validate config\n if (!Number.isFinite(windowMs) || windowMs <= 0) {\n throw new Error(\n \"[Directive HealthMonitor] windowMs must be a positive number\",\n );\n }\n if (!Number.isFinite(maxNormalLatencyMs) || maxNormalLatencyMs <= 0) {\n throw new Error(\n \"[Directive HealthMonitor] maxNormalLatencyMs must be a positive number\",\n );\n }\n if (!Number.isFinite(maxEventsPerAgent) || maxEventsPerAgent < 1) {\n throw new Error(\"[Directive HealthMonitor] maxEventsPerAgent must be >= 1\");\n }\n\n // A14: Validate individual weight bounds\n for (const [key, value] of Object.entries(weights)) {\n if (value < 0 || value > 1) {\n throw new Error(\n `[Directive HealthMonitor] weight \"${key}\" must be between 0 and 1 (got ${value})`,\n );\n }\n }\n\n // Validate weights sum approximately to 1.0\n const weightSum =\n weights.successRate + weights.latency + weights.circuitState;\n if (Math.abs(weightSum - 1.0) > 0.01) {\n throw new Error(\n `[Directive HealthMonitor] weights must sum to ~1.0 (tolerance: ±0.01, got ${weightSum.toFixed(4)})`,\n );\n }\n\n const events = new Map<string, HealthEvent[]>();\n const circuitStates = new Map<string, HealthCircuitState>();\n\n // L4: Generation counter for getAllMetrics caching\n let generation = 0;\n let cachedAll: Record<string, AgentHealthMetrics> | null = null;\n let cachedGen = -1;\n\n function getAgentEvents(agentId: string): HealthEvent[] {\n let agentEvents = events.get(agentId);\n if (!agentEvents) {\n agentEvents = [];\n events.set(agentId, agentEvents);\n }\n\n return agentEvents;\n }\n\n function pruneAndCap(agentEvents: HealthEvent[], now: number): void {\n // Time-based pruning: find first event within the window\n const cutoff = now - windowMs;\n let firstValid = 0;\n while (\n firstValid < agentEvents.length &&\n agentEvents[firstValid]!.timestamp < cutoff\n ) {\n firstValid++;\n }\n\n // Cap-based pruning: ensure we don't exceed maxEventsPerAgent\n const excessFromCap = agentEvents.length - firstValid - maxEventsPerAgent;\n if (excessFromCap > 0) {\n firstValid += excessFromCap;\n }\n\n // Batch remove all expired/excess events in one operation\n if (firstValid > 0) {\n agentEvents.splice(0, firstValid);\n }\n }\n\n function computeScore(agentId: string): number {\n const agentEvents = events.get(agentId);\n if (!agentEvents || agentEvents.length === 0) {\n return 50; // No data = neutral\n }\n\n const now = Date.now();\n pruneAndCap(agentEvents, now);\n\n if (agentEvents.length === 0) {\n return 50;\n }\n\n const successes = agentEvents.filter((e) => e.success).length;\n const successRate = successes / agentEvents.length;\n\n const avgLatency =\n agentEvents.reduce((s, e) => s + e.latencyMs, 0) / agentEvents.length;\n const normalizedLatency = Math.min(avgLatency / maxNormalLatencyMs, 1);\n\n const state = circuitStates.get(agentId) ?? \"CLOSED\";\n const circuitScore =\n state === \"CLOSED\" ? 1 : state === \"HALF_OPEN\" ? 0.5 : 0;\n\n const raw =\n successRate * weights.successRate +\n (1 - normalizedLatency) * weights.latency +\n circuitScore * weights.circuitState;\n\n return Math.round(raw * 100);\n }\n\n function buildMetrics(agentId: string): AgentHealthMetrics {\n const agentEvents = getAgentEvents(agentId);\n const now = Date.now();\n pruneAndCap(agentEvents, now);\n\n const successes = agentEvents.filter((e) => e.success).length;\n const failures = agentEvents.length - successes;\n const successRate =\n agentEvents.length > 0 ? successes / agentEvents.length : 0;\n const avgLatencyMs =\n agentEvents.length > 0\n ? agentEvents.reduce((s, e) => s + e.latencyMs, 0) / agentEvents.length\n : 0;\n\n // Collect last N error messages\n const lastErrors: string[] = [];\n for (\n let i = agentEvents.length - 1;\n i >= 0 && lastErrors.length < DEFAULT_MAX_STORED_ERRORS;\n i--\n ) {\n if (agentEvents[i]!.errorMessage) {\n lastErrors.unshift(agentEvents[i]!.errorMessage!);\n }\n }\n\n return {\n agentId,\n circuitState: circuitStates.get(agentId) ?? \"CLOSED\",\n successRate,\n avgLatencyMs,\n recentFailures: failures,\n recentSuccesses: successes,\n healthScore: computeScore(agentId),\n lastErrors,\n };\n }\n\n return {\n recordSuccess(agentId: string, latencyMs: number): void {\n const agentEvents = getAgentEvents(agentId);\n agentEvents.push({ success: true, latencyMs, timestamp: Date.now() });\n // A9: Prune on write path to prevent unbounded growth between reads\n pruneAndCap(agentEvents, Date.now());\n generation++;\n },\n\n recordFailure(agentId: string, latencyMs: number, error?: Error): void {\n const agentEvents = getAgentEvents(agentId);\n agentEvents.push({\n success: false,\n latencyMs,\n timestamp: Date.now(),\n errorMessage: error?.message,\n });\n // A9: Prune on write path to prevent unbounded growth between reads\n pruneAndCap(agentEvents, Date.now());\n generation++;\n },\n\n getMetrics(agentId: string): AgentHealthMetrics {\n return buildMetrics(agentId);\n },\n\n getAllMetrics(): Record<string, AgentHealthMetrics> {\n // L4: Return cached result when no writes have occurred\n if (generation === cachedGen && cachedAll) {\n return cachedAll;\n }\n\n const result: Record<string, AgentHealthMetrics> = Object.create(null);\n for (const agentId of events.keys()) {\n result[agentId] = buildMetrics(agentId);\n }\n\n cachedAll = result;\n cachedGen = generation;\n\n return result;\n },\n\n getHealthScore(agentId: string): number {\n return computeScore(agentId);\n },\n\n updateCircuitState(agentId: string, state: HealthCircuitState): void {\n circuitStates.set(agentId, state);\n generation++;\n },\n\n reset(): void {\n events.clear();\n circuitStates.clear();\n generation++;\n cachedAll = null;\n cachedGen = -1;\n },\n };\n}\n","/**\n * Meta Context - Format system metadata for LLM consumption\n *\n * Reads system.inspect() and produces a concise, structured context string\n * that helps LLMs understand the system's constraints, resolvers, modules,\n * and annotated facts.\n *\n * @example\n * ```typescript\n * import { toAIContext } from \"@directive-run/ai\";\n *\n * const context = toAIContext(system);\n * // Use in custom prompt building\n * ```\n */\n\nimport type { SystemInspection, DefinitionMeta } from \"@directive-run/core\";\n\n// ============================================================================\n// Format Helpers\n// ============================================================================\n\n/** Format tags/category as bracketed suffix: [auth, critical] */\nfunction formatTags(meta: DefinitionMeta): string {\n const parts: string[] = [];\n if (meta.category) parts.push(meta.category);\n if (meta.tags?.length) {\n for (const tag of meta.tags) {\n if (tag !== meta.category) parts.push(tag);\n }\n }\n\n return parts.length > 0 ? ` [${parts.join(\", \")}]` : \"\";\n}\n\n/** Format a single definition entry: \"id (Label): Description [tags]\" */\nfunction formatEntry(\n id: string,\n meta: DefinitionMeta | undefined,\n): string | null {\n if (!meta) return null;\n\n const label = meta.label ?? id;\n const desc = meta.description ? `: ${meta.description}` : \"\";\n const tags = formatTags(meta);\n const prefix = meta.label ? `${id} (${label})` : id;\n\n return `- ${prefix}${desc}${tags}`;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Format a SystemInspection into a concise context string for LLM consumption.\n *\n * Only includes definitions that have meta annotations. Sections with no\n * annotated definitions are omitted entirely to minimize token usage.\n *\n * @param inspection - Result of system.inspect()\n * @returns Formatted context string, or empty string if no meta exists\n */\nexport function formatSystemMeta(inspection: SystemInspection): string {\n const sections: string[] = [];\n\n // Modules\n const moduleEntries = inspection.modules\n .map((m) => formatEntry(m.id, m.meta))\n .filter(Boolean);\n if (moduleEntries.length > 0) {\n sections.push(`### Modules\\n${moduleEntries.join(\"\\n\")}`);\n }\n\n // Active constraints (only those with meta)\n const activeConstraints = inspection.constraints\n .filter((c) => c.active && c.meta)\n .map((c) => formatEntry(c.id, c.meta))\n .filter(Boolean);\n if (activeConstraints.length > 0) {\n sections.push(`### Active Constraints\\n${activeConstraints.join(\"\\n\")}`);\n }\n\n // Unmet requirements (with constraint label if available)\n if (inspection.unmet.length > 0) {\n const constraintMetaMap = new Map(\n inspection.constraints\n .filter((c) => c.meta?.label)\n .map((c) => [c.id, c.meta!.label!]),\n );\n\n const reqEntries = inspection.unmet.map((req) => {\n const constraintLabel =\n constraintMetaMap.get(req.fromConstraint) ?? req.fromConstraint;\n\n return `- ${req.requirement.type} — from \"${constraintLabel}\"`;\n });\n sections.push(`### Unmet Requirements\\n${reqEntries.join(\"\\n\")}`);\n }\n\n // Resolver definitions (only those with meta)\n const resolverEntries = inspection.resolverDefs\n .map((r) => formatEntry(r.id, r.meta))\n .filter(Boolean);\n if (resolverEntries.length > 0) {\n sections.push(`### Resolvers\\n${resolverEntries.join(\"\\n\")}`);\n }\n\n // Events (only those with meta)\n const eventEntries = inspection.events\n .map((e) => formatEntry(e.name, e.meta))\n .filter(Boolean);\n if (eventEntries.length > 0) {\n sections.push(`### Events\\n${eventEntries.join(\"\\n\")}`);\n }\n\n // Facts with annotations (only those with meta)\n const factEntries = inspection.facts\n .map((f) => formatEntry(f.key, f.meta))\n .filter(Boolean);\n if (factEntries.length > 0) {\n sections.push(`### Annotated Facts\\n${factEntries.join(\"\\n\")}`);\n }\n\n // Effects (only those with meta)\n const effectEntries = inspection.effects\n .map((e) => formatEntry(e.id, e.meta))\n .filter(Boolean);\n if (effectEntries.length > 0) {\n sections.push(`### Effects\\n${effectEntries.join(\"\\n\")}`);\n }\n\n // Derivations (only those with meta)\n const derivationEntries = inspection.derivations\n .map((d) => formatEntry(d.id, d.meta))\n .filter(Boolean);\n if (derivationEntries.length > 0) {\n sections.push(`### Derivations\\n${derivationEntries.join(\"\\n\")}`);\n }\n\n if (sections.length === 0) {\n return \"\";\n }\n\n return `## System Context\\n\\n${sections.join(\"\\n\\n\")}`;\n}\n\n/**\n * Convenience: inspect a system and format its metadata for LLM context.\n *\n * @param system - Any object with an inspect() method returning SystemInspection\n * @returns Formatted context string, or empty string if no meta exists\n *\n * @example\n * ```typescript\n * const context = toAIContext(system);\n * if (context) {\n * agent.instructions += \"\\n\\n\" + context;\n * }\n * ```\n */\nexport function toAIContext(system: {\n inspect(): SystemInspection;\n}): string {\n return formatSystemMeta(system.inspect());\n}\n","/**\n * Shared types for AI adapter — used by orchestrator, guardrails, helpers, and stack.\n */\n\nimport type {\n ModuleSchema,\n Requirement,\n SchemaType,\n} from \"@directive-run/core\";\nimport { t } from \"@directive-run/core\";\nimport type {\n BreakpointRequest,\n BreakpointState as BreakpointStateFromBreakpoints,\n} from \"./breakpoints.js\";\n\n// ============================================================================\n// Agent Types (LLM-agnostic)\n// ============================================================================\n\n/** Simplified Agent interface */\nexport interface AgentLike {\n name: string;\n instructions?: string;\n model?: string;\n tools?: unknown[];\n}\n\n/** Agent run result */\nexport interface RunResult<T = unknown> {\n output: T;\n messages: Message[];\n toolCalls: ToolCall[];\n totalTokens: number;\n /** Breakdown of input vs output tokens, when available from the provider */\n tokenUsage?: TokenUsage;\n /** True when result was served from semantic cache */\n isCached?: boolean;\n}\n\n/** Breakdown of token usage by input/output */\nexport interface TokenUsage {\n inputTokens: number;\n outputTokens: number;\n}\n\n/** Message from agent run */\nexport interface Message {\n role: \"user\" | \"assistant\" | \"tool\" | \"system\";\n content: string;\n toolCallId?: string;\n}\n\n/** Tool call record */\nexport interface ToolCall {\n id: string;\n name: string;\n arguments: string;\n result?: string;\n}\n\n/** Run function type */\nexport type AgentRunner = <T = unknown>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n) => Promise<RunResult<T>>;\n\n/** Callback-based streaming run function (e.g. for SSE-based LLM APIs) */\nexport type StreamingCallbackRunner = (\n agent: AgentLike,\n input: string,\n callbacks: {\n onToken?: (token: string) => void;\n onToolStart?: (tool: string, id: string, args: string) => void;\n onToolEnd?: (tool: string, id: string, result: string) => void;\n onMessage?: (message: Message) => void;\n signal?: AbortSignal;\n },\n) => Promise<RunResult<unknown>>;\n\n/** Run options */\nexport interface RunOptions {\n maxTurns?: number;\n signal?: AbortSignal;\n onMessage?: (message: Message) => void;\n onToolCall?: (toolCall: ToolCall) => void | Promise<void>;\n}\n\n// ============================================================================\n// Adapter Lifecycle Hooks\n// ============================================================================\n\n/**\n * Lifecycle hooks for adapter-level observability.\n *\n * Attach to any adapter (runner or streaming runner) to trace, log,\n * or measure individual LLM calls without modifying application code.\n *\n * @example\n * ```typescript\n * const runner = createOpenAIRunner({\n * apiKey: process.env.OPENAI_API_KEY!,\n * hooks: {\n * onBeforeCall: ({ agent, input }) => console.log(`→ ${agent.name}`, input.slice(0, 50)),\n * onAfterCall: ({ durationMs, tokenUsage }) => {\n * metrics.track('llm_call', { durationMs, ...tokenUsage });\n * },\n * onError: ({ error }) => Sentry.captureException(error),\n * },\n * });\n * ```\n */\nexport interface AdapterHooks {\n /** Fires before each LLM API call. */\n onBeforeCall?: (event: {\n agent: AgentLike;\n input: string;\n timestamp: number;\n }) => void;\n\n /** Fires after a successful LLM API call. */\n onAfterCall?: (event: {\n agent: AgentLike;\n input: string;\n output: string;\n totalTokens: number;\n tokenUsage: TokenUsage;\n durationMs: number;\n timestamp: number;\n }) => void;\n\n /** Fires when an LLM API call fails. */\n onError?: (event: {\n agent: AgentLike;\n input: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n}\n\n// ============================================================================\n// Guardrail Types\n// ============================================================================\n\n/** Guardrail function */\nexport type GuardrailFn<T = unknown> = (\n data: T,\n context: GuardrailContext,\n) => GuardrailResult | Promise<GuardrailResult>;\n\n/** Guardrail context */\nexport interface GuardrailContext {\n agentName: string;\n input: string;\n facts: Record<string, unknown>;\n}\n\n/** Guardrail result */\nexport interface GuardrailResult {\n passed: boolean;\n reason?: string;\n transformed?: unknown;\n}\n\n/** Input guardrail data */\nexport interface InputGuardrailData {\n input: string;\n agentName: string;\n}\n\n/** Output guardrail data */\nexport interface OutputGuardrailData {\n output: unknown;\n agentName: string;\n input: string;\n messages: Message[];\n}\n\n/** Tool call guardrail data */\nexport interface ToolCallGuardrailData {\n toolCall: ToolCall;\n agentName: string;\n input: string;\n}\n\n/** Retry configuration for guardrails */\nexport interface GuardrailRetryConfig {\n /** Total attempts (1 = no retries, 2 = one retry, etc.). @default 1 */\n attempts?: number;\n /** @default \"exponential\" */\n backoff?: \"exponential\" | \"linear\" | \"fixed\";\n /** @default 100 */\n baseDelayMs?: number;\n /** @default 5000 */\n maxDelayMs?: number;\n}\n\n/** Named guardrail for better debugging */\nexport interface NamedGuardrail<T = unknown> {\n name: string;\n fn: GuardrailFn<T>;\n /** @default true */\n critical?: boolean;\n retry?: GuardrailRetryConfig;\n}\n\n/** Guardrails configuration */\nexport interface GuardrailsConfig {\n input?: Array<\n GuardrailFn<InputGuardrailData> | NamedGuardrail<InputGuardrailData>\n >;\n output?: Array<\n GuardrailFn<OutputGuardrailData> | NamedGuardrail<OutputGuardrailData>\n >;\n toolCall?: Array<\n GuardrailFn<ToolCallGuardrailData> | NamedGuardrail<ToolCallGuardrailData>\n >;\n}\n\n// ============================================================================\n// Retry Configuration\n// ============================================================================\n\n/** Retry configuration for agent runs */\nexport interface AgentRetryConfig {\n /** @default 1 */\n attempts?: number;\n /** @default \"exponential\" */\n backoff?: \"exponential\" | \"linear\" | \"fixed\";\n /** @default 1000 */\n baseDelayMs?: number;\n /** @default 30000 */\n maxDelayMs?: number;\n isRetryable?: (error: Error) => boolean;\n onRetry?: (attempt: number, error: Error, delayMs: number) => void;\n}\n\n// ============================================================================\n// Orchestrator State Types\n// ============================================================================\n\n/** Agent state in facts */\nexport interface AgentState {\n status: \"idle\" | \"running\" | \"paused\" | \"completed\" | \"error\";\n currentAgent: string | null;\n input: string | null;\n output: unknown | null;\n error: string | null;\n tokenUsage: number;\n turnCount: number;\n startedAt: number | null;\n completedAt: number | null;\n}\n\n/** Approval state */\nexport interface ApprovalState {\n pending: ApprovalRequest[];\n approved: string[];\n rejected: RejectedRequest[];\n}\n\n/** Rejected request with tracking information */\nexport interface RejectedRequest {\n id: string;\n reason?: string;\n rejectedAt: number;\n}\n\n/** Approval request */\nexport interface ApprovalRequest {\n id: string;\n type: \"tool_call\" | \"output\" | \"handoff\";\n agentName: string;\n description: string;\n data: unknown;\n requestedAt: number;\n}\n\n/** Combined orchestrator state */\nexport interface OrchestratorState {\n agent: AgentState;\n approval: ApprovalState;\n conversation: Message[];\n toolCalls: ToolCall[];\n}\n\n// ============================================================================\n// Orchestrator Config Types\n// ============================================================================\n\n/** Constraint for orchestrator */\nexport interface OrchestratorConstraint<F extends Record<string, unknown>> {\n when: (facts: F & OrchestratorState) => boolean | Promise<boolean>;\n require: Requirement | ((facts: F & OrchestratorState) => Requirement);\n priority?: number;\n}\n\n/** Resolver context for orchestrator */\nexport interface OrchestratorResolverContext<\n F extends Record<string, unknown>,\n> {\n facts: F & OrchestratorState;\n runAgent: <T>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n ) => Promise<RunResult<T>>;\n signal: AbortSignal;\n}\n\n/** Resolver for orchestrator */\nexport interface OrchestratorResolver<\n F extends Record<string, unknown>,\n R extends Requirement = Requirement,\n> {\n requirement: (req: Requirement) => req is R;\n key?: (req: R) => string;\n resolve: (\n req: R,\n context: OrchestratorResolverContext<F>,\n ) => void | Promise<void>;\n}\n\n/** Lifecycle hooks for observability */\nexport interface OrchestratorLifecycleHooks {\n onAgentStart?: (event: {\n agentName: string;\n input: string;\n timestamp: number;\n }) => void;\n onAgentComplete?: (event: {\n agentName: string;\n input: string;\n output: unknown;\n tokenUsage: number;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentError?: (event: {\n agentName: string;\n input: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n onGuardrailCheck?: (event: {\n agentId?: string;\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n passed: boolean;\n reason?: string;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentRetry?: (event: {\n agentName: string;\n input: string;\n attempt: number;\n error: Error;\n delayMs: number;\n timestamp: number;\n }) => void;\n /** Called when a breakpoint is hit and waiting for resolution. */\n onBreakpoint?: (request: BreakpointRequest) => void;\n}\n\n/** Lifecycle hooks for multi-agent orchestrator observability */\nexport interface MultiAgentLifecycleHooks {\n onAgentStart?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n timestamp: number;\n }) => void;\n onAgentComplete?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n output: unknown;\n tokenUsage: number;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentError?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n onGuardrailCheck?: (event: {\n agentId: string;\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n passed: boolean;\n reason?: string;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentRetry?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n attempt: number;\n error: Error;\n delayMs: number;\n timestamp: number;\n }) => void;\n onHandoff?: (request: {\n id: string;\n fromAgent: string;\n toAgent: string;\n input: string;\n requestedAt: number;\n }) => void;\n onHandoffComplete?: (result: {\n request: { id: string; fromAgent: string; toAgent: string };\n completedAt: number;\n }) => void;\n onPatternStart?: (event: {\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n input: string;\n timestamp: number;\n }) => void;\n onPatternComplete?: (event: {\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n durationMs: number;\n timestamp: number;\n error?: Error;\n }) => void;\n onDagNodeStart?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n timestamp: number;\n }) => void;\n onDagNodeComplete?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n durationMs: number;\n timestamp: number;\n }) => void;\n onDagNodeError?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n onDagNodeSkipped?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n reason: string;\n timestamp: number;\n }) => void;\n onHealthChange?: (event: {\n agentId: string;\n oldScore: number;\n newScore: number;\n timestamp: number;\n }) => void;\n onReroute?: (event: RerouteEvent) => void;\n /** Called when a breakpoint is hit and waiting for resolution. */\n onBreakpoint?: (request: BreakpointRequest) => void;\n /** Called when a cross-agent derivation value updates */\n onDerivationUpdate?: (event: {\n derivationId: string;\n value: unknown;\n timestamp: number;\n }) => void;\n /** Called when a cross-agent derivation throws an error */\n onDerivationError?: (event: {\n derivationId: string;\n error: Error;\n timestamp: number;\n }) => void;\n /** Called when scratchpad values are updated */\n onScratchpadUpdate?: (event: { keys: string[]; timestamp: number }) => void;\n /** Called when a task starts executing */\n onTaskStart?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n timestamp: number;\n }) => void;\n /** Called when a task completes successfully */\n onTaskComplete?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n durationMs: number;\n timestamp: number;\n }) => void;\n /** Called when a task fails */\n onTaskError?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n /** Called when a task reports progress */\n onTaskProgress?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n percent: number;\n message?: string;\n timestamp: number;\n }) => void;\n /** Called when a pattern checkpoint is saved */\n onCheckpointSave?: (event: {\n checkpointId: string;\n patternType: string;\n step: number;\n timestamp: number;\n }) => void;\n /** Called when a checkpoint save fails */\n onCheckpointError?: (event: {\n patternType: string;\n step: number;\n error: Error;\n timestamp: number;\n }) => void;\n}\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/** Error codes for guardrail errors */\nexport type GuardrailErrorCode =\n | \"INPUT_GUARDRAIL_FAILED\"\n | \"OUTPUT_GUARDRAIL_FAILED\"\n | \"TOOL_CALL_GUARDRAIL_FAILED\"\n | \"APPROVAL_REJECTED\"\n | \"BUDGET_EXCEEDED\"\n | \"RATE_LIMIT_EXCEEDED\"\n | \"AGENT_ERROR\";\n\n/**\n * Structured error for guardrail failures.\n *\n * **Security:** The `input` and `data` properties are non-enumerable to prevent\n * accidental leakage of sensitive data via JSON.stringify or console.log.\n */\nexport class GuardrailError extends Error {\n readonly code: GuardrailErrorCode;\n readonly guardrailName: string;\n readonly guardrailType: \"input\" | \"output\" | \"toolCall\";\n readonly userMessage: string;\n declare readonly data: unknown;\n readonly agentName: string;\n declare readonly input: string;\n\n constructor(options: {\n code: GuardrailErrorCode;\n message: string;\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n userMessage?: string;\n data?: unknown;\n agentName: string;\n input: string;\n cause?: Error;\n }) {\n super(options.message, { cause: options.cause });\n this.name = \"GuardrailError\";\n this.code = options.code;\n this.guardrailName = options.guardrailName;\n this.guardrailType = options.guardrailType;\n this.userMessage = options.userMessage ?? options.message;\n this.agentName = options.agentName;\n\n Object.defineProperty(this, \"input\", {\n value: options.input,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n Object.defineProperty(this, \"data\", {\n value: options.data,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n guardrailName: this.guardrailName,\n guardrailType: this.guardrailType,\n userMessage: this.userMessage,\n agentName: this.agentName,\n };\n }\n}\n\n/** Check if an error is a GuardrailError. */\nexport function isGuardrailError(error: unknown): error is GuardrailError {\n return error instanceof GuardrailError;\n}\n\n// ============================================================================\n// Schema Validation Types (used by built-in guardrails)\n// ============================================================================\n\n/** Schema validation result */\nexport interface SchemaValidationResult {\n valid: boolean;\n errors?: string[];\n}\n\n/** Schema validator function type */\nexport type SchemaValidator<_T = unknown> = (\n value: unknown,\n) => SchemaValidationResult | boolean;\n\n// ============================================================================\n// Bridge Schema Constants\n// ============================================================================\n\nexport const AGENT_KEY = \"__agent\" as const;\nexport const APPROVAL_KEY = \"__approval\" as const;\nexport const CONVERSATION_KEY = \"__conversation\" as const;\nexport const TOOL_CALLS_KEY = \"__toolCalls\" as const;\nexport const BREAKPOINT_KEY = \"__breakpoints\" as const;\n\n// ============================================================================\n// DAG Execution Types (Multi-Agent)\n// ============================================================================\n\n/** Status of a DAG node during execution */\nexport type DagNodeStatus =\n | \"pending\"\n | \"ready\"\n | \"running\"\n | \"completed\"\n | \"error\"\n | \"skipped\";\n\n/** Execution context available to DAG node callbacks */\nexport interface DagExecutionContext {\n /** Original input to the DAG */\n input: string;\n /** Outputs keyed by node ID (populated as nodes complete) */\n outputs: Record<string, unknown>;\n /** Statuses keyed by node ID */\n statuses: Record<string, DagNodeStatus>;\n /** Error messages keyed by node ID */\n errors: Record<string, string>;\n /** Full RunResult keyed by node ID */\n results: Record<string, RunResult<unknown>>;\n}\n\n/** A node in a DAG execution pattern */\nexport interface DagNode {\n /** Registered handler ID (agent or task) to run for this node */\n handler: string;\n /** Upstream node IDs this node depends on */\n deps?: string[];\n /** Conditional edge — evaluated when deps are met. @default unconditional */\n when?: (context: DagExecutionContext) => boolean;\n /** Build input string for this node's agent. @default JSON.stringify(upstream outputs) */\n transform?: (context: DagExecutionContext) => string;\n /** Per-node timeout (ms) */\n timeout?: number;\n /** Tiebreaker when multiple nodes are ready (higher = first). @default 0 */\n priority?: number;\n}\n\n/** DAG execution pattern — nodes are agents, edges are reactive conditions */\nexport interface DagPattern<T = unknown> {\n type: \"dag\";\n /** Nodes keyed by node ID */\n nodes: Record<string, DagNode>;\n /** Merge all node outputs into the final result */\n merge: (context: DagExecutionContext) => T | Promise<T>;\n /** Overall DAG timeout (ms) */\n timeout?: number;\n /** Maximum nodes running concurrently. @default Infinity. Consider setting this to avoid API rate limits. */\n maxConcurrent?: number;\n /** Error handling strategy. @default \"fail\" */\n onNodeError?: \"fail\" | \"skip-downstream\" | \"continue\";\n /** Checkpoint configuration for mid-execution fault tolerance */\n checkpoint?: PatternCheckpointConfig;\n}\n\n// ============================================================================\n// Debug Configuration\n// ============================================================================\n\n/** Debug configuration for orchestrators */\nexport interface OrchestratorDebugConfig {\n verboseTimeline?: boolean;\n}\n\n// ============================================================================\n// Debug Timeline Types\n// ============================================================================\n\n/** All debug event types */\nexport type DebugEventType =\n | \"agent_start\"\n | \"agent_complete\"\n | \"agent_error\"\n | \"agent_retry\"\n | \"guardrail_check\"\n | \"constraint_evaluate\"\n | \"resolver_start\"\n | \"resolver_complete\"\n | \"resolver_error\"\n | \"approval_request\"\n | \"approval_response\"\n | \"handoff_start\"\n | \"handoff_complete\"\n | \"pattern_start\"\n | \"pattern_complete\"\n | \"dag_node_update\"\n | \"breakpoint_hit\"\n | \"breakpoint_resumed\"\n | \"derivation_update\"\n | \"scratchpad_update\"\n | \"reflection_iteration\"\n | \"race_start\"\n | \"race_winner\"\n | \"race_cancelled\"\n | \"debate_round\"\n | \"reroute\"\n | \"checkpoint_save\"\n | \"checkpoint_restore\"\n | \"task_start\"\n | \"task_complete\"\n | \"task_error\"\n | \"task_progress\"\n | \"goal_step\";\n\n/** Base debug event */\nexport interface DebugEventBase {\n id: number;\n type: DebugEventType;\n timestamp: number;\n agentId?: string;\n snapshotId: number | null;\n}\n\n/** Agent start event */\nexport interface AgentStartEvent extends DebugEventBase {\n type: \"agent_start\";\n agentId: string;\n inputLength: number;\n /** Truncated input text (max 5000 chars) */\n input?: string;\n}\n\n/** Agent complete event */\nexport interface AgentCompleteEvent extends DebugEventBase {\n type: \"agent_complete\";\n agentId: string;\n outputLength: number;\n totalTokens: number;\n inputTokens: number;\n outputTokens: number;\n durationMs: number;\n modelId?: string;\n /** Truncated output text (max 5000 chars) */\n output?: string;\n}\n\n/** Agent error event */\nexport interface AgentErrorEvent extends DebugEventBase {\n type: \"agent_error\";\n agentId: string;\n errorMessage: string;\n durationMs: number;\n}\n\n/** Agent retry event */\nexport interface AgentRetryEvent extends DebugEventBase {\n type: \"agent_retry\";\n agentId: string;\n attempt: number;\n errorMessage: string;\n delayMs: number;\n}\n\n/** Guardrail check event */\nexport interface GuardrailCheckEvent extends DebugEventBase {\n type: \"guardrail_check\";\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n passed: boolean;\n reason?: string;\n durationMs: number;\n}\n\n/** Constraint evaluate event */\nexport interface ConstraintEvaluateEvent extends DebugEventBase {\n type: \"constraint_evaluate\";\n constraintId: string;\n fired: boolean;\n}\n\n/** Resolver start event */\nexport interface ResolverStartEvent extends DebugEventBase {\n type: \"resolver_start\";\n resolverId: string;\n requirementType: string;\n}\n\n/** Resolver complete event */\nexport interface ResolverCompleteEvent extends DebugEventBase {\n type: \"resolver_complete\";\n resolverId: string;\n durationMs: number;\n}\n\n/** Resolver error event */\nexport interface ResolverErrorEvent extends DebugEventBase {\n type: \"resolver_error\";\n resolverId: string;\n errorMessage: string;\n durationMs: number;\n}\n\n/** Approval request event */\nexport interface ApprovalRequestEvent extends DebugEventBase {\n type: \"approval_request\";\n requestId: string;\n approvalType: \"tool_call\" | \"output\" | \"handoff\";\n}\n\n/** Approval response event */\nexport interface ApprovalResponseEvent extends DebugEventBase {\n type: \"approval_response\";\n requestId: string;\n approved: boolean;\n reason?: string;\n}\n\n/** Handoff start event */\nexport interface HandoffStartEvent extends DebugEventBase {\n type: \"handoff_start\";\n fromAgent: string;\n toAgent: string;\n}\n\n/** Handoff complete event */\nexport interface HandoffCompleteEvent extends DebugEventBase {\n type: \"handoff_complete\";\n fromAgent: string;\n toAgent: string;\n durationMs: number;\n}\n\n/** Pattern start event */\nexport interface PatternStartEvent extends DebugEventBase {\n type: \"pattern_start\";\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n /** All handler IDs in this pattern (agents + tasks) */\n handlers?: string[];\n /** Which handler IDs are tasks (rest are agents) */\n taskIds?: string[];\n}\n\n/** Pattern complete event */\nexport interface PatternCompleteEvent extends DebugEventBase {\n type: \"pattern_complete\";\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n durationMs: number;\n error?: string;\n}\n\n/** DAG node update event */\nexport interface DagNodeUpdateEvent extends DebugEventBase {\n type: \"dag_node_update\";\n nodeId: string;\n status: DagNodeStatus;\n deps?: string[];\n}\n\n/** Breakpoint hit event */\nexport interface BreakpointHitEvent extends DebugEventBase {\n type: \"breakpoint_hit\";\n breakpointId: string;\n breakpointType: string;\n label?: string;\n}\n\n/** Breakpoint resumed event */\nexport interface BreakpointResumedEvent extends DebugEventBase {\n type: \"breakpoint_resumed\";\n breakpointId: string;\n modified: boolean;\n skipped: boolean;\n}\n\n/** Derivation update event */\nexport interface DerivationUpdateEvent extends DebugEventBase {\n type: \"derivation_update\";\n derivationId: string;\n valueType: string;\n}\n\n/** Scratchpad update event */\nexport interface ScratchpadUpdateEvent extends DebugEventBase {\n type: \"scratchpad_update\";\n keys: string[];\n}\n\n/** Reflection iteration event */\nexport interface ReflectionIterationEvent extends DebugEventBase {\n type: \"reflection_iteration\";\n iteration: number;\n passed: boolean;\n score?: number;\n durationMs: number;\n producerTokens: number;\n evaluatorTokens: number;\n}\n\n/** Race start event */\nexport interface RaceStartEvent extends DebugEventBase {\n type: \"race_start\";\n patternId: string;\n agents: string[];\n}\n\n/** Race winner event */\nexport interface RaceWinnerEvent extends DebugEventBase {\n type: \"race_winner\";\n patternId: string;\n winnerId: string;\n durationMs: number;\n}\n\n/** Race cancelled event */\nexport interface RaceCancelledEvent extends DebugEventBase {\n type: \"race_cancelled\";\n patternId: string;\n cancelledIds: string[];\n reason: \"winner_found\" | \"timeout\" | \"all_failed\";\n}\n\n/** Debate round event — emitted after each round's judgement */\nexport interface DebateRoundEvent extends DebugEventBase {\n type: \"debate_round\";\n patternId: string;\n round: number;\n totalRounds: number;\n winnerId: string;\n score?: number;\n agentCount: number;\n}\n\n/** Reroute debug event recorded when self-healing reroutes to an alternate agent */\nexport interface RerouteDebugEvent extends DebugEventBase {\n type: \"reroute\";\n agentId: string;\n from: string;\n to: string;\n reason: string;\n}\n\n/** Checkpoint save event */\nexport interface CheckpointSaveEvent extends DebugEventBase {\n type: \"checkpoint_save\";\n checkpointId: string;\n patternType: string;\n step: number;\n}\n\n/** Checkpoint restore event */\nexport interface CheckpointRestoreEvent extends DebugEventBase {\n type: \"checkpoint_restore\";\n checkpointId: string;\n patternType: string;\n step: number;\n}\n\n/** Task start event */\nexport interface TaskStartEvent extends DebugEventBase {\n type: \"task_start\";\n taskId: string;\n label: string;\n description?: string;\n inputLength: number;\n}\n\n/** Task complete event */\nexport interface TaskCompleteEvent extends DebugEventBase {\n type: \"task_complete\";\n taskId: string;\n label: string;\n durationMs: number;\n}\n\n/** Task error event */\nexport interface TaskErrorEvent extends DebugEventBase {\n type: \"task_error\";\n taskId: string;\n label: string;\n error: string;\n durationMs: number;\n attempt?: number;\n}\n\n/** Task progress event */\nexport interface TaskProgressEvent extends DebugEventBase {\n type: \"task_progress\";\n taskId: string;\n label: string;\n percent: number;\n message?: string;\n}\n\n/** Goal step event — emitted for each agent invocation within a goal step */\nexport interface GoalStepEvent extends DebugEventBase {\n type: \"goal_step\";\n agentId: string;\n step: number;\n nodeId: string;\n satisfaction: number;\n satisfactionDelta: number;\n}\n\n/** Union of all debug event types */\nexport type DebugEvent =\n | AgentStartEvent\n | AgentCompleteEvent\n | AgentErrorEvent\n | AgentRetryEvent\n | GuardrailCheckEvent\n | ConstraintEvaluateEvent\n | ResolverStartEvent\n | ResolverCompleteEvent\n | ResolverErrorEvent\n | ApprovalRequestEvent\n | ApprovalResponseEvent\n | HandoffStartEvent\n | HandoffCompleteEvent\n | PatternStartEvent\n | PatternCompleteEvent\n | DagNodeUpdateEvent\n | BreakpointHitEvent\n | BreakpointResumedEvent\n | DerivationUpdateEvent\n | ScratchpadUpdateEvent\n | ReflectionIterationEvent\n | RaceStartEvent\n | RaceWinnerEvent\n | RaceCancelledEvent\n | DebateRoundEvent\n | RerouteDebugEvent\n | CheckpointSaveEvent\n | CheckpointRestoreEvent\n | TaskStartEvent\n | TaskCompleteEvent\n | TaskErrorEvent\n | TaskProgressEvent\n | GoalStepEvent;\n\n// ============================================================================\n// Self-Healing Types\n// ============================================================================\n\n/** Health state for an agent stored in facts */\nexport interface AgentHealthState {\n circuitState: \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\";\n healthScore: number;\n lastUpdated: number;\n}\n\n/** Reroute event fired when an agent is rerouted */\nexport interface RerouteEvent {\n originalAgent: string;\n reroutedTo: string;\n reason: string;\n timestamp: number;\n}\n\n/** Health monitor configuration */\nexport interface HealthMonitorConfig {\n /** Rolling window for metrics (ms). @default 60000 */\n windowMs?: number;\n /** Weights for health score computation (must sum to ~1.0) */\n weights?: {\n /** Weight for success rate (0-1). @default 0.5 */\n successRate?: number;\n /** Weight for latency (0-1). @default 0.3 */\n latency?: number;\n /** Weight for circuit state (0-1). @default 0.2 */\n circuitState?: number;\n };\n /** Max latency considered \"normal\" (ms). @default 5000 */\n maxNormalLatencyMs?: number;\n /** Max events per agent before FIFO eviction. @default 1000 */\n maxEventsPerAgent?: number;\n}\n\n/** Self-healing configuration for single-agent orchestrator */\nexport interface SelfHealingConfig {\n /** Fallback runners to try in order when primary CB is open */\n fallbackRunners?: AgentRunner[];\n /** Fallback agent to try when all runners fail */\n fallbackAgent?: AgentLike;\n /** Circuit breaker config for primary runner */\n circuitBreaker?: AgentCircuitBreakerConfig;\n /** Health score below which to trigger reroute. @default 30 */\n healthThreshold?: number;\n /** Behavior when all fallbacks exhausted */\n degradation?: \"reject\" | \"fallback-response\";\n /** Static response to return when degradation is \"fallback-response\" */\n fallbackResponse?: unknown;\n /** Callback when reroute occurs */\n onReroute?: (event: RerouteEvent) => void;\n}\n\n/** Self-healing configuration for multi-agent orchestrator */\nexport interface MultiAgentSelfHealingConfig {\n /** Default circuit breaker config for agents without their own */\n circuitBreakerDefaults?: AgentCircuitBreakerConfig;\n /** Health score below which to trigger reroute. @default 30 */\n healthThreshold?: number;\n /** Explicit equivalency groups (group name → agent IDs) */\n equivalencyGroups?: Record<string, string[]>;\n /** Use capability matching for implicit equivalency. @default true */\n useCapabilities?: boolean;\n /** Strategy for selecting equivalent agent */\n selectionStrategy?: \"healthiest\" | \"round-robin\";\n /** Behavior when all equivalents are down */\n degradation?: \"reject\" | \"fallback-response\";\n /** Static response for \"fallback-response\" degradation */\n fallbackResponse?: unknown;\n /** Callback when reroute occurs */\n onReroute?: (event: RerouteEvent) => void;\n /** Callback when agent health changes */\n onHealthChange?: (event: {\n agentId: string;\n oldScore: number;\n newScore: number;\n }) => void;\n /** Health monitor configuration */\n healthMonitor?: HealthMonitorConfig;\n}\n\n/** Circuit breaker config for AI agent self-healing (simplified subset of core CircuitBreakerConfig) */\nexport interface AgentCircuitBreakerConfig {\n /** Number of failures before opening. @default 5 */\n failureThreshold?: number;\n /** Time before trying half-open (ms). @default 30000 */\n resetTimeoutMs?: number;\n /** Successes needed to close from half-open. @default 2 */\n halfOpenSuccesses?: number;\n /** State change callback */\n onStateChange?: (from: string, to: string) => void;\n}\n\n/** Internal key for health state in coordinator facts */\nexport const HEALTH_KEY = \"__agentHealth\" as const;\n\n/** Breakpoint state stored in bridge schema — canonical definition in breakpoints.ts */\nexport type BreakpointState = BreakpointStateFromBreakpoints;\n\n// ============================================================================\n// Cross-Agent Derivation Types\n// ============================================================================\n\n/** Snapshot of all agent states for cross-agent derivations */\nexport interface CrossAgentSnapshot {\n agents: Record<\n string,\n {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n lastInput?: string;\n lastOutput?: unknown;\n lastError?: string;\n runCount: number;\n totalTokens: number;\n }\n >;\n coordinator: { globalTokens: number; status: string };\n scratchpad?: Record<string, unknown>;\n}\n\n/** Function that computes a derived value from a cross-agent snapshot */\nexport type CrossAgentDerivationFn<T = unknown> = (\n snapshot: CrossAgentSnapshot,\n) => T;\n\n// ============================================================================\n// Shared Scratchpad Types\n// ============================================================================\n\n/** Internal key for scratchpad fact on coordinator module */\nexport const SCRATCHPAD_KEY = \"__scratchpad\" as const;\n\n/** Shared scratchpad interface for multi-agent collaboration */\nexport interface Scratchpad<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n get<K extends keyof T>(key: K): T[K];\n set<K extends keyof T>(key: K, value: T[K]): void;\n /** Check if a key exists in the scratchpad */\n has<K extends keyof T>(key: K): boolean;\n /** Delete a key from the scratchpad */\n delete<K extends keyof T>(key: K): void;\n update(values: Partial<T>): void;\n getAll(): T;\n subscribe(\n keys: (keyof T)[],\n callback: (key: keyof T, value: unknown) => void,\n ): () => void;\n onChange(callback: (key: string, value: unknown) => void): () => void;\n reset(): void;\n}\n\n// ============================================================================\n// Goal Pattern Types\n// ============================================================================\n\n/** A node in a goal execution pattern */\nexport interface GoalNode {\n /** Handler ID — agent or task registered on the orchestrator */\n handler: string;\n /** Fact keys this node can produce */\n produces: string[];\n /** Fact keys this node needs (must be satisfied before running) */\n requires?: string[];\n /** Allow re-run if input facts change after completion */\n allowRerun?: boolean;\n /** Priority for selection when multiple nodes are ready. Higher = first */\n priority?: number;\n /** Build the input string from current facts */\n buildInput?: (facts: Record<string, unknown>) => string;\n /** Extract output facts from the agent's result */\n extractOutput?: (result: RunResult<unknown>) => Record<string, unknown>;\n}\n\n/** Goal step metrics */\nexport interface GoalStepMetrics {\n step: number;\n durationMs: number;\n nodesRun: string[];\n factsProduced: string[];\n satisfaction: number;\n satisfactionDelta: number;\n tokensConsumed: number;\n}\n\n/** Goal progress metrics */\nexport interface GoalMetrics {\n satisfaction: number;\n progressRate: number;\n estimatedStepsRemaining: number | null;\n decelerating: boolean;\n}\n\n/** Agent selection strategy for goal pattern */\nexport interface AgentSelectionStrategy {\n /**\n * Select which ready agents to run this step.\n *\n * @param readyAgents - Agent IDs whose `requires` are satisfied\n * @param metrics - Per-agent performance metrics (runs, avgSatisfactionDelta, tokens)\n * @param goalMetrics - Global goal progress metrics. Built-in strategies use per-agent\n * metrics only; this parameter enables custom strategies that account for overall goal\n * progress (e.g., switching to cheaper agents as satisfaction approaches 1.0).\n */\n select: (\n readyAgents: string[],\n metrics: Record<\n string,\n { runs: number; avgSatisfactionDelta: number; tokens: number }\n >,\n goalMetrics: GoalMetrics,\n ) => string[];\n}\n\n/** Relaxation context passed to custom relaxation strategies */\nexport interface RelaxationContext {\n step: number;\n facts: Record<string, unknown>;\n metrics: GoalMetrics;\n completedNodes: Set<string>;\n failedNodes: Map<string, number>;\n}\n\n/** Relaxation strategy for when goal pursuit stalls */\nexport type RelaxationStrategy =\n | { type: \"allow_rerun\"; nodes: string[] }\n | { type: \"alternative_nodes\"; nodes: GoalNode[] }\n | { type: \"inject_facts\"; facts: Record<string, unknown> }\n | { type: \"accept_partial\" }\n | {\n type: \"custom\";\n apply: (context: RelaxationContext) => void | Promise<void>;\n };\n\n/** Relaxation tier — progressively applied when goal pursuit stalls */\nexport interface RelaxationTier {\n label: string;\n /** Steps of no progress before applying. @default 3 */\n afterStallSteps?: number;\n strategy: RelaxationStrategy;\n}\n\n/** Record of a relaxation event */\nexport interface RelaxationRecord {\n step: number;\n tierIndex: number;\n label: string;\n strategy: RelaxationStrategy[\"type\"];\n}\n\n/** Goal execution pattern — declare desired state, let the runtime resolve */\nexport interface GoalPattern<T = unknown> {\n type: \"goal\";\n /** Nodes with produces/requires declarations */\n nodes: Record<string, GoalNode>;\n /** Goal condition — when this returns true, the goal is achieved */\n when: (facts: Record<string, unknown>) => boolean;\n /** Quantitative satisfaction: 0.0 to 1.0. Enables progress tracking.\n * If omitted, binary: 0.0 when when() is false, 1.0 when true. */\n satisfaction?: (facts: Record<string, unknown>) => number;\n /** Max goal steps. @default 50 */\n maxSteps?: number;\n /** Extract final result from achieved facts */\n extract?: (facts: Record<string, unknown>) => T;\n /** Timeout in ms. @default 300000 */\n timeout?: number;\n /** Abort signal */\n signal?: AbortSignal;\n /** Agent selection strategy. @default \"all-ready\" */\n selectionStrategy?: AgentSelectionStrategy;\n /** Relaxation tiers — progressively applied when goal pursuit stalls */\n relaxation?: RelaxationTier[];\n /** Lifecycle hooks */\n onStep?: (\n step: number,\n facts: Record<string, unknown>,\n readyAgents: string[],\n ) => void;\n onStall?: (step: number, metrics: GoalMetrics) => void;\n /** Checkpoint configuration for mid-execution fault tolerance */\n checkpoint?: PatternCheckpointConfig;\n}\n\n/** Result of a goal pattern execution */\nexport interface GoalResult<T = unknown> {\n /** Whether the when() condition was satisfied */\n achieved: boolean;\n /** Final value (from extract, or raw facts) */\n result: T;\n /** Final facts state */\n facts: Record<string, unknown>;\n /** Nodes that ran, in execution order */\n executionOrder: string[];\n /** Per-node results */\n nodeResults: Record<string, RunResult<unknown>>;\n /** Total goal steps taken */\n steps: number;\n /** Total tokens consumed */\n totalTokens: number;\n /** Total duration (ms) */\n durationMs: number;\n /** Per-step metrics (satisfaction, nodes run, etc.) */\n stepMetrics: GoalStepMetrics[];\n /** Relaxation events applied */\n relaxations: RelaxationRecord[];\n /** Error message if goal was not achieved */\n error?: string;\n}\n\n// ============================================================================\n// Pattern Checkpoint Types (Universal)\n// ============================================================================\n\n/** Universal checkpoint configuration for all execution patterns */\nexport interface PatternCheckpointConfig {\n /** Save a checkpoint every N steps/rounds/iterations. @default 5 */\n everyN?: number;\n /** Checkpoint store. Uses the orchestrator's store if not provided. */\n store?: import(\"./checkpoint.js\").CheckpointStore;\n /** Label prefix for checkpoints. @default pattern type name */\n labelPrefix?: string;\n /** Conditional: only save when this returns true */\n when?: (context: CheckpointContext) => boolean;\n}\n\n/** Context passed to conditional checkpoint predicates */\nexport interface CheckpointContext {\n /** Current step/round/iteration number */\n step: number;\n /** Pattern type identifier */\n patternType: string;\n /** Pattern-specific facts (goal only) */\n facts?: Record<string, unknown>;\n /** Satisfaction score 0-1 (goal only) */\n satisfaction?: number;\n}\n\nexport type GoalCheckpointConfig = PatternCheckpointConfig;\n\n// ---- Common checkpoint state fields ----\n\n/** Common fields present on all pattern checkpoint states */\nexport interface PatternCheckpointBase {\n /** Checkpoint format version */\n version: 1;\n /** Unique ID */\n id: string;\n /** ISO timestamp */\n createdAt: string;\n /** User label */\n label?: string;\n /** Pattern ID */\n patternId: string;\n /** Total expected steps/rounds/iterations (null for unbounded) */\n stepsTotal?: number | null;\n}\n\n// ---- Per-pattern checkpoint states ----\n\n/** Checkpoint state for sequential pattern */\nexport interface SequentialCheckpointState extends PatternCheckpointBase {\n type: \"sequential\";\n /** Next agent index to run */\n step: number;\n /** Current input for the next agent */\n currentInput: string;\n /** Results collected so far (output + tokens) */\n results: Array<{ agentId: string; output: unknown; totalTokens: number }>;\n}\n\n/** Checkpoint state for supervisor pattern */\nexport interface SupervisorCheckpointState extends PatternCheckpointBase {\n type: \"supervisor\";\n /** Next round number */\n round: number;\n /** Last supervisor output */\n supervisorOutput: unknown;\n /** Worker results so far */\n workerResults: Array<{ output: unknown; totalTokens: number }>;\n /** Current input to supervisor */\n currentInput: string;\n}\n\n/** Checkpoint state for reflect pattern */\nexport interface ReflectCheckpointState extends PatternCheckpointBase {\n type: \"reflect\";\n /** Next iteration number */\n iteration: number;\n /** Current effective input */\n effectiveInput: string;\n /** Iteration history */\n history: Array<{\n iteration: number;\n passed: boolean;\n score?: number;\n feedback?: string;\n durationMs: number;\n producerTokens: number;\n evaluatorTokens: number;\n }>;\n /** Producer outputs so far */\n producerOutputs: Array<{ output: unknown; score?: number }>;\n /** Last producer output */\n lastProducerOutput: unknown | null;\n}\n\n/** Checkpoint state for debate pattern */\nexport interface DebateCheckpointState extends PatternCheckpointBase {\n type: \"debate\";\n /** Next round number */\n round: number;\n /** Current input for the round */\n currentInput: string;\n /** Completed rounds */\n rounds: Array<{\n proposals: Array<{ agentId: string; output: unknown }>;\n judgement: { winnerId: string; feedback?: string; score?: number };\n }>;\n /** Last winning agent ID */\n lastWinnerId: string;\n /** Last winning output */\n lastWinnerOutput: unknown;\n /** Tokens consumed so far */\n tokensConsumed: number;\n}\n\n/** Checkpoint state for DAG pattern */\nexport interface DagCheckpointState extends PatternCheckpointBase {\n type: \"dag\";\n /** Per-node statuses */\n statuses: Record<string, DagNodeStatus>;\n /** Per-node outputs */\n outputs: Record<string, unknown>;\n /** Per-node errors */\n errors: Record<string, string>;\n /** Number of completed nodes */\n completedCount: number;\n /** Full results (output + tokens per node) */\n nodeResults: Record<string, { output: unknown; totalTokens: number }>;\n /** Original input */\n input: string;\n}\n\n/** Serializable mid-goal state for save/resume */\nexport interface GoalCheckpointState extends PatternCheckpointBase {\n /** Pattern type discriminator */\n type: \"goal\";\n /** Current step */\n step: number;\n /** Current facts snapshot */\n facts: Record<string, unknown>;\n /** Completed node IDs */\n completedNodes: string[];\n /** Failed node IDs with consecutive failure counts */\n failedNodes: Record<string, number>;\n /** Node input hashes (for allowRerun detection) */\n nodeInputHashes: Record<string, string>;\n /** Per-node results (serialized — output only, not the full RunResult) */\n nodeOutputs: Record<string, { output: unknown; totalTokens: number }>;\n /** Execution order so far */\n executionOrder: string[];\n /** Step metrics collected so far */\n stepMetrics: GoalStepMetrics[];\n /** Relaxations applied so far */\n relaxations: RelaxationRecord[];\n /** Applied relaxation tier index */\n appliedRelaxationTiers: number;\n /** Stall step counter */\n stallSteps: number;\n /** Last satisfaction value */\n lastSatisfaction: number;\n /** Per-agent metrics */\n agentMetrics: Record<\n string,\n { runs: number; totalDelta: number; tokens: number }\n >;\n}\n\n/** Discriminated union of all pattern checkpoint states */\nexport type PatternCheckpointState =\n | SequentialCheckpointState\n | SupervisorCheckpointState\n | ReflectCheckpointState\n | DebateCheckpointState\n | DagCheckpointState\n | GoalCheckpointState;\n\n// ---- Checkpoint utilities ----\n\n/** Progress computed from a checkpoint state */\nexport interface CheckpointProgress {\n /** 0-100 percentage complete */\n percentage: number;\n /** Steps/rounds/iterations completed */\n stepsCompleted: number;\n /** Total expected steps (null for unbounded patterns) */\n stepsTotal: number | null;\n /** Tokens consumed so far */\n tokensConsumed: number;\n /** Estimated tokens remaining (null when unknowable) */\n estimatedTokensRemaining: number | null;\n /** Estimated steps remaining (null when unknowable) */\n estimatedStepsRemaining: number | null;\n}\n\n/** Diff between two checkpoint states */\nexport interface CheckpointDiff {\n /** Pattern type */\n patternType: string;\n /** Step/round/iteration difference */\n stepDelta: number;\n /** Token difference */\n tokensDelta: number;\n /** Fact changes (goal only) */\n facts?: {\n added: string[];\n removed: string[];\n changed: Array<{ key: string; before: unknown; after: unknown }>;\n };\n /** Nodes completed between checkpoints (DAG/goal) */\n nodesCompleted?: string[];\n}\n\n/** Bridge schema for orchestrator (internal plumbing — types cast to bypass t.object constraint) */\nexport const orchestratorBridgeSchema = {\n facts: {\n [AGENT_KEY]: t.object() as unknown as SchemaType<AgentState>,\n [APPROVAL_KEY]: t.object() as unknown as SchemaType<ApprovalState>,\n [CONVERSATION_KEY]: t.array() as unknown as SchemaType<Message[]>,\n [TOOL_CALLS_KEY]: t.array() as unknown as SchemaType<ToolCall[]>,\n [BREAKPOINT_KEY]: t.object() as unknown as SchemaType<BreakpointState>,\n },\n derivations: {},\n events: {},\n requirements: {},\n} satisfies ModuleSchema;\n","/**\n * Shared bridge accessors and constraint/resolver converters.\n *\n * Used by both `agent-orchestrator.ts` (single-agent) and `multi-agent-orchestrator.ts` (multi-agent)\n * to read/write the bridge schema facts (agent state, approval, conversation,\n * tool calls) and convert user-facing OrchestratorConstraint/OrchestratorResolver\n * types into the Directive core format.\n *\n * Extracted to prevent drift between the two orchestrator implementations.\n * Internal module — not a public subpath export.\n *\n * @module\n */\n\nimport type { Requirement } from \"@directive-run/core\";\nimport {\n getBridgeFact,\n setBridgeFact,\n} from \"@directive-run/core/adapter-utils\";\n\nimport type {\n AgentHealthState,\n AgentLike,\n AgentState,\n ApprovalState,\n BreakpointState,\n Message,\n OrchestratorConstraint,\n OrchestratorResolver,\n OrchestratorResolverContext,\n OrchestratorState,\n RunOptions,\n RunResult,\n ToolCall,\n} from \"./types.js\";\n\nimport {\n AGENT_KEY,\n APPROVAL_KEY,\n BREAKPOINT_KEY,\n CONVERSATION_KEY,\n HEALTH_KEY,\n TOOL_CALLS_KEY,\n} from \"./types.js\";\n\n// ============================================================================\n// Bridge Accessors\n// ============================================================================\n\n/** @internal Read the agent state from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getAgentState(facts: any): AgentState {\n return getBridgeFact<AgentState>(facts, AGENT_KEY);\n}\n\n/** @internal Write the agent state to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setAgentState(facts: any, state: AgentState): void {\n setBridgeFact(facts, AGENT_KEY, state);\n}\n\n/** @internal Read the approval state from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getApprovalState(facts: any): ApprovalState {\n return getBridgeFact<ApprovalState>(facts, APPROVAL_KEY);\n}\n\n/** @internal Write the approval state to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setApprovalState(facts: any, state: ApprovalState): void {\n setBridgeFact(facts, APPROVAL_KEY, state);\n}\n\n/** @internal Read the conversation messages from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getConversation(facts: any): Message[] {\n return getBridgeFact<Message[]>(facts, CONVERSATION_KEY);\n}\n\n/** @internal Write conversation messages to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setConversation(facts: any, messages: Message[]): void {\n setBridgeFact(facts, CONVERSATION_KEY, messages);\n}\n\n/** @internal Read the tool calls from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getToolCalls(facts: any): ToolCall[] {\n return getBridgeFact<ToolCall[]>(facts, TOOL_CALLS_KEY);\n}\n\n/** @internal Write tool calls to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setToolCalls(facts: any, toolCalls: ToolCall[]): void {\n setBridgeFact(facts, TOOL_CALLS_KEY, toolCalls);\n}\n\n/** @internal Read the health state map from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getHealthState(facts: any): Record<string, AgentHealthState> {\n return getBridgeFact<Record<string, AgentHealthState>>(facts, HEALTH_KEY);\n}\n\n/** @internal Write the health state map to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setHealthState(\n facts: any,\n state: Record<string, AgentHealthState>,\n): void {\n setBridgeFact(facts, HEALTH_KEY, state);\n}\n\n/** @internal Read the breakpoint state from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getBreakpointState(facts: any): BreakpointState {\n return getBridgeFact<BreakpointState>(facts, BREAKPOINT_KEY);\n}\n\n/** @internal Write the breakpoint state to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setBreakpointState(facts: any, state: BreakpointState): void {\n setBridgeFact(facts, BREAKPOINT_KEY, state);\n}\n\n/** Get full orchestrator state from facts */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getOrchestratorState(facts: any): OrchestratorState {\n return {\n agent: getAgentState(facts),\n approval: getApprovalState(facts),\n conversation: getConversation(facts),\n toolCalls: getToolCalls(facts),\n };\n}\n\n// ============================================================================\n// Constraint/Resolver Converters\n// ============================================================================\n\n/** Convert user-facing OrchestratorConstraint objects into Directive core constraint format */\n// biome-ignore lint/suspicious/noExplicitAny: Constraint types are complex\nexport function convertOrchestratorConstraints<\n F extends Record<string, unknown>,\n>(constraints: Record<string, OrchestratorConstraint<F>>): Record<string, any> {\n // biome-ignore lint/suspicious/noExplicitAny: Result type is complex\n const result: Record<string, any> = Object.create(null);\n\n for (const [id, constraint] of Object.entries(constraints)) {\n result[id] = {\n priority: constraint.priority ?? 0,\n // biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n when: (facts: any) => {\n const state = getOrchestratorState(facts);\n const combinedFacts = { ...facts, ...state } as unknown as F &\n OrchestratorState;\n\n return constraint.when(combinedFacts);\n },\n // biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n require: (facts: any) => {\n const state = getOrchestratorState(facts);\n const combinedFacts = { ...facts, ...state } as unknown as F &\n OrchestratorState;\n\n return typeof constraint.require === \"function\"\n ? constraint.require(combinedFacts)\n : constraint.require;\n },\n };\n }\n\n return result;\n}\n\n/** Convert user-facing OrchestratorResolver objects into Directive core resolver format */\n// biome-ignore lint/suspicious/noExplicitAny: Resolver types are complex\nexport function convertOrchestratorResolvers<F extends Record<string, unknown>>(\n resolvers: Record<string, OrchestratorResolver<F, Requirement>>,\n runAgentWithGuardrails: <T>(\n agent: AgentLike,\n input: string,\n currentFacts: F & OrchestratorState,\n opts?: RunOptions,\n ) => Promise<RunResult<T>>,\n // biome-ignore lint/suspicious/noExplicitAny: Facts getter type varies\n getSystemFacts: () => any,\n): Record<string, any> {\n // biome-ignore lint/suspicious/noExplicitAny: Result type is complex\n const result: Record<string, any> = Object.create(null);\n\n for (const [id, resolver] of Object.entries(resolvers)) {\n result[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = { ...context.facts, ...state } as unknown as F &\n OrchestratorState;\n\n const orchestratorContext: OrchestratorResolverContext<F> = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runAgentWithGuardrails<T>(\n agent,\n input,\n getOrchestratorState(getSystemFacts()) as unknown as F &\n OrchestratorState,\n opts,\n );\n },\n signal: context.signal,\n };\n await resolver.resolve(req, orchestratorContext);\n },\n };\n }\n\n return result;\n}\n","/**\n * Agent Reflection / Self-Improvement\n *\n * Quality-based iteration: agent produces output → evaluator checks it → retry\n * with feedback until pass. Works with any AgentRunner.\n *\n * Shipped with aggressive safeguards to prevent silent budget burn:\n * - maxIterations default: 2 (conservative)\n * - Dev-mode warning for maxIterations > 3\n * - onIteration fires on every iteration (observable by default)\n * - Token usage accumulated across iterations\n *\n * @example\n * ```typescript\n * import { withReflection } from '@directive-run/ai';\n *\n * const reflective = withReflection(runner, {\n * evaluate: (output) => ({\n * passed: output.includes('conclusion'),\n * feedback: 'Missing conclusion section',\n * }),\n * maxIterations: 2,\n * });\n *\n * const result = await reflective(agent, 'Write a report');\n * ```\n */\n\nimport type { AgentLike, AgentRunner, RunOptions, RunResult } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Context passed to the reflection evaluator */\nexport interface ReflectionContext {\n input: string;\n /** 0-based iteration number */\n iteration: number;\n result: RunResult<unknown>;\n history: ReflectionEvaluation[];\n}\n\n/** Result of a reflection evaluation */\nexport interface ReflectionEvaluation {\n passed: boolean;\n feedback?: string;\n /** Quality score from 0 to 1, optional */\n score?: number;\n}\n\n/** Evaluator function for reflection */\nexport type ReflectionEvaluator<T = unknown> = (\n output: T,\n context: ReflectionContext,\n) => ReflectionEvaluation | Promise<ReflectionEvaluation>;\n\n/** Configuration for the reflection wrapper */\nexport interface ReflectionConfig<T = unknown> {\n /** Evaluator function — decides if the output is acceptable */\n evaluate: ReflectionEvaluator<T>;\n /** Maximum iterations (including the first). Default: 2 (conservative) */\n maxIterations?: number;\n /** Build the retry input from original input + feedback */\n buildRetryInput?: (\n input: string,\n feedback: string,\n iteration: number,\n ) => string;\n /** Callback on each iteration */\n onIteration?: (event: {\n iteration: number;\n passed: boolean;\n feedback?: string;\n score?: number;\n durationMs: number;\n }) => void;\n /** Behavior when maxIterations exhausted. Default: \"accept-last\" */\n onExhausted?: \"accept-last\" | \"throw\";\n /** Stop early if budget remaining < threshold (tokens). Works with withBudget. */\n budgetThreshold?: number;\n}\n\n// ============================================================================\n// Error\n// ============================================================================\n\n/** Error thrown when reflection iterations are exhausted and onExhausted is \"throw\" */\nexport class ReflectionExhaustedError extends Error {\n readonly iterations: number;\n readonly history: ReflectionEvaluation[];\n readonly lastResult: RunResult<unknown>;\n readonly totalTokens: number;\n\n constructor(options: {\n iterations: number;\n history: ReflectionEvaluation[];\n lastResult: RunResult<unknown>;\n totalTokens: number;\n }) {\n super(\n `[Directive Reflection] Exhausted ${options.iterations} iterations without passing evaluation. ` +\n `Last feedback: ${options.history[options.history.length - 1]?.feedback ?? \"(none)\"}`,\n );\n this.name = \"ReflectionExhaustedError\";\n this.iterations = options.iterations;\n this.history = options.history;\n this.lastResult = options.lastResult;\n this.totalTokens = options.totalTokens;\n }\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/** Default retry input format */\nfunction defaultBuildRetryInput(\n input: string,\n feedback: string,\n _iteration: number,\n): string {\n return `${input}\\n\\nFeedback on your previous response:\\n${feedback}\\n\\nPlease improve your response.`;\n}\n\n/**\n * Wrap an AgentRunner with reflection (self-improvement) logic.\n *\n * The returned runner runs the agent, evaluates the output, and retries with\n * feedback if the evaluation fails — up to `maxIterations` times.\n *\n * @example\n * ```typescript\n * const reflective = withReflection(runner, {\n * evaluate: (output) => ({\n * passed: typeof output === 'string' && output.length > 100,\n * feedback: 'Response too short, please elaborate',\n * score: Math.min(1, (output as string).length / 200),\n * }),\n * maxIterations: 3,\n * onExhausted: 'accept-last',\n * });\n * ```\n */\nexport function withReflection<T = unknown>(\n runner: AgentRunner,\n config: ReflectionConfig<T>,\n): AgentRunner {\n const maxIterations = config.maxIterations ?? 2;\n const buildRetryInput = config.buildRetryInput ?? defaultBuildRetryInput;\n const onExhausted = config.onExhausted ?? \"accept-last\";\n\n if (maxIterations < 1) {\n throw new Error(\"[Directive Reflection] maxIterations must be >= 1\");\n }\n\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\" &&\n maxIterations > 3\n ) {\n console.warn(\n \"[Directive Reflection] maxIterations > 3 rarely improves quality. \" +\n \"Consider using maxIterations <= 3 to avoid unbounded token burn.\",\n );\n }\n\n return async <R>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n ): Promise<RunResult<R>> => {\n const history: ReflectionEvaluation[] = [];\n let effectiveInput = input;\n let accumulatedTokens = 0;\n let lastResult: RunResult<unknown> | null = null;\n\n for (let iteration = 0; iteration < maxIterations; iteration++) {\n const iterationStart = Date.now();\n\n // Run the agent\n const result = await runner(agent, effectiveInput, options);\n lastResult = result;\n accumulatedTokens += result.totalTokens;\n\n // Evaluate the output\n const context: ReflectionContext = {\n input,\n iteration,\n result,\n history: [...history],\n };\n\n const evaluation = await config.evaluate(result.output as T, context);\n history.push(evaluation);\n\n const durationMs = Date.now() - iterationStart;\n\n // Fire callback\n try {\n config.onIteration?.({\n iteration,\n passed: evaluation.passed,\n feedback: evaluation.feedback,\n score: evaluation.score,\n durationMs,\n });\n } catch {\n // callback error is non-fatal\n }\n\n if (evaluation.passed) {\n // Return with accumulated tokens\n return {\n ...result,\n totalTokens: accumulatedTokens,\n } as RunResult<R>;\n }\n\n // Check budget threshold\n if (\n config.budgetThreshold !== undefined &&\n accumulatedTokens >= config.budgetThreshold\n ) {\n break;\n }\n\n // Build retry input for next iteration (unless this is the last)\n if (iteration < maxIterations - 1 && evaluation.feedback) {\n effectiveInput = buildRetryInput(input, evaluation.feedback, iteration);\n }\n }\n\n // Exhausted all iterations\n if (onExhausted === \"throw\") {\n throw new ReflectionExhaustedError({\n iterations: maxIterations,\n history,\n lastResult: lastResult!,\n totalTokens: accumulatedTokens,\n });\n }\n\n // \"accept-last\" — return the last result with accumulated tokens\n return {\n ...lastResult!,\n totalTokens: accumulatedTokens,\n } as RunResult<R>;\n };\n}\n","/**\n * Human-in-the-Loop Breakpoints — Pause/inspect/modify/resume at arbitrary execution points.\n *\n * Separate from approvals (which are safety gates for tool calls). Breakpoints are\n * general-purpose pause points for debugging, inspection, and input modification.\n *\n * Zero overhead when breakpoints array is empty — guard at each insertion point.\n *\n * @module\n */\n\nimport {\n getBridgeFact,\n setBridgeFact,\n} from \"@directive-run/core/adapter-utils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Breakpoint types for single-agent orchestrator */\nexport type BreakpointType =\n | \"pre_input_guardrails\"\n | \"pre_agent_run\"\n | \"pre_output_guardrails\"\n | \"post_run\";\n\n/** Extended breakpoint types for multi-agent orchestrator */\nexport type MultiAgentBreakpointType =\n | BreakpointType\n | \"pre_handoff\"\n | \"pre_pattern_step\";\n\n/** Breakpoint configuration */\nexport interface BreakpointConfig<T extends string = BreakpointType> {\n type: T;\n when?: (context: BreakpointContext) => boolean;\n label?: string;\n}\n\n/** Context available when a breakpoint fires */\nexport interface BreakpointContext {\n agentId: string;\n agentName: string;\n input: string;\n state: Record<string, unknown>;\n breakpointType: string;\n patternId?: string;\n handoff?: { fromAgent: string; toAgent: string };\n}\n\n/** A pending breakpoint request */\nexport interface BreakpointRequest {\n id: string;\n type: string;\n agentId: string;\n input: string;\n label?: string;\n requestedAt: number;\n}\n\n/** Modifications that can be applied when resuming a breakpoint */\nexport interface BreakpointModifications {\n input?: string;\n skip?: boolean;\n}\n\n/** Breakpoint state stored in facts */\nexport interface BreakpointState {\n pending: BreakpointRequest[];\n resolved: string[];\n cancelled: string[];\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n// Import from types.ts — single source of truth\nimport { BREAKPOINT_KEY } from \"./types.js\";\nexport { BREAKPOINT_KEY };\n\n/** Maximum number of resolved/cancelled breakpoint IDs to retain (FIFO eviction) */\nexport const MAX_BREAKPOINT_HISTORY = 200;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nlet breakpointCounter = 0;\n\n/** Create a unique breakpoint ID */\nexport function createBreakpointId(): string {\n return `bp_${Date.now().toString(36)}_${(++breakpointCounter).toString(36)}`;\n}\n\n/**\n * Match a breakpoint configuration against the current execution point.\n * Returns the matching config or null if no match.\n */\nexport function matchBreakpoint<T extends string>(\n breakpoints: BreakpointConfig<T>[],\n type: T,\n context: BreakpointContext,\n): BreakpointConfig<T> | null {\n for (const bp of breakpoints) {\n if (bp.type !== type) {\n continue;\n }\n\n // If no condition, always match\n if (!bp.when) {\n return bp;\n }\n\n // Evaluate condition (catch errors — user-provided predicate)\n try {\n if (bp.when(context)) {\n return bp;\n }\n } catch {\n // Predicate error — skip this breakpoint\n }\n }\n\n return null;\n}\n\n/** Get breakpoint state from facts */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getBreakpointState(facts: any): BreakpointState {\n return getBridgeFact<BreakpointState>(facts, BREAKPOINT_KEY);\n}\n\n/** Set breakpoint state in facts */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setBreakpointState(facts: any, state: BreakpointState): void {\n setBridgeFact(facts, BREAKPOINT_KEY, state);\n}\n\n/** Create initial breakpoint state */\nexport function createInitialBreakpointState(): BreakpointState {\n return {\n pending: [],\n resolved: [],\n cancelled: [],\n };\n}\n","/**\n * Persistent Checkpointing — Serialize/restore full orchestrator state.\n *\n * Enables long-running workflows, process restarts, and fork-and-replay by\n * capturing a complete snapshot of orchestrator state at rest.\n *\n * @module\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Checkpoint local state for single-agent orchestrators */\nexport interface SingleAgentCheckpointLocalState {\n type: \"single\";\n}\n\n/** Checkpoint local state for multi-agent orchestrators */\nexport interface MultiAgentCheckpointLocalState {\n type: \"multi\";\n globalTokenCount: number;\n globalStatus: \"idle\" | \"paused\";\n agentStates: Record<\n string,\n {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n lastInput?: string;\n lastOutput?: unknown;\n lastError?: string;\n runCount: number;\n totalTokens: number;\n }\n >;\n handoffCounter: number;\n pendingHandoffs: unknown[];\n handoffResults: unknown[];\n roundRobinCounters: Record<string, number> | null;\n /** Serialized task states (task run functions are closures, not serializable) */\n taskStates?: Record<string, { lastOutput?: string; lastError?: string }>;\n}\n\n/** Union of local state types */\nexport type CheckpointLocalState =\n | SingleAgentCheckpointLocalState\n | MultiAgentCheckpointLocalState;\n\n/** Full checkpoint data */\nexport interface Checkpoint {\n version: 1;\n id: string;\n createdAt: string;\n label?: string;\n systemExport: string;\n timelineExport: string | null;\n localState: CheckpointLocalState;\n memoryExport: unknown | null;\n orchestratorType: \"single\" | \"multi\";\n /** Associated time-travel snapshot ID */\n snapshotId?: number;\n /** Arbitrary metadata */\n metadata?: Record<string, unknown>;\n}\n\n/** Checkpoint store interface */\nexport interface CheckpointStore {\n save(checkpoint: Checkpoint): Promise<string>;\n load(checkpointId: string): Promise<Checkpoint | null>;\n list(): Promise<Array<{ id: string; label?: string; createdAt: string }>>;\n delete(checkpointId: string): Promise<boolean>;\n clear(): Promise<void>;\n /** Prune old checkpoints based on retention policy. Returns number pruned. */\n prune(): Promise<number>;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst BLOCKED_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n]);\n\n/** Create a unique checkpoint ID */\nexport function createCheckpointId(): string {\n const timestamp = Date.now().toString(36);\n const random = crypto.randomUUID().slice(0, 8);\n\n return `ckpt_${timestamp}_${random}`;\n}\n\n/** Validate that an unknown value is a valid Checkpoint */\nexport function validateCheckpoint(data: unknown): data is Checkpoint {\n if (!data || typeof data !== \"object\") {\n return false;\n }\n\n // Prototype pollution defense\n for (const key of Object.keys(data)) {\n if (BLOCKED_KEYS.has(key)) {\n return false;\n }\n }\n\n const obj = data as Record<string, unknown>;\n\n if (obj.version !== 1) {\n return false;\n }\n\n if (typeof obj.id !== \"string\" || obj.id.length === 0) {\n return false;\n }\n\n if (typeof obj.createdAt !== \"string\") {\n return false;\n }\n\n if (typeof obj.systemExport !== \"string\") {\n return false;\n }\n\n if (obj.timelineExport !== null && typeof obj.timelineExport !== \"string\") {\n return false;\n }\n\n if (!obj.localState || typeof obj.localState !== \"object\") {\n return false;\n }\n\n // Validate localState prototype pollution\n for (const key of Object.keys(obj.localState)) {\n if (BLOCKED_KEYS.has(key)) {\n return false;\n }\n }\n\n const localState = obj.localState as Record<string, unknown>;\n if (localState.type !== \"single\" && localState.type !== \"multi\") {\n return false;\n }\n\n if (obj.orchestratorType !== \"single\" && obj.orchestratorType !== \"multi\") {\n return false;\n }\n\n return true;\n}\n\n// ============================================================================\n// InMemoryCheckpointStore\n// ============================================================================\n\n/** Options for InMemoryCheckpointStore */\nexport interface InMemoryCheckpointStoreOptions {\n /** Maximum checkpoints to retain before FIFO eviction. @default 100 */\n maxCheckpoints?: number;\n /** Time-based retention: prune checkpoints older than this (ms). @default Infinity */\n retentionMs?: number;\n /** When true, labeled checkpoints are exempt from auto-prune. @default false */\n preserveLabeled?: boolean;\n}\n\n/**\n * In-memory checkpoint store with FIFO eviction and time-based retention.\n *\n * @example\n * ```typescript\n * const store = new InMemoryCheckpointStore({\n * maxCheckpoints: 50,\n * retentionMs: 3600000, // 1 hour\n * preserveLabeled: true,\n * });\n *\n * const id = await store.save(checkpoint);\n * const pruned = await store.prune();\n * ```\n */\nexport class InMemoryCheckpointStore implements CheckpointStore {\n private readonly store = new Map<string, Checkpoint>();\n private readonly order: string[] = [];\n private readonly maxCheckpoints: number;\n private readonly retentionMs: number;\n private readonly preserveLabeled: boolean;\n\n constructor(options?: InMemoryCheckpointStoreOptions) {\n this.maxCheckpoints = options?.maxCheckpoints ?? 100;\n this.retentionMs = options?.retentionMs ?? Number.POSITIVE_INFINITY;\n this.preserveLabeled = options?.preserveLabeled ?? false;\n\n if (!Number.isFinite(this.maxCheckpoints) || this.maxCheckpoints < 1) {\n throw new Error(\n `[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`,\n );\n }\n }\n\n async save(checkpoint: Checkpoint): Promise<string> {\n if (!validateCheckpoint(checkpoint)) {\n throw new Error(\"[Directive Checkpoint] Invalid checkpoint data\");\n }\n\n // FIFO eviction (respects preserveLabeled)\n while (this.order.length >= this.maxCheckpoints) {\n const evicted = this.evictOldest();\n if (!evicted) {\n break;\n }\n }\n\n // Deduplicate: remove existing order entry if updating\n const existingIdx = this.order.indexOf(checkpoint.id);\n if (existingIdx >= 0) {\n this.order.splice(existingIdx, 1);\n }\n\n this.store.set(checkpoint.id, checkpoint);\n this.order.push(checkpoint.id);\n\n return checkpoint.id;\n }\n\n async load(checkpointId: string): Promise<Checkpoint | null> {\n return this.store.get(checkpointId) ?? null;\n }\n\n async list(): Promise<\n Array<{ id: string; label?: string; createdAt: string }>\n > {\n return this.order.map((id) => {\n const cp = this.store.get(id)!;\n\n return { id: cp.id, label: cp.label, createdAt: cp.createdAt };\n });\n }\n\n async delete(checkpointId: string): Promise<boolean> {\n if (!this.store.has(checkpointId)) {\n return false;\n }\n\n this.store.delete(checkpointId);\n const index = this.order.indexOf(checkpointId);\n if (index >= 0) {\n this.order.splice(index, 1);\n }\n\n return true;\n }\n\n async clear(): Promise<void> {\n this.store.clear();\n this.order.length = 0;\n }\n\n async prune(): Promise<number> {\n if (!Number.isFinite(this.retentionMs)) {\n return 0;\n }\n\n const cutoff = Date.now() - this.retentionMs;\n let pruned = 0;\n\n // Iterate from oldest to newest\n const toRemove: string[] = [];\n for (const id of this.order) {\n const cp = this.store.get(id);\n if (!cp) {\n continue;\n }\n\n const createdAtMs = new Date(cp.createdAt).getTime();\n if (createdAtMs >= cutoff) {\n break; // Remaining are newer\n }\n\n // Skip labeled checkpoints if preserveLabeled\n if (this.preserveLabeled && cp.label) {\n continue;\n }\n\n toRemove.push(id);\n }\n\n for (const id of toRemove) {\n this.store.delete(id);\n const idx = this.order.indexOf(id);\n if (idx >= 0) {\n this.order.splice(idx, 1);\n }\n pruned++;\n }\n\n return pruned;\n }\n\n /** Evict the oldest non-labeled checkpoint. Returns true if one was evicted. */\n private evictOldest(): boolean {\n if (this.preserveLabeled) {\n // Find first non-labeled checkpoint\n for (let i = 0; i < this.order.length; i++) {\n const id = this.order[i]!;\n const cp = this.store.get(id);\n if (cp && !cp.label) {\n this.order.splice(i, 1);\n this.store.delete(id);\n\n return true;\n }\n }\n\n // All are labeled — evict oldest anyway to make room\n }\n\n const oldest = this.order.shift();\n if (oldest) {\n this.store.delete(oldest);\n\n return true;\n }\n\n return false;\n }\n}\n","/**\n * Agent Streaming - Token-by-token streaming with backpressure support\n *\n * Provides async iterators for streaming agent responses with guardrail evaluation\n * on partial output and configurable backpressure handling.\n *\n * @example\n * ```typescript\n * import { createAgentOrchestrator } from '@directive-run/ai';\n * import { createStreamingRunner } from '@directive-run/ai';\n *\n * const { stream, result } = orchestrator.runStream(agent, input);\n *\n * for await (const chunk of stream) {\n * if (chunk.type === 'token') process.stdout.write(chunk.data);\n * if (chunk.type === 'guardrail_triggered') handleGuardrail(chunk);\n * }\n *\n * const finalResult = await result;\n * ```\n */\n\nimport type { OrchestratorStreamChunk } from \"./agent-orchestrator.js\";\nimport type {\n AgentLike,\n GuardrailFn,\n Message,\n OutputGuardrailData,\n RunResult,\n StreamingCallbackRunner,\n} from \"./types.js\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Default buffer size for streaming backpressure */\nexport const DEFAULT_BUFFER_SIZE = 1000;\n\n/** Default interval (in tokens) between guardrail checks during streaming */\nexport const DEFAULT_GUARDRAIL_CHECK_INTERVAL = 50;\n\n/** Default toxicity threshold for toxicity streaming guardrail */\nexport const DEFAULT_TOXICITY_THRESHOLD = 0.8;\n\n// ============================================================================\n// Stream Event Types\n// ============================================================================\n\n/** Token chunk from streaming response */\nexport interface TokenChunk {\n type: \"token\";\n data: string;\n /** Running total of tokens received */\n tokenCount: number;\n}\n\n/** Tool execution started */\nexport interface ToolStartChunk {\n type: \"tool_start\";\n tool: string;\n toolCallId: string;\n arguments: string;\n}\n\n/** Tool execution completed */\nexport interface ToolEndChunk {\n type: \"tool_end\";\n tool: string;\n toolCallId: string;\n result: string;\n}\n\n/** Message added to conversation */\nexport interface MessageChunk {\n type: \"message\";\n message: Message;\n}\n\n/** Guardrail was triggered during streaming */\nexport interface GuardrailTriggeredChunk {\n type: \"guardrail_triggered\";\n guardrailName: string;\n reason: string;\n /** Partial output at the time of trigger */\n partialOutput: string;\n /** Whether the stream was stopped */\n stopped: boolean;\n}\n\n/** Progress update for UI feedback */\nexport interface ProgressChunk {\n type: \"progress\";\n phase: \"starting\" | \"generating\" | \"tool_calling\" | \"finishing\";\n /** Percentage complete (0-100), if known */\n percent?: number;\n /** Human-readable status message */\n message?: string;\n}\n\n/** Stream completed */\nexport interface DoneChunk {\n type: \"done\";\n totalTokens: number;\n duration: number;\n /** Number of tokens dropped due to backpressure (only with 'drop' strategy) */\n droppedTokens: number;\n}\n\n/** Error during streaming */\nexport interface ErrorChunk {\n type: \"error\";\n error: Error;\n /** Partial output before error */\n partialOutput?: string;\n}\n\n/** Union of all stream chunk types */\nexport type StreamChunk =\n | TokenChunk\n | ToolStartChunk\n | ToolEndChunk\n | MessageChunk\n | GuardrailTriggeredChunk\n | ProgressChunk\n | DoneChunk\n | ErrorChunk;\n\n// ============================================================================\n// Streaming Run Types\n// ============================================================================\n\n/** Backpressure strategy when consumer is slow */\nexport type BackpressureStrategy =\n /** Drop tokens when buffer is full (lossy, fast) */\n | \"drop\"\n /** Block producer when buffer is full (lossless, may slow response) */\n | \"block\"\n /** Buffer all tokens (lossless, uses memory) */\n | \"buffer\";\n\n/** Streaming run options */\nexport interface StreamRunOptions {\n /** Maximum turns before stopping */\n maxTurns?: number;\n /** Abort signal for cancellation */\n signal?: AbortSignal;\n /** Backpressure strategy. @default \"buffer\" */\n backpressure?: BackpressureStrategy;\n /** Buffer size for 'drop' and 'block' strategies. @default 1000 */\n bufferSize?: number;\n /** Evaluate guardrails every N tokens. @default 50 */\n guardrailCheckInterval?: number;\n /** Stop stream on guardrail trigger. @default true */\n stopOnGuardrail?: boolean | ((chunk: GuardrailTriggeredChunk) => boolean);\n}\n\n/** Stream run function type (mirrors OpenAI Agents streaming API) */\nexport type StreamRunner = <T = unknown>(\n agent: AgentLike,\n input: string,\n options?: StreamRunOptions,\n) => StreamingRunResult<T>;\n\n/** Result from a streaming run */\nexport interface StreamingRunResult<T = unknown> {\n /** Async iterator for streaming chunks */\n stream: AsyncIterable<StreamChunk>;\n /** Promise that resolves to the final result */\n result: Promise<RunResult<T>>;\n /** Abort the stream */\n abort: () => void;\n}\n\n// ============================================================================\n// Streaming Guardrail Types\n// ============================================================================\n\n/** Streaming guardrail that evaluates partial output */\nexport interface StreamingGuardrail {\n /** Unique name for this guardrail */\n name: string;\n /** Check partial output (called every guardrailCheckInterval tokens) */\n check: (\n partialOutput: string,\n tokenCount: number,\n ) => StreamingGuardrailResult | Promise<StreamingGuardrailResult>;\n /** Whether to stop the stream on failure. @default true */\n stopOnFail?: boolean;\n}\n\n/** Result from a streaming guardrail check */\nexport interface StreamingGuardrailResult {\n passed: boolean;\n reason?: string;\n /** Severity level for UI display */\n severity?: \"warning\" | \"error\" | \"critical\";\n /** Warning message (guardrail passed but wants to emit a warning) */\n warning?: string;\n}\n\n// ============================================================================\n// Stream Buffer Implementation\n// ============================================================================\n\n/** Internal buffer for managing backpressure */\nclass StreamBuffer<T> {\n private buffer: T[] = [];\n private maxSize: number;\n private strategy: BackpressureStrategy;\n private pullWaiters: Array<(value: T | null) => void> = [];\n private pushWaiters: Array<() => void> = []; // For block strategy - queue-based, not polling\n private closed = false;\n private droppedCount = 0;\n\n constructor(\n strategy: BackpressureStrategy = \"buffer\",\n maxSize = DEFAULT_BUFFER_SIZE,\n ) {\n this.strategy = strategy;\n this.maxSize = maxSize;\n }\n\n async push(item: T): Promise<boolean> {\n if (this.closed) {\n return false;\n }\n\n // If there's a pull waiter, send directly\n const pullWaiter = this.pullWaiters.shift();\n if (pullWaiter) {\n pullWaiter(item);\n return true;\n }\n\n // Handle based on strategy\n if (this.buffer.length >= this.maxSize) {\n switch (this.strategy) {\n case \"drop\":\n this.droppedCount++;\n return false;\n case \"block\":\n // Queue-based blocking (no polling) - wait for consumer to pull\n await new Promise<void>((resolve) => {\n this.pushWaiters.push(resolve);\n });\n if (this.closed) {\n return false;\n }\n break;\n case \"buffer\":\n // Just push anyway (may use lots of memory)\n break;\n }\n }\n\n this.buffer.push(item);\n return true;\n }\n\n async pull(): Promise<T | null> {\n // Notify a blocked producer that space is available\n const pushWaiter = this.pushWaiters.shift();\n if (pushWaiter) {\n pushWaiter();\n }\n\n if (this.buffer.length > 0) {\n return this.buffer.shift()!;\n }\n\n if (this.closed) {\n return null;\n }\n\n // Wait for next item\n return new Promise<T | null>((resolve) => {\n this.pullWaiters.push(resolve);\n });\n }\n\n close(): void {\n this.closed = true;\n // Resolve all waiting consumers with null\n for (const waiter of this.pullWaiters) {\n waiter(null);\n }\n this.pullWaiters = [];\n // Unblock all waiting producers\n for (const waiter of this.pushWaiters) {\n waiter();\n }\n this.pushWaiters = [];\n }\n\n getDroppedCount(): number {\n return this.droppedCount;\n }\n}\n\n// ============================================================================\n// Streaming Runner Implementation\n// ============================================================================\n\n/**\n * Create a streaming runner that wraps a base run function.\n * This is used internally by the orchestrator but can be used standalone.\n *\n * @param baseRunner - The underlying non-streaming runner\n * @param options - Configuration options\n */\nexport function createStreamingRunner(\n baseRunner: StreamingCallbackRunner,\n options: {\n streamingGuardrails?: StreamingGuardrail[];\n } = {},\n): StreamRunner {\n const { streamingGuardrails = [] } = options;\n\n return <T>(\n agent: AgentLike,\n input: string,\n runOptions: StreamRunOptions = {},\n ): StreamingRunResult<T> => {\n const {\n signal,\n backpressure = \"buffer\",\n bufferSize = DEFAULT_BUFFER_SIZE,\n guardrailCheckInterval = DEFAULT_GUARDRAIL_CHECK_INTERVAL,\n stopOnGuardrail = true,\n } = runOptions;\n\n // Validate configuration\n if (\n guardrailCheckInterval <= 0 ||\n !Number.isFinite(guardrailCheckInterval)\n ) {\n throw new Error(\n `[Directive Streaming] guardrailCheckInterval must be a positive number, got ${guardrailCheckInterval}`,\n );\n }\n\n const buffer = new StreamBuffer<StreamChunk>(backpressure, bufferSize);\n const abortController = new AbortController();\n let partialOutput = \"\";\n let tokenCount = 0;\n let stopped = false;\n const startTime = Date.now();\n\n // Combine external abort signal with internal one (with proper cleanup)\n let abortHandler: (() => void) | undefined;\n if (signal) {\n abortHandler = () => abortController.abort();\n signal.addEventListener(\"abort\", abortHandler);\n }\n\n // Cleanup function to prevent memory leaks\n const cleanup = () => {\n if (abortHandler && signal) {\n signal.removeEventListener(\"abort\", abortHandler);\n }\n };\n\n // Check streaming guardrails\n async function checkGuardrails(): Promise<GuardrailTriggeredChunk | null> {\n for (const guardrail of streamingGuardrails) {\n try {\n const result = await guardrail.check(partialOutput, tokenCount);\n if (!result.passed) {\n const shouldStop = guardrail.stopOnFail !== false;\n const chunk: GuardrailTriggeredChunk = {\n type: \"guardrail_triggered\",\n guardrailName: guardrail.name,\n reason: result.reason ?? \"Guardrail check failed\",\n partialOutput,\n stopped: shouldStop,\n };\n\n await buffer.push(chunk);\n\n if (shouldStop) {\n const stopFn =\n typeof stopOnGuardrail === \"function\"\n ? stopOnGuardrail\n : () => stopOnGuardrail;\n if (stopFn(chunk)) {\n stopped = true;\n abortController.abort();\n }\n }\n\n return chunk;\n }\n } catch {\n // Guardrail errors during streaming are silently swallowed —\n // the guardrail result itself carries error info when applicable.\n }\n }\n return null;\n }\n\n // Run the agent and pipe to buffer\n const resultPromise = (async (): Promise<RunResult<T>> => {\n await buffer.push({\n type: \"progress\",\n phase: \"starting\",\n message: \"Starting agent\",\n });\n\n try {\n const result = await baseRunner(agent, input, {\n signal: abortController.signal,\n onToken: async (token) => {\n if (stopped) return;\n\n tokenCount++;\n partialOutput += token;\n\n await buffer.push({\n type: \"token\",\n data: token,\n tokenCount,\n });\n\n // Check guardrails periodically\n if (tokenCount % guardrailCheckInterval === 0) {\n await checkGuardrails();\n }\n },\n onToolStart: async (tool, id, args) => {\n await buffer.push({\n type: \"progress\",\n phase: \"tool_calling\",\n message: `Calling ${tool}`,\n });\n await buffer.push({\n type: \"tool_start\",\n tool,\n toolCallId: id,\n arguments: args,\n });\n },\n onToolEnd: async (tool, id, result) => {\n await buffer.push({\n type: \"tool_end\",\n tool,\n toolCallId: id,\n result,\n });\n await buffer.push({\n type: \"progress\",\n phase: \"generating\",\n message: \"Continuing generation\",\n });\n },\n onMessage: async (message) => {\n await buffer.push({ type: \"message\", message });\n },\n });\n\n // Final guardrail check\n await checkGuardrails();\n\n const duration = Date.now() - startTime;\n const droppedTokens = buffer.getDroppedCount();\n await buffer.push({\n type: \"done\",\n totalTokens: result.totalTokens,\n duration,\n droppedTokens,\n });\n\n buffer.close();\n return result as RunResult<T>;\n } catch (error) {\n const errorChunk: ErrorChunk = {\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error)),\n partialOutput: partialOutput || undefined,\n };\n await buffer.push(errorChunk);\n buffer.close();\n throw error;\n } finally {\n // Always cleanup abort signal listener to prevent memory leaks\n cleanup();\n }\n })();\n\n // Create async iterator\n const stream: AsyncIterable<StreamChunk> = {\n [Symbol.asyncIterator](): AsyncIterator<StreamChunk> {\n return {\n async next(): Promise<IteratorResult<StreamChunk>> {\n const chunk = await buffer.pull();\n if (chunk === null) {\n return { done: true, value: undefined };\n }\n return { done: false, value: chunk };\n },\n };\n },\n };\n\n return {\n stream,\n result: resultPromise,\n abort: () => abortController.abort(),\n };\n };\n}\n\n// ============================================================================\n// Built-in Streaming Guardrails\n// ============================================================================\n\n/**\n * Create a streaming guardrail that detects toxic content.\n *\n * @example\n * ```typescript\n * const toxicityGuardrail = createToxicityStreamingGuardrail({\n * threshold: 0.9,\n * checkFn: async (text) => myToxicityModel.score(text),\n * });\n * ```\n */\nexport function createToxicityStreamingGuardrail(options: {\n /** Toxicity scoring function (returns 0-1) */\n checkFn: (text: string) => number | Promise<number>;\n /** Threshold above which content is flagged. @default 0.8 */\n threshold?: number;\n /** Stop the stream on detection. @default true */\n stopOnFail?: boolean;\n}): StreamingGuardrail {\n const {\n checkFn,\n threshold = DEFAULT_TOXICITY_THRESHOLD,\n stopOnFail = true,\n } = options;\n\n return {\n name: \"toxicity-streaming\",\n stopOnFail,\n async check(partialOutput) {\n const score = await checkFn(partialOutput);\n if (score > threshold) {\n return {\n passed: false,\n reason: `Toxicity score ${score.toFixed(2)} exceeds threshold ${threshold}`,\n severity: \"critical\",\n };\n }\n return { passed: true };\n },\n };\n}\n\n/**\n * Create a streaming guardrail that limits output length.\n *\n * @example\n * ```typescript\n * const lengthGuardrail = createLengthStreamingGuardrail({\n * maxTokens: 4000,\n * warnAt: 3500,\n * });\n * ```\n */\nexport function createLengthStreamingGuardrail(options: {\n /** Maximum tokens before stopping */\n maxTokens: number;\n /** Warn at this token count (optional) */\n warnAt?: number;\n /** Stop the stream on max. @default true */\n stopOnFail?: boolean;\n}): StreamingGuardrail {\n const { maxTokens, warnAt, stopOnFail = true } = options;\n\n // Per-instance flag: if this guardrail is shared across concurrent streams,\n // the warning fires only once globally. Create separate instances for independent warning per stream.\n let warned = false;\n\n return {\n name: \"length-streaming\",\n stopOnFail,\n check(_partialOutput, tokenCount) {\n if (tokenCount >= maxTokens) {\n return {\n passed: false,\n reason: `Output exceeded maximum length of ${maxTokens} tokens`,\n severity: \"error\",\n };\n }\n\n if (warnAt && tokenCount >= warnAt && !warned) {\n warned = true;\n\n return {\n passed: true,\n warning: `Approaching maximum length: ${tokenCount}/${maxTokens} tokens`,\n severity: \"warning\",\n };\n }\n\n return { passed: true };\n },\n };\n}\n\n/**\n * Create a streaming guardrail that detects patterns (regex-based).\n *\n * @example\n * ```typescript\n * const piiGuardrail = createPatternStreamingGuardrail({\n * patterns: [\n * { regex: /\\b\\d{3}-\\d{2}-\\d{4}\\b/, name: 'SSN' },\n * { regex: /\\b\\d{16}\\b/, name: 'Credit Card' },\n * ],\n * stopOnFail: true,\n * });\n * ```\n */\nexport function createPatternStreamingGuardrail(options: {\n patterns: Array<{ regex: RegExp; name: string }>;\n stopOnFail?: boolean;\n}): StreamingGuardrail {\n const { patterns, stopOnFail = true } = options;\n\n return {\n name: \"pattern-streaming\",\n stopOnFail,\n check(partialOutput) {\n for (const { regex, name } of patterns) {\n regex.lastIndex = 0;\n if (regex.test(partialOutput)) {\n return {\n passed: false,\n reason: `Detected ${name} pattern in output`,\n severity: \"error\",\n };\n }\n }\n return { passed: true };\n },\n };\n}\n\n/**\n * Combine multiple streaming guardrails into one.\n *\n * @example\n * ```typescript\n * const combined = combineStreamingGuardrails([\n * createToxicityStreamingGuardrail({ ... }),\n * createLengthStreamingGuardrail({ ... }),\n * ]);\n * ```\n */\nexport function combineStreamingGuardrails(\n guardrails: StreamingGuardrail[],\n options: { name?: string; stopOnFirstFail?: boolean } = {},\n): StreamingGuardrail {\n const { name = \"combined-streaming\", stopOnFirstFail = true } = options;\n\n return {\n name,\n stopOnFail: stopOnFirstFail,\n async check(partialOutput, tokenCount) {\n const failures: string[] = [];\n for (const guardrail of guardrails) {\n const result = await guardrail.check(partialOutput, tokenCount);\n if (!result.passed) {\n if (stopOnFirstFail) {\n return {\n ...result,\n reason: `[${guardrail.name}] ${result.reason}`,\n };\n }\n failures.push(`[${guardrail.name}] ${result.reason ?? \"failed\"}`);\n }\n }\n if (failures.length > 0) {\n return { passed: false, reason: failures.join(\"; \") };\n }\n return { passed: true };\n },\n };\n}\n\n// ============================================================================\n// Output Guardrail Adapter\n// ============================================================================\n\n/**\n * Convert a regular output guardrail to a streaming guardrail.\n * Useful for reusing existing guardrails in streaming context.\n *\n * @example\n * ```typescript\n * const streamingPII = adaptOutputGuardrail(\n * \"pii-streaming\",\n * createPIIGuardrail({ redact: false }),\n * { checkInterval: 100 }\n * );\n * ```\n */\nexport function adaptOutputGuardrail(\n name: string,\n guardrail: GuardrailFn<OutputGuardrailData>,\n options: {\n /** Only run after this many tokens (optimization) */\n minTokens?: number;\n stopOnFail?: boolean;\n } = {},\n): StreamingGuardrail {\n const { minTokens = 0, stopOnFail = true } = options;\n\n return {\n name,\n stopOnFail,\n async check(partialOutput, tokenCount) {\n if (tokenCount < minTokens) {\n return { passed: true };\n }\n\n const result = await guardrail(\n {\n output: partialOutput,\n agentName: \"streaming\",\n input: \"\",\n messages: [],\n },\n {\n agentName: \"streaming\",\n input: \"\",\n facts: {},\n },\n );\n\n return {\n passed: result.passed,\n reason: result.reason,\n severity: result.passed ? undefined : \"error\",\n };\n },\n };\n}\n\n// ============================================================================\n// Stream Utilities\n// ============================================================================\n\n/**\n * Collect all tokens from a stream into a string.\n *\n * @example\n * ```typescript\n * const { stream, result } = orchestrator.runStream(agent, input);\n * const fullOutput = await collectTokens(stream);\n * ```\n */\nexport async function collectTokens(\n stream: AsyncIterable<StreamChunk>,\n): Promise<string> {\n let output = \"\";\n for await (const chunk of stream) {\n if (chunk.type === \"token\") {\n output += chunk.data;\n }\n }\n return output;\n}\n\n/**\n * Tap into a stream without consuming it.\n * Useful for logging or side effects.\n *\n * @example\n * ```typescript\n * const { stream } = orchestrator.runStream(agent, input);\n * const tapped = tapStream(stream, (chunk) => console.log(chunk));\n * for await (const chunk of tapped) { ... }\n * ```\n */\nexport async function* tapStream(\n stream: AsyncIterable<StreamChunk>,\n fn: (chunk: StreamChunk) => void | Promise<void>,\n): AsyncIterable<StreamChunk> {\n for await (const chunk of stream) {\n await fn(chunk);\n yield chunk;\n }\n}\n\n/**\n * Filter stream chunks by type.\n *\n * @example\n * ```typescript\n * const tokensOnly = filterStream(stream, ['token']);\n * ```\n */\nexport async function* filterStream<T extends StreamChunk[\"type\"]>(\n stream: AsyncIterable<StreamChunk>,\n types: T[],\n): AsyncIterable<Extract<StreamChunk, { type: T }>> {\n const typeSet = new Set(types);\n for await (const chunk of stream) {\n if (typeSet.has(chunk.type as T)) {\n yield chunk as Extract<StreamChunk, { type: T }>;\n }\n }\n}\n\n/**\n * Transform stream chunks.\n *\n * @example\n * ```typescript\n * const upperTokens = mapStream(stream, (chunk) => {\n * if (chunk.type === 'token') return { ...chunk, data: chunk.data.toUpperCase() };\n * return chunk;\n * });\n * ```\n */\nexport async function* mapStream<R>(\n stream: AsyncIterable<StreamChunk>,\n fn: (chunk: StreamChunk) => R | Promise<R>,\n): AsyncIterable<R> {\n for await (const chunk of stream) {\n yield await fn(chunk);\n }\n}\n\n// ============================================================================\n// Multiplexed Streaming (Parallel Agent Streams)\n// ============================================================================\n\n/** A multiplexed stream chunk tagged with the agent that produced it */\nexport interface MultiplexedStreamChunk {\n chunk: OrchestratorStreamChunk;\n agentId: string;\n}\n\n/** Result from a parallel streaming operation */\nexport interface MultiplexedStreamResult<T = unknown> {\n stream: AsyncIterable<MultiplexedStreamChunk>;\n results: Promise<RunResult<unknown>[]>;\n merge: Promise<T>;\n abort: () => void;\n /** Number of chunks dropped due to buffer overflow */\n getDroppedCount: () => number;\n}\n\n/** Maximum buffer size for multiplexed streams */\nconst MAX_MULTIPLEX_BUFFER = 10_000;\n\n/** A source stream with its agent ID */\ninterface TaggedSource {\n agentId: string;\n stream: AsyncIterable<OrchestratorStreamChunk>;\n}\n\n/**\n * Merge multiple async iterables into a single multiplexed stream,\n * tagging each chunk with its source agent ID.\n *\n * Race-based merge: pulls from all sources concurrently, emitting\n * chunks in arrival order. Error chunks from individual agents are\n * tagged and emitted (other agents continue).\n *\n * @example\n * ```typescript\n * const merged = mergeTaggedStreams([\n * { agentId: \"researcher\", stream: researchStream },\n * { agentId: \"writer\", stream: writerStream },\n * ]);\n *\n * for await (const { chunk, agentId } of merged) {\n * console.log(`[${agentId}]`, chunk);\n * }\n * ```\n */\n/** Result from mergeTaggedStreams */\nexport interface MergedTaggedStreamResult {\n stream: AsyncIterable<MultiplexedStreamChunk>;\n /** Number of chunks dropped due to buffer overflow */\n getDroppedCount: () => number;\n}\n\n/**\n * Merge multiple tagged async iterables into a single multiplexed stream.\n *\n * @param sources - Array of tagged source streams to merge.\n * @returns A merged stream result with a `getDroppedCount` accessor.\n */\nexport function mergeTaggedStreams(\n sources: TaggedSource[],\n): MergedTaggedStreamResult {\n // Guard: empty sources would hang forever since no consumer calls finish()\n if (sources.length === 0) {\n const emptyStream: AsyncIterable<MultiplexedStreamChunk> = {\n [Symbol.asyncIterator]() {\n const done = {\n done: true as const,\n value: undefined as unknown as MultiplexedStreamChunk,\n };\n\n return {\n async next() {\n return done;\n },\n async return() {\n return done;\n },\n };\n },\n };\n\n return { stream: emptyStream, getDroppedCount: () => 0 };\n }\n\n const buffer: MultiplexedStreamChunk[] = [];\n const waiters: Array<(item: MultiplexedStreamChunk | null) => void> = [];\n let activeSources = sources.length;\n let closed = false;\n let droppedCount = 0;\n\n function push(item: MultiplexedStreamChunk): void {\n if (closed) {\n return;\n }\n\n const waiter = waiters.shift();\n if (waiter) {\n waiter(item);\n\n return;\n }\n\n if (buffer.length < MAX_MULTIPLEX_BUFFER) {\n buffer.push(item);\n } else {\n droppedCount++;\n }\n }\n\n function finish(): void {\n activeSources--;\n if (activeSources <= 0) {\n closed = true;\n for (const waiter of waiters) {\n waiter(null);\n }\n waiters.length = 0;\n }\n }\n\n // Start consumers for each source\n for (const source of sources) {\n (async () => {\n try {\n for await (const chunk of source.stream) {\n push({ chunk, agentId: source.agentId });\n }\n } catch (error) {\n // Emit error as a tagged chunk\n push({\n chunk: {\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error)),\n },\n agentId: source.agentId,\n });\n } finally {\n finish();\n }\n })();\n }\n\n const stream: AsyncIterable<MultiplexedStreamChunk> = {\n [Symbol.asyncIterator](): AsyncIterator<MultiplexedStreamChunk> {\n return {\n async next(): Promise<IteratorResult<MultiplexedStreamChunk>> {\n if (buffer.length > 0) {\n return { done: false, value: buffer.shift()! };\n }\n\n if (closed) {\n return { done: true, value: undefined };\n }\n\n return new Promise<IteratorResult<MultiplexedStreamChunk>>(\n (resolve) => {\n waiters.push((item) => {\n if (item === null) {\n resolve({ done: true, value: undefined });\n } else {\n resolve({ done: false, value: item });\n }\n });\n },\n );\n },\n\n return(): Promise<IteratorResult<MultiplexedStreamChunk>> {\n // Stop accepting new chunks\n closed = true;\n buffer.length = 0;\n for (const waiter of waiters) {\n waiter(null);\n }\n waiters.length = 0;\n\n return Promise.resolve({ done: true, value: undefined });\n },\n };\n },\n };\n\n return {\n stream,\n getDroppedCount: () => droppedCount,\n };\n}\n","/**\n * P6: Structured Outputs — Schema validation with auto-retry for LLM responses.\n *\n * Turns unreliable text output into typed, validated data. Appends JSON schema\n * instructions to the system prompt and retries with error feedback on parse failure.\n *\n * Works with any Zod-compatible schema (any object with a `safeParse` method).\n *\n * @module\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n * import { withStructuredOutput, StructuredOutputError } from '@directive-run/ai';\n *\n * const SentimentSchema = z.object({\n * sentiment: z.enum([\"positive\", \"negative\", \"neutral\"]),\n * confidence: z.number().min(0).max(1),\n * });\n *\n * const runner = withStructuredOutput(baseRunner, {\n * schema: SentimentSchema,\n * maxRetries: 2,\n * });\n *\n * const result = await runner(agent, \"Analyze: I love this product!\");\n * // result.output is typed as { sentiment: string; confidence: number }\n * ```\n */\n\nimport type { AgentLike, AgentRunner, RunOptions, RunResult } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Zod-compatible schema duck type — any object with a `safeParse` method.\n *\n * This interface allows structured outputs to work with Zod, Valibot,\n * or any validation library that implements this pattern.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n *\n * // Zod schemas implement SafeParseable automatically\n * const schema = z.object({ name: z.string() });\n *\n * // Custom schema\n * const custom: SafeParseable<{ name: string }> = {\n * safeParse(value) {\n * if (typeof value === \"object\" && value && \"name\" in value) {\n * return { success: true, data: value as { name: string } };\n * }\n * return { success: false, error: { message: \"Missing name field\" } };\n * },\n * };\n * ```\n */\nexport interface SafeParseable<T = unknown> {\n safeParse(value: unknown): SafeParseResult<T>;\n /** Optional: schema description injected into the system prompt. */\n description?: string;\n}\n\nexport interface SafeParseResult<T> {\n success: boolean;\n data?: T;\n error?: { message?: string; issues?: Array<{ message: string }> };\n}\n\nexport interface StructuredOutputConfig<T = unknown> {\n /** Zod-compatible schema with safeParse. */\n schema: SafeParseable<T>;\n /** Max retries on parse/validation failure. @default 2 */\n maxRetries?: number;\n /** Custom JSON extractor. Default: finds first `{...}` or `[...]` in output. */\n extractJson?: (output: string) => unknown;\n /** Schema description to inject into system prompt. Auto-derived from schema.description if available. */\n schemaDescription?: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Maximum output length to process (1MB). */\nconst MAX_EXTRACT_LENGTH = 1_048_576;\n\n/** Default JSON extractor — finds the first `{...}` or `[...]` in output. */\nexport function extractJsonFromOutput(output: string): unknown {\n if (output.length > MAX_EXTRACT_LENGTH) {\n throw new Error(\n `[Directive] Output too large for JSON extraction (${output.length} chars, max ${MAX_EXTRACT_LENGTH}).`,\n );\n }\n\n const trimmed = output.trim();\n\n // Try direct parse first\n try {\n return JSON.parse(trimmed);\n } catch {\n // Continue to extraction\n }\n\n // Try to find JSON object or array\n const objectStart = trimmed.indexOf(\"{\");\n const arrayStart = trimmed.indexOf(\"[\");\n\n let start: number;\n let openChar: string;\n let closeChar: string;\n\n if (objectStart === -1 && arrayStart === -1) {\n throw new Error(\"[Directive] No JSON object or array found in output\");\n }\n\n if (objectStart === -1) {\n start = arrayStart;\n openChar = \"[\";\n closeChar = \"]\";\n } else if (arrayStart === -1) {\n start = objectStart;\n openChar = \"{\";\n closeChar = \"}\";\n } else {\n start = Math.min(objectStart, arrayStart);\n openChar = start === objectStart ? \"{\" : \"[\";\n closeChar = start === objectStart ? \"}\" : \"]\";\n }\n\n // Find matching closing bracket\n let depth = 0;\n let inString = false;\n let escaped = false;\n\n for (let i = start; i < trimmed.length; i++) {\n const char = trimmed[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === '\"') {\n inString = !inString;\n continue;\n }\n\n if (inString) {\n continue;\n }\n\n if (char === openChar) {\n depth++;\n } else if (char === closeChar) {\n depth--;\n if (depth === 0) {\n const jsonStr = trimmed.slice(start, i + 1);\n\n try {\n return JSON.parse(jsonStr);\n } catch {\n // LLMs emit literal newlines inside JSON string values — escape them\n const sanitized = jsonStr.replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, (match) =>\n match\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\"),\n );\n\n return JSON.parse(sanitized);\n }\n }\n }\n }\n\n throw new Error(\"[Directive] No valid JSON found in output\");\n}\n\n/** Format validation errors for feedback. */\nfunction formatValidationError(\n error: SafeParseResult<unknown>[\"error\"],\n): string {\n if (!error) {\n return \"Validation failed\";\n }\n\n if (error.issues && error.issues.length > 0) {\n return error.issues.map((issue) => issue.message).join(\"; \");\n }\n\n return error.message ?? \"Validation failed\";\n}\n\n// ============================================================================\n// Wrapper\n// ============================================================================\n\n/**\n * Wrap an AgentRunner with structured output parsing and validation.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n *\n * const SentimentSchema = z.object({\n * sentiment: z.enum([\"positive\", \"negative\", \"neutral\"]),\n * confidence: z.number().min(0).max(1),\n * });\n *\n * const runner = withStructuredOutput(baseRunner, {\n * schema: SentimentSchema,\n * maxRetries: 2,\n * });\n *\n * const result = await runner(agent, \"Analyze: I love this product!\");\n * // result.output is typed as { sentiment: string; confidence: number }\n * ```\n */\nexport function withStructuredOutput<T = unknown>(\n runner: AgentRunner,\n config: StructuredOutputConfig<T>,\n): AgentRunner {\n const {\n schema,\n maxRetries = 2,\n extractJson = extractJsonFromOutput,\n schemaDescription,\n } = config;\n\n // Validate config\n if (!Number.isFinite(maxRetries) || maxRetries < 0) {\n throw new Error(\n \"[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.\",\n );\n }\n\n const schemaPrompt =\n schemaDescription ?? schema.description ?? \"the specified JSON schema\";\n\n // The returned runner produces `T` from the schema. We cast at the\n // boundary to satisfy the `AgentRunner` generic while keeping output type-safe.\n return async <_T = unknown>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n ): Promise<RunResult<_T>> => {\n // Append JSON instruction to agent's system prompt\n const structuredAgent: AgentLike = {\n ...agent,\n instructions:\n (agent.instructions ?? \"\") +\n \"\\n\\nIMPORTANT: Respond with valid JSON matching \" +\n schemaPrompt +\n \". \" +\n \"Output ONLY the JSON object, no additional text or markdown formatting.\",\n };\n\n let lastResult: RunResult<unknown> | undefined;\n let lastError: string | undefined;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n // On retries, append error feedback as additional input\n const effectiveInput =\n attempt === 0\n ? input\n : `${input}\\n\\nYour previous response was not valid JSON. Error: ${lastError}\\nPlease try again with valid JSON only.`;\n\n const result = await runner(structuredAgent, effectiveInput, options);\n lastResult = result;\n\n // Try to extract and validate JSON\n const outputStr =\n typeof result.output === \"string\"\n ? result.output\n : JSON.stringify(result.output);\n\n try {\n const extracted = extractJson(outputStr);\n const parsed = schema.safeParse(extracted);\n\n if (parsed.success) {\n return {\n ...result,\n output: parsed.data as _T,\n };\n }\n\n lastError = formatValidationError(parsed.error);\n } catch (err) {\n lastError = err instanceof Error ? err.message : String(err);\n }\n }\n\n // All retries exhausted — throw with context\n throw new StructuredOutputError(\n `[Directive] Failed to get valid structured output after ${maxRetries + 1} attempts: ${lastError}`,\n lastResult,\n );\n };\n}\n\n/** Error thrown when structured output parsing fails after all retries. */\nexport class StructuredOutputError extends Error {\n readonly lastResult: RunResult<unknown> | undefined;\n\n constructor(message: string, lastResult?: RunResult<unknown>) {\n super(message);\n this.name = \"StructuredOutputError\";\n this.lastResult = lastResult;\n }\n}\n","// ============================================================================\n// Multi-Agent Orchestrator Utilities\n// ============================================================================\n//\n// Extracted from multi-agent-orchestrator.ts — pure utility functions and\n// classes that are independent of the orchestrator instance.\n// ============================================================================\n\nimport type {\n CheckpointDiff,\n CheckpointProgress,\n DagNode,\n GoalCheckpointState,\n PatternCheckpointState,\n} from \"./types.js\";\nimport type { CheckpointStore } from \"./checkpoint.js\";\nimport type {\n MultiAgentOrchestrator,\n MultiAgentOrchestratorOptions,\n} from \"./orchestrator-types.js\";\n\n// ============================================================================\n// Shallow Equality\n// ============================================================================\n\n/** Shallow structural equality for change detection (plain objects, arrays, and primitives) */\nexport function shallowEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (typeof a !== typeof b || a === null || b === null) {\n return false;\n }\n\n if (typeof a !== \"object\") {\n return false;\n }\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== (b as unknown[]).length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== (b as unknown[])[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (const key of aKeys) {\n if (aObj[key] !== bObj[key]) {\n return false;\n }\n }\n\n return true;\n}\n\n// ============================================================================\n// Async Semaphore\n// ============================================================================\n\n/**\n * Async semaphore for controlling concurrent access.\n * Uses a queue-based approach instead of polling for efficiency.\n *\n * @example\n * ```typescript\n * import { Semaphore } from '@directive-run/ai';\n *\n * const sem = new Semaphore(3); // Allow 3 concurrent operations\n *\n * async function doWork() {\n * const release = await sem.acquire();\n * try {\n * await performWork();\n * } finally {\n * release();\n * }\n * }\n * ```\n */\nexport class Semaphore {\n private count: number;\n private readonly maxPermits: number;\n private readonly queue: Array<{\n resolve: (release: () => void) => void;\n reject: (error: Error) => void;\n }> = [];\n\n constructor(max: number) {\n if (max < 1 || !Number.isFinite(max)) {\n throw new Error(\n `[Directive Semaphore] Invalid max permits: ${max}. Must be a finite number >= 1.`,\n );\n }\n this.maxPermits = max;\n this.count = max;\n }\n\n /** Create a one-shot release function that guards against double-release */\n private createReleaseFn(): () => void {\n let released = false;\n\n return () => {\n if (released) {\n return;\n }\n released = true;\n this.release();\n };\n }\n\n /** Acquire a permit, optionally with abort signal support */\n async acquire(signal?: AbortSignal): Promise<() => void> {\n if (signal?.aborted) {\n throw new Error(\"[Directive Semaphore] Aborted before acquiring permit\");\n }\n if (this.count > 0) {\n this.count--;\n\n return this.createReleaseFn();\n }\n\n return new Promise<() => void>((resolve, reject) => {\n let onAbort: (() => void) | undefined;\n\n const entry = {\n resolve: (releaseFn: () => void) => {\n if (onAbort && signal) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n resolve(releaseFn);\n },\n reject,\n };\n this.queue.push(entry);\n\n if (signal) {\n onAbort = () => {\n const idx = this.queue.indexOf(entry);\n if (idx >= 0) {\n this.queue.splice(idx, 1);\n reject(\n new Error(\n \"[Directive Semaphore] Aborted while waiting for permit\",\n ),\n );\n }\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n }\n\n /** Non-blocking acquire — returns null if no permits available */\n tryAcquire(): (() => void) | null {\n if (this.count > 0) {\n this.count--;\n\n return this.createReleaseFn();\n }\n\n return null;\n }\n\n private release(): void {\n this.count++;\n const next = this.queue.shift();\n if (next) {\n this.count--;\n next.resolve(this.createReleaseFn());\n }\n }\n\n /** Get current available permits */\n get available(): number {\n return this.count;\n }\n\n /** Get number of waiters in queue */\n get waiting(): number {\n return this.queue.length;\n }\n\n /** Get maximum permits */\n get max(): number {\n return this.maxPermits;\n }\n\n /** Reject all pending waiters with an error and reset permits */\n drain(): void {\n const err = new Error(\n \"[Directive Semaphore] Semaphore drained - all pending acquisitions rejected\",\n );\n const pending = this.queue.splice(0, this.queue.length);\n for (const waiter of pending) {\n waiter.reject(err);\n }\n this.count = this.maxPermits;\n }\n}\n\n// ============================================================================\n// Checkpoint Utility Functions\n// ============================================================================\n\n/**\n * Get the current step/round/iteration count from a pattern checkpoint state.\n *\n * Maps each pattern type to its natural progress counter: `step` for sequential\n * and goal, `round` for supervisor and debate, `iteration` for reflect, and\n * `completedCount` for DAG.\n *\n * @param state - The pattern checkpoint state to inspect.\n * @returns The current progress count for the pattern.\n */\nexport function getPatternStep(state: PatternCheckpointState): number {\n switch (state.type) {\n case \"sequential\":\n return state.step;\n case \"supervisor\":\n return state.round;\n case \"reflect\":\n return state.iteration;\n case \"debate\":\n return state.round;\n case \"dag\":\n return state.completedCount;\n case \"goal\":\n return state.step;\n }\n}\n\n/**\n * Compute progress metrics from a pattern checkpoint state.\n *\n * Returns percentage complete, steps completed/remaining, tokens consumed,\n * and estimated tokens remaining (when computable). Each pattern type\n * calculates these metrics from its own state structure.\n *\n * @param state - The pattern checkpoint state to analyze.\n * @returns A {@link CheckpointProgress} object with completion metrics.\n */\nexport function getCheckpointProgress(\n state: PatternCheckpointState,\n): CheckpointProgress {\n const stepsCompleted = getPatternStep(state);\n const stepsTotal = state.stepsTotal ?? null;\n\n switch (state.type) {\n case \"sequential\": {\n const tokensConsumed = state.results.reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const avgTokens =\n state.results.length > 0 ? tokensConsumed / state.results.length : 0;\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining:\n avgTokens > 0 && remaining != null\n ? Math.round(avgTokens * remaining)\n : null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"supervisor\": {\n const tokensConsumed = state.workerResults.reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"reflect\": {\n const tokensConsumed = state.history.reduce(\n (sum, h) => sum + h.producerTokens + h.evaluatorTokens,\n 0,\n );\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"debate\": {\n const tokensConsumed = state.tokensConsumed;\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"dag\": {\n const total = stepsTotal ?? Object.keys(state.statuses).length;\n const completed = state.completedCount;\n const tokensConsumed = Object.values(state.nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const avgTokens = completed > 0 ? tokensConsumed / completed : 0;\n const remaining = total - completed;\n\n return {\n percentage: total > 0 ? Math.round((completed / total) * 100) : 0,\n stepsCompleted: completed,\n stepsTotal: total,\n tokensConsumed,\n estimatedTokensRemaining:\n remaining > 0 ? Math.round(avgTokens * remaining) : 0,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"goal\": {\n const tokensConsumed = Object.values(state.nodeOutputs).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const satisfaction = state.lastSatisfaction;\n\n return {\n percentage: Math.round(satisfaction * 100),\n stepsCompleted,\n stepsTotal: stepsTotal ?? null,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining:\n state.stepMetrics.length > 0 ? estimateGoalSteps(state) : null,\n };\n }\n }\n}\n\nfunction estimateGoalSteps(state: GoalCheckpointState): number | null {\n const metrics = state.stepMetrics;\n if (metrics.length < 2) {\n return null;\n }\n\n const remaining = 1.0 - state.lastSatisfaction;\n if (remaining <= 0) {\n return 0;\n }\n\n // Average satisfaction delta\n const totalDelta = metrics.reduce(\n (sum, m) => sum + Math.max(0, m.satisfactionDelta),\n 0,\n );\n const avgDelta = totalDelta / metrics.length;\n if (avgDelta <= 0) {\n return null;\n }\n\n return Math.ceil(remaining / avgDelta);\n}\n\n/**\n * Compute the diff between two checkpoint states of the same pattern type.\n *\n * Returns the delta in steps, tokens, and time between checkpoints.\n * Useful for understanding how much progress occurred between saves.\n *\n * @param a - The earlier checkpoint state.\n * @param b - The later checkpoint state.\n * @returns A {@link CheckpointDiff} with step, token, and time deltas.\n * @throws If the two checkpoints have different pattern types.\n */\nexport function diffCheckpoints(\n a: PatternCheckpointState,\n b: PatternCheckpointState,\n): CheckpointDiff {\n if (a.type !== b.type) {\n throw new Error(\n `[Directive Checkpoint] Cannot diff different pattern types: ${a.type} vs ${b.type}`,\n );\n }\n\n const getTokens = (s: PatternCheckpointState): number => {\n switch (s.type) {\n case \"sequential\":\n return s.results.reduce((sum, r) => sum + r.totalTokens, 0);\n case \"supervisor\":\n return s.workerResults.reduce((sum, r) => sum + r.totalTokens, 0);\n case \"reflect\":\n return s.history.reduce(\n (sum, h) => sum + h.producerTokens + h.evaluatorTokens,\n 0,\n );\n case \"debate\":\n return s.tokensConsumed;\n case \"dag\":\n return Object.values(s.nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n case \"goal\":\n return Object.values(s.nodeOutputs).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n }\n };\n\n const diff: CheckpointDiff = {\n patternType: a.type,\n stepDelta: getPatternStep(b) - getPatternStep(a),\n tokensDelta: getTokens(b) - getTokens(a),\n };\n\n // Add facts diff for goal pattern\n if (a.type === \"goal\" && b.type === \"goal\") {\n const aKeys = new Set(Object.keys(a.facts));\n const bKeys = new Set(Object.keys(b.facts));\n const added: string[] = [];\n const removed: string[] = [];\n const changed: Array<{ key: string; before: unknown; after: unknown }> = [];\n\n for (const key of bKeys) {\n if (!aKeys.has(key)) {\n added.push(key);\n } else if (\n JSON.stringify(a.facts[key]) !== JSON.stringify(b.facts[key])\n ) {\n changed.push({ key, before: a.facts[key], after: b.facts[key] });\n }\n }\n for (const key of aKeys) {\n if (!bKeys.has(key)) {\n removed.push(key);\n }\n }\n\n diff.facts = { added, removed, changed };\n }\n\n // Add nodes completed for DAG/goal\n if (a.type === \"dag\" && b.type === \"dag\") {\n const aCompleted = new Set(\n Object.entries(a.statuses)\n .filter(([, s]) => s === \"completed\")\n .map(([id]) => id),\n );\n diff.nodesCompleted = Object.entries(b.statuses)\n .filter(([id, s]) => s === \"completed\" && !aCompleted.has(id))\n .map(([id]) => id);\n }\n\n if (a.type === \"goal\" && b.type === \"goal\") {\n const aCompleted = new Set(a.completedNodes);\n diff.nodesCompleted = b.completedNodes.filter((id) => !aCompleted.has(id));\n }\n\n return diff;\n}\n\n/**\n * Fork an orchestrator from a checkpoint — creates a new independent orchestrator\n * restored to the checkpoint's state, ready to diverge from that point.\n *\n * @param options - The original orchestrator options used to create the orchestrator\n * @param checkpointStore - The checkpoint store containing the checkpoint\n * @param checkpointId - The ID of the checkpoint to fork from\n * @returns A new independent MultiAgentOrchestrator restored to checkpoint state\n *\n * @example\n * ```typescript\n * const forked = await forkFromCheckpoint(orchestratorOptions, store, \"ckpt_abc123\");\n * const result = await forked.replay(\"ckpt_abc123\", pattern, { input: \"new input\" });\n * ```\n */\nexport async function forkFromCheckpoint(\n options: MultiAgentOrchestratorOptions,\n checkpointStore: CheckpointStore,\n checkpointId: string,\n): Promise<MultiAgentOrchestrator> {\n // Lazy import to avoid circular dependency — createMultiAgentOrchestrator\n // is defined in multi-agent-orchestrator.ts which imports from this file.\n const { createMultiAgentOrchestrator } = await import(\n \"./multi-agent-orchestrator.js\"\n );\n\n const checkpoint = await checkpointStore.load(checkpointId);\n if (!checkpoint) {\n throw new Error(\n `[Directive MultiAgent] Checkpoint not found: ${checkpointId}`,\n );\n }\n\n // Deep-clone the checkpoint so the forked orchestrator is fully independent\n const cloned = structuredClone(checkpoint);\n\n const forked = createMultiAgentOrchestrator({\n ...options,\n checkpointStore,\n });\n\n forked.restore(cloned);\n\n return forked;\n}\n\n// ============================================================================\n// DAG Validation\n// ============================================================================\n\n/**\n * Validate that a DAG pattern has no cycles using Kahn's algorithm.\n *\n * Also validates that all dependency references point to existing nodes\n * and that at least one root node (no dependencies) exists.\n *\n * @param patternId - The pattern ID (for error messages).\n * @param nodes - The DAG node definitions.\n * @throws If a cycle is detected, a dependency is missing, or no root nodes exist.\n * @internal\n */\nexport function validateDagAcyclic(\n patternId: string,\n nodes: Record<string, DagNode>,\n): void {\n const nodeIds = Object.keys(nodes);\n\n // Validate deps reference valid node IDs\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const depId of node.deps ?? []) {\n if (!nodes[depId]) {\n throw new Error(\n `[Directive MultiAgent] DAG pattern \"${patternId}\": node \"${nodeId}\" depends on unknown node \"${depId}\"`,\n );\n }\n }\n }\n\n // Ensure at least one root node\n const hasRoot = nodeIds.some((id) => {\n const deps = nodes[id]?.deps;\n\n return !deps || deps.length === 0;\n });\n if (!hasRoot) {\n throw new Error(\n `[Directive MultiAgent] DAG pattern \"${patternId}\": no root nodes (every node has dependencies)`,\n );\n }\n\n // Kahn's algorithm for cycle detection\n const inDegree: Record<string, number> = Object.create(null);\n const adjacency: Record<string, string[]> = Object.create(null);\n for (const id of nodeIds) {\n adjacency[id] = [];\n }\n for (const [nodeId, node] of Object.entries(nodes)) {\n inDegree[nodeId] = (node.deps ?? []).length;\n for (const depId of node.deps ?? []) {\n adjacency[depId]!.push(nodeId);\n }\n }\n\n const queue: string[] = [];\n for (const id of nodeIds) {\n if (inDegree[id] === 0) {\n queue.push(id);\n }\n }\n\n let visited = 0;\n while (queue.length > 0) {\n const current = queue.shift()!;\n visited++;\n for (const dependent of adjacency[current] ?? []) {\n inDegree[dependent]!--;\n if (inDegree[dependent] === 0) {\n queue.push(dependent);\n }\n }\n }\n\n if (visited !== nodeIds.length) {\n throw new Error(\n `[Directive MultiAgent] DAG pattern \"${patternId}\": cycle detected. Visited ${visited}/${nodeIds.length} nodes.`,\n );\n }\n}\n","import type {\n AgentSelectionStrategy,\n DagExecutionContext,\n DagNode,\n DagPattern,\n GoalMetrics,\n GoalNode,\n GoalPattern,\n PatternCheckpointConfig,\n RelaxationTier,\n RunResult,\n} from \"./types.js\";\nimport type {\n ParallelPattern,\n SequentialPattern,\n SupervisorPattern,\n ReflectPattern,\n RacePattern,\n ReflectIterationRecord,\n} from \"./multi-agent-orchestrator.js\";\nimport type { ReflectionEvaluation } from \"./reflection.js\";\n\n// ============================================================================\n// Pattern Helpers\n// ============================================================================\n\n/**\n * Create a parallel execution pattern that runs handlers concurrently and merges results.\n *\n * @param handlers - Handler IDs (agents or tasks) to run concurrently.\n * @param merge - Combine all handler results into a single output (array may be shorter than handlers when `minSuccess` is set).\n * @param options - Optional `minSuccess` and `timeout` overrides.\n * @returns A {@link ParallelPattern} configuration object.\n *\n * @example\n * ```typescript\n * const researchPattern = parallel(\n * ['researcher', 'researcher', 'researcher'],\n * (results) => results.map(r => r.output).join('\\n'),\n * );\n * ```\n */\nexport function parallel<T>(\n handlers: string[],\n merge: (results: RunResult<unknown>[]) => T | Promise<T>,\n options?: { minSuccess?: number; timeout?: number },\n): ParallelPattern<T> {\n return {\n type: \"parallel\",\n handlers,\n merge,\n ...options,\n };\n}\n\n/**\n * Create a sequential execution pattern that pipes output from one handler to the next.\n *\n * @param handlers - Handler IDs (agents or tasks) to run in order, where each handler's output feeds as input to the next.\n * @param options - Optional `transform`, `extract`, and `continueOnError` overrides.\n * @returns A {@link SequentialPattern} configuration object.\n *\n * @example\n * ```typescript\n * const writeReviewPattern = sequential(\n * ['writer', 'reviewer'],\n * { transform: (output) => `Review this: ${output}` },\n * );\n * ```\n */\nexport function sequential<T>(\n handlers: string[],\n options?: {\n transform?: (output: unknown, handlerId: string, index: number) => string;\n extract?: (output: unknown) => T;\n continueOnError?: boolean;\n },\n): SequentialPattern<T> {\n return {\n type: \"sequential\",\n handlers,\n ...options,\n };\n}\n\n/**\n * Create a supervisor pattern where a coordinating agent delegates work to a pool of workers.\n *\n * The supervisor runs first, then dispatches tasks to workers based on its output.\n * This repeats for up to `maxRounds` until the supervisor signals completion.\n *\n * @param supervisorAgent - Agent ID that coordinates the workers.\n * @param workers - Agent IDs for the worker pool.\n * @param options - Optional `maxRounds` and `extract` overrides.\n * @returns A {@link SupervisorPattern} configuration object.\n *\n * @example\n * ```typescript\n * const managedPattern = supervisor(\n * 'manager',\n * ['worker1', 'worker2'],\n * { maxRounds: 3 },\n * );\n * ```\n */\nexport function supervisor<T>(\n supervisorAgent: string,\n workers: string[],\n options?: {\n maxRounds?: number;\n extract?: (\n supervisorOutput: unknown,\n workerResults: RunResult<unknown>[],\n ) => T;\n },\n): SupervisorPattern<T> {\n return {\n type: \"supervisor\",\n supervisor: supervisorAgent,\n workers,\n ...options,\n };\n}\n\n/**\n * Create a directed acyclic graph (DAG) execution pattern.\n *\n * Nodes run concurrently when their dependencies are satisfied. The runtime\n * validates the graph is acyclic and that all dependency references are valid.\n *\n * @param nodes - Node definitions keyed by ID, each with a `handler` and optional `deps` array.\n * @param merge - Combine DAG outputs into a single result (defaults to `context.outputs`).\n * @param options - Optional `timeout`, `maxConcurrent`, and `onNodeError` strategy.\n * @returns A {@link DagPattern} configuration object.\n *\n * @example\n * ```typescript\n * const researchPipeline = dag(\n * {\n * fetch: { handler: 'fetcher' },\n * analyze: { handler: 'analyzer', deps: ['fetch'] },\n * summarize: { handler: 'summarizer', deps: ['analyze'] },\n * },\n * (context) => context.outputs.summarize,\n * );\n * ```\n */\nexport function dag<T = Record<string, unknown>>(\n nodes: Record<string, DagNode>,\n merge?: (context: DagExecutionContext) => T | Promise<T>,\n options?: {\n /** Overall timeout in ms for the entire DAG. */\n timeout?: number;\n /** Max nodes running concurrently. Default: Infinity */\n maxConcurrent?: number;\n /**\n * Error handling strategy.\n * - `\"fail\"` — abort entire DAG on first node error (default)\n * - `\"skip-downstream\"` — mark downstream nodes as skipped, other branches continue\n * - `\"continue\"` — ignore errors, other branches continue\n */\n onNodeError?: \"fail\" | \"skip-downstream\" | \"continue\";\n },\n): DagPattern<T> {\n return {\n type: \"dag\",\n nodes,\n merge: merge ?? ((context: DagExecutionContext) => context.outputs as T),\n ...options,\n };\n}\n\n/**\n * Create a reflect pattern that iterates between a producer and evaluator until quality is met.\n *\n * The producer generates output, then the evaluator scores it. If the score\n * is below the threshold, the producer retries with evaluator feedback,\n * up to `maxIterations` times.\n *\n * @param handler - Producer handler ID (agent or task) that generates output.\n * @param evaluator - Evaluator handler ID that judges quality and provides feedback.\n * @param options - Optional iteration, parsing, signal, and threshold configuration.\n * @returns A {@link ReflectPattern} configuration object.\n *\n * @example\n * ```typescript\n * const reviewPattern = reflect('writer', 'reviewer', { maxIterations: 2 });\n * ```\n */\nexport function reflect<T>(\n handler: string,\n evaluator: string,\n options?: {\n maxIterations?: number;\n parseEvaluation?: (output: unknown) => ReflectionEvaluation;\n buildRetryInput?: (\n input: string,\n feedback: string,\n iteration: number,\n ) => string;\n extract?: (output: unknown) => T;\n onExhausted?: \"accept-last\" | \"accept-best\" | \"throw\";\n onIteration?: (record: ReflectIterationRecord) => void;\n signal?: AbortSignal;\n timeout?: number;\n threshold?: number | ((iteration: number) => number);\n },\n): ReflectPattern<T> {\n return {\n type: \"reflect\",\n handler,\n evaluator,\n ...options,\n };\n}\n\n/**\n * Create a race pattern that runs handlers concurrently and returns the first successful result.\n *\n * All handlers start simultaneously. The first to complete successfully wins;\n * remaining handlers are aborted. Use `minSuccess` to wait for N results before picking.\n *\n * @param handlers - Handler IDs (agents or tasks) to race concurrently.\n * @param options - Optional `extract`, `timeout`, `minSuccess`, and `signal` overrides.\n * @returns A {@link RacePattern} configuration object.\n *\n * @example\n * ```typescript\n * const fastest = race(['fast-model', 'smart-model'], { timeout: 5000 });\n * ```\n */\nexport function race<T>(\n handlers: string[],\n options?: {\n extract?: (result: RunResult<unknown>) => T;\n timeout?: number;\n minSuccess?: number;\n signal?: AbortSignal;\n },\n): RacePattern<T> {\n return {\n type: \"race\",\n handlers,\n ...options,\n };\n}\n\n// ============================================================================\n// Goal Pattern Factory & Selection Strategies\n// ============================================================================\n\n/**\n * Create a goal-driven execution pattern where agents are selected and run\n * until a goal condition is satisfied.\n *\n * Declare what each agent produces and requires. The runtime automatically\n * infers the execution graph from dependency analysis and drives agents\n * toward goal achievement, with optional satisfaction scoring and relaxation tiers.\n *\n * @param nodes - Goal node definitions keyed by ID, each declaring `produces`, `requires`, and a `handler`.\n * @param when - Predicate that returns `true` when the goal is achieved.\n * @param options - Optional `satisfaction`, `maxSteps`, `extract`, `timeout`, `selectionStrategy`, and `relaxation` config.\n * @returns A {@link GoalPattern} configuration object.\n *\n * @example\n * ```typescript\n * const pipeline = goal(\n * {\n * researcher: {\n * handler: \"researcher\",\n * produces: [\"research.findings\"],\n * requires: [\"research.topic\"],\n * extractOutput: (r) => ({ \"research.findings\": r.output }),\n * },\n * writer: {\n * handler: \"writer\",\n * produces: [\"article.draft\"],\n * requires: [\"research.findings\"],\n * extractOutput: (r) => ({ \"article.draft\": r.output }),\n * },\n * },\n * (facts) => facts[\"article.draft\"] != null,\n * { maxSteps: 10, extract: (facts) => facts[\"article.draft\"] },\n * );\n * ```\n */\nexport function goal<T = Record<string, unknown>>(\n nodes: Record<string, GoalNode>,\n when: (facts: Record<string, unknown>) => boolean,\n options?: {\n satisfaction?: (facts: Record<string, unknown>) => number;\n maxSteps?: number;\n extract?: (facts: Record<string, unknown>) => T;\n timeout?: number;\n signal?: AbortSignal;\n selectionStrategy?: AgentSelectionStrategy;\n relaxation?: RelaxationTier[];\n onStep?: (\n step: number,\n facts: Record<string, unknown>,\n readyNodes: string[],\n ) => void;\n onStall?: (step: number, metrics: GoalMetrics) => void;\n checkpoint?: PatternCheckpointConfig;\n },\n): GoalPattern<T> {\n return {\n type: \"goal\",\n nodes,\n when,\n ...options,\n };\n}\n\n/**\n * Create a selection strategy that runs all ready agents concurrently.\n *\n * This is the default strategy for {@link goal} patterns.\n *\n * @returns An {@link AgentSelectionStrategy} that selects every ready agent.\n */\nexport function allReadyStrategy(): AgentSelectionStrategy {\n return {\n select: (readyAgents) => readyAgents,\n };\n}\n\n/**\n * Create a selection strategy that picks agents with the highest historical impact.\n *\n * Sorts ready agents by average satisfaction delta (descending) and selects the top N.\n *\n * @param opts - Optional `topN` to limit how many agents are selected (default: 3).\n * @returns An {@link AgentSelectionStrategy} that prioritizes high-impact agents.\n */\nexport function highestImpactStrategy(opts?: {\n topN?: number;\n}): AgentSelectionStrategy {\n const topN = opts?.topN ?? 3;\n\n return {\n select: (readyAgents, metrics) => {\n const sorted = [...readyAgents].sort((a, b) => {\n const aAvg = metrics[a]?.avgSatisfactionDelta ?? 0;\n const bAvg = metrics[b]?.avgSatisfactionDelta ?? 0;\n\n return bAvg - aAvg;\n });\n\n return sorted.slice(0, topN);\n },\n };\n}\n\n/**\n * Create a selection strategy that prefers agents with lower token cost per satisfaction delta.\n *\n * Agents without historical metrics are prioritized first (to gather data).\n *\n * @returns An {@link AgentSelectionStrategy} that optimizes for cost efficiency.\n */\nexport function costEfficientStrategy(): AgentSelectionStrategy {\n return {\n select: (readyAgents, metrics) => {\n const sorted = [...readyAgents].sort((a, b) => {\n const aM = metrics[a];\n const bM = metrics[b];\n\n // Agents without metrics go first (need data)\n if (!aM || aM.runs === 0) {\n return -1;\n }\n if (!bM || bM.runs === 0) {\n return 1;\n }\n\n // Cost per delta: lower is better\n const aCost =\n aM.avgSatisfactionDelta > 0\n ? aM.tokens / aM.runs / aM.avgSatisfactionDelta\n : Number.POSITIVE_INFINITY;\n const bCost =\n bM.avgSatisfactionDelta > 0\n ? bM.tokens / bM.runs / bM.avgSatisfactionDelta\n : Number.POSITIVE_INFINITY;\n\n return aCost - bCost;\n });\n\n return sorted;\n },\n };\n}\n","import type { ExecutionPattern } from \"./multi-agent-orchestrator.js\";\n\n// ============================================================================\n// Pattern Serialization\n// ============================================================================\n\n/** Serialized DAG node (functions stripped) */\nexport interface SerializedDagNode {\n handler: string;\n agent?: string;\n deps?: string[];\n timeout?: number;\n priority?: number;\n}\n\n/** JSON-safe representation of any execution pattern (all functions stripped) */\nexport type SerializedPattern =\n | {\n type: \"parallel\";\n handlers: string[];\n minSuccess?: number;\n timeout?: number;\n }\n | { type: \"sequential\"; handlers: string[]; continueOnError?: boolean }\n | {\n type: \"supervisor\";\n supervisor: string;\n workers: string[];\n maxRounds?: number;\n }\n | {\n type: \"dag\";\n nodes: Record<string, SerializedDagNode>;\n timeout?: number;\n maxConcurrent?: number;\n onNodeError?: \"fail\" | \"skip-downstream\" | \"continue\";\n }\n | {\n type: \"reflect\";\n handler: string;\n evaluator: string;\n maxIterations?: number;\n onExhausted?: \"accept-last\" | \"accept-best\" | \"throw\";\n timeout?: number;\n threshold?: number;\n }\n | { type: \"race\"; handlers: string[]; timeout?: number; minSuccess?: number }\n | {\n type: \"debate\";\n handlers: string[];\n evaluator: string;\n maxRounds?: number;\n timeout?: number;\n }\n | {\n type: \"goal\";\n nodes: Record<string, SerializedGoalNode>;\n maxSteps?: number;\n timeout?: number;\n };\n\n/** Serialized goal node (functions stripped) */\nexport interface SerializedGoalNode {\n handler: string;\n agent?: string;\n produces: string[];\n requires?: string[];\n allowRerun?: boolean;\n priority?: number;\n}\n\n/**\n * Serialize an execution pattern to a JSON-safe object.\n *\n * @remarks\n * Strips all function callbacks and runtime objects (AbortSignal) while\n * preserving the topology -- which agents, in what structure, with what\n * numeric/string/boolean options.\n *\n * Use this for visual editors, LLM-generated plans, persistence, or\n * debugging. Restore with {@link patternFromJSON}.\n *\n * Function-form `threshold` on reflect patterns is not serializable and will be dropped.\n * Re-supply it via `overrides` when calling {@link patternFromJSON}.\n *\n * @param pattern - The execution pattern to serialize.\n * @returns A {@link SerializedPattern} safe for `JSON.stringify`.\n *\n * @example\n * ```typescript\n * const p = parallel(['a', 'b'], (r) => r);\n * const json = patternToJSON(p);\n * // { type: \"parallel\", handlers: [\"a\", \"b\"] }\n * localStorage.setItem(\"plan\", JSON.stringify(json));\n * ```\n */\nexport function patternToJSON(\n pattern: ExecutionPattern<unknown>,\n): SerializedPattern {\n switch (pattern.type) {\n case \"parallel\":\n return {\n type: \"parallel\",\n handlers: pattern.handlers,\n minSuccess: pattern.minSuccess,\n timeout: pattern.timeout,\n };\n case \"sequential\":\n return {\n type: \"sequential\",\n handlers: pattern.handlers,\n continueOnError: pattern.continueOnError,\n };\n case \"supervisor\":\n return {\n type: \"supervisor\",\n supervisor: pattern.supervisor,\n workers: pattern.workers,\n maxRounds: pattern.maxRounds,\n };\n case \"dag\": {\n const nodes: Record<string, SerializedDagNode> = Object.create(null);\n for (const [id, node] of Object.entries(pattern.nodes)) {\n nodes[id] = {\n handler: node.handler,\n deps: node.deps,\n timeout: node.timeout,\n priority: node.priority,\n };\n }\n\n return {\n type: \"dag\",\n nodes,\n timeout: pattern.timeout,\n maxConcurrent: pattern.maxConcurrent,\n onNodeError: pattern.onNodeError,\n };\n }\n case \"reflect\":\n return {\n type: \"reflect\",\n handler: pattern.handler,\n evaluator: pattern.evaluator,\n maxIterations: pattern.maxIterations,\n onExhausted: pattern.onExhausted,\n timeout: pattern.timeout,\n threshold:\n typeof pattern.threshold === \"number\" ? pattern.threshold : undefined,\n };\n case \"race\":\n return {\n type: \"race\",\n handlers: pattern.handlers,\n timeout: pattern.timeout,\n minSuccess: pattern.minSuccess,\n };\n case \"debate\":\n return {\n type: \"debate\",\n handlers: pattern.handlers,\n evaluator: pattern.evaluator,\n maxRounds: pattern.maxRounds,\n timeout: pattern.timeout,\n };\n case \"goal\": {\n const cnodes: Record<string, SerializedGoalNode> = Object.create(null);\n for (const [id, node] of Object.entries(pattern.nodes)) {\n cnodes[id] = {\n handler: node.handler,\n produces: node.produces,\n requires: node.requires,\n allowRerun: node.allowRerun,\n priority: node.priority,\n };\n }\n\n return {\n type: \"goal\",\n nodes: cnodes,\n maxSteps: pattern.maxSteps,\n timeout: pattern.timeout,\n };\n }\n }\n}\n\nconst ALLOWED_PATTERN_TYPES = new Set([\n \"parallel\",\n \"sequential\",\n \"supervisor\",\n \"dag\",\n \"reflect\",\n \"race\",\n \"debate\",\n \"goal\",\n]);\n\n/**\n * Restore an execution pattern from its serialized JSON form.\n *\n * @remarks\n * Returns the data structure with all function fields set to `undefined`.\n * Supply callbacks via the optional `overrides` parameter to re-attach\n * runtime behavior.\n *\n * @param json - The serialized pattern from {@link patternToJSON} or persisted storage.\n * @param overrides - Optional partial pattern to re-attach function callbacks (e.g. `merge`, `extract`).\n * @returns A fully typed {@link ExecutionPattern} ready for use with the imperative API.\n * @throws If the pattern type is invalid or unknown.\n *\n * @example\n * ```typescript\n * const json = JSON.parse(localStorage.getItem(\"plan\")!);\n * const pattern = patternFromJSON<string[]>(json, {\n * merge: (results) => results.map(r => r.output as string),\n * });\n * if (pattern.type === \"parallel\") {\n * const result = await orchestrator.runParallel(pattern.handlers, input, pattern.merge);\n * }\n * ```\n */\nexport function patternFromJSON<T = unknown>(\n json: SerializedPattern,\n overrides?: Partial<ExecutionPattern<T>>,\n): ExecutionPattern<T> {\n if (\n !json ||\n typeof json !== \"object\" ||\n !ALLOWED_PATTERN_TYPES.has((json as SerializedPattern).type)\n ) {\n throw new Error(\n `[Directive] patternFromJSON: invalid or unknown pattern type \"${(json as Record<string, unknown>)?.type}\"`,\n );\n }\n const safe: Record<string, unknown> = Object.create(null);\n for (const [k, v] of Object.entries(json)) {\n if (k !== \"__proto__\" && k !== \"constructor\" && k !== \"prototype\") {\n safe[k] = v;\n }\n }\n\n return { ...safe, ...overrides } as ExecutionPattern<T>;\n}\n","// ============================================================================\n// Pattern Composition Helpers\n// ============================================================================\n//\n// Extracted from multi-agent-orchestrator.ts — agent selection, result merging,\n// pattern composition, constraint spawning, debate, derived constraints, and\n// pool scaling utilities.\n// ============================================================================\n\nimport type {\n RunResult,\n OrchestratorConstraint,\n OrchestratorState,\n DagPattern,\n DagExecutionContext,\n GoalPattern,\n} from \"./types.js\";\n\nimport type {\n MultiAgentOrchestrator,\n RunAgentRequirement,\n DebatePattern,\n DebateResult,\n AgentRegistry,\n ExecutionPattern,\n ParallelPattern,\n SequentialPattern,\n SupervisorPattern,\n ReflectPattern,\n RacePattern,\n} from \"./multi-agent-orchestrator.js\";\n\nimport type { ReflectionEvaluation } from \"./reflection.js\";\n\nimport { extractJsonFromOutput } from \"./structured-output.js\";\n\nimport { safeStringify } from \"@directive-run/core/internals\";\n\n// ============================================================================\n// Agent Selection Helpers\n// ============================================================================\n\n/**\n * Create a constraint that routes to a specific agent when a condition is met.\n *\n * @param when - Predicate that triggers the constraint (may be async).\n * @param agent - Agent ID or function returning an agent ID to route to.\n * @param input - Input string or function returning the input for the selected agent.\n * @param priority - Optional constraint priority (higher = evaluated first).\n * @returns An {@link OrchestratorConstraint} that emits a `RUN_AGENT` requirement.\n *\n * @example\n * ```typescript\n * const constraints = {\n * routeToExpert: selectAgent(\n * (facts) => facts.complexity > 0.8,\n * 'expert',\n * (facts) => facts.query,\n * ),\n * };\n * ```\n */\nexport function selectAgent(\n when: (facts: Record<string, unknown>) => boolean | Promise<boolean>,\n agent: string | ((facts: Record<string, unknown>) => string),\n input: string | ((facts: Record<string, unknown>) => string),\n priority?: number,\n): OrchestratorConstraint<Record<string, unknown>> {\n return {\n when: when as (\n facts: Record<string, unknown> & OrchestratorState,\n ) => boolean | Promise<boolean>,\n require: (facts: Record<string, unknown> & OrchestratorState) => {\n const selectedAgent = typeof agent === \"function\" ? agent(facts) : agent;\n const selectedInput = typeof input === \"function\" ? input(facts) : input;\n\n return {\n type: \"RUN_AGENT\",\n agent: selectedAgent,\n input: selectedInput,\n } as RunAgentRequirement;\n },\n priority,\n };\n}\n\n/**\n * Create a `RUN_AGENT` requirement object for use in constraint `require()` functions.\n *\n * @param agent - The agent ID to run.\n * @param input - The input string for the agent.\n * @param context - Optional additional context passed to the agent runner.\n * @returns A `RUN_AGENT` {@link RunAgentRequirement} object.\n *\n * @example\n * ```typescript\n * constraints: {\n * needsResearch: {\n * when: (facts) => facts.hasUnknowns,\n * require: (facts) => runAgentRequirement('researcher', facts.query as string),\n * },\n * }\n * ```\n */\nexport function runAgentRequirement(\n agent: string,\n input: string,\n context?: Record<string, unknown>,\n): RunAgentRequirement {\n return {\n type: \"RUN_AGENT\",\n agent,\n input,\n context,\n };\n}\n\n// ============================================================================\n// Result Merging Utilities\n// ============================================================================\n\n/**\n * Merge run results by concatenating their outputs into a single string.\n *\n * @param results - Array of run results to concatenate.\n * @param separator - String inserted between outputs (default: `\"\\n\\n\"`).\n * @returns The concatenated output string.\n */\nexport function concatResults(\n results: RunResult<unknown>[],\n separator = \"\\n\\n\",\n): string {\n return results\n .map((r) =>\n typeof r.output === \"string\" ? r.output : safeStringify(r.output),\n )\n .join(separator);\n}\n\n/**\n * Pick the highest-scoring result from an array using a scoring function.\n *\n * @param results - Array of run results to compare.\n * @param score - Function that assigns a numeric score to each result (higher wins).\n * @returns The {@link RunResult} with the highest score.\n * @throws If the results array is empty.\n */\nexport function pickBestResult<T>(\n results: RunResult<T>[],\n score: (result: RunResult<T>) => number,\n): RunResult<T> {\n if (results.length === 0) {\n throw new Error(\"[Directive MultiAgent] No results to pick from\");\n }\n\n return results.reduce((best, current) =>\n score(current) > score(best) ? current : best,\n );\n}\n\n/**\n * Extract the `output` value from each run result into an array.\n *\n * @param results - Array of run results to collect from.\n * @returns An array of output values in the same order as the input results.\n */\nexport function collectOutputs<T>(results: RunResult<T>[]): T[] {\n return results.map((r) => r.output);\n}\n\n/**\n * Sum the total token counts from an array of run results.\n *\n * @param results - Array of run results to aggregate.\n * @returns The total number of tokens consumed across all results.\n */\nexport function aggregateTokens(results: RunResult<unknown>[]): number {\n return results.reduce((sum, r) => sum + r.totalTokens, 0);\n}\n\n// ============================================================================\n// Pattern Composition\n// ============================================================================\n\n/**\n * Compose multiple execution patterns into a pipeline where each pattern's\n * output feeds as input to the next.\n *\n * @remarks\n * Between patterns, output is converted to a string input:\n * - `string` output passes through directly\n * - Objects are JSON-stringified\n * - Optionally provide a `transform` to customize between steps\n *\n * @param patterns - One or more execution patterns to chain together.\n * @returns An async function that runs the pipeline on a given orchestrator.\n *\n * @example\n * ```typescript\n * const workflow = composePatterns(\n * parallel(['researcher', 'researcher'], concatResults),\n * sequential(['writer', 'reviewer']),\n * );\n *\n * const result = await workflow(orchestrator, 'Research topic X');\n * ```\n */\nexport function composePatterns(\n ...patterns: ExecutionPattern[]\n): (orchestrator: MultiAgentOrchestrator, input: string) => Promise<unknown> {\n if (patterns.length === 0) {\n throw new Error(\n \"[Directive MultiAgent] composePatterns requires at least one pattern\",\n );\n }\n\n return async (\n orchestrator: MultiAgentOrchestrator,\n input: string,\n ): Promise<unknown> => {\n let currentInput = input;\n let lastOutput: unknown = undefined;\n\n for (const pattern of patterns) {\n switch (pattern.type) {\n case \"parallel\": {\n const parallelPattern = pattern as ParallelPattern<unknown>;\n const inputsArr = parallelPattern.handlers.map(() => currentInput);\n lastOutput = await orchestrator.runParallel(\n parallelPattern.handlers,\n inputsArr,\n parallelPattern.merge,\n {\n minSuccess: parallelPattern.minSuccess,\n timeout: parallelPattern.timeout,\n },\n );\n break;\n }\n\n case \"sequential\": {\n const seqPattern = pattern as SequentialPattern<unknown>;\n const results = await orchestrator.runSequential(\n seqPattern.handlers,\n currentInput,\n { transform: seqPattern.transform },\n );\n\n const lastResult = results[results.length - 1];\n lastOutput = seqPattern.extract\n ? seqPattern.extract(lastResult?.output)\n : lastResult?.output;\n break;\n }\n\n case \"supervisor\": {\n const supPattern = pattern as SupervisorPattern<unknown>;\n const maxRounds = supPattern.maxRounds ?? 5;\n if (maxRounds < 1 || !Number.isFinite(maxRounds)) {\n throw new Error(\n \"[Directive MultiAgent] supervisor maxRounds must be >= 1\",\n );\n }\n const workerResults: RunResult<unknown>[] = [];\n let supervisorResult = await orchestrator.runAgent<unknown>(\n supPattern.supervisor,\n currentInput,\n );\n\n for (let round = 0; round < maxRounds; round++) {\n const raw = supervisorResult.output;\n let action: {\n action: string;\n worker?: string;\n workerInput?: string;\n };\n\n if (typeof raw === \"string\") {\n try {\n action = JSON.parse(raw);\n } catch {\n try {\n const stripped = raw\n .replace(/```(?:json|JSON)?\\s*\\n?/g, \"\")\n .replace(/<[^>]+>/g, \" \");\n const extracted = extractJsonFromOutput(stripped);\n if (\n extracted &&\n typeof extracted === \"object\" &&\n \"action\" in (extracted as Record<string, unknown>)\n ) {\n action = extracted as typeof action;\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n } else if (raw && typeof raw === \"object\" && \"action\" in raw) {\n action = raw as typeof action;\n } else {\n break;\n }\n\n if (action.action === \"complete\" || !action.worker) {\n break;\n }\n\n if (!supPattern.workers.includes(action.worker)) {\n break;\n }\n\n const workerResult = await orchestrator.runAgent(\n action.worker,\n action.workerInput ?? \"\",\n );\n workerResults.push(workerResult);\n\n supervisorResult = await orchestrator.runAgent(\n supPattern.supervisor,\n `Worker ${action.worker} completed with result: ${safeStringify(workerResult.output)}`,\n );\n }\n\n lastOutput = supPattern.extract\n ? supPattern.extract(supervisorResult.output, workerResults)\n : supervisorResult.output;\n break;\n }\n\n case \"dag\": {\n const dagPattern = pattern as DagPattern<unknown>;\n // DAG patterns must be run via runPattern to get full execution\n // We simulate by running agents individually following the DAG structure\n const dagContext: DagExecutionContext = {\n input: currentInput,\n outputs: Object.create(null),\n statuses: Object.create(null),\n errors: Object.create(null),\n results: Object.create(null),\n };\n\n // Simple sequential execution of DAG for composePatterns\n // (Full parallel DAG execution happens via runPattern/runDagPattern)\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\"\n ) {\n console.debug(\n \"[Directive MultiAgent] composePatterns: DAG nodes executed sequentially — use runPattern() for full parallel DAG execution\",\n );\n }\n const nodeIds = Object.keys(dagPattern.nodes);\n for (const nodeId of nodeIds) {\n const node = dagPattern.nodes[nodeId]!;\n dagContext.statuses[nodeId] = \"running\";\n try {\n let nodeInput = currentInput;\n if (node.transform) {\n nodeInput = node.transform(dagContext);\n } else if (node.deps && node.deps.length > 0) {\n const upstreamOutputs: Record<string, unknown> =\n Object.create(null);\n for (const depId of node.deps) {\n if (dagContext.outputs[depId] !== undefined) {\n upstreamOutputs[depId] = dagContext.outputs[depId];\n }\n }\n nodeInput = JSON.stringify(upstreamOutputs);\n }\n const result = await orchestrator.runAgent(\n node.handler,\n nodeInput,\n );\n dagContext.outputs[nodeId] = result.output;\n dagContext.results[nodeId] = result;\n dagContext.statuses[nodeId] = \"completed\";\n } catch (error) {\n dagContext.statuses[nodeId] = \"error\";\n dagContext.errors[nodeId] =\n error instanceof Error ? error.message : String(error);\n if (dagPattern.onNodeError === \"fail\") {\n throw error;\n }\n }\n }\n lastOutput = await dagPattern.merge(dagContext);\n break;\n }\n\n case \"reflect\": {\n const reflectPattern = pattern as ReflectPattern<unknown>;\n // Run producer→evaluator loop using runAgent\n const maxIter = reflectPattern.maxIterations ?? 2;\n const parseEval =\n reflectPattern.parseEvaluation ??\n ((output: unknown): ReflectionEvaluation => {\n if (typeof output === \"string\") {\n try {\n return JSON.parse(output);\n } catch {\n return { passed: false, feedback: output };\n }\n }\n if (output && typeof output === \"object\" && \"passed\" in output) {\n return output as ReflectionEvaluation;\n }\n\n return { passed: false, feedback: \"Invalid evaluator output\" };\n });\n const buildInput =\n reflectPattern.buildRetryInput ??\n ((inp: string, feedback: string) =>\n `${inp}\\n\\nFeedback on your previous response:\\n${feedback}\\n\\nPlease improve your response.`);\n\n let effectiveInput = currentInput;\n let producerOutput: unknown;\n for (let i = 0; i < maxIter; i++) {\n const producerResult = await orchestrator.runAgent(\n reflectPattern.handler,\n effectiveInput,\n );\n producerOutput = producerResult.output;\n const producerStr =\n typeof producerOutput === \"string\"\n ? producerOutput\n : JSON.stringify(producerOutput);\n const evalResult = await orchestrator.runAgent(\n reflectPattern.evaluator,\n producerStr,\n );\n const evaluation = parseEval(evalResult.output);\n if (evaluation.passed) {\n break;\n }\n if (i < maxIter - 1 && evaluation.feedback) {\n effectiveInput = buildInput(currentInput, evaluation.feedback, i);\n }\n }\n lastOutput = reflectPattern.extract\n ? reflectPattern.extract(producerOutput)\n : producerOutput;\n break;\n }\n\n case \"race\": {\n const racePattern = pattern as RacePattern<unknown>;\n const raceResult = await orchestrator.runRace(\n racePattern.handlers,\n currentInput,\n { extract: racePattern.extract, timeout: racePattern.timeout },\n );\n lastOutput = raceResult.result;\n break;\n }\n\n case \"debate\": {\n const debatePattern = pattern as DebatePattern<unknown>;\n const debateResult = await orchestrator.runDebate(\n debatePattern.handlers,\n debatePattern.evaluator,\n currentInput,\n {\n maxRounds: debatePattern.maxRounds,\n extract: debatePattern.extract,\n parseJudgement: debatePattern.parseJudgement,\n signal: debatePattern.signal,\n timeout: debatePattern.timeout,\n },\n );\n lastOutput = debateResult.result;\n break;\n }\n\n case \"goal\": {\n const cp = pattern as GoalPattern<unknown>;\n const initialFacts =\n typeof currentInput === \"string\"\n ? { input: currentInput }\n : (() => {\n try {\n return JSON.parse(currentInput);\n } catch {\n return { input: currentInput };\n }\n })();\n const goalResult = await orchestrator.runGoal(\n cp.nodes,\n initialFacts,\n cp.when,\n {\n satisfaction: cp.satisfaction,\n maxSteps: cp.maxSteps,\n extract: cp.extract,\n timeout: cp.timeout,\n signal: cp.signal,\n selectionStrategy: cp.selectionStrategy,\n relaxation: cp.relaxation,\n onStep: cp.onStep,\n onStall: cp.onStall,\n },\n );\n lastOutput = goalResult.result;\n break;\n }\n\n default:\n throw new Error(\n `[Directive MultiAgent] composePatterns: unknown pattern type \"${(pattern as ExecutionPattern).type}\"`,\n );\n }\n\n // Convert output to string for next pattern's input\n if (lastOutput !== undefined) {\n currentInput =\n typeof lastOutput === \"string\"\n ? lastOutput\n : safeStringify(lastOutput);\n }\n }\n\n return lastOutput;\n };\n}\n\n/**\n * Find agents in a registry that match all required capabilities.\n *\n * @param registry - The agent registry to search.\n * @param requiredCapabilities - Capabilities that each matching agent must have.\n * @returns An array of agent IDs whose `capabilities` include every required capability.\n *\n * @example\n * ```typescript\n * const agents = {\n * researcher: { agent: researchAgent, capabilities: ['search', 'summarize'] },\n * coder: { agent: coderAgent, capabilities: ['code', 'debug'] },\n * writer: { agent: writerAgent, capabilities: ['write', 'edit'] },\n * };\n *\n * const matches = findAgentsByCapability(agents, ['search']);\n * // Returns ['researcher']\n * ```\n */\nexport function findAgentsByCapability(\n registry: AgentRegistry,\n requiredCapabilities: string[],\n): string[] {\n return Object.entries(registry)\n .filter(([, reg]) => {\n const caps = reg.capabilities ?? [];\n\n return requiredCapabilities.every((c) => caps.includes(c));\n })\n .map(([id]) => id);\n}\n\n/**\n * Create a constraint that auto-routes to an agent based on required capabilities.\n *\n * When the condition fires, it finds agents matching the capabilities returned by\n * `getCapabilities`, then emits a `RUN_AGENT` requirement for the best match.\n *\n * @param registry - The agent registry to search for matching capabilities.\n * @param getCapabilities - Function that extracts required capabilities from facts.\n * @param getInput - Function that extracts the input string from facts.\n * @param options - Optional `priority` and custom `select` function.\n * @returns An {@link OrchestratorConstraint} that routes to a capability-matched agent.\n *\n * @example\n * ```typescript\n * const routeByCapability = capabilityRoute(\n * agents,\n * (facts) => facts.requiredCapabilities as string[],\n * (facts) => facts.query as string,\n * );\n * ```\n */\nexport function capabilityRoute(\n registry: AgentRegistry,\n getCapabilities: (facts: Record<string, unknown>) => string[],\n getInput: (facts: Record<string, unknown>) => string,\n options?: {\n priority?: number;\n select?: (matches: string[], registry: AgentRegistry) => string;\n },\n): OrchestratorConstraint<Record<string, unknown>> {\n const { priority, select } = options ?? {};\n\n // Cache matches between when() and require() using a generation counter\n // to ensure require() only uses cache from the same evaluation cycle\n let cachedMatches: string[] = [];\n let cacheGeneration = 0;\n let requireGeneration = -1;\n\n return {\n when: (facts) => {\n const caps = getCapabilities(facts);\n cachedMatches = findAgentsByCapability(registry, caps);\n cacheGeneration++;\n\n return cachedMatches.length > 0;\n },\n require: (facts) => {\n // Use cached matches only if from the current when() call\n const matches =\n cacheGeneration !== requireGeneration && cachedMatches.length > 0\n ? ((requireGeneration = cacheGeneration), cachedMatches)\n : findAgentsByCapability(registry, getCapabilities(facts));\n\n if (matches.length === 0) {\n throw new Error(\n `[Directive MultiAgent] No agent matches capabilities: ${getCapabilities(facts).join(\", \")}`,\n );\n }\n\n const chosen = select ? select(matches, registry) : matches[0]!;\n\n return {\n type: \"RUN_AGENT\",\n agent: chosen,\n input: getInput(facts),\n } as RunAgentRequirement;\n },\n priority,\n };\n}\n\n// ============================================================================\n// Constraint-Driven Agent Spawning\n// ============================================================================\n\nlet spawnOnConditionOptionsWarned = false;\n\n/**\n * Options for spawnOnCondition.\n */\nexport interface SpawnOnConditionOptions {\n /** Priority for the constraint (higher = evaluated first) */\n priority?: number;\n /** Additional context passed to the agent */\n context?: Record<string, unknown>;\n}\n\n/**\n * Create a constraint that auto-runs a single agent when a condition is met.\n *\n * The orchestrator's built-in `RUN_AGENT` resolver handles execution --\n * you only need to add this to your `constraints` config.\n *\n * @param config - Condition, agent ID, input builder, and optional priority/context.\n * @returns An {@link OrchestratorConstraint} that emits a `RUN_AGENT` requirement.\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: { reviewer: { agent: reviewerAgent } },\n * constraints: {\n * autoReview: spawnOnCondition({\n * when: (facts) => (facts.confidence as number) < 0.7,\n * agent: 'reviewer',\n * input: (facts) => `Review this: ${facts.lastOutput}`,\n * }),\n * },\n * });\n * ```\n */\nexport function spawnOnCondition(config: {\n when: (facts: Record<string, unknown>) => boolean;\n agent: string;\n input: (facts: Record<string, unknown>) => string;\n /** Priority for the constraint (higher = evaluated first) */\n priority?: number;\n /** Additional context passed to the agent */\n context?: Record<string, unknown>;\n options?: SpawnOnConditionOptions;\n}): OrchestratorConstraint<Record<string, unknown>> {\n const { when, agent, input, priority, context, options } = config;\n if (options && !spawnOnConditionOptionsWarned) {\n spawnOnConditionOptionsWarned = true;\n console.warn(\n \"[Directive MultiAgent] spawnOnCondition `options` is deprecated. Use top-level `priority` and `context` instead.\",\n );\n }\n const effectivePriority = priority ?? options?.priority;\n const effectiveContext = context ?? options?.context;\n\n return {\n when,\n require: (facts) =>\n ({\n type: \"RUN_AGENT\",\n agent,\n input: input(facts),\n context: effectiveContext,\n }) as RunAgentRequirement,\n priority: effectivePriority,\n };\n}\n\n// ============================================================================\n// Debate Pattern\n// ============================================================================\n\n/** Configuration for the debate() factory and runDebate() imperative API. @see DebatePattern */\nexport type DebateConfig<T = unknown> = Omit<DebatePattern<T>, \"type\">;\n\n/**\n * Create a debate pattern where agents compete and an evaluator picks the best.\n *\n * @remarks\n * Flow:\n * 1. All agents produce proposals in parallel\n * 2. Evaluator receives all proposals and picks a winner\n * 3. Optionally repeat with evaluator feedback for refinement\n *\n * @param config - Debate configuration with `handlers`, `evaluator`, and optional settings.\n * @returns A {@link DebatePattern} configuration object.\n * @see {@link runDebate} for the imperative API\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: {\n * optimist: { agent: optimistAgent },\n * pessimist: { agent: pessimistAgent },\n * judge: { agent: judgeAgent },\n * },\n * patterns: {\n * debate: debate({\n * handlers: ['optimist', 'pessimist'],\n * evaluator: 'judge',\n * maxRounds: 2,\n * }),\n * },\n * });\n *\n * const result = await orchestrator.runPattern('debate', 'Should we invest in X?');\n * ```\n */\nexport function debate<T = unknown>(config: DebateConfig<T>): DebatePattern<T> {\n const {\n handlers,\n evaluator,\n maxRounds,\n extract,\n parseJudgement,\n signal,\n timeout,\n } = config;\n\n if (handlers.length < 2) {\n throw new Error(\n \"[Directive MultiAgent] debate requires at least 2 handlers\",\n );\n }\n if (maxRounds != null && (maxRounds < 1 || !Number.isFinite(maxRounds))) {\n throw new Error(\"[Directive MultiAgent] debate maxRounds must be >= 1\");\n }\n\n return {\n type: \"debate\",\n handlers,\n evaluator,\n maxRounds,\n extract,\n parseJudgement,\n signal,\n timeout,\n };\n}\n\n/**\n * Run a debate imperatively on an orchestrator without pattern registration.\n *\n * Delegates to `orchestrator.runDebate()` so that lifecycle hooks, debug timeline,\n * and signal propagation all work correctly.\n *\n * @param orchestrator - The multi-agent orchestrator instance to run the debate on.\n * @param config - Debate configuration with agents, evaluator, and optional settings.\n * @param input - The initial input/prompt for the debate.\n * @returns The winning agent's output, the winner ID, and all proposals from each round.\n * @see {@link debate} for the declarative pattern API\n */\nexport async function runDebate<T>(\n orchestrator: MultiAgentOrchestrator,\n config: DebateConfig<T>,\n input: string,\n): Promise<DebateResult<T>> {\n return orchestrator.runDebate<T>(config.handlers, config.evaluator, input, {\n maxRounds: config.maxRounds,\n extract: config.extract,\n parseJudgement: config.parseJudgement,\n signal: config.signal,\n timeout: config.timeout,\n });\n}\n\n// ============================================================================\n// Derivation-Triggered Constraints\n// ============================================================================\n\n/**\n * Create a constraint that fires when a cross-agent derivation meets a condition.\n *\n * @remarks\n * Wire this into the orchestrator's `derive` config and `constraints` config together.\n * The constraint's `when()` reads the derivation value from the orchestrator's derived snapshot.\n *\n * @param derivationId - The ID of the cross-agent derivation to watch.\n * @param condition - Predicate that receives the derivation value and returns `true` when the constraint should fire.\n * @param action - Agent ID, input builder, and optional priority/context for the emitted requirement.\n * @returns An {@link OrchestratorConstraint} that emits a `RUN_AGENT` requirement when the derivation condition is met.\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: { ... },\n * derive: {\n * totalCost: (snap) => snap.coordinator.globalTokens * 0.001,\n * },\n * constraints: {\n * budgetAlert: derivedConstraint('totalCost', (cost) => cost > 5.0, {\n * agent: 'budget-manager',\n * input: (value) => `Budget exceeded: $${value}`,\n * }),\n * },\n * });\n * ```\n */\nexport function derivedConstraint(\n derivationId: string,\n condition: (value: unknown) => boolean,\n action: {\n agent: string;\n input: (value: unknown) => string;\n priority?: number;\n context?: Record<string, unknown>;\n },\n): OrchestratorConstraint<Record<string, unknown>> {\n // Generation counter to guard against stale closure between when() and require()\n let lastValue: unknown = undefined;\n let whenGeneration = 0;\n let requireGeneration = -1;\n\n return {\n when: (facts) => {\n // Read derivation value from coordinator facts (injected by recomputeDerivations)\n const derived = facts.__derived as Record<string, unknown> | undefined;\n const value = derived?.[derivationId];\n lastValue = value;\n whenGeneration++;\n\n return condition(value);\n },\n require: (facts) => {\n // Re-read from facts if generation is stale (concurrent evaluation)\n const value =\n whenGeneration !== requireGeneration\n ? ((requireGeneration = whenGeneration), lastValue)\n : (facts.__derived as Record<string, unknown> | undefined)?.[\n derivationId\n ];\n\n return {\n type: \"RUN_AGENT\",\n agent: action.agent,\n input: action.input(value),\n context: action.context,\n } as RunAgentRequirement;\n },\n priority: action.priority,\n };\n}\n\n// ============================================================================\n// Pool Auto-Scaling Constraint\n// ============================================================================\n\n/** Configuration for spawnPool constraint-driven auto-scaling */\nexport interface SpawnPoolConfig {\n /** Agent ID to spawn (must be registered in the orchestrator) */\n agent: string;\n /** Build the input for each spawned agent. Receives current facts and spawn index (0-based). */\n input: (facts: Record<string, unknown>, index: number) => string;\n /** How many agents to spawn. Number or function of facts for dynamic scaling. */\n count: number | ((facts: Record<string, unknown>) => number);\n /** Priority for the constraint. @default undefined */\n priority?: number;\n /** Additional context passed to each spawned agent */\n context?: Record<string, unknown>;\n}\n\n/**\n * Create a constraint that spawns a pool of agent instances when a condition is met.\n *\n * @remarks\n * Unlike {@link spawnOnCondition} (which spawns one agent), `spawnPool` can target N agents.\n * However, only one requirement is emitted per constraint evaluation cycle -- the constraint\n * re-fires on subsequent cycles as long as `when()` returns true, spawning one agent per cycle.\n *\n * @param when - Predicate that triggers the pool spawn.\n * @param config - Pool configuration with agent ID, input builder, count, and optional priority/context.\n * @returns An {@link OrchestratorConstraint} that emits `RUN_AGENT` requirements.\n * @see {@link spawnOnCondition} for spawning a single agent\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: { worker: { agent: workerAgent } },\n * constraints: {\n * scaleWorkers: spawnPool(\n * (facts) => (facts.pendingTasks as number) > 0,\n * {\n * agent: 'worker',\n * count: (facts) => Math.min(facts.pendingTasks as number, 5),\n * input: (facts, i) => `Process task ${i + 1}`,\n * },\n * ),\n * },\n * });\n * ```\n */\nexport function spawnPool(\n when: (facts: Record<string, unknown>) => boolean,\n config: SpawnPoolConfig,\n): OrchestratorConstraint<Record<string, unknown>> {\n const { agent, input, priority, context } = config;\n\n return {\n when,\n require: (facts) => {\n // Only the first requirement is used per constraint cycle.\n // For count > 1, the constraint re-fires on subsequent cycles as long as `when` is true.\n return {\n type: \"RUN_AGENT\",\n agent,\n input: input(facts, 0),\n context,\n } as RunAgentRequirement;\n },\n priority,\n };\n}\n","/**\n * Multi-Agent Orchestration Patterns\n *\n * Provides patterns for coordinating multiple AI agents:\n * - Parallel execution with result merging\n * - Sequential pipelines\n * - Supervisor patterns with worker delegation\n * - Constraint-driven agent selection\n *\n * @example\n * ```typescript\n * import { createMultiAgentOrchestrator } from '@directive-run/ai';\n *\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: {\n * researcher: { agent: researchAgent, maxConcurrent: 3 },\n * writer: { agent: writerAgent, maxConcurrent: 1 },\n * reviewer: { agent: reviewerAgent, maxConcurrent: 1 },\n * },\n * patterns: {\n * parallelResearch: {\n * type: 'parallel',\n * handlers: ['researcher', 'researcher', 'researcher'],\n * merge: (results) => combineResearch(results),\n * },\n * },\n * });\n * ```\n */\n\nimport type {\n ModuleSchema,\n Requirement,\n System,\n} from \"@directive-run/core\";\nimport { createModule, createSystem, t } from \"@directive-run/core\";\nimport {\n createCallbackPlugin,\n getBridgeFact,\n requirementGuard,\n setBridgeFact,\n} from \"@directive-run/core/adapter-utils\";\nimport type {\n OrchestratorStreamChunk,\n OrchestratorStreamResult,\n} from \"./agent-orchestrator.js\";\nimport {\n type DebugTimeline,\n createDebugTimeline,\n createDebugTimelinePlugin,\n} from \"./debug-timeline.js\";\nimport {\n executeAgentWithRetry,\n executeGuardrailWithRetry,\n normalizeGuardrail,\n} from \"./guardrail-utils.js\";\nimport { type HealthMonitor, createHealthMonitor } from \"./health-monitor.js\";\nimport { formatSystemMeta } from \"./meta-context.js\";\nimport {\n convertOrchestratorConstraints,\n getAgentState,\n getApprovalState,\n getBreakpointState,\n getConversation,\n getOrchestratorState,\n getToolCalls,\n setAgentState,\n setApprovalState,\n setBreakpointState,\n setConversation,\n setToolCalls,\n} from \"./orchestrator-bridge.js\";\nimport { ReflectionExhaustedError } from \"./reflection.js\";\nimport type { ReflectionEvaluation } from \"./reflection.js\";\nimport type {\n AgentLike,\n AgentRunner,\n AgentSelectionStrategy,\n ApprovalRequest,\n CrossAgentSnapshot,\n DagCheckpointState,\n DagExecutionContext,\n DagNode,\n DagPattern,\n DebateCheckpointState,\n GoalCheckpointState,\n GoalMetrics,\n GoalNode,\n GoalPattern,\n GoalResult,\n GoalStepMetrics,\n MultiAgentLifecycleHooks,\n OrchestratorResolverContext,\n OrchestratorState,\n PatternCheckpointConfig,\n PatternCheckpointState,\n ReflectCheckpointState,\n RejectedRequest,\n RelaxationContext,\n RelaxationRecord,\n RelaxationTier,\n RerouteEvent,\n RunOptions,\n RunResult,\n Scratchpad,\n SequentialCheckpointState,\n SupervisorCheckpointState,\n} from \"./types.js\";\nimport {\n APPROVAL_KEY,\n BREAKPOINT_KEY,\n GuardrailError,\n SCRATCHPAD_KEY,\n isGuardrailError,\n orchestratorBridgeSchema,\n} from \"./types.js\";\n\nimport type {\n BreakpointContext,\n BreakpointModifications,\n BreakpointRequest,\n MultiAgentBreakpointType,\n} from \"./breakpoints.js\";\nimport {\n MAX_BREAKPOINT_HISTORY,\n createBreakpointId,\n createInitialBreakpointState,\n matchBreakpoint,\n} from \"./breakpoints.js\";\nimport {\n type Checkpoint,\n type CheckpointStore,\n type MultiAgentCheckpointLocalState,\n createCheckpointId,\n validateCheckpoint,\n} from \"./checkpoint.js\";\nimport {\n type MultiplexedStreamResult,\n mergeTaggedStreams,\n} from \"./streaming.js\";\nimport {\n extractJsonFromOutput,\n withStructuredOutput,\n} from \"./structured-output.js\";\n\nimport { safeStringify } from \"@directive-run/core/internals\";\n\n// ============================================================================\n// Re-exports from extracted modules (types, utils, Semaphore)\n// ============================================================================\n\nexport * from \"./orchestrator-types.js\";\nexport { Semaphore, shallowEqual, getPatternStep, getCheckpointProgress, diffCheckpoints, forkFromCheckpoint, validateDagAcyclic } from \"./orchestrator-utils.js\";\n\n// ============================================================================\n// Internal imports from extracted modules (used by createMultiAgentOrchestrator)\n// ============================================================================\n\nimport type {\n AgentRegistration,\n AgentRegistry,\n DebatePattern,\n DebateResult,\n ExecutionPattern,\n HandoffRequest,\n HandoffResult,\n MultiAgentOrchestratorOptions,\n MultiAgentOrchestrator,\n MultiAgentRunCallOptions,\n MultiAgentState,\n ParallelPattern,\n RacePattern,\n RaceResult,\n ReflectIterationRecord,\n ReflectPattern,\n RunAgentRequirement,\n SequentialPattern,\n SupervisorPattern,\n TaskContext,\n TaskRegistration,\n} from \"./orchestrator-types.js\";\nimport { Semaphore, shallowEqual, validateDagAcyclic, getPatternStep } from \"./orchestrator-utils.js\";\n\n/** Built-in pause requirement type */\ninterface PauseBudgetExceededReq extends Requirement {\n type: \"__PAUSE_BUDGET_EXCEEDED\";\n}\n\n/** Built-in RUN_AGENT requirement guard */\nconst isRunAgentReq = requirementGuard<RunAgentRequirement>(\"RUN_AGENT\");\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Create a multi-agent orchestrator backed by a Directive System.\n *\n * Each registered agent becomes a namespaced Directive module with reactive state,\n * constraint evaluation, guardrails, streaming, approval, memory, retry, budget,\n * hooks, and time-travel debugging -- all features at parity with {@link createAgentOrchestrator}.\n *\n * @param options - Orchestrator configuration including runner, agent registry, patterns, guardrails, and plugins.\n * @returns A {@link MultiAgentOrchestrator} instance with `runAgent`, `runPattern`, `handoff`, and checkpoint APIs.\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * runner,\n * agents: {\n * researcher: { agent: researchAgent, maxConcurrent: 3 },\n * writer: { agent: writerAgent },\n * reviewer: { agent: reviewerAgent },\n * },\n * guardrails: {\n * input: [detectPII],\n * output: [checkToxicity],\n * },\n * hooks: {\n * onAgentStart: ({ agentId, input }) => console.log(`${agentId}: ${input}`),\n * },\n * maxTokenBudget: 50000,\n * debug: true,\n * });\n *\n * // Run with full guardrails + approval + streaming\n * const result = await orchestrator.runAgent('researcher', 'What is AI?');\n *\n * // Stream agent output\n * const { stream } = orchestrator.runAgentStream('writer', 'Write about AI');\n * for await (const chunk of stream) {\n * if (chunk.type === 'token') process.stdout.write(chunk.data);\n * }\n * ```\n *\n * @throws If a pattern references an agent that is not in the registry\n * @throws If autoApproveToolCalls is false but no onApprovalRequest callback is provided\n * @public\n */\nexport function createMultiAgentOrchestrator(\n options: MultiAgentOrchestratorOptions,\n): MultiAgentOrchestrator {\n const {\n runner,\n agents: inputAgents,\n patterns = {},\n onHandoff,\n onHandoffComplete,\n maxHandoffHistory = 1000,\n debug: rawDebug = false,\n guardrails = {},\n hooks = {},\n memory: sharedMemory,\n agentRetry: defaultAgentRetry,\n maxTokenBudget,\n plugins = [],\n onApprovalRequest,\n autoApproveToolCalls = true,\n approvalTimeoutMs = 300000,\n constraints: userConstraints = {},\n resolvers: userResolvers = {},\n circuitBreaker: orchestratorCircuitBreaker,\n budgetWarningThreshold = 0.8,\n onBudgetWarning,\n selfHealing,\n checkpointStore,\n breakpoints: breakpointConfigs = [],\n onBreakpoint,\n breakpointTimeoutMs = 300000,\n derive: userDerivations,\n scratchpad: scratchpadConfig,\n tasks: inputTasks = {},\n } = options;\n\n // Normalize debug config\n const debug = typeof rawDebug === \"object\" ? true : !!rawDebug;\n const MAX_VERBOSE_LENGTH = 5000;\n\n // Shallow copy so registerAgent/unregisterAgent don't mutate the caller's object\n const agents: AgentRegistry = { ...inputAgents };\n\n // Task registry (shallow copy for same reason as agents)\n const tasks: Record<string, TaskRegistration> = { ...inputTasks };\n\n // Task state tracking (parallel to agentStates)\n const taskStates: Record<\n string,\n {\n status: string;\n lastOutput?: unknown;\n lastError?: string;\n startTime?: number;\n durationMs?: number;\n }\n > = Object.create(null);\n for (const taskId of Object.keys(tasks)) {\n taskStates[taskId] = { status: \"idle\" };\n }\n\n // Task semaphores are created after validation (below)\n const taskSemaphores = new Map<string, Semaphore>();\n\n // Enforce approval workflow configuration\n if (!autoApproveToolCalls && !onApprovalRequest) {\n throw new Error(\n \"[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. \" +\n \"Tool calls would wait for approval indefinitely. Either:\\n\" +\n \" - Set autoApproveToolCalls: true to auto-approve all tool calls\\n\" +\n \" - Provide an onApprovalRequest callback to handle approvals programmatically\",\n );\n }\n\n // Validate budget warning threshold\n if (budgetWarningThreshold < 0 || budgetWarningThreshold > 1) {\n throw new Error(\n `[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${budgetWarningThreshold}`,\n );\n }\n\n // Validate reserved agent IDs\n const RESERVED_IDS = new Set([\n \"__coord\",\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n ]);\n for (const agentId of Object.keys(agents)) {\n if (RESERVED_IDS.has(agentId)) {\n throw new Error(\n `[Directive MultiAgent] Agent ID \"${agentId}\" is reserved and cannot be used`,\n );\n }\n }\n for (const [taskId, taskReg] of Object.entries(tasks)) {\n if (!taskId || taskId.trim() !== taskId) {\n throw new Error(\n `[Directive MultiAgent] Task ID must be a non-empty trimmed string, got \"${taskId}\"`,\n );\n }\n if (RESERVED_IDS.has(taskId)) {\n throw new Error(\n `[Directive MultiAgent] Task ID \"${taskId}\" is reserved and cannot be used`,\n );\n }\n // Validate timeout and maxConcurrent\n if (\n taskReg.timeout !== undefined &&\n (!Number.isFinite(taskReg.timeout) || taskReg.timeout <= 0)\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" timeout must be a finite number > 0`,\n );\n }\n if (\n taskReg.maxConcurrent !== undefined &&\n (!Number.isFinite(taskReg.maxConcurrent) ||\n taskReg.maxConcurrent < 1 ||\n !Number.isInteger(taskReg.maxConcurrent))\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" maxConcurrent must be a finite integer >= 1`,\n );\n }\n // Validate retry configuration\n if (taskReg.retry) {\n const { attempts, delayMs } = taskReg.retry;\n if (!Number.isFinite(attempts) || attempts < 1) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry attempts must be a finite number >= 1`,\n );\n }\n if (delayMs !== undefined && (!Number.isFinite(delayMs) || delayMs < 0)) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry delayMs must be a finite number >= 0`,\n );\n }\n }\n }\n\n // Create task semaphores (after validation passes)\n for (const [taskId, reg] of Object.entries(tasks)) {\n taskSemaphores.set(taskId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n\n // Validate no ID collisions between agents and tasks\n for (const taskId of Object.keys(tasks)) {\n if (agents[taskId]) {\n throw new Error(\n `[Directive MultiAgent] ID \"${taskId}\" is registered as both an agent and a task. IDs must be unique across both registries.`,\n );\n }\n }\n\n // Validate that all pattern handlers exist in the combined registry\n const registeredAgentIds = new Set([\n ...Object.keys(agents),\n ...Object.keys(tasks),\n ]);\n const missingAgents: Array<{ patternId: string; agentId: string }> = [];\n\n for (const [patternId, pattern] of Object.entries(patterns)) {\n const agentsToCheck: string[] = [];\n\n switch (pattern.type) {\n case \"parallel\":\n agentsToCheck.push(...pattern.handlers);\n break;\n case \"sequential\":\n agentsToCheck.push(...pattern.handlers);\n break;\n case \"supervisor\":\n agentsToCheck.push(pattern.supervisor, ...pattern.workers);\n break;\n case \"dag\":\n for (const node of Object.values(pattern.nodes)) {\n agentsToCheck.push(node.handler);\n }\n break;\n case \"reflect\":\n agentsToCheck.push(pattern.handler, pattern.evaluator);\n break;\n case \"race\":\n agentsToCheck.push(...pattern.handlers);\n break;\n case \"debate\":\n agentsToCheck.push(\n ...(pattern as DebatePattern).handlers,\n (pattern as DebatePattern).evaluator,\n );\n break;\n }\n\n for (const agentId of agentsToCheck) {\n if (!registeredAgentIds.has(agentId)) {\n missingAgents.push({ patternId, agentId });\n }\n }\n }\n\n if (missingAgents.length > 0) {\n const details = missingAgents\n .map(\n ({ patternId, agentId }) =>\n ` - Pattern \"${patternId}\" references unknown agent \"${agentId}\"`,\n )\n .join(\"\\n\");\n throw new Error(\n `[Directive MultiAgent] Pattern validation failed. The following agents are not registered:\\n${details}\\n\\nRegistered agents: ${[...registeredAgentIds].join(\", \") || \"(none)\"}`,\n );\n }\n\n // Validate DAG patterns for cycles\n for (const [patternId, pattern] of Object.entries(patterns)) {\n if (pattern.type === \"dag\") {\n validateDagAcyclic(patternId, pattern.nodes);\n }\n }\n\n // ---- Debug Timeline setup ----\n let timeline: DebugTimeline | null = null;\n let timelinePlugin: ReturnType<typeof createDebugTimelinePlugin> | null =\n null;\n if (debug) {\n timeline = createDebugTimeline({\n getSnapshotId: () => {\n try {\n return (system as any).history?.currentIndex ?? null;\n } catch {\n return null;\n }\n },\n goToSnapshot: (snapshotId: number) => {\n try {\n (system as any).history?.goTo?.(snapshotId);\n } catch {\n // System may not support goTo\n }\n },\n });\n }\n\n // ---- Health Monitor setup ----\n let healthMonitorInstance: HealthMonitor | null = null;\n let roundRobinCounters: Map<string, number> | null = null;\n if (selfHealing) {\n healthMonitorInstance = createHealthMonitor(selfHealing.healthMonitor);\n if (selfHealing.selectionStrategy === \"round-robin\") {\n roundRobinCounters = new Map();\n }\n }\n\n /** Safe hook caller — user-provided hooks must never crash the orchestrator */\n function fireHook<K extends keyof MultiAgentLifecycleHooks>(\n name: K,\n event: Parameters<NonNullable<MultiAgentLifecycleHooks[K]>>[0],\n ): void {\n try {\n (hooks[name] as ((e: typeof event) => void) | undefined)?.(event);\n } catch (hookError) {\n if (debug) {\n console.debug(`[Directive MultiAgent] hooks.${name} threw:`, hookError);\n }\n }\n }\n\n // ---- Coordinator Module ----\n // biome-ignore lint/suspicious/noExplicitAny: Dynamic schema construction\n const coordFacts: Record<string, any> = {\n __globalTokens: t.number(),\n __status: t.string(),\n __handoffs: t.array() as unknown as ReturnType<typeof t.array>,\n __handoffResults: t.array() as unknown as ReturnType<typeof t.array>,\n __budgetWarningFired: t.boolean(),\n };\n\n // Add scratchpad fact to coordinator schema if configured\n if (scratchpadConfig) {\n coordFacts[SCRATCHPAD_KEY] = t.object() as unknown;\n }\n\n // Add __derived bridge fact so constraints can read derivation values via facts.__derived\n if (userDerivations && Object.keys(userDerivations).length > 0) {\n coordFacts.__derived = t.object() as unknown;\n }\n\n const coordSchema = {\n facts: coordFacts,\n derivations: {},\n events: {},\n requirements: {},\n } satisfies ModuleSchema;\n\n // Convert orchestrator-level constraints\n // biome-ignore lint/suspicious/noExplicitAny: Constraint types complex\n const coordConstraints: Record<string, any> =\n convertOrchestratorConstraints(userConstraints);\n\n // Add built-in budget constraint — reads coordinator fact reactively\n if (maxTokenBudget) {\n coordConstraints.__budgetLimit = {\n priority: 100,\n // biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n when: (facts: any) => {\n const tokens = getBridgeFact<number>(facts, \"__globalTokens\");\n\n return tokens > maxTokenBudget;\n },\n require: { type: \"__PAUSE_BUDGET_EXCEEDED\" } as PauseBudgetExceededReq,\n };\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: Resolver types complex\n const coordResolvers: Record<string, any> = Object.create(null);\n\n // Convert user-provided orchestrator-level resolvers\n for (const [id, resolver] of Object.entries(userResolvers)) {\n coordResolvers[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = {\n ...context.facts,\n ...state,\n } as unknown as Record<string, unknown> & OrchestratorState;\n\n const resolverCtx: OrchestratorResolverContext<\n Record<string, unknown>\n > = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runner<T>(agent, input, opts);\n },\n signal: context.signal,\n };\n\n return resolver.resolve(req, resolverCtx);\n },\n };\n }\n\n // Built-in pause resolver\n coordResolvers.__pause = {\n requirement: requirementGuard<PauseBudgetExceededReq>(\n \"__PAUSE_BUDGET_EXCEEDED\",\n ),\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async () => {\n globalStatus = \"paused\";\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] Budget exceeded — all agents paused\",\n );\n }\n },\n };\n\n // Built-in RUN_AGENT resolver\n coordResolvers.__runAgent = {\n requirement: isRunAgentReq,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: RunAgentRequirement) => {\n await runSingleAgent(req.agent, req.input);\n },\n };\n\n const coordinatorModule = createModule(\"__coord\", {\n schema: coordSchema,\n init: (facts) => {\n setBridgeFact(facts, \"__globalTokens\", 0);\n setBridgeFact(facts, \"__status\", \"idle\");\n setBridgeFact(facts, \"__handoffs\", []);\n setBridgeFact(facts, \"__handoffResults\", []);\n setBridgeFact(facts, \"__budgetWarningFired\", false);\n if (scratchpadConfig) {\n setBridgeFact(facts, SCRATCHPAD_KEY, { ...scratchpadConfig.init });\n }\n // Derived values initialized via recomputeDerivations() after system creation\n },\n constraints: coordConstraints,\n resolvers: coordResolvers as any,\n });\n\n // ---- Per-Agent Modules (as a map for createSystem) ----\n // biome-ignore lint/suspicious/noExplicitAny: Module types vary\n const modulesMap: Record<string, any> = Object.create(null);\n modulesMap.__coord = coordinatorModule;\n\n for (const [agentId, registration] of Object.entries(agents)) {\n // biome-ignore lint/suspicious/noExplicitAny: Constraint types complex\n const perAgentConstraints: Record<string, any> = registration.constraints\n ? convertOrchestratorConstraints(registration.constraints)\n : {};\n\n // Convert per-agent resolvers\n // biome-ignore lint/suspicious/noExplicitAny: Resolver types complex\n const perAgentResolvers: Record<string, any> = Object.create(null);\n if (registration.resolvers) {\n for (const [id, resolver] of Object.entries(registration.resolvers)) {\n perAgentResolvers[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = {\n ...context.facts,\n ...state,\n } as unknown as Record<string, unknown> & OrchestratorState;\n\n const resolverContext: OrchestratorResolverContext<\n Record<string, unknown>\n > = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runner<T>(agent, input, opts);\n },\n signal: context.signal,\n };\n\n return resolver.resolve(req, resolverContext);\n },\n };\n }\n }\n\n modulesMap[agentId] = createModule(agentId, {\n schema: orchestratorBridgeSchema,\n init: (facts) => {\n setAgentState(facts, {\n status: \"idle\",\n currentAgent: registration.agent.name,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(facts, { pending: [], approved: [], rejected: [] });\n setConversation(facts, []);\n setToolCalls(facts, []);\n setBreakpointState(facts, createInitialBreakpointState());\n },\n constraints: perAgentConstraints,\n resolvers:\n Object.keys(perAgentResolvers).length > 0\n ? (perAgentResolvers as any)\n : undefined,\n });\n }\n\n // ---- Create System ----\n const callbackPlugin = createCallbackPlugin(\n \"directive-multi-agent-callbacks\",\n {},\n );\n\n // Build plugins array with optional timeline plugin\n const allPlugins = [...plugins, callbackPlugin];\n if (debug && timeline) {\n // Create timeline plugin after system is available (uses lazy getSnapshotId)\n timelinePlugin = createDebugTimelinePlugin(timeline, () => {\n try {\n return (system as any).history?.currentIndex ?? null;\n } catch {\n return null;\n }\n });\n allPlugins.push(timelinePlugin);\n }\n\n const system = createSystem({\n modules: modulesMap,\n plugins: allPlugins,\n history: debug ? true : undefined,\n } as any);\n\n system.start();\n\n // Maximum conversation messages to retain per agent (prevent unbounded growth)\n const MAX_CONVERSATION_MESSAGES = 500;\n const MAX_TOOL_CALLS = 200;\n\n // ---- Mutable State (tracked via System facts + local) ----\n let globalTokenCount = 0;\n let globalStatus: \"idle\" | \"paused\" = \"idle\";\n let destroyed = false;\n // Tracks in-flight runAgent calls (incremented synchronously before any await)\n // so waitForIdle knows when runs have been dispatched but not yet started\n let pendingRuns = 0;\n // Reflection score history — updated after each runReflectPattern call\n let lastReflectionHistory: ReflectIterationRecord[] | null = null;\n\n function assertNotDestroyed(): void {\n if (destroyed) {\n throw new Error(\"[Directive MultiAgent] Orchestrator has been destroyed\");\n }\n }\n\n // Semaphores for concurrency control\n const semaphores = new Map<string, Semaphore>();\n for (const [agentId, reg] of Object.entries(agents)) {\n semaphores.set(agentId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n\n // Agent states: lightweight local tracking for orchestrator API methods (getAgentState, etc.)\n // System facts (per-agent bridge schema) provide the rich state for constraints/resolvers/plugins.\n // Both are updated together — local state is the quick-access view, System facts drive reactivity.\n const agentStates: Record<string, MultiAgentState[\"__agents\"][string]> =\n Object.create(null);\n for (const agentId of Object.keys(agents)) {\n agentStates[agentId] = {\n status: \"idle\",\n runCount: 0,\n totalTokens: 0,\n };\n }\n\n // Handoff tracking\n const MAX_HANDOFF_RESULTS = maxHandoffHistory;\n const pendingHandoffs: HandoffRequest[] = [];\n const handoffResults: HandoffResult[] = [];\n let handoffCounter = 0;\n\n function addHandoffResult(result: HandoffResult): void {\n handoffResults.push(result);\n while (handoffResults.length > MAX_HANDOFF_RESULTS) {\n handoffResults.shift();\n }\n }\n\n // Approval request reverse index: requestId → agentId for O(1) approve/reject lookup\n const approvalRequestIndex = new Map<string, string>();\n\n // Idle waiters — notified whenever any agent's status changes\n const idleWaiters = new Set<() => void>();\n function notifyIdleWaiters(): void {\n for (const waiter of idleWaiters) {\n waiter();\n }\n }\n\n // ---- Cross-Agent Derivations ----\n const derivedValues: Record<string, unknown> = Object.create(null);\n const derivedChangeCallbacks = new Set<\n (id: string, value: unknown) => void\n >();\n\n /** Build a CrossAgentSnapshot from current state */\n function buildCrossAgentSnapshot(): CrossAgentSnapshot {\n const agentsSnap: CrossAgentSnapshot[\"agents\"] = Object.create(null);\n for (const [id, s] of Object.entries(agentStates)) {\n agentsSnap[id] = {\n status: s.status,\n lastInput: s.lastInput,\n lastOutput: s.lastOutput,\n lastError: s.lastError,\n runCount: s.runCount,\n totalTokens: s.totalTokens,\n };\n }\n\n const coordFacts = getAgentFacts(\"__coord\");\n const snapshot: CrossAgentSnapshot = {\n agents: agentsSnap,\n coordinator: {\n globalTokens: globalTokenCount,\n status: globalStatus,\n },\n };\n\n // Include scratchpad in snapshot if configured\n if (scratchpadConfig && coordFacts) {\n snapshot.scratchpad =\n getBridgeFact<Record<string, unknown>>(coordFacts, SCRATCHPAD_KEY) ??\n {};\n }\n\n return snapshot;\n }\n\n /** Recompute all cross-agent derivations */\n function recomputeDerivations(): void {\n if (!userDerivations) {\n return;\n }\n\n const snapshot = buildCrossAgentSnapshot();\n\n // Collect changed derivations and errors during the batch (fact writes only)\n type ChangedEntry = { derivId: string; newValue: unknown };\n type ErrorEntry = { derivId: string; derivError: unknown };\n const changed: ChangedEntry[] = [];\n const errors: ErrorEntry[] = [];\n\n system.batch(() => {\n for (const [derivId, derivFn] of Object.entries(userDerivations)) {\n try {\n const newValue = derivFn(snapshot);\n const oldValue = derivedValues[derivId];\n\n // Change detection: === for primitives, shallow equality for objects\n const hasChanged = !shallowEqual(newValue, oldValue);\n\n derivedValues[derivId] = newValue;\n\n if (hasChanged) {\n changed.push({ derivId, newValue });\n }\n } catch (derivError) {\n errors.push({ derivId, derivError });\n }\n }\n\n // Inject derived values into coordinator facts AFTER computation so constraints see current-cycle values\n const coordFacts = getAgentFacts(\"__coord\");\n if (coordFacts) {\n setBridgeFact(coordFacts, \"__derived\", { ...derivedValues });\n }\n });\n\n // Fire timeline records, hooks, and callbacks outside the batch\n for (const { derivId, newValue } of changed) {\n if (timeline) {\n timeline.record({\n type: \"derivation_update\",\n timestamp: Date.now(),\n snapshotId: null,\n derivationId: derivId,\n valueType: typeof newValue,\n });\n }\n\n fireHook(\"onDerivationUpdate\", {\n derivationId: derivId,\n value: newValue,\n timestamp: Date.now(),\n });\n\n for (const cb of derivedChangeCallbacks) {\n try {\n cb(derivId, newValue);\n } catch {\n // callback error is non-fatal\n }\n }\n }\n\n for (const { derivId, derivError } of errors) {\n if (debug) {\n console.warn(\n `[Directive MultiAgent] Derivation \"${derivId}\" threw:`,\n derivError,\n );\n }\n fireHook(\"onDerivationError\", {\n derivationId: derivId,\n error:\n derivError instanceof Error\n ? derivError\n : new Error(String(derivError)),\n timestamp: Date.now(),\n });\n }\n }\n\n // ---- Shared Scratchpad ----\n const scratchpadChangeCallbacks = new Set<\n (key: string, value: unknown) => void\n >();\n const scratchpadKeyCallbacks = new Map<\n string,\n Set<(key: string, value: unknown) => void>\n >();\n\n const scratchpadInstance: Scratchpad | null = scratchpadConfig\n ? {\n get(key: string): unknown {\n const coordFacts = getAgentFacts(\"__coord\");\n const data = getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n );\n if (data == null || !Object.hasOwn(data, key)) {\n return undefined;\n }\n\n return data[key];\n },\n\n set(key: string, value: unknown): void {\n if (\n key === \"__proto__\" ||\n key === \"constructor\" ||\n key === \"prototype\"\n ) {\n return;\n }\n\n const coordFacts = getAgentFacts(\"__coord\");\n const changedKeys = [key];\n system.batch(() => {\n const current =\n getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {};\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...current,\n [key]: value,\n });\n });\n\n notifyScratchpadChange(changedKeys, key, value);\n recomputeDerivations();\n },\n\n has(key: string): boolean {\n const coordFacts = getAgentFacts(\"__coord\");\n const data = getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n );\n\n return data != null && Object.hasOwn(data, key);\n },\n\n delete(key: string): void {\n if (\n key === \"__proto__\" ||\n key === \"constructor\" ||\n key === \"prototype\"\n ) {\n return;\n }\n const coordFacts = getAgentFacts(\"__coord\");\n system.batch(() => {\n const current =\n getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {};\n const { [key]: _, ...rest } = current;\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, rest);\n });\n\n notifyScratchpadChange([key], key, undefined);\n recomputeDerivations();\n },\n\n update(values: Record<string, unknown>): void {\n // Filter out prototype pollution keys\n const safeValues: Record<string, unknown> = Object.create(null);\n for (const k of Object.keys(values)) {\n if (k === \"__proto__\" || k === \"constructor\" || k === \"prototype\") {\n continue;\n }\n safeValues[k] = values[k];\n }\n\n const coordFacts = getAgentFacts(\"__coord\");\n const keys = Object.keys(safeValues);\n if (keys.length === 0) {\n return;\n }\n\n system.batch(() => {\n const current =\n getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {};\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...current,\n ...safeValues,\n });\n });\n\n for (const [k, v] of Object.entries(safeValues)) {\n notifyScratchpadChange(keys, k, v);\n }\n recomputeDerivations();\n },\n\n getAll(): Record<string, unknown> {\n const coordFacts = getAgentFacts(\"__coord\");\n\n return {\n ...(getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {}),\n };\n },\n\n subscribe(\n keys: string[],\n callback: (key: string, value: unknown) => void,\n ): () => void {\n for (const key of keys) {\n if (!scratchpadKeyCallbacks.has(key)) {\n scratchpadKeyCallbacks.set(key, new Set());\n }\n scratchpadKeyCallbacks.get(key)!.add(callback);\n }\n\n return () => {\n for (const key of keys) {\n scratchpadKeyCallbacks.get(key)?.delete(callback);\n }\n };\n },\n\n onChange(callback: (key: string, value: unknown) => void): () => void {\n scratchpadChangeCallbacks.add(callback);\n\n return () => {\n scratchpadChangeCallbacks.delete(callback);\n };\n },\n\n reset(): void {\n if (!scratchpadConfig) {\n return;\n }\n const coordFacts = getAgentFacts(\"__coord\");\n system.batch(() => {\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...scratchpadConfig.init,\n });\n });\n },\n }\n : null;\n\n function notifyScratchpadChange(\n allKeys: string[],\n key: string,\n value: unknown,\n ): void {\n // Fire key-specific callbacks\n const keyCbs = scratchpadKeyCallbacks.get(key);\n if (keyCbs) {\n for (const cb of keyCbs) {\n try {\n cb(key, value);\n } catch {\n /* non-fatal */\n }\n }\n }\n\n // Fire global change callbacks\n for (const cb of scratchpadChangeCallbacks) {\n try {\n cb(key, value);\n } catch {\n /* non-fatal */\n }\n }\n\n // Record timeline event (once per batch of keys, not per key)\n if (timeline && key === allKeys[allKeys.length - 1]) {\n timeline.record({\n type: \"scratchpad_update\",\n timestamp: Date.now(),\n snapshotId: null,\n keys: allKeys,\n });\n }\n\n // Fire lifecycle hook (once per batch of keys)\n if (key === allKeys[allKeys.length - 1]) {\n fireHook(\"onScratchpadUpdate\", {\n keys: allKeys,\n timestamp: Date.now(),\n });\n }\n }\n\n // ---- Breakpoint Infrastructure ----\n const breakpointModifications = new Map<string, BreakpointModifications>();\n const breakpointCancelReasons = new Map<string, string>();\n\n /** Wait for a breakpoint to be resolved or cancelled */\n function waitForBreakpointResolution(\n agentId: string,\n breakpointId: string,\n signal?: AbortSignal,\n ): Promise<BreakpointModifications | null> {\n return new Promise((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let settled = false;\n let onAbort: (() => void) | undefined;\n const agentFacts = getAgentFacts(agentId);\n\n const cleanupAll = () => {\n if (settled) {\n return;\n }\n settled = true;\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (onAbort && signal) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n unsubscribe();\n };\n\n const unsubscribe = system.subscribe(\n [`${agentId}.${BREAKPOINT_KEY}`],\n () => {\n const bpState = getBreakpointState(agentFacts);\n if (bpState.resolved.includes(breakpointId)) {\n cleanupAll();\n const mods = breakpointModifications.get(breakpointId) ?? null;\n breakpointModifications.delete(breakpointId);\n\n resolve(mods);\n } else if (bpState.cancelled.includes(breakpointId)) {\n cleanupAll();\n breakpointModifications.delete(breakpointId);\n const cancelReason = breakpointCancelReasons.get(breakpointId);\n breakpointCancelReasons.delete(breakpointId);\n reject(\n new Error(\n cancelReason\n ? `[Directive MultiAgent] Breakpoint ${breakpointId} cancelled: ${cancelReason}`\n : `[Directive MultiAgent] Breakpoint ${breakpointId} cancelled`,\n ),\n );\n }\n },\n );\n\n if (signal) {\n onAbort = () => {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Breakpoint wait aborted for ${breakpointId}`,\n ),\n );\n };\n if (signal.aborted) {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Breakpoint wait aborted for ${breakpointId}`,\n ),\n );\n\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n timeoutId = setTimeout(() => {\n cleanupAll();\n breakpointModifications.delete(breakpointId);\n breakpointCancelReasons.delete(breakpointId);\n reject(\n new Error(\n `[Directive MultiAgent] Breakpoint timeout: ${breakpointId} not resolved within ${Math.round(breakpointTimeoutMs / 1000)}s`,\n ),\n );\n }, breakpointTimeoutMs);\n });\n }\n\n /** Check and handle a breakpoint at a given execution point */\n async function handleBreakpoint(\n type: MultiAgentBreakpointType,\n agentId: string,\n agentName: string,\n input: string,\n signal?: AbortSignal,\n extra?: {\n patternId?: string;\n handoff?: { fromAgent: string; toAgent: string };\n },\n ): Promise<{ input: string; skip: boolean }> {\n if (breakpointConfigs.length === 0) {\n return { input, skip: false };\n }\n\n const agentFacts = getAgentFacts(agentId);\n const context: BreakpointContext = {\n agentId,\n agentName,\n input,\n state: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n breakpointType: type,\n patternId: extra?.patternId,\n handoff: extra?.handoff,\n };\n\n const matched = matchBreakpoint(breakpointConfigs, type, context);\n if (!matched) {\n return { input, skip: false };\n }\n\n const bpId = createBreakpointId();\n const request: BreakpointRequest = {\n id: bpId,\n type,\n agentId,\n input,\n label: matched.label,\n requestedAt: Date.now(),\n };\n\n // Write to facts\n system.batch(() => {\n const currentBp = getBreakpointState(agentFacts);\n setBreakpointState(agentFacts, {\n ...currentBp,\n pending: [...currentBp.pending, request],\n });\n });\n\n // Fire callbacks\n try {\n onBreakpoint?.(request);\n } catch {\n /* callback error non-fatal */\n }\n try {\n (hooks as any).onBreakpoint?.(request);\n } catch {\n /* hook error non-fatal */\n }\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"breakpoint_hit\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n breakpointId: bpId,\n breakpointType: type,\n label: matched.label,\n });\n }\n\n // Wait for resolution\n const modifications = await waitForBreakpointResolution(\n agentId,\n bpId,\n signal,\n );\n\n // Record resume event\n if (timeline) {\n timeline.record({\n type: \"breakpoint_resumed\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n breakpointId: bpId,\n modified: !!modifications?.input,\n skipped: !!modifications?.skip,\n });\n }\n\n return {\n input: modifications?.input ?? input,\n skip: modifications?.skip ?? false,\n };\n }\n\n // ---- Helper: Get per-agent facts from namespaced System ----\n // biome-ignore lint/suspicious/noExplicitAny: System facts vary\n function getAgentFacts(agentId: string): any {\n return (system.facts as any)[agentId];\n }\n\n // ---- Helper: Wait for approval ----\n function waitForApproval(\n agentId: string,\n requestId: string,\n signal?: AbortSignal,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let settled = false;\n let onAbort: (() => void) | undefined;\n const agentFacts = getAgentFacts(agentId);\n\n const cleanupAll = () => {\n if (settled) return;\n settled = true;\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (onAbort && signal) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n unsubscribe();\n };\n\n // Use system.subscribe with namespaced key\n const unsubscribe = system.subscribe(\n [`${agentId}.${APPROVAL_KEY}`],\n () => {\n const approval = getApprovalState(agentFacts);\n if (approval.approved.includes(requestId)) {\n cleanupAll();\n resolve();\n } else {\n const rejectedRequest = approval.rejected.find(\n (r: RejectedRequest) => r.id === requestId,\n );\n if (rejectedRequest) {\n cleanupAll();\n const errorMsg = rejectedRequest.reason\n ? `Request ${requestId} rejected: ${rejectedRequest.reason}`\n : `Request ${requestId} rejected`;\n reject(new Error(errorMsg));\n }\n }\n },\n );\n\n // Abort signal cleanup\n if (signal) {\n onAbort = () => {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Approval wait aborted for request ${requestId}`,\n ),\n );\n };\n if (signal.aborted) {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Approval wait aborted for request ${requestId}`,\n ),\n );\n\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n // Timeout with solution guidance\n timeoutId = setTimeout(() => {\n cleanupAll();\n const timeoutSeconds = Math.round(approvalTimeoutMs / 1000);\n reject(\n new Error(\n `[Directive MultiAgent] Approval timeout: Request ${requestId} not resolved within ${timeoutSeconds}s.\\n` +\n \"Solutions:\\n\" +\n \" 1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()\\n\" +\n \" 2. Set autoApproveToolCalls: true to auto-approve\\n\" +\n ` 3. Increase approvalTimeoutMs (current: ${approvalTimeoutMs}ms)\\n` +\n \"See: https://directive.run/docs/ai/multi-agent\",\n ),\n );\n }, approvalTimeoutMs);\n });\n }\n\n // ---- Core: Run a task (imperative code) ----\n async function runTask<T>(\n taskId: string,\n taskReg: TaskRegistration,\n input: string,\n opts?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n const label = taskReg.label ?? taskId;\n const startTime = Date.now();\n const state =\n taskStates[taskId] ?? (taskStates[taskId] = { status: \"idle\" });\n state.status = \"running\";\n state.startTime = startTime;\n state.lastError = undefined;\n\n // Check breakpoints — tasks don't have system modules, so only check if\n // breakpoints are configured and handle the missing agent facts gracefully\n let effectiveInput = input;\n if (breakpointConfigs.length > 0) {\n try {\n const bpResult = await handleBreakpoint(\n \"pre_agent_run\",\n taskId,\n label,\n input,\n opts?.signal,\n );\n if (bpResult.skip) {\n state.status = \"completed\";\n\n return {\n output: undefined as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n effectiveInput = bpResult.input;\n } catch {\n // Tasks don't have system facts — breakpoint state access may fail.\n // Fall through with original input.\n }\n }\n\n // Emit timeline event\n if (timeline) {\n timeline.record({\n type: \"task_start\",\n timestamp: startTime,\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n description: taskReg.description,\n inputLength: effectiveInput.length,\n input: effectiveInput.slice(0, MAX_VERBOSE_LENGTH),\n });\n }\n\n // Fire hook\n const effectivePatternId = opts?.patternId ?? \"\";\n fireHook(\"onTaskStart\", {\n patternId: effectivePatternId,\n taskId,\n label,\n timestamp: startTime,\n });\n\n // Semaphore for maxConcurrent\n const sem = taskSemaphores.get(taskId);\n\n // Build TaskContext with deep-cloned memory and scratchpad\n const buildContext = (): TaskContext => ({\n taskId,\n memory: sharedMemory\n ? (structuredClone(\n sharedMemory.getContextMessages?.() ?? [],\n ) as ReadonlyArray<{ role: string; content: string }>)\n : [],\n scratchpad: scratchpadInstance\n ? Object.freeze(structuredClone(scratchpadInstance.getAll()))\n : Object.freeze({}),\n readAgentState: (nodeId: string) => {\n // Check agent states first, then task states\n const agentState = agentStates[nodeId];\n if (agentState) {\n return Object.freeze({\n status: agentState.status,\n lastOutput:\n agentState.lastOutput != null\n ? String(agentState.lastOutput)\n : undefined,\n lastError: agentState.lastError,\n totalTokens: agentState.totalTokens,\n });\n }\n const taskState = taskStates[nodeId];\n if (taskState) {\n return Object.freeze({\n status: taskState.status,\n lastOutput:\n taskState.lastOutput != null\n ? String(taskState.lastOutput)\n : undefined,\n lastError: taskState.lastError,\n totalTokens: 0,\n });\n }\n\n return undefined;\n },\n reportProgress: (percent: number, message?: string) => {\n const clampedPercent = Number.isFinite(percent)\n ? Math.max(0, Math.min(100, percent))\n : 0;\n if (timeline) {\n timeline.record({\n type: \"task_progress\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n percent: clampedPercent,\n message,\n });\n }\n fireHook(\"onTaskProgress\", {\n patternId: effectivePatternId,\n taskId,\n label,\n percent: clampedPercent,\n message,\n timestamp: Date.now(),\n });\n },\n });\n\n const maxAttempts = taskReg.retry?.attempts ?? 1;\n const backoff = taskReg.retry?.backoff ?? \"fixed\";\n const baseDelay = taskReg.retry?.delayMs ?? 1000;\n let lastError: Error | undefined;\n\n const executeAttempt = async (signal: AbortSignal): Promise<unknown> => {\n const context = buildContext();\n\n return taskReg.run(effectiveInput, signal, context);\n };\n\n let releaseFn: (() => void) | null = null;\n\n try {\n if (sem) {\n releaseFn = await sem.acquire();\n }\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const abortController = new AbortController();\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined;\n\n // Chain with external signal — store handler for cleanup\n const abortHandler = () => abortController.abort();\n if (opts?.signal) {\n if (opts.signal.aborted) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" aborted before starting`,\n );\n }\n opts.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n // Timeout\n if (taskReg.timeout) {\n timeoutTimer = setTimeout(\n () => abortController.abort(),\n taskReg.timeout,\n );\n }\n\n try {\n const rawOutput = await executeAttempt(abortController.signal);\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n }\n\n // Stringify non-string output\n const output =\n typeof rawOutput === \"string\"\n ? rawOutput\n : safeStringify(rawOutput);\n const durationMs = Date.now() - startTime;\n\n state.status = \"completed\";\n state.lastOutput = output;\n state.durationMs = durationMs;\n\n // Emit timeline event\n if (timeline) {\n timeline.record({\n type: \"task_complete\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n durationMs,\n output,\n });\n }\n\n // Fire hooks\n fireHook(\"onTaskComplete\", {\n patternId: opts?.patternId ?? \"\",\n taskId,\n label,\n durationMs,\n timestamp: Date.now(),\n });\n\n // Update coordinator fact for constraint reactivity\n try {\n const coordFacts = system.read(\"__coord\");\n setBridgeFact(coordFacts as any, \"__lastTaskCompletion\" as any, {\n taskId,\n timestamp: Date.now(),\n });\n } catch {\n // non-fatal: system might be destroyed\n }\n\n return {\n output: output as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n } catch (err) {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n }\n lastError = err instanceof Error ? err : new Error(String(err));\n\n // Emit per-attempt error if retrying\n if (attempt < maxAttempts) {\n if (timeline) {\n timeline.record({\n type: \"task_error\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n error: lastError.message,\n durationMs: Date.now() - startTime,\n attempt,\n });\n }\n\n // Backoff with cap and abort-awareness\n const MAX_BACKOFF_MS = 30_000;\n const rawDelay =\n backoff === \"exponential\"\n ? baseDelay * 2 ** (attempt - 1)\n : baseDelay;\n const delay = Math.min(rawDelay, MAX_BACKOFF_MS);\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n const onAbort = () => {\n if (!settled) {\n settled = true;\n clearTimeout(timer);\n reject(\n new Error(\n `[Directive MultiAgent] Task \"${taskId}\" aborted during retry backoff`,\n ),\n );\n }\n };\n const timer = setTimeout(() => {\n settled = true;\n opts?.signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delay);\n if (opts?.signal) {\n opts.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n }\n } finally {\n // Clean up abort listener to prevent accumulation\n opts?.signal?.removeEventListener(\"abort\", abortHandler);\n }\n }\n\n // All attempts exhausted\n const durationMs = Date.now() - startTime;\n state.status = \"error\";\n state.lastError = lastError?.message;\n state.durationMs = durationMs;\n\n // Emit final error event\n if (timeline) {\n timeline.record({\n type: \"task_error\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n error: lastError?.message ?? \"Unknown error\",\n durationMs,\n });\n }\n\n fireHook(\"onTaskError\", {\n patternId: effectivePatternId,\n taskId,\n label,\n error: lastError!,\n durationMs,\n timestamp: Date.now(),\n });\n\n // Note: Tasks bypass the circuit breaker's execute() wrapper (tasks are imperative\n // code, not LLM calls). Task failure recovery is handled by the retry config on\n // TaskRegistration. The CB's execute() is only used for agent runs.\n\n throw lastError;\n } finally {\n releaseFn?.();\n }\n }\n\n // ---- Core: Run a single agent ----\n async function runSingleAgent<T>(\n agentId: string,\n input: string,\n opts?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n assertNotDestroyed();\n\n if (opts?.signal?.aborted) {\n throw new Error(\n `[Directive MultiAgent] Handler \"${agentId}\" run aborted before starting`,\n );\n }\n\n if (globalStatus === \"paused\") {\n throw new Error(\n \"[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)\",\n );\n }\n\n // Increment synchronously before any await so waitForIdle knows a run is pending\n pendingRuns++;\n\n try {\n // Check if this is a task (imperative code), not an agent (LLM call)\n const taskReg = tasks[agentId];\n if (taskReg) {\n return await runTask<T>(agentId, taskReg, input, opts);\n }\n\n const registration = agents[agentId];\n if (!registration) {\n const available =\n [...Object.keys(agents), ...Object.keys(tasks)].join(\", \") ||\n \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown handler \"${agentId}\". Registered handlers: ${available}`,\n );\n }\n\n const effectiveCircuitBreaker =\n registration.circuitBreaker ?? orchestratorCircuitBreaker;\n if (effectiveCircuitBreaker) {\n return await effectiveCircuitBreaker.execute(() =>\n runSingleAgentInner<T>(agentId, registration, input, opts),\n );\n }\n\n return await runSingleAgentInner<T>(agentId, registration, input, opts);\n } catch (error) {\n // Self-healing: attempt reroute if configured and this is a CB error or health threshold\n // Tasks are imperative code — self-healing reroute/degradation only applies to agents\n if (\n selfHealing &&\n !tasks[agentId] &&\n !(opts as { __isReroute?: boolean })?.__isReroute\n ) {\n const equivalents = findEquivalentAgents(agentId);\n const alternate = selectBestEquivalent(equivalents);\n if (alternate) {\n const rerouteEvent: RerouteEvent = {\n originalAgent: agentId,\n reroutedTo: alternate,\n reason: error instanceof Error ? error.message : String(error),\n timestamp: Date.now(),\n };\n\n try {\n selfHealing.onReroute?.(rerouteEvent);\n } catch {\n // callback error is non-fatal\n }\n fireHook(\"onReroute\", rerouteEvent);\n\n if (timeline) {\n timeline.record({\n type: \"reroute\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n from: agentId,\n to: alternate,\n reason: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Prevent circular reroute (max 1 hop)\n return runSingleAgent<T>(alternate, input, {\n ...opts,\n __isReroute: true,\n } as any);\n }\n\n // No equivalents — apply degradation policy\n if (\n selfHealing.degradation === \"fallback-response\" &&\n selfHealing.fallbackResponse !== undefined\n ) {\n return {\n output: selfHealing.fallbackResponse as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n }\n\n // Update state for errors that happen before semaphore acquisition\n const state = agentStates[agentId];\n if (state && state.status !== \"error\") {\n state.status = \"error\";\n state.lastError =\n error instanceof Error ? error.message : String(error);\n }\n\n throw error;\n } finally {\n pendingRuns--;\n notifyIdleWaiters();\n }\n }\n\n async function runSingleAgentInner<T>(\n agentId: string,\n registration: AgentRegistration,\n originalInput: string,\n opts?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n const startTime = Date.now();\n const agentFacts = getAgentFacts(agentId);\n const state = agentStates[agentId]!;\n let agent = registration.agent;\n let processedInput = originalInput;\n\n // Acquire semaphore slot\n const semaphore = semaphores.get(agentId);\n if (!semaphore) {\n const available = Object.keys(agents).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown agent \"${agentId}\". Registered agents: ${available}`,\n );\n }\n const release = await semaphore.acquire(opts?.signal);\n\n // Create timeout if specified\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let abortHandler: (() => void) | undefined;\n\n try {\n if (registration.timeout) {\n timeoutId = setTimeout(() => controller.abort(), registration.timeout);\n }\n if (opts?.signal) {\n abortHandler = () => controller.abort();\n opts.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n // Inject memory context\n const effectiveMemory = registration.memory ?? sharedMemory;\n if (effectiveMemory) {\n const contextMessages = effectiveMemory.getContextMessages();\n if (contextMessages.length > 0) {\n const contextStr = contextMessages\n .map((m) => `${m.role}: ${m.content}`)\n .join(\"\\n\");\n agent = {\n ...agent,\n instructions:\n (agent.instructions ?? \"\") +\n \"\\n\\nConversation context:\\n\" +\n contextStr,\n };\n }\n }\n\n // Inject system meta context if enabled\n if (options.metaContext) {\n const metaStr = formatSystemMeta(system.inspect());\n if (metaStr) {\n agent = {\n ...agent,\n instructions: (agent.instructions ?? \"\") + \"\\n\\n\" + metaStr,\n };\n }\n }\n\n // ---- Breakpoint: pre_input_guardrails ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_input_guardrails\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n if (bpResult.skip) {\n state.status = \"completed\";\n notifyIdleWaiters();\n\n return {\n output: undefined as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n processedInput = bpResult.input;\n }\n\n // ---- Input guardrails BEFORE agent_start so timeline shows correct order ----\n const allInputGuardrails = [\n ...(guardrails.input ?? []),\n ...(registration.guardrails?.input ?? []),\n ];\n const inputGuardrailsList = allInputGuardrails.map((g, i) =>\n normalizeGuardrail(g, i, \"input\"),\n );\n for (const guardrail of inputGuardrailsList) {\n const { name } = guardrail;\n const context = {\n agentName: agent.name,\n input: processedInput,\n facts: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n };\n const guardStartTime = Date.now();\n const result = await executeGuardrailWithRetry(\n guardrail,\n { input: processedInput, agentName: agent.name },\n context,\n );\n fireHook(\"onGuardrailCheck\", {\n agentId,\n guardrailName: name,\n guardrailType: \"input\",\n passed: result.passed,\n reason: result.reason,\n durationMs: Date.now() - guardStartTime,\n timestamp: Date.now(),\n });\n if (!result.passed) {\n throw new GuardrailError({\n code: \"INPUT_GUARDRAIL_FAILED\",\n message: `Input guardrail \"${name}\" failed: ${result.reason}`,\n guardrailName: name,\n guardrailType: \"input\",\n userMessage: result.reason ?? \"Input validation failed\",\n agentName: agent.name,\n input: processedInput,\n });\n }\n if (result.transformed !== undefined) {\n processedInput = result.transformed as string;\n }\n }\n\n // Fire onAgentStart hook (after guardrails pass)\n fireHook(\"onAgentStart\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n timestamp: startTime,\n });\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"agent_start\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n inputLength: processedInput.length,\n ...(\"description\" in agent && agent.description\n ? { description: String(agent.description) }\n : {}),\n ...(agent.instructions\n ? { instructions: agent.instructions.slice(0, MAX_VERBOSE_LENGTH) }\n : {}),\n input: processedInput.slice(0, MAX_VERBOSE_LENGTH),\n });\n }\n\n // Update per-agent facts\n system.batch(() => {\n const currentAgent = getAgentState(agentFacts);\n setAgentState(agentFacts, {\n ...currentAgent,\n status: \"running\",\n input: processedInput,\n startedAt: Date.now(),\n });\n });\n state.status = \"running\";\n state.lastInput = processedInput;\n\n // ---- Breakpoint: pre_agent_run ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_agent_run\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n if (bpResult.skip) {\n state.status = \"completed\";\n notifyIdleWaiters();\n\n return {\n output: undefined as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n processedInput = bpResult.input;\n }\n\n // ---- Per-agent structured output wrapping (per-call overrides per-agent) ----\n let effectiveRunner: AgentRunner = runner;\n const effectiveSchema =\n opts?.outputSchema !== undefined\n ? opts.outputSchema // null = opt-out, SafeParseable = override\n : registration.outputSchema; // per-agent default\n if (effectiveSchema) {\n effectiveRunner = withStructuredOutput(runner, {\n schema: effectiveSchema,\n maxRetries:\n opts?.maxSchemaRetries ?? registration.maxSchemaRetries ?? 2,\n extractJson: registration.extractJson,\n schemaDescription: registration.schemaDescription,\n });\n }\n\n // Effective retry config: per-agent overrides orchestrator default\n const effectiveRetry = registration.retry ?? defaultAgentRetry;\n\n // Run agent with retry support\n const result = await executeAgentWithRetry<T>(\n effectiveRunner,\n agent,\n processedInput,\n {\n ...registration.runOptions,\n ...opts,\n signal: controller.signal,\n onMessage: (message) => {\n const currentConversation = getConversation(agentFacts);\n const updated = [...currentConversation, message];\n setConversation(\n agentFacts,\n updated.length > MAX_CONVERSATION_MESSAGES\n ? updated.slice(-MAX_CONVERSATION_MESSAGES)\n : updated,\n );\n opts?.onMessage?.(message);\n },\n onToolCall: async (toolCall) => {\n // ---- Tool call guardrails: orchestrator-level, then per-agent ----\n const allToolCallGuardrails = [\n ...(guardrails.toolCall ?? []),\n ...(registration.guardrails?.toolCall ?? []),\n ];\n const toolCallGuardrailsList = allToolCallGuardrails.map((g, i) =>\n normalizeGuardrail(g, i, \"toolCall\"),\n );\n for (const guardrail of toolCallGuardrailsList) {\n const { name } = guardrail;\n const context = {\n agentName: agent.name,\n input: processedInput,\n facts: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n };\n const guardStartTime = Date.now();\n const guardResult = await executeGuardrailWithRetry(\n guardrail,\n { toolCall, agentName: agent.name, input: processedInput },\n context,\n );\n fireHook(\"onGuardrailCheck\", {\n agentId,\n guardrailName: name,\n guardrailType: \"toolCall\",\n passed: guardResult.passed,\n reason: guardResult.reason,\n durationMs: Date.now() - guardStartTime,\n timestamp: Date.now(),\n });\n if (!guardResult.passed) {\n throw new GuardrailError({\n code: \"TOOL_CALL_GUARDRAIL_FAILED\",\n message: `Tool call guardrail \"${name}\" failed: ${guardResult.reason}`,\n guardrailName: name,\n guardrailType: \"toolCall\",\n userMessage: guardResult.reason ?? \"Tool call blocked\",\n data: { toolCall },\n agentName: agent.name,\n input: processedInput,\n });\n }\n }\n\n // Approval workflow\n if (!autoApproveToolCalls) {\n const approvalId = `tool-${agentId}-${toolCall.id}`;\n const approvalRequest: ApprovalRequest = {\n id: approvalId,\n type: \"tool_call\",\n agentName: agent.name,\n description: `Tool call: ${toolCall.name}`,\n data: toolCall,\n requestedAt: Date.now(),\n };\n\n approvalRequestIndex.set(approvalId, agentId);\n system.batch(() => {\n const currentApproval = getApprovalState(agentFacts);\n setApprovalState(agentFacts, {\n ...currentApproval,\n pending: [...currentApproval.pending, approvalRequest],\n });\n });\n\n onApprovalRequest?.(approvalRequest);\n await waitForApproval(agentId, approvalId, opts?.signal);\n }\n\n const currentToolCalls = getToolCalls(agentFacts);\n const updatedToolCalls = [...currentToolCalls, toolCall];\n setToolCalls(\n agentFacts,\n updatedToolCalls.length > MAX_TOOL_CALLS\n ? updatedToolCalls.slice(-MAX_TOOL_CALLS)\n : updatedToolCalls,\n );\n opts?.onToolCall?.(toolCall);\n },\n },\n effectiveRetry\n ? {\n ...effectiveRetry,\n onRetry: (attempt, error, delayMs) => {\n effectiveRetry.onRetry?.(attempt, error, delayMs);\n fireHook(\"onAgentRetry\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n attempt,\n error,\n delayMs,\n timestamp: Date.now(),\n });\n },\n }\n : undefined,\n );\n\n // ---- Breakpoint: pre_output_guardrails ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_output_guardrails\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n if (bpResult.skip) {\n // Skip output guardrails, return result directly\n state.status = \"completed\";\n notifyIdleWaiters();\n\n return result;\n }\n }\n\n // ---- Output guardrails: orchestrator-level, then per-agent ----\n const allOutputGuardrails = [\n ...(guardrails.output ?? []),\n ...(registration.guardrails?.output ?? []),\n ];\n const outputGuardrailsList = allOutputGuardrails.map((g, i) =>\n normalizeGuardrail(g, i, \"output\"),\n );\n for (const guardrail of outputGuardrailsList) {\n const { name } = guardrail;\n const context = {\n agentName: agent.name,\n input: processedInput,\n facts: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n };\n const guardStartTime = Date.now();\n const guardResult = await executeGuardrailWithRetry(\n guardrail,\n {\n output: result.output,\n agentName: agent.name,\n input: processedInput,\n messages: result.messages,\n },\n context,\n );\n fireHook(\"onGuardrailCheck\", {\n agentId,\n guardrailName: name,\n guardrailType: \"output\",\n passed: guardResult.passed,\n reason: guardResult.reason,\n durationMs: Date.now() - guardStartTime,\n timestamp: Date.now(),\n });\n if (!guardResult.passed) {\n throw new GuardrailError({\n code: \"OUTPUT_GUARDRAIL_FAILED\",\n message: `Output guardrail \"${name}\" failed: ${guardResult.reason}`,\n guardrailName: name,\n guardrailType: \"output\",\n userMessage: guardResult.reason ?? \"Output validation failed\",\n agentName: agent.name,\n input: processedInput,\n });\n }\n if (guardResult.transformed !== undefined) {\n (result as { output: unknown }).output = guardResult.transformed;\n }\n }\n\n // Update per-agent facts\n system.batch(() => {\n const currentAgent = getAgentState(agentFacts);\n setAgentState(agentFacts, {\n ...currentAgent,\n status: \"completed\",\n output: result.output,\n tokenUsage: currentAgent.tokenUsage + result.totalTokens,\n turnCount: currentAgent.turnCount + result.messages.length,\n completedAt: Date.now(),\n });\n });\n\n // Update local state\n state.status = \"completed\";\n state.lastOutput = result.output;\n state.runCount++;\n state.totalTokens += result.totalTokens;\n notifyIdleWaiters();\n\n // Update global token count atomically via System facts\n // Use read-modify-write inside batch to prevent desync from concurrent runs\n const coordFacts = getAgentFacts(\"__coord\");\n let shouldFireBudgetWarning = false;\n let budgetPercentage = 0;\n system.batch(() => {\n const currentTokens = getBridgeFact<number>(\n coordFacts,\n \"__globalTokens\",\n );\n const newTotal = currentTokens + result.totalTokens;\n globalTokenCount = newTotal;\n setBridgeFact(coordFacts, \"__globalTokens\", newTotal);\n\n // Check budget warning threshold\n if (maxTokenBudget && onBudgetWarning) {\n budgetPercentage = newTotal / maxTokenBudget;\n const warningFired = getBridgeFact<boolean>(\n coordFacts,\n \"__budgetWarningFired\",\n );\n if (budgetPercentage >= budgetWarningThreshold && !warningFired) {\n setBridgeFact(coordFacts, \"__budgetWarningFired\", true);\n shouldFireBudgetWarning = true;\n }\n }\n });\n\n // Fire budget warning callback outside of batch (callbacks shouldn't run inside batch)\n if (shouldFireBudgetWarning) {\n try {\n onBudgetWarning!({\n currentTokens: globalTokenCount,\n maxBudget: maxTokenBudget!,\n percentage: budgetPercentage,\n });\n } catch (callbackError) {\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] onBudgetWarning threw:\",\n callbackError,\n );\n }\n }\n }\n\n // Store messages in memory (best-effort — don't fail the run on memory errors)\n // Only store the user message once — agent-utils includes it in every result,\n // but memory already has it from the first agent call in a conversation.\n if (effectiveMemory && result.messages.length > 0) {\n try {\n const existingMessages = effectiveMemory.getContextMessages();\n const hasUserMessage = existingMessages.some(\n (m) => m.role === \"user\" && m.content === processedInput,\n );\n const messagesToStore = hasUserMessage\n ? result.messages.filter(\n (m) => !(m.role === \"user\" && m.content === processedInput),\n )\n : result.messages;\n effectiveMemory.addMessages(messagesToStore);\n } catch (memoryError) {\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] Memory addMessages failed:\",\n memoryError,\n );\n }\n }\n }\n\n // Fire onAgentComplete hook\n fireHook(\"onAgentComplete\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n output: result.output,\n tokenUsage: result.totalTokens,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n });\n\n // Record timeline event\n if (timeline) {\n const outputStr =\n typeof result.output === \"string\"\n ? result.output\n : safeStringify(result.output);\n timeline.record({\n type: \"agent_complete\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n outputLength: outputStr.length,\n totalTokens: result.totalTokens,\n inputTokens: result.tokenUsage?.inputTokens ?? 0,\n outputTokens: result.tokenUsage?.outputTokens ?? 0,\n durationMs: Date.now() - startTime,\n modelId: registration.agent.model ?? undefined,\n output: outputStr.slice(0, MAX_VERBOSE_LENGTH),\n });\n }\n\n // Record health success\n if (healthMonitorInstance) {\n healthMonitorInstance.recordSuccess(agentId, Date.now() - startTime);\n }\n\n // Recompute cross-agent derivations\n recomputeDerivations();\n\n // ---- Breakpoint: post_run ----\n await handleBreakpoint(\n \"post_run\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n\n return result;\n } catch (error) {\n state.status = \"error\";\n state.lastError = error instanceof Error ? error.message : String(error);\n notifyIdleWaiters();\n\n // Update per-agent facts with error\n system.batch(() => {\n const currentAgent = getAgentState(agentFacts);\n setAgentState(agentFacts, {\n ...currentAgent,\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n completedAt: Date.now(),\n });\n });\n\n // Fire onAgentError hook\n fireHook(\"onAgentError\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n error: error instanceof Error ? error : new Error(String(error)),\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n });\n\n // Record timeline event\n if (timeline) {\n const base: Record<string, unknown> = {\n type: \"agent_error\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n errorMessage: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - startTime,\n };\n if (isGuardrailError(error)) {\n base.guardrailName = error.guardrailName;\n base.guardrailType = error.guardrailType;\n base.errorCode = error.code;\n }\n timeline.record(base as any);\n }\n\n // Record health failure\n if (healthMonitorInstance) {\n healthMonitorInstance.recordFailure(\n agentId,\n Date.now() - startTime,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n\n // Recompute cross-agent derivations\n recomputeDerivations();\n\n throw error;\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n if (abortHandler && opts?.signal) {\n opts.signal.removeEventListener(\"abort\", abortHandler);\n }\n release();\n }\n }\n\n // ---- Streaming ----\n function runAgentStreamImpl<T>(\n agentId: string,\n input: string,\n options: { signal?: AbortSignal } = {},\n ): OrchestratorStreamResult<T> {\n assertNotDestroyed();\n\n // Task streaming: run task, emit single chunk + done\n const taskReg = tasks[agentId];\n if (taskReg) {\n const taskChunks: OrchestratorStreamChunk[] = [];\n const taskWaiters: Array<\n (chunk: OrchestratorStreamChunk | null) => void\n > = [];\n let taskClosed = false;\n\n const pushTaskChunk = (chunk: OrchestratorStreamChunk) => {\n if (taskClosed) {\n return;\n }\n const waiter = taskWaiters.shift();\n if (waiter) {\n waiter(chunk);\n } else {\n taskChunks.push(chunk);\n }\n };\n\n const closeTaskStream = () => {\n taskClosed = true;\n for (const w of taskWaiters) {\n w(null);\n }\n taskWaiters.length = 0;\n };\n\n const taskAbortController = new AbortController();\n // Wire external signal into task-local controller\n let taskExternalAbortHandler: (() => void) | undefined;\n if (options.signal) {\n if (options.signal.aborted) {\n taskAbortController.abort();\n } else {\n taskExternalAbortHandler = () => taskAbortController.abort();\n options.signal.addEventListener(\"abort\", taskExternalAbortHandler, {\n once: true,\n });\n }\n }\n\n const resultPromise = runSingleAgent<T>(agentId, input, {\n signal: taskAbortController.signal,\n })\n .then(\n (result) => {\n const output =\n typeof result.output === \"string\"\n ? result.output\n : safeStringify(result.output);\n pushTaskChunk({ type: \"token\", data: output, tokenCount: 0 });\n pushTaskChunk({\n type: \"done\",\n totalTokens: 0,\n duration: 0,\n droppedTokens: 0,\n });\n closeTaskStream();\n\n return result;\n },\n (err) => {\n pushTaskChunk({ type: \"error\", error: err });\n closeTaskStream();\n throw err;\n },\n )\n .finally(() => {\n if (taskExternalAbortHandler && options.signal) {\n options.signal.removeEventListener(\n \"abort\",\n taskExternalAbortHandler,\n );\n }\n });\n\n // Prevent unhandled rejection if no one awaits .result\n resultPromise.catch(() => {});\n\n return {\n stream: {\n async *[Symbol.asyncIterator]() {\n while (true) {\n const chunk = taskChunks.shift();\n if (chunk) {\n yield chunk;\n if (chunk.type === \"done\" || chunk.type === \"error\") {\n return;\n }\n } else if (taskClosed) {\n return;\n } else {\n const next = await new Promise<OrchestratorStreamChunk | null>(\n (resolve) => taskWaiters.push(resolve),\n );\n if (!next) {\n return;\n }\n yield next;\n if (next.type === \"done\" || next.type === \"error\") {\n return;\n }\n }\n }\n },\n },\n result: resultPromise,\n abort: () => {\n taskAbortController.abort();\n },\n } as OrchestratorStreamResult<T>;\n }\n\n const registration = agents[agentId];\n if (!registration) {\n const available =\n [...Object.keys(agents), ...Object.keys(tasks)].join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown handler \"${agentId}\". Registered handlers: ${available}`,\n );\n }\n\n const MAX_AGENT_STREAM_BUFFER = 10_000;\n const MAX_ACCUMULATED_OUTPUT = 100_000;\n const abortController = new AbortController();\n const chunks: OrchestratorStreamChunk[] = [];\n const waiters: Array<(chunk: OrchestratorStreamChunk | null) => void> = [];\n let closed = false;\n const startTime = Date.now();\n let tokenCount = 0;\n let accumulatedOutput = \"\";\n\n let abortHandler: (() => void) | undefined;\n if (options.signal) {\n abortHandler = () => abortController.abort();\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n const cleanup = () => {\n if (abortHandler && options.signal) {\n options.signal.removeEventListener(\"abort\", abortHandler);\n }\n };\n\n const pushChunk = (chunk: OrchestratorStreamChunk) => {\n if (closed) return;\n const waiter = waiters.shift();\n if (waiter) {\n waiter(chunk);\n } else {\n if (chunks.length >= MAX_AGENT_STREAM_BUFFER) {\n chunks.shift();\n }\n chunks.push(chunk);\n }\n };\n\n const closeStream = () => {\n closed = true;\n cleanup();\n for (const waiter of waiters) {\n waiter(null);\n }\n waiters.length = 0;\n };\n\n const resultPromise = (async (): Promise<RunResult<T>> => {\n pushChunk({\n type: \"progress\",\n phase: \"starting\",\n message: \"Running input guardrails\",\n });\n\n try {\n const result = await runSingleAgent<T>(agentId, input, {\n signal: abortController.signal,\n onMessage: (message) => {\n pushChunk({ type: \"message\", message });\n if (message.role === \"assistant\" && message.content) {\n const newTokens = Math.ceil(message.content.length / 4);\n tokenCount += newTokens;\n accumulatedOutput += message.content;\n if (accumulatedOutput.length > MAX_ACCUMULATED_OUTPUT) {\n accumulatedOutput = accumulatedOutput.slice(\n -MAX_ACCUMULATED_OUTPUT,\n );\n }\n pushChunk({ type: \"token\", data: message.content, tokenCount });\n }\n },\n onToolCall: async (toolCall) => {\n pushChunk({\n type: \"tool_start\",\n tool: toolCall.name,\n toolCallId: toolCall.id,\n arguments: toolCall.arguments,\n });\n if (toolCall.result) {\n pushChunk({\n type: \"tool_end\",\n tool: toolCall.name,\n toolCallId: toolCall.id,\n result: toolCall.result,\n });\n }\n },\n });\n\n const duration = Date.now() - startTime;\n pushChunk({\n type: \"done\",\n totalTokens: result.totalTokens,\n duration,\n droppedTokens: 0,\n });\n closeStream();\n\n return result;\n } catch (error) {\n if (error instanceof GuardrailError) {\n pushChunk({\n type: \"guardrail_triggered\",\n guardrailName: error.guardrailName,\n reason: error.message,\n partialOutput: accumulatedOutput,\n stopped: true,\n });\n }\n pushChunk({\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error)),\n });\n closeStream();\n throw error;\n }\n })();\n\n const stream: AsyncIterable<OrchestratorStreamChunk> = {\n [Symbol.asyncIterator](): AsyncIterator<OrchestratorStreamChunk> {\n return {\n async next(): Promise<IteratorResult<OrchestratorStreamChunk>> {\n if (chunks.length > 0) {\n return { done: false, value: chunks.shift()! };\n }\n if (closed) {\n return { done: true, value: undefined };\n }\n\n return new Promise<IteratorResult<OrchestratorStreamChunk>>(\n (resolve) => {\n waiters.push((chunk) => {\n if (chunk === null) {\n resolve({ done: true, value: undefined });\n } else {\n resolve({ done: false, value: chunk });\n }\n });\n },\n );\n },\n };\n },\n };\n\n // Prevent unhandled rejection if caller only consumes stream (not .result)\n resultPromise.catch(() => {});\n\n return {\n stream,\n result: resultPromise,\n abort: () => {\n abortController.abort();\n closeStream();\n },\n };\n }\n\n // ---- Pattern Runners ----\n async function runParallelPattern<T>(\n pattern: ParallelPattern<T>,\n input: string,\n patternId?: string,\n ): Promise<T> {\n const patternStartTime = Date.now();\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"parallel\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if (pattern.timeout) {\n timeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n }\n\n let patternError: Error | undefined;\n try {\n const promises = pattern.handlers.map((agentId) =>\n runSingleAgent(agentId, input, {\n signal: controller.signal,\n patternId,\n }).catch((error) => {\n if (pattern.minSuccess === undefined) {\n throw error;\n }\n\n return null;\n }),\n );\n\n const results = await Promise.all(promises);\n const successResults = results.filter(\n (r): r is RunResult<unknown> => r !== null,\n );\n\n if (\n pattern.minSuccess !== undefined &&\n successResults.length < pattern.minSuccess\n ) {\n const failCount = results.length - successResults.length;\n\n throw new Error(\n `[Directive MultiAgent] Parallel pattern: Only ${successResults.length}/${pattern.handlers.length} agents succeeded ` +\n `(minimum required: ${pattern.minSuccess}, failed: ${failCount})`,\n );\n }\n\n return pattern.merge(successResults);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"parallel\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Shared checkpoint helper ----\n\n /** Save a pattern checkpoint state to the configured store */\n async function savePatternCheckpoint(\n state: PatternCheckpointState,\n store: CheckpointStore,\n config?: PatternCheckpointConfig,\n ): Promise<string | null> {\n const step = getPatternStep(state);\n\n // Conditional: evaluate when() predicate\n if (config?.when) {\n try {\n const shouldSave = config.when({\n step,\n patternType: state.type,\n facts:\n state.type === \"goal\"\n ? (state as GoalCheckpointState).facts\n : undefined,\n satisfaction:\n state.type === \"goal\"\n ? (state as GoalCheckpointState).lastSatisfaction\n : undefined,\n });\n if (!shouldSave) {\n return null;\n }\n } catch {\n // If when() throws, skip this checkpoint\n return null;\n }\n }\n\n try {\n const checkpoint: Checkpoint = {\n version: 1,\n id: state.id,\n createdAt: state.createdAt,\n label: state.label,\n systemExport: JSON.stringify(state),\n timelineExport: null,\n localState: {\n type: \"multi\",\n globalTokenCount: 0,\n globalStatus: \"idle\",\n agentStates: {},\n handoffCounter: 0,\n pendingHandoffs: [],\n handoffResults: [],\n roundRobinCounters: null,\n },\n memoryExport: null,\n orchestratorType: \"multi\",\n metadata: { patternType: state.type },\n };\n await store.save(checkpoint);\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"checkpoint_save\",\n timestamp: Date.now(),\n snapshotId: null,\n checkpointId: state.id,\n patternType: state.type,\n step,\n });\n }\n\n fireHook(\"onCheckpointSave\", {\n checkpointId: state.id,\n patternType: state.type,\n step,\n timestamp: Date.now(),\n });\n\n return state.id;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n console.error(\n `[Directive MultiAgent] ${state.type}: checkpoint save failed:`,\n error,\n );\n\n fireHook(\"onCheckpointError\", {\n patternType: state.type,\n step,\n error,\n timestamp: Date.now(),\n });\n\n return null;\n }\n }\n\n // ---- Pattern Runners ----\n\n async function runSequentialPattern<T>(\n pattern: SequentialPattern<T>,\n initialInput: string,\n patternId?: string,\n resumeFrom?: SequentialCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_sequential\";\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"sequential\",\n input: initialInput,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const ckptConfig = pattern.checkpoint;\n const ckptStore = ckptConfig?.store ?? checkpointStore;\n const ckptEveryN = ckptConfig?.everyN ?? 5;\n const ckptPrefix = ckptConfig?.labelPrefix ?? \"sequential\";\n\n // Resume state\n let currentInput = resumeFrom?.currentInput ?? initialInput;\n let lastResult: RunResult<unknown> | undefined;\n const collectedResults: Array<{\n agentId: string;\n output: unknown;\n totalTokens: number;\n }> = resumeFrom?.results ? [...resumeFrom.results] : [];\n const startIdx = resumeFrom?.step ?? 0;\n let patternError: Error | undefined;\n\n // Restore lastResult from checkpoint\n if (resumeFrom && collectedResults.length > 0) {\n const last = collectedResults[collectedResults.length - 1]!;\n lastResult = {\n output: last.output,\n totalTokens: last.totalTokens,\n messages: [],\n toolCalls: [],\n };\n }\n\n try {\n for (let i = startIdx; i < pattern.handlers.length; i++) {\n const agentId = pattern.handlers[i]!;\n\n // ---- Breakpoint: pre_pattern_step ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_pattern_step\",\n agentId,\n agents[agentId]?.agent.name ?? agentId,\n currentInput,\n undefined,\n {\n patternId,\n },\n );\n if (bpResult.skip) {\n continue;\n }\n currentInput = bpResult.input;\n }\n\n try {\n lastResult = await runSingleAgent(agentId, currentInput, {\n patternId,\n });\n collectedResults.push({\n agentId,\n output: lastResult.output,\n totalTokens: lastResult.totalTokens,\n });\n\n if (i < pattern.handlers.length - 1) {\n if (pattern.transform) {\n currentInput = pattern.transform(lastResult.output, agentId, i);\n } else {\n currentInput =\n typeof lastResult.output === \"string\"\n ? lastResult.output\n : safeStringify(lastResult.output);\n }\n }\n\n // Save checkpoint after each agent\n if (\n ckptConfig &&\n ckptStore &&\n i > startIdx &&\n (i - startIdx) % ckptEveryN === 0\n ) {\n const nextInput =\n i < pattern.handlers.length - 1 ? currentInput : initialInput;\n await savePatternCheckpoint(\n {\n type: \"sequential\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${ckptPrefix}:step-${i + 1}`,\n patternId: pId,\n stepsTotal: pattern.handlers.length,\n step: i + 1,\n currentInput: nextInput,\n results: [...collectedResults],\n },\n ckptStore,\n ckptConfig,\n );\n }\n } catch (error) {\n if (!pattern.continueOnError) {\n throw error;\n }\n }\n }\n\n if (!lastResult) {\n throw new Error(\n \"[Directive MultiAgent] No successful results in sequential pattern\",\n );\n }\n\n return pattern.extract\n ? pattern.extract(lastResult.output)\n : (lastResult.output as T);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"sequential\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n async function runSupervisorPattern<T>(\n pattern: SupervisorPattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: SupervisorCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_supervisor\";\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"supervisor\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const ckptConfig = pattern.checkpoint;\n const ckptStore = ckptConfig?.store ?? checkpointStore;\n const ckptEveryN = ckptConfig?.everyN ?? 5;\n const ckptPrefix = ckptConfig?.labelPrefix ?? \"supervisor\";\n\n const workerResults: RunResult<unknown>[] = [];\n const serializedWorkerResults: Array<{\n output: unknown;\n totalTokens: number;\n }> = resumeFrom?.workerResults ? [...resumeFrom.workerResults] : [];\n const maxRounds = pattern.maxRounds ?? 5;\n if (maxRounds < 1 || !Number.isFinite(maxRounds)) {\n throw new Error(\n \"[Directive MultiAgent] supervisor maxRounds must be >= 1\",\n );\n }\n let patternError: Error | undefined;\n\n // Restore worker results from checkpoint\n if (resumeFrom) {\n for (const wr of resumeFrom.workerResults) {\n workerResults.push({\n output: wr.output,\n totalTokens: wr.totalTokens,\n messages: [],\n toolCalls: [],\n });\n }\n }\n\n const startRound = resumeFrom?.round ?? 0;\n\n try {\n let supervisorResult: RunResult<unknown>;\n if (resumeFrom) {\n supervisorResult = {\n output: resumeFrom.supervisorOutput,\n totalTokens: 0,\n messages: [],\n toolCalls: [],\n };\n } else {\n supervisorResult = await runSingleAgent<unknown>(\n pattern.supervisor,\n input,\n );\n }\n\n let currentInput = resumeFrom?.currentInput ?? input;\n\n for (let round = startRound; round < maxRounds; round++) {\n // Validate supervisor output shape\n const raw = supervisorResult.output;\n let action: {\n action: string;\n worker?: string;\n workerInput?: string;\n output?: unknown;\n };\n\n if (typeof raw === \"string\") {\n try {\n // Strip markdown code fences LLMs often wrap JSON in\n const cleaned = raw.replace(/```(?:json|JSON)?\\s*\\n?/g, \"\").trim();\n action = JSON.parse(cleaned);\n } catch {\n // LLMs sometimes wrap JSON in conversational text or XML tool-call markup\n try {\n // Strip markdown fences + XML tags (models sometimes emit <function_calls>/<invoke>/<parameter> wrappers)\n const stripped = raw\n .replace(/```(?:json|JSON)?\\s*\\n?/g, \"\")\n .replace(/<[^>]+>/g, \" \");\n const extracted = extractJsonFromOutput(stripped);\n if (\n extracted &&\n typeof extracted === \"object\" &&\n \"action\" in (extracted as Record<string, unknown>)\n ) {\n action = extracted as typeof action;\n } else {\n throw new Error(\"extracted value missing 'action' property\");\n }\n } catch {\n throw new Error(\n `[Directive MultiAgent] Supervisor \"${pattern.supervisor}\" returned unparseable output (round ${round + 1}). ` +\n `Expected JSON with { action, worker?, workerInput? } but got: ${raw.slice(0, 200)}`,\n );\n }\n }\n } else if (raw && typeof raw === \"object\" && \"action\" in raw) {\n action = raw as typeof action;\n } else {\n throw new Error(\n `[Directive MultiAgent] Supervisor \"${pattern.supervisor}\" returned invalid output (round ${round + 1}). ` +\n `Expected { action: \"delegate\"|\"complete\", worker?, workerInput? }`,\n );\n }\n\n if (action.action === \"complete\" || !action.worker) {\n break;\n }\n\n if (!pattern.workers.includes(action.worker)) {\n const available = pattern.workers.join(\", \");\n\n throw new Error(\n `[Directive MultiAgent] Supervisor delegated to unknown worker \"${action.worker}\". Available workers: ${available}`,\n );\n }\n\n const workerResult = await runSingleAgent(\n action.worker,\n action.workerInput ?? \"\",\n { patternId },\n );\n workerResults.push(workerResult);\n serializedWorkerResults.push({\n output: workerResult.output,\n totalTokens: workerResult.totalTokens,\n });\n\n currentInput = `Worker ${action.worker} completed with result: ${safeStringify(workerResult.output)}`;\n supervisorResult = await runSingleAgent(\n pattern.supervisor,\n currentInput,\n { patternId },\n );\n\n // Save checkpoint after each round\n if (\n ckptConfig &&\n ckptStore &&\n round > startRound &&\n (round - startRound) % ckptEveryN === 0\n ) {\n await savePatternCheckpoint(\n {\n type: \"supervisor\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${ckptPrefix}:round-${round + 1}`,\n patternId: pId,\n stepsTotal: pattern.maxRounds ?? 10,\n round: round + 1,\n supervisorOutput: supervisorResult.output,\n workerResults: [...serializedWorkerResults],\n currentInput,\n },\n ckptStore,\n ckptConfig,\n );\n }\n }\n\n return pattern.extract\n ? pattern.extract(supervisorResult.output, workerResults)\n : (supervisorResult.output as T);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"supervisor\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- DAG Pattern Runner ----\n async function runDagPattern<T>(\n pattern: DagPattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: DagCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_dag\";\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"dag\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const dagCkptConfig = pattern.checkpoint;\n const dagCkptStore = dagCkptConfig?.store ?? checkpointStore;\n const dagCkptEveryN = dagCkptConfig?.everyN ?? 5;\n const dagCkptPrefix = dagCkptConfig?.labelPrefix ?? \"dag\";\n let dagCompletedCount = resumeFrom?.completedCount ?? 0;\n let dagLastCheckpointCount = 0;\n // Serialize concurrent checkpoint saves to prevent race conditions\n let dagCheckpointChain: Promise<unknown> = Promise.resolve();\n const dagTotalNodes = Object.keys(pattern.nodes).length;\n\n const context: DagExecutionContext = {\n input: resumeFrom?.input ?? input,\n outputs: Object.create(null),\n statuses: Object.create(null),\n errors: Object.create(null),\n results: Object.create(null),\n };\n\n // Initialize all nodes as pending\n for (const nodeId of Object.keys(pattern.nodes)) {\n context.statuses[nodeId] = \"pending\";\n }\n\n // Restore from checkpoint\n if (resumeFrom) {\n for (const [nodeId, status] of Object.entries(resumeFrom.statuses)) {\n context.statuses[nodeId] = status;\n }\n for (const [nodeId, output] of Object.entries(resumeFrom.outputs)) {\n context.outputs[nodeId] = output;\n }\n for (const [nodeId, error] of Object.entries(resumeFrom.errors)) {\n context.errors[nodeId] = error;\n }\n for (const [nodeId, nr] of Object.entries(resumeFrom.nodeResults)) {\n context.results[nodeId] = {\n output: nr.output,\n totalTokens: nr.totalTokens,\n messages: [],\n toolCalls: [],\n };\n }\n }\n\n const onNodeError = pattern.onNodeError ?? \"fail\";\n const maxConcurrent = pattern.maxConcurrent ?? Number.POSITIVE_INFINITY;\n const controller = new AbortController();\n let graphTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let patternError: Error | undefined;\n\n if (pattern.timeout) {\n graphTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n }\n\n try {\n // Mark root nodes as ready (skip if restoring from checkpoint)\n if (!resumeFrom) {\n for (const [nodeId, node] of Object.entries(pattern.nodes)) {\n if (!node.deps || node.deps.length === 0) {\n context.statuses[nodeId] = \"ready\";\n }\n }\n }\n\n const inflight = new Set<Promise<void>>();\n let running = 0;\n\n function evaluatePendingNodes(): void {\n for (const [nodeId, node] of Object.entries(pattern.nodes)) {\n if (context.statuses[nodeId] !== \"pending\") {\n continue;\n }\n\n // Check if all deps are terminal (completed, skipped, or error for non-fail modes)\n const terminalStatuses =\n onNodeError === \"fail\"\n ? new Set([\"completed\", \"skipped\"])\n : new Set([\"completed\", \"skipped\", \"error\"]);\n const depsResolved = (node.deps ?? []).every((depId) => {\n return terminalStatuses.has(context.statuses[depId]!);\n });\n\n if (!depsResolved) {\n continue;\n }\n\n // Check if any dep errored or was skipped (for skip-downstream propagation)\n if (onNodeError === \"skip-downstream\") {\n const anyDepFailed = (node.deps ?? []).some(\n (depId) =>\n context.statuses[depId] === \"error\" ||\n context.statuses[depId] === \"skipped\",\n );\n if (anyDepFailed) {\n context.statuses[nodeId] = \"skipped\";\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"skipped\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeSkipped\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n reason: \"upstream dependency errored\",\n timestamp: Date.now(),\n });\n\n continue;\n }\n }\n\n // Evaluate when condition\n if (node.when) {\n try {\n if (!node.when(context)) {\n context.statuses[nodeId] = \"skipped\";\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"skipped\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeSkipped\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n reason: \"when() returned false\",\n timestamp: Date.now(),\n });\n\n continue;\n }\n } catch {\n context.statuses[nodeId] = \"skipped\";\n\n continue;\n }\n }\n\n context.statuses[nodeId] = \"ready\";\n }\n }\n\n async function launchNode(nodeId: string, node: DagNode): Promise<void> {\n const nodeStartTime = Date.now();\n context.statuses[nodeId] = \"running\";\n\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: nodeStartTime,\n snapshotId: null,\n nodeId,\n status: \"running\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeStart\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n timestamp: nodeStartTime,\n });\n\n // Build input\n let nodeInput: string;\n if (node.transform) {\n nodeInput = node.transform(context);\n } else if (node.deps && node.deps.length > 0) {\n const upstreamOutputs: Record<string, unknown> = Object.create(null);\n for (const depId of node.deps) {\n if (context.outputs[depId] !== undefined) {\n upstreamOutputs[depId] = context.outputs[depId];\n }\n }\n nodeInput = JSON.stringify(upstreamOutputs);\n } else {\n nodeInput = input;\n }\n\n // Per-node timeout\n const nodeController = new AbortController();\n let nodeTimeoutId: ReturnType<typeof setTimeout> | undefined;\n if (node.timeout) {\n nodeTimeoutId = setTimeout(\n () => nodeController.abort(),\n node.timeout,\n );\n }\n\n // Forward graph-level abort\n const abortHandler = () => nodeController.abort();\n controller.signal.addEventListener(\"abort\", abortHandler, {\n once: true,\n });\n\n try {\n const result = await runSingleAgent(node.handler, nodeInput, {\n signal: nodeController.signal,\n patternId: pId,\n });\n\n context.outputs[nodeId] = result.output;\n context.results[nodeId] = result;\n context.statuses[nodeId] = \"completed\";\n\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"completed\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeComplete\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n durationMs: Date.now() - nodeStartTime,\n timestamp: Date.now(),\n });\n\n // Save checkpoint after node completion (serialized to prevent concurrent race)\n dagCompletedCount++;\n if (\n dagCkptConfig &&\n dagCkptStore &&\n dagCompletedCount > dagLastCheckpointCount &&\n dagCompletedCount - dagLastCheckpointCount >= dagCkptEveryN\n ) {\n dagLastCheckpointCount = dagCompletedCount;\n const nodeResults: Record<\n string,\n { output: unknown; totalTokens: number }\n > = Object.create(null);\n for (const [nid, r] of Object.entries(context.results)) {\n nodeResults[nid] = {\n output: r.output,\n totalTokens: r.totalTokens,\n };\n }\n const ckptState = {\n type: \"dag\" as const,\n version: 1 as const,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${dagCkptPrefix}:node-${dagCompletedCount}`,\n patternId: pId,\n stepsTotal: dagTotalNodes,\n statuses: { ...context.statuses },\n outputs: { ...context.outputs },\n errors: { ...context.errors },\n completedCount: dagCompletedCount,\n nodeResults,\n input: context.input,\n };\n dagCheckpointChain = dagCheckpointChain.then(() =>\n savePatternCheckpoint(ckptState, dagCkptStore!, dagCkptConfig),\n );\n await dagCheckpointChain;\n }\n } catch (error) {\n context.statuses[nodeId] = \"error\";\n context.errors[nodeId] =\n error instanceof Error ? error.message : String(error);\n\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"error\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeError\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n error: error instanceof Error ? error : new Error(String(error)),\n durationMs: Date.now() - nodeStartTime,\n timestamp: Date.now(),\n });\n\n if (onNodeError === \"fail\") {\n controller.abort();\n throw error;\n }\n // \"continue\" and \"skip-downstream\" just keep going\n } finally {\n if (nodeTimeoutId) {\n clearTimeout(nodeTimeoutId);\n }\n controller.signal.removeEventListener(\"abort\", abortHandler);\n running--;\n }\n }\n\n // Main loop\n while (true) {\n if (controller.signal.aborted) {\n break;\n }\n\n evaluatePendingNodes();\n\n // Collect ready nodes sorted by priority (descending)\n const readyNodes = Object.entries(pattern.nodes)\n .filter(([nodeId]) => context.statuses[nodeId] === \"ready\")\n .sort(([, a], [, b]) => (b.priority ?? 0) - (a.priority ?? 0));\n\n // Launch ready nodes up to maxConcurrent\n for (const [nodeId, node] of readyNodes) {\n if (running >= maxConcurrent) {\n break;\n }\n running++;\n const promise = launchNode(nodeId, node).finally(() => {\n inflight.delete(promise);\n });\n inflight.add(promise);\n }\n\n // Check if we're done\n const hasPendingOrRunning = Object.values(context.statuses).some(\n (s) => s === \"pending\" || s === \"running\" || s === \"ready\",\n );\n if (!hasPendingOrRunning) {\n break;\n }\n\n // Wait for at least one inflight to complete\n if (inflight.size > 0) {\n await Promise.race(inflight);\n } else {\n // No inflight and still pending — must be stuck (unreachable deps)\n break;\n }\n }\n\n // Wait for remaining inflight\n if (inflight.size > 0) {\n await Promise.allSettled(inflight);\n }\n\n return await pattern.merge(context);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (graphTimeoutId) {\n clearTimeout(graphTimeoutId);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"dag\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Reflect Pattern Runner ----\n async function runReflectPattern<T>(\n pattern: ReflectPattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: ReflectCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_reflect\";\n const maxIterations = pattern.maxIterations ?? 2;\n\n if (maxIterations < 1) {\n throw new Error(\n \"[Directive MultiAgent] Reflect pattern maxIterations must be >= 1\",\n );\n }\n if (debug && maxIterations > 3) {\n console.warn(\n \"[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.\",\n );\n }\n\n // Merge timeout into signal if provided\n let effectiveSignal = pattern.signal;\n let reflectTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let reflectExternalOnAbort: (() => void) | undefined;\n if (pattern.timeout && !effectiveSignal) {\n const controller = new AbortController();\n reflectTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n effectiveSignal = controller.signal;\n } else if (pattern.timeout && effectiveSignal) {\n // Both timeout and signal: combine them\n const controller = new AbortController();\n reflectTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n reflectExternalOnAbort = () => controller.abort();\n effectiveSignal.addEventListener(\"abort\", reflectExternalOnAbort, {\n once: true,\n });\n effectiveSignal = controller.signal;\n }\n\n const parseEvaluation =\n pattern.parseEvaluation ??\n ((output: unknown): ReflectionEvaluation => {\n if (typeof output === \"string\") {\n try {\n return JSON.parse(output);\n } catch {\n return {\n passed: false,\n feedback: `Evaluator returned unparseable output: ${output.slice(0, 200)}`,\n };\n }\n }\n if (output && typeof output === \"object\" && \"passed\" in output) {\n return output as ReflectionEvaluation;\n }\n\n return { passed: false, feedback: \"Evaluator returned invalid format\" };\n });\n const buildRetryInput =\n pattern.buildRetryInput ??\n ((inp: string, feedback: string, _iteration: number) =>\n `${inp}\\n\\nFeedback on your previous response:\\n${feedback}\\n\\nPlease improve your response.`);\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"reflect\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const reflectCkptConfig = pattern.checkpoint;\n const reflectCkptStore = reflectCkptConfig?.store ?? checkpointStore;\n const reflectCkptEveryN = reflectCkptConfig?.everyN ?? 5;\n const reflectCkptPrefix = reflectCkptConfig?.labelPrefix ?? \"reflect\";\n\n let patternError: Error | undefined;\n let lastProducerResult: RunResult<unknown> | undefined;\n const history: ReflectIterationRecord[] = resumeFrom?.history\n ? [...resumeFrom.history]\n : [];\n // Track per-iteration producer outputs for accept-best\n const producerOutputs: Array<{ output: unknown; score?: number }> =\n resumeFrom?.producerOutputs ? [...resumeFrom.producerOutputs] : [];\n const startIteration = resumeFrom?.iteration ?? 0;\n\n // Restore last producer result from checkpoint\n if (resumeFrom?.lastProducerOutput != null) {\n lastProducerResult = {\n output: resumeFrom.lastProducerOutput,\n totalTokens: 0,\n messages: [],\n toolCalls: [],\n };\n }\n\n try {\n let effectiveInput = resumeFrom?.effectiveInput ?? input;\n\n for (\n let iteration = startIteration;\n iteration < maxIterations;\n iteration++\n ) {\n // Check abort signal at top of each iteration\n if (effectiveSignal?.aborted) {\n if (lastProducerResult) {\n lastReflectionHistory = history;\n\n return pattern.extract\n ? pattern.extract(lastProducerResult.output)\n : (lastProducerResult.output as T);\n }\n\n throw new DOMException(\"Reflect pattern aborted\", \"AbortError\");\n }\n\n const iterStart = Date.now();\n\n // Run producer (pass signal through)\n const producerResult = await runSingleAgent(\n pattern.handler,\n effectiveInput,\n { signal: effectiveSignal, patternId },\n );\n lastProducerResult = producerResult;\n const producerOutput =\n typeof producerResult.output === \"string\"\n ? producerResult.output\n : safeStringify(producerResult.output);\n\n // Check abort after producer, before evaluator\n if (effectiveSignal?.aborted) {\n lastReflectionHistory = history;\n\n return pattern.extract\n ? pattern.extract(producerResult.output)\n : (producerResult.output as T);\n }\n\n // Run evaluator (pass signal through)\n const evaluatorResult = await runSingleAgent(\n pattern.evaluator,\n producerOutput,\n { signal: effectiveSignal, patternId },\n );\n let evaluation: ReflectionEvaluation;\n try {\n evaluation = parseEvaluation(evaluatorResult.output);\n } catch (parseError) {\n evaluation = {\n passed: false,\n feedback: `Evaluation parse error: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n };\n }\n\n // Apply threshold-based pass override\n if (\n !evaluation.passed &&\n pattern.threshold != null &&\n evaluation.score != null\n ) {\n const thresholdValue =\n typeof pattern.threshold === \"function\"\n ? pattern.threshold(iteration)\n : pattern.threshold;\n if (evaluation.score >= thresholdValue) {\n evaluation = { ...evaluation, passed: true };\n }\n }\n\n const iterDurationMs = Date.now() - iterStart;\n\n // Store producer output for accept-best\n producerOutputs.push({\n output: producerResult.output,\n score: evaluation.score,\n });\n\n // Build iteration record\n const record: ReflectIterationRecord = {\n iteration,\n passed: evaluation.passed,\n score: evaluation.score,\n feedback: evaluation.feedback,\n durationMs: iterDurationMs,\n producerTokens: producerResult.totalTokens ?? 0,\n evaluatorTokens: evaluatorResult.totalTokens ?? 0,\n };\n history.push(record);\n\n // Fire onIteration callback\n if (pattern.onIteration) {\n try {\n pattern.onIteration(record);\n } catch (cbError) {\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] onIteration callback threw:\",\n cbError,\n );\n }\n }\n }\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"reflection_iteration\",\n timestamp: Date.now(),\n snapshotId: null,\n iteration,\n passed: evaluation.passed,\n score: evaluation.score,\n durationMs: iterDurationMs,\n producerTokens: producerResult.totalTokens,\n evaluatorTokens: evaluatorResult.totalTokens,\n });\n }\n\n if (evaluation.passed) {\n lastReflectionHistory = history;\n\n return pattern.extract\n ? pattern.extract(producerResult.output)\n : (producerResult.output as T);\n }\n\n // Build retry input for next iteration\n if (iteration < maxIterations - 1 && evaluation.feedback) {\n try {\n effectiveInput = buildRetryInput(\n input,\n evaluation.feedback,\n iteration,\n );\n } catch (retryError) {\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] buildRetryInput threw, using default format:\",\n retryError,\n );\n }\n effectiveInput = `${input}\\n\\nFeedback on your previous response:\\n${evaluation.feedback}\\n\\nPlease improve your response.`;\n }\n }\n\n // Save checkpoint after each iteration\n if (\n reflectCkptConfig &&\n reflectCkptStore &&\n iteration >= startIteration &&\n (iteration - startIteration + 1) % reflectCkptEveryN === 0\n ) {\n await savePatternCheckpoint(\n {\n type: \"reflect\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${reflectCkptPrefix}:iter-${iteration + 1}`,\n patternId: pId,\n stepsTotal: maxIterations,\n iteration: iteration + 1,\n effectiveInput,\n history: [...history],\n producerOutputs: [...producerOutputs],\n lastProducerOutput: producerResult.output,\n },\n reflectCkptStore,\n reflectCkptConfig,\n );\n }\n }\n\n lastReflectionHistory = history;\n\n // Exhausted\n if (pattern.onExhausted === \"throw\") {\n throw new ReflectionExhaustedError({\n iterations: maxIterations,\n history: history.map((h) => ({\n passed: h.passed,\n feedback: h.feedback,\n score: h.score,\n })),\n lastResult: lastProducerResult!,\n totalTokens: lastProducerResult!.totalTokens ?? 0,\n });\n }\n\n // \"accept-best\" — pick iteration with highest score\n if (pattern.onExhausted === \"accept-best\" && producerOutputs.length > 0) {\n const hasAnyScore = producerOutputs.some((p) => p.score != null);\n if (!hasAnyScore && debug) {\n console.warn(\n \"[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.\",\n );\n }\n let bestIdx = producerOutputs.length - 1;\n let bestScore = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < producerOutputs.length; i++) {\n const s = producerOutputs[i]!.score;\n if (s != null && s > bestScore) {\n bestScore = s;\n bestIdx = i;\n }\n }\n\n const bestOutput = producerOutputs[bestIdx]!.output;\n\n return pattern.extract\n ? pattern.extract(bestOutput)\n : (bestOutput as T);\n }\n\n // \"accept-last\" (default)\n return pattern.extract\n ? pattern.extract(lastProducerResult!.output)\n : (lastProducerResult!.output as T);\n } catch (error) {\n lastReflectionHistory = history;\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (reflectTimeoutId) {\n clearTimeout(reflectTimeoutId);\n }\n if (reflectExternalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", reflectExternalOnAbort);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"reflect\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Race Pattern Runner ----\n async function runRacePattern<T>(\n pattern: RacePattern<T>,\n input: string,\n patternId?: string,\n ): Promise<RaceResult<T>> {\n if (pattern.handlers.length === 0) {\n throw new Error(\n \"[Directive MultiAgent] Race pattern requires at least one agent\",\n );\n }\n\n const minSuccess = pattern.minSuccess ?? 1;\n\n if (!Number.isInteger(minSuccess) || minSuccess < 1) {\n throw new Error(\n \"[Directive MultiAgent] Race pattern minSuccess must be a positive integer\",\n );\n }\n if (minSuccess > pattern.handlers.length) {\n throw new Error(\n `[Directive MultiAgent] Race pattern minSuccess (${minSuccess}) exceeds agent count (${pattern.handlers.length})`,\n );\n }\n\n // Validate handler IDs (agents or tasks)\n for (const agentId of pattern.handlers) {\n if (!agents[agentId] && !tasks[agentId]) {\n throw new Error(\n `[Directive MultiAgent] Race: unknown handler \"${agentId}\"`,\n );\n }\n }\n\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_race\";\n const controller = new AbortController();\n let raceTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n // Wire external signal into internal controller\n let raceExternalOnAbort: (() => void) | undefined;\n if (pattern.signal) {\n if (pattern.signal.aborted) {\n controller.abort();\n } else {\n raceExternalOnAbort = () => controller.abort();\n pattern.signal.addEventListener(\"abort\", raceExternalOnAbort, {\n once: true,\n });\n }\n }\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"race\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n if (timeline) {\n timeline.record({\n type: \"race_start\",\n timestamp: patternStartTime,\n snapshotId: null,\n patternId: pId,\n agents: pattern.handlers,\n });\n }\n\n if (pattern.timeout) {\n raceTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n }\n\n let patternError: Error | undefined;\n const agentErrors: Record<string, string> = Object.create(null);\n const startedAgents = [...pattern.handlers];\n\n try {\n // Start all agents, collecting promises\n type RaceEntry = {\n agentId: string;\n promise: Promise<{ agentId: string; result: RunResult<unknown> }>;\n };\n const entries: RaceEntry[] = pattern.handlers.map((agentId) => ({\n agentId,\n // Output guardrails are already checked inside runSingleAgent\n promise: runSingleAgent(agentId, input, {\n signal: controller.signal,\n patternId,\n }).then((result) => ({ agentId, result })),\n }));\n\n // Custom race: track settled count, await all promises for cleanup\n const allPromises = entries.map((e) => e.promise.catch(() => undefined));\n\n const collectedResults: Array<{\n agentId: string;\n result: RunResult<unknown>;\n }> = [];\n\n const result = await new Promise<\n Array<{ agentId: string; result: RunResult<unknown> }>\n >((resolve, reject) => {\n let settledCount = 0;\n let resolved = false;\n\n for (const entry of entries) {\n entry.promise\n .then((winner) => {\n settledCount++;\n if (resolved) {\n return;\n }\n collectedResults.push(winner);\n if (collectedResults.length >= minSuccess) {\n resolved = true;\n controller.abort();\n resolve([...collectedResults]);\n }\n })\n .catch((error) => {\n agentErrors[entry.agentId] =\n error instanceof Error ? error.message : String(error);\n settledCount++;\n\n if (resolved) {\n return;\n }\n\n const failedCount = Object.keys(agentErrors).length;\n const maxPossibleSuccesses =\n collectedResults.length + (entries.length - settledCount);\n\n // All agents failed\n if (\n settledCount === entries.length &&\n failedCount === entries.length\n ) {\n resolved = true;\n reject(\n new Error(\n `[Directive MultiAgent] Race: all ${entries.length} agents failed.\\n` +\n Object.entries(agentErrors)\n .map(([id, msg]) => ` - ${id}: ${msg}`)\n .join(\"\\n\"),\n ),\n );\n } else if (maxPossibleSuccesses < minSuccess) {\n // Impossible to reach minSuccess — some succeeded but not enough can\n resolved = true;\n reject(\n new Error(\n `[Directive MultiAgent] Race: cannot reach minSuccess (${minSuccess}). ` +\n `${failedCount} agent(s) failed.\\n` +\n Object.entries(agentErrors)\n .map(([id, msg]) => ` - ${id}: ${msg}`)\n .join(\"\\n\"),\n ),\n );\n }\n });\n }\n });\n\n // Wait for all losing agents to settle so their side effects\n // (token counting, state mutations) complete before we return\n await Promise.all(allPromises).catch(() => {});\n\n // First result is the \"winner\" (fastest) — guaranteed to exist since minSuccess >= 1\n const first = result[0]!;\n const winnerId = first.agentId;\n const successIds = new Set(result.map((r) => r.agentId));\n const cancelledIds = startedAgents.filter(\n (id) => !successIds.has(id) && !(id in agentErrors),\n );\n\n if (timeline) {\n timeline.record({\n type: \"race_winner\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n winnerId,\n durationMs: Date.now() - patternStartTime,\n });\n if (cancelledIds.length > 0) {\n timeline.record({\n type: \"race_cancelled\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n cancelledIds,\n reason: \"winner_found\",\n });\n }\n }\n\n const extracted = pattern.extract\n ? pattern.extract(first.result)\n : (first.result.output as T);\n\n // Build allResults when minSuccess > 1\n const allResults =\n minSuccess > 1\n ? result.map((r) => ({\n agentId: r.agentId,\n result: pattern.extract\n ? pattern.extract(r.result)\n : (r.result.output as T),\n }))\n : undefined;\n\n return { winnerId, result: extracted, allResults };\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n\n // Record cancellation due to all-failed or timeout\n if (timeline) {\n timeline.record({\n type: \"race_cancelled\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n cancelledIds: startedAgents,\n reason: controller.signal.aborted ? \"timeout\" : \"all_failed\",\n });\n }\n\n throw error;\n } finally {\n if (raceTimeoutId) {\n clearTimeout(raceTimeoutId);\n }\n if (raceExternalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", raceExternalOnAbort);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"race\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Debate Pattern Runner ----\n async function runDebateInternal<T>(\n pattern: DebatePattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: DebateCheckpointState,\n ): Promise<DebateResult<T>> {\n const {\n handlers: debateAgents,\n evaluator,\n maxRounds = 2,\n extract,\n parseJudgement,\n } = pattern;\n\n if (debateAgents.length < 2) {\n throw new Error(\n \"[Directive MultiAgent] debate requires at least 2 handlers\",\n );\n }\n if (maxRounds < 1 || !Number.isFinite(maxRounds)) {\n throw new Error(\"[Directive MultiAgent] debate maxRounds must be >= 1\");\n }\n\n // Signal/timeout composition\n let effectiveSignal = pattern.signal;\n let debateTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let externalOnAbort: (() => void) | undefined;\n if (pattern.timeout && !effectiveSignal) {\n const ctrl = new AbortController();\n debateTimeoutId = setTimeout(() => ctrl.abort(), pattern.timeout);\n effectiveSignal = ctrl.signal;\n } else if (pattern.timeout && effectiveSignal) {\n const ctrl = new AbortController();\n debateTimeoutId = setTimeout(() => ctrl.abort(), pattern.timeout);\n externalOnAbort = () => ctrl.abort();\n effectiveSignal.addEventListener(\"abort\", externalOnAbort, {\n once: true,\n });\n effectiveSignal = ctrl.signal;\n }\n\n const defaultParseJudgement = (\n output: unknown,\n ): { winnerId: string; feedback?: string; score?: number } => {\n if (typeof output === \"string\") {\n try {\n const parsed = JSON.parse(output);\n if (\n parsed &&\n typeof parsed === \"object\" &&\n typeof parsed.winnerId === \"string\"\n ) {\n return parsed;\n }\n\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent\",\n );\n }\n\n return { winnerId: debateAgents[0]! };\n } catch {\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent\",\n );\n }\n\n return { winnerId: debateAgents[0]! };\n }\n }\n if (\n output &&\n typeof output === \"object\" &&\n \"winnerId\" in output &&\n typeof (output as Record<string, unknown>).winnerId === \"string\"\n ) {\n return output as {\n winnerId: string;\n feedback?: string;\n score?: number;\n };\n }\n\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent\",\n );\n }\n\n return { winnerId: debateAgents[0]! };\n };\n\n const parseJudge = parseJudgement ?? defaultParseJudgement;\n const rounds: DebateResult<T>[\"rounds\"] = resumeFrom?.rounds\n ? [...resumeFrom.rounds]\n : [];\n let currentInput = resumeFrom?.currentInput ?? input;\n let lastWinnerId = resumeFrom?.lastWinnerId ?? debateAgents[0]!;\n let lastWinnerOutput: unknown = resumeFrom?.lastWinnerOutput ?? undefined;\n const startRound = resumeFrom?.round ?? 0;\n\n // Checkpoint config\n const debateCkptConfig = pattern.checkpoint;\n const debateCkptStore = debateCkptConfig?.store ?? checkpointStore;\n const debateCkptEveryN = debateCkptConfig?.everyN ?? 5;\n const debateCkptPrefix = debateCkptConfig?.labelPrefix ?? \"debate\";\n\n const pId = patternId ?? \"__inline_debate\";\n const patternStartTime = Date.now();\n let debateTotalTokens = resumeFrom?.tokensConsumed ?? 0;\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"debate\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n let patternError: Error | undefined;\n try {\n for (let round = startRound; round < maxRounds; round++) {\n if (effectiveSignal?.aborted) {\n break;\n }\n\n const proposalPromises = debateAgents.map(async (agentId) => {\n const result = await runSingleAgent(agentId, currentInput, {\n signal: effectiveSignal,\n patternId: pId,\n });\n debateTotalTokens += result.totalTokens;\n\n return { agentId, output: result.output };\n });\n const proposals = await Promise.all(proposalPromises);\n\n if (effectiveSignal?.aborted) {\n break;\n }\n\n const evalInput = JSON.stringify({\n round: round + 1,\n totalRounds: maxRounds,\n proposals: proposals.map((p) => ({\n agentId: p.agentId,\n proposal: p.output,\n })),\n });\n\n const evalResult = await runSingleAgent(evaluator, evalInput, {\n signal: effectiveSignal,\n patternId: pId,\n });\n debateTotalTokens += evalResult.totalTokens;\n const judgement = parseJudge(evalResult.output);\n\n // Validate winnerId\n if (!debateAgents.includes(judgement.winnerId)) {\n judgement.winnerId = debateAgents[0]!;\n }\n\n rounds.push({ proposals, judgement });\n\n // Record debate round timeline event\n if (timeline) {\n timeline.record({\n type: \"debate_round\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n round: round + 1,\n totalRounds: maxRounds,\n winnerId: judgement.winnerId,\n score: judgement.score,\n agentCount: debateAgents.length,\n });\n }\n\n lastWinnerId = judgement.winnerId;\n const winnerProposal = proposals.find(\n (p) => p.agentId === judgement.winnerId,\n );\n lastWinnerOutput = winnerProposal?.output ?? proposals[0]!.output;\n\n // Save checkpoint at configured intervals\n if (\n debateCkptConfig &&\n debateCkptStore &&\n round > startRound &&\n (round - startRound) % debateCkptEveryN === 0\n ) {\n const ckptState: DebateCheckpointState = {\n type: \"debate\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${debateCkptPrefix}:round-${round + 1}`,\n patternId: pId,\n stepsTotal: maxRounds,\n round: round + 1,\n currentInput,\n rounds: [...rounds],\n lastWinnerId,\n lastWinnerOutput,\n tokensConsumed: debateTotalTokens,\n };\n await savePatternCheckpoint(\n ckptState,\n debateCkptStore,\n debateCkptConfig,\n );\n }\n\n if (round < maxRounds - 1 && judgement.feedback) {\n currentInput = `Previous round feedback: ${judgement.feedback}\\n\\nOriginal task: ${input}`;\n }\n }\n\n if (rounds.length === 0) {\n throw new Error(\n \"[Directive MultiAgent] Debate aborted before any round completed\",\n );\n }\n\n const result = extract\n ? extract(lastWinnerOutput)\n : (lastWinnerOutput as T);\n\n return { winnerId: lastWinnerId, result, rounds };\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (debateTimeoutId) {\n clearTimeout(debateTimeoutId);\n }\n if (externalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"debate\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Goal Pattern Implementation ----\n\n /** Keys that must never appear in goal facts (prototype pollution guard) */\n const GOAL_BLOCKED_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n ]);\n\n function goalSafeMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n ): void {\n for (const key of Object.keys(source)) {\n if (!GOAL_BLOCKED_KEYS.has(key)) {\n target[key] = source[key];\n }\n }\n }\n\n /**\n * Detect cycles in goal node dependency graph.\n * Builds an implicit DAG from produces/requires and applies Kahn's algorithm.\n */\n function validateGoalAcyclic(\n pId: string,\n nodes: Record<string, GoalNode>,\n ): void {\n // Build producer map: factKey → nodeId(s) that produce it\n const producerMap: Record<string, string[]> = Object.create(null);\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const key of node.produces) {\n if (!producerMap[key]) {\n producerMap[key] = [];\n }\n producerMap[key]!.push(nodeId);\n }\n }\n\n // Build adjacency from requires → produces edges\n const nodeIds = Object.keys(nodes);\n const inDegree: Record<string, number> = Object.create(null);\n const adjacency: Record<string, string[]> = Object.create(null);\n for (const id of nodeIds) {\n inDegree[id] = 0;\n adjacency[id] = [];\n }\n\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const reqKey of node.requires ?? []) {\n const producers = producerMap[reqKey];\n if (producers) {\n for (const producerId of producers) {\n if (producerId !== nodeId) {\n adjacency[producerId]!.push(nodeId);\n inDegree[nodeId] = (inDegree[nodeId] ?? 0) + 1;\n }\n }\n }\n }\n }\n\n // Kahn's algorithm\n const queue: string[] = [];\n for (const id of nodeIds) {\n if (inDegree[id] === 0) {\n queue.push(id);\n }\n }\n\n let visited = 0;\n while (queue.length > 0) {\n const current = queue.shift()!;\n visited++;\n for (const dependent of adjacency[current] ?? []) {\n inDegree[dependent]!--;\n if (inDegree[dependent] === 0) {\n queue.push(dependent);\n }\n }\n }\n\n if (visited !== nodeIds.length) {\n throw new Error(\n `[Directive MultiAgent] goal pattern \"${pId}\": cycle detected in produces/requires graph. Visited ${visited}/${nodeIds.length} nodes.`,\n );\n }\n }\n\n /**\n * Validate that no two nodes produce the same fact key (M1: producer conflict detection).\n * Logs a dev-mode warning rather than throwing, since some use cases intentionally overlap.\n */\n function validateProducerConflicts(\n pId: string,\n nodes: Record<string, GoalNode>,\n ): void {\n const producerMap: Record<string, string[]> = Object.create(null);\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const key of node.produces) {\n if (!producerMap[key]) {\n producerMap[key] = [];\n }\n producerMap[key]!.push(nodeId);\n }\n }\n\n for (const [key, producers] of Object.entries(producerMap)) {\n if (producers.length > 1) {\n console.warn(\n `[Directive MultiAgent] goal pattern \"${pId}\": fact key \"${key}\" is produced by multiple nodes: ${producers.join(\", \")}. Last writer wins.`,\n );\n }\n }\n }\n\n /** Safe wrapper for user-provided callbacks (C1). */\n function safeCall<A extends unknown[], R>(\n fn: ((...args: A) => R) | undefined,\n ...args: A\n ): R | undefined {\n if (!fn) {\n return undefined;\n }\n\n try {\n return fn(...args);\n } catch (err) {\n console.error(\"[Directive MultiAgent] goal: user callback threw:\", err);\n\n return undefined;\n }\n }\n\n /** Safe wrapper for async user-provided callbacks (C1). */\n async function safeCallAsync<A extends unknown[], R>(\n fn: ((...args: A) => R | Promise<R>) | undefined,\n ...args: A\n ): Promise<R | undefined> {\n if (!fn) {\n return undefined;\n }\n\n try {\n return await fn(...args);\n } catch (err) {\n console.error(\"[Directive MultiAgent] goal: user callback threw:\", err);\n\n return undefined;\n }\n }\n\n /** Compute estimatedStepsRemaining and decelerating from step history (M7). */\n function computeGoalMetrics(\n currentSatisfaction: number,\n stepMetrics: GoalStepMetrics[],\n _step: number,\n ): GoalMetrics {\n // Calculate recent progress rate (average delta over last 3 steps)\n const recentSteps = stepMetrics.slice(-3);\n const avgDelta =\n recentSteps.length > 0\n ? recentSteps.reduce((sum, s) => sum + s.satisfactionDelta, 0) /\n recentSteps.length\n : 0;\n\n let estimatedStepsRemaining: number | null = null;\n if (avgDelta > 0 && currentSatisfaction < 1.0) {\n estimatedStepsRemaining = Math.ceil(\n (1.0 - currentSatisfaction) / avgDelta,\n );\n }\n\n // Decelerating: compare last 3 deltas to prior 3 deltas\n let decelerating = false;\n if (stepMetrics.length >= 6) {\n const recent3 = stepMetrics.slice(-3);\n const prior3 = stepMetrics.slice(-6, -3);\n const recentAvg =\n recent3.reduce((s, m) => s + m.satisfactionDelta, 0) / 3;\n const priorAvg = prior3.reduce((s, m) => s + m.satisfactionDelta, 0) / 3;\n decelerating = recentAvg < priorAvg * 0.5;\n }\n\n return {\n satisfaction: currentSatisfaction,\n progressRate: avgDelta,\n estimatedStepsRemaining,\n decelerating,\n };\n }\n\n /** Clamp satisfaction to [0, 1] and guard against NaN/Infinity (M4). */\n function clampSatisfaction(value: number | undefined): number {\n if (value == null || !Number.isFinite(value)) {\n return 0;\n }\n\n return Math.max(0, Math.min(1, value));\n }\n\n async function runGoalInternal<T>(\n pattern: GoalPattern<T>,\n initialInput: string | Record<string, unknown>,\n patternId?: string,\n resumeFrom?: GoalCheckpointState,\n ): Promise<GoalResult<T>> {\n const {\n nodes: originalNodes,\n when: goalWhen,\n satisfaction: satisfactionFn,\n maxSteps = 50,\n extract,\n selectionStrategy,\n relaxation,\n onStep,\n onStall,\n } = pattern;\n\n // Shadow copy of nodes so relaxation mutations don't affect the original (M2)\n const nodes: Record<string, GoalNode> = Object.create(null);\n for (const [id, node] of Object.entries(originalNodes)) {\n nodes[id] = { ...node };\n }\n\n const nodeIds = Object.keys(nodes);\n if (nodeIds.length === 0) {\n throw new Error(\"[Directive MultiAgent] goal requires at least one node\");\n }\n\n const pId = patternId ?? \"__goal\";\n\n // Validate all node handlers (agents or tasks) are registered\n for (const [nodeId, node] of Object.entries(nodes)) {\n if (!agents[node.handler] && !tasks[node.handler]) {\n throw new Error(\n `[Directive MultiAgent] goal node \"${nodeId}\" references unregistered handler \"${node.handler}\"`,\n );\n }\n }\n\n // Cycle detection\n validateGoalAcyclic(pId, nodes);\n\n // Producer conflict warnings\n validateProducerConflicts(pId, nodes);\n\n // Warn if extractOutput is missing (dev guidance)\n for (const [nodeId, node] of Object.entries(nodes)) {\n if (!node.extractOutput) {\n console.warn(\n `[Directive MultiAgent] goal node \"${nodeId}\": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`,\n );\n }\n }\n\n // Signal/timeout composition\n let effectiveSignal = pattern.signal;\n let goalTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let externalOnAbort: (() => void) | undefined;\n const timeoutMs = pattern.timeout ?? 300_000;\n if (timeoutMs && !effectiveSignal) {\n const ctrl = new AbortController();\n goalTimeoutId = setTimeout(() => ctrl.abort(), timeoutMs);\n effectiveSignal = ctrl.signal;\n } else if (timeoutMs && effectiveSignal) {\n const ctrl = new AbortController();\n goalTimeoutId = setTimeout(() => ctrl.abort(), timeoutMs);\n externalOnAbort = () => ctrl.abort();\n effectiveSignal.addEventListener(\"abort\", externalOnAbort, {\n once: true,\n });\n effectiveSignal = ctrl.signal;\n }\n\n const patternStartTime = Date.now();\n\n if (timeline) {\n const goalHandlers = Object.values(nodes).map((n) => n.handler);\n\n timeline.record({\n type: \"pattern_start\",\n timestamp: patternStartTime,\n snapshotId: null,\n patternId: pId,\n patternType: \"goal\",\n handlers: goalHandlers,\n taskIds: goalHandlers.filter((h) => tasks[h] != null),\n });\n }\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"goal\",\n input:\n typeof initialInput === \"string\"\n ? initialInput\n : JSON.stringify(initialInput),\n timestamp: patternStartTime,\n });\n\n // Initialize facts\n const facts: Record<string, unknown> = Object.create(null);\n if (resumeFrom) {\n goalSafeMerge(facts, resumeFrom.facts);\n } else if (typeof initialInput === \"string\") {\n facts.input = initialInput;\n } else {\n goalSafeMerge(facts, initialInput);\n }\n\n // Tracking state — restore from checkpoint or start fresh\n const executionOrder: string[] = resumeFrom\n ? [...resumeFrom.executionOrder]\n : [];\n const nodeResults: Record<string, RunResult<unknown>> = Object.create(null);\n if (resumeFrom) {\n for (const [id, out] of Object.entries(resumeFrom.nodeOutputs)) {\n nodeResults[id] = {\n output: out.output,\n totalTokens: out.totalTokens,\n } as RunResult<unknown>;\n }\n }\n const stepMetrics: GoalStepMetrics[] = resumeFrom\n ? [...resumeFrom.stepMetrics]\n : [];\n const relaxations: RelaxationRecord[] = resumeFrom\n ? [...resumeFrom.relaxations]\n : [];\n const completedNodes = new Set<string>(resumeFrom?.completedNodes ?? []);\n const failedNodes = new Map<string, number>(\n resumeFrom\n ? Object.entries(resumeFrom.failedNodes).map(([k, v]) => [k, v])\n : [],\n );\n const nodeInputHashes = new Map<string, string>(\n resumeFrom ? Object.entries(resumeFrom.nodeInputHashes) : [],\n );\n const agentMetrics: Record<\n string,\n {\n runs: number;\n avgSatisfactionDelta: number;\n tokens: number;\n totalDelta: number;\n }\n > = Object.create(null);\n if (resumeFrom) {\n for (const [id, m] of Object.entries(resumeFrom.agentMetrics)) {\n agentMetrics[id] = {\n runs: m.runs,\n avgSatisfactionDelta: m.runs > 0 ? m.totalDelta / m.runs : 0,\n tokens: m.tokens,\n totalDelta: m.totalDelta,\n };\n }\n }\n let stallSteps = resumeFrom?.stallSteps ?? 0;\n let appliedRelaxationTiers = resumeFrom?.appliedRelaxationTiers ?? 0;\n let lastSatisfaction = resumeFrom?.lastSatisfaction ?? 0;\n let patternError: Error | undefined;\n let goalAchieved = false;\n const startStep = resumeFrom?.step ?? 0;\n\n // Checkpoint config\n const checkpointConfig = pattern.checkpoint;\n const checkpointEveryN = checkpointConfig?.everyN ?? 5;\n const checkpointStoreRef = checkpointConfig?.store ?? checkpointStore;\n const checkpointLabelPrefix = checkpointConfig?.labelPrefix ?? \"goal\";\n let lastCheckpointId: string | undefined;\n void lastCheckpointId; // Used later in checkpoint save\n\n const MAX_CONSECUTIVE_FAILURES = 3;\n\n try {\n for (let step = startStep; step < maxSteps; step++) {\n // Check goal condition (C1: safe-wrap user callback)\n if (safeCall(goalWhen, facts) === true) {\n goalAchieved = true;\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: true,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n };\n }\n\n // Check abort\n if (effectiveSignal?.aborted) {\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error: \"Aborted or timed out\",\n };\n }\n\n // Find ready nodes\n const readyNodes: string[] = [];\n for (const [nodeId, node] of Object.entries(nodes)) {\n // Skip permanently failed nodes\n if ((failedNodes.get(nodeId) ?? 0) >= MAX_CONSECUTIVE_FAILURES) {\n continue;\n }\n\n // Check requires satisfied\n const requires = node.requires ?? [];\n const requiresSatisfied = requires.every((key) => facts[key] != null);\n if (!requiresSatisfied) {\n continue;\n }\n\n // Check if already completed\n if (completedNodes.has(nodeId)) {\n if (!node.allowRerun) {\n continue;\n }\n\n // Check if inputs changed\n const inputHash = JSON.stringify(requires.map((key) => facts[key]));\n if (nodeInputHashes.get(nodeId) === inputHash) {\n continue;\n }\n }\n\n readyNodes.push(nodeId);\n }\n\n // Apply selection strategy\n let selectedNodes = readyNodes;\n if (selectionStrategy && readyNodes.length > 0) {\n const rawSatisfaction = satisfactionFn\n ? (safeCall(satisfactionFn, facts) ?? 0)\n : safeCall(goalWhen, facts) === true\n ? 1.0\n : 0.0;\n const currentSatisfaction = clampSatisfaction(rawSatisfaction);\n const goalProgressMetrics = computeGoalMetrics(\n currentSatisfaction,\n stepMetrics,\n step,\n );\n\n // Build per-agent metrics for the strategy\n const strategyMetrics: Record<\n string,\n { runs: number; avgSatisfactionDelta: number; tokens: number }\n > = Object.create(null);\n for (const [id, m] of Object.entries(agentMetrics)) {\n strategyMetrics[id] = {\n runs: m.runs,\n avgSatisfactionDelta: m.runs > 0 ? m.totalDelta / m.runs : 0,\n tokens: m.tokens,\n };\n }\n\n const strategyResult = selectionStrategy.select(\n readyNodes,\n strategyMetrics,\n goalProgressMetrics,\n );\n // Guard against empty selection strategy result — fall back to readyNodes\n selectedNodes =\n strategyResult && strategyResult.length > 0\n ? strategyResult\n : readyNodes;\n }\n\n // Sort by priority (higher first)\n selectedNodes.sort(\n (a, b) => (nodes[b]!.priority ?? 0) - (nodes[a]!.priority ?? 0),\n );\n\n // Fire onStep hook (C1: safe-wrap)\n safeCall(onStep, step, { ...facts }, selectedNodes);\n\n // Handle no ready nodes\n if (selectedNodes.length === 0) {\n // Check relaxation tiers\n stallSteps++;\n let relaxationApplied = false;\n\n if (relaxation) {\n for (\n let tierIdx = appliedRelaxationTiers;\n tierIdx < relaxation.length;\n tierIdx++\n ) {\n const tier = relaxation[tierIdx]!;\n const threshold = tier.afterStallSteps ?? 3;\n if (stallSteps >= threshold) {\n // Apply relaxation\n const strategy = tier.strategy;\n switch (strategy.type) {\n case \"allow_rerun\":\n for (const nid of strategy.nodes) {\n completedNodes.delete(nid);\n nodeInputHashes.delete(nid);\n }\n break;\n case \"alternative_nodes\":\n // Use shadow copy — don't mutate original pattern nodes\n for (const altNode of strategy.nodes) {\n const altId = `__relaxation_${tierIdx}_${altNode.handler}`;\n nodes[altId] = { ...altNode };\n }\n break;\n case \"inject_facts\":\n goalSafeMerge(facts, strategy.facts);\n break;\n case \"accept_partial\": {\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result:\n safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error: `Accepted partial result via relaxation tier \"${tier.label}\"`,\n };\n }\n case \"custom\": {\n const rawSat = safeCall(satisfactionFn, facts) ?? 0;\n const ctx: RelaxationContext = {\n step,\n facts: { ...facts },\n metrics: computeGoalMetrics(\n clampSatisfaction(rawSat),\n stepMetrics,\n step,\n ),\n completedNodes: new Set(completedNodes),\n failedNodes: new Map(failedNodes),\n };\n // safe-wrap custom strategy callback\n await safeCallAsync(strategy.apply, ctx);\n break;\n }\n }\n\n relaxations.push({\n step,\n tierIndex: tierIdx,\n label: tier.label,\n strategy: strategy.type,\n });\n appliedRelaxationTiers = tierIdx + 1;\n stallSteps = 0;\n relaxationApplied = true;\n break;\n }\n }\n }\n\n if (!relaxationApplied) {\n // Fire onStall hook (C1: safe-wrap, M7: computed metrics)\n const rawSat = safeCall(satisfactionFn, facts) ?? 0;\n const stallMetrics = computeGoalMetrics(\n clampSatisfaction(rawSat),\n stepMetrics,\n step,\n );\n safeCall(onStall, step, stallMetrics);\n\n // If we've exhausted all relaxation tiers and still stalled, fail\n if (!relaxation || appliedRelaxationTiers >= relaxation.length) {\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error:\n \"Goal stalled: no ready nodes and no remaining relaxation tiers\",\n };\n }\n }\n\n continue;\n }\n\n // Reset stall counter since we have ready nodes\n stallSteps = 0;\n\n // Run selected nodes in parallel\n const stepStart = Date.now();\n const rawPreSat = satisfactionFn\n ? (safeCall(satisfactionFn, facts) ?? 0)\n : safeCall(goalWhen, facts) === true\n ? 1.0\n : 0.0;\n const preSatisfaction = clampSatisfaction(rawPreSat);\n let stepTokens = 0;\n const factsProduced: string[] = [];\n\n const nodePromises = selectedNodes.map(async (nodeId) => {\n const node = nodes[nodeId]!;\n\n // Record input hash for allowRerun detection\n const requires = node.requires ?? [];\n const inputHash = JSON.stringify(requires.map((key) => facts[key]));\n nodeInputHashes.set(nodeId, inputHash);\n\n // Build input (C1: safe-wrap buildInput)\n let nodeInput: string;\n const customInput = safeCall(node.buildInput, facts);\n if (customInput != null) {\n nodeInput = customInput;\n } else {\n const relevantFacts: Record<string, unknown> = Object.create(null);\n for (const key of requires) {\n if (facts[key] != null) {\n relevantFacts[key] = facts[key];\n }\n }\n if (Object.keys(relevantFacts).length > 0) {\n nodeInput = JSON.stringify(relevantFacts);\n } else if (facts.input != null) {\n nodeInput = String(facts.input);\n } else {\n nodeInput = JSON.stringify(facts);\n }\n }\n\n try {\n const result = await runSingleAgent(node.handler, nodeInput, {\n signal: effectiveSignal ?? undefined,\n patternId: pId,\n });\n nodeResults[nodeId] = result;\n executionOrder.push(nodeId);\n completedNodes.add(nodeId);\n failedNodes.delete(nodeId);\n\n // Extract output facts (C1: safe-wrap extractOutput)\n if (node.extractOutput) {\n const outputFacts = safeCall(node.extractOutput, result);\n if (outputFacts) {\n goalSafeMerge(facts, outputFacts);\n factsProduced.push(...Object.keys(outputFacts));\n }\n } else {\n // Default: try JSON parse of output\n const rawOutput = result.output;\n if (rawOutput && typeof rawOutput === \"object\") {\n goalSafeMerge(facts, rawOutput as Record<string, unknown>);\n factsProduced.push(\n ...Object.keys(rawOutput as Record<string, unknown>),\n );\n } else if (typeof rawOutput === \"string\") {\n try {\n const parsed = JSON.parse(rawOutput);\n if (\n parsed &&\n typeof parsed === \"object\" &&\n !Array.isArray(parsed)\n ) {\n goalSafeMerge(facts, parsed);\n factsProduced.push(...Object.keys(parsed));\n } else {\n // Store under produce keys\n for (const key of node.produces) {\n facts[key] = rawOutput;\n factsProduced.push(key);\n }\n }\n } catch {\n for (const key of node.produces) {\n facts[key] = rawOutput;\n factsProduced.push(key);\n }\n }\n }\n }\n\n stepTokens += result.totalTokens;\n\n return { nodeId, success: true };\n } catch (error) {\n const failures = (failedNodes.get(nodeId) ?? 0) + 1;\n failedNodes.set(nodeId, failures);\n\n return { nodeId, success: false, error };\n }\n });\n\n await Promise.allSettled(nodePromises);\n\n // Compute step metrics (M4: clamp satisfaction)\n const rawPostSat = satisfactionFn\n ? (safeCall(satisfactionFn, facts) ?? 0)\n : safeCall(goalWhen, facts) === true\n ? 1.0\n : 0.0;\n const postSatisfaction = clampSatisfaction(rawPostSat);\n const satisfactionDelta = postSatisfaction - preSatisfaction;\n\n stepMetrics.push({\n step,\n durationMs: Date.now() - stepStart,\n nodesRun: [...selectedNodes],\n factsProduced,\n satisfaction: postSatisfaction,\n satisfactionDelta,\n tokensConsumed: stepTokens,\n });\n\n // Record timeline events for each node run in this step\n if (timeline) {\n for (const nodeId of selectedNodes) {\n const node = nodes[nodeId]!;\n timeline.record({\n type: \"goal_step\",\n timestamp: Date.now(),\n snapshotId: null,\n agentId: node.handler,\n step,\n nodeId,\n satisfaction: postSatisfaction,\n satisfactionDelta,\n });\n }\n }\n\n // Update per-agent metrics\n for (const nodeId of selectedNodes) {\n const node = nodes[nodeId]!;\n if (!agentMetrics[node.handler]) {\n agentMetrics[node.handler] = {\n runs: 0,\n avgSatisfactionDelta: 0,\n tokens: 0,\n totalDelta: 0,\n };\n }\n const m = agentMetrics[node.handler]!;\n m.runs++;\n m.totalDelta += satisfactionDelta;\n m.tokens += nodeResults[nodeId]?.totalTokens ?? 0;\n }\n\n lastSatisfaction = postSatisfaction;\n\n // Track stall (no satisfaction change)\n if (satisfactionDelta <= 0) {\n stallSteps++;\n } else {\n stallSteps = 0;\n }\n\n // Save checkpoint at configured intervals\n if (\n checkpointConfig &&\n checkpointStoreRef &&\n step > startStep &&\n (step - startStep) % checkpointEveryN === 0\n ) {\n const ckptState: GoalCheckpointState = {\n type: \"goal\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${checkpointLabelPrefix}:step-${step}`,\n patternId: pId,\n stepsTotal: maxSteps,\n step: step + 1, // Next step to run\n facts: structuredClone(facts),\n completedNodes: [...completedNodes],\n failedNodes: Object.fromEntries(failedNodes),\n nodeInputHashes: Object.fromEntries(nodeInputHashes),\n nodeOutputs: Object.fromEntries(\n Object.entries(nodeResults).map(([id, r]) => [\n id,\n { output: r.output, totalTokens: r.totalTokens },\n ]),\n ),\n executionOrder: [...executionOrder],\n stepMetrics: [...stepMetrics],\n relaxations: [...relaxations],\n appliedRelaxationTiers,\n stallSteps,\n lastSatisfaction,\n agentMetrics: Object.fromEntries(\n Object.entries(agentMetrics).map(([id, m]) => [\n id,\n { runs: m.runs, totalDelta: m.totalDelta, tokens: m.tokens },\n ]),\n ),\n };\n const savedId = await savePatternCheckpoint(\n ckptState,\n checkpointStoreRef,\n checkpointConfig,\n );\n if (savedId) {\n lastCheckpointId = savedId;\n }\n }\n }\n\n // Max steps exhausted\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: maxSteps,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error: `Max steps (${maxSteps}) exhausted without achieving goal`,\n };\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (goalTimeoutId != null) {\n clearTimeout(goalTimeoutId);\n }\n if (externalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n if (timeline) {\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n timeline.record({\n type: \"pattern_complete\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n patternType: \"goal\",\n durationMs: Date.now() - patternStartTime,\n achieved: goalAchieved,\n stepMetrics,\n relaxations,\n totalTokens,\n ...(patternError ? { error: patternError.message } : {}),\n });\n }\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"goal\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n\n // ---- Self-Healing Helpers ----\n function findEquivalentAgents(agentId: string): string[] {\n if (!selfHealing) {\n return [];\n }\n\n const equivalents: string[] = [];\n const seen = new Set<string>();\n seen.add(agentId);\n\n // Check explicit groups first\n if (selfHealing.equivalencyGroups) {\n for (const group of Object.values(selfHealing.equivalencyGroups)) {\n if (group.includes(agentId)) {\n for (const id of group) {\n if (!seen.has(id) && agents[id]) {\n equivalents.push(id);\n seen.add(id);\n }\n }\n }\n }\n }\n\n // Then capability matching\n if (selfHealing.useCapabilities !== false) {\n const sourceReg = agents[agentId];\n if (sourceReg?.capabilities && sourceReg.capabilities.length > 0) {\n for (const [id, reg] of Object.entries(agents)) {\n if (seen.has(id)) {\n continue;\n }\n const caps = reg.capabilities ?? [];\n if (sourceReg.capabilities.every((c) => caps.includes(c))) {\n equivalents.push(id);\n seen.add(id);\n }\n }\n }\n }\n\n // Filter out unhealthy agents\n if (healthMonitorInstance) {\n const threshold = selfHealing.healthThreshold ?? 30;\n\n return equivalents.filter((id) => {\n const score = healthMonitorInstance!.getHealthScore(id);\n\n return score > threshold;\n });\n }\n\n return equivalents;\n }\n\n function selectBestEquivalent(equivalents: string[]): string | null {\n if (equivalents.length === 0) {\n return null;\n }\n\n if (!selfHealing || !healthMonitorInstance) {\n return equivalents[0] ?? null;\n }\n\n if (selfHealing.selectionStrategy === \"round-robin\" && roundRobinCounters) {\n // Round-robin across equivalents\n const key = [...equivalents].sort().join(\",\");\n const counter = roundRobinCounters.get(key) ?? 0;\n const selected = equivalents[counter % equivalents.length]!;\n roundRobinCounters.set(key, counter + 1);\n\n return selected;\n }\n\n // Default: healthiest\n let best = equivalents[0]!;\n let bestScore = healthMonitorInstance.getHealthScore(best);\n for (let i = 1; i < equivalents.length; i++) {\n const score = healthMonitorInstance.getHealthScore(equivalents[i]!);\n if (score > bestScore) {\n best = equivalents[i]!;\n bestScore = score;\n }\n }\n\n return best;\n }\n\n // ---- Pattern handler extraction (for debug events) ----\n function getPatternHandlers(pattern: ExecutionPattern): string[] {\n switch (pattern.type) {\n case \"parallel\":\n return pattern.handlers;\n case \"sequential\":\n return pattern.handlers;\n case \"supervisor\":\n return [pattern.supervisor, ...pattern.workers];\n case \"dag\":\n return Object.values(pattern.nodes).map((n) => n.handler);\n case \"reflect\":\n return [pattern.handler, pattern.evaluator];\n case \"race\":\n return pattern.handlers;\n case \"debate\":\n return [...pattern.handlers, pattern.evaluator];\n case \"goal\":\n return Object.values(pattern.nodes).map((n) => n.handler);\n default:\n return [];\n }\n }\n\n // ---- Build Orchestrator Object ----\n const orchestrator: MultiAgentOrchestrator = {\n system: system as unknown as System<any>,\n\n get facts() {\n // biome-ignore lint/suspicious/noExplicitAny: System facts vary\n return system.facts as any;\n },\n\n get timeline() {\n return timeline;\n },\n\n get healthMonitor() {\n return healthMonitorInstance;\n },\n\n get derived() {\n return Object.freeze({ ...derivedValues });\n },\n\n onDerivedChange(\n callback: (id: string, value: unknown) => void,\n ): () => void {\n derivedChangeCallbacks.add(callback);\n\n return () => {\n derivedChangeCallbacks.delete(callback);\n };\n },\n\n get scratchpad() {\n return scratchpadInstance;\n },\n\n runAgent: runSingleAgent,\n runAgentStream: runAgentStreamImpl,\n\n async runPattern<T>(patternId: string, input: string): Promise<T> {\n assertNotDestroyed();\n\n const pattern = patterns[patternId];\n if (!pattern) {\n const available = Object.keys(patterns).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown pattern \"${patternId}\". Available patterns: ${available}`,\n );\n }\n\n const patternStartTime = Date.now();\n if (timeline) {\n const handlerIds = getPatternHandlers(pattern);\n\n timeline.record({\n type: \"pattern_start\",\n timestamp: patternStartTime,\n snapshotId: null,\n patternId,\n patternType: pattern.type,\n handlers: handlerIds,\n taskIds: handlerIds.filter((h) => tasks[h] != null),\n });\n }\n\n let patternError: Error | undefined;\n try {\n switch (pattern.type) {\n case \"parallel\":\n return await runParallelPattern(\n pattern as ParallelPattern<T>,\n input,\n patternId,\n );\n case \"sequential\":\n return await runSequentialPattern(\n pattern as SequentialPattern<T>,\n input,\n patternId,\n );\n case \"supervisor\":\n return await runSupervisorPattern(\n pattern as SupervisorPattern<T>,\n input,\n patternId,\n );\n case \"dag\":\n return await runDagPattern(\n pattern as DagPattern<T>,\n input,\n patternId,\n );\n case \"reflect\":\n return await runReflectPattern(\n pattern as ReflectPattern<T>,\n input,\n patternId,\n );\n case \"race\": {\n const raceResult = await runRacePattern(\n pattern as RacePattern<T>,\n input,\n patternId,\n );\n\n return raceResult.result;\n }\n case \"debate\": {\n const debatePattern = pattern as DebatePattern<T>;\n const debateResult = await runDebateInternal<T>(\n debatePattern,\n input,\n patternId,\n );\n\n return debateResult.result;\n }\n case \"goal\": {\n const goalPattern = pattern as GoalPattern<T>;\n const goalResult = await runGoalInternal<T>(\n goalPattern,\n input,\n patternId,\n );\n\n return goalResult.result;\n }\n default:\n throw new Error(\n `[Directive MultiAgent] Unknown pattern type: ${(pattern as { type: string }).type}`,\n );\n }\n } catch (error) {\n patternError =\n error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (timeline) {\n timeline.record({\n type: \"pattern_complete\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId,\n patternType: pattern.type,\n durationMs: Date.now() - patternStartTime,\n ...(patternError ? { error: patternError.message } : {}),\n });\n }\n }\n },\n\n async runParallel<T>(\n agentIds: string[],\n inputs: string | string[],\n merge: (results: RunResult<unknown>[]) => T | Promise<T>,\n options?: { minSuccess?: number; timeout?: number },\n ): Promise<T> {\n assertNotDestroyed();\n const inputArray = Array.isArray(inputs)\n ? inputs\n : agentIds.map(() => inputs);\n\n if (inputArray.length !== agentIds.length) {\n throw new Error(\n `[Directive MultiAgent] Input count (${inputArray.length}) must match agent count (${agentIds.length})`,\n );\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if (options?.timeout) {\n timeoutId = setTimeout(() => controller.abort(), options.timeout);\n }\n\n try {\n const promises = agentIds.map((agentId, i) =>\n runSingleAgent(agentId, inputArray[i]!, {\n signal: controller.signal,\n }).catch((error) => {\n if (options?.minSuccess !== undefined) {\n return null;\n }\n\n throw error;\n }),\n );\n\n const results = await Promise.all(promises);\n const successResults = results.filter(\n (r): r is RunResult<unknown> => r !== null,\n );\n\n if (\n options?.minSuccess !== undefined &&\n successResults.length < options.minSuccess\n ) {\n const failCount = results.length - successResults.length;\n\n throw new Error(\n `[Directive MultiAgent] runParallel: Only ${successResults.length}/${agentIds.length} agents succeeded ` +\n `(minimum required: ${options.minSuccess}, failed: ${failCount})`,\n );\n }\n\n return merge(successResults);\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n },\n\n async runSequential<T>(\n agentIds: string[],\n initialInput: string,\n opts?: {\n transform?: (output: unknown, agentId: string, index: number) => string;\n },\n ): Promise<RunResult<T>[]> {\n assertNotDestroyed();\n const results: RunResult<unknown>[] = [];\n let currentInput = initialInput;\n\n for (let i = 0; i < agentIds.length; i++) {\n const agentId = agentIds[i]!;\n const result = await runSingleAgent(agentId, currentInput);\n results.push(result);\n\n if (i < agentIds.length - 1) {\n if (opts?.transform) {\n currentInput = opts.transform(result.output, agentId, i);\n } else {\n currentInput =\n typeof result.output === \"string\"\n ? result.output\n : safeStringify(result.output);\n }\n }\n }\n\n return results as RunResult<T>[];\n },\n\n async handoff(\n fromAgent: string,\n toAgent: string,\n input: string,\n context?: Record<string, unknown>,\n ): Promise<RunResult<unknown>> {\n assertNotDestroyed();\n\n if (!agents[fromAgent]) {\n const available = Object.keys(agents).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Handoff source agent \"${fromAgent}\" not found. Registered: ${available}`,\n );\n }\n if (!agents[toAgent]) {\n const available = Object.keys(agents).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Handoff target agent \"${toAgent}\" not found. Registered: ${available}`,\n );\n }\n\n // ---- Breakpoint: pre_handoff ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_handoff\",\n fromAgent,\n agents[fromAgent]!.agent.name,\n input,\n undefined,\n {\n handoff: { fromAgent, toAgent },\n },\n );\n if (bpResult.skip) {\n return {\n output: undefined as unknown,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n input = bpResult.input;\n }\n\n const request: HandoffRequest = {\n id: `handoff-${++handoffCounter}`,\n fromAgent,\n toAgent,\n input,\n context,\n requestedAt: Date.now(),\n };\n\n pendingHandoffs.push(request);\n try {\n onHandoff?.(request);\n } catch (e) {\n if (debug) {\n console.debug(\"[Directive MultiAgent] onHandoff threw:\", e);\n }\n }\n fireHook(\"onHandoff\", request);\n\n if (timeline) {\n timeline.record({\n type: \"handoff_start\",\n timestamp: Date.now(),\n snapshotId: null,\n fromAgent,\n toAgent,\n });\n }\n\n // Forward handoff context to receiving agent's memory (best-effort)\n const targetMemory = agents[toAgent]!.memory ?? sharedMemory;\n if (targetMemory && context) {\n try {\n const contextSummary = Object.entries(context)\n .map(([k, v]) => `${k}: ${safeStringify(v)}`)\n .join(\", \");\n targetMemory.addMessages([\n {\n role: \"system\",\n content: `[Handoff from ${fromAgent}] Context: ${contextSummary}`,\n },\n ]);\n } catch (memoryError) {\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] Handoff addMessages failed:\",\n memoryError,\n );\n }\n }\n }\n\n try {\n const result = await runSingleAgent(toAgent, input);\n\n const handoffResult: HandoffResult = {\n request,\n result,\n completedAt: Date.now(),\n };\n\n addHandoffResult(handoffResult);\n try {\n onHandoffComplete?.(handoffResult);\n } catch (e) {\n if (debug) {\n console.debug(\"[Directive MultiAgent] onHandoffComplete threw:\", e);\n }\n }\n fireHook(\"onHandoffComplete\", handoffResult);\n\n if (timeline) {\n timeline.record({\n type: \"handoff_complete\",\n timestamp: Date.now(),\n snapshotId: null,\n fromAgent,\n toAgent,\n durationMs: handoffResult.completedAt - request.requestedAt,\n });\n }\n\n const index = pendingHandoffs.indexOf(request);\n if (index >= 0) pendingHandoffs.splice(index, 1);\n\n return result;\n } catch (error) {\n const index = pendingHandoffs.indexOf(request);\n if (index >= 0) pendingHandoffs.splice(index, 1);\n throw error;\n }\n },\n\n approve(requestId: string): void {\n assertNotDestroyed();\n\n // O(1) lookup via reverse index\n const agentId = approvalRequestIndex.get(requestId);\n if (agentId) {\n approvalRequestIndex.delete(requestId);\n const agentFacts = getAgentFacts(agentId);\n system.batch(() => {\n const currentApproval = getApprovalState(agentFacts);\n const MAX_APPROVAL_HISTORY = 200;\n const approved = [...currentApproval.approved, requestId];\n setApprovalState(agentFacts, {\n ...currentApproval,\n pending: currentApproval.pending.filter(\n (r: ApprovalRequest) => r.id !== requestId,\n ),\n approved:\n approved.length > MAX_APPROVAL_HISTORY\n ? approved.slice(-MAX_APPROVAL_HISTORY)\n : approved,\n });\n });\n\n return;\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] approve() ignored: no pending request \"${requestId}\"`,\n );\n }\n },\n\n reject(requestId: string, reason?: string): void {\n assertNotDestroyed();\n\n // O(1) lookup via reverse index\n const agentId = approvalRequestIndex.get(requestId);\n if (agentId) {\n approvalRequestIndex.delete(requestId);\n const agentFacts = getAgentFacts(agentId);\n system.batch(() => {\n const currentApproval = getApprovalState(agentFacts);\n if (reason && debug) {\n console.debug(\n `[Directive MultiAgent] Request ${requestId} rejected: ${reason}`,\n );\n }\n const rejectedRequest: RejectedRequest = {\n id: requestId,\n reason,\n rejectedAt: Date.now(),\n };\n const MAX_REJECTION_HISTORY = 200;\n const rejected = [...currentApproval.rejected, rejectedRequest];\n setApprovalState(agentFacts, {\n ...currentApproval,\n pending: currentApproval.pending.filter(\n (r: ApprovalRequest) => r.id !== requestId,\n ),\n rejected:\n rejected.length > MAX_REJECTION_HISTORY\n ? rejected.slice(-MAX_REJECTION_HISTORY)\n : rejected,\n });\n });\n\n return;\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] reject() ignored: no pending request \"${requestId}\"`,\n );\n }\n },\n\n pause(): void {\n assertNotDestroyed();\n globalStatus = \"paused\";\n if (debug) {\n console.debug(\"[Directive MultiAgent] Orchestrator paused\");\n }\n },\n\n resume(): void {\n assertNotDestroyed();\n if (globalStatus === \"paused\") {\n globalStatus = \"idle\";\n if (debug) {\n console.debug(\"[Directive MultiAgent] Orchestrator resumed\");\n }\n }\n },\n\n getAgentState(agentId: string) {\n const state = agentStates[agentId];\n\n return state ? { ...state } : undefined;\n },\n\n getAllAgentStates() {\n return Object.fromEntries(\n Object.entries(agentStates).map(([k, v]) => [k, { ...v }]),\n );\n },\n\n getPendingHandoffs() {\n return [...pendingHandoffs];\n },\n\n /** Total tokens consumed across all agents */\n get totalTokens(): number {\n return globalTokenCount;\n },\n\n /** Wait until all agents are idle (no running agents) */\n waitForIdle(timeoutMs?: number): Promise<void> {\n const allIdle = () =>\n pendingRuns === 0 &&\n Object.values(agentStates).every(\n (s) =>\n s.status === \"idle\" ||\n s.status === \"completed\" ||\n s.status === \"error\",\n );\n if (allIdle()) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n idleWaiters.delete(check);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n\n const check = () => {\n if (allIdle()) {\n cleanup();\n resolve();\n }\n };\n\n idleWaiters.add(check);\n\n if (timeoutMs !== undefined) {\n timeoutId = setTimeout(() => {\n cleanup();\n reject(\n new Error(\n `[Directive MultiAgent] waitForIdle timed out after ${timeoutMs}ms`,\n ),\n );\n }, timeoutMs);\n }\n });\n },\n\n /** Alias for runAgent */\n run<T>(\n agentId: string,\n input: string,\n options?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n return runSingleAgent<T>(agentId, input, options);\n },\n\n /** Alias for runAgentStream */\n runStream<T>(\n agentId: string,\n input: string,\n options?: { signal?: AbortSignal },\n ): OrchestratorStreamResult<T> {\n return runAgentStreamImpl<T>(agentId, input, options);\n },\n\n registerAgent(agentId: string, registration: AgentRegistration): void {\n assertNotDestroyed();\n if (RESERVED_IDS.has(agentId)) {\n throw new Error(\n `[Directive MultiAgent] Agent ID \"${agentId}\" is reserved and cannot be used`,\n );\n }\n if (agents[agentId]) {\n throw new Error(\n `[Directive MultiAgent] Agent \"${agentId}\" is already registered. Unregister first.`,\n );\n }\n if (tasks[agentId]) {\n throw new Error(\n `[Directive MultiAgent] ID \"${agentId}\" is already registered as a task`,\n );\n }\n\n // Build per-agent constraints and resolvers (same as initial setup)\n // biome-ignore lint/suspicious/noExplicitAny: Constraint types complex\n const perAgentConstraints: Record<string, any> = registration.constraints\n ? convertOrchestratorConstraints(registration.constraints)\n : {};\n\n // biome-ignore lint/suspicious/noExplicitAny: Resolver types complex\n const perAgentResolvers: Record<string, any> = Object.create(null);\n if (registration.resolvers) {\n for (const [id, resolver] of Object.entries(registration.resolvers)) {\n perAgentResolvers[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = {\n ...context.facts,\n ...state,\n } as unknown as Record<string, unknown> & OrchestratorState;\n\n const resolverContext: OrchestratorResolverContext<\n Record<string, unknown>\n > = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runner<T>(agent, input, opts);\n },\n signal: context.signal,\n };\n\n return resolver.resolve(req, resolverContext);\n },\n };\n }\n }\n\n // Create Directive module and register with the System\n const agentModule = createModule(agentId, {\n schema: orchestratorBridgeSchema,\n init: (facts) => {\n setAgentState(facts, {\n status: \"idle\",\n currentAgent: registration.agent.name,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(facts, { pending: [], approved: [], rejected: [] });\n setConversation(facts, []);\n setToolCalls(facts, []);\n setBreakpointState(facts, createInitialBreakpointState());\n },\n constraints: perAgentConstraints,\n resolvers:\n Object.keys(perAgentResolvers).length > 0\n ? (perAgentResolvers as any)\n : undefined,\n });\n\n // biome-ignore lint/suspicious/noExplicitAny: System type narrowing loses namespaced overload\n (system as any).registerModule(agentId, agentModule);\n\n // Add to registry\n agents[agentId] = registration;\n\n // Create semaphore\n semaphores.set(agentId, new Semaphore(registration.maxConcurrent ?? 1));\n\n // Initialize agent state\n agentStates[agentId] = {\n status: \"idle\",\n runCount: 0,\n totalTokens: 0,\n };\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] Registered agent \"${agentId}\" (${registration.agent.name})`,\n );\n }\n\n recomputeDerivations();\n },\n\n unregisterAgent(agentId: string): void {\n assertNotDestroyed();\n if (!agents[agentId]) {\n throw new Error(\n `[Directive MultiAgent] Agent \"${agentId}\" is not registered`,\n );\n }\n\n const state = agentStates[agentId];\n if (state?.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot unregister agent \"${agentId}\" while it is running`,\n );\n }\n\n // Warn about orphaned patterns referencing this agent\n for (const [patternId, pattern] of Object.entries(patterns)) {\n let referencedAgents: string[];\n switch (pattern.type) {\n case \"supervisor\":\n referencedAgents = [pattern.supervisor, ...pattern.workers];\n break;\n case \"dag\":\n referencedAgents = Object.values(pattern.nodes).map(\n (n) => n.handler,\n );\n break;\n case \"reflect\":\n referencedAgents = [pattern.handler, pattern.evaluator];\n break;\n case \"parallel\":\n case \"sequential\":\n case \"race\":\n referencedAgents = pattern.handlers;\n break;\n case \"debate\":\n referencedAgents = [\n ...(pattern as DebatePattern).handlers,\n (pattern as DebatePattern).evaluator,\n ];\n break;\n default:\n referencedAgents = [];\n }\n if (referencedAgents.includes(agentId)) {\n console.warn(\n `[Directive MultiAgent] Warning: Pattern \"${patternId}\" references unregistered agent \"${agentId}\"`,\n );\n }\n }\n\n // Drain semaphore\n const sem = semaphores.get(agentId);\n if (sem) {\n sem.drain();\n semaphores.delete(agentId);\n }\n\n // Reset per-agent System facts to idle state\n const agentFacts = getAgentFacts(agentId);\n if (agentFacts) {\n system.batch(() => {\n setAgentState(agentFacts, {\n status: \"idle\",\n currentAgent: null,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(agentFacts, {\n pending: [],\n approved: [],\n rejected: [],\n });\n setConversation(agentFacts, []);\n setToolCalls(agentFacts, []);\n setBreakpointState(agentFacts, createInitialBreakpointState());\n });\n }\n\n // Remove from local registries\n // Note: Directive System modules cannot be removed at runtime,\n // but the agent's facts are reset and it won't be accessible via orchestrator methods\n delete agents[agentId];\n delete agentStates[agentId];\n\n if (debug) {\n console.debug(`[Directive MultiAgent] Unregistered agent \"${agentId}\"`);\n }\n\n recomputeDerivations();\n },\n\n getAgentIds(): string[] {\n return Object.keys(agents);\n },\n\n registerTask(taskId: string, registration: TaskRegistration): void {\n assertNotDestroyed();\n if (RESERVED_IDS.has(taskId)) {\n throw new Error(\n `[Directive MultiAgent] Task ID \"${taskId}\" is reserved and cannot be used`,\n );\n }\n if (\n !taskId ||\n typeof taskId !== \"string\" ||\n taskId.trim() !== taskId ||\n taskId.length === 0\n ) {\n throw new Error(\n \"[Directive MultiAgent] Task ID must be a non-empty trimmed string\",\n );\n }\n if (agents[taskId]) {\n throw new Error(\n `[Directive MultiAgent] ID \"${taskId}\" is already registered as an agent`,\n );\n }\n if (tasks[taskId]) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" is already registered`,\n );\n }\n // Validate timeout and maxConcurrent\n if (\n registration.timeout !== undefined &&\n (!Number.isFinite(registration.timeout) || registration.timeout <= 0)\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" timeout must be a finite number > 0`,\n );\n }\n if (\n registration.maxConcurrent !== undefined &&\n (!Number.isFinite(registration.maxConcurrent) ||\n registration.maxConcurrent < 1 ||\n !Number.isInteger(registration.maxConcurrent))\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" maxConcurrent must be a finite integer >= 1`,\n );\n }\n // Validate retry configuration\n if (registration.retry) {\n const { attempts, delayMs } = registration.retry;\n if (!Number.isFinite(attempts) || attempts < 1) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry attempts must be a finite number >= 1`,\n );\n }\n if (\n delayMs !== undefined &&\n (!Number.isFinite(delayMs) || delayMs < 0)\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry delayMs must be a finite number >= 0`,\n );\n }\n }\n tasks[taskId] = registration;\n taskStates[taskId] = { status: \"idle\" };\n taskSemaphores.set(\n taskId,\n new Semaphore(registration.maxConcurrent ?? 1),\n );\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] Registered task \"${taskId}\" (${registration.label ?? taskId})`,\n );\n }\n },\n\n unregisterTask(taskId: string): void {\n assertNotDestroyed();\n if (!tasks[taskId]) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" is not registered`,\n );\n }\n const state = taskStates[taskId];\n if (state?.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot unregister task \"${taskId}\" while it is running`,\n );\n }\n const sem = taskSemaphores.get(taskId);\n if (sem) {\n sem.drain();\n taskSemaphores.delete(taskId);\n }\n delete tasks[taskId];\n delete taskStates[taskId];\n\n if (debug) {\n console.debug(`[Directive MultiAgent] Unregistered task \"${taskId}\"`);\n }\n },\n\n getTaskIds(): string[] {\n return Object.keys(tasks);\n },\n\n getTaskRegistry(): Record<\n string,\n { label?: string; description?: string }\n > {\n const result: Record<string, { label?: string; description?: string }> =\n Object.create(null);\n for (const [id, reg] of Object.entries(tasks)) {\n result[id] = { label: reg.label, description: reg.description };\n }\n\n return result;\n },\n\n getTaskState(taskId: string) {\n const s = taskStates[taskId];\n\n return s ? Object.freeze(structuredClone(s)) : undefined;\n },\n\n getAllTaskStates() {\n const result: Record<\n string,\n {\n status: string;\n lastOutput?: unknown;\n lastError?: string;\n startTime?: number;\n durationMs?: number;\n }\n > = Object.create(null);\n for (const [id, s] of Object.entries(taskStates)) {\n result[id] = Object.freeze(structuredClone(s));\n }\n\n return result;\n },\n\n getNodeIds(): string[] {\n return [...Object.keys(agents), ...Object.keys(tasks)];\n },\n\n reset() {\n assertNotDestroyed();\n for (const agentId of Object.keys(agents)) {\n const maxConcurrent = agents[agentId]?.maxConcurrent ?? 1;\n agentStates[agentId] = {\n status: \"idle\",\n runCount: 0,\n totalTokens: 0,\n };\n const existing = semaphores.get(agentId);\n if (existing) {\n existing.drain();\n }\n semaphores.set(agentId, new Semaphore(maxConcurrent));\n\n // Reset per-agent facts\n const agentFacts = getAgentFacts(agentId);\n system.batch(() => {\n setAgentState(agentFacts, {\n status: \"idle\",\n currentAgent: agents[agentId]!.agent.name,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(agentFacts, {\n pending: [],\n approved: [],\n rejected: [],\n });\n setConversation(agentFacts, []);\n setToolCalls(agentFacts, []);\n setBreakpointState(agentFacts, createInitialBreakpointState());\n });\n }\n // Reset task states\n for (const taskId of Object.keys(tasks)) {\n taskStates[taskId] = { status: \"idle\" };\n const tsem = taskSemaphores.get(taskId);\n if (tsem) {\n tsem.drain();\n }\n taskSemaphores.set(\n taskId,\n new Semaphore(tasks[taskId]!.maxConcurrent ?? 1),\n );\n }\n\n breakpointModifications.clear();\n breakpointCancelReasons.clear();\n approvalRequestIndex.clear();\n pendingHandoffs.length = 0;\n handoffResults.length = 0;\n handoffCounter = 0;\n globalTokenCount = 0;\n globalStatus = \"idle\";\n pendingRuns = 0;\n notifyIdleWaiters();\n\n // Reset coordinator facts\n const coordFacts = getAgentFacts(\"__coord\");\n system.batch(() => {\n setBridgeFact(coordFacts, \"__globalTokens\", 0);\n setBridgeFact(coordFacts, \"__status\", \"idle\");\n setBridgeFact(coordFacts, \"__handoffs\", []);\n setBridgeFact(coordFacts, \"__handoffResults\", []);\n setBridgeFact(coordFacts, \"__budgetWarningFired\", false);\n if (scratchpadConfig) {\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...scratchpadConfig.init,\n });\n }\n });\n\n // Reset health monitor to clear stale metrics\n if (healthMonitorInstance) {\n healthMonitorInstance.reset();\n }\n\n lastReflectionHistory = null;\n\n // Reset derived values and recompute\n for (const key of Object.keys(derivedValues)) {\n delete derivedValues[key];\n }\n recomputeDerivations();\n },\n\n // ---- Checkpoint Methods ----\n\n async checkpoint(opts?: { label?: string }): Promise<Checkpoint> {\n assertNotDestroyed();\n\n // Ensure no agents or tasks are running\n for (const [id, s] of Object.entries(agentStates)) {\n if (s.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot checkpoint while agent \"${id}\" is running`,\n );\n }\n }\n for (const [id, s] of Object.entries(taskStates)) {\n if (s.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot checkpoint while task \"${id}\" is running`,\n );\n }\n }\n if (!(system as any).history?.export) {\n throw new Error(\n \"[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.\",\n );\n }\n\n const checkpoint: Checkpoint = {\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: opts?.label,\n systemExport: (system as any).history.export(),\n timelineExport: timeline?.export() ?? null,\n localState: {\n type: \"multi\",\n globalTokenCount,\n globalStatus,\n agentStates: Object.fromEntries(\n Object.entries(agentStates).map(([k, v]) => [\n k,\n structuredClone(v),\n ]),\n ),\n handoffCounter,\n pendingHandoffs: [...pendingHandoffs],\n handoffResults: [...handoffResults],\n roundRobinCounters: roundRobinCounters\n ? Object.fromEntries(roundRobinCounters)\n : null,\n taskStates: Object.fromEntries(\n Object.entries(taskStates).map(([k, v]) => [\n k,\n {\n lastOutput:\n v.lastOutput != null ? String(v.lastOutput) : undefined,\n lastError: v.lastError,\n },\n ]),\n ),\n } satisfies MultiAgentCheckpointLocalState,\n memoryExport: sharedMemory\n ? ((sharedMemory as any).export?.() ?? null)\n : null,\n orchestratorType: \"multi\",\n };\n\n if (checkpointStore) {\n await checkpointStore.save(checkpoint);\n }\n\n return checkpoint;\n },\n\n restore(cp: Checkpoint, opts?: { restoreTimeline?: boolean }): void {\n assertNotDestroyed();\n\n if (!validateCheckpoint(cp)) {\n throw new Error(\"[Directive MultiAgent] Invalid checkpoint data\");\n }\n if (cp.orchestratorType !== \"multi\") {\n throw new Error(\n `[Directive MultiAgent] Expected multi-agent checkpoint, got \"${cp.orchestratorType}\"`,\n );\n }\n\n // Restore system state\n if (!(system as any).history?.import) {\n throw new Error(\n \"[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.\",\n );\n }\n (system as any).history.import(cp.systemExport);\n\n // Restore timeline\n if (opts?.restoreTimeline !== false && cp.timelineExport && timeline) {\n timeline.import(cp.timelineExport);\n }\n\n // Restore memory\n if (cp.memoryExport && sharedMemory && (sharedMemory as any).import) {\n (sharedMemory as any).import(cp.memoryExport);\n }\n\n // Restore closure-local state\n const local = cp.localState as MultiAgentCheckpointLocalState;\n globalTokenCount = local.globalTokenCount;\n globalStatus = local.globalStatus;\n handoffCounter = local.handoffCounter;\n pendingHandoffs.length = 0;\n pendingHandoffs.push(...(local.pendingHandoffs as HandoffRequest[]));\n handoffResults.length = 0;\n handoffResults.push(...(local.handoffResults as HandoffResult[]));\n\n // Restore agent states\n for (const [id, s] of Object.entries(local.agentStates)) {\n if (agentStates[id]) {\n agentStates[id] = { ...s };\n }\n }\n\n // Restore round robin counters\n if (local.roundRobinCounters && roundRobinCounters) {\n roundRobinCounters.clear();\n for (const [k, v] of Object.entries(local.roundRobinCounters)) {\n roundRobinCounters.set(k, v);\n }\n }\n\n // Rebuild semaphores from registrations\n for (const [agentId, reg] of Object.entries(agents)) {\n const existing = semaphores.get(agentId);\n if (existing) {\n existing.drain();\n }\n semaphores.set(agentId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n\n // Restore task states\n if (local.taskStates) {\n for (const [id, s] of Object.entries(local.taskStates)) {\n if (!tasks[id]) {\n throw new Error(\n `[Directive MultiAgent] Checkpoint references task \"${id}\" which is not registered. Task run functions cannot be serialized — re-provide the task registration.`,\n );\n }\n taskStates[id] = {\n status: \"idle\",\n lastOutput: s.lastOutput,\n lastError: s.lastError,\n };\n }\n // Rebuild task semaphores\n for (const [taskId, reg] of Object.entries(tasks)) {\n const existing = taskSemaphores.get(taskId);\n if (existing) {\n existing.drain();\n }\n taskSemaphores.set(taskId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n }\n\n // Recompute derivations from restored state\n recomputeDerivations();\n },\n\n // ---- Parallel Streaming ----\n\n runParallelStream<T>(\n agentIds: string[],\n inputs: string | string[],\n merge: (results: RunResult<unknown>[]) => T | Promise<T>,\n opts?: { minSuccess?: number; timeout?: number; signal?: AbortSignal },\n ): MultiplexedStreamResult<T> {\n assertNotDestroyed();\n\n const inputArray = Array.isArray(inputs)\n ? inputs\n : agentIds.map(() => inputs);\n\n if (inputArray.length !== agentIds.length) {\n throw new Error(\n `[Directive MultiAgent] Input count (${inputArray.length}) must match agent count (${agentIds.length})`,\n );\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if (opts?.timeout) {\n timeoutId = setTimeout(() => controller.abort(), opts.timeout);\n }\n // External signal handling is done after mergeTaggedStreams setup\n\n // Launch per-agent streams\n const perAgentStreams = agentIds.map((agentId, i) => {\n const streamResult = runAgentStreamImpl(agentId, inputArray[i]!, {\n signal: controller.signal,\n });\n\n return {\n agentId,\n streamResult,\n };\n });\n\n // Merge tagged streams\n const taggedSources = perAgentStreams.map(\n ({ agentId, streamResult }) => ({\n agentId,\n stream: streamResult.stream,\n }),\n );\n\n const { stream: mergedStream, getDroppedCount } =\n mergeTaggedStreams(taggedSources);\n\n // Clean up external abort listener when done\n let externalOnAbort: (() => void) | undefined;\n if (opts?.signal) {\n externalOnAbort = () => controller.abort();\n opts.signal.addEventListener(\"abort\", externalOnAbort, { once: true });\n }\n\n // Collect all results\n const resultsPromise = Promise.allSettled(\n perAgentStreams.map(({ streamResult }) => streamResult.result),\n ).then((settled) => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n // Clean up external signal listener\n if (externalOnAbort && opts?.signal) {\n opts.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n\n const successes: RunResult<unknown>[] = [];\n for (const s of settled) {\n if (s.status === \"fulfilled\") {\n successes.push(s.value);\n }\n }\n\n if (\n opts?.minSuccess !== undefined &&\n successes.length < opts.minSuccess\n ) {\n throw new Error(\n `[Directive MultiAgent] runParallelStream: Only ${successes.length}/${agentIds.length} agents succeeded ` +\n `(minimum required: ${opts.minSuccess})`,\n );\n }\n\n return successes;\n });\n\n const mergePromise = resultsPromise.then((results) => merge(results));\n\n // Prevent unhandled rejections\n resultsPromise.catch(() => {});\n mergePromise.catch(() => {});\n\n return {\n stream: mergedStream,\n results: resultsPromise,\n merge: mergePromise,\n getDroppedCount,\n abort: () => {\n controller.abort();\n if (externalOnAbort && opts?.signal) {\n opts.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n for (const { streamResult } of perAgentStreams) {\n streamResult.abort();\n }\n },\n };\n },\n\n // ---- Race ----\n\n async runRace<T>(\n agentIds: string[],\n input: string,\n raceOpts?: {\n extract?: (result: RunResult<unknown>) => T;\n timeout?: number;\n minSuccess?: number;\n signal?: AbortSignal;\n },\n ): Promise<RaceResult<T>> {\n assertNotDestroyed();\n\n const pattern: RacePattern<T> = {\n type: \"race\",\n handlers: agentIds,\n extract: raceOpts?.extract,\n timeout: raceOpts?.timeout,\n minSuccess: raceOpts?.minSuccess,\n signal: raceOpts?.signal,\n };\n\n return runRacePattern<T>(pattern, input, \"__imperative_race\");\n },\n\n // ---- Reflect (imperative) ----\n\n async runReflect<T>(\n producerId: string,\n evaluatorId: string,\n input: string,\n reflectOpts?: {\n maxIterations?: number;\n parseEvaluation?: (output: unknown) => ReflectionEvaluation;\n buildRetryInput?: (\n input: string,\n feedback: string,\n iteration: number,\n ) => string;\n extract?: (output: unknown) => T;\n onExhausted?: \"accept-last\" | \"accept-best\" | \"throw\";\n onIteration?: (record: ReflectIterationRecord) => void;\n signal?: AbortSignal;\n timeout?: number;\n threshold?: number | ((iteration: number) => number);\n },\n ): Promise<{\n result: T;\n iterations: number;\n history: ReflectIterationRecord[];\n exhausted: boolean;\n }> {\n assertNotDestroyed();\n\n const pattern: ReflectPattern<T> = {\n type: \"reflect\",\n handler: producerId,\n evaluator: evaluatorId,\n maxIterations: reflectOpts?.maxIterations,\n parseEvaluation: reflectOpts?.parseEvaluation,\n buildRetryInput: reflectOpts?.buildRetryInput,\n extract: reflectOpts?.extract,\n onExhausted: reflectOpts?.onExhausted,\n onIteration: reflectOpts?.onIteration,\n signal: reflectOpts?.signal,\n timeout: reflectOpts?.timeout,\n threshold: reflectOpts?.threshold,\n };\n\n const result = await runReflectPattern<T>(\n pattern,\n input,\n \"__imperative_reflect\",\n );\n const history = lastReflectionHistory ? [...lastReflectionHistory] : [];\n const maxIterations = reflectOpts?.maxIterations ?? 2;\n const exhausted =\n history.length > 0 &&\n !history[history.length - 1]!.passed &&\n history.length >= maxIterations;\n\n return { result, iterations: history.length, history, exhausted };\n },\n\n // ---- Debate (imperative) ----\n\n async runDebate<T>(\n agentIds: string[],\n evaluatorId: string,\n input: string,\n debateOpts?: {\n maxRounds?: number;\n extract?: (output: unknown) => T;\n parseJudgement?: (output: unknown) => {\n winnerId: string;\n feedback?: string;\n score?: number;\n };\n signal?: AbortSignal;\n timeout?: number;\n },\n ): Promise<DebateResult<T>> {\n assertNotDestroyed();\n\n return runDebateInternal<T>(\n {\n type: \"debate\",\n handlers: agentIds,\n evaluator: evaluatorId,\n maxRounds: debateOpts?.maxRounds,\n extract: debateOpts?.extract,\n parseJudgement: debateOpts?.parseJudgement,\n signal: debateOpts?.signal,\n timeout: debateOpts?.timeout,\n },\n input,\n \"__imperative_debate\",\n );\n },\n\n // ---- Goal Pattern ----\n\n async runGoal<T>(\n nodes: Record<string, GoalNode>,\n initialInput: string | Record<string, unknown>,\n when: (facts: Record<string, unknown>) => boolean,\n goalOpts?: {\n satisfaction?: (facts: Record<string, unknown>) => number;\n maxSteps?: number;\n extract?: (facts: Record<string, unknown>) => T;\n timeout?: number;\n signal?: AbortSignal;\n selectionStrategy?: AgentSelectionStrategy;\n relaxation?: RelaxationTier[];\n onStep?: GoalPattern[\"onStep\"];\n onStall?: GoalPattern[\"onStall\"];\n checkpoint?: PatternCheckpointConfig;\n },\n ): Promise<GoalResult<T>> {\n assertNotDestroyed();\n\n return runGoalInternal<T>(\n {\n type: \"goal\",\n nodes,\n when,\n satisfaction: goalOpts?.satisfaction,\n maxSteps: goalOpts?.maxSteps,\n extract: goalOpts?.extract,\n timeout: goalOpts?.timeout,\n signal: goalOpts?.signal,\n selectionStrategy: goalOpts?.selectionStrategy,\n relaxation: goalOpts?.relaxation,\n onStep: goalOpts?.onStep,\n onStall: goalOpts?.onStall,\n checkpoint: goalOpts?.checkpoint,\n },\n initialInput,\n \"__imperative_goal\",\n );\n },\n\n async resumeGoal<T>(\n checkpointState: GoalCheckpointState,\n pattern: GoalPattern<T>,\n ): Promise<GoalResult<T>> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"goal\"\n ) {\n throw new Error(\"[Directive MultiAgent] Invalid goal checkpoint state\");\n }\n\n return runGoalInternal<T>(\n pattern,\n {}, // initialInput ignored when resumeFrom is provided\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeSequential<T>(\n checkpointState: SequentialCheckpointState,\n pattern: SequentialPattern<T>,\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"sequential\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid sequential checkpoint state\",\n );\n }\n\n return runSequentialPattern<T>(\n pattern,\n checkpointState.currentInput,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeSupervisor<T>(\n checkpointState: SupervisorCheckpointState,\n pattern: SupervisorPattern<T>,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"supervisor\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid supervisor checkpoint state\",\n );\n }\n\n const input = options?.input ?? checkpointState.currentInput;\n\n return runSupervisorPattern<T>(\n pattern,\n input,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeReflect<T>(\n checkpointState: ReflectCheckpointState,\n pattern: ReflectPattern<T>,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"reflect\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid reflect checkpoint state\",\n );\n }\n\n const input = options?.input ?? checkpointState.effectiveInput;\n\n return runReflectPattern<T>(\n pattern,\n input,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeDebate<T>(\n checkpointState: DebateCheckpointState,\n pattern: DebatePattern<T>,\n ): Promise<DebateResult<T>> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"debate\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid debate checkpoint state\",\n );\n }\n\n return runDebateInternal<T>(\n pattern,\n checkpointState.currentInput,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeDag<T>(\n checkpointState: DagCheckpointState,\n pattern: DagPattern<T>,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"dag\"\n ) {\n throw new Error(\"[Directive MultiAgent] Invalid DAG checkpoint state\");\n }\n\n const input = options?.input ?? checkpointState.input;\n\n return runDagPattern<T>(\n pattern,\n input,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async replay<T>(\n checkpointId: string,\n pattern: ExecutionPattern,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (!checkpointStore) {\n throw new Error(\n \"[Directive MultiAgent] No checkpoint store configured\",\n );\n }\n\n const checkpoint = await checkpointStore.load(checkpointId);\n if (!checkpoint) {\n throw new Error(\n `[Directive MultiAgent] Checkpoint not found: ${checkpointId}`,\n );\n }\n\n // Validate parsed state — prototype pollution defense + structure check\n let state: PatternCheckpointState;\n try {\n const parsed = JSON.parse(checkpoint.systemExport);\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"Parsed checkpoint state is not an object\");\n }\n\n const BLOCKED = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n for (const key of Object.keys(parsed)) {\n if (BLOCKED.has(key)) {\n throw new Error(`Checkpoint state contains blocked key: ${key}`);\n }\n }\n\n const validTypes = new Set([\n \"sequential\",\n \"supervisor\",\n \"reflect\",\n \"debate\",\n \"dag\",\n \"goal\",\n ]);\n if (!validTypes.has(parsed.type)) {\n throw new Error(`Unknown checkpoint pattern type: ${parsed.type}`);\n }\n if (parsed.version !== 1) {\n throw new Error(`Unsupported checkpoint version: ${parsed.version}`);\n }\n\n state = parsed as PatternCheckpointState;\n } catch (err) {\n throw new Error(\n `[Directive MultiAgent] Invalid checkpoint state: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n\n const step = getPatternStep(state);\n const replayInput =\n options?.input ??\n (\"currentInput\" in state\n ? (state as { currentInput: string }).currentInput\n : \"\");\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"checkpoint_restore\",\n timestamp: Date.now(),\n snapshotId: null,\n checkpointId,\n patternType: state.type,\n step,\n });\n }\n\n switch (state.type) {\n case \"sequential\":\n return runSequentialPattern<T>(\n pattern as SequentialPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"supervisor\":\n return runSupervisorPattern<T>(\n pattern as SupervisorPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"reflect\":\n return runReflectPattern<T>(\n pattern as ReflectPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"debate\":\n return runDebateInternal(\n pattern as DebatePattern<T>,\n replayInput,\n state.patternId,\n state,\n ) as Promise<T>;\n case \"dag\":\n return runDagPattern<T>(\n pattern as DagPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"goal\":\n return runGoalInternal(\n pattern as GoalPattern<T>,\n state.facts,\n state.patternId,\n state,\n ) as Promise<T>;\n }\n },\n\n // ---- Breakpoint Methods ----\n\n resumeBreakpoint(\n id: string,\n modifications?: BreakpointModifications,\n ): void {\n assertNotDestroyed();\n\n if (modifications) {\n breakpointModifications.set(id, modifications);\n }\n\n // Find which agent has this breakpoint pending and resolve it\n for (const agentId of Object.keys(agents)) {\n const agentFacts = getAgentFacts(agentId);\n const bpState = getBreakpointState(agentFacts);\n if (bpState.pending.some((r: BreakpointRequest) => r.id === id)) {\n system.batch(() => {\n const currentBp = getBreakpointState(agentFacts);\n const resolved = [...currentBp.resolved, id];\n setBreakpointState(agentFacts, {\n ...currentBp,\n pending: currentBp.pending.filter(\n (r: BreakpointRequest) => r.id !== id,\n ),\n resolved:\n resolved.length > MAX_BREAKPOINT_HISTORY\n ? resolved.slice(-MAX_BREAKPOINT_HISTORY)\n : resolved,\n });\n });\n\n return;\n }\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint \"${id}\"`,\n );\n }\n },\n\n cancelBreakpoint(id: string, reason?: string): void {\n assertNotDestroyed();\n\n if (reason) {\n breakpointCancelReasons.set(id, reason);\n }\n\n for (const agentId of Object.keys(agents)) {\n const agentFacts = getAgentFacts(agentId);\n const bpState = getBreakpointState(agentFacts);\n if (bpState.pending.some((r: BreakpointRequest) => r.id === id)) {\n system.batch(() => {\n const currentBp = getBreakpointState(agentFacts);\n const cancelled = [...currentBp.cancelled, id];\n setBreakpointState(agentFacts, {\n ...currentBp,\n pending: currentBp.pending.filter(\n (r: BreakpointRequest) => r.id !== id,\n ),\n cancelled:\n cancelled.length > MAX_BREAKPOINT_HISTORY\n ? cancelled.slice(-MAX_BREAKPOINT_HISTORY)\n : cancelled,\n });\n });\n\n return;\n }\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint \"${id}\"`,\n );\n }\n },\n\n getPendingBreakpoints(): BreakpointRequest[] {\n const pending: BreakpointRequest[] = [];\n for (const agentId of Object.keys(agents)) {\n const agentFacts = getAgentFacts(agentId);\n const bpState = getBreakpointState(agentFacts);\n pending.push(...bpState.pending);\n }\n\n return pending;\n },\n\n getLastReflectionHistory(): ReflectIterationRecord[] | null {\n return lastReflectionHistory ? [...lastReflectionHistory] : null;\n },\n\n destroy() {\n if (destroyed) {\n return;\n }\n // Reset before marking as destroyed (reset() calls assertNotDestroyed())\n orchestrator.reset();\n // Clear callback references to allow garbage collection\n scratchpadChangeCallbacks.clear();\n scratchpadKeyCallbacks.clear();\n derivedChangeCallbacks.clear();\n idleWaiters.clear();\n destroyed = true;\n system.destroy();\n },\n };\n\n // Compute initial derivation values so they're available immediately\n recomputeDerivations();\n\n return orchestrator;\n}\n\n// ============================================================================\n// Barrel Re-exports from Extracted Modules\n// ============================================================================\n// These modules were extracted for maintainability. Re-exporting here so all\n// existing `import { ... } from \"./multi-agent-orchestrator.js\"` continue to work.\n\nexport * from \"./pattern-factories.js\";\nexport * from \"./pattern-serialization.js\";\nexport * from \"./pattern-composition.js\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/debug-timeline.ts","../src/guardrail-utils.ts","../src/health-monitor.ts","../src/meta-context.ts","../src/types.ts","../src/orchestrator-bridge.ts","../src/reflection.ts","../src/breakpoints.ts","../src/checkpoint.ts","../src/streaming.ts","../src/structured-output.ts","../src/orchestrator-utils.ts","../src/pattern-factories.ts","../src/pattern-serialization.ts","../src/pattern-composition.ts","../src/multi-agent-orchestrator.ts"],"names":["KNOWN_EVENT_TYPES","BLOCKED_IMPORT_KEYS","createDebugTimeline","options","maxEvents","goToSnapshot","events","nextId","listeners","event","fullEvent","overflow","listener","err","agentId","e","type","snapshotId","startMs","endMs","cutoffId","i","sliceEnd","json","parsed","key","data","validated","evt","createDebugTimelinePlugin","timeline","getSnapshotId","resolverStartTimes","id","active","resolver","req","startTime","_req","error","errorMessage","normalizeGuardrail","guardrail","index","calculateRetryDelay","attempt","config","backoff","baseDelayMs","maxDelayMs","delay","abortableDelay","ms","signal","resolve","reject","onAbort","timer","executeGuardrailWithRetry","context","retry","maxAttempts","lastError","calculateAgentRetryDelay","executeAgentWithRetry","runner","agent","input","retryConfig","isRetryable","onRetry","retryable","DEFAULT_WEIGHTS","createHealthMonitor","windowMs","maxNormalLatencyMs","maxEventsPerAgent","weights","value","weightSum","circuitStates","generation","cachedAll","cachedGen","getAgentEvents","agentEvents","pruneAndCap","now","cutoff","firstValid","excessFromCap","computeScore","successRate","avgLatency","s","normalizedLatency","state","circuitScore","raw","buildMetrics","successes","failures","avgLatencyMs","lastErrors","latencyMs","result","formatTags","meta","parts","tag","formatEntry","label","desc","tags","formatSystemMeta","inspection","sections","moduleEntries","activeConstraints","c","constraintMetaMap","reqEntries","constraintLabel","resolverEntries","r","eventEntries","factEntries","f","effectEntries","derivationEntries","d","toAIContext","system","GuardrailError","isGuardrailError","AGENT_KEY","APPROVAL_KEY","CONVERSATION_KEY","TOOL_CALLS_KEY","BREAKPOINT_KEY","SCRATCHPAD_KEY","orchestratorBridgeSchema","t","getAgentState","facts","getBridgeFact","setAgentState","setBridgeFact","getApprovalState","setApprovalState","getConversation","setConversation","messages","getToolCalls","setToolCalls","toolCalls","getBreakpointState","setBreakpointState","getOrchestratorState","convertOrchestratorConstraints","constraints","constraint","combinedFacts","convertOrchestratorResolvers","resolvers","runAgentWithGuardrails","getSystemFacts","orchestratorContext","opts","ReflectionExhaustedError","defaultBuildRetryInput","feedback","_iteration","withReflection","maxIterations","buildRetryInput","onExhausted","history","effectiveInput","accumulatedTokens","lastResult","iteration","iterationStart","evaluation","durationMs","MAX_BREAKPOINT_HISTORY","breakpointCounter","createBreakpointId","matchBreakpoint","breakpoints","bp","createInitialBreakpointState","BLOCKED_KEYS","createCheckpointId","timestamp","random","validateCheckpoint","obj","localState","InMemoryCheckpointStore","checkpoint","existingIdx","checkpointId","cp","pruned","toRemove","idx","oldest","StreamBuffer","strategy","maxSize","item","pullWaiter","pushWaiter","waiter","createStreamingRunner","baseRunner","streamingGuardrails","runOptions","backpressure","bufferSize","guardrailCheckInterval","stopOnGuardrail","buffer","abortController","partialOutput","tokenCount","stopped","abortHandler","cleanup","checkGuardrails","shouldStop","chunk","resultPromise","token","tool","args","message","duration","droppedTokens","errorChunk","createToxicityStreamingGuardrail","checkFn","threshold","stopOnFail","score","createLengthStreamingGuardrail","maxTokens","warnAt","warned","_partialOutput","createPatternStreamingGuardrail","patterns","regex","name","combineStreamingGuardrails","guardrails","stopOnFirstFail","adaptOutputGuardrail","minTokens","collectTokens","stream","output","tapStream","fn","filterStream","types","typeSet","mapStream","MAX_MULTIPLEX_BUFFER","mergeTaggedStreams","sources","done","waiters","activeSources","closed","droppedCount","push","finish","source","extractJsonFromOutput","trimmed","objectStart","arrayStart","start","openChar","closeChar","depth","inString","escaped","char","jsonStr","sanitized","match","formatValidationError","issue","withStructuredOutput","schema","maxRetries","extractJson","schemaDescription","schemaPrompt","structuredAgent","outputStr","extracted","StructuredOutputError","shallowEqual","a","b","aObj","bObj","aKeys","bKeys","Semaphore","max","released","entry","releaseFn","next","pending","getPatternStep","getCheckpointProgress","stepsCompleted","stepsTotal","tokensConsumed","sum","avgTokens","remaining","h","total","completed","satisfaction","estimateGoalSteps","metrics","avgDelta","m","diffCheckpoints","getTokens","diff","added","removed","changed","aCompleted","forkFromCheckpoint","checkpointStore","createMultiAgentOrchestrator","cloned","forked","validateDagAcyclic","patternId","nodes","nodeIds","nodeId","node","depId","deps","inDegree","adjacency","queue","visited","current","dependent","parallel","handlers","merge","sequential","supervisor","supervisorAgent","workers","dag","reflect","handler","evaluator","race","goal","when","allReadyStrategy","readyAgents","highestImpactStrategy","topN","aAvg","costEfficientStrategy","aM","bM","aCost","bCost","patternToJSON","pattern","cnodes","ALLOWED_PATTERN_TYPES","patternFromJSON","overrides","safe","k","v","selectAgent","priority","selectedAgent","selectedInput","runAgentRequirement","concatResults","results","separator","safeStringify","pickBestResult","best","collectOutputs","aggregateTokens","composePatterns","orchestrator","currentInput","lastOutput","parallelPattern","inputsArr","seqPattern","supPattern","maxRounds","workerResults","supervisorResult","round","action","stripped","workerResult","dagPattern","dagContext","nodeInput","upstreamOutputs","reflectPattern","maxIter","parseEval","buildInput","inp","producerOutput","producerStr","evalResult","racePattern","debatePattern","initialFacts","findAgentsByCapability","registry","requiredCapabilities","reg","caps","capabilityRoute","getCapabilities","getInput","select","cachedMatches","cacheGeneration","requireGeneration","matches","spawnOnConditionOptionsWarned","spawnOnCondition","effectivePriority","effectiveContext","debate","extract","parseJudgement","timeout","runDebate","derivedConstraint","derivationId","condition","lastValue","whenGeneration","spawnPool","isRunAgentReq","requirementGuard","inputAgents","onHandoff","onHandoffComplete","maxHandoffHistory","rawDebug","hooks","sharedMemory","defaultAgentRetry","maxTokenBudget","plugins","onApprovalRequest","autoApproveToolCalls","approvalTimeoutMs","userConstraints","userResolvers","orchestratorCircuitBreaker","budgetWarningThreshold","onBudgetWarning","selfHealing","breakpointConfigs","onBreakpoint","breakpointTimeoutMs","userDerivations","scratchpadConfig","inputTasks","debug","MAX_VERBOSE_LENGTH","agents","tasks","taskStates","taskId","taskSemaphores","RESERVED_IDS","taskReg","attempts","delayMs","registeredAgentIds","missingAgents","agentsToCheck","details","timelinePlugin","healthMonitorInstance","roundRobinCounters","fireHook","hookError","coordFacts","coordSchema","coordConstraints","coordResolvers","resolverCtx","globalStatus","runSingleAgent","coordinatorModule","createModule","modulesMap","registration","perAgentConstraints","perAgentResolvers","resolverContext","callbackPlugin","createCallbackPlugin","allPlugins","createSystem","MAX_CONVERSATION_MESSAGES","MAX_TOOL_CALLS","globalTokenCount","destroyed","pendingRuns","lastReflectionHistory","assertNotDestroyed","semaphores","agentStates","MAX_HANDOFF_RESULTS","pendingHandoffs","handoffResults","handoffCounter","addHandoffResult","approvalRequestIndex","idleWaiters","notifyIdleWaiters","derivedValues","derivedChangeCallbacks","buildCrossAgentSnapshot","agentsSnap","getAgentFacts","snapshot","recomputeDerivations","errors","derivId","derivFn","newValue","oldValue","hasChanged","derivError","cb","scratchpadChangeCallbacks","scratchpadKeyCallbacks","scratchpadInstance","changedKeys","notifyScratchpadChange","_","rest","values","safeValues","keys","callback","allKeys","keyCbs","breakpointModifications","breakpointCancelReasons","waitForBreakpointResolution","breakpointId","timeoutId","settled","agentFacts","cleanupAll","unsubscribe","bpState","mods","cancelReason","handleBreakpoint","agentName","extra","matched","bpId","request","currentBp","modifications","waitForApproval","requestId","approval","rejectedRequest","errorMsg","timeoutSeconds","runTask","bpResult","effectivePatternId","sem","buildContext","agentState","taskState","percent","clampedPercent","baseDelay","executeAttempt","timeoutTimer","rawOutput","MAX_BACKOFF_MS","rawDelay","available","effectiveCircuitBreaker","runSingleAgentInner","equivalents","findEquivalentAgents","alternate","selectBestEquivalent","rerouteEvent","originalInput","processedInput","semaphore","release","controller","effectiveMemory","contextMessages","contextStr","metaStr","inputGuardrailsList","g","guardStartTime","currentAgent","effectiveRunner","effectiveSchema","effectiveRetry","updated","toolCall","toolCallGuardrailsList","guardResult","approvalId","approvalRequest","currentApproval","updatedToolCalls","outputGuardrailsList","shouldFireBudgetWarning","budgetPercentage","newTotal","warningFired","callbackError","messagesToStore","memoryError","base","runAgentStreamImpl","taskChunks","taskWaiters","taskClosed","pushTaskChunk","closeTaskStream","w","taskAbortController","taskExternalAbortHandler","MAX_AGENT_STREAM_BUFFER","MAX_ACCUMULATED_OUTPUT","chunks","accumulatedOutput","pushChunk","closeStream","newTokens","runParallelPattern","patternStartTime","patternError","promises","successResults","failCount","savePatternCheckpoint","store","step","runSequentialPattern","initialInput","resumeFrom","pId","ckptConfig","ckptStore","ckptEveryN","ckptPrefix","collectedResults","startIdx","last","nextInput","runSupervisorPattern","serializedWorkerResults","wr","startRound","cleaned","runDagPattern","dagCkptConfig","dagCkptStore","dagCkptEveryN","dagCkptPrefix","dagCompletedCount","dagLastCheckpointCount","dagCheckpointChain","dagTotalNodes","status","nr","onNodeError","maxConcurrent","graphTimeoutId","evaluatePendingNodes","terminalStatuses","inflight","running","launchNode","nodeStartTime","nodeController","nodeTimeoutId","nodeResults","nid","ckptState","readyNodes","promise","runReflectPattern","effectiveSignal","reflectTimeoutId","reflectExternalOnAbort","parseEvaluation","reflectCkptConfig","reflectCkptStore","reflectCkptEveryN","reflectCkptPrefix","lastProducerResult","producerOutputs","startIteration","iterStart","producerResult","evaluatorResult","parseError","thresholdValue","iterDurationMs","record","cbError","retryError","p","bestIdx","bestScore","bestOutput","runRacePattern","minSuccess","raceTimeoutId","raceExternalOnAbort","agentErrors","startedAgents","entries","allPromises","settledCount","resolved","winner","failedCount","maxPossibleSuccesses","msg","first","winnerId","successIds","cancelledIds","allResults","runDebateInternal","debateAgents","debateTimeoutId","externalOnAbort","ctrl","parseJudge","rounds","lastWinnerId","lastWinnerOutput","debateCkptConfig","debateCkptStore","debateCkptEveryN","debateCkptPrefix","debateTotalTokens","proposalPromises","proposals","evalInput","judgement","GOAL_BLOCKED_KEYS","goalSafeMerge","target","validateGoalAcyclic","producerMap","reqKey","producers","producerId","validateProducerConflicts","safeCall","safeCallAsync","computeGoalMetrics","currentSatisfaction","stepMetrics","_step","recentSteps","estimatedStepsRemaining","decelerating","recent3","prior3","recentAvg","priorAvg","clampSatisfaction","runGoalInternal","originalNodes","goalWhen","satisfactionFn","maxSteps","selectionStrategy","relaxation","onStep","onStall","goalTimeoutId","timeoutMs","goalHandlers","n","executionOrder","out","relaxations","completedNodes","failedNodes","nodeInputHashes","agentMetrics","stallSteps","appliedRelaxationTiers","lastSatisfaction","goalAchieved","startStep","checkpointConfig","checkpointEveryN","checkpointStoreRef","checkpointLabelPrefix","lastCheckpointId","MAX_CONSECUTIVE_FAILURES","totalTokens","requires","inputHash","selectedNodes","rawSatisfaction","goalProgressMetrics","strategyMetrics","strategyResult","relaxationApplied","tierIdx","tier","altNode","altId","rawSat","ctx","stallMetrics","stepStart","rawPreSat","preSatisfaction","stepTokens","factsProduced","nodePromises","customInput","relevantFacts","outputFacts","rawPostSat","postSatisfaction","satisfactionDelta","savedId","seen","group","sourceReg","counter","selected","getPatternHandlers","handlerIds","agentIds","inputs","inputArray","fromAgent","toAgent","targetMemory","contextSummary","handoffResult","MAX_APPROVAL_HISTORY","approved","reason","MAX_REJECTION_HISTORY","rejected","allIdle","check","agentModule","referencedAgents","existing","tsem","local","perAgentStreams","streamResult","taggedSources","mergedStream","getDroppedCount","resultsPromise","mergePromise","raceOpts","evaluatorId","reflectOpts","exhausted","debateOpts","goalOpts","checkpointState","BLOCKED","replayInput","cancelled"],"mappings":"kKAgBA,IAAMA,EAAAA,CAAiC,IAAI,GAAA,CAAI,CAC7C,aAAA,CACA,gBAAA,CACA,cACA,aAAA,CACA,iBAAA,CACA,sBACA,gBAAA,CACA,mBAAA,CACA,iBACA,kBAAA,CACA,mBAAA,CACA,eAAA,CACA,kBAAA,CACA,eAAA,CACA,kBAAA,CACA,kBACA,gBAAA,CACA,oBAAA,CACA,mBAAA,CACA,mBAAA,CACA,sBAAA,CACA,YAAA,CACA,cACA,gBAAA,CACA,cAAA,CACA,SAAA,CACA,iBAAA,CACA,oBAAA,CACA,YAAA,CACA,gBACA,YAAA,CACA,eAAA,CACA,WACF,CAAC,CAAA,CAqDKC,GAAsB,IAAI,GAAA,CAAI,CAClC,WAAA,CACA,aAAA,CACA,WAAA,CACA,WACA,SAAA,CACA,gBACF,CAAC,CAAA,CAoBM,SAASC,GACdC,CAAAA,CAAgC,EAAC,CAClB,CACf,IAAMC,CAAAA,CAAYD,EAAQ,SAAA,EAAa,GAAA,CACjCE,EAAeF,CAAAA,CAAQ,YAAA,CAG7B,GAAI,CAAC,MAAA,CAAO,QAAA,CAASC,CAAS,CAAA,EAAKA,CAAAA,CAAY,EAC7C,MAAM,IAAI,KAAA,CAAM,kDAAkD,CAAA,CAGpE,IAAIE,EAAuB,EAAC,CACxBC,CAAAA,CAAS,CAAA,CACPC,CAAAA,CAAY,IAAI,IAsLtB,OApLgC,CAC9B,OAAOC,CAAAA,CAA2C,CAChD,IAAMC,CAAAA,CAAY,CAAE,GAAGD,CAAAA,CAAO,EAAA,CAAIF,CAAAA,EAAS,EAC3CD,CAAAA,CAAO,IAAA,CAAKI,CAAS,CAAA,CAGrB,IAAMC,EAAWL,CAAAA,CAAO,MAAA,CAASF,CAAAA,CAC7BO,CAAAA,CAAW,CAAA,EACbL,CAAAA,CAAO,OAAO,CAAA,CAAGK,CAAQ,EAI3B,IAAA,IAAWC,CAAAA,IAAYJ,EACrB,GAAI,CACFI,CAAAA,CAASF,CAAS,EACpB,CAAA,MAASG,EAAK,CAGV,OAAO,OAAA,CAAY,GAAA,EACnB,OAAA,CAAQ,GAAA,EAAK,WAAa,YAAA,EAE1B,OAAA,CAAQ,KAAA,CACN,2CAAA,CACAA,CAAAA,YAAe,KAAA,CAAQA,EAAI,OAAA,CAAUA,CACvC,EAEJ,CAGF,OAAOH,CACT,CAAA,CAEA,SAAA,EAA0B,CACxB,OAAO,CAAC,GAAGJ,CAAM,CACnB,CAAA,CAEA,kBAAkBQ,CAAAA,CAA+B,CAC/C,OAAOR,CAAAA,CAAO,MAAA,CAAQS,CAAAA,EAAMA,CAAAA,CAAE,OAAA,GAAYD,CAAO,CACnD,CAAA,CAEA,eAAA,CACEE,EACoC,CACpC,OAAOV,EAAO,MAAA,CAAQS,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAASC,CAAI,CAI7C,EAEA,mBAAA,CAAoBC,CAAAA,CAAkC,CACpD,OAAOX,CAAAA,CAAO,MAAA,CAAQS,GAAMA,CAAAA,CAAE,UAAA,GAAeE,CAAU,CACzD,CAAA,CAEA,gBAAA,CAAiBC,EAAiBC,CAAAA,CAA6B,CAC7D,OAAOb,CAAAA,CAAO,MAAA,CACXS,GAAMA,CAAAA,CAAE,SAAA,EAAaG,CAAAA,EAAWH,CAAAA,CAAE,SAAA,EAAaI,CAClD,CACF,CAAA,CAEA,QAAA,CAASF,EAA0B,CAEjC,IAAIG,EAAW,EAAA,CACf,IAAA,IAASC,CAAAA,CAAIf,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAGe,GAAK,CAAA,CAAGA,CAAAA,EAAAA,CACtC,GACEf,CAAAA,CAAOe,CAAC,EAAG,UAAA,GAAe,IAAA,EAC1Bf,CAAAA,CAAOe,CAAC,CAAA,CAAG,UAAA,EAAeJ,EAC1B,CACAG,CAAAA,CAAWd,CAAAA,CAAOe,CAAC,CAAA,CAAG,EAAA,CACtB,KACF,CAGF,GAAID,CAAAA,EAAY,CAAA,CAAG,CAEjB,IAAIE,EAAWhB,CAAAA,CAAO,MAAA,CACtB,QAASe,CAAAA,CAAIf,CAAAA,CAAO,OAAS,CAAA,CAAGe,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CACtC,GAAIf,CAAAA,CAAOe,CAAC,CAAA,CAAG,EAAA,EAAMD,EAAU,CAC7BE,CAAAA,CAAWD,EAAI,CAAA,CACf,KACF,CAEFf,CAAAA,CAASA,CAAAA,CAAO,KAAA,CAAM,EAAGgB,CAAQ,EACnC,MAEEhB,CAAAA,CAAS,GAIPD,CAAAA,EACFA,CAAAA,CAAaY,CAAU,EAE3B,CAAA,CAEA,MAAA,EAAiB,CACf,OAAO,IAAA,CAAK,SAAA,CAAU,CAAE,OAAA,CAAS,CAAA,CAAG,OAAAX,CAAAA,CAAQ,MAAA,CAAAC,CAAO,CAAC,CACtD,CAAA,CAEA,OAAOgB,CAAAA,CAAoB,CACzB,IAAIC,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMD,CAAI,EAC1B,CAAA,KAAQ,CACN,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CAEA,GAAI,CAACC,CAAAA,EAAU,OAAOA,CAAAA,EAAW,QAAA,CAC/B,MAAM,IAAI,KAAA,CAAM,iDAAiD,CAAA,CAInE,IAAA,IAAWC,KAAO,MAAA,CAAO,IAAA,CAAKD,CAAM,CAAA,CAClC,GAAIvB,EAAAA,CAAoB,IAAIwB,CAAG,CAAA,CAC7B,MAAM,IAAI,KAAA,CACR,CAAA,iDAAA,EAAoDA,CAAG,CAAA,CACzD,CAAA,CAIJ,IAAMC,CAAAA,CAAOF,CAAAA,CAMb,GAAI,CAAC,KAAA,CAAM,OAAA,CAAQE,EAAK,MAAM,CAAA,CAC5B,MAAM,IAAI,KAAA,CAAM,gDAAgD,CAAA,CAIlE,IAAMC,CAAAA,CAA0B,EAAC,CACjC,IAAA,IAAWC,CAAAA,IAAOF,CAAAA,CAAK,MAAA,CAAQ,CAC7B,GAAI,CAACE,CAAAA,EAAO,OAAOA,CAAAA,EAAQ,QAAA,CACzB,SAIF,QAAWH,CAAAA,IAAO,MAAA,CAAO,KAAKG,CAAG,CAAA,CAC/B,GAAI3B,EAAAA,CAAoB,GAAA,CAAIwB,CAAG,CAAA,CAC7B,MAAM,IAAI,MACR,CAAA,gDAAA,EAAmDA,CAAG,CAAA,CACxD,CAAA,CAIJ,IAAMV,CAAAA,CAAIa,EAGR,OAAOb,CAAAA,CAAE,EAAA,EAAO,QAAA,EAChB,OAAOA,CAAAA,CAAE,MAAS,QAAA,EAClBf,EAAAA,CAAkB,IAAIe,CAAAA,CAAE,IAAI,GAC5B,OAAOA,CAAAA,CAAE,SAAA,EAAc,QAAA,EAEvBY,CAAAA,CAAU,IAAA,CAAKC,CAAiB,EAEpC,CAGAtB,EACEqB,CAAAA,CAAU,MAAA,CAASvB,EAAYuB,CAAAA,CAAU,KAAA,CAAM,CAACvB,CAAS,CAAA,CAAIuB,CAAAA,CAC/DpB,EAAS,OAAOmB,CAAAA,CAAK,QAAW,QAAA,CAAWA,CAAAA,CAAK,OAASC,CAAAA,CAAU,OACrE,CAAA,CAEA,KAAA,EAAc,CACZrB,CAAAA,CAAS,EAAC,CACVC,CAAAA,CAAS,EACX,CAAA,CAEA,SAAA,CAAUK,CAAAA,CAA6C,CACrD,OAAAJ,CAAAA,CAAU,GAAA,CAAII,CAAQ,CAAA,CAEf,IAAM,CACXJ,CAAAA,CAAU,MAAA,CAAOI,CAAQ,EAC3B,CACF,EAEA,IAAI,MAAA,EAAiB,CACnB,OAAON,CAAAA,CAAO,MAChB,CACF,CAGF,CAgBO,SAASuB,EAAAA,CACdC,CAAAA,CACAC,EACQ,CACR,IAAMC,CAAAA,CAAqB,IAAI,GAAA,CAE/B,OAAO,CACL,IAAA,CAAM,6BAAA,CAEN,qBAAqBC,CAAAA,CAAYC,CAAAA,CAAiB,CAChDJ,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,qBAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,UAAA,CAAYC,CAAAA,EAAc,CAC1B,YAAA,CAAcE,EACd,KAAA,CAAOC,CACT,CAAC,EACH,CAAA,CAEA,eAAA,CAAgBC,EAAkBC,CAAAA,CAAK,CACrCJ,EAAmB,GAAA,CAAIG,CAAAA,CAAU,KAAK,GAAA,EAAK,CAAA,CAC3CL,CAAAA,CAAS,MAAA,CAAO,CACd,KAAM,gBAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,WAAYC,CAAAA,EAAc,CAC1B,UAAA,CAAYI,CAAAA,CACZ,eAAA,CAAiBC,CAAAA,CAAI,YAAY,IACnC,CAAC,EACH,CAAA,CAEA,kBAAA,CAAmBD,EAAkB,CACnC,IAAME,CAAAA,CAAYL,CAAAA,CAAmB,GAAA,CAAIG,CAAQ,EACjDH,CAAAA,CAAmB,MAAA,CAAOG,CAAQ,CAAA,CAClCL,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,mBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,WAAYC,CAAAA,EAAc,CAC1B,WAAYI,CAAAA,CACZ,UAAA,CAAYE,EAAY,IAAA,CAAK,GAAA,EAAI,CAAIA,CAAAA,CAAY,CACnD,CAAC,EACH,CAAA,CAEA,eAAA,CAAgBF,CAAAA,CAAkBG,CAAAA,CAAMC,CAAAA,CAAO,CAC7C,IAAMF,CAAAA,CAAYL,CAAAA,CAAmB,GAAA,CAAIG,CAAQ,CAAA,CACjDH,CAAAA,CAAmB,OAAOG,CAAQ,CAAA,CAClC,IAAMK,CAAAA,CACJD,CAAAA,YAAiB,MAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAAA,CACvDT,CAAAA,CAAS,OAAO,CACd,IAAA,CAAM,gBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,GAChB,UAAA,CAAYC,CAAAA,EAAc,CAC1B,UAAA,CAAYI,CAAAA,CACZ,YAAA,CAAAK,EACA,UAAA,CAAYH,CAAAA,CAAY,KAAK,GAAA,EAAI,CAAIA,EAAY,CACnD,CAAC,EACH,CACF,CACF,CC3WO,SAASI,EAAAA,CACdC,CAAAA,CACAC,EACA3B,CAAAA,CACmB,CACnB,OAAI,OAAO0B,CAAAA,EAAc,UAAA,CAChB,CACL,IAAA,CAAM,CAAA,EAAG1B,CAAI,CAAA,WAAA,EAAc2B,CAAK,GAChC,EAAA,CAAID,CAAAA,CACJ,SAAU,IACZ,CAAA,CAGKA,CACT,CAUO,SAASE,EAAAA,CACdC,EACAC,CAAAA,CACQ,CACR,GAAM,CACJ,OAAA,CAAAC,CAAAA,CAAU,cACV,WAAA,CAAAC,CAAAA,CAAc,GAAA,CACd,UAAA,CAAAC,CAAAA,CAAa,GACf,EAAIH,CAAAA,CACAI,CAAAA,CACJ,OAAQH,CAAAA,EACN,KAAK,aAAA,CACHG,CAAAA,CAAQF,CAAAA,CAAc,CAAA,GAAMH,CAAAA,CAAU,CAAA,CAAA,CACtC,MACF,KAAK,QAAA,CACHK,EAAQF,CAAAA,CAAcH,CAAAA,CACtB,MACF,QACEK,CAAAA,CAAQF,EACZ,CAEA,OAAO,IAAA,CAAK,IAAIE,CAAAA,CAAOD,CAAU,CACnC,CAGA,SAASE,GAAeC,CAAAA,CAAYC,CAAAA,CAAqC,CACvE,OAAIA,CAAAA,EAAQ,OAAA,CACH,QAAQ,MAAA,CAAOA,CAAAA,CAAO,MAAA,EAAU,IAAI,KAAA,CAAM,SAAS,CAAC,CAAA,CAGtD,IAAI,OAAA,CAAc,CAACC,CAAAA,CAASC,CAAAA,GAAW,CAC5C,GAAI,CAACF,EAAQ,CACX,UAAA,CAAWC,EAASF,CAAE,CAAA,CAEtB,MACF,CAEA,IAAMI,CAAAA,CAAU,IAAM,CACpB,YAAA,CAAaC,CAAK,CAAA,CAClBF,CAAAA,CAAOF,EAAO,MAAA,EAAU,IAAI,KAAA,CAAM,SAAS,CAAC,EAC9C,EACMI,CAAAA,CAAQ,UAAA,CAAW,IAAM,CAC7BJ,CAAAA,CAAO,oBAAoB,OAAA,CAASG,CAAO,CAAA,CAC3CF,CAAAA,GACF,CAAA,CAAGF,CAAE,CAAA,CACLC,CAAAA,CAAO,gBAAA,CAAiB,OAAA,CAASG,CAAAA,CAAS,CAAE,KAAM,IAAK,CAAC,EAC1D,CAAC,CACH,CAkBA,eAAsBE,EAAAA,CACpBhB,CAAAA,CACAhB,EACAiC,CAAAA,CACAN,CAAAA,CAC0B,CAC1B,GAAM,CAAE,KAAA,CAAAO,CAAM,CAAA,CAAIlB,CAAAA,CACZmB,EAAc,IAAA,CAAK,GAAA,CAAID,CAAAA,EAAO,QAAA,EAAY,CAAA,CAAG,CAAC,EAEhDE,CAAAA,CACJ,IAAA,IAASjB,CAAAA,CAAU,CAAA,CAAGA,CAAAA,EAAWgB,CAAAA,CAAahB,IAC5C,GAAI,CACF,OAAO,MAAMH,CAAAA,CAAU,GAAGhB,CAAAA,CAAMiC,CAAO,CACzC,CAAA,MAASpB,CAAAA,CAAO,CAGd,GAFAuB,CAAAA,CAAYvB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,OAAOA,CAAK,CAAC,CAAA,CAEhEM,CAAAA,CAAUgB,CAAAA,CAAa,CACzB,IAAMX,CAAAA,CAAQN,EAAAA,CAAoBC,EAASe,CAAAA,EAAS,EAAE,CAAA,CACtD,MAAMT,EAAAA,CAAeD,CAAAA,CAAOG,CAAM,EACpC,CACF,CAKF,OAAO,CACL,MAAA,CAAQ,KAAA,CACR,OAAQ,CAAA,WAAA,EAAcX,CAAAA,CAAU,IAAI,CAAA,eAAA,EAAkBmB,CAAW,CAAA,aAAA,EAAgBC,EAAW,OAAO,CAAA,CACrG,CACF,CAcO,SAASC,GACdlB,CAAAA,CACAC,CAAAA,CACQ,CACR,GAAM,CACJ,OAAA,CAAAC,EAAU,aAAA,CACV,WAAA,CAAAC,CAAAA,CAAc,GAAA,CACd,UAAA,CAAAC,CAAAA,CAAa,GACf,CAAA,CAAIH,CAAAA,CACAI,CAAAA,CACJ,OAAQH,CAAAA,EACN,KAAK,aAAA,CACHG,CAAAA,CAAQF,EAAc,CAAA,GAAMH,CAAAA,CAAU,GACtC,MACF,KAAK,QAAA,CACHK,CAAAA,CAAQF,CAAAA,CAAcH,CAAAA,CACtB,MACF,QACEK,CAAAA,CAAQF,EACZ,CAEA,OAAO,KAAK,GAAA,CAAIE,CAAAA,CAAOD,CAAU,CACnC,CAoBA,eAAsBe,GACpBC,CAAAA,CACAC,CAAAA,CACAC,EACAhE,CAAAA,CACAiE,CAAAA,CACuB,CACvB,IAAMP,CAAAA,CAAc,IAAA,CAAK,GAAA,CAAIO,CAAAA,EAAa,QAAA,EAAY,EAAG,CAAC,CAAA,CACpDC,CAAAA,CAAcD,CAAAA,EAAa,WAAA,GAAgB,IAAM,MACjDE,CAAAA,CAAUF,CAAAA,EAAa,OAAA,CAEzBN,CAAAA,CACJ,IAAA,IAASjB,CAAAA,CAAU,EAAGA,CAAAA,EAAWgB,CAAAA,CAAahB,IAC5C,GAAI,CACF,OAAO,MAAMoB,CAAAA,CAAUC,CAAAA,CAAOC,CAAAA,CAAOhE,CAAO,CAC9C,OAASoC,CAAAA,CAAO,CAId,GAHAuB,CAAAA,CAAYvB,CAAAA,YAAiB,MAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,EAGhEM,CAAAA,CAAUgB,CAAAA,CAAa,CACzB,IAAIU,CAAAA,CAAY,KAChB,GAAI,CACFA,CAAAA,CAAYF,CAAAA,CAAYP,CAAS,EACnC,MAAQ,CAEN,KACF,CACA,GAAI,CAACS,CAAAA,CACH,MAEF,IAAMrB,CAAAA,CAAQa,EAAAA,CAAyBlB,CAAAA,CAASuB,CAAAA,EAAe,EAAE,CAAA,CACjE,GAAI,CACFE,CAAAA,GAAUzB,CAAAA,CAASiB,EAAWZ,CAAK,EACrC,CAAA,KAAQ,CAER,CACA,MAAMC,GAAeD,CAAAA,CAAO/C,CAAAA,EAAS,MAAM,EAC7C,CAAA,UAIF,CAGF,MAAM2D,CACR,CClMA,IAAMU,EAAAA,CAAkB,CACtB,WAAA,CAAa,EAAA,CACb,QAAS,EAAA,CACT,YAAA,CAAc,EAChB,CAAA,CAgBO,SAASC,EAAAA,CACd3B,CAAAA,CAA8B,EAAC,CAChB,CACf,IAAM4B,CAAAA,CAAW5B,CAAAA,CAAO,QAAA,EAAY,GAAA,CAC9B6B,CAAAA,CACJ7B,EAAO,kBAAA,EAAsB,GAAA,CACzB8B,CAAAA,CACJ9B,CAAAA,CAAO,iBAAA,EAAqB,GAAA,CACxB+B,EAAU,CACd,WAAA,CAAa/B,EAAO,OAAA,EAAS,WAAA,EAAe0B,GAAgB,WAAA,CAC5D,OAAA,CAAS1B,CAAAA,CAAO,OAAA,EAAS,OAAA,EAAW0B,EAAAA,CAAgB,QACpD,YAAA,CAAc1B,CAAAA,CAAO,SAAS,YAAA,EAAgB0B,EAAAA,CAAgB,YAChE,CAAA,CAGA,GAAI,CAAC,MAAA,CAAO,QAAA,CAASE,CAAQ,GAAKA,CAAAA,EAAY,CAAA,CAC5C,MAAM,IAAI,KAAA,CACR,8DACF,CAAA,CAEF,GAAI,CAAC,MAAA,CAAO,QAAA,CAASC,CAAkB,GAAKA,CAAAA,EAAsB,CAAA,CAChE,MAAM,IAAI,KAAA,CACR,wEACF,EAEF,GAAI,CAAC,MAAA,CAAO,QAAA,CAASC,CAAiB,CAAA,EAAKA,EAAoB,CAAA,CAC7D,MAAM,IAAI,KAAA,CAAM,0DAA0D,EAI5E,IAAA,GAAW,CAACnD,CAAAA,CAAKqD,CAAK,CAAA,GAAK,MAAA,CAAO,QAAQD,CAAO,CAAA,CAC/C,GAAIC,CAAAA,CAAQ,CAAA,EAAKA,EAAQ,CAAA,CACvB,MAAM,IAAI,KAAA,CACR,CAAA,kCAAA,EAAqCrD,CAAG,kCAAkCqD,CAAK,CAAA,CAAA,CACjF,EAKJ,IAAMC,CAAAA,CACJF,EAAQ,WAAA,CAAcA,CAAAA,CAAQ,OAAA,CAAUA,CAAAA,CAAQ,YAAA,CAClD,GAAI,KAAK,GAAA,CAAIE,CAAAA,CAAY,CAAG,CAAA,CAAI,GAAA,CAC9B,MAAM,IAAI,KAAA,CACR,CAAA,6EAAA,EAA6EA,CAAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,GACnG,CAAA,CAGF,IAAMzE,EAAS,IAAI,GAAA,CACb0E,EAAgB,IAAI,GAAA,CAGtBC,CAAAA,CAAa,CAAA,CACbC,CAAAA,CAAuD,IAAA,CACvDC,EAAY,EAAA,CAEhB,SAASC,EAAetE,CAAAA,CAAgC,CACtD,IAAIuE,CAAAA,CAAc/E,CAAAA,CAAO,GAAA,CAAIQ,CAAO,CAAA,CACpC,OAAKuE,IACHA,CAAAA,CAAc,GACd/E,CAAAA,CAAO,GAAA,CAAIQ,EAASuE,CAAW,CAAA,CAAA,CAG1BA,CACT,CAEA,SAASC,CAAAA,CAAYD,EAA4BE,CAAAA,CAAmB,CAElE,IAAMC,EAAAA,CAASD,CAAAA,CAAMb,CAAAA,CACjBe,GAAa,CAAA,CACjB,KACEA,EAAAA,CAAaJ,CAAAA,CAAY,MAAA,EACzBA,CAAAA,CAAYI,EAAU,CAAA,CAAG,SAAA,CAAYD,IAErCC,EAAAA,EAAAA,CAIF,IAAMC,GAAgBL,CAAAA,CAAY,MAAA,CAASI,EAAAA,CAAab,CAAAA,CACpDc,EAAAA,CAAgB,CAAA,GAClBD,IAAcC,EAAAA,CAAAA,CAIZD,EAAAA,CAAa,CAAA,EACfJ,CAAAA,CAAY,MAAA,CAAO,CAAA,CAAGI,EAAU,EAEpC,CAEA,SAASE,CAAAA,CAAa7E,CAAAA,CAAyB,CAC7C,IAAMuE,CAAAA,CAAc/E,CAAAA,CAAO,IAAIQ,CAAO,CAAA,CACtC,GAAI,CAACuE,CAAAA,EAAeA,CAAAA,CAAY,MAAA,GAAW,CAAA,CACzC,UAGF,IAAME,EAAAA,CAAM,IAAA,CAAK,GAAA,EAAI,CAGrB,GAFAD,EAAYD,CAAAA,CAAaE,EAAG,CAAA,CAExBF,CAAAA,CAAY,MAAA,GAAW,CAAA,CACzB,OAAO,EAAA,CAIT,IAAMO,GADYP,CAAAA,CAAY,MAAA,CAAQtE,IAAMA,EAAAA,CAAE,OAAO,CAAA,CAAE,MAAA,CACvBsE,CAAAA,CAAY,MAAA,CAEtCQ,GACJR,CAAAA,CAAY,MAAA,CAAO,CAACS,EAAAA,CAAG/E,EAAAA,GAAM+E,GAAI/E,EAAAA,CAAE,SAAA,CAAW,CAAC,CAAA,CAAIsE,CAAAA,CAAY,MAAA,CAC3DU,GAAoB,IAAA,CAAK,GAAA,CAAIF,GAAalB,CAAAA,CAAoB,CAAC,EAE/DqB,CAAAA,CAAQhB,CAAAA,CAAc,GAAA,CAAIlE,CAAO,CAAA,EAAK,QAAA,CACtCmF,GACJD,CAAAA,GAAU,QAAA,CAAW,CAAA,CAAIA,CAAAA,GAAU,WAAA,CAAc,EAAA,CAAM,EAEnDE,EAAAA,CACJN,EAAAA,CAAcf,CAAAA,CAAQ,WAAA,CAAA,CACrB,CAAA,CAAIkB,EAAAA,EAAqBlB,EAAQ,OAAA,CAClCoB,EAAAA,CAAepB,EAAQ,YAAA,CAEzB,OAAO,KAAK,KAAA,CAAMqB,EAAAA,CAAM,GAAG,CAC7B,CAEA,SAASC,GAAarF,CAAAA,CAAqC,CACzD,IAAMuE,CAAAA,CAAcD,CAAAA,CAAetE,CAAO,CAAA,CACpCyE,EAAAA,CAAM,IAAA,CAAK,GAAA,EAAI,CACrBD,CAAAA,CAAYD,EAAaE,EAAG,CAAA,CAE5B,IAAMa,EAAAA,CAAYf,CAAAA,CAAY,OAAQtE,EAAAA,EAAMA,EAAAA,CAAE,OAAO,CAAA,CAAE,MAAA,CACjDsF,EAAAA,CAAWhB,EAAY,MAAA,CAASe,EAAAA,CAChCR,EAAAA,CACJP,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAIe,GAAYf,CAAAA,CAAY,MAAA,CAAS,CAAA,CACtDiB,EAAAA,CACJjB,CAAAA,CAAY,MAAA,CAAS,EACjBA,CAAAA,CAAY,MAAA,CAAO,CAACS,EAAAA,CAAG/E,EAAAA,GAAM+E,GAAI/E,EAAAA,CAAE,SAAA,CAAW,CAAC,CAAA,CAAIsE,CAAAA,CAAY,MAAA,CAC/D,EAGAkB,CAAAA,CAAuB,GAC7B,IAAA,IACMlF,EAAAA,CAAIgE,EAAY,MAAA,CAAS,CAAA,CAC7BhE,EAAAA,EAAK,CAAA,EAAKkF,CAAAA,CAAW,MAAA,CAAS,EAC9BlF,EAAAA,EAAAA,CAEIgE,CAAAA,CAAYhE,EAAC,CAAA,CAAG,YAAA,EAClBkF,EAAW,OAAA,CAAQlB,CAAAA,CAAYhE,EAAC,CAAA,CAAG,YAAa,CAAA,CAIpD,OAAO,CACL,OAAA,CAAAP,CAAAA,CACA,YAAA,CAAckE,CAAAA,CAAc,GAAA,CAAIlE,CAAO,CAAA,EAAK,QAAA,CAC5C,WAAA,CAAA8E,EAAAA,CACA,YAAA,CAAAU,EAAAA,CACA,eAAgBD,EAAAA,CAChB,eAAA,CAAiBD,GACjB,WAAA,CAAaT,CAAAA,CAAa7E,CAAO,CAAA,CACjC,UAAA,CAAAyF,CACF,CACF,CAEA,OAAO,CACL,aAAA,CAAczF,CAAAA,CAAiB0F,CAAAA,CAAyB,CACtD,IAAMnB,EAAAA,CAAcD,EAAetE,CAAO,CAAA,CAC1CuE,EAAAA,CAAY,IAAA,CAAK,CAAE,OAAA,CAAS,KAAM,SAAA,CAAAmB,CAAAA,CAAW,UAAW,IAAA,CAAK,GAAA,EAAM,CAAC,CAAA,CAEpElB,CAAAA,CAAYD,EAAAA,CAAa,IAAA,CAAK,GAAA,EAAK,CAAA,CACnCJ,CAAAA,GACF,CAAA,CAEA,aAAA,CAAcnE,CAAAA,CAAiB0F,CAAAA,CAAmBjE,GAAqB,CACrE,IAAM8C,EAAAA,CAAcD,CAAAA,CAAetE,CAAO,CAAA,CAC1CuE,GAAY,IAAA,CAAK,CACf,QAAS,KAAA,CACT,SAAA,CAAAmB,EACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,YAAA,CAAcjE,EAAAA,EAAO,OACvB,CAAC,CAAA,CAED+C,EAAYD,EAAAA,CAAa,IAAA,CAAK,KAAK,CAAA,CACnCJ,CAAAA,GACF,CAAA,CAEA,UAAA,CAAWnE,CAAAA,CAAqC,CAC9C,OAAOqF,EAAAA,CAAarF,CAAO,CAC7B,CAAA,CAEA,eAAoD,CAElD,GAAImE,CAAAA,GAAeE,CAAAA,EAAaD,CAAAA,CAC9B,OAAOA,EAGT,IAAMuB,CAAAA,CAA6C,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACrE,QAAW3F,CAAAA,IAAWR,CAAAA,CAAO,IAAA,EAAK,CAChCmG,CAAAA,CAAO3F,CAAO,EAAIqF,EAAAA,CAAarF,CAAO,EAGxC,OAAAoE,CAAAA,CAAYuB,EACZtB,CAAAA,CAAYF,CAAAA,CAELwB,CACT,CAAA,CAEA,cAAA,CAAe3F,CAAAA,CAAyB,CACtC,OAAO6E,CAAAA,CAAa7E,CAAO,CAC7B,CAAA,CAEA,mBAAmBA,CAAAA,CAAiBkF,CAAAA,CAAiC,CACnEhB,CAAAA,CAAc,GAAA,CAAIlE,CAAAA,CAASkF,CAAK,CAAA,CAChCf,CAAAA,GACF,EAEA,KAAA,EAAc,CACZ3E,EAAO,KAAA,EAAM,CACb0E,CAAAA,CAAc,KAAA,EAAM,CACpBC,CAAAA,EAAAA,CACAC,EAAY,IAAA,CACZC,CAAAA,CAAY,GACd,CACF,CACF,CCpRA,SAASuB,EAAAA,CAAWC,CAAAA,CAA8B,CAChD,IAAMC,CAAAA,CAAkB,GAExB,GADID,CAAAA,CAAK,UAAUC,CAAAA,CAAM,IAAA,CAAKD,EAAK,QAAQ,CAAA,CACvCA,CAAAA,CAAK,IAAA,EAAM,MAAA,CACb,IAAA,IAAWE,KAAOF,CAAAA,CAAK,IAAA,CACjBE,IAAQF,CAAAA,CAAK,QAAA,EAAUC,EAAM,IAAA,CAAKC,CAAG,CAAA,CAI7C,OAAOD,CAAAA,CAAM,MAAA,CAAS,EAAI,CAAA,EAAA,EAAKA,CAAAA,CAAM,KAAK,IAAI,CAAC,IAAM,EACvD,CAGA,SAASE,EAAAA,CACP7E,CAAAA,CACA0E,CAAAA,CACe,CACf,GAAI,CAACA,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAMI,EAAQJ,CAAAA,CAAK,KAAA,EAAS1E,CAAAA,CACtB+E,CAAAA,CAAOL,CAAAA,CAAK,WAAA,CAAc,KAAKA,CAAAA,CAAK,WAAW,GAAK,EAAA,CACpDM,CAAAA,CAAOP,GAAWC,CAAI,CAAA,CAG5B,OAAO,CAAA,EAAA,EAFQA,CAAAA,CAAK,KAAA,CAAQ,GAAG1E,CAAE,CAAA,EAAA,EAAK8E,CAAK,CAAA,CAAA,CAAA,CAAM9E,CAE/B,CAAA,EAAG+E,CAAI,CAAA,EAAGC,CAAI,CAAA,CAClC,CAeO,SAASC,EAAAA,CAAiBC,EAAsC,CACrE,IAAMC,EAAqB,EAAC,CAGtBC,EAAgBF,CAAAA,CAAW,OAAA,CAC9B,GAAA,CAAK,CAAA,EAAML,EAAAA,CAAY,CAAA,CAAE,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA,CACpC,MAAA,CAAO,OAAO,EACbO,CAAAA,CAAc,MAAA,CAAS,CAAA,EACzBD,CAAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAgBC,EAAc,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,CAAE,CAAA,CAI1D,IAAMC,CAAAA,CAAoBH,CAAAA,CAAW,WAAA,CAClC,MAAA,CAAQI,CAAAA,EAAMA,CAAAA,CAAE,MAAA,EAAUA,CAAAA,CAAE,IAAI,CAAA,CAChC,GAAA,CAAKA,CAAAA,EAAMT,EAAAA,CAAYS,CAAAA,CAAE,EAAA,CAAIA,CAAAA,CAAE,IAAI,CAAC,CAAA,CACpC,MAAA,CAAO,OAAO,CAAA,CAMjB,GALID,CAAAA,CAAkB,MAAA,CAAS,CAAA,EAC7BF,EAAS,IAAA,CAAK,CAAA;AAAA,EAA2BE,EAAkB,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,CAAE,CAAA,CAIrEH,CAAAA,CAAW,KAAA,CAAM,MAAA,CAAS,CAAA,CAAG,CAC/B,IAAMK,CAAAA,CAAoB,IAAI,GAAA,CAC5BL,CAAAA,CAAW,YACR,MAAA,CAAQI,CAAAA,EAAMA,CAAAA,CAAE,IAAA,EAAM,KAAK,CAAA,CAC3B,GAAA,CAAKA,CAAAA,EAAM,CAACA,CAAAA,CAAE,EAAA,CAAIA,CAAAA,CAAE,IAAA,CAAM,KAAM,CAAC,CACtC,CAAA,CAEME,CAAAA,CAAaN,CAAAA,CAAW,KAAA,CAAM,GAAA,CAAK/E,CAAAA,EAAQ,CAC/C,IAAMsF,CAAAA,CACJF,CAAAA,CAAkB,GAAA,CAAIpF,CAAAA,CAAI,cAAc,CAAA,EAAKA,CAAAA,CAAI,cAAA,CAEnD,OAAO,CAAA,EAAA,EAAKA,CAAAA,CAAI,WAAA,CAAY,IAAI,CAAA,cAAA,EAAYsF,CAAe,CAAA,CAAA,CAC7D,CAAC,CAAA,CACDN,CAAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAA2BK,EAAW,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,CAAE,EAClE,CAGA,IAAME,EAAkBR,CAAAA,CAAW,YAAA,CAChC,GAAA,CAAKS,CAAAA,EAAMd,EAAAA,CAAYc,CAAAA,CAAE,GAAIA,CAAAA,CAAE,IAAI,CAAC,CAAA,CACpC,MAAA,CAAO,OAAO,EACbD,CAAAA,CAAgB,MAAA,CAAS,CAAA,EAC3BP,CAAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAkBO,EAAgB,IAAA,CAAK;AAAA,CAAI,CAAC,EAAE,CAAA,CAI9D,IAAME,EAAeV,CAAAA,CAAW,MAAA,CAC7B,GAAA,CAAKpG,CAAAA,EAAM+F,EAAAA,CAAY/F,CAAAA,CAAE,KAAMA,CAAAA,CAAE,IAAI,CAAC,CAAA,CACtC,MAAA,CAAO,OAAO,EACb8G,CAAAA,CAAa,MAAA,CAAS,CAAA,EACxBT,CAAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAeS,EAAa,IAAA,CAAK;AAAA,CAAI,CAAC,EAAE,CAAA,CAIxD,IAAMC,EAAcX,CAAAA,CAAW,KAAA,CAC5B,GAAA,CAAKY,CAAAA,EAAMjB,EAAAA,CAAYiB,CAAAA,CAAE,IAAKA,CAAAA,CAAE,IAAI,CAAC,CAAA,CACrC,MAAA,CAAO,OAAO,EACbD,CAAAA,CAAY,MAAA,CAAS,CAAA,EACvBV,CAAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAwBU,EAAY,IAAA,CAAK;AAAA,CAAI,CAAC,EAAE,CAAA,CAIhE,IAAME,EAAgBb,CAAAA,CAAW,OAAA,CAC9B,GAAA,CAAKpG,CAAAA,EAAM+F,EAAAA,CAAY/F,CAAAA,CAAE,GAAIA,CAAAA,CAAE,IAAI,CAAC,CAAA,CACpC,MAAA,CAAO,OAAO,EACbiH,CAAAA,CAAc,MAAA,CAAS,CAAA,EACzBZ,CAAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAgBY,EAAc,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,CAAE,CAAA,CAI1D,IAAMC,CAAAA,CAAoBd,EAAW,WAAA,CAClC,GAAA,CAAKe,CAAAA,EAAMpB,EAAAA,CAAYoB,CAAAA,CAAE,EAAA,CAAIA,EAAE,IAAI,CAAC,CAAA,CACpC,MAAA,CAAO,OAAO,CAAA,CAKjB,OAJID,CAAAA,CAAkB,MAAA,CAAS,CAAA,EAC7Bb,CAAAA,CAAS,IAAA,CAAK,CAAA;AAAA,EAAoBa,EAAkB,IAAA,CAAK;AAAA,CAAI,CAAC,CAAA,CAAE,CAAA,CAG9Db,CAAAA,CAAS,MAAA,GAAW,EACf,EAAA,CAGF,CAAA;;AAAA,EAAwBA,EAAS,IAAA,CAAK;;AAAA,CAAM,CAAC,CAAA,CACtD,CAgBO,SAASe,EAAAA,CAAYC,CAAAA,CAEjB,CACT,OAAOlB,EAAAA,CAAiBkB,CAAAA,CAAO,OAAA,EAAS,CAC1C,CCyZO,IAAMC,EAAAA,CAAN,cAA6B,KAAM,CAC/B,KACA,aAAA,CACA,aAAA,CACA,WAAA,CAEA,SAAA,CAGT,WAAA,CAAYlI,CAAAA,CAUT,CACD,KAAA,CAAMA,CAAAA,CAAQ,OAAA,CAAS,CAAE,KAAA,CAAOA,CAAAA,CAAQ,KAAM,CAAC,CAAA,CAC/C,KAAK,IAAA,CAAO,gBAAA,CACZ,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAQ,IAAA,CACpB,IAAA,CAAK,aAAA,CAAgBA,CAAAA,CAAQ,aAAA,CAC7B,IAAA,CAAK,aAAA,CAAgBA,CAAAA,CAAQ,aAAA,CAC7B,IAAA,CAAK,WAAA,CAAcA,EAAQ,WAAA,EAAeA,CAAAA,CAAQ,OAAA,CAClD,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAQ,SAAA,CAEzB,MAAA,CAAO,cAAA,CAAe,IAAA,CAAM,OAAA,CAAS,CACnC,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CACf,UAAA,CAAY,MACZ,QAAA,CAAU,KAAA,CACV,YAAA,CAAc,KAChB,CAAC,CAAA,CACD,MAAA,CAAO,cAAA,CAAe,IAAA,CAAM,MAAA,CAAQ,CAClC,KAAA,CAAOA,CAAAA,CAAQ,IAAA,CACf,UAAA,CAAY,KAAA,CACZ,SAAU,KAAA,CACV,YAAA,CAAc,KAChB,CAAC,EACH,CAEA,MAAA,EAAkC,CAChC,OAAO,CACL,IAAA,CAAM,IAAA,CAAK,IAAA,CACX,IAAA,CAAM,IAAA,CAAK,IAAA,CACX,QAAS,IAAA,CAAK,OAAA,CACd,aAAA,CAAe,IAAA,CAAK,aAAA,CACpB,aAAA,CAAe,IAAA,CAAK,aAAA,CACpB,YAAa,IAAA,CAAK,WAAA,CAClB,SAAA,CAAW,IAAA,CAAK,SAClB,CACF,CACF,EAGO,SAASmI,EAAAA,CAAiB/F,CAAAA,CAAyC,CACxE,OAAOA,CAAAA,YAAiB8F,EAC1B,CAqBO,IAAME,EAAAA,CAAY,SAAA,CACZC,EAAAA,CAAe,YAAA,CACfC,EAAAA,CAAmB,gBAAA,CACnBC,EAAAA,CAAiB,aAAA,CACjBC,GAAiB,gBA2kBvB,IAAMC,EAAAA,CAAiB,cAAA,CA0YjBC,EAAAA,CAA2B,CACtC,KAAA,CAAO,CACL,CAACN,EAAS,EAAGO,MAAAA,CAAE,MAAA,EAAO,CACtB,CAACN,EAAY,EAAGM,MAAAA,CAAE,MAAA,EAAO,CACzB,CAACL,EAAgB,EAAGK,MAAAA,CAAE,KAAA,EAAM,CAC5B,CAACJ,EAAc,EAAGI,MAAAA,CAAE,KAAA,EAAM,CAC1B,CAACH,EAAc,EAAGG,MAAAA,CAAE,MAAA,EACtB,CAAA,CACA,WAAA,CAAa,EAAC,CACd,MAAA,CAAQ,EAAC,CACT,YAAA,CAAc,EAChB,EC9jDO,SAASC,GAAcC,CAAAA,CAAwB,CACpD,OAAOC,0BAAAA,CAA0BD,CAAAA,CAAOT,EAAS,CACnD,CAIO,SAASW,EAAAA,CAAcF,CAAAA,CAAYhD,CAAAA,CAAyB,CACjEmD,0BAAAA,CAAcH,CAAAA,CAAOT,EAAAA,CAAWvC,CAAK,EACvC,CAIO,SAASoD,EAAAA,CAAiBJ,CAAAA,CAA2B,CAC1D,OAAOC,0BAAAA,CAA6BD,CAAAA,CAAOR,EAAY,CACzD,CAIO,SAASa,EAAAA,CAAiBL,CAAAA,CAAYhD,CAAAA,CAA4B,CACvEmD,0BAAAA,CAAcH,CAAAA,CAAOR,EAAAA,CAAcxC,CAAK,EAC1C,CAIO,SAASsD,EAAAA,CAAgBN,CAAAA,CAAuB,CACrD,OAAOC,0BAAAA,CAAyBD,CAAAA,CAAOP,EAAgB,CACzD,CAIO,SAASc,EAAAA,CAAgBP,CAAAA,CAAYQ,CAAAA,CAA2B,CACrEL,0BAAAA,CAAcH,CAAAA,CAAOP,EAAAA,CAAkBe,CAAQ,EACjD,CAIO,SAASC,EAAAA,CAAaT,CAAAA,CAAwB,CACnD,OAAOC,0BAAAA,CAA0BD,CAAAA,CAAON,EAAc,CACxD,CAIO,SAASgB,EAAAA,CAAaV,CAAAA,CAAYW,CAAAA,CAA6B,CACpER,0BAAAA,CAAcH,CAAAA,CAAON,EAAAA,CAAgBiB,CAAS,EAChD,CAmBO,SAASC,EAAAA,CAAmBZ,CAAAA,CAA6B,CAC9D,OAAOC,0BAAAA,CAA+BD,CAAAA,CAAOL,EAAc,CAC7D,CAIO,SAASkB,EAAAA,CAAmBb,CAAAA,CAAYhD,CAAAA,CAA8B,CAC3EmD,0BAAAA,CAAcH,CAAAA,CAAOL,EAAAA,CAAgB3C,CAAK,EAC5C,CAIO,SAAS8D,EAAAA,CAAqBd,CAAAA,CAA+B,CAClE,OAAO,CACL,KAAA,CAAOD,EAAAA,CAAcC,CAAK,CAAA,CAC1B,QAAA,CAAUI,EAAAA,CAAiBJ,CAAK,CAAA,CAChC,YAAA,CAAcM,EAAAA,CAAgBN,CAAK,CAAA,CACnC,SAAA,CAAWS,EAAAA,CAAaT,CAAK,CAC/B,CACF,CAQO,SAASe,EAAAA,CAEdC,CAAAA,CAA6E,CAE7E,IAAMvD,CAAAA,CAA8B,MAAA,CAAO,MAAA,CAAO,IAAI,EAEtD,IAAA,GAAW,CAACxE,CAAAA,CAAIgI,CAAU,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQD,CAAW,CAAA,CACvDvD,CAAAA,CAAOxE,CAAE,CAAA,CAAI,CACX,QAAA,CAAUgI,CAAAA,CAAW,QAAA,EAAY,EAEjC,IAAA,CAAOjB,CAAAA,EAAe,CACpB,IAAMhD,CAAAA,CAAQ8D,EAAAA,CAAqBd,CAAK,CAAA,CAClCkB,CAAAA,CAAgB,CAAE,GAAGlB,CAAAA,CAAO,GAAGhD,CAAM,CAAA,CAG3C,OAAOiE,EAAW,IAAA,CAAKC,CAAa,CACtC,CAAA,CAEA,OAAA,CAAUlB,CAAAA,EAAe,CACvB,IAAMhD,CAAAA,CAAQ8D,EAAAA,CAAqBd,CAAK,CAAA,CAClCkB,CAAAA,CAAgB,CAAE,GAAGlB,CAAAA,CAAO,GAAGhD,CAAM,CAAA,CAG3C,OAAO,OAAOiE,CAAAA,CAAW,OAAA,EAAY,UAAA,CACjCA,CAAAA,CAAW,QAAQC,CAAa,CAAA,CAChCD,CAAAA,CAAW,OACjB,CACF,CAAA,CAGF,OAAOxD,CACT,CAIO,SAAS0D,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CAOAC,CAAAA,CACqB,CAErB,IAAM7D,CAAAA,CAA8B,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAEtD,IAAA,GAAW,CAACxE,CAAAA,CAAIE,CAAQ,IAAK,MAAA,CAAO,OAAA,CAAQiI,CAAS,CAAA,CACnD3D,CAAAA,CAAOxE,CAAE,CAAA,CAAI,CACX,WAAA,CAAaE,CAAAA,CAAS,WAAA,CACtB,GAAA,CAAKA,CAAAA,CAAS,GAAA,CAEd,OAAA,CAAS,MAAOC,EAAkBuB,CAAAA,GAAiB,CACjD,IAAMqC,CAAAA,CAAQ8D,EAAAA,CAAqBnG,CAAAA,CAAQ,KAAK,CAAA,CAI1C4G,CAAAA,CAAsD,CAC1D,KAAA,CAJoB,CAAE,GAAG5G,CAAAA,CAAQ,KAAA,CAAO,GAAGqC,CAAM,CAAA,CAKjD,QAAA,CAAU,MACR9B,CAAAA,CACAC,CAAAA,CACAqG,CAAAA,GAEOH,CAAAA,CACLnG,CAAAA,CACAC,EACA2F,EAAAA,CAAqBQ,CAAAA,EAAgB,CAAA,CAErCE,CACF,CAAA,CAEF,MAAA,CAAQ7G,CAAAA,CAAQ,MAClB,CAAA,CACA,MAAMxB,CAAAA,CAAS,OAAA,CAAQC,CAAAA,CAAKmI,CAAmB,EACjD,CACF,CAAA,CAGF,OAAO9D,CACT,CCvIO,IAAMgE,EAAAA,CAAN,cAAuC,KAAM,CACzC,UAAA,CACA,OAAA,CACA,UAAA,CACA,WAAA,CAET,WAAA,CAAYtK,CAAAA,CAKT,CACD,KAAA,CACE,CAAA,iCAAA,EAAoCA,CAAAA,CAAQ,UAAU,CAAA,uDAAA,EAClCA,CAAAA,CAAQ,OAAA,CAAQA,CAAAA,CAAQ,OAAA,CAAQ,OAAS,CAAC,CAAA,EAAG,QAAA,EAAY,QAAQ,CAAA,CACvF,CAAA,CACA,IAAA,CAAK,IAAA,CAAO,0BAAA,CACZ,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAQ,UAAA,CAC1B,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAQ,QACvB,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAQ,UAAA,CAC1B,IAAA,CAAK,WAAA,CAAcA,CAAAA,CAAQ,YAC7B,CACF,EAOA,SAASuK,EAAAA,CACPvG,CAAAA,CACAwG,CAAAA,CACAC,CAAAA,CACQ,CACR,OAAO,GAAGzG,CAAK;;AAAA;AAAA,EAA4CwG,CAAQ;;AAAA,6BAAA,CACrE,CAqBO,SAASE,EAAAA,CACd5G,CAAAA,CACAnB,EACa,CACb,IAAMgI,CAAAA,CAAgBhI,CAAAA,CAAO,aAAA,EAAiB,CAAA,CACxCiI,CAAAA,CAAkBjI,CAAAA,CAAO,iBAAmB4H,EAAAA,CAC5CM,CAAAA,CAAclI,CAAAA,CAAO,WAAA,EAAe,aAAA,CAE1C,GAAIgI,CAAAA,CAAgB,CAAA,CAClB,MAAM,IAAI,KAAA,CAAM,mDAAmD,CAAA,CAGrE,OACE,OAAO,OAAA,CAAY,GAAA,EACnB,QAAQ,GAAA,EAAK,QAAA,GAAa,YAAA,EAC1BA,CAAAA,CAAgB,CAAA,EAEhB,OAAA,CAAQ,IAAA,CACN,oIAEF,EAGK,MACL5G,CAAAA,CACAC,CAAAA,CACAhE,CAAAA,GAC0B,CAC1B,IAAM8K,CAAAA,CAAkC,GACpCC,CAAAA,CAAiB/G,CAAAA,CACjBgH,CAAAA,CAAoB,CAAA,CACpBC,CAAAA,CAAwC,IAAA,CAE5C,IAAA,IAASC,CAAAA,CAAY,EAAGA,CAAAA,CAAYP,CAAAA,CAAeO,CAAAA,EAAAA,CAAa,CAC9D,IAAMC,CAAAA,CAAiB,IAAA,CAAK,GAAA,GAGtB7E,EAAAA,CAAS,MAAMxC,CAAAA,CAAOC,CAAAA,CAAOgH,CAAAA,CAAgB/K,CAAO,CAAA,CAC1DiL,CAAAA,CAAa3E,GACb0E,CAAAA,EAAqB1E,EAAAA,CAAO,WAAA,CAG5B,IAAM9C,CAAAA,CAA6B,CACjC,KAAA,CAAAQ,CAAAA,CACA,UAAAkH,CAAAA,CACA,MAAA,CAAA5E,EAAAA,CACA,OAAA,CAAS,CAAC,GAAGwE,CAAO,CACtB,EAEMM,CAAAA,CAAa,MAAMzI,CAAAA,CAAO,QAAA,CAAS2D,EAAAA,CAAO,MAAA,CAAa9C,CAAO,CAAA,CACpEsH,EAAQ,IAAA,CAAKM,CAAU,CAAA,CAEvB,IAAMC,EAAAA,CAAa,IAAA,CAAK,GAAA,EAAI,CAAIF,EAGhC,GAAI,CACFxI,CAAAA,CAAO,WAAA,GAAc,CACnB,SAAA,CAAAuI,CAAAA,CACA,MAAA,CAAQE,EAAW,MAAA,CACnB,QAAA,CAAUA,CAAAA,CAAW,QAAA,CACrB,KAAA,CAAOA,CAAAA,CAAW,KAAA,CAClB,UAAA,CAAAC,EACF,CAAC,EACH,CAAA,KAAQ,CAER,CAEA,GAAID,CAAAA,CAAW,MAAA,CAEb,OAAO,CACL,GAAG9E,EAAAA,CACH,WAAA,CAAa0E,CACf,CAAA,CAIF,GACErI,CAAAA,CAAO,eAAA,GAAoB,QAC3BqI,CAAAA,EAAqBrI,CAAAA,CAAO,eAAA,CAE5B,MAIEuI,CAAAA,CAAYP,CAAAA,CAAgB,CAAA,EAAKS,CAAAA,CAAW,WAC9CL,CAAAA,CAAiBH,CAAAA,CAAgB5G,CAAAA,CAAOoH,CAAAA,CAAW,QAAA,CAAUF,CAAS,CAAA,EAE1E,CAGA,GAAIL,CAAAA,GAAgB,OAAA,CAClB,MAAM,IAAIP,EAAAA,CAAyB,CACjC,UAAA,CAAYK,CAAAA,CACZ,QAAAG,CAAAA,CACA,UAAA,CAAYG,CAAAA,CACZ,WAAA,CAAaD,CACf,CAAC,CAAA,CAIH,OAAO,CACL,GAAGC,CAAAA,CACH,WAAA,CAAaD,CACf,CACF,CACF,CCtKO,IAAMM,EAAAA,CAAyB,GAAA,CAMlCC,EAAAA,CAAoB,EAGjB,SAASC,EAAAA,EAA6B,CAC3C,OAAO,CAAA,GAAA,EAAM,IAAA,CAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAC,CAAA,CAAA,EAAA,CAAK,EAAED,EAAAA,EAAmB,QAAA,CAAS,EAAE,CAAC,EAC5E,CAMO,SAASE,EAAAA,CACdC,CAAAA,CACA7K,CAAAA,CACA2C,CAAAA,CAC4B,CAC5B,IAAA,IAAWmI,KAAMD,CAAAA,CACf,GAAIC,CAAAA,CAAG,IAAA,GAAS9K,CAAAA,CAKhB,CAAA,GAAI,CAAC8K,CAAAA,CAAG,KACN,OAAOA,CAAAA,CAIT,GAAI,CACF,GAAIA,CAAAA,CAAG,IAAA,CAAKnI,CAAO,EACjB,OAAOmI,CAEX,CAAA,KAAQ,CAER,CAAA,CAGF,OAAO,IACT,CAeO,SAASC,EAAAA,EAAgD,CAC9D,OAAO,CACL,OAAA,CAAS,EAAC,CACV,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EACb,CACF,CCpEA,IAAMC,EAAAA,CAAe,IAAI,GAAA,CAAI,CAC3B,WAAA,CACA,aAAA,CACA,YACA,UAAA,CACA,SAAA,CACA,gBACF,CAAC,EAGM,SAASC,EAAAA,EAA6B,CAC3C,IAAMC,CAAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAA,CAClCC,CAAAA,CAAS,MAAA,CAAO,UAAA,EAAW,CAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAE7C,OAAO,CAAA,KAAA,EAAQD,CAAS,CAAA,CAAA,EAAIC,CAAM,CAAA,CACpC,CAGO,SAASC,EAAAA,CAAmB1K,CAAAA,CAAmC,CACpE,GAAI,CAACA,CAAAA,EAAQ,OAAOA,CAAAA,EAAS,SAC3B,OAAO,MAAA,CAIT,IAAA,IAAWD,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKC,CAAI,CAAA,CAChC,GAAIsK,EAAAA,CAAa,GAAA,CAAIvK,CAAG,CAAA,CACtB,OAAO,MAAA,CAIX,IAAM4K,CAAAA,CAAM3K,EAsBZ,GApBI2K,CAAAA,CAAI,OAAA,GAAY,CAAA,EAIhB,OAAOA,CAAAA,CAAI,EAAA,EAAO,QAAA,EAAYA,EAAI,EAAA,CAAG,MAAA,GAAW,CAAA,EAIhD,OAAOA,CAAAA,CAAI,SAAA,EAAc,QAAA,EAIzB,OAAOA,EAAI,YAAA,EAAiB,QAAA,EAI5BA,CAAAA,CAAI,cAAA,GAAmB,IAAA,EAAQ,OAAOA,CAAAA,CAAI,cAAA,EAAmB,UAI7D,CAACA,CAAAA,CAAI,UAAA,EAAc,OAAOA,CAAAA,CAAI,UAAA,EAAe,QAAA,CAC/C,OAAO,OAIT,IAAA,IAAW5K,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAK4K,CAAAA,CAAI,UAAU,CAAA,CAC1C,GAAIL,GAAa,GAAA,CAAIvK,CAAG,CAAA,CACtB,OAAO,MAAA,CAIX,IAAM6K,CAAAA,CAAaD,CAAAA,CAAI,WAKvB,OAJI,EAAAC,CAAAA,CAAW,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAW,IAAA,GAAS,OAAA,EAIpDD,EAAI,gBAAA,GAAqB,QAAA,EAAYA,CAAAA,CAAI,gBAAA,GAAqB,OAAA,CAKpE,CA+BO,IAAME,EAAAA,CAAN,KAAyD,CAC7C,KAAA,CAAQ,IAAI,GAAA,CACZ,KAAA,CAAkB,EAAC,CACnB,cAAA,CACA,YACA,eAAA,CAEjB,WAAA,CAAYpM,CAAAA,CAA0C,CAKpD,GAJA,IAAA,CAAK,cAAA,CAAiBA,CAAAA,EAAS,cAAA,EAAkB,IACjD,IAAA,CAAK,WAAA,CAAcA,CAAAA,EAAS,WAAA,EAAe,MAAA,CAAO,iBAAA,CAClD,IAAA,CAAK,eAAA,CAAkBA,GAAS,eAAA,EAAmB,KAAA,CAE/C,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,cAAc,CAAA,EAAK,KAAK,cAAA,CAAiB,CAAA,CACjE,MAAM,IAAI,KAAA,CACR,CAAA,wDAAA,EAA2D,IAAA,CAAK,cAAc,EAChF,CAEJ,CAEA,MAAM,IAAA,CAAKqM,CAAAA,CAAyC,CAClD,GAAI,CAACJ,GAAmBI,CAAU,CAAA,CAChC,MAAM,IAAI,KAAA,CAAM,gDAAgD,CAAA,CAIlE,KAAO,KAAK,KAAA,CAAM,MAAA,EAAU,IAAA,CAAK,cAAA,EACf,IAAA,CAAK,WAAA,EAAY,EACjC,CAMF,IAAMC,CAAAA,CAAc,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQD,CAAAA,CAAW,EAAE,CAAA,CACpD,OAAIC,GAAe,CAAA,EACjB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAAA,CAAa,CAAC,CAAA,CAGlC,IAAA,CAAK,MAAM,GAAA,CAAID,CAAAA,CAAW,EAAA,CAAIA,CAAU,CAAA,CACxC,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,EAAW,EAAE,CAAA,CAEtBA,CAAAA,CAAW,EACpB,CAEA,MAAM,IAAA,CAAKE,CAAAA,CAAkD,CAC3D,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAY,CAAA,EAAK,IACzC,CAEA,MAAM,IAAA,EAEJ,CACA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAKzK,CAAAA,EAAO,CAC5B,IAAM0K,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI1K,CAAE,CAAA,CAE5B,OAAO,CAAE,GAAI0K,CAAAA,CAAG,EAAA,CAAI,KAAA,CAAOA,CAAAA,CAAG,KAAA,CAAO,SAAA,CAAWA,CAAAA,CAAG,SAAU,CAC/D,CAAC,CACH,CAEA,MAAM,MAAA,CAAOD,CAAAA,CAAwC,CACnD,GAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAY,EAC9B,OAAO,MAAA,CAGT,IAAA,CAAK,KAAA,CAAM,OAAOA,CAAY,CAAA,CAC9B,IAAM/J,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ+J,CAAY,EAC7C,OAAI/J,CAAAA,EAAS,CAAA,EACX,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAAA,CAAO,CAAC,EAGrB,IACT,CAEA,MAAM,KAAA,EAAuB,CAC3B,IAAA,CAAK,KAAA,CAAM,KAAA,GACX,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,EACtB,CAEA,MAAM,KAAA,EAAyB,CAC7B,GAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CACnC,OAAO,CAAA,CAGT,IAAM6C,CAAAA,CAAS,IAAA,CAAK,GAAA,EAAI,CAAI,IAAA,CAAK,WAAA,CAC7BoH,CAAAA,CAAS,CAAA,CAGPC,EAAqB,EAAC,CAC5B,IAAA,IAAW5K,CAAAA,IAAM,IAAA,CAAK,KAAA,CAAO,CAC3B,IAAM0K,EAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI1K,CAAE,CAAA,CAC5B,GAAI,CAAC0K,CAAAA,CACH,SAIF,GADoB,IAAI,IAAA,CAAKA,CAAAA,CAAG,SAAS,CAAA,CAAE,OAAA,EAAQ,EAChCnH,EACjB,MAIE,IAAA,CAAK,eAAA,EAAmBmH,CAAAA,CAAG,KAAA,EAI/BE,CAAAA,CAAS,IAAA,CAAK5K,CAAE,EAClB,CAEA,IAAA,IAAWA,CAAAA,IAAM4K,CAAAA,CAAU,CACzB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO5K,CAAE,CAAA,CACpB,IAAM6K,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ7K,CAAE,CAAA,CAC7B6K,GAAO,CAAA,EACT,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAAA,CAAK,CAAC,CAAA,CAE1BF,CAAAA,GACF,CAEA,OAAOA,CACT,CAGQ,WAAA,EAAuB,CAC7B,GAAI,IAAA,CAAK,eAAA,CAEP,QAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAI,IAAA,CAAK,KAAA,CAAM,MAAA,CAAQ,CAAA,EAAA,CAAK,CAC1C,IAAM3K,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAC,EACjB0K,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI1K,CAAE,CAAA,CAC5B,GAAI0K,CAAAA,EAAM,CAACA,CAAAA,CAAG,KAAA,CACZ,OAAA,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,CAAG,CAAC,CAAA,CACtB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO1K,CAAE,CAAA,CAEb,IAEX,CAKF,IAAM8K,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAM,KAAA,EAAM,CAChC,OAAIA,GACF,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAM,CAAA,CAEjB,IAAA,EAGF,KACT,CACF,EC1HA,IAAMC,EAAAA,CAAN,KAAsB,CACZ,MAAA,CAAc,EAAC,CACf,OAAA,CACA,SACA,WAAA,CAAgD,EAAC,CACjD,WAAA,CAAiC,EAAC,CAClC,MAAA,CAAS,KAAA,CACT,aAAe,CAAA,CAEvB,WAAA,CACEC,CAAAA,CAAiC,QAAA,CACjCC,CAAAA,CAAU,GAAA,CACV,CACA,IAAA,CAAK,SAAWD,CAAAA,CAChB,IAAA,CAAK,OAAA,CAAUC,EACjB,CAEA,MAAM,IAAA,CAAKC,CAAAA,CAA2B,CACpC,GAAI,IAAA,CAAK,MAAA,CACP,OAAO,MAAA,CAIT,IAAMC,CAAAA,CAAa,IAAA,CAAK,YAAY,KAAA,EAAM,CAC1C,GAAIA,CAAAA,CACF,OAAAA,CAAAA,CAAWD,CAAI,CAAA,CACR,KAIT,GAAI,IAAA,CAAK,MAAA,CAAO,MAAA,EAAU,IAAA,CAAK,OAAA,CAC7B,OAAQ,IAAA,CAAK,UACX,KAAK,MAAA,CACH,OAAA,IAAA,CAAK,YAAA,EAAA,CACE,KAAA,CACT,KAAK,OAAA,CAKH,GAHA,MAAM,IAAI,OAAA,CAAe7J,CAAAA,EAAY,CACnC,IAAA,CAAK,WAAA,CAAY,IAAA,CAAKA,CAAO,EAC/B,CAAC,CAAA,CACG,IAAA,CAAK,MAAA,CACP,OAAO,MAAA,CAET,MAIJ,CAGF,OAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK6J,CAAI,CAAA,CACd,IACT,CAEA,MAAM,IAAA,EAA0B,CAE9B,IAAME,CAAAA,CAAa,IAAA,CAAK,WAAA,CAAY,KAAA,GAKpC,OAJIA,CAAAA,EACFA,CAAAA,EAAW,CAGT,IAAA,CAAK,MAAA,CAAO,MAAA,CAAS,CAAA,CAChB,KAAK,MAAA,CAAO,KAAA,EAAM,CAGvB,IAAA,CAAK,MAAA,CACA,IAAA,CAIF,IAAI,OAAA,CAAmB/J,GAAY,CACxC,IAAA,CAAK,WAAA,CAAY,IAAA,CAAKA,CAAO,EAC/B,CAAC,CACH,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,MAAA,CAAS,IAAA,CAEd,IAAA,IAAWgK,CAAAA,IAAU,IAAA,CAAK,YACxBA,CAAAA,CAAO,IAAI,CAAA,CAEb,IAAA,CAAK,WAAA,CAAc,EAAC,CAEpB,IAAA,IAAWA,KAAU,IAAA,CAAK,WAAA,CACxBA,CAAAA,EAAO,CAET,IAAA,CAAK,WAAA,CAAc,GACrB,CAEA,eAAA,EAA0B,CACxB,OAAO,IAAA,CAAK,YACd,CACF,CAAA,CAaO,SAASC,GACdC,CAAAA,CACArN,CAAAA,CAEI,EAAC,CACS,CACd,GAAM,CAAE,mBAAA,CAAAsN,EAAsB,EAAG,CAAA,CAAItN,CAAAA,CAErC,OAAO,CACL+D,CAAAA,CACAC,CAAAA,CACAuJ,EAA+B,EAAC,GACN,CAC1B,GAAM,CACJ,MAAA,CAAArK,CAAAA,CACA,YAAA,CAAAsK,EAAe,QAAA,CACf,UAAA,CAAAC,CAAAA,CAAa,GAAA,CACb,sBAAA,CAAAC,CAAAA,CAAyB,EAAA,CACzB,eAAA,CAAAC,EAAkB,IACpB,CAAA,CAAIJ,CAAAA,CAGJ,GACEG,CAAAA,EAA0B,CAAA,EAC1B,CAAC,MAAA,CAAO,SAASA,CAAsB,CAAA,CAEvC,MAAM,IAAI,KAAA,CACR,CAAA,4EAAA,EAA+EA,CAAsB,CAAA,CACvG,EAGF,IAAME,CAAAA,CAAS,IAAIf,EAAAA,CAA0BW,CAAAA,CAAcC,CAAU,CAAA,CAC/DI,CAAAA,CAAkB,IAAI,eAAA,CACxBC,CAAAA,CAAgB,EAAA,CAChBC,EAAAA,CAAa,CAAA,CACbC,CAAAA,CAAU,KAAA,CACR9L,CAAAA,CAAY,KAAK,GAAA,EAAI,CAGvB+L,EAAAA,CACA/K,CAAAA,GACF+K,GAAe,IAAMJ,CAAAA,CAAgB,KAAA,EAAM,CAC3C3K,EAAO,gBAAA,CAAiB,OAAA,CAAS+K,EAAY,CAAA,CAAA,CAI/C,IAAMC,EAAAA,CAAU,IAAM,CAChBD,IAAgB/K,CAAAA,EAClBA,CAAAA,CAAO,mBAAA,CAAoB,OAAA,CAAS+K,EAAY,EAEpD,CAAA,CAGA,eAAeE,IAA2D,CACxE,IAAA,IAAW5L,CAAAA,IAAa+K,CAAAA,CACtB,GAAI,CACF,IAAMhH,EAAAA,CAAS,MAAM/D,CAAAA,CAAU,KAAA,CAAMuL,CAAAA,CAAeC,EAAU,CAAA,CAC9D,GAAI,CAACzH,EAAAA,CAAO,OAAQ,CAClB,IAAM8H,EAAAA,CAAa7L,CAAAA,CAAU,UAAA,GAAe,CAAA,CAAA,CACtC8L,EAAAA,CAAiC,CACrC,KAAM,qBAAA,CACN,aAAA,CAAe9L,CAAAA,CAAU,IAAA,CACzB,MAAA,CAAQ+D,EAAAA,CAAO,MAAA,EAAU,wBAAA,CACzB,cAAAwH,CAAAA,CACA,OAAA,CAASM,EACX,CAAA,CAEA,OAAA,MAAMR,CAAAA,CAAO,IAAA,CAAKS,EAAK,EAEnBD,EAAAA,EAAAA,CAEA,OAAOT,CAAAA,EAAoB,UAAA,CACvBA,CAAAA,CACA,IAAMA,CAAAA,EACDU,EAAK,IACdL,CAAAA,CAAU,CAAA,CAAA,CACVH,CAAAA,CAAgB,KAAA,EAAM,CAAA,CAInBQ,EACT,CACF,CAAA,KAAQ,CAGR,CAEF,OAAO,IACT,CAGA,IAAMC,EAAAA,CAAAA,CAAiB,SAAmC,CACxD,MAAMV,CAAAA,CAAO,IAAA,CAAK,CAChB,IAAA,CAAM,UAAA,CACN,KAAA,CAAO,UAAA,CACP,OAAA,CAAS,gBACX,CAAC,CAAA,CAED,GAAI,CACF,IAAMtH,CAAAA,CAAS,MAAM+G,CAAAA,CAAWtJ,EAAOC,CAAAA,CAAO,CAC5C,MAAA,CAAQ6J,CAAAA,CAAgB,MAAA,CACxB,OAAA,CAAS,MAAOU,EAAAA,EAAU,CACpBP,CAAAA,GAEJD,EAAAA,EAAAA,CACAD,CAAAA,EAAiBS,EAAAA,CAEjB,MAAMX,CAAAA,CAAO,IAAA,CAAK,CAChB,KAAM,OAAA,CACN,IAAA,CAAMW,EAAAA,CACN,UAAA,CAAAR,EACF,CAAC,CAAA,CAGGA,EAAAA,CAAaL,IAA2B,CAAA,EAC1C,MAAMS,EAAAA,EAAgB,EAE1B,EACA,WAAA,CAAa,MAAOK,EAAAA,CAAM1M,EAAAA,CAAI2M,KAAS,CACrC,MAAMb,CAAAA,CAAO,IAAA,CAAK,CAChB,IAAA,CAAM,UAAA,CACN,KAAA,CAAO,eACP,OAAA,CAAS,CAAA,QAAA,EAAWY,EAAI,CAAA,CAC1B,CAAC,CAAA,CACD,MAAMZ,CAAAA,CAAO,KAAK,CAChB,IAAA,CAAM,YAAA,CACN,IAAA,CAAAY,EAAAA,CACA,UAAA,CAAY1M,EAAAA,CACZ,SAAA,CAAW2M,EACb,CAAC,EACH,CAAA,CACA,SAAA,CAAW,MAAOD,EAAAA,CAAM1M,EAAAA,CAAIwE,EAAAA,GAAW,CACrC,MAAMsH,CAAAA,CAAO,IAAA,CAAK,CAChB,IAAA,CAAM,UAAA,CACN,IAAA,CAAAY,EAAAA,CACA,WAAY1M,EAAAA,CACZ,MAAA,CAAAwE,EACF,CAAC,CAAA,CACD,MAAMsH,CAAAA,CAAO,IAAA,CAAK,CAChB,IAAA,CAAM,UAAA,CACN,KAAA,CAAO,YAAA,CACP,OAAA,CAAS,uBACX,CAAC,EACH,EACA,SAAA,CAAW,MAAOc,EAAAA,EAAY,CAC5B,MAAMd,CAAAA,CAAO,IAAA,CAAK,CAAE,KAAM,SAAA,CAAW,OAAA,CAAAc,EAAQ,CAAC,EAChD,CACF,CAAC,CAAA,CAGD,MAAMP,EAAAA,EAAgB,CAEtB,IAAMQ,EAAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CAAIzM,CAAAA,CACxB0M,GAAgBhB,CAAAA,CAAO,eAAA,EAAgB,CAC7C,OAAA,MAAMA,CAAAA,CAAO,IAAA,CAAK,CAChB,IAAA,CAAM,OACN,WAAA,CAAatH,CAAAA,CAAO,WAAA,CACpB,QAAA,CAAAqI,EAAAA,CACA,aAAA,CAAAC,EACF,CAAC,EAEDhB,CAAAA,CAAO,KAAA,EAAM,CACNtH,CACT,CAAA,MAASlE,CAAAA,CAAO,CACd,IAAMyM,GAAyB,CAC7B,IAAA,CAAM,OAAA,CACN,KAAA,CAAOzM,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,MAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CAC/D,aAAA,CAAe0L,CAAAA,EAAiB,MAClC,CAAA,CACA,YAAMF,CAAAA,CAAO,IAAA,CAAKiB,EAAU,CAAA,CAC5BjB,EAAO,KAAA,EAAM,CACPxL,CACR,CAAA,OAAE,CAEA8L,EAAAA,GACF,CACF,CAAA,GAAG,CAiBH,OAAO,CACL,MAAA,CAfyC,CACzC,CAAC,MAAA,CAAO,aAAa,CAAA,EAAgC,CACnD,OAAO,CACL,MAAM,MAA6C,CACjD,IAAMG,CAAAA,CAAQ,MAAMT,CAAAA,CAAO,IAAA,EAAK,CAChC,OAAIS,IAAU,IAAA,CACL,CAAE,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,MAAU,CAAA,CAEjC,CAAE,KAAM,KAAA,CAAO,KAAA,CAAOA,CAAM,CACrC,CACF,CACF,CACF,CAAA,CAIE,OAAQC,EAAAA,CACR,KAAA,CAAO,IAAMT,CAAAA,CAAgB,KAAA,EAC/B,CACF,CACF,CAiBO,SAASiB,EAAAA,CAAiC9O,CAAAA,CAO1B,CACrB,GAAM,CACJ,OAAA,CAAA+O,CAAAA,CACA,UAAAC,CAAAA,CAAY,EAAA,CACZ,UAAA,CAAAC,CAAAA,CAAa,IACf,CAAA,CAAIjP,CAAAA,CAEJ,OAAO,CACL,IAAA,CAAM,oBAAA,CACN,UAAA,CAAAiP,CAAAA,CACA,MAAM,KAAA,CAAMnB,CAAAA,CAAe,CACzB,IAAMoB,CAAAA,CAAQ,MAAMH,CAAAA,CAAQjB,CAAa,CAAA,CACzC,OAAIoB,CAAAA,CAAQF,CAAAA,CACH,CACL,MAAA,CAAQ,KAAA,CACR,MAAA,CAAQ,CAAA,eAAA,EAAkBE,CAAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,sBAAsBF,CAAS,CAAA,CAAA,CACzE,QAAA,CAAU,UACZ,CAAA,CAEK,CAAE,MAAA,CAAQ,IAAK,CACxB,CACF,CACF,CAaO,SAASG,EAAAA,CAA+BnP,CAAAA,CAOxB,CACrB,GAAM,CAAE,SAAA,CAAAoP,CAAAA,CAAW,MAAA,CAAAC,CAAAA,CAAQ,UAAA,CAAAJ,CAAAA,CAAa,IAAK,CAAA,CAAIjP,EAI7CsP,CAAAA,CAAS,KAAA,CAEb,OAAO,CACL,IAAA,CAAM,kBAAA,CACN,UAAA,CAAAL,CAAAA,CACA,MAAMM,CAAAA,CAAgBxB,CAAAA,CAAY,CAChC,OAAIA,GAAcqB,CAAAA,CACT,CACL,MAAA,CAAQ,KAAA,CACR,OAAQ,CAAA,kCAAA,EAAqCA,CAAS,CAAA,OAAA,CAAA,CACtD,QAAA,CAAU,OACZ,CAAA,CAGEC,CAAAA,EAAUtB,CAAAA,EAAcsB,GAAU,CAACC,CAAAA,EACrCA,CAAAA,CAAS,IAAA,CAEF,CACL,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,+BAA+BvB,CAAU,CAAA,CAAA,EAAIqB,CAAS,CAAA,OAAA,CAAA,CAC/D,QAAA,CAAU,SACZ,CAAA,EAGK,CAAE,OAAQ,IAAK,CACxB,CACF,CACF,CAgBO,SAASI,EAAAA,CAAgCxP,CAAAA,CAGzB,CACrB,GAAM,CAAE,QAAA,CAAAyP,CAAAA,CAAU,UAAA,CAAAR,CAAAA,CAAa,IAAK,CAAA,CAAIjP,EAExC,OAAO,CACL,IAAA,CAAM,mBAAA,CACN,UAAA,CAAAiP,CAAAA,CACA,KAAA,CAAMnB,CAAAA,CAAe,CACnB,IAAA,GAAW,CAAE,KAAA,CAAA4B,CAAAA,CAAO,IAAA,CAAAC,CAAK,CAAA,GAAKF,CAAAA,CAE5B,GADAC,CAAAA,CAAM,SAAA,CAAY,CAAA,CACdA,CAAAA,CAAM,IAAA,CAAK5B,CAAa,CAAA,CAC1B,OAAO,CACL,MAAA,CAAQ,KAAA,CACR,MAAA,CAAQ,CAAA,SAAA,EAAY6B,CAAI,CAAA,kBAAA,CAAA,CACxB,QAAA,CAAU,OACZ,EAGJ,OAAO,CAAE,MAAA,CAAQ,IAAK,CACxB,CACF,CACF,CAaO,SAASC,EAAAA,CACdC,CAAAA,CACA7P,CAAAA,CAAwD,EAAC,CACrC,CACpB,GAAM,CAAE,KAAA2P,CAAAA,CAAO,oBAAA,CAAsB,eAAA,CAAAG,CAAAA,CAAkB,IAAK,CAAA,CAAI9P,CAAAA,CAEhE,OAAO,CACL,IAAA,CAAA2P,CAAAA,CACA,UAAA,CAAYG,CAAAA,CACZ,MAAM,KAAA,CAAMhC,CAAAA,CAAeC,CAAAA,CAAY,CACrC,IAAM7H,CAAAA,CAAqB,EAAC,CAC5B,IAAA,IAAW3D,CAAAA,IAAasN,CAAAA,CAAY,CAClC,IAAMvJ,CAAAA,CAAS,MAAM/D,CAAAA,CAAU,KAAA,CAAMuL,CAAAA,CAAeC,CAAU,CAAA,CAC9D,GAAI,CAACzH,CAAAA,CAAO,MAAA,CAAQ,CAClB,GAAIwJ,EACF,OAAO,CACL,GAAGxJ,CAAAA,CACH,OAAQ,CAAA,CAAA,EAAI/D,CAAAA,CAAU,IAAI,CAAA,EAAA,EAAK+D,CAAAA,CAAO,MAAM,CAAA,CAC9C,CAAA,CAEFJ,EAAS,IAAA,CAAK,CAAA,CAAA,EAAI3D,CAAAA,CAAU,IAAI,CAAA,EAAA,EAAK+D,CAAAA,CAAO,MAAA,EAAU,QAAQ,EAAE,EAClE,CACF,CACA,OAAIJ,CAAAA,CAAS,MAAA,CAAS,CAAA,CACb,CAAE,OAAQ,KAAA,CAAO,MAAA,CAAQA,CAAAA,CAAS,IAAA,CAAK,IAAI,CAAE,CAAA,CAE/C,CAAE,OAAQ,IAAK,CACxB,CACF,CACF,CAmBO,SAAS6J,EAAAA,CACdJ,CAAAA,CACApN,EACAvC,CAAAA,CAII,EAAC,CACe,CACpB,GAAM,CAAE,SAAA,CAAAgQ,CAAAA,CAAY,EAAG,UAAA,CAAAf,CAAAA,CAAa,IAAK,CAAA,CAAIjP,CAAAA,CAE7C,OAAO,CACL,IAAA,CAAA2P,EACA,UAAA,CAAAV,CAAAA,CACA,MAAM,KAAA,CAAMnB,CAAAA,CAAeC,CAAAA,CAAY,CACrC,GAAIA,EAAaiC,CAAAA,CACf,OAAO,CAAE,MAAA,CAAQ,IAAK,CAAA,CAGxB,IAAM1J,CAAAA,CAAS,MAAM/D,CAAAA,CACnB,CACE,MAAA,CAAQuL,CAAAA,CACR,SAAA,CAAW,WAAA,CACX,KAAA,CAAO,EAAA,CACP,SAAU,EACZ,CAAA,CACA,CACE,SAAA,CAAW,WAAA,CACX,KAAA,CAAO,EAAA,CACP,MAAO,EACT,CACF,CAAA,CAEA,OAAO,CACL,MAAA,CAAQxH,CAAAA,CAAO,OACf,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,QAAA,CAAUA,CAAAA,CAAO,MAAA,CAAS,MAAA,CAAY,OACxC,CACF,CACF,CACF,CAeA,eAAsB2J,EAAAA,CACpBC,CAAAA,CACiB,CACjB,IAAIC,EAAS,EAAA,CACb,UAAA,IAAiB9B,CAAAA,IAAS6B,CAAAA,CACpB7B,CAAAA,CAAM,IAAA,GAAS,OAAA,GACjB8B,CAAAA,EAAU9B,EAAM,IAAA,CAAA,CAGpB,OAAO8B,CACT,CAaA,eAAuBC,EAAAA,CACrBF,CAAAA,CACAG,CAAAA,CAC4B,CAC5B,cAAiBhC,CAAAA,IAAS6B,CAAAA,CACxB,MAAMG,CAAAA,CAAGhC,CAAK,CAAA,CACd,MAAMA,EAEV,CAUA,eAAuBiC,EAAAA,CACrBJ,CAAAA,CACAK,CAAAA,CACkD,CAClD,IAAMC,CAAAA,CAAU,IAAI,IAAID,CAAK,CAAA,CAC7B,UAAA,IAAiBlC,CAAAA,IAAS6B,CAAAA,CACpBM,CAAAA,CAAQ,GAAA,CAAInC,CAAAA,CAAM,IAAS,CAAA,GAC7B,MAAMA,CAAAA,EAGZ,CAaA,eAAuBoC,EAAAA,CACrBP,CAAAA,CACAG,CAAAA,CACkB,CAClB,UAAA,IAAiBhC,CAAAA,IAAS6B,CAAAA,CACxB,MAAM,MAAMG,CAAAA,CAAGhC,CAAK,EAExB,CAuBA,IAAMqC,EAAAA,CAAuB,GAAA,CAyCtB,SAASC,EAAAA,CACdC,CAAAA,CAC0B,CAE1B,GAAIA,EAAQ,MAAA,GAAW,CAAA,CAmBrB,OAAO,CAAE,MAAA,CAlBkD,CACzD,CAAC,MAAA,CAAO,aAAa,CAAA,EAAI,CACvB,IAAMC,CAAAA,CAAO,CACX,IAAA,CAAM,IAAA,CACN,KAAA,CAAO,MACT,CAAA,CAEA,OAAO,CACL,MAAM,IAAA,EAAO,CACX,OAAOA,CACT,EACA,MAAM,MAAA,EAAS,CACb,OAAOA,CACT,CACF,CACF,CACF,EAE8B,eAAA,CAAiB,IAAM,CAAE,CAAA,CAGzD,IAAMjD,CAAAA,CAAmC,EAAC,CACpCkD,EAAgE,EAAC,CACnEC,CAAAA,CAAgBH,CAAAA,CAAQ,MAAA,CACxBI,CAAAA,CAAS,KAAA,CACTC,CAAAA,CAAe,EAEnB,SAASC,CAAAA,CAAKlE,CAAAA,CAAoC,CAChD,GAAIgE,CAAAA,CACF,OAGF,IAAM7D,EAAS2D,CAAAA,CAAQ,KAAA,EAAM,CAC7B,GAAI3D,CAAAA,CAAQ,CACVA,CAAAA,CAAOH,CAAI,EAEX,MACF,CAEIY,CAAAA,CAAO,MAAA,CAAS8C,EAAAA,CAClB9C,CAAAA,CAAO,IAAA,CAAKZ,CAAI,EAEhBiE,CAAAA,GAEJ,CAEA,SAASE,CAAAA,EAAe,CAEtB,GADAJ,CAAAA,EAAAA,CACIA,CAAAA,EAAiB,CAAA,CAAG,CACtBC,CAAAA,CAAS,IAAA,CACT,IAAA,IAAW7D,CAAAA,IAAU2D,CAAAA,CACnB3D,CAAAA,CAAO,IAAI,CAAA,CAEb2D,EAAQ,MAAA,CAAS,EACnB,CACF,CAGA,IAAA,IAAWM,CAAAA,IAAUR,CAAAA,CAAAA,CAClB,SAAY,CACX,GAAI,CACF,UAAA,IAAiBvC,CAAAA,IAAS+C,CAAAA,CAAO,MAAA,CAC/BF,CAAAA,CAAK,CAAE,MAAA7C,CAAAA,CAAO,OAAA,CAAS+C,CAAAA,CAAO,OAAQ,CAAC,EAE3C,CAAA,MAAShP,CAAAA,CAAO,CAEd8O,CAAAA,CAAK,CACH,KAAA,CAAO,CACL,IAAA,CAAM,OAAA,CACN,KAAA,CAAO9O,CAAAA,YAAiB,MAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CACjE,CAAA,CACA,QAASgP,CAAAA,CAAO,OAClB,CAAC,EACH,CAAA,OAAE,CACAD,CAAAA,GACF,CACF,CAAA,GAAG,CA2CL,OAAO,CACL,MAAA,CAzCoD,CACpD,CAAC,MAAA,CAAO,aAAa,CAAA,EAA2C,CAC9D,OAAO,CACL,MAAM,IAAA,EAAwD,CAC5D,OAAIvD,EAAO,MAAA,CAAS,CAAA,CACX,CAAE,IAAA,CAAM,KAAA,CAAO,KAAA,CAAOA,CAAAA,CAAO,KAAA,EAAS,CAAA,CAG3CoD,CAAAA,CACK,CAAE,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,MAAU,CAAA,CAGjC,IAAI,OAAA,CACR7N,CAAAA,EAAY,CACX2N,CAAAA,CAAQ,IAAA,CAAM9D,CAAAA,EAAS,CAEnB7J,CAAAA,CADE6J,IAAS,IAAA,CACH,CAAE,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,MAAU,CAAA,CAE/B,CAAE,KAAM,KAAA,CAAO,KAAA,CAAOA,CAAK,CAFK,EAI5C,CAAC,EACH,CACF,CACF,CAAA,CAEA,MAAA,EAA0D,CAExDgE,CAAAA,CAAS,IAAA,CACTpD,CAAAA,CAAO,MAAA,CAAS,CAAA,CAChB,QAAWT,CAAAA,IAAU2D,CAAAA,CACnB3D,CAAAA,CAAO,IAAI,EAEb,OAAA2D,CAAAA,CAAQ,MAAA,CAAS,CAAA,CAEV,QAAQ,OAAA,CAAQ,CAAE,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,MAAU,CAAC,CACzD,CACF,CACF,CACF,CAAA,CAIE,eAAA,CAAiB,IAAMG,CACzB,CACF,CCv6BO,SAASI,EAAAA,CAAsBlB,CAAAA,CAAyB,CAC7D,GAAIA,CAAAA,CAAO,MAAA,CAAS,OAAA,CAClB,MAAM,IAAI,KAAA,CACR,CAAA,kDAAA,EAAqDA,CAAAA,CAAO,MAAM,CAAA,qBAAA,CACpE,CAAA,CAGF,IAAMmB,CAAAA,CAAUnB,EAAO,IAAA,EAAK,CAG5B,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAMmB,CAAO,CAC3B,CAAA,KAAQ,CAER,CAGA,IAAMC,CAAAA,CAAcD,CAAAA,CAAQ,OAAA,CAAQ,GAAG,EACjCE,CAAAA,CAAaF,CAAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,CAElCG,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAEJ,GAAIJ,CAAAA,GAAgB,EAAA,EAAMC,CAAAA,GAAe,EAAA,CACvC,MAAM,IAAI,KAAA,CAAM,qDAAqD,EAGnED,CAAAA,GAAgB,EAAA,EAClBE,CAAAA,CAAQD,CAAAA,CACRE,CAAAA,CAAW,GAAA,CACXC,CAAAA,CAAY,GAAA,EACHH,IAAe,EAAA,EACxBC,CAAAA,CAAQF,CAAAA,CACRG,CAAAA,CAAW,GAAA,CACXC,CAAAA,CAAY,GAAA,GAEZF,CAAAA,CAAQ,KAAK,GAAA,CAAIF,CAAAA,CAAaC,CAAU,CAAA,CACxCE,CAAAA,CAAWD,CAAAA,GAAUF,CAAAA,CAAc,GAAA,CAAM,IACzCI,CAAAA,CAAYF,CAAAA,GAAUF,CAAAA,CAAc,GAAA,CAAM,GAAA,CAAA,CAI5C,IAAIK,CAAAA,CAAQ,CAAA,CACRC,EAAW,KAAA,CACXC,CAAAA,CAAU,KAAA,CAEd,IAAA,IAAS5Q,CAAAA,CAAIuQ,CAAAA,CAAOvQ,CAAAA,CAAIoQ,CAAAA,CAAQ,OAAQpQ,CAAAA,EAAAA,CAAK,CAC3C,IAAM6Q,CAAAA,CAAOT,CAAAA,CAAQpQ,CAAC,CAAA,CAEtB,GAAI4Q,EAAS,CACXA,CAAAA,CAAU,KAAA,CACV,QACF,CAEA,GAAIC,CAAAA,GAAS,IAAA,CAAM,CACjBD,CAAAA,CAAU,IAAA,CACV,QACF,CAEA,GAAIC,CAAAA,GAAS,GAAA,CAAK,CAChBF,CAAAA,CAAW,CAACA,CAAAA,CACZ,QACF,CAEA,GAAI,CAAAA,CAAAA,CAAAA,CAIJ,GAAIE,CAAAA,GAASL,EACXE,CAAAA,EAAAA,CAAAA,KAAAA,GACSG,CAAAA,GAASJ,CAAAA,GAClBC,CAAAA,EAAAA,CACIA,CAAAA,GAAU,CAAA,CAAA,CAAG,CACf,IAAMI,EAAUV,CAAAA,CAAQ,KAAA,CAAMG,CAAAA,CAAOvQ,CAAAA,CAAI,CAAC,CAAA,CAE1C,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAM8Q,CAAO,CAC3B,CAAA,KAAQ,CAEN,IAAMC,CAAAA,CAAYD,EAAQ,OAAA,CAAQ,oBAAA,CAAuBE,EAAAA,EACvDA,EAAAA,CACG,OAAA,CAAQ,KAAA,CAAO,KAAK,CAAA,CACpB,QAAQ,KAAA,CAAO,KAAK,CAAA,CACpB,OAAA,CAAQ,KAAA,CAAO,KAAK,CACzB,CAAA,CAEA,OAAO,IAAA,CAAK,KAAA,CAAMD,CAAS,CAC7B,CACF,CAAA,CAEJ,CAEA,MAAM,IAAI,KAAA,CAAM,2CAA2C,CAC7D,CAGA,SAASE,EAAAA,CACP/P,CAAAA,CACQ,CACR,OAAKA,EAIDA,CAAAA,CAAM,MAAA,EAAUA,CAAAA,CAAM,MAAA,CAAO,MAAA,CAAS,CAAA,CACjCA,CAAAA,CAAM,MAAA,CAAO,IAAKgQ,CAAAA,EAAUA,CAAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,CAGtDhQ,CAAAA,CAAM,SAAW,mBAAA,CAPf,mBAQX,CA2BO,SAASiQ,EAAAA,CACdvO,CAAAA,CACAnB,CAAAA,CACa,CACb,GAAM,CACJ,MAAA,CAAA2P,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,CAAA,CACb,WAAA,CAAAC,CAAAA,CAAcnB,GACd,iBAAA,CAAAoB,CACF,CAAA,CAAI9P,CAAAA,CAGJ,GAAI,CAAC,MAAA,CAAO,QAAA,CAAS4P,CAAU,CAAA,EAAKA,CAAAA,CAAa,CAAA,CAC/C,MAAM,IAAI,KAAA,CACR,oFACF,CAAA,CAGF,IAAMG,CAAAA,CACJD,CAAAA,EAAqBH,CAAAA,CAAO,WAAA,EAAe,2BAAA,CAI7C,OAAO,MACLvO,CAAAA,CACAC,EACAhE,CAAAA,GAC2B,CAE3B,IAAM2S,CAAAA,CAA6B,CACjC,GAAG5O,CAAAA,CACH,YAAA,CAAA,CACGA,CAAAA,CAAM,cAAgB,EAAA,EACvB;;AAAA,4CAAA,CAAA,CACA2O,EACA,2EAEJ,CAAA,CAEIzH,EACAtH,CAAAA,CAEJ,IAAA,IAASjB,EAAU,CAAA,CAAGA,CAAAA,EAAW6P,CAAAA,CAAY7P,CAAAA,EAAAA,CAAW,CAEtD,IAAMqI,EAAAA,CACJrI,IAAY,CAAA,CACRsB,CAAAA,CACA,GAAGA,CAAK;;AAAA,kDAAA,EAAyDL,CAAS;AAAA,sCAAA,CAAA,CAE1E2C,CAAAA,CAAS,MAAMxC,CAAAA,CAAO6O,CAAAA,CAAiB5H,EAAAA,CAAgB/K,CAAO,CAAA,CACpEiL,CAAAA,CAAa3E,CAAAA,CAGb,IAAMsM,CAAAA,CACJ,OAAOtM,CAAAA,CAAO,MAAA,EAAW,QAAA,CACrBA,CAAAA,CAAO,MAAA,CACP,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAO,MAAM,CAAA,CAElC,GAAI,CACF,IAAMuM,EAAAA,CAAYL,CAAAA,CAAYI,CAAS,CAAA,CACjCvR,EAAAA,CAASiR,CAAAA,CAAO,SAAA,CAAUO,EAAS,CAAA,CAEzC,GAAIxR,EAAAA,CAAO,OAAA,CACT,OAAO,CACL,GAAGiF,CAAAA,CACH,MAAA,CAAQjF,EAAAA,CAAO,IACjB,CAAA,CAGFsC,CAAAA,CAAYwO,EAAAA,CAAsB9Q,EAAAA,CAAO,KAAK,EAChD,CAAA,MAASX,EAAAA,CAAK,CACZiD,CAAAA,CAAYjD,EAAAA,YAAe,KAAA,CAAQA,EAAAA,CAAI,OAAA,CAAU,MAAA,CAAOA,EAAG,EAC7D,CACF,CAGA,MAAM,IAAIoS,EAAAA,CACR,CAAA,wDAAA,EAA2DP,CAAAA,CAAa,CAAC,CAAA,WAAA,EAAc5O,CAAS,CAAA,CAAA,CAChGsH,CACF,CACF,CACF,CAGO,IAAM6H,EAAAA,CAAN,cAAoC,KAAM,CACtC,UAAA,CAET,WAAA,CAAYpE,CAAAA,CAAiBzD,CAAAA,CAAiC,CAC5D,KAAA,CAAMyD,CAAO,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,uBAAA,CACZ,IAAA,CAAK,UAAA,CAAazD,EACpB,CACF,ECrSO,SAAS8H,EAAAA,CAAaC,CAAAA,CAAYC,CAAAA,CAAqB,CAC5D,GAAI,MAAA,CAAO,EAAA,CAAGD,CAAAA,CAAGC,CAAC,CAAA,CAChB,OAAO,KAAA,CAOT,GAJI,OAAOD,CAAAA,EAAM,OAAOC,CAAAA,EAAKD,CAAAA,GAAM,IAAA,EAAQC,CAAAA,GAAM,IAAA,EAI7C,OAAOD,CAAAA,EAAM,QAAA,CACf,OAAO,MAAA,CAGT,GAAI,KAAA,CAAM,OAAA,CAAQA,CAAC,CAAA,CAAG,CACpB,GAAI,CAAC,KAAA,CAAM,OAAA,CAAQC,CAAC,CAAA,EAAKD,CAAAA,CAAE,MAAA,GAAYC,CAAAA,CAAgB,MAAA,CACrD,OAAO,MAAA,CAET,IAAA,IAAS/R,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI8R,CAAAA,CAAE,MAAA,CAAQ9R,CAAAA,EAAAA,CAC5B,GAAI8R,CAAAA,CAAE9R,CAAC,CAAA,GAAO+R,CAAAA,CAAgB/R,CAAC,CAAA,CAC7B,OAAO,MAAA,CAIX,OAAO,KACT,CAEA,IAAMgS,CAAAA,CAAOF,CAAAA,CACPG,CAAAA,CAAOF,CAAAA,CACPG,CAAAA,CAAQ,MAAA,CAAO,IAAA,CAAKF,CAAI,CAAA,CACxBG,CAAAA,CAAQ,MAAA,CAAO,IAAA,CAAKF,CAAI,CAAA,CAC9B,GAAIC,CAAAA,CAAM,MAAA,GAAWC,CAAAA,CAAM,MAAA,CACzB,OAAO,MAAA,CAET,IAAA,IAAW/R,CAAAA,IAAO8R,CAAAA,CAChB,GAAIF,CAAAA,CAAK5R,CAAG,CAAA,GAAM6R,CAAAA,CAAK7R,CAAG,CAAA,CACxB,OAAO,MAAA,CAIX,OAAO,KACT,CA0BO,IAAMgS,EAAAA,CAAN,KAAgB,CACb,KAAA,CACS,UAAA,CACA,KAAA,CAGZ,EAAC,CAEN,WAAA,CAAYC,CAAAA,CAAa,CACvB,GAAIA,CAAAA,CAAM,CAAA,EAAK,CAAC,MAAA,CAAO,QAAA,CAASA,CAAG,CAAA,CACjC,MAAM,IAAI,KAAA,CACR,CAAA,2CAAA,EAA8CA,CAAG,CAAA,+BAAA,CACnD,CAAA,CAEF,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAClB,IAAA,CAAK,KAAA,CAAQA,EACf,CAGQ,eAAA,EAA8B,CACpC,IAAIC,CAAAA,CAAW,KAAA,CAEf,OAAO,IAAM,CACPA,CAAAA,GAGJA,CAAAA,CAAW,IAAA,CACX,IAAA,CAAK,OAAA,EAAQ,EACf,CACF,CAGA,MAAM,OAAA,CAAQtQ,CAAAA,CAA2C,CACvD,GAAIA,CAAAA,EAAQ,OAAA,CACV,MAAM,IAAI,KAAA,CAAM,uDAAuD,CAAA,CAEzE,OAAI,IAAA,CAAK,KAAA,CAAQ,CAAA,EACf,IAAA,CAAK,KAAA,EAAA,CAEE,IAAA,CAAK,eAAA,EAAgB,EAGvB,IAAI,OAAA,CAAoB,CAACC,CAAAA,CAASC,CAAAA,GAAW,CAClD,IAAIC,CAAAA,CAEEoQ,CAAAA,CAAQ,CACZ,OAAA,CAAUC,CAAAA,EAA0B,CAC9BrQ,CAAAA,EAAWH,CAAAA,EACbA,CAAAA,CAAO,mBAAA,CAAoB,OAAA,CAASG,CAAO,CAAA,CAE7CF,CAAAA,CAAQuQ,CAAS,EACnB,CAAA,CACA,MAAA,CAAAtQ,CACF,CAAA,CACA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKqQ,CAAK,CAAA,CAEjBvQ,CAAAA,GACFG,CAAAA,CAAU,IAAM,CACd,IAAMsJ,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ8G,CAAK,CAAA,CAChC9G,CAAAA,EAAO,CAAA,GACT,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAAA,CAAK,CAAC,CAAA,CACxBvJ,CAAAA,CACE,IAAI,KAAA,CACF,wDACF,CACF,CAAA,EAEJ,CAAA,CACAF,CAAAA,CAAO,gBAAA,CAAiB,OAAA,CAASG,CAAAA,CAAS,CAAE,IAAA,CAAM,IAAK,CAAC,CAAA,EAE5D,CAAC,CACH,CAGA,UAAA,EAAkC,CAChC,OAAI,IAAA,CAAK,KAAA,CAAQ,CAAA,EACf,IAAA,CAAK,KAAA,EAAA,CAEE,IAAA,CAAK,eAAA,EAAgB,EAGvB,IACT,CAEQ,OAAA,EAAgB,CACtB,IAAA,CAAK,KAAA,EAAA,CACL,IAAMsQ,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EAAM,CAC1BA,CAAAA,GACF,IAAA,CAAK,KAAA,EAAA,CACLA,CAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,eAAA,EAAiB,CAAA,EAEvC,CAGA,IAAI,SAAA,EAAoB,CACtB,OAAO,IAAA,CAAK,KACd,CAGA,IAAI,OAAA,EAAkB,CACpB,OAAO,IAAA,CAAK,KAAA,CAAM,MACpB,CAGA,IAAI,GAAA,EAAc,CAChB,OAAO,IAAA,CAAK,UACd,CAGA,KAAA,EAAc,CACZ,IAAMjT,CAAAA,CAAM,IAAI,KAAA,CACd,6EACF,CAAA,CACMkT,CAAAA,CAAU,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAA,CAAG,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CACtD,IAAA,IAAWzG,CAAAA,IAAUyG,CAAAA,CACnBzG,CAAAA,CAAO,MAAA,CAAOzM,CAAG,CAAA,CAEnB,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,WACpB,CACF,EAgBO,SAASmT,EAAAA,CAAehO,CAAAA,CAAuC,CACpE,OAAQA,CAAAA,CAAM,IAAA,EACZ,KAAK,YAAA,CACH,OAAOA,CAAAA,CAAM,IAAA,CACf,KAAK,YAAA,CACH,OAAOA,CAAAA,CAAM,KAAA,CACf,KAAK,SAAA,CACH,OAAOA,CAAAA,CAAM,SAAA,CACf,KAAK,QAAA,CACH,OAAOA,CAAAA,CAAM,KAAA,CACf,KAAK,KAAA,CACH,OAAOA,CAAAA,CAAM,cAAA,CACf,KAAK,MAAA,CACH,OAAOA,CAAAA,CAAM,IACjB,CACF,CAYO,SAASiO,EAAAA,CACdjO,CAAAA,CACoB,CACpB,IAAMkO,CAAAA,CAAiBF,EAAAA,CAAehO,CAAK,CAAA,CACrCmO,CAAAA,CAAanO,CAAAA,CAAM,UAAA,EAAc,IAAA,CAEvC,OAAQA,CAAAA,CAAM,IAAA,EACZ,KAAK,YAAA,CAAc,CACjB,IAAMoO,CAAAA,CAAiBpO,CAAAA,CAAM,OAAA,CAAQ,MAAA,CACnC,CAACqO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CACpB,CACF,CAAA,CACM0M,CAAAA,CACJtO,CAAAA,CAAM,OAAA,CAAQ,MAAA,CAAS,CAAA,CAAIoO,CAAAA,CAAiBpO,CAAAA,CAAM,QAAQ,MAAA,CAAS,CAAA,CAC/DuO,CAAAA,CAAYJ,CAAAA,EAAc,IAAA,CAAOA,CAAAA,CAAaD,CAAAA,CAAiB,IAAA,CAErE,OAAO,CACL,UAAA,CACEC,CAAAA,EAAc,IAAA,EAAQA,CAAAA,CAAa,CAAA,CAC/B,IAAA,CAAK,KAAA,CAAOD,CAAAA,CAAiBC,CAAAA,CAAc,GAAG,CAAA,CAC9C,CAAA,CACN,cAAA,CAAAD,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,wBAAA,CACEE,CAAAA,CAAY,CAAA,EAAKC,CAAAA,EAAa,IAAA,CAC1B,IAAA,CAAK,KAAA,CAAMD,CAAAA,CAAYC,CAAS,CAAA,CAChC,IAAA,CACN,uBAAA,CAAyBA,CAC3B,CACF,CAEA,KAAK,YAAA,CAAc,CACjB,IAAMH,CAAAA,CAAiBpO,CAAAA,CAAM,aAAA,CAAc,MAAA,CACzC,CAACqO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CACpB,CACF,CAAA,CACM2M,CAAAA,CAAYJ,CAAAA,EAAc,IAAA,CAAOA,CAAAA,CAAaD,CAAAA,CAAiB,IAAA,CAErE,OAAO,CACL,UAAA,CACEC,CAAAA,EAAc,IAAA,EAAQA,CAAAA,CAAa,CAAA,CAC/B,IAAA,CAAK,KAAA,CAAOD,CAAAA,CAAiBC,CAAAA,CAAc,GAAG,CAAA,CAC9C,CAAA,CACN,cAAA,CAAAD,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,wBAAA,CAA0B,IAAA,CAC1B,uBAAA,CAAyBG,CAC3B,CACF,CAEA,KAAK,SAAA,CAAW,CACd,IAAMH,CAAAA,CAAiBpO,CAAAA,CAAM,OAAA,CAAQ,MAAA,CACnC,CAACqO,CAAAA,CAAKG,CAAAA,GAAMH,CAAAA,CAAMG,CAAAA,CAAE,cAAA,CAAiBA,CAAAA,CAAE,eAAA,CACvC,CACF,CAAA,CACMD,CAAAA,CAAYJ,CAAAA,EAAc,IAAA,CAAOA,CAAAA,CAAaD,CAAAA,CAAiB,IAAA,CAErE,OAAO,CACL,UAAA,CACEC,CAAAA,EAAc,IAAA,EAAQA,CAAAA,CAAa,CAAA,CAC/B,IAAA,CAAK,KAAA,CAAOD,CAAAA,CAAiBC,CAAAA,CAAc,GAAG,CAAA,CAC9C,CAAA,CACN,cAAA,CAAAD,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,wBAAA,CAA0B,IAAA,CAC1B,uBAAA,CAAyBG,CAC3B,CACF,CAEA,KAAK,QAAA,CAAU,CACb,IAAMH,CAAAA,CAAiBpO,CAAAA,CAAM,cAAA,CACvBuO,CAAAA,CAAYJ,CAAAA,EAAc,IAAA,CAAOA,CAAAA,CAAaD,CAAAA,CAAiB,IAAA,CAErE,OAAO,CACL,UAAA,CACEC,CAAAA,EAAc,IAAA,EAAQA,CAAAA,CAAa,CAAA,CAC/B,IAAA,CAAK,KAAA,CAAOD,CAAAA,CAAiBC,CAAAA,CAAc,GAAG,CAAA,CAC9C,CAAA,CACN,cAAA,CAAAD,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,wBAAA,CAA0B,IAAA,CAC1B,uBAAA,CAAyBG,CAC3B,CACF,CAEA,KAAK,KAAA,CAAO,CACV,IAAME,CAAAA,CAAQN,CAAAA,EAAc,MAAA,CAAO,IAAA,CAAKnO,CAAAA,CAAM,QAAQ,CAAA,CAAE,MAAA,CAClD0O,CAAAA,CAAY1O,CAAAA,CAAM,cAAA,CAClBoO,CAAAA,CAAiB,MAAA,CAAO,MAAA,CAAOpO,CAAAA,CAAM,WAAW,CAAA,CAAE,MAAA,CACtD,CAACqO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CACpB,CACF,CAAA,CACM0M,CAAAA,CAAYI,CAAAA,CAAY,CAAA,CAAIN,CAAAA,CAAiBM,CAAAA,CAAY,CAAA,CACzDH,CAAAA,CAAYE,CAAAA,CAAQC,CAAAA,CAE1B,OAAO,CACL,UAAA,CAAYD,CAAAA,CAAQ,CAAA,CAAI,IAAA,CAAK,KAAA,CAAOC,CAAAA,CAAYD,CAAAA,CAAS,GAAG,CAAA,CAAI,CAAA,CAChE,cAAA,CAAgBC,CAAAA,CAChB,UAAA,CAAYD,CAAAA,CACZ,cAAA,CAAAL,CAAAA,CACA,wBAAA,CACEG,CAAAA,CAAY,CAAA,CAAI,IAAA,CAAK,KAAA,CAAMD,CAAAA,CAAYC,CAAS,CAAA,CAAI,CAAA,CACtD,uBAAA,CAAyBA,CAC3B,CACF,CAEA,KAAK,MAAA,CAAQ,CACX,IAAMH,CAAAA,CAAiB,MAAA,CAAO,OAAOpO,CAAAA,CAAM,WAAW,CAAA,CAAE,MAAA,CACtD,CAACqO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CACpB,CACF,CAAA,CACM+M,CAAAA,CAAe3O,CAAAA,CAAM,gBAAA,CAE3B,OAAO,CACL,UAAA,CAAY,IAAA,CAAK,KAAA,CAAM2O,CAAAA,CAAe,GAAG,CAAA,CACzC,cAAA,CAAAT,CAAAA,CACA,UAAA,CAAYC,CAAAA,EAAc,IAAA,CAC1B,cAAA,CAAAC,CAAAA,CACA,wBAAA,CAA0B,IAAA,CAC1B,uBAAA,CACEpO,CAAAA,CAAM,WAAA,CAAY,MAAA,CAAS,CAAA,CAAI4O,EAAAA,CAAkB5O,CAAK,CAAA,CAAI,IAC9D,CACF,CACF,CACF,CAEA,SAAS4O,EAAAA,CAAkB5O,CAAAA,CAA2C,CACpE,IAAM6O,CAAAA,CAAU7O,CAAAA,CAAM,WAAA,CACtB,GAAI6O,CAAAA,CAAQ,MAAA,CAAS,CAAA,CACnB,OAAO,IAAA,CAGT,IAAMN,CAAAA,CAAY,CAAA,CAAMvO,CAAAA,CAAM,gBAAA,CAC9B,GAAIuO,CAAAA,EAAa,CAAA,CACf,OAAO,CAAA,CAQT,IAAMO,CAAAA,CAJaD,CAAAA,CAAQ,MAAA,CACzB,CAACR,CAAAA,CAAKU,CAAAA,GAAMV,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGU,CAAAA,CAAE,iBAAiB,CAAA,CACjD,CACF,CAAA,CAC8BF,CAAAA,CAAQ,MAAA,CACtC,OAAIC,CAAAA,EAAY,CAAA,CACP,IAAA,CAGF,IAAA,CAAK,IAAA,CAAKP,CAAAA,CAAYO,CAAQ,CACvC,CAaO,SAASE,EAAAA,CACd7B,CAAAA,CACAC,CAAAA,CACgB,CAChB,GAAID,CAAAA,CAAE,IAAA,GAASC,CAAAA,CAAE,IAAA,CACf,MAAM,IAAI,KAAA,CACR,CAAA,4DAAA,EAA+DD,CAAAA,CAAE,IAAI,CAAA,IAAA,EAAOC,CAAAA,CAAE,IAAI,CAAA,CACpF,CAAA,CAGF,IAAM6B,CAAAA,CAAanP,CAAAA,EAAsC,CACvD,OAAQA,CAAAA,CAAE,IAAA,EACR,KAAK,YAAA,CACH,OAAOA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,CAACuO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CAAa,CAAC,CAAA,CAC5D,KAAK,YAAA,CACH,OAAO9B,CAAAA,CAAE,aAAA,CAAc,MAAA,CAAO,CAACuO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CAAa,CAAC,CAAA,CAClE,KAAK,SAAA,CACH,OAAO9B,CAAAA,CAAE,OAAA,CAAQ,MAAA,CACf,CAACuO,CAAAA,CAAKG,CAAAA,GAAMH,CAAAA,CAAMG,CAAAA,CAAE,cAAA,CAAiBA,CAAAA,CAAE,eAAA,CACvC,CACF,CAAA,CACF,KAAK,QAAA,CACH,OAAO1O,CAAAA,CAAE,cAAA,CACX,KAAK,KAAA,CACH,OAAO,MAAA,CAAO,MAAA,CAAOA,CAAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAClC,CAACuO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CACpB,CACF,CAAA,CACF,KAAK,MAAA,CACH,OAAO,MAAA,CAAO,MAAA,CAAO9B,CAAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAClC,CAACuO,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CACpB,CACF,CACJ,CACF,CAAA,CAEMsN,CAAAA,CAAuB,CAC3B,WAAA,CAAa/B,CAAAA,CAAE,IAAA,CACf,SAAA,CAAWa,EAAAA,CAAeZ,CAAC,CAAA,CAAIY,EAAAA,CAAeb,CAAC,CAAA,CAC/C,WAAA,CAAa8B,CAAAA,CAAU7B,CAAC,CAAA,CAAI6B,CAAAA,CAAU9B,CAAC,CACzC,CAAA,CAGA,GAAIA,CAAAA,CAAE,IAAA,GAAS,MAAA,EAAUC,CAAAA,CAAE,IAAA,GAAS,MAAA,CAAQ,CAC1C,IAAMG,CAAAA,CAAQ,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAKJ,CAAAA,CAAE,KAAK,CAAC,CAAA,CACpCK,CAAAA,CAAQ,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAKJ,CAAAA,CAAE,KAAK,CAAC,CAAA,CACpC+B,CAAAA,CAAkB,EAAC,CACnBC,CAAAA,CAAoB,EAAC,CACrBC,CAAAA,CAAmE,EAAC,CAE1E,IAAA,IAAW5T,CAAAA,IAAO+R,CAAAA,CACXD,CAAAA,CAAM,GAAA,CAAI9R,CAAG,CAAA,CAGhB,IAAA,CAAK,SAAA,CAAU0R,CAAAA,CAAE,KAAA,CAAM1R,CAAG,CAAC,CAAA,GAAM,IAAA,CAAK,SAAA,CAAU2R,CAAAA,CAAE,KAAA,CAAM3R,CAAG,CAAC,CAAA,EAE5D4T,CAAAA,CAAQ,IAAA,CAAK,CAAE,GAAA,CAAA5T,CAAAA,CAAK,MAAA,CAAQ0R,CAAAA,CAAE,KAAA,CAAM1R,CAAG,CAAA,CAAG,KAAA,CAAO2R,CAAAA,CAAE,KAAA,CAAM3R,CAAG,CAAE,CAAC,CAAA,CAJ/D0T,CAAAA,CAAM,IAAA,CAAK1T,CAAG,CAAA,CAOlB,IAAA,IAAWA,CAAAA,IAAO8R,CAAAA,CACXC,CAAAA,CAAM,GAAA,CAAI/R,CAAG,CAAA,EAChB2T,CAAAA,CAAQ,IAAA,CAAK3T,CAAG,CAAA,CAIpByT,CAAAA,CAAK,KAAA,CAAQ,CAAE,KAAA,CAAAC,CAAAA,CAAO,OAAA,CAAAC,CAAAA,CAAS,OAAA,CAAAC,CAAQ,EACzC,CAGA,GAAIlC,CAAAA,CAAE,IAAA,GAAS,KAAA,EAASC,CAAAA,CAAE,IAAA,GAAS,KAAA,CAAO,CACxC,IAAMkC,CAAAA,CAAa,IAAI,GAAA,CACrB,MAAA,CAAO,OAAA,CAAQnC,CAAAA,CAAE,QAAQ,CAAA,CACtB,MAAA,CAAO,CAAC,EAAGrN,CAAC,CAAA,GAAMA,CAAAA,GAAM,WAAW,CAAA,CACnC,GAAA,CAAI,CAAC,CAAC7D,CAAE,CAAA,GAAMA,CAAE,CACrB,CAAA,CACAiT,CAAAA,CAAK,cAAA,CAAiB,MAAA,CAAO,OAAA,CAAQ9B,CAAAA,CAAE,QAAQ,CAAA,CAC5C,MAAA,CAAO,CAAC,CAACnR,CAAAA,CAAI6D,CAAC,CAAA,GAAMA,CAAAA,GAAM,WAAA,EAAe,CAACwP,CAAAA,CAAW,GAAA,CAAIrT,CAAE,CAAC,CAAA,CAC5D,GAAA,CAAI,CAAC,CAACA,CAAE,CAAA,GAAMA,CAAE,EACrB,CAEA,GAAIkR,CAAAA,CAAE,IAAA,GAAS,MAAA,EAAUC,CAAAA,CAAE,IAAA,GAAS,MAAA,CAAQ,CAC1C,IAAMkC,CAAAA,CAAa,IAAI,GAAA,CAAInC,CAAAA,CAAE,cAAc,CAAA,CAC3C+B,CAAAA,CAAK,cAAA,CAAiB9B,CAAAA,CAAE,cAAA,CAAe,MAAA,CAAQnR,CAAAA,EAAO,CAACqT,CAAAA,CAAW,GAAA,CAAIrT,CAAE,CAAC,EAC3E,CAEA,OAAOiT,CACT,CAiBA,eAAsBK,EAAAA,CACpBpV,CAAAA,CACAqV,CAAAA,CACA9I,CAAAA,CACiC,CAGjC,GAAM,CAAE,4BAAA,CAAA+I,CAA6B,CAAA,CAAI,MAAM,OAC7C,yCACF,CAAA,CAEMjJ,CAAAA,CAAa,MAAMgJ,CAAAA,CAAgB,IAAA,CAAK9I,CAAY,CAAA,CAC1D,GAAI,CAACF,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,CAAA,6CAAA,EAAgDE,CAAY,CAAA,CAC9D,CAAA,CAIF,IAAMgJ,CAAAA,CAAS,eAAA,CAAgBlJ,CAAU,CAAA,CAEnCmJ,CAAAA,CAASF,CAAAA,CAA6B,CAC1C,GAAGtV,CAAAA,CACH,eAAA,CAAAqV,CACF,CAAC,CAAA,CAED,OAAAG,CAAAA,CAAO,OAAA,CAAQD,CAAM,CAAA,CAEdC,CACT,CAiBO,SAASC,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACM,CACN,IAAMC,CAAAA,CAAU,MAAA,CAAO,IAAA,CAAKD,CAAK,CAAA,CAGjC,IAAA,GAAW,CAACE,CAAAA,CAAQC,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAK,CAAA,CAC/C,IAAA,IAAWI,CAAAA,IAASD,CAAAA,CAAK,IAAA,EAAQ,EAAC,CAChC,GAAI,CAACH,CAAAA,CAAMI,CAAK,CAAA,CACd,MAAM,IAAI,KAAA,CACR,CAAA,oCAAA,EAAuCL,CAAS,CAAA,SAAA,EAAYG,CAAM,CAAA,2BAAA,EAA8BE,CAAK,CAAA,CAAA,CACvG,CAAA,CAWN,GAAI,CALYH,CAAAA,CAAQ,IAAA,CAAM9T,CAAAA,EAAO,CACnC,IAAMkU,CAAAA,CAAOL,CAAAA,CAAM7T,CAAE,CAAA,EAAG,IAAA,CAExB,OAAO,CAACkU,CAAAA,EAAQA,CAAAA,CAAK,MAAA,GAAW,CAClC,CAAC,CAAA,CAEC,MAAM,IAAI,KAAA,CACR,CAAA,oCAAA,EAAuCN,CAAS,CAAA,8CAAA,CAClD,CAAA,CAIF,IAAMO,CAAAA,CAAmC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACrDC,CAAAA,CAAsC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC9D,IAAA,IAAWpU,CAAAA,IAAM8T,CAAAA,CACfM,CAAAA,CAAUpU,CAAE,CAAA,CAAI,EAAC,CAEnB,IAAA,GAAW,CAAC+T,CAAAA,CAAQC,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAK,CAAA,CAAG,CAClDM,CAAAA,CAASJ,CAAM,CAAA,CAAA,CAAKC,CAAAA,CAAK,IAAA,EAAQ,EAAC,EAAG,MAAA,CACrC,IAAA,IAAWC,CAAAA,IAASD,CAAAA,CAAK,IAAA,EAAQ,EAAC,CAChCI,CAAAA,CAAUH,CAAK,CAAA,CAAG,IAAA,CAAKF,CAAM,EAEjC,CAEA,IAAMM,CAAAA,CAAkB,EAAC,CACzB,IAAA,IAAWrU,CAAAA,IAAM8T,CAAAA,CACXK,CAAAA,CAASnU,CAAE,CAAA,GAAM,CAAA,EACnBqU,CAAAA,CAAM,IAAA,CAAKrU,CAAE,CAAA,CAIjB,IAAIsU,CAAAA,CAAU,CAAA,CACd,KAAOD,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAG,CACvB,IAAME,CAAAA,CAAUF,CAAAA,CAAM,KAAA,EAAM,CAC5BC,CAAAA,EAAAA,CACA,IAAA,IAAWE,CAAAA,IAAaJ,CAAAA,CAAUG,CAAO,CAAA,EAAK,EAAC,CAC7CJ,CAAAA,CAASK,CAAS,CAAA,EAAA,CACdL,CAAAA,CAASK,CAAS,CAAA,GAAM,CAAA,EAC1BH,CAAAA,CAAM,IAAA,CAAKG,CAAS,EAG1B,CAEA,GAAIF,CAAAA,GAAYR,CAAAA,CAAQ,MAAA,CACtB,MAAM,IAAI,KAAA,CACR,CAAA,oCAAA,EAAuCF,CAAS,CAAA,2BAAA,EAA8BU,CAAO,CAAA,CAAA,EAAIR,CAAAA,CAAQ,MAAM,CAAA,OAAA,CACzG,CAEJ,CChlBO,SAASW,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAzW,CAAAA,CACoB,CACpB,OAAO,CACL,IAAA,CAAM,UAAA,CACN,QAAA,CAAAwW,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,GAAGzW,CACL,CACF,CAiBO,SAAS0W,EAAAA,CACdF,CAAAA,CACAxW,CAAAA,CAKsB,CACtB,OAAO,CACL,IAAA,CAAM,YAAA,CACN,QAAA,CAAAwW,CAAAA,CACA,GAAGxW,CACL,CACF,CAsBO,SAAS2W,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACA7W,CAAAA,CAOsB,CACtB,OAAO,CACL,IAAA,CAAM,YAAA,CACN,UAAA,CAAY4W,CAAAA,CACZ,OAAA,CAAAC,CAAAA,CACA,GAAG7W,CACL,CACF,CAyBO,SAAS8W,EAAAA,CACdnB,CAAAA,CACAc,CAAAA,CACAzW,CAAAA,CAae,CACf,OAAO,CACL,IAAA,CAAM,KAAA,CACN,KAAA,CAAA2V,CAAAA,CACA,KAAA,CAAOc,CAAAA,GAAWjT,CAAAA,EAAiCA,CAAAA,CAAQ,OAAA,CAAA,CAC3D,GAAGxD,CACL,CACF,CAmBO,SAAS+W,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAjX,CAAAA,CAemB,CACnB,OAAO,CACL,IAAA,CAAM,SAAA,CACN,OAAA,CAAAgX,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,GAAGjX,CACL,CACF,CAiBO,SAASkX,EAAAA,CACdV,CAAAA,CACAxW,CAAAA,CAMgB,CAChB,OAAO,CACL,IAAA,CAAM,MAAA,CACN,QAAA,CAAAwW,CAAAA,CACA,GAAGxW,CACL,CACF,CAyCO,SAASmX,EAAAA,CACdxB,CAAAA,CACAyB,EACApX,CAAAA,CAgBgB,CAChB,OAAO,CACL,IAAA,CAAM,MAAA,CACN,KAAA,CAAA2V,CAAAA,CACA,IAAA,CAAAyB,CAAAA,CACA,GAAGpX,CACL,CACF,CASO,SAASqX,EAAAA,EAA2C,CACzD,OAAO,CACL,MAAA,CAASC,CAAAA,EAAgBA,CAC3B,CACF,CAUO,SAASC,EAAAA,CAAsBlN,CAAAA,CAEX,CACzB,IAAMmN,CAAAA,CAAOnN,CAAAA,EAAM,IAAA,EAAQ,CAAA,CAE3B,OAAO,CACL,MAAA,CAAQ,CAACiN,CAAAA,CAAa5C,CAAAA,GACL,CAAC,GAAG4C,CAAW,CAAA,CAAE,IAAA,CAAK,CAACtE,CAAAA,CAAGC,CAAAA,GAAM,CAC7C,IAAMwE,CAAAA,CAAO/C,CAAAA,CAAQ1B,CAAC,CAAA,EAAG,oBAAA,EAAwB,CAAA,CAGjD,OAAA,CAFa0B,CAAAA,CAAQzB,CAAC,CAAA,EAAG,oBAAA,EAAwB,CAAA,EAEnCwE,CAChB,CAAC,CAAA,CAEa,KAAA,CAAM,CAAA,CAAGD,CAAI,CAE/B,CACF,CASO,SAASE,EAAAA,EAAgD,CAC9D,OAAO,CACL,MAAA,CAAQ,CAACJ,CAAAA,CAAa5C,CAAAA,GACL,CAAC,GAAG4C,CAAW,CAAA,CAAE,IAAA,CAAK,CAACtE,CAAAA,CAAGC,CAAAA,GAAM,CAC7C,IAAM0E,CAAAA,CAAKjD,CAAAA,CAAQ1B,CAAC,CAAA,CACd4E,CAAAA,CAAKlD,CAAAA,CAAQzB,CAAC,CAAA,CAGpB,GAAI,CAAC0E,CAAAA,EAAMA,CAAAA,CAAG,IAAA,GAAS,CAAA,CACrB,OAAO,GAAA,CAET,GAAI,CAACC,CAAAA,EAAMA,CAAAA,CAAG,IAAA,GAAS,CAAA,CACrB,OAAO,CAAA,CAIT,IAAMC,CAAAA,CACJF,CAAAA,CAAG,oBAAA,CAAuB,CAAA,CACtBA,CAAAA,CAAG,MAAA,CAASA,CAAAA,CAAG,IAAA,CAAOA,CAAAA,CAAG,oBAAA,CACzB,MAAA,CAAO,iBAAA,CACPG,CAAAA,CACJF,CAAAA,CAAG,oBAAA,CAAuB,CAAA,CACtBA,CAAAA,CAAG,MAAA,CAASA,CAAAA,CAAG,IAAA,CAAOA,CAAAA,CAAG,oBAAA,CACzB,MAAA,CAAO,iBAAA,CAEb,OAAOC,CAAAA,CAAQC,CACjB,CAAC,CAIL,CACF,CCxSO,SAASC,EAAAA,CACdC,CAAAA,CACmB,CACnB,OAAQA,CAAAA,CAAQ,IAAA,EACd,KAAK,UAAA,CACH,OAAO,CACL,IAAA,CAAM,UAAA,CACN,QAAA,CAAUA,CAAAA,CAAQ,QAAA,CAClB,UAAA,CAAYA,CAAAA,CAAQ,UAAA,CACpB,OAAA,CAASA,CAAAA,CAAQ,OACnB,CAAA,CACF,KAAK,YAAA,CACH,OAAO,CACL,IAAA,CAAM,YAAA,CACN,QAAA,CAAUA,CAAAA,CAAQ,QAAA,CAClB,eAAA,CAAiBA,CAAAA,CAAQ,eAC3B,CAAA,CACF,KAAK,YAAA,CACH,OAAO,CACL,IAAA,CAAM,YAAA,CACN,UAAA,CAAYA,CAAAA,CAAQ,UAAA,CACpB,OAAA,CAASA,CAAAA,CAAQ,OAAA,CACjB,SAAA,CAAWA,CAAAA,CAAQ,SACrB,CAAA,CACF,KAAK,KAAA,CAAO,CACV,IAAMrC,CAAAA,CAA2C,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACnE,IAAA,GAAW,CAAC7T,CAAAA,CAAIgU,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQkC,CAAAA,CAAQ,KAAK,CAAA,CACnDrC,CAAAA,CAAM7T,CAAE,CAAA,CAAI,CACV,OAAA,CAASgU,CAAAA,CAAK,OAAA,CACd,IAAA,CAAMA,CAAAA,CAAK,IAAA,CACX,OAAA,CAASA,CAAAA,CAAK,OAAA,CACd,QAAA,CAAUA,CAAAA,CAAK,QACjB,CAAA,CAGF,OAAO,CACL,IAAA,CAAM,KAAA,CACN,KAAA,CAAAH,CAAAA,CACA,OAAA,CAASqC,CAAAA,CAAQ,OAAA,CACjB,aAAA,CAAeA,CAAAA,CAAQ,aAAA,CACvB,WAAA,CAAaA,CAAAA,CAAQ,WACvB,CACF,CACA,KAAK,SAAA,CACH,OAAO,CACL,IAAA,CAAM,UACN,OAAA,CAASA,CAAAA,CAAQ,OAAA,CACjB,SAAA,CAAWA,CAAAA,CAAQ,SAAA,CACnB,aAAA,CAAeA,CAAAA,CAAQ,aAAA,CACvB,WAAA,CAAaA,CAAAA,CAAQ,WAAA,CACrB,OAAA,CAASA,CAAAA,CAAQ,OAAA,CACjB,SAAA,CACE,OAAOA,CAAAA,CAAQ,SAAA,EAAc,QAAA,CAAWA,CAAAA,CAAQ,SAAA,CAAY,MAChE,CAAA,CACF,KAAK,MAAA,CACH,OAAO,CACL,IAAA,CAAM,MAAA,CACN,QAAA,CAAUA,CAAAA,CAAQ,QAAA,CAClB,OAAA,CAASA,CAAAA,CAAQ,OAAA,CACjB,UAAA,CAAYA,CAAAA,CAAQ,UACtB,CAAA,CACF,KAAK,QAAA,CACH,OAAO,CACL,IAAA,CAAM,QAAA,CACN,QAAA,CAAUA,CAAAA,CAAQ,QAAA,CAClB,SAAA,CAAWA,CAAAA,CAAQ,SAAA,CACnB,SAAA,CAAWA,CAAAA,CAAQ,SAAA,CACnB,OAAA,CAASA,CAAAA,CAAQ,OACnB,CAAA,CACF,KAAK,MAAA,CAAQ,CACX,IAAMC,CAAAA,CAA6C,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACrE,IAAA,GAAW,CAACnW,CAAAA,CAAIgU,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQkC,CAAAA,CAAQ,KAAK,CAAA,CACnDC,CAAAA,CAAOnW,CAAE,CAAA,CAAI,CACX,OAAA,CAASgU,CAAAA,CAAK,OAAA,CACd,QAAA,CAAUA,CAAAA,CAAK,QAAA,CACf,QAAA,CAAUA,CAAAA,CAAK,QAAA,CACf,UAAA,CAAYA,CAAAA,CAAK,UAAA,CACjB,QAAA,CAAUA,CAAAA,CAAK,QACjB,CAAA,CAGF,OAAO,CACL,IAAA,CAAM,MAAA,CACN,KAAA,CAAOmC,CAAAA,CACP,QAAA,CAAUD,CAAAA,CAAQ,QAAA,CAClB,OAAA,CAASA,CAAAA,CAAQ,OACnB,CACF,CACF,CACF,CAEA,IAAME,EAAAA,CAAwB,IAAI,GAAA,CAAI,CACpC,UAAA,CACA,YAAA,CACA,YAAA,CACA,KAAA,CACA,SAAA,CACA,MAAA,CACA,QAAA,CACA,MACF,CAAC,CAAA,CA0BM,SAASC,EAAAA,CACd/W,CAAAA,CACAgX,CAAAA,CACqB,CACrB,GACE,CAAChX,CAAAA,EACD,OAAOA,CAAAA,EAAS,QAAA,EAChB,CAAC8W,EAAAA,CAAsB,GAAA,CAAK9W,CAAAA,CAA2B,IAAI,CAAA,CAE3D,MAAM,IAAI,KAAA,CACR,CAAA,8DAAA,EAAkEA,CAAAA,EAAkC,IAAI,CAAA,CAAA,CAC1G,CAAA,CAEF,IAAMiX,CAAAA,CAAgC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACxD,IAAA,GAAW,CAACC,CAAAA,CAAGC,CAAC,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQnX,CAAI,CAAA,CAClCkX,CAAAA,GAAM,WAAA,EAAeA,CAAAA,GAAM,aAAA,EAAiBA,CAAAA,GAAM,WAAA,GACpDD,CAAAA,CAAKC,CAAC,CAAA,CAAIC,CAAAA,CAAAA,CAId,OAAO,CAAE,GAAGF,CAAAA,CAAM,GAAGD,CAAU,CACjC,CCrLO,SAASI,EAAAA,CACdpB,CAAAA,CACArT,CAAAA,CACAC,CAAAA,CACAyU,CAAAA,CACiD,CACjD,OAAO,CACL,IAAA,CAAMrB,CAAAA,CAGN,OAAA,CAAUvO,CAAAA,EAAuD,CAC/D,IAAM6P,CAAAA,CAAgB,OAAO3U,CAAAA,EAAU,UAAA,CAAaA,CAAAA,CAAM8E,CAAK,CAAA,CAAI9E,CAAAA,CAC7D4U,CAAAA,CAAgB,OAAO3U,CAAAA,EAAU,UAAA,CAAaA,CAAAA,CAAM6E,CAAK,CAAA,CAAI7E,CAAAA,CAEnE,OAAO,CACL,IAAA,CAAM,WAAA,CACN,KAAA,CAAO0U,CAAAA,CACP,KAAA,CAAOC,CACT,CACF,CAAA,CACA,QAAA,CAAAF,CACF,CACF,CAoBO,SAASG,EAAAA,CACd7U,CAAAA,CACAC,CAAAA,CACAR,CAAAA,CACqB,CACrB,OAAO,CACL,IAAA,CAAM,WAAA,CACN,KAAA,CAAAO,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,OAAA,CAAAR,CACF,CACF,CAaO,SAASqV,EAAAA,CACdC,EACAC,CAAAA,CAAY;;AAAA,CAAA,CACJ,CACR,OAAOD,CAAAA,CACJ,GAAA,CAAKrR,CAAAA,EACJ,OAAOA,CAAAA,CAAE,MAAA,EAAW,QAAA,CAAWA,CAAAA,CAAE,MAAA,CAASuR,uBAAAA,CAAcvR,EAAE,MAAM,CAClE,CAAA,CACC,IAAA,CAAKsR,CAAS,CACnB,CAUO,SAASE,GACdH,CAAAA,CACA5J,CAAAA,CACc,CACd,GAAI4J,CAAAA,CAAQ,MAAA,GAAW,CAAA,CACrB,MAAM,IAAI,KAAA,CAAM,gDAAgD,CAAA,CAGlE,OAAOA,CAAAA,CAAQ,MAAA,CAAO,CAACI,CAAAA,CAAM7C,IAC3BnH,CAAAA,CAAMmH,CAAO,CAAA,CAAInH,CAAAA,CAAMgK,CAAI,CAAA,CAAI7C,CAAAA,CAAU6C,CAC3C,CACF,CAQO,SAASC,EAAAA,CAAkBL,CAAAA,CAA8B,CAC9D,OAAOA,CAAAA,CAAQ,GAAA,CAAKrR,GAAMA,CAAAA,CAAE,MAAM,CACpC,CAQO,SAAS2R,EAAAA,CAAgBN,CAAAA,CAAuC,CACrE,OAAOA,CAAAA,CAAQ,MAAA,CAAO,CAAC5E,CAAAA,CAAKzM,CAAAA,GAAMyM,CAAAA,CAAMzM,CAAAA,CAAE,WAAA,CAAa,CAAC,CAC1D,CA6BO,SAAS4R,EAAAA,CAAAA,GACX5J,CAAAA,CACwE,CAC3E,GAAIA,CAAAA,CAAS,SAAW,CAAA,CACtB,MAAM,IAAI,KAAA,CACR,sEACF,CAAA,CAGF,OAAO,MACL6J,EACAtV,CAAAA,GACqB,CACrB,IAAIuV,CAAAA,CAAevV,CAAAA,CACfwV,CAAAA,CAEJ,IAAA,IAAWxB,CAAAA,IAAWvI,EAAU,CAC9B,OAAQuI,CAAAA,CAAQ,IAAA,EACd,KAAK,UAAA,CAAY,CACf,IAAMyB,CAAAA,CAAkBzB,CAAAA,CAClB0B,CAAAA,CAAYD,CAAAA,CAAgB,QAAA,CAAS,GAAA,CAAI,IAAMF,CAAY,EACjEC,CAAAA,CAAa,MAAMF,CAAAA,CAAa,WAAA,CAC9BG,CAAAA,CAAgB,QAAA,CAChBC,CAAAA,CACAD,CAAAA,CAAgB,MAChB,CACE,UAAA,CAAYA,CAAAA,CAAgB,UAAA,CAC5B,OAAA,CAASA,CAAAA,CAAgB,OAC3B,CACF,EACA,KACF,CAEA,KAAK,YAAA,CAAc,CACjB,IAAME,CAAAA,CAAa3B,CAAAA,CACbc,CAAAA,CAAU,MAAMQ,CAAAA,CAAa,aAAA,CACjCK,CAAAA,CAAW,QAAA,CACXJ,CAAAA,CACA,CAAE,UAAWI,CAAAA,CAAW,SAAU,CACpC,CAAA,CAEM1O,CAAAA,CAAa6N,CAAAA,CAAQA,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAC7CU,CAAAA,CAAaG,CAAAA,CAAW,OAAA,CACpBA,CAAAA,CAAW,OAAA,CAAQ1O,CAAAA,EAAY,MAAM,EACrCA,CAAAA,EAAY,MAAA,CAChB,KACF,CAEA,KAAK,YAAA,CAAc,CACjB,IAAM2O,EAAa5B,CAAAA,CACb6B,CAAAA,CAAYD,CAAAA,CAAW,SAAA,EAAa,CAAA,CAC1C,GAAIC,CAAAA,CAAY,CAAA,EAAK,CAAC,MAAA,CAAO,QAAA,CAASA,CAAS,CAAA,CAC7C,MAAM,IAAI,KAAA,CACR,0DACF,EAEF,IAAMC,CAAAA,CAAsC,EAAC,CACzCC,CAAAA,CAAmB,MAAMT,CAAAA,CAAa,QAAA,CACxCM,EAAW,UAAA,CACXL,CACF,CAAA,CAEA,IAAA,IAASS,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQH,CAAAA,CAAWG,IAAS,CAC9C,IAAMjU,CAAAA,CAAMgU,CAAAA,CAAiB,MAAA,CACzBE,CAAAA,CAMJ,GAAI,OAAOlU,GAAQ,QAAA,CACjB,GAAI,CACFkU,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMlU,CAAG,EACzB,MAAQ,CACN,GAAI,CACF,IAAMmU,EAAAA,CAAWnU,CAAAA,CACd,OAAA,CAAQ,0BAAA,CAA4B,EAAE,CAAA,CACtC,OAAA,CAAQ,UAAA,CAAY,GAAG,CAAA,CACpB8M,CAAAA,CAAYxB,EAAAA,CAAsB6I,EAAQ,EAChD,GACErH,CAAAA,EACA,OAAOA,CAAAA,EAAc,QAAA,EACrB,QAAA,GAAaA,CAAAA,CAEboH,CAAAA,CAASpH,OAET,KAEJ,CAAA,KAAQ,CACN,KACF,CACF,CAAA,KAAA,GACS9M,CAAAA,EAAO,OAAOA,GAAQ,QAAA,EAAY,QAAA,GAAYA,CAAAA,CACvDkU,CAAAA,CAASlU,CAAAA,CAAAA,KAET,MAOF,GAJIkU,CAAAA,CAAO,SAAW,UAAA,EAAc,CAACA,CAAAA,CAAO,MAAA,EAIxC,CAACL,CAAAA,CAAW,OAAA,CAAQ,QAAA,CAASK,CAAAA,CAAO,MAAM,CAAA,CAC5C,MAGF,IAAME,CAAAA,CAAe,MAAMb,CAAAA,CAAa,SACtCW,CAAAA,CAAO,MAAA,CACPA,CAAAA,CAAO,WAAA,EAAe,EACxB,CAAA,CACAH,CAAAA,CAAc,IAAA,CAAKK,CAAY,CAAA,CAE/BJ,CAAAA,CAAmB,MAAMT,CAAAA,CAAa,QAAA,CACpCM,CAAAA,CAAW,UAAA,CACX,CAAA,OAAA,EAAUK,EAAO,MAAM,CAAA,wBAAA,EAA2BjB,uBAAAA,CAAcmB,CAAAA,CAAa,MAAM,CAAC,CAAA,CACtF,EACF,CAEAX,CAAAA,CAAaI,CAAAA,CAAW,OAAA,CACpBA,CAAAA,CAAW,OAAA,CAAQG,CAAAA,CAAiB,MAAA,CAAQD,CAAa,EACzDC,CAAAA,CAAiB,MAAA,CACrB,KACF,CAEA,KAAK,KAAA,CAAO,CACV,IAAMK,EAAapC,CAAAA,CAGbqC,CAAAA,CAAkC,CACtC,KAAA,CAAOd,CAAAA,CACP,OAAA,CAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC3B,QAAA,CAAU,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC5B,MAAA,CAAQ,MAAA,CAAO,OAAO,IAAI,CAAA,CAC1B,OAAA,CAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAC7B,CAAA,CAKE,OAAO,OAAA,CAAY,GAAA,EACnB,OAAA,CAAQ,GAAA,EAAK,QAAA,GAAa,YAAA,EAE1B,OAAA,CAAQ,KAAA,CACN,iIACF,CAAA,CAEF,IAAM3D,CAAAA,CAAU,MAAA,CAAO,IAAA,CAAKwE,CAAAA,CAAW,KAAK,CAAA,CAC5C,QAAWvE,CAAAA,IAAUD,CAAAA,CAAS,CAC5B,IAAME,CAAAA,CAAOsE,CAAAA,CAAW,KAAA,CAAMvE,CAAM,EACpCwE,CAAAA,CAAW,QAAA,CAASxE,CAAM,CAAA,CAAI,SAAA,CAC9B,GAAI,CACF,IAAIyE,EAAYf,CAAAA,CAChB,GAAIzD,CAAAA,CAAK,SAAA,CACPwE,CAAAA,CAAYxE,CAAAA,CAAK,SAAA,CAAUuE,CAAU,UAC5BvE,CAAAA,CAAK,IAAA,EAAQA,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAA,CAAG,CAC5C,IAAMyE,EACJ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACpB,IAAA,IAAWxE,EAAAA,IAASD,CAAAA,CAAK,IAAA,CACnBuE,EAAW,OAAA,CAAQtE,EAAK,CAAA,GAAM,KAAA,CAAA,GAChCwE,CAAAA,CAAgBxE,EAAK,CAAA,CAAIsE,CAAAA,CAAW,QAAQtE,EAAK,CAAA,CAAA,CAGrDuE,CAAAA,CAAY,IAAA,CAAK,SAAA,CAAUC,CAAe,EAC5C,CACA,IAAMjU,CAAAA,CAAS,MAAMgT,CAAAA,CAAa,QAAA,CAChCxD,CAAAA,CAAK,OAAA,CACLwE,CACF,CAAA,CACAD,EAAW,OAAA,CAAQxE,CAAM,CAAA,CAAIvP,CAAAA,CAAO,MAAA,CACpC+T,CAAAA,CAAW,OAAA,CAAQxE,CAAM,EAAIvP,CAAAA,CAC7B+T,CAAAA,CAAW,QAAA,CAASxE,CAAM,CAAA,CAAI,YAChC,CAAA,MAASzT,CAAAA,CAAO,CAId,GAHAiY,CAAAA,CAAW,QAAA,CAASxE,CAAM,CAAA,CAAI,OAAA,CAC9BwE,CAAAA,CAAW,MAAA,CAAOxE,CAAM,CAAA,CACtBzT,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAAA,CACnDgY,EAAW,WAAA,GAAgB,MAAA,CAC7B,MAAMhY,CAEV,CACF,CACAoX,CAAAA,CAAa,MAAMY,EAAW,KAAA,CAAMC,CAAU,CAAA,CAC9C,KACF,CAEA,KAAK,SAAA,CAAW,CACd,IAAMG,CAAAA,CAAiBxC,CAAAA,CAEjByC,CAAAA,CAAUD,CAAAA,CAAe,aAAA,EAAiB,CAAA,CAC1CE,CAAAA,CACJF,CAAAA,CAAe,kBACbrK,CAAAA,EAA0C,CAC1C,GAAI,OAAOA,CAAAA,EAAW,QAAA,CACpB,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAM,CAC1B,CAAA,KAAQ,CACN,OAAO,CAAE,OAAQ,KAAA,CAAO,QAAA,CAAUA,CAAO,CAC3C,CAEF,OAAIA,CAAAA,EAAU,OAAOA,GAAW,QAAA,EAAY,QAAA,GAAYA,CAAAA,CAC/CA,CAAAA,CAGF,CAAE,MAAA,CAAQ,KAAA,CAAO,QAAA,CAAU,0BAA2B,CAC/D,CAAA,CAAA,CACIwK,CAAAA,CACJH,CAAAA,CAAe,eAAA,GACd,CAACI,CAAAA,CAAapQ,CAAAA,GACb,GAAGoQ,CAAG;;AAAA;AAAA,EAA4CpQ,CAAQ;;AAAA,6BAAA,CAAA,CAAA,CAE1DO,CAAAA,CAAiBwO,EACjBsB,CAAAA,CACJ,IAAA,IAAS3Z,EAAI,CAAA,CAAGA,CAAAA,CAAIuZ,EAASvZ,CAAAA,EAAAA,CAAK,CAKhC2Z,GAJuB,MAAMvB,CAAAA,CAAa,SACxCkB,CAAAA,CAAe,OAAA,CACfzP,CACF,CAAA,EACgC,MAAA,CAChC,IAAM+P,EAAAA,CACJ,OAAOD,GAAmB,QAAA,CACtBA,CAAAA,CACA,KAAK,SAAA,CAAUA,CAAc,EAC7BE,CAAAA,CAAa,MAAMzB,EAAa,QAAA,CACpCkB,CAAAA,CAAe,UACfM,EACF,CAAA,CACM1P,EAAasP,CAAAA,CAAUK,CAAAA,CAAW,MAAM,CAAA,CAC9C,GAAI3P,CAAAA,CAAW,MAAA,CACb,MAEElK,CAAAA,CAAIuZ,EAAU,CAAA,EAAKrP,CAAAA,CAAW,WAChCL,CAAAA,CAAiB4P,CAAAA,CAAWpB,EAAcnO,CAAAA,CAAW,QAAA,CAAUlK,CAAC,CAAA,EAEpE,CACAsY,EAAagB,CAAAA,CAAe,OAAA,CACxBA,EAAe,OAAA,CAAQK,CAAc,EACrCA,CAAAA,CACJ,KACF,CAEA,KAAK,MAAA,CAAQ,CACX,IAAMG,CAAAA,CAAchD,EAMpBwB,CAAAA,CAAAA,CALmB,MAAMF,EAAa,OAAA,CACpC0B,CAAAA,CAAY,SACZzB,CAAAA,CACA,CAAE,QAASyB,CAAAA,CAAY,OAAA,CAAS,QAASA,CAAAA,CAAY,OAAQ,CAC/D,CAAA,EACwB,MAAA,CACxB,KACF,CAEA,KAAK,QAAA,CAAU,CACb,IAAMC,CAAAA,CAAgBjD,EAatBwB,CAAAA,CAAAA,CAZqB,MAAMF,EAAa,SAAA,CACtC2B,CAAAA,CAAc,SACdA,CAAAA,CAAc,SAAA,CACd1B,EACA,CACE,SAAA,CAAW0B,EAAc,SAAA,CACzB,OAAA,CAASA,EAAc,OAAA,CACvB,cAAA,CAAgBA,EAAc,cAAA,CAC9B,MAAA,CAAQA,EAAc,MAAA,CACtB,OAAA,CAASA,EAAc,OACzB,CACF,GAC0B,MAAA,CAC1B,KACF,CAEA,KAAK,MAAA,CAAQ,CACX,IAAMzO,CAAAA,CAAKwL,EACLkD,CAAAA,CACJ,OAAO3B,GAAiB,QAAA,CACpB,CAAE,KAAA,CAAOA,CAAa,CAAA,CAAA,CACrB,IAAM,CACL,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAY,CAChC,CAAA,KAAQ,CACN,OAAO,CAAE,MAAOA,CAAa,CAC/B,CACF,CAAA,GAAG,CAiBTC,GAhBmB,MAAMF,CAAAA,CAAa,OAAA,CACpC9M,CAAAA,CAAG,KAAA,CACH0O,CAAAA,CACA1O,EAAG,IAAA,CACH,CACE,aAAcA,CAAAA,CAAG,YAAA,CACjB,SAAUA,CAAAA,CAAG,QAAA,CACb,QAASA,CAAAA,CAAG,OAAA,CACZ,QAASA,CAAAA,CAAG,OAAA,CACZ,OAAQA,CAAAA,CAAG,MAAA,CACX,kBAAmBA,CAAAA,CAAG,iBAAA,CACtB,UAAA,CAAYA,CAAAA,CAAG,UAAA,CACf,MAAA,CAAQA,EAAG,MAAA,CACX,OAAA,CAASA,EAAG,OACd,CACF,GACwB,MAAA,CACxB,KACF,CAEA,QACE,MAAM,IAAI,KAAA,CACR,CAAA,8DAAA,EAAkEwL,EAA6B,IAAI,CAAA,CAAA,CACrG,CACJ,CAGIwB,CAAAA,GAAe,SACjBD,CAAAA,CACE,OAAOC,GAAe,QAAA,CAClBA,CAAAA,CACAR,wBAAcQ,CAAU,CAAA,EAElC,CAEA,OAAOA,CACT,CACF,CAqBO,SAAS2B,GACdC,CAAAA,CACAC,CAAAA,CACU,CACV,OAAO,MAAA,CAAO,QAAQD,CAAQ,CAAA,CAC3B,MAAA,CAAO,CAAC,EAAGE,CAAG,CAAA,GAAM,CACnB,IAAMC,CAAAA,CAAOD,CAAAA,CAAI,cAAgB,EAAC,CAElC,OAAOD,CAAAA,CAAqB,KAAA,CAAOjU,GAAMmU,CAAAA,CAAK,QAAA,CAASnU,CAAC,CAAC,CAC3D,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAACtF,CAAE,CAAA,GAAMA,CAAE,CACrB,CAuBO,SAAS0Z,EAAAA,CACdJ,CAAAA,CACAK,EACAC,CAAAA,CACA1b,CAAAA,CAIiD,CACjD,GAAM,CAAE,SAAAyY,CAAAA,CAAU,MAAA,CAAAkD,CAAO,CAAA,CAAI3b,CAAAA,EAAW,EAAC,CAIrC4b,CAAAA,CAA0B,EAAC,CAC3BC,CAAAA,CAAkB,CAAA,CAClBC,EAAoB,EAAA,CAExB,OAAO,CACL,IAAA,CAAOjT,CAAAA,EAAU,CACf,IAAM0S,CAAAA,CAAOE,EAAgB5S,CAAK,CAAA,CAClC,OAAA+S,CAAAA,CAAgBT,EAAAA,CAAuBC,EAAUG,CAAI,CAAA,CACrDM,IAEOD,CAAAA,CAAc,MAAA,CAAS,CAChC,CAAA,CACA,OAAA,CAAU/S,GAAU,CAElB,IAAMkT,EACJF,CAAAA,GAAoBC,CAAAA,EAAqBF,EAAc,MAAA,CAAS,CAAA,EAC1DE,EAAoBD,CAAAA,CAAkBD,CAAAA,EACxCT,GAAuBC,CAAAA,CAAUK,CAAAA,CAAgB5S,CAAK,CAAC,CAAA,CAE7D,GAAIkT,CAAAA,CAAQ,MAAA,GAAW,CAAA,CACrB,MAAM,IAAI,KAAA,CACR,yDAAyDN,CAAAA,CAAgB5S,CAAK,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAC5F,CAAA,CAKF,OAAO,CACL,IAAA,CAAM,YACN,KAAA,CAJa8S,CAAAA,CAASA,EAAOI,CAAAA,CAASX,CAAQ,EAAIW,CAAAA,CAAQ,CAAC,CAAA,CAK3D,KAAA,CAAOL,CAAAA,CAAS7S,CAAK,CACvB,CACF,CAAA,CACA,SAAA4P,CACF,CACF,CAMA,IAAIuD,EAAAA,CAAgC,MAmC7B,SAASC,EAAAA,CAAiBtZ,EASmB,CAClD,GAAM,CAAE,IAAA,CAAAyU,CAAAA,CAAM,MAAArT,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAyU,CAAAA,CAAU,OAAA,CAAAjV,EAAS,OAAA,CAAAxD,CAAQ,EAAI2C,CAAAA,CACvD3C,CAAAA,EAAW,CAACgc,EAAAA,GACdA,EAAAA,CAAgC,KAChC,OAAA,CAAQ,IAAA,CACN,kHACF,CAAA,CAAA,CAEF,IAAME,EAAoBzD,CAAAA,EAAYzY,CAAAA,EAAS,SACzCmc,CAAAA,CAAmB3Y,CAAAA,EAAWxD,GAAS,OAAA,CAE7C,OAAO,CACL,IAAA,CAAAoX,CAAAA,CACA,QAAUvO,CAAAA,GACP,CACC,KAAM,WAAA,CACN,KAAA,CAAA9E,EACA,KAAA,CAAOC,CAAAA,CAAM6E,CAAK,CAAA,CAClB,OAAA,CAASsT,CACX,CAAA,CAAA,CACF,QAAA,CAAUD,CACZ,CACF,CA0CO,SAASE,EAAAA,CAAoBzZ,CAAAA,CAA2C,CAC7E,GAAM,CACJ,QAAA,CAAA6T,EACA,SAAA,CAAAS,CAAAA,CACA,UAAA4C,CAAAA,CACA,OAAA,CAAAwC,EACA,cAAA,CAAAC,CAAAA,CACA,OAAApZ,CAAAA,CACA,OAAA,CAAAqZ,CACF,CAAA,CAAI5Z,CAAAA,CAEJ,GAAI6T,CAAAA,CAAS,MAAA,CAAS,EACpB,MAAM,IAAI,MACR,4DACF,CAAA,CAEF,GAAIqD,CAAAA,EAAa,IAAA,GAASA,EAAY,CAAA,EAAK,CAAC,OAAO,QAAA,CAASA,CAAS,GACnE,MAAM,IAAI,MAAM,sDAAsD,CAAA,CAGxE,OAAO,CACL,IAAA,CAAM,QAAA,CACN,QAAA,CAAArD,CAAAA,CACA,SAAA,CAAAS,EACA,SAAA,CAAA4C,CAAAA,CACA,QAAAwC,CAAAA,CACA,cAAA,CAAAC,EACA,MAAA,CAAApZ,CAAAA,CACA,QAAAqZ,CACF,CACF,CAcA,eAAsBC,EAAAA,CACpBlD,EACA3W,CAAAA,CACAqB,CAAAA,CAC0B,CAC1B,OAAOsV,CAAAA,CAAa,UAAa3W,CAAAA,CAAO,QAAA,CAAUA,EAAO,SAAA,CAAWqB,CAAAA,CAAO,CACzE,SAAA,CAAWrB,CAAAA,CAAO,UAClB,OAAA,CAASA,CAAAA,CAAO,QAChB,cAAA,CAAgBA,CAAAA,CAAO,eACvB,MAAA,CAAQA,CAAAA,CAAO,OACf,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAC,CACH,CAkCO,SAAS8Z,EAAAA,CACdC,CAAAA,CACAC,EACA1C,CAAAA,CAMiD,CAEjD,IAAI2C,CAAAA,CACAC,CAAAA,CAAiB,EACjBf,CAAAA,CAAoB,EAAA,CAExB,OAAO,CACL,IAAA,CAAOjT,GAAU,CAGf,IAAMlE,EADUkE,CAAAA,CAAM,SAAA,GACE6T,CAAY,CAAA,CACpC,OAAAE,CAAAA,CAAYjY,CAAAA,CACZkY,CAAAA,EAAAA,CAEOF,CAAAA,CAAUhY,CAAK,CACxB,CAAA,CACA,QAAUkE,CAAAA,EAAU,CAElB,IAAMlE,CAAAA,CACJkY,CAAAA,GAAmBf,GACbA,CAAAA,CAAoBe,CAAAA,CAAiBD,GACtC/T,CAAAA,CAAM,SAAA,GACL6T,CACF,CAAA,CAEN,OAAO,CACL,IAAA,CAAM,WAAA,CACN,KAAA,CAAOzC,CAAAA,CAAO,KAAA,CACd,KAAA,CAAOA,EAAO,KAAA,CAAMtV,CAAK,EACzB,OAAA,CAASsV,CAAAA,CAAO,OAClB,CACF,CAAA,CACA,SAAUA,CAAAA,CAAO,QACnB,CACF,CAkDO,SAAS6C,GACd1F,CAAAA,CACAzU,CAAAA,CACiD,CACjD,GAAM,CAAE,MAAAoB,CAAAA,CAAO,KAAA,CAAAC,EAAO,QAAA,CAAAyU,CAAAA,CAAU,QAAAjV,CAAQ,CAAA,CAAIb,EAE5C,OAAO,CACL,KAAAyU,CAAAA,CACA,OAAA,CAAUvO,IAGD,CACL,IAAA,CAAM,YACN,KAAA,CAAA9E,CAAAA,CACA,MAAOC,CAAAA,CAAM6E,CAAAA,CAAO,CAAC,CAAA,CACrB,OAAA,CAAArF,CACF,GAEF,QAAA,CAAAiV,CACF,CACF,CC1uBA,IAAMsE,GAAgBC,6BAAAA,CAAsC,WAAW,EAkDhE,SAAS1H,EAAAA,CACdtV,EACwB,CACxB,GAAM,CACJ,MAAA,CAAA8D,CAAAA,CACA,OAAQmZ,CAAAA,CACR,QAAA,CAAAxN,CAAAA,CAAW,EAAC,CACZ,SAAA,CAAAyN,EACA,iBAAA,CAAAC,CAAAA,CACA,kBAAAC,CAAAA,CAAoB,GAAA,CACpB,MAAOC,CAAAA,CAAW,KAAA,CAClB,WAAAxN,CAAAA,CAAa,GACb,KAAA,CAAAyN,CAAAA,CAAQ,EAAC,CACT,MAAA,CAAQC,EACR,UAAA,CAAYC,CAAAA,CACZ,cAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,EAAC,CACX,iBAAA,CAAAC,GACA,oBAAA,CAAAC,CAAAA,CAAuB,KACvB,iBAAA,CAAAC,CAAAA,CAAoB,IACpB,WAAA,CAAaC,EAAAA,CAAkB,EAAC,CAChC,SAAA,CAAWC,GAAgB,EAAC,CAC5B,eAAgBC,EAAAA,CAChB,sBAAA,CAAAC,GAAyB,EAAA,CACzB,eAAA,CAAAC,GACA,WAAA,CAAAC,CAAAA,CACA,gBAAA9I,EAAAA,CACA,WAAA,CAAa+I,GAAoB,EAAC,CAClC,aAAAC,EAAAA,CACA,mBAAA,CAAAC,GAAsB,GAAA,CACtB,MAAA,CAAQC,GACR,UAAA,CAAYC,EAAAA,CACZ,MAAOC,EAAAA,CAAa,EACtB,CAAA,CAAIze,CAAAA,CAGE0e,EAAAA,CAAQ,OAAOrB,CAAAA,EAAa,QAAA,CAAW,KAAO,CAAC,CAACA,EAChDsB,EAAAA,CAAqB,GAAA,CAGrBC,EAAwB,CAAE,GAAG3B,CAAY,CAAA,CAGzC4B,EAAAA,CAA0C,CAAE,GAAGJ,EAAW,EAG1DK,EAAAA,CASF,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACtB,IAAA,IAAWC,KAAU,MAAA,CAAO,IAAA,CAAKF,EAAK,CAAA,CACpCC,EAAAA,CAAWC,CAAM,CAAA,CAAI,CAAE,OAAQ,MAAO,CAAA,CAIxC,IAAMC,EAAAA,CAAiB,IAAI,IAG3B,GAAI,CAACpB,GAAwB,CAACD,EAAAA,CAC5B,MAAM,IAAI,KAAA,CACR,CAAA;AAAA;AAAA,8EAAA,CAIF,EAIF,GAAIM,EAAAA,CAAyB,GAAKA,EAAAA,CAAyB,CAAA,CACzD,MAAM,IAAI,KAAA,CACR,CAAA,2EAAA,EAA8EA,EAAsB,EACtG,CAAA,CAIF,IAAMgB,GAAe,IAAI,GAAA,CAAI,CAC3B,SAAA,CACA,WAAA,CACA,aAAA,CACA,WAAA,CACA,WACA,SAAA,CACA,gBACF,CAAC,CAAA,CACD,IAAA,IAAWte,KAAW,MAAA,CAAO,IAAA,CAAKie,CAAM,CAAA,CACtC,GAAIK,GAAa,GAAA,CAAIte,CAAO,EAC1B,MAAM,IAAI,MACR,CAAA,iCAAA,EAAoCA,CAAO,CAAA,gCAAA,CAC7C,CAAA,CAGJ,OAAW,CAACoe,CAAAA,CAAQG,CAAO,CAAA,GAAK,MAAA,CAAO,QAAQL,EAAK,CAAA,CAAG,CACrD,GAAI,CAACE,GAAUA,CAAAA,CAAO,IAAA,KAAWA,CAAAA,CAC/B,MAAM,IAAI,KAAA,CACR,CAAA,wEAAA,EAA2EA,CAAM,CAAA,CAAA,CACnF,EAEF,GAAIE,EAAAA,CAAa,IAAIF,CAAM,CAAA,CACzB,MAAM,IAAI,KAAA,CACR,mCAAmCA,CAAM,CAAA,gCAAA,CAC3C,EAGF,GACEG,CAAAA,CAAQ,UAAY,MAAA,GACnB,CAAC,OAAO,QAAA,CAASA,CAAAA,CAAQ,OAAO,CAAA,EAAKA,EAAQ,OAAA,EAAW,CAAA,CAAA,CAEzD,MAAM,IAAI,KAAA,CACR,gCAAgCH,CAAM,CAAA,qCAAA,CACxC,EAEF,GACEG,CAAAA,CAAQ,gBAAkB,MAAA,GACzB,CAAC,OAAO,QAAA,CAASA,CAAAA,CAAQ,aAAa,CAAA,EACrCA,CAAAA,CAAQ,aAAA,CAAgB,CAAA,EACxB,CAAC,MAAA,CAAO,SAAA,CAAUA,EAAQ,aAAa,CAAA,CAAA,CAEzC,MAAM,IAAI,KAAA,CACR,gCAAgCH,CAAM,CAAA,6CAAA,CACxC,EAGF,GAAIG,CAAAA,CAAQ,MAAO,CACjB,GAAM,CAAE,QAAA,CAAAC,CAAAA,CAAU,OAAA,CAAAC,CAAQ,EAAIF,CAAAA,CAAQ,KAAA,CACtC,GAAI,CAAC,MAAA,CAAO,SAASC,CAAQ,CAAA,EAAKA,EAAW,CAAA,CAC3C,MAAM,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgCJ,CAAM,CAAA,6CAAA,CACxC,CAAA,CAEF,GAAIK,CAAAA,GAAY,MAAA,GAAc,CAAC,MAAA,CAAO,SAASA,CAAO,CAAA,EAAKA,EAAU,CAAA,CAAA,CACnE,MAAM,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgCL,CAAM,CAAA,4CAAA,CACxC,CAEJ,CACF,CAGA,IAAA,GAAW,CAACA,CAAAA,CAAQzD,CAAG,IAAK,MAAA,CAAO,OAAA,CAAQuD,EAAK,CAAA,CAC9CG,GAAe,GAAA,CAAID,CAAAA,CAAQ,IAAIzL,EAAAA,CAAUgI,CAAAA,CAAI,eAAiB,CAAC,CAAC,CAAA,CAIlE,IAAA,IAAWyD,KAAU,MAAA,CAAO,IAAA,CAAKF,EAAK,CAAA,CACpC,GAAID,EAAOG,CAAM,CAAA,CACf,MAAM,IAAI,MACR,CAAA,2BAAA,EAA8BA,CAAM,yFACtC,CAAA,CAKJ,IAAMM,GAAqB,IAAI,GAAA,CAAI,CACjC,GAAG,MAAA,CAAO,KAAKT,CAAM,CAAA,CACrB,GAAG,MAAA,CAAO,IAAA,CAAKC,EAAK,CACtB,CAAC,CAAA,CACKS,EAAAA,CAA+D,EAAC,CAEtE,IAAA,GAAW,CAAC5J,CAAAA,CAAWsC,CAAO,IAAK,MAAA,CAAO,OAAA,CAAQvI,CAAQ,CAAA,CAAG,CAC3D,IAAM8P,CAAAA,CAA0B,GAEhC,OAAQvH,CAAAA,CAAQ,MACd,KAAK,UAAA,CACHuH,CAAAA,CAAc,KAAK,GAAGvH,CAAAA,CAAQ,QAAQ,CAAA,CACtC,MACF,KAAK,YAAA,CACHuH,CAAAA,CAAc,KAAK,GAAGvH,CAAAA,CAAQ,QAAQ,CAAA,CACtC,MACF,KAAK,YAAA,CACHuH,CAAAA,CAAc,KAAKvH,CAAAA,CAAQ,UAAA,CAAY,GAAGA,CAAAA,CAAQ,OAAO,CAAA,CACzD,MACF,KAAK,KAAA,CACH,IAAA,IAAWlC,KAAQ,MAAA,CAAO,MAAA,CAAOkC,EAAQ,KAAK,CAAA,CAC5CuH,EAAc,IAAA,CAAKzJ,CAAAA,CAAK,OAAO,CAAA,CAEjC,MACF,KAAK,SAAA,CACHyJ,CAAAA,CAAc,IAAA,CAAKvH,CAAAA,CAAQ,QAASA,CAAAA,CAAQ,SAAS,EACrD,MACF,KAAK,OACHuH,CAAAA,CAAc,IAAA,CAAK,GAAGvH,CAAAA,CAAQ,QAAQ,EACtC,MACF,KAAK,SACHuH,CAAAA,CAAc,IAAA,CACZ,GAAIvH,CAAAA,CAA0B,QAAA,CAC7BA,CAAAA,CAA0B,SAC7B,EACA,KACJ,CAEA,QAAWrX,CAAAA,IAAW4e,CAAAA,CACfF,GAAmB,GAAA,CAAI1e,CAAO,GACjC2e,EAAAA,CAAc,IAAA,CAAK,CAAE,SAAA,CAAA5J,CAAAA,CAAW,QAAA/U,CAAQ,CAAC,EAG/C,CAEA,GAAI2e,EAAAA,CAAc,MAAA,CAAS,EAAG,CAC5B,IAAME,EAAUF,EAAAA,CACb,GAAA,CACC,CAAC,CAAE,SAAA,CAAA5J,EAAW,OAAA,CAAA/U,CAAQ,IACpB,CAAA,aAAA,EAAgB+U,CAAS,+BAA+B/U,CAAO,CAAA,CAAA,CACnE,EACC,IAAA,CAAK;AAAA,CAAI,CAAA,CACZ,MAAM,IAAI,KAAA,CACR,CAAA;AAAA,EAA+F6e,CAAO;;AAAA,mBAAA,EAA0B,CAAC,GAAGH,EAAkB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAK,QAAQ,CAAA,CAChL,CACF,CAGA,IAAA,GAAW,CAAC3J,CAAAA,CAAWsC,CAAO,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQvI,CAAQ,CAAA,CACpDuI,CAAAA,CAAQ,IAAA,GAAS,KAAA,EACnBvC,EAAAA,CAAmBC,CAAAA,CAAWsC,CAAAA,CAAQ,KAAK,CAAA,CAK/C,IAAIrW,EAAiC,IAAA,CACjC8d,EAAAA,CACF,IAAA,CACEf,EAAAA,GACF/c,CAAAA,CAAW5B,EAAAA,CAAoB,CAQ7B,YAAA,CAAee,CAAAA,EAAuB,CACpC,GAAI,CACDmH,CAAAA,CAAe,OAAA,EAAS,OAAOnH,CAAU,EAC5C,CAAA,KAAQ,CAER,CACF,CACF,CAAC,CAAA,CAAA,CAIH,IAAI4e,EAAAA,CAA8C,IAAA,CAC9CC,EAAAA,CAAiD,IAAA,CACjDxB,CAAAA,GACFuB,EAAAA,CAAwBpb,EAAAA,CAAoB6Z,CAAAA,CAAY,aAAa,CAAA,CACjEA,CAAAA,CAAY,iBAAA,GAAsB,aAAA,GACpCwB,EAAAA,CAAqB,IAAI,GAAA,CAAA,CAAA,CAK7B,SAASC,CAAAA,CACPjQ,CAAAA,CACArP,CAAAA,CACM,CACN,GAAI,CACDgd,CAAAA,CAAM3N,CAAI,CAAA,GAAgDrP,CAAK,EAClE,CAAA,MAASuf,CAAAA,CAAW,CACdnB,EAAAA,EACF,OAAA,CAAQ,KAAA,CAAM,CAAA,6BAAA,EAAgC/O,CAAI,CAAA,OAAA,CAAA,CAAWkQ,CAAS,EAE1E,CACF,CAIA,IAAMC,EAAAA,CAAkC,CACtC,cAAA,CAAgBnX,MAAAA,CAAE,MAAA,EAAO,CACzB,QAAA,CAAUA,MAAAA,CAAE,MAAA,EAAO,CACnB,WAAYA,MAAAA,CAAE,KAAA,EAAM,CACpB,gBAAA,CAAkBA,MAAAA,CAAE,KAAA,EAAM,CAC1B,oBAAA,CAAsBA,MAAAA,CAAE,OAAA,EAC1B,CAAA,CAGI6V,EAAAA,GACFsB,EAAAA,CAAWrX,EAAc,CAAA,CAAIE,MAAAA,CAAE,MAAA,EAAO,CAAA,CAIpC4V,EAAAA,EAAmB,MAAA,CAAO,IAAA,CAAKA,EAAe,CAAA,CAAE,MAAA,CAAS,CAAA,GAC3DuB,EAAAA,CAAW,SAAA,CAAYnX,MAAAA,CAAE,MAAA,IAG3B,IAAMoX,EAAAA,CAAc,CAClB,KAAA,CAAOD,EAAAA,CACP,WAAA,CAAa,EAAC,CACd,MAAA,CAAQ,EAAC,CACT,YAAA,CAAc,EAChB,CAAA,CAIME,EAAAA,CACJpW,EAAAA,CAA+BkU,EAAe,CAAA,CAG5CL,CAAAA,GACFuC,EAAAA,CAAiB,aAAA,CAAgB,CAC/B,QAAA,CAAU,GAAA,CAEV,IAAA,CAAOnX,CAAAA,EACUC,0BAAAA,CAAsBD,CAAAA,CAAO,gBAAgB,EAE5C4U,CAAAA,CAElB,OAAA,CAAS,CAAE,IAAA,CAAM,yBAA0B,CAC7C,CAAA,CAAA,CAIF,IAAMwC,EAAAA,CAAsC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAG9D,IAAA,GAAW,CAACne,CAAAA,CAAIE,CAAQ,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQ+b,EAAa,CAAA,CACvDkC,EAAAA,CAAene,CAAE,CAAA,CAAI,CACnB,WAAA,CAAaE,CAAAA,CAAS,WAAA,CACtB,GAAA,CAAKA,EAAS,GAAA,CAEd,OAAA,CAAS,MAAOC,CAAAA,CAAkBuB,CAAAA,GAAiB,CACjD,IAAMqC,CAAAA,CAAQ8D,EAAAA,CAAqBnG,CAAAA,CAAQ,KAAK,CAAA,CAM1C0c,CAAAA,CAEF,CACF,KAAA,CARoB,CACpB,GAAG1c,CAAAA,CAAQ,KAAA,CACX,GAAGqC,CACL,CAAA,CAME,QAAA,CAAU,MACR9B,CAAAA,CACAC,CAAAA,CACAqG,CAAAA,GAEOvG,CAAAA,CAAUC,CAAAA,CAAOC,CAAAA,CAAOqG,CAAI,CAAA,CAErC,MAAA,CAAQ7G,CAAAA,CAAQ,MAClB,CAAA,CAEA,OAAOxB,CAAAA,CAAS,OAAA,CAAQC,CAAAA,CAAKie,CAAW,CAC1C,CACF,CAAA,CAIFD,EAAAA,CAAe,OAAA,CAAU,CACvB,WAAA,CAAajD,6BAAAA,CACX,yBACF,CAAA,CAEA,OAAA,CAAS,SAAY,CACnBmD,EAAAA,CAAe,QAAA,CACXzB,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,iEACF,EAEJ,CACF,CAAA,CAGAuB,EAAAA,CAAe,UAAA,CAAa,CAC1B,WAAA,CAAalD,EAAAA,CAEb,OAAA,CAAS,MAAO9a,CAAAA,EAA6B,CAC3C,MAAMme,EAAAA,CAAene,CAAAA,CAAI,KAAA,CAAOA,CAAAA,CAAI,KAAK,EAC3C,CACF,CAAA,CAEA,IAAMoe,EAAAA,CAAoBC,iBAAAA,CAAa,SAAA,CAAW,CAChD,MAAA,CAAQP,EAAAA,CACR,IAAA,CAAOlX,CAAAA,EAAU,CACfG,0BAAAA,CAAcH,EAAO,gBAAA,CAAkB,CAAC,CAAA,CACxCG,0BAAAA,CAAcH,CAAAA,CAAO,UAAA,CAAY,MAAM,CAAA,CACvCG,0BAAAA,CAAcH,CAAAA,CAAO,YAAA,CAAc,EAAE,CAAA,CACrCG,0BAAAA,CAAcH,CAAAA,CAAO,kBAAA,CAAoB,EAAE,CAAA,CAC3CG,0BAAAA,CAAcH,CAAAA,CAAO,sBAAA,CAAwB,KAAK,CAAA,CAC9C2V,EAAAA,EACFxV,0BAAAA,CAAcH,CAAAA,CAAOJ,EAAAA,CAAgB,CAAE,GAAG+V,EAAAA,CAAiB,IAAK,CAAC,EAGrE,CAAA,CACA,WAAA,CAAawB,EAAAA,CACb,SAAA,CAAWC,EACb,CAAC,CAAA,CAIKM,EAAAA,CAAkC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC1DA,EAAAA,CAAW,OAAA,CAAUF,EAAAA,CAErB,IAAA,GAAW,CAAC1f,CAAAA,CAAS6f,CAAY,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQ5B,CAAM,CAAA,CAAG,CAE5D,IAAM6B,EAA2CD,CAAAA,CAAa,WAAA,CAC1D5W,EAAAA,CAA+B4W,CAAAA,CAAa,WAAW,CAAA,CACvD,EAAC,CAICE,CAAAA,CAAyC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACjE,GAAIF,CAAAA,CAAa,SAAA,CACf,IAAA,GAAW,CAAC1e,CAAAA,CAAIE,CAAQ,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQwe,CAAAA,CAAa,SAAS,CAAA,CAChEE,CAAAA,CAAkB5e,CAAE,CAAA,CAAI,CACtB,YAAaE,CAAAA,CAAS,WAAA,CACtB,GAAA,CAAKA,CAAAA,CAAS,GAAA,CAEd,OAAA,CAAS,MAAOC,CAAAA,CAAkBuB,CAAAA,GAAiB,CACjD,IAAMqC,CAAAA,CAAQ8D,EAAAA,CAAqBnG,CAAAA,CAAQ,KAAK,CAAA,CAM1Cmd,CAAAA,CAEF,CACF,KAAA,CARoB,CACpB,GAAGnd,CAAAA,CAAQ,KAAA,CACX,GAAGqC,CACL,CAAA,CAME,QAAA,CAAU,MACR9B,CAAAA,CACAC,CAAAA,CACAqG,IAEOvG,CAAAA,CAAUC,CAAAA,CAAOC,CAAAA,CAAOqG,CAAI,CAAA,CAErC,MAAA,CAAQ7G,CAAAA,CAAQ,MAClB,CAAA,CAEA,OAAOxB,CAAAA,CAAS,OAAA,CAAQC,CAAAA,CAAK0e,CAAe,CAC9C,CACF,CAAA,CAIJJ,EAAAA,CAAW5f,CAAO,CAAA,CAAI2f,iBAAAA,CAAa3f,CAAAA,CAAS,CAC1C,MAAA,CAAQ+H,EAAAA,CACR,IAAA,CAAOG,CAAAA,EAAU,CACfE,EAAAA,CAAcF,CAAAA,CAAO,CACnB,MAAA,CAAQ,MAAA,CACR,YAAA,CAAc2X,CAAAA,CAAa,KAAA,CAAM,IAAA,CACjC,KAAA,CAAO,IAAA,CACP,MAAA,CAAQ,IAAA,CACR,KAAA,CAAO,IAAA,CACP,UAAA,CAAY,CAAA,CACZ,SAAA,CAAW,CAAA,CACX,SAAA,CAAW,IAAA,CACX,WAAA,CAAa,IACf,CAAC,CAAA,CACDtX,EAAAA,CAAiBL,CAAAA,CAAO,CAAE,OAAA,CAAS,EAAC,CAAG,QAAA,CAAU,GAAI,QAAA,CAAU,EAAG,CAAC,CAAA,CACnEO,EAAAA,CAAgBP,CAAAA,CAAO,EAAE,CAAA,CACzBU,EAAAA,CAAaV,CAAAA,CAAO,EAAE,CAAA,CACtBa,EAAAA,CAAmBb,CAAAA,CAAO+C,EAAAA,EAA8B,EAC1D,CAAA,CACA,WAAA,CAAa6U,CAAAA,CACb,SAAA,CACE,MAAA,CAAO,IAAA,CAAKC,CAAiB,CAAA,CAAE,MAAA,CAAS,CAAA,CACnCA,EACD,MACR,CAAC,EACH,CAGA,IAAME,EAAAA,CAAiBC,iCAAAA,CACrB,iCAAA,CACA,EACF,CAAA,CAGMC,EAAAA,CAAa,CAAC,GAAGpD,CAAAA,CAASkD,EAAc,CAAA,CAC1ClC,EAAAA,EAAS/c,CAAAA,GAEX8d,EAAAA,CAAiB/d,EAAAA,CAA0BC,CAAAA,CAAU,IAAM,CACzD,GAAI,CACF,OAAQsG,CAAAA,CAAe,OAAA,EAAS,YAAA,EAAgB,IAClD,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAAC,CAAA,CACD6Y,EAAAA,CAAW,IAAA,CAAKrB,EAAc,CAAA,CAAA,CAGhC,IAAMxX,CAAAA,CAAS8Y,iBAAAA,CAAa,CAC1B,OAAA,CAASR,EAAAA,CACT,OAAA,CAASO,EAAAA,CACT,OAAA,CAASpC,EAAAA,CAAQ,IAAA,CAAO,MAC1B,CAAQ,CAAA,CAERzW,CAAAA,CAAO,KAAA,EAAM,CAGb,IAAM+Y,EAAAA,CAA4B,IAC5BC,EAAAA,CAAiB,GAAA,CAGnBC,EAAAA,CAAmB,CAAA,CACnBf,EAAAA,CAAkC,MAAA,CAClCgB,EAAAA,CAAY,KAAA,CAGZC,EAAAA,CAAc,CAAA,CAEdC,EAAAA,CAAyD,IAAA,CAE7D,SAASC,EAAAA,EAA2B,CAClC,GAAIH,EAAAA,CACF,MAAM,IAAI,KAAA,CAAM,wDAAwD,CAE5E,CAGA,IAAMI,EAAAA,CAAa,IAAI,GAAA,CACvB,IAAA,GAAW,CAAC5gB,CAAAA,CAAS2a,CAAG,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQsD,CAAM,CAAA,CAChD2C,EAAAA,CAAW,GAAA,CAAI5gB,CAAAA,CAAS,IAAI2S,EAAAA,CAAUgI,CAAAA,CAAI,aAAA,EAAiB,CAAC,CAAC,CAAA,CAM/D,IAAMkG,EAAAA,CACJ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACpB,IAAA,IAAW7gB,CAAAA,IAAW,MAAA,CAAO,IAAA,CAAKie,CAAM,CAAA,CACtC4C,EAAAA,CAAY7gB,CAAO,CAAA,CAAI,CACrB,MAAA,CAAQ,MAAA,CACR,QAAA,CAAU,CAAA,CACV,WAAA,CAAa,CACf,CAAA,CAIF,IAAM8gB,EAAAA,CAAsBrE,CAAAA,CACtBsE,EAAAA,CAAoC,EAAC,CACrCC,EAAAA,CAAkC,EAAC,CACrCC,EAAAA,CAAiB,CAAA,CAErB,SAASC,EAAAA,CAAiBvb,CAAAA,CAA6B,CAErD,IADAqb,EAAAA,CAAe,IAAA,CAAKrb,CAAM,CAAA,CACnBqb,EAAAA,CAAe,MAAA,CAASF,EAAAA,EAC7BE,GAAe,KAAA,GAEnB,CAGA,IAAMG,EAAAA,CAAuB,IAAI,GAAA,CAG3BC,EAAAA,CAAc,IAAI,GAAA,CACxB,SAASC,EAAAA,EAA0B,CACjC,IAAA,IAAW7U,CAAAA,IAAU4U,EAAAA,CACnB5U,CAAAA,GAEJ,CAGA,IAAM8U,EAAAA,CAAyC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC3DC,EAAAA,CAAyB,IAAI,GAAA,CAKnC,SAASC,EAAAA,EAA8C,CACrD,IAAMC,CAAAA,CAA2C,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACnE,IAAA,GAAW,CAACtgB,CAAAA,CAAI6D,CAAC,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQ6b,EAAW,CAAA,CAC9CY,CAAAA,CAAWtgB,CAAE,CAAA,CAAI,CACf,MAAA,CAAQ6D,CAAAA,CAAE,MAAA,CACV,SAAA,CAAWA,CAAAA,CAAE,SAAA,CACb,UAAA,CAAYA,CAAAA,CAAE,UAAA,CACd,SAAA,CAAWA,CAAAA,CAAE,UACb,QAAA,CAAUA,CAAAA,CAAE,QAAA,CACZ,WAAA,CAAaA,CAAAA,CAAE,WACjB,CAAA,CAGF,IAAMma,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CACpCC,CAAAA,CAA+B,CACnC,MAAA,CAAQF,CAAAA,CACR,WAAA,CAAa,CACX,YAAA,CAAclB,EAAAA,CACd,MAAA,CAAQf,EACV,CACF,CAAA,CAGA,OAAI3B,EAAAA,EAAoBsB,CAAAA,GACtBwC,CAAAA,CAAS,UAAA,CACPxZ,0BAAAA,CAAuCgX,EAAYrX,EAAc,CAAA,EACjE,EAAC,CAAA,CAGE6Z,CACT,CAGA,SAASC,EAAAA,EAA6B,CACpC,GAAI,CAAChE,EAAAA,CACH,OAGF,IAAM+D,CAAAA,CAAWH,EAAAA,EAAwB,CAKnCjN,CAAAA,CAA0B,EAAC,CAC3BsN,CAAAA,CAAuB,EAAC,CAE9Bva,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAA,GAAW,CAACwa,CAAAA,CAASC,CAAO,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQnE,EAAe,CAAA,CAC7D,GAAI,CACF,IAAMoE,CAAAA,CAAWD,CAAAA,CAAQJ,CAAQ,CAAA,CAC3BM,CAAAA,CAAWX,EAAAA,CAAcQ,CAAO,CAAA,CAGhCI,CAAAA,CAAa,CAAC9P,EAAAA,CAAa4P,CAAAA,CAAUC,CAAQ,CAAA,CAEnDX,EAAAA,CAAcQ,CAAO,CAAA,CAAIE,CAAAA,CAErBE,CAAAA,EACF3N,CAAAA,CAAQ,IAAA,CAAK,CAAE,QAAAuN,CAAAA,CAAS,QAAA,CAAAE,CAAS,CAAC,EAEtC,CAAA,MAASG,CAAAA,CAAY,CACnBN,CAAAA,CAAO,IAAA,CAAK,CAAE,OAAA,CAAAC,CAAAA,CAAS,UAAA,CAAAK,CAAW,CAAC,EACrC,CAIF,IAAMhD,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CACtCvC,CAAAA,EACF9W,0BAAAA,CAAc8W,CAAAA,CAAY,WAAA,CAAa,CAAE,GAAGmC,EAAc,CAAC,EAE/D,CAAC,CAAA,CAGD,IAAA,GAAW,CAAE,OAAA,CAAAQ,CAAAA,CAAS,QAAA,CAAAE,CAAS,CAAA,GAAKzN,CAAAA,CAAS,CACvCvT,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,mBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,UAAA,CAAY,IAAA,CACZ,YAAA,CAAc8gB,CAAAA,CACd,SAAA,CAAW,OAAOE,CACpB,CAAC,EAGH/C,CAAAA,CAAS,oBAAA,CAAsB,CAC7B,YAAA,CAAc6C,CAAAA,CACd,KAAA,CAAOE,CAAAA,CACP,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAED,IAAA,IAAWI,CAAAA,IAAMb,EAAAA,CACf,GAAI,CACFa,CAAAA,CAAGN,CAAAA,CAASE,CAAQ,EACtB,CAAA,KAAQ,CAER,CAEJ,CAEA,IAAA,GAAW,CAAE,OAAA,CAAAF,CAAAA,CAAS,WAAAK,CAAW,CAAA,GAAKN,CAAAA,CAChC9D,EAAAA,EACF,OAAA,CAAQ,IAAA,CACN,CAAA,mCAAA,EAAsC+D,CAAO,CAAA,QAAA,CAAA,CAC7CK,CACF,CAAA,CAEFlD,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,YAAA,CAAc6C,CAAAA,CACd,KAAA,CACEK,CAAAA,YAAsB,KAAA,CAClBA,CAAAA,CACA,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAU,CAAC,CAAA,CAClC,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,EAEL,CAGA,IAAME,EAAAA,CAA4B,IAAI,GAAA,CAGhCC,EAAAA,CAAyB,IAAI,GAAA,CAK7BC,EAAAA,CAAwC1E,EAAAA,CAC1C,CACE,GAAA,CAAIld,CAAAA,CAAsB,CACxB,IAAMwe,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CACpC9gB,CAAAA,CAAOuH,0BAAAA,CACXgX,CAAAA,CACArX,EACF,CAAA,CACA,GAAI,EAAAlH,CAAAA,EAAQ,IAAA,EAAQ,CAAC,MAAA,CAAO,OAAOA,CAAAA,CAAMD,CAAG,CAAA,CAAA,CAI5C,OAAOC,CAAAA,CAAKD,CAAG,CACjB,CAAA,CAEA,GAAA,CAAIA,CAAAA,CAAaqD,CAAAA,CAAsB,CACrC,GACErD,CAAAA,GAAQ,WAAA,EACRA,CAAAA,GAAQ,aAAA,EACRA,CAAAA,GAAQ,WAAA,CAER,OAGF,IAAMwe,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CACpCc,CAAAA,CAAc,CAAC7hB,CAAG,CAAA,CACxB2G,CAAAA,CAAO,MAAM,IAAM,CACjB,IAAMoO,CAAAA,CACJvN,0BAAAA,CACEgX,CAAAA,CACArX,EACF,CAAA,EAAK,EAAC,CACRO,0BAAAA,CAAc8W,CAAAA,CAAYrX,EAAAA,CAAgB,CACxC,GAAG4N,CAAAA,CACH,CAAC/U,CAAG,EAAGqD,CACT,CAAC,EACH,CAAC,CAAA,CAEDye,EAAAA,CAAuBD,CAAAA,CAAa7hB,CAAAA,CAAKqD,CAAK,CAAA,CAC9C4d,EAAAA,GACF,CAAA,CAEA,GAAA,CAAIjhB,CAAAA,CAAsB,CACxB,IAAMwe,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CACpC9gB,CAAAA,CAAOuH,0BAAAA,CACXgX,CAAAA,CACArX,EACF,CAAA,CAEA,OAAOlH,CAAAA,EAAQ,IAAA,EAAQ,MAAA,CAAO,MAAA,CAAOA,CAAAA,CAAMD,CAAG,CAChD,CAAA,CAEA,MAAA,CAAOA,CAAAA,CAAmB,CACxB,GACEA,CAAAA,GAAQ,WAAA,EACRA,CAAAA,GAAQ,eACRA,CAAAA,GAAQ,WAAA,CAER,OAEF,IAAMwe,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CAC1Cpa,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMoO,CAAAA,CACJvN,0BAAAA,CACEgX,CAAAA,CACArX,EACF,CAAA,EAAK,EAAC,CACF,CAAE,CAACnH,CAAG,EAAG+hB,CAAAA,CAAG,GAAGC,CAAK,CAAA,CAAIjN,CAAAA,CAC9BrN,0BAAAA,CAAc8W,EAAYrX,EAAAA,CAAgB6a,CAAI,EAChD,CAAC,CAAA,CAEDF,EAAAA,CAAuB,CAAC9hB,CAAG,CAAA,CAAGA,CAAAA,CAAK,MAAS,CAAA,CAC5CihB,EAAAA,GACF,CAAA,CAEA,MAAA,CAAOgB,CAAAA,CAAuC,CAE5C,IAAMC,CAAAA,CAAsC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC9D,IAAA,IAAWlL,CAAAA,IAAK,MAAA,CAAO,IAAA,CAAKiL,CAAM,CAAA,CAC5BjL,IAAM,WAAA,EAAeA,CAAAA,GAAM,aAAA,EAAiBA,CAAAA,GAAM,WAAA,GAGtDkL,CAAAA,CAAWlL,CAAC,CAAA,CAAIiL,CAAAA,CAAOjL,CAAC,CAAA,CAAA,CAG1B,IAAMwH,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CACpCoB,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAKD,CAAU,CAAA,CACnC,GAAIC,CAAAA,CAAK,MAAA,GAAW,CAAA,CAIpB,CAAAxb,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMoO,CAAAA,CACJvN,0BAAAA,CACEgX,CAAAA,CACArX,EACF,CAAA,EAAK,EAAC,CACRO,0BAAAA,CAAc8W,CAAAA,CAAYrX,EAAAA,CAAgB,CACxC,GAAG4N,CAAAA,CACH,GAAGmN,CACL,CAAC,EACH,CAAC,CAAA,CAED,IAAA,GAAW,CAAClL,CAAAA,CAAGC,CAAC,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQiL,CAAU,CAAA,CAC5CJ,EAAAA,CAAuBK,CAAAA,CAAMnL,EAAGC,CAAC,CAAA,CAEnCgK,EAAAA,GAAqB,CACvB,CAAA,CAEA,MAAA,EAAkC,CAChC,IAAMzC,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CAE1C,OAAO,CACL,GAAIvZ,0BAAAA,CACFgX,CAAAA,CACArX,EACF,CAAA,EAAK,EACP,CACF,CAAA,CAEA,SAAA,CACEgb,CAAAA,CACAC,CAAAA,CACY,CACZ,IAAA,IAAWpiB,CAAAA,IAAOmiB,CAAAA,CACXR,GAAuB,GAAA,CAAI3hB,CAAG,CAAA,EACjC2hB,EAAAA,CAAuB,GAAA,CAAI3hB,CAAAA,CAAK,IAAI,GAAK,CAAA,CAE3C2hB,EAAAA,CAAuB,GAAA,CAAI3hB,CAAG,CAAA,CAAG,GAAA,CAAIoiB,CAAQ,CAAA,CAG/C,OAAO,IAAM,CACX,IAAA,IAAWpiB,CAAAA,IAAOmiB,CAAAA,CAChBR,EAAAA,CAAuB,GAAA,CAAI3hB,CAAG,CAAA,EAAG,MAAA,CAAOoiB,CAAQ,EAEpD,CACF,EAEA,QAAA,CAASA,CAAAA,CAA6D,CACpE,OAAAV,EAAAA,CAA0B,GAAA,CAAIU,CAAQ,CAAA,CAE/B,IAAM,CACXV,EAAAA,CAA0B,MAAA,CAAOU,CAAQ,EAC3C,CACF,CAAA,CAEA,KAAA,EAAc,CACZ,GAAI,CAAClF,EAAAA,CACH,OAEF,IAAMsB,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CAC1Cpa,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjBe,0BAAAA,CAAc8W,CAAAA,CAAYrX,EAAAA,CAAgB,CACxC,GAAG+V,EAAAA,CAAiB,IACtB,CAAC,EACH,CAAC,EACH,CACF,CAAA,CACA,IAAA,CAEJ,SAAS4E,EAAAA,CACPO,CAAAA,CACAriB,CAAAA,CACAqD,CAAAA,CACM,CAEN,IAAMif,CAAAA,CAASX,EAAAA,CAAuB,GAAA,CAAI3hB,CAAG,CAAA,CAC7C,GAAIsiB,CAAAA,CACF,IAAA,IAAWb,CAAAA,IAAMa,EACf,GAAI,CACFb,CAAAA,CAAGzhB,CAAAA,CAAKqD,CAAK,EACf,CAAA,KAAQ,CAER,CAKJ,IAAA,IAAWoe,CAAAA,IAAMC,EAAAA,CACf,GAAI,CACFD,CAAAA,CAAGzhB,CAAAA,CAAKqD,CAAK,EACf,CAAA,KAAQ,CAER,CAIEhD,CAAAA,EAAYL,CAAAA,GAAQqiB,CAAAA,CAAQA,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,EAChDhiB,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,mBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,UAAA,CAAY,IAAA,CACZ,IAAA,CAAMgiB,CACR,CAAC,CAAA,CAICriB,CAAAA,GAAQqiB,CAAAA,CAAQA,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,EACpC/D,CAAAA,CAAS,oBAAA,CAAsB,CAC7B,IAAA,CAAM+D,CAAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,EAEL,CAGA,IAAME,EAAAA,CAA0B,IAAI,GAAA,CAC9BC,EAAAA,CAA0B,IAAI,GAAA,CAGpC,SAASC,EAAAA,CACPpjB,CAAAA,CACAqjB,CAAAA,CACA9gB,CAAAA,CACyC,CACzC,OAAO,IAAI,OAAA,CAAQ,CAACC,CAAAA,CAASC,CAAAA,GAAW,CACtC,IAAI6gB,CAAAA,CAAkD,IAAA,CAClDC,CAAAA,CAAU,KAAA,CACV7gB,CAAAA,CACE8gB,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CAElCyjB,CAAAA,CAAa,IAAM,CACnBF,CAAAA,GAGJA,CAAAA,CAAU,IAAA,CACND,CAAAA,GACF,YAAA,CAAaA,CAAS,CAAA,CACtBA,CAAAA,CAAY,IAAA,CAAA,CAEV5gB,CAAAA,EAAWH,CAAAA,EACbA,CAAAA,CAAO,mBAAA,CAAoB,OAAA,CAASG,CAAO,CAAA,CAE7CghB,CAAAA,EAAY,EACd,CAAA,CAEMA,CAAAA,CAAcpc,CAAAA,CAAO,SAAA,CACzB,CAAC,CAAA,EAAGtH,CAAO,CAAA,CAAA,EAAI6H,EAAc,CAAA,CAAE,CAAA,CAC/B,IAAM,CACJ,IAAM8b,CAAAA,CAAU7a,EAAAA,CAAmB0a,CAAU,CAAA,CAC7C,GAAIG,CAAAA,CAAQ,QAAA,CAAS,QAAA,CAASN,CAAY,CAAA,CAAG,CAC3CI,CAAAA,EAAW,CACX,IAAMG,CAAAA,CAAOV,EAAAA,CAAwB,GAAA,CAAIG,CAAY,CAAA,EAAK,IAAA,CAC1DH,EAAAA,CAAwB,MAAA,CAAOG,CAAY,CAAA,CAE3C7gB,CAAAA,CAAQohB,CAAI,EACd,CAAA,KAAA,GAAWD,CAAAA,CAAQ,UAAU,QAAA,CAASN,CAAY,CAAA,CAAG,CACnDI,CAAAA,EAAW,CACXP,EAAAA,CAAwB,MAAA,CAAOG,CAAY,CAAA,CAC3C,IAAMQ,CAAAA,CAAeV,EAAAA,CAAwB,GAAA,CAAIE,CAAY,CAAA,CAC7DF,EAAAA,CAAwB,MAAA,CAAOE,CAAY,CAAA,CAC3C5gB,CAAAA,CACE,IAAI,KAAA,CACFohB,CAAAA,CACI,CAAA,kCAAA,EAAqCR,CAAY,CAAA,YAAA,EAAeQ,CAAY,CAAA,CAAA,CAC5E,CAAA,kCAAA,EAAqCR,CAAY,CAAA,UAAA,CACvD,CACF,EACF,CACF,CACF,CAAA,CAEA,GAAI9gB,CAAAA,CAAQ,CASV,GARAG,CAAAA,CAAU,IAAM,CACd+gB,CAAAA,EAAW,CACXhhB,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,mDAAA,EAAsD4gB,CAAY,CAAA,CACpE,CACF,EACF,CAAA,CACI9gB,CAAAA,CAAO,OAAA,CAAS,CAClBkhB,CAAAA,EAAW,CACXhhB,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,mDAAA,EAAsD4gB,CAAY,CAAA,CACpE,CACF,CAAA,CAEA,MACF,CACA9gB,CAAAA,CAAO,gBAAA,CAAiB,OAAA,CAASG,CAAAA,CAAS,CAAE,IAAA,CAAM,IAAK,CAAC,EAC1D,CAEA4gB,CAAAA,CAAY,UAAA,CAAW,IAAM,CAC3BG,CAAAA,EAAW,CACXP,EAAAA,CAAwB,MAAA,CAAOG,CAAY,CAAA,CAC3CF,EAAAA,CAAwB,MAAA,CAAOE,CAAY,CAAA,CAC3C5gB,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,2CAAA,EAA8C4gB,CAAY,CAAA,qBAAA,EAAwB,IAAA,CAAK,KAAA,CAAM1F,EAAAA,CAAsB,GAAI,CAAC,CAAA,CAAA,CAC1H,CACF,EACF,CAAA,CAAGA,EAAmB,EACxB,CAAC,CACH,CAGA,eAAemG,EAAAA,CACb5jB,CAAAA,CACAF,CAAAA,CACA+jB,CAAAA,CACA1gB,CAAAA,CACAd,CAAAA,CACAyhB,CAAAA,CAI2C,CAC3C,GAAIvG,EAAAA,CAAkB,MAAA,GAAW,CAAA,CAC/B,OAAO,CAAE,KAAA,CAAApa,CAAAA,CAAO,IAAA,CAAM,KAAM,CAAA,CAG9B,IAAMmgB,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CAClC6C,CAAAA,CAA6B,CACjC,OAAA,CAAA7C,CAAAA,CACA,SAAA,CAAA+jB,CAAAA,CACA,KAAA,CAAA1gB,CAAAA,CACA,KAAA,CAAO2F,EAAAA,CAAqBwa,CAAU,CAAA,CAItC,cAAA,CAAgBtjB,CAAAA,CAChB,SAAA,CAAW8jB,GAAO,SAAA,CAClB,OAAA,CAASA,CAAAA,EAAO,OAClB,CAAA,CAEMC,CAAAA,CAAUnZ,EAAAA,CAAgB2S,EAAAA,CAAmBvd,CAAAA,CAAM2C,CAAO,CAAA,CAChE,GAAI,CAACohB,CAAAA,CACH,OAAO,CAAE,KAAA,CAAA5gB,CAAAA,CAAO,IAAA,CAAM,KAAM,CAAA,CAG9B,IAAM6gB,CAAAA,CAAOrZ,EAAAA,EAAmB,CAC1BsZ,CAAAA,CAA6B,CACjC,EAAA,CAAID,CAAAA,CACJ,IAAA,CAAAhkB,EACA,OAAA,CAAAF,CAAAA,CACA,KAAA,CAAAqD,CAAAA,CACA,KAAA,CAAO4gB,CAAAA,CAAQ,KAAA,CACf,WAAA,CAAa,IAAA,CAAK,GAAA,EACpB,CAAA,CAGA3c,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAM8c,CAAAA,CAAYtb,EAAAA,CAAmB0a,CAAU,CAAA,CAC/Cza,EAAAA,CAAmBya,CAAAA,CAAY,CAC7B,GAAGY,CAAAA,CACH,OAAA,CAAS,CAAC,GAAGA,CAAAA,CAAU,QAASD,CAAO,CACzC,CAAC,EACH,CAAC,CAAA,CAGD,GAAI,CACFzG,EAAAA,GAAeyG,CAAO,EACxB,CAAA,KAAQ,CAER,CACA,GAAI,CACDxH,CAAAA,CAAc,YAAA,GAAewH,CAAO,EACvC,CAAA,KAAQ,CAER,CAGInjB,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,gBAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,OAAA,CAAAhB,CAAAA,CACA,UAAA,CAAY,IAAA,CACZ,YAAA,CAAckkB,CAAAA,CACd,cAAA,CAAgBhkB,CAAAA,CAChB,KAAA,CAAO+jB,CAAAA,CAAQ,KACjB,CAAC,CAAA,CAIH,IAAMI,CAAAA,CAAgB,MAAMjB,EAAAA,CAC1BpjB,CAAAA,CACAkkB,CAAAA,CACA3hB,CACF,CAAA,CAGA,OAAIvB,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,oBAAA,CACN,UAAW,IAAA,CAAK,GAAA,EAAI,CACpB,OAAA,CAAAhB,CAAAA,CACA,UAAA,CAAY,IAAA,CACZ,YAAA,CAAckkB,CAAAA,CACd,QAAA,CAAU,CAAC,CAACG,CAAAA,EAAe,KAAA,CAC3B,OAAA,CAAS,CAAC,CAACA,CAAAA,EAAe,IAC5B,CAAC,CAAA,CAGI,CACL,KAAA,CAAOA,CAAAA,EAAe,KAAA,EAAShhB,CAAAA,CAC/B,IAAA,CAAMghB,CAAAA,EAAe,IAAA,EAAQ,KAC/B,CACF,CAIA,SAAS3C,EAAAA,CAAc1hB,CAAAA,CAAsB,CAC3C,OAAQsH,CAAAA,CAAO,KAAA,CAActH,CAAO,CACtC,CAGA,SAASskB,EAAAA,CACPtkB,CAAAA,CACAukB,CAAAA,CACAhiB,CAAAA,CACe,CACf,OAAO,IAAI,OAAA,CAAQ,CAACC,CAAAA,CAASC,CAAAA,GAAW,CACtC,IAAI6gB,CAAAA,CAAkD,IAAA,CAClDC,CAAAA,CAAU,KAAA,CACV7gB,CAAAA,CACE8gB,EAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CAElCyjB,CAAAA,CAAa,IAAM,CACnBF,CAAAA,GACJA,CAAAA,CAAU,IAAA,CACND,CAAAA,GACF,YAAA,CAAaA,CAAS,CAAA,CACtBA,CAAAA,CAAY,IAAA,CAAA,CAEV5gB,CAAAA,EAAWH,CAAAA,EACbA,CAAAA,CAAO,mBAAA,CAAoB,OAAA,CAASG,CAAO,CAAA,CAE7CghB,CAAAA,EAAY,EACd,CAAA,CAGMA,CAAAA,CAAcpc,CAAAA,CAAO,SAAA,CACzB,CAAC,CAAA,EAAGtH,CAAO,CAAA,CAAA,EAAI0H,EAAY,CAAA,CAAE,CAAA,CAC7B,IAAM,CACJ,IAAM8c,CAAAA,CAAWlc,EAAAA,CAAiBkb,CAAU,CAAA,CAC5C,GAAIgB,CAAAA,CAAS,QAAA,CAAS,QAAA,CAASD,CAAS,CAAA,CACtCd,CAAAA,EAAW,CACXjhB,CAAAA,EAAQ,CAAA,KACH,CACL,IAAMiiB,CAAAA,CAAkBD,CAAAA,CAAS,QAAA,CAAS,IAAA,CACvC1d,CAAAA,EAAuBA,CAAAA,CAAE,EAAA,GAAOyd,CACnC,CAAA,CACA,GAAIE,CAAAA,CAAiB,CACnBhB,CAAAA,EAAW,CACX,IAAMiB,CAAAA,CAAWD,CAAAA,CAAgB,MAAA,CAC7B,CAAA,QAAA,EAAWF,CAAS,CAAA,WAAA,EAAcE,CAAAA,CAAgB,MAAM,CAAA,CAAA,CACxD,CAAA,QAAA,EAAWF,CAAS,CAAA,SAAA,CAAA,CACxB9hB,CAAAA,CAAO,IAAI,KAAA,CAAMiiB,CAAQ,CAAC,EAC5B,CACF,CACF,CACF,CAAA,CAGA,GAAIniB,EAAQ,CASV,GARAG,CAAAA,CAAU,IAAM,CACd+gB,CAAAA,EAAW,CACXhhB,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,yDAAA,EAA4D8hB,CAAS,CAAA,CACvE,CACF,EACF,CAAA,CACIhiB,CAAAA,CAAO,OAAA,CAAS,CAClBkhB,CAAAA,EAAW,CACXhhB,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,yDAAA,EAA4D8hB,CAAS,CAAA,CACvE,CACF,CAAA,CAEA,MACF,CACAhiB,CAAAA,CAAO,gBAAA,CAAiB,OAAA,CAASG,CAAAA,CAAS,CAAE,IAAA,CAAM,IAAK,CAAC,EAC1D,CAGA4gB,CAAAA,CAAY,UAAA,CAAW,IAAM,CAC3BG,CAAAA,EAAW,CACX,IAAMkB,CAAAA,CAAiB,IAAA,CAAK,KAAA,CAAMzH,CAAAA,CAAoB,GAAI,CAAA,CAC1Dza,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,iDAAA,EAAoD8hB,CAAS,CAAA,qBAAA,EAAwBI,CAAc,CAAA;AAAA;AAAA;AAAA;AAAA,0CAAA,EAIpDzH,CAAiB,CAAA;AAAA,8CAAA,CAElE,CACF,EACF,CAAA,CAAGA,CAAiB,EACtB,CAAC,CACH,CAGA,eAAe0H,EAAAA,CACbxG,CAAAA,CACAG,CAAAA,CACAlb,EACAqG,CAAAA,CACuB,CACvB,IAAMzD,CAAAA,CAAQsY,CAAAA,CAAQ,KAAA,EAASH,CAAAA,CACzB7c,CAAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CACrB2D,CAAAA,CACJiZ,EAAAA,CAAWC,CAAM,CAAA,GAAMD,EAAAA,CAAWC,CAAM,CAAA,CAAI,CAAE,MAAA,CAAQ,MAAO,CAAA,CAAA,CAC/DlZ,CAAAA,CAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,SAAA,CAAY3D,CAAAA,CAClB2D,CAAAA,CAAM,SAAA,CAAY,MAAA,CAIlB,IAAIkF,CAAAA,CAAiB/G,EACrB,GAAIoa,EAAAA,CAAkB,MAAA,CAAS,CAAA,CAC7B,GAAI,CACF,IAAMoH,CAAAA,CAAW,MAAMf,EAAAA,CACrB,eAAA,CACA1F,CAAAA,CACAnY,CAAAA,CACA5C,CAAAA,CACAqG,CAAAA,EAAM,MACR,CAAA,CACA,GAAImb,CAAAA,CAAS,IAAA,CACX,OAAA3f,CAAAA,CAAM,MAAA,CAAS,WAAA,CAER,CACL,MAAA,CAAQ,KAAA,CAAA,CACR,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EAAC,CACZ,WAAA,CAAa,CACf,CAAA,CAEFkF,CAAAA,CAAiBya,CAAAA,CAAS,MAC5B,CAAA,KAAQ,CAGR,CAIE7jB,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,YAAA,CACN,SAAA,CAAWO,CAAAA,CACX,OAAA,CAAS6c,EACT,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAA,CAAAA,CACA,KAAA,CAAAnY,CAAAA,CACA,WAAA,CAAasY,CAAAA,CAAQ,WAAA,CACrB,WAAA,CAAanU,CAAAA,CAAe,MAAA,CAC5B,KAAA,CAAOA,CAAAA,CAAe,KAAA,CAAM,CAAA,CAAG4T,EAAkB,CACnD,CAAC,CAAA,CAIH,IAAM8G,CAAAA,CAAqBpb,CAAAA,EAAM,SAAA,EAAa,EAAA,CAC9CuV,EAAS,aAAA,CAAe,CACtB,SAAA,CAAW6F,CAAAA,CACX,MAAA,CAAA1G,CAAAA,CACA,KAAA,CAAAnY,CAAAA,CACA,UAAW1E,CACb,CAAC,CAAA,CAGD,IAAMwjB,CAAAA,CAAM1G,EAAAA,CAAe,GAAA,CAAID,CAAM,CAAA,CAG/B4G,CAAAA,CAAe,KAAoB,CACvC,MAAA,CAAA5G,CAAAA,CACA,MAAA,CAAQxB,CAAAA,CACH,gBACCA,CAAAA,CAAa,kBAAA,IAAqB,EAAK,EACzC,CAAA,CACA,EAAC,CACL,UAAA,CACI,MAAA,CAAO,MAAA,CADC2F,EAAAA,CACM,eAAA,CAAgBA,EAAAA,CAAmB,MAAA,EAAQ,EAC3C,EAD4C,CAAA,CAE9D,cAAA,CAAiBrN,CAAAA,EAAmB,CAElC,IAAM+P,CAAAA,CAAapE,EAAAA,CAAY3L,CAAM,CAAA,CACrC,GAAI+P,CAAAA,CACF,OAAO,MAAA,CAAO,MAAA,CAAO,CACnB,MAAA,CAAQA,CAAAA,CAAW,MAAA,CACnB,UAAA,CACEA,CAAAA,CAAW,UAAA,EAAc,IAAA,CACrB,MAAA,CAAOA,EAAW,UAAU,CAAA,CAC5B,MAAA,CACN,SAAA,CAAWA,CAAAA,CAAW,SAAA,CACtB,WAAA,CAAaA,CAAAA,CAAW,WAC1B,CAAC,CAAA,CAEH,IAAMC,CAAAA,CAAY/G,EAAAA,CAAWjJ,CAAM,CAAA,CACnC,GAAIgQ,CAAAA,CACF,OAAO,MAAA,CAAO,MAAA,CAAO,CACnB,MAAA,CAAQA,CAAAA,CAAU,MAAA,CAClB,WACEA,CAAAA,CAAU,UAAA,EAAc,IAAA,CACpB,MAAA,CAAOA,CAAAA,CAAU,UAAU,CAAA,CAC3B,MAAA,CACN,UAAWA,CAAAA,CAAU,SAAA,CACrB,WAAA,CAAa,CACf,CAAC,CAIL,CAAA,CACA,cAAA,CAAgB,CAACC,CAAAA,CAAiBpX,CAAAA,GAAqB,CACrD,IAAMqX,CAAAA,CAAiB,MAAA,CAAO,QAAA,CAASD,CAAO,CAAA,CAC1C,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,GAAA,CAAKA,CAAO,CAAC,CAAA,CAClC,CAAA,CACAnkB,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,eAAA,CACN,UAAW,IAAA,CAAK,GAAA,EAAI,CACpB,OAAA,CAASod,CAAAA,CACT,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAA,EACA,KAAA,CAAAnY,CAAAA,CACA,OAAA,CAASmf,CAAAA,CACT,OAAA,CAAArX,CACF,CAAC,CAAA,CAEHkR,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAW6F,CAAAA,CACX,MAAA,CAAA1G,CAAAA,CACA,KAAA,CAAAnY,EACA,OAAA,CAASmf,CAAAA,CACT,OAAA,CAAArX,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,EACH,CACF,CAAA,CAAA,CAEMhL,CAAAA,CAAcwb,CAAAA,CAAQ,KAAA,EAAO,QAAA,EAAY,EACzCtc,CAAAA,CAAUsc,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAW,OAAA,CACpC8G,CAAAA,CAAY9G,CAAAA,CAAQ,KAAA,EAAO,OAAA,EAAW,GAAA,CACxCvb,CAAAA,CAEEsiB,CAAAA,CAAiB,MAAO/iB,CAAAA,EAA0C,CACtE,IAAMM,EAAUmiB,CAAAA,EAAa,CAE7B,OAAOzG,CAAAA,CAAQ,GAAA,CAAInU,CAAAA,CAAgB7H,CAAAA,CAAQM,CAAO,CACpD,CAAA,CAEIkQ,CAAAA,CAAiC,IAAA,CAErC,GAAI,CACEgS,CAAAA,GACFhS,CAAAA,CAAY,MAAMgS,EAAI,OAAA,EAAQ,CAAA,CAGhC,IAAA,IAAShjB,CAAAA,CAAU,CAAA,CAAGA,CAAAA,EAAWgB,CAAAA,CAAahB,CAAAA,EAAAA,CAAW,CACvD,IAAMmL,CAAAA,CAAkB,IAAI,eAAA,CACxBqY,CAAAA,CAGEjY,CAAAA,CAAe,IAAMJ,EAAgB,KAAA,EAAM,CACjD,GAAIxD,CAAAA,EAAM,MAAA,CAAQ,CAChB,GAAIA,CAAAA,CAAK,MAAA,CAAO,OAAA,CACd,MAAM,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgC0U,CAAM,CAAA,yBAAA,CACxC,EAEF1U,CAAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAAS4D,CAAAA,CAAc,CAAE,IAAA,CAAM,CAAA,CAAK,CAAC,EACpE,CAGIiR,CAAAA,CAAQ,OAAA,GACVgH,CAAAA,CAAe,UAAA,CACb,IAAMrY,EAAgB,KAAA,EAAM,CAC5BqR,CAAAA,CAAQ,OACV,CAAA,CAAA,CAGF,GAAI,CACF,IAAMiH,EAAY,MAAMF,CAAAA,CAAepY,CAAAA,CAAgB,MAAM,CAAA,CACzDqY,CAAAA,EACF,YAAA,CAAaA,CAAY,EAI3B,IAAM/V,CAAAA,CACJ,OAAOgW,CAAAA,EAAc,QAAA,CACjBA,CAAAA,CACAnN,uBAAAA,CAAcmN,CAAS,CAAA,CACvB9a,CAAAA,CAAa,IAAA,CAAK,GAAA,EAAI,CAAInJ,CAAAA,CAEhC2D,CAAAA,CAAM,MAAA,CAAS,YACfA,CAAAA,CAAM,UAAA,CAAasK,CAAAA,CACnBtK,CAAAA,CAAM,UAAA,CAAawF,CAAAA,CAGf1J,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,eAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,QAASod,CAAAA,CACT,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAA,CAAAA,CACA,KAAA,CAAAnY,CAAAA,CACA,UAAA,CAAAyE,CAAAA,CACA,MAAA,CAAA8E,CACF,CAAC,CAAA,CAIHyP,CAAAA,CAAS,gBAAA,CAAkB,CACzB,UAAWvV,CAAAA,EAAM,SAAA,EAAa,EAAA,CAC9B,MAAA,CAAA0U,CAAAA,CACA,KAAA,CAAAnY,CAAAA,CACA,UAAA,CAAAyE,EACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAGD,GAAI,CACF,IAAMyU,CAAAA,CAAa7X,CAAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CACxCe,0BAAAA,CAAc8W,CAAAA,CAAmB,sBAAA,CAA+B,CAC9D,MAAA,CAAAf,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,EACH,CAAA,KAAQ,CAER,CAEA,OAAO,CACL,MAAA,CAAQ5O,CAAAA,CACR,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EAAC,CACZ,WAAA,CAAa,CACf,CACF,CAAA,MAASzP,EAAK,CAOZ,GANIwlB,CAAAA,EACF,YAAA,CAAaA,CAAY,CAAA,CAE3BviB,CAAAA,CAAYjD,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAAA,CAG1DgC,EAAUgB,CAAAA,CAAa,CACrB/B,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,YAAA,CACN,UAAW,IAAA,CAAK,GAAA,EAAI,CACpB,OAAA,CAASod,CAAAA,CACT,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAA,EACA,KAAA,CAAAnY,CAAAA,CACA,KAAA,CAAOjD,CAAAA,CAAU,OAAA,CACjB,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIzB,CAAAA,CACzB,OAAA,CAAAQ,CACF,CAAC,CAAA,CAIH,IAAM0jB,CAAAA,CAAiB,IACjBC,CAAAA,CACJzjB,CAAAA,GAAY,aAAA,CACRojB,CAAAA,CAAY,CAAA,GAAMtjB,CAAAA,CAAU,CAAA,CAAA,CAC5BsjB,CAAAA,CACAjjB,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAIsjB,CAAAA,CAAUD,CAAc,CAAA,CAC/C,MAAM,IAAI,QAAc,CAACjjB,CAAAA,CAASC,CAAAA,GAAW,CAC3C,IAAI8gB,CAAAA,CAAU,CAAA,CAAA,CACR7gB,CAAAA,CAAU,IAAM,CACf6gB,CAAAA,GACHA,CAAAA,CAAU,CAAA,CAAA,CACV,YAAA,CAAa5gB,CAAK,CAAA,CAClBF,EACE,IAAI,KAAA,CACF,CAAA,6BAAA,EAAgC2b,CAAM,CAAA,8BAAA,CACxC,CACF,CAAA,EAEJ,CAAA,CACMzb,EAAQ,UAAA,CAAW,IAAM,CAC7B4gB,CAAAA,CAAU,CAAA,CAAA,CACV7Z,CAAAA,EAAM,MAAA,EAAQ,mBAAA,CAAoB,QAAShH,CAAO,CAAA,CAClDF,CAAAA,GACF,CAAA,CAAGJ,CAAK,CAAA,CACJsH,CAAAA,EAAM,MAAA,EACRA,CAAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAAShH,CAAAA,CAAS,CAAE,IAAA,CAAM,EAAK,CAAC,EAEjE,CAAC,EACH,CACF,CAAA,OAAE,CAEAgH,CAAAA,EAAM,MAAA,EAAQ,mBAAA,CAAoB,OAAA,CAAS4D,CAAY,EACzD,CACF,CAGA,IAAM5C,EAAa,IAAA,CAAK,GAAA,EAAI,CAAInJ,CAAAA,CAChC,MAAA2D,CAAAA,CAAM,MAAA,CAAS,OAAA,CACfA,CAAAA,CAAM,SAAA,CAAYlC,CAAAA,EAAW,OAAA,CAC7BkC,CAAAA,CAAM,UAAA,CAAawF,CAAAA,CAGf1J,CAAAA,EACFA,EAAS,MAAA,CAAO,CACd,IAAA,CAAM,YAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,QAASod,CAAAA,CACT,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAA,CAAAA,CACA,KAAA,CAAAnY,CAAAA,CACA,KAAA,CAAOjD,GAAW,OAAA,EAAW,eAAA,CAC7B,UAAA,CAAA0H,CACF,CAAC,CAAA,CAGHuU,CAAAA,CAAS,aAAA,CAAe,CACtB,SAAA,CAAW6F,CAAAA,CACX,MAAA,CAAA1G,CAAAA,CACA,KAAA,CAAAnY,CAAAA,CACA,KAAA,CAAOjD,EACP,UAAA,CAAA0H,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAMK1H,CACR,CAAA,OAAE,CACA+P,CAAAA,KACF,CACF,CAGA,eAAe0M,GACbzf,CAAAA,CACAqD,CAAAA,CACAqG,CAAAA,CACuB,CAGvB,GAFAiX,EAAAA,EAAmB,CAEfjX,CAAAA,EAAM,MAAA,EAAQ,OAAA,CAChB,MAAM,IAAI,KAAA,CACR,CAAA,gCAAA,EAAmC1J,CAAO,CAAA,6BAAA,CAC5C,EAGF,GAAIwf,EAAAA,GAAiB,QAAA,CACnB,MAAM,IAAI,KAAA,CACR,iFACF,CAAA,CAIFiB,KAEA,GAAI,CAEF,IAAMlC,CAAAA,CAAUL,EAAAA,CAAMle,CAAO,CAAA,CAC7B,GAAIue,EACF,OAAO,MAAMqG,EAAAA,CAAW5kB,CAAAA,CAASue,CAAAA,CAASlb,CAAAA,CAAOqG,CAAI,CAAA,CAGvD,IAAMmW,CAAAA,CAAe5B,CAAAA,CAAOje,CAAO,CAAA,CACnC,GAAI,CAAC6f,CAAAA,CAAc,CACjB,IAAM8F,CAAAA,CACJ,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK1H,CAAM,CAAA,CAAG,GAAG,MAAA,CAAO,IAAA,CAAKC,EAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EACzD,SAEF,MAAM,IAAI,KAAA,CACR,CAAA,wCAAA,EAA2Cle,CAAO,CAAA,wBAAA,EAA2B2lB,CAAS,CAAA,CACxF,CACF,CAEA,IAAMC,CAAAA,CACJ/F,CAAAA,CAAa,cAAA,EAAkBxC,EAAAA,CACjC,OAAIuI,EACK,MAAMA,CAAAA,CAAwB,OAAA,CAAQ,IAC3CC,EAAAA,CAAuB7lB,CAAAA,CAAS6f,CAAAA,CAAcxc,CAAAA,CAAOqG,CAAI,CAC3D,CAAA,CAGK,MAAMmc,EAAAA,CAAuB7lB,CAAAA,CAAS6f,CAAAA,CAAcxc,CAAAA,CAAOqG,CAAI,CACxE,CAAA,MAASjI,CAAAA,CAAO,CAGd,GACE+b,CAAAA,EACA,CAACU,EAAAA,CAAMle,CAAO,CAAA,EACd,CAAE0J,CAAAA,EAAoC,WAAA,CACtC,CACA,IAAMoc,CAAAA,CAAcC,EAAAA,CAAqB/lB,CAAO,CAAA,CAC1CgmB,CAAAA,CAAYC,EAAAA,CAAqBH,CAAW,CAAA,CAClD,GAAIE,CAAAA,CAAW,CACb,IAAME,CAAAA,CAA6B,CACjC,aAAA,CAAelmB,CAAAA,CACf,UAAA,CAAYgmB,CAAAA,CACZ,MAAA,CAAQvkB,aAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAAA,CAC7D,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CAEA,GAAI,CACF+b,CAAAA,CAAY,SAAA,GAAY0I,CAAY,EACtC,CAAA,KAAQ,CAER,CACA,OAAAjH,CAAAA,CAAS,WAAA,CAAaiH,CAAY,CAAA,CAE9BllB,GACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,SAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,GAChB,OAAA,CAAAhB,CAAAA,CACA,UAAA,CAAY,IAAA,CACZ,IAAA,CAAMA,CAAAA,CACN,EAAA,CAAIgmB,CAAAA,CACJ,MAAA,CAAQvkB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAC/D,CAAC,CAAA,CAIIge,EAAAA,CAAkBuG,CAAAA,CAAW3iB,CAAAA,CAAO,CACzC,GAAGqG,CAAAA,CACH,WAAA,CAAa,IACf,CAAQ,CACV,CAGA,GACE8T,CAAAA,CAAY,WAAA,GAAgB,mBAAA,EAC5BA,CAAAA,CAAY,mBAAqB,MAAA,CAEjC,OAAO,CACL,MAAA,CAAQA,CAAAA,CAAY,gBAAA,CACpB,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EAAC,CACZ,WAAA,CAAa,CACf,CAEJ,CAGA,IAAMtY,CAAAA,CAAQ2b,EAAAA,CAAY7gB,CAAO,CAAA,CACjC,MAAIkF,CAAAA,EAASA,CAAAA,CAAM,MAAA,GAAW,UAC5BA,CAAAA,CAAM,MAAA,CAAS,OAAA,CACfA,CAAAA,CAAM,SAAA,CACJzD,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,QAAU,MAAA,CAAOA,CAAK,CAAA,CAAA,CAGnDA,CACR,CAAA,OAAE,CACAgf,EAAAA,EAAAA,CACAY,EAAAA,GACF,CACF,CAEA,eAAewE,EAAAA,CACb7lB,CAAAA,CACA6f,CAAAA,CACAsG,CAAAA,CACAzc,EACuB,CACvB,IAAMnI,CAAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CACrBiiB,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CAClCkF,CAAAA,CAAQ2b,EAAAA,CAAY7gB,CAAO,CAAA,CAC7BoD,CAAAA,CAAQyc,CAAAA,CAAa,MACrBuG,CAAAA,CAAiBD,CAAAA,CAGfE,CAAAA,CAAYzF,EAAAA,CAAW,GAAA,CAAI5gB,CAAO,CAAA,CACxC,GAAI,CAACqmB,CAAAA,CAAW,CACd,IAAMV,CAAAA,CAAY,MAAA,CAAO,IAAA,CAAK1H,CAAM,EAAE,IAAA,CAAK,IAAI,CAAA,EAAK,QAAA,CAEpD,MAAM,IAAI,KAAA,CACR,CAAA,sCAAA,EAAyCje,CAAO,CAAA,sBAAA,EAAyB2lB,CAAS,CAAA,CACpF,CACF,CACA,IAAMW,CAAAA,CAAU,MAAMD,EAAU,OAAA,CAAQ3c,CAAAA,EAAM,MAAM,CAAA,CAG9C6c,CAAAA,CAAa,IAAI,eAAA,CACnBjD,CAAAA,CACAhW,CAAAA,CAEJ,GAAI,CACEuS,CAAAA,CAAa,OAAA,GACfyD,CAAAA,CAAY,UAAA,CAAW,IAAMiD,EAAW,KAAA,EAAM,CAAG1G,CAAAA,CAAa,OAAO,CAAA,CAAA,CAEnEnW,CAAAA,EAAM,MAAA,GACR4D,CAAAA,CAAe,IAAMiZ,CAAAA,CAAW,KAAA,EAAM,CACtC7c,CAAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAAS4D,CAAAA,CAAc,CAAE,IAAA,CAAM,CAAA,CAAK,CAAC,CAAA,CAAA,CAIpE,IAAMkZ,CAAAA,CAAkB3G,CAAAA,CAAa,MAAA,EAAUjD,CAAAA,CAC/C,GAAI4J,CAAAA,CAAiB,CACnB,IAAMC,CAAAA,CAAkBD,CAAAA,CAAgB,kBAAA,GACxC,GAAIC,CAAAA,CAAgB,MAAA,CAAS,CAAA,CAAG,CAC9B,IAAMC,CAAAA,CAAaD,CAAAA,CAChB,IAAKxS,CAAAA,EAAM,CAAA,EAAGA,CAAAA,CAAE,IAAI,CAAA,EAAA,EAAKA,CAAAA,CAAE,OAAO,CAAA,CAAE,EACpC,IAAA,CAAK;AAAA,CAAI,CAAA,CACZ7Q,EAAQ,CACN,GAAGA,EACH,YAAA,CAAA,CACGA,CAAAA,CAAM,cAAgB,EAAA,EACvB;;AAAA;AAAA,CAAA,CACAsjB,CACJ,EACF,CACF,CAGA,GAAIrnB,CAAAA,CAAQ,WAAA,CAAa,CACvB,IAAMsnB,CAAAA,CAAUvgB,EAAAA,CAAiBkB,EAAO,OAAA,EAAS,CAAA,CAC7Cqf,CAAAA,GACFvjB,CAAAA,CAAQ,CACN,GAAGA,CAAAA,CACH,YAAA,CAAA,CAAeA,CAAAA,CAAM,YAAA,EAAgB,EAAA,EAAM;;AAAA,CAAA,CAASujB,CACtD,CAAA,EAEJ,CAGA,CACE,IAAM9B,CAAAA,CAAW,MAAMf,EAAAA,CACrB,sBAAA,CACA9jB,CAAAA,CACAoD,CAAAA,CAAM,IAAA,CACNgjB,CAAAA,CACA1c,CAAAA,EAAM,MACR,CAAA,CACA,GAAImb,CAAAA,CAAS,IAAA,CACX,OAAA3f,CAAAA,CAAM,MAAA,CAAS,WAAA,CACfmc,EAAAA,EAAkB,CAEX,CACL,MAAA,CAAQ,KAAA,CAAA,CACR,SAAU,EAAC,CACX,SAAA,CAAW,EAAC,CACZ,WAAA,CAAa,CACf,CAAA,CAEF+E,CAAAA,CAAiBvB,CAAAA,CAAS,MAC5B,CAOA,IAAM+B,CAAAA,CAJqB,CACzB,GAAI1X,CAAAA,CAAW,KAAA,EAAS,EAAC,CACzB,GAAI2Q,CAAAA,CAAa,UAAA,EAAY,KAAA,EAAS,EACxC,CAAA,CAC+C,GAAA,CAAI,CAACgH,CAAAA,CAAGtmB,CAAAA,GACrDoB,EAAAA,CAAmBklB,EAAGtmB,CAAAA,CAAG,OAAO,CAClC,CAAA,CACA,IAAA,IAAWqB,CAAAA,IAAaglB,CAAAA,CAAqB,CAC3C,GAAM,CAAE,IAAA,CAAA5X,CAAK,CAAA,CAAIpN,CAAAA,CACXiB,CAAAA,CAAU,CACd,SAAA,CAAWO,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CAAAA,CACP,KAAA,CAAOpd,EAAAA,CAAqBwa,CAAU,CAIxC,CAAA,CACMsD,CAAAA,CAAiB,IAAA,CAAK,GAAA,EAAI,CAC1BnhB,CAAAA,CAAS,MAAM/C,GACnBhB,CAAAA,CACA,CAAE,KAAA,CAAOwkB,CAAAA,CAAgB,SAAA,CAAWhjB,CAAAA,CAAM,IAAK,CAAA,CAC/CP,CACF,CAAA,CAUA,GATAoc,CAAAA,CAAS,kBAAA,CAAoB,CAC3B,OAAA,CAAAjf,CAAAA,CACA,aAAA,CAAegP,CAAAA,CACf,aAAA,CAAe,OAAA,CACf,MAAA,CAAQrJ,CAAAA,CAAO,MAAA,CACf,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAImhB,CAAAA,CACzB,SAAA,CAAW,KAAK,GAAA,EAClB,CAAC,CAAA,CACG,CAACnhB,CAAAA,CAAO,MAAA,CACV,MAAM,IAAI4B,EAAAA,CAAe,CACvB,IAAA,CAAM,wBAAA,CACN,OAAA,CAAS,CAAA,iBAAA,EAAoByH,CAAI,CAAA,UAAA,EAAarJ,CAAAA,CAAO,MAAM,CAAA,CAAA,CAC3D,aAAA,CAAeqJ,CAAAA,CACf,aAAA,CAAe,OAAA,CACf,WAAA,CAAarJ,CAAAA,CAAO,MAAA,EAAU,yBAAA,CAC9B,SAAA,CAAWvC,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CACT,CAAC,CAAA,CAECzgB,CAAAA,CAAO,WAAA,GAAgB,KAAA,CAAA,GACzBygB,CAAAA,CAAiBzgB,CAAAA,CAAO,WAAA,EAE5B,CAGAsZ,CAAAA,CAAS,cAAA,CAAgB,CACvB,OAAA,CAAAjf,CAAAA,CACA,SAAA,CAAWoD,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CAAAA,CACP,SAAA,CAAW7kB,CACb,CAAC,CAAA,CAGGP,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,aAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,GAChB,OAAA,CAAAhB,CAAAA,CACA,UAAA,CAAY,IAAA,CACZ,WAAA,CAAaomB,CAAAA,CAAe,MAAA,CAC5B,GAAI,aAAA,GAAiBhjB,CAAAA,EAASA,CAAAA,CAAM,WAAA,CAChC,CAAE,WAAA,CAAa,MAAA,CAAOA,CAAAA,CAAM,WAAW,CAAE,CAAA,CACzC,EAAC,CACL,GAAIA,CAAAA,CAAM,YAAA,CACN,CAAE,YAAA,CAAcA,CAAAA,CAAM,YAAA,CAAa,KAAA,CAAM,CAAA,CAAG4a,EAAkB,CAAE,EAChE,EAAC,CACL,KAAA,CAAOoI,CAAAA,CAAe,KAAA,CAAM,CAAA,CAAGpI,EAAkB,CACnD,CAAC,CAAA,CAIH1W,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMyf,CAAAA,CAAe9e,GAAcub,CAAU,CAAA,CAC7Cpb,EAAAA,CAAcob,CAAAA,CAAY,CACxB,GAAGuD,CAAAA,CACH,MAAA,CAAQ,SAAA,CACR,KAAA,CAAOX,CAAAA,CACP,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,EACH,CAAC,CAAA,CACDlhB,CAAAA,CAAM,MAAA,CAAS,SAAA,CACfA,CAAAA,CAAM,SAAA,CAAYkhB,CAAAA,CAGlB,CACE,IAAMvB,CAAAA,CAAW,MAAMf,EAAAA,CACrB,eAAA,CACA9jB,CAAAA,CACAoD,CAAAA,CAAM,IAAA,CACNgjB,CAAAA,CACA1c,CAAAA,EAAM,MACR,CAAA,CACA,GAAImb,CAAAA,CAAS,IAAA,CACX,OAAA3f,CAAAA,CAAM,MAAA,CAAS,WAAA,CACfmc,EAAAA,EAAkB,CAEX,CACL,MAAA,CAAQ,OACR,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EAAC,CACZ,WAAA,CAAa,CACf,CAAA,CAEF+E,CAAAA,CAAiBvB,CAAAA,CAAS,MAC5B,CAGA,IAAImC,CAAAA,CAA+B7jB,CAAAA,CAC7B8jB,CAAAA,CACJvd,CAAAA,EAAM,YAAA,GAAiB,KAAA,CAAA,CACnBA,CAAAA,CAAK,YAAA,CACLmW,CAAAA,CAAa,YAAA,CACfoH,CAAAA,GACFD,CAAAA,CAAkBtV,EAAAA,CAAqBvO,CAAAA,CAAQ,CAC7C,MAAA,CAAQ8jB,CAAAA,CACR,UAAA,CACEvd,GAAM,gBAAA,EAAoBmW,CAAAA,CAAa,gBAAA,EAAoB,CAAA,CAC7D,WAAA,CAAaA,CAAAA,CAAa,WAAA,CAC1B,iBAAA,CAAmBA,CAAAA,CAAa,iBAClC,CAAC,CAAA,CAAA,CAIH,IAAMqH,CAAAA,CAAiBrH,CAAAA,CAAa,KAAA,EAAShD,CAAAA,CAGvClX,CAAAA,CAAS,MAAMzC,EAAAA,CACnB8jB,CAAAA,CACA5jB,CAAAA,CACAgjB,CAAAA,CACA,CACE,GAAGvG,CAAAA,CAAa,UAAA,CAChB,GAAGnW,CAAAA,CACH,MAAA,CAAQ6c,CAAAA,CAAW,MAAA,CACnB,UAAYxY,CAAAA,EAAY,CAEtB,IAAMoZ,CAAAA,CAAU,CAAC,GADW3e,EAAAA,CAAgBgb,CAAU,CAAA,CACbzV,CAAO,CAAA,CAChDtF,EAAAA,CACE+a,CAAAA,CACA2D,CAAAA,CAAQ,MAAA,CAAS9G,EAAAA,CACb8G,EAAQ,KAAA,CAAM,CAAC9G,EAAyB,CAAA,CACxC8G,CACN,CAAA,CACAzd,CAAAA,EAAM,SAAA,GAAYqE,CAAO,EAC3B,CAAA,CACA,UAAA,CAAY,MAAOqZ,CAAAA,EAAa,CAM9B,IAAMC,EAJwB,CAC5B,GAAInY,CAAAA,CAAW,QAAA,EAAY,EAAC,CAC5B,GAAI2Q,CAAAA,CAAa,UAAA,EAAY,QAAA,EAAY,EAC3C,CAAA,CACqD,GAAA,CAAI,CAACgH,EAAAA,CAAGtmB,EAAAA,GAC3DoB,EAAAA,CAAmBklB,EAAAA,CAAGtmB,EAAAA,CAAG,UAAU,CACrC,CAAA,CACA,IAAA,IAAWqB,EAAAA,IAAaylB,CAAAA,CAAwB,CAC9C,GAAM,CAAE,IAAA,CAAArY,EAAK,CAAA,CAAIpN,GACXiB,EAAAA,CAAU,CACd,SAAA,CAAWO,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CAAAA,CACP,KAAA,CAAOpd,EAAAA,CAAqBwa,CAAU,CAIxC,CAAA,CACMsD,EAAAA,CAAiB,IAAA,CAAK,GAAA,EAAI,CAC1BQ,EAAAA,CAAc,MAAM1kB,EAAAA,CACxBhB,EAAAA,CACA,CAAE,QAAA,CAAAwlB,CAAAA,CAAU,SAAA,CAAWhkB,CAAAA,CAAM,IAAA,CAAM,KAAA,CAAOgjB,CAAe,CAAA,CACzDvjB,EACF,CAAA,CAUA,GATAoc,EAAS,kBAAA,CAAoB,CAC3B,OAAA,CAAAjf,CAAAA,CACA,aAAA,CAAegP,EAAAA,CACf,aAAA,CAAe,UAAA,CACf,MAAA,CAAQsY,EAAAA,CAAY,MAAA,CACpB,MAAA,CAAQA,EAAAA,CAAY,MAAA,CACpB,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIR,EAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CACG,CAACQ,EAAAA,CAAY,MAAA,CACf,MAAM,IAAI/f,EAAAA,CAAe,CACvB,KAAM,4BAAA,CACN,OAAA,CAAS,CAAA,qBAAA,EAAwByH,EAAI,CAAA,UAAA,EAAasY,EAAAA,CAAY,MAAM,CAAA,CAAA,CACpE,aAAA,CAAetY,EAAAA,CACf,aAAA,CAAe,UAAA,CACf,WAAA,CAAasY,EAAAA,CAAY,MAAA,EAAU,mBAAA,CACnC,KAAM,CAAE,QAAA,CAAAF,CAAS,CAAA,CACjB,SAAA,CAAWhkB,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CACT,CAAC,CAEL,CAGA,GAAI,CAACnJ,CAAAA,CAAsB,CACzB,IAAMsK,EAAAA,CAAa,CAAA,KAAA,EAAQvnB,CAAO,CAAA,CAAA,EAAIonB,CAAAA,CAAS,EAAE,CAAA,CAAA,CAC3CI,EAAAA,CAAmC,CACvC,EAAA,CAAID,EAAAA,CACJ,IAAA,CAAM,WAAA,CACN,SAAA,CAAWnkB,CAAAA,CAAM,IAAA,CACjB,WAAA,CAAa,CAAA,WAAA,EAAcgkB,CAAAA,CAAS,IAAI,CAAA,CAAA,CACxC,IAAA,CAAMA,CAAAA,CACN,WAAA,CAAa,IAAA,CAAK,GAAA,EACpB,CAAA,CAEAjG,EAAAA,CAAqB,GAAA,CAAIoG,EAAAA,CAAYvnB,CAAO,EAC5CsH,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMmgB,EAAAA,CAAkBnf,EAAAA,CAAiBkb,CAAU,CAAA,CACnDjb,EAAAA,CAAiBib,CAAAA,CAAY,CAC3B,GAAGiE,EAAAA,CACH,OAAA,CAAS,CAAC,GAAGA,EAAAA,CAAgB,OAAA,CAASD,EAAe,CACvD,CAAC,EACH,CAAC,CAAA,CAEDxK,EAAAA,GAAoBwK,EAAe,CAAA,CACnC,MAAMlD,EAAAA,CAAgBtkB,CAAAA,CAASunB,EAAAA,CAAY7d,GAAM,MAAM,EACzD,CAGA,IAAMge,CAAAA,CAAmB,CAAC,GADD/e,EAAAA,CAAa6a,CAAU,CAAA,CACD4D,CAAQ,CAAA,CACvDxe,EAAAA,CACE4a,CAAAA,CACAkE,CAAAA,CAAiB,MAAA,CAASpH,EAAAA,CACtBoH,CAAAA,CAAiB,KAAA,CAAM,CAACpH,EAAc,CAAA,CACtCoH,CACN,CAAA,CACAhe,CAAAA,EAAM,UAAA,GAAa0d,CAAQ,EAC7B,CACF,CAAA,CACAF,CAAAA,CACI,CACE,GAAGA,CAAAA,CACH,OAAA,CAAS,CAACnlB,CAAAA,CAASN,CAAAA,CAAOgd,CAAAA,GAAY,CACpCyI,CAAAA,CAAe,OAAA,GAAUnlB,CAAAA,CAASN,CAAAA,CAAOgd,CAAO,CAAA,CAChDQ,CAAAA,CAAS,cAAA,CAAgB,CACvB,OAAA,CAAAjf,CAAAA,CACA,SAAA,CAAWoD,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CAAAA,CACP,OAAA,CAAArkB,CAAAA,CACA,KAAA,CAAAN,CAAAA,CACA,OAAA,CAAAgd,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,EACH,CACF,CAAA,CACA,KAAA,CACN,CAAA,CAWE,GAAA,CAPiB,MAAMqF,EAAAA,CACrB,uBAAA,CACA9jB,CAAAA,CACAoD,CAAAA,CAAM,IAAA,CACNgjB,CAAAA,CACA1c,CAAAA,EAAM,MACR,CAAA,EACa,IAAA,CAEX,OAAAxE,CAAAA,CAAM,MAAA,CAAS,WAAA,CACfmc,EAAAA,EAAkB,CAEX1b,CAAAA,CASX,IAAMgiB,CAAAA,CAJsB,CAC1B,GAAIzY,CAAAA,CAAW,MAAA,EAAU,GACzB,GAAI2Q,CAAAA,CAAa,UAAA,EAAY,MAAA,EAAU,EACzC,CAAA,CACiD,GAAA,CAAI,CAACgH,CAAAA,CAAGtmB,CAAAA,GACvDoB,EAAAA,CAAmBklB,CAAAA,CAAGtmB,CAAAA,CAAG,QAAQ,CACnC,CAAA,CACA,IAAA,IAAWqB,CAAAA,IAAa+lB,CAAAA,CAAsB,CAC5C,GAAM,CAAE,IAAA,CAAA3Y,CAAK,CAAA,CAAIpN,CAAAA,CACXiB,CAAAA,CAAU,CACd,SAAA,CAAWO,CAAAA,CAAM,IAAA,CACjB,MAAOgjB,CAAAA,CACP,KAAA,CAAOpd,EAAAA,CAAqBwa,CAAU,CAIxC,CAAA,CACMsD,CAAAA,CAAiB,IAAA,CAAK,GAAA,EAAI,CAC1BQ,CAAAA,CAAc,MAAM1kB,EAAAA,CACxBhB,CAAAA,CACA,CACE,MAAA,CAAQ+D,CAAAA,CAAO,MAAA,CACf,SAAA,CAAWvC,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CAAAA,CACP,QAAA,CAAUzgB,CAAAA,CAAO,QACnB,CAAA,CACA9C,CACF,CAAA,CAUA,GATAoc,CAAAA,CAAS,kBAAA,CAAoB,CAC3B,OAAA,CAAAjf,CAAAA,CACA,aAAA,CAAegP,CAAAA,CACf,aAAA,CAAe,QAAA,CACf,MAAA,CAAQsY,CAAAA,CAAY,MAAA,CACpB,MAAA,CAAQA,CAAAA,CAAY,MAAA,CACpB,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIR,EACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CACG,CAACQ,CAAAA,CAAY,MAAA,CACf,MAAM,IAAI/f,EAAAA,CAAe,CACvB,IAAA,CAAM,yBAAA,CACN,OAAA,CAAS,qBAAqByH,CAAI,CAAA,UAAA,EAAasY,CAAAA,CAAY,MAAM,CAAA,CAAA,CACjE,aAAA,CAAetY,CAAAA,CACf,aAAA,CAAe,QAAA,CACf,WAAA,CAAasY,CAAAA,CAAY,MAAA,EAAU,0BAAA,CACnC,SAAA,CAAWlkB,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CACT,CAAC,CAAA,CAECkB,CAAAA,CAAY,WAAA,GAAgB,KAAA,CAAA,GAC7B3hB,CAAAA,CAA+B,MAAA,CAAS2hB,CAAAA,CAAY,WAAA,EAEzD,CAGAhgB,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMyf,CAAAA,CAAe9e,EAAAA,CAAcub,CAAU,CAAA,CAC7Cpb,EAAAA,CAAcob,CAAAA,CAAY,CACxB,GAAGuD,CAAAA,CACH,MAAA,CAAQ,WAAA,CACR,MAAA,CAAQphB,CAAAA,CAAO,MAAA,CACf,UAAA,CAAYohB,CAAAA,CAAa,UAAA,CAAaphB,CAAAA,CAAO,WAAA,CAC7C,SAAA,CAAWohB,CAAAA,CAAa,SAAA,CAAYphB,CAAAA,CAAO,QAAA,CAAS,MAAA,CACpD,WAAA,CAAa,IAAA,CAAK,GAAA,EACpB,CAAC,EACH,CAAC,EAGDT,CAAAA,CAAM,MAAA,CAAS,WAAA,CACfA,CAAAA,CAAM,UAAA,CAAaS,CAAAA,CAAO,MAAA,CAC1BT,CAAAA,CAAM,QAAA,EAAA,CACNA,CAAAA,CAAM,WAAA,EAAeS,CAAAA,CAAO,WAAA,CAC5B0b,EAAAA,EAAkB,CAIlB,IAAMlC,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CACtCkG,CAAAA,CAA0B,CAAA,CAAA,CAC1BC,CAAAA,CAAmB,CAAA,CAyBvB,GAxBAvgB,CAAAA,CAAO,KAAA,CAAM,IAAM,CAKjB,IAAMwgB,CAAAA,CAJgB3f,0BAAAA,CACpBgX,EACA,gBACF,CAAA,CACiCxZ,CAAAA,CAAO,WAAA,CAKxC,GAJA4a,EAAAA,CAAmBuH,CAAAA,CACnBzf,0BAAAA,CAAc8W,CAAAA,CAAY,gBAAA,CAAkB2I,CAAQ,CAAA,CAGhDhL,CAAAA,EAAkBS,EAAAA,CAAiB,CACrCsK,CAAAA,CAAmBC,EAAWhL,CAAAA,CAC9B,IAAMiL,CAAAA,CAAe5f,0BAAAA,CACnBgX,CAAAA,CACA,sBACF,CAAA,CACI0I,CAAAA,EAAoBvK,EAAAA,EAA0B,CAACyK,CAAAA,GACjD1f,0BAAAA,CAAc8W,CAAAA,CAAY,sBAAA,CAAwB,CAAA,CAAI,CAAA,CACtDyI,EAA0B,CAAA,CAAA,EAE9B,CACF,CAAC,CAAA,CAGGA,CAAAA,CACF,GAAI,CACFrK,EAAAA,CAAiB,CACf,aAAA,CAAegD,EAAAA,CACf,SAAA,CAAWzD,CAAAA,CACX,UAAA,CAAY+K,CACd,CAAC,EACH,CAAA,MAASG,CAAAA,CAAe,CAClBjK,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,+CAAA,CACAiK,CACF,EAEJ,CAMF,GAAIxB,CAAAA,EAAmB7gB,CAAAA,CAAO,QAAA,CAAS,MAAA,CAAS,EAC9C,GAAI,CAKF,IAAMsiB,CAAAA,CAJmBzB,CAAAA,CAAgB,kBAAA,EAAmB,CACpB,IAAA,CACrCvS,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAE,OAAA,GAAYmS,CAC5C,CAAA,CAEIzgB,CAAAA,CAAO,QAAA,CAAS,MAAA,CACbsO,CAAAA,EAAM,EAAEA,CAAAA,CAAE,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAE,OAAA,GAAYmS,CAAAA,CAC9C,CAAA,CACAzgB,CAAAA,CAAO,QAAA,CACX6gB,CAAAA,CAAgB,WAAA,CAAYyB,CAAe,EAC7C,CAAA,MAASC,CAAAA,CAAa,CAChBnK,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,mDAAA,CACAmK,CACF,EAEJ,CAeF,GAXAjJ,CAAAA,CAAS,iBAAA,CAAmB,CAC1B,OAAA,CAAAjf,CAAAA,CACA,SAAA,CAAWoD,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CAAAA,CACP,MAAA,CAAQzgB,CAAAA,CAAO,MAAA,CACf,UAAA,CAAYA,CAAAA,CAAO,WAAA,CACnB,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIpE,EACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAGGP,CAAAA,CAAU,CACZ,IAAMiR,CAAAA,CACJ,OAAOtM,CAAAA,CAAO,MAAA,EAAW,QAAA,CACrBA,CAAAA,CAAO,MAAA,CACP0S,wBAAc1S,CAAAA,CAAO,MAAM,CAAA,CACjC3E,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,gBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,OAAA,CAAAhB,CAAAA,CACA,UAAA,CAAY,IAAA,CACZ,aAAciS,CAAAA,CAAU,MAAA,CACxB,WAAA,CAAatM,CAAAA,CAAO,WAAA,CACpB,WAAA,CAAaA,CAAAA,CAAO,UAAA,EAAY,WAAA,EAAe,CAAA,CAC/C,YAAA,CAAcA,CAAAA,CAAO,UAAA,EAAY,YAAA,EAAgB,CAAA,CACjD,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIpE,CAAAA,CACzB,OAAA,CAASse,CAAAA,CAAa,KAAA,CAAM,KAAA,EAAS,KAAA,CAAA,CACrC,MAAA,CAAQ5N,CAAAA,CAAU,KAAA,CAAM,CAAA,CAAG+L,EAAkB,CAC/C,CAAC,EACH,CAGA,OAAIe,EAAAA,EACFA,EAAAA,CAAsB,aAAA,CAAc/e,CAAAA,CAAS,IAAA,CAAK,GAAA,EAAI,CAAIuB,CAAS,CAAA,CAIrEqgB,EAAAA,EAAqB,CAGrB,MAAMkC,EAAAA,CACJ,UAAA,CACA9jB,CAAAA,CACAoD,CAAAA,CAAM,IAAA,CACNgjB,CAAAA,CACA1c,CAAAA,EAAM,MACR,CAAA,CAEO/D,CACT,CAAA,MAASlE,CAAAA,CAAO,CA2Bd,GA1BAyD,CAAAA,CAAM,MAAA,CAAS,OAAA,CACfA,CAAAA,CAAM,UAAYzD,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAAA,CACvE4f,EAAAA,EAAkB,CAGlB/Z,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMyf,CAAAA,CAAe9e,EAAAA,CAAcub,CAAU,CAAA,CAC7Cpb,EAAAA,CAAcob,CAAAA,CAAY,CACxB,GAAGuD,CAAAA,CACH,MAAA,CAAQ,OAAA,CACR,KAAA,CAAOtlB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,EAC5D,WAAA,CAAa,IAAA,CAAK,GAAA,EACpB,CAAC,EACH,CAAC,CAAA,CAGDwd,CAAAA,CAAS,cAAA,CAAgB,CACvB,OAAA,CAAAjf,CAAAA,CACA,SAAA,CAAWoD,CAAAA,CAAM,IAAA,CACjB,KAAA,CAAOgjB,CAAAA,CACP,KAAA,CAAO3kB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CAC/D,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIF,EACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAGGP,CAAAA,CAAU,CACZ,IAAMmnB,CAAAA,CAAgC,CACpC,IAAA,CAAM,aAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,OAAA,CAAAnoB,CAAAA,CACA,UAAA,CAAY,IAAA,CACZ,YAAA,CAAcyB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAAA,CACnE,UAAA,CAAY,IAAA,CAAK,GAAA,GAAQF,CAC3B,CAAA,CACIiG,EAAAA,CAAiB/F,CAAK,CAAA,GACxB0mB,CAAAA,CAAK,aAAA,CAAgB1mB,CAAAA,CAAM,aAAA,CAC3B0mB,CAAAA,CAAK,aAAA,CAAgB1mB,CAAAA,CAAM,aAAA,CAC3B0mB,CAAAA,CAAK,SAAA,CAAY1mB,CAAAA,CAAM,IAAA,CAAA,CAEzBT,CAAAA,CAAS,MAAA,CAAOmnB,CAAW,EAC7B,CAGA,MAAIpJ,EAAAA,EACFA,EAAAA,CAAsB,aAAA,CACpB/e,CAAAA,CACA,IAAA,CAAK,GAAA,EAAI,CAAIuB,CAAAA,CACbE,CAAAA,YAAiB,MAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAC1D,CAAA,CAIFmgB,EAAAA,EAAqB,CAEfngB,CACR,CAAA,OAAE,CACI6hB,CAAAA,EAAW,YAAA,CAAaA,CAAS,CAAA,CACjChW,CAAAA,EAAgB5D,CAAAA,EAAM,MAAA,EACxBA,CAAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,OAAA,CAAS4D,CAAY,CAAA,CAEvDgZ,CAAAA,GACF,CACF,CAGA,SAAS8B,EAAAA,CACPpoB,EACAqD,CAAAA,CACAhE,CAAAA,CAAoC,EAAC,CACR,CAK7B,GAJAshB,EAAAA,EAAmB,CAGHzC,EAAAA,CAAMle,CAAO,CAAA,CAChB,CACX,IAAMqoB,CAAAA,CAAwC,EAAC,CACzCC,EAEF,EAAC,CACDC,CAAAA,CAAa,KAAA,CAEXC,CAAAA,CAAiB9a,CAAAA,EAAmC,CACxD,GAAI6a,CAAAA,CACF,OAEF,IAAM/b,CAAAA,CAAS8b,CAAAA,CAAY,KAAA,EAAM,CAC7B9b,CAAAA,CACFA,EAAOkB,CAAK,CAAA,CAEZ2a,CAAAA,CAAW,IAAA,CAAK3a,CAAK,EAEzB,CAAA,CAEM+a,CAAAA,CAAkB,IAAM,CAC5BF,CAAAA,CAAa,IAAA,CACb,IAAA,IAAWG,CAAAA,IAAKJ,CAAAA,CACdI,CAAAA,CAAE,IAAI,CAAA,CAERJ,CAAAA,CAAY,MAAA,CAAS,EACvB,CAAA,CAEMK,CAAAA,CAAsB,IAAI,eAAA,CAE5BC,CAAAA,CACAvpB,CAAAA,CAAQ,MAAA,GACNA,CAAAA,CAAQ,MAAA,CAAO,OAAA,CACjBspB,CAAAA,CAAoB,OAAM,EAE1BC,CAAAA,CAA2B,IAAMD,CAAAA,CAAoB,KAAA,EAAM,CAC3DtpB,CAAAA,CAAQ,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAASupB,CAAAA,CAA0B,CACjE,IAAA,CAAM,IACR,CAAC,CAAA,CAAA,CAAA,CAIL,IAAMjb,CAAAA,CAAgB8R,EAAAA,CAAkBzf,CAAAA,CAASqD,CAAAA,CAAO,CACtD,MAAA,CAAQslB,CAAAA,CAAoB,MAC9B,CAAC,CAAA,CACE,IAAA,CACEhjB,CAAAA,EAAW,CACV,IAAM6J,CAAAA,CACJ,OAAO7J,CAAAA,CAAO,MAAA,EAAW,QAAA,CACrBA,CAAAA,CAAO,MAAA,CACP0S,uBAAAA,CAAc1S,CAAAA,CAAO,MAAM,CAAA,CACjC,OAAA6iB,CAAAA,CAAc,CAAE,IAAA,CAAM,OAAA,CAAS,IAAA,CAAMhZ,CAAAA,CAAQ,UAAA,CAAY,CAAE,CAAC,CAAA,CAC5DgZ,CAAAA,CAAc,CACZ,IAAA,CAAM,MAAA,CACN,WAAA,CAAa,CAAA,CACb,QAAA,CAAU,CAAA,CACV,aAAA,CAAe,CACjB,CAAC,CAAA,CACDC,GAAgB,CAET9iB,CACT,CAAA,CACC5F,CAAAA,EAAQ,CACP,MAAAyoB,CAAAA,CAAc,CAAE,IAAA,CAAM,OAAA,CAAS,KAAA,CAAOzoB,CAAI,CAAC,CAAA,CAC3C0oB,CAAAA,EAAgB,CACV1oB,CACR,CACF,CAAA,CACC,OAAA,CAAQ,IAAM,CACT6oB,CAAAA,EAA4BvpB,CAAAA,CAAQ,MAAA,EACtCA,CAAAA,CAAQ,MAAA,CAAO,mBAAA,CACb,OAAA,CACAupB,CACF,EAEJ,CAAC,CAAA,CAGH,OAAAjb,CAAAA,CAAc,KAAA,CAAM,IAAM,CAAC,CAAC,CAAA,CAErB,CACL,MAAA,CAAQ,CACN,OAAQ,MAAA,CAAO,aAAa,CAAA,EAAI,CAC9B,OAAa,CACX,IAAMD,CAAAA,CAAQ2a,CAAAA,CAAW,KAAA,EAAM,CAC/B,GAAI3a,CAAAA,CAAAA,CAEF,GADA,MAAMA,CAAAA,CACFA,CAAAA,CAAM,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAM,IAAA,GAAS,OAAA,CAC1C,YAEG,CAAA,GAAI6a,CAAAA,CACT,OACK,CACL,IAAMvV,CAAAA,CAAO,MAAM,IAAI,OAAA,CACpBxQ,CAAAA,EAAY8lB,CAAAA,CAAY,IAAA,CAAK9lB,CAAO,CACvC,CAAA,CAKA,GAJI,CAACwQ,CAAAA,GAGL,MAAMA,CAAAA,CACFA,CAAAA,CAAK,IAAA,GAAS,MAAA,EAAUA,CAAAA,CAAK,IAAA,GAAS,OAAA,CAAA,CACxC,MAEJ,CAAA,CACF,CACF,CACF,CAAA,CACA,MAAA,CAAQrF,EACR,KAAA,CAAO,IAAM,CACXgb,CAAAA,CAAoB,KAAA,GACtB,CACF,CACF,CAGA,GAAI,CADiB1K,CAAAA,CAAOje,CAAO,CAAA,CAChB,CACjB,IAAM2lB,CAAAA,CACJ,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK1H,CAAM,CAAA,CAAG,GAAG,MAAA,CAAO,IAAA,CAAKC,EAAK,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAK,SAEhE,MAAM,IAAI,KAAA,CACR,CAAA,wCAAA,EAA2Cle,CAAO,CAAA,wBAAA,EAA2B2lB,CAAS,CAAA,CACxF,CACF,CAEA,IAAMkD,CAAAA,CAA0B,GAAA,CAC1BC,CAAAA,CAAyB,GAAA,CACzB5b,CAAAA,CAAkB,IAAI,eAAA,CACtB6b,CAAAA,CAAoC,EAAC,CACrC5Y,CAAAA,CAAkE,EAAC,CACrEE,CAAAA,CAAS,KAAA,CACP9O,CAAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CACvB6L,CAAAA,CAAa,CAAA,CACb4b,CAAAA,CAAoB,GAEpB1b,CAAAA,CACAjO,CAAAA,CAAQ,MAAA,GACViO,CAAAA,CAAe,IAAMJ,CAAAA,CAAgB,KAAA,EAAM,CAC3C7N,CAAAA,CAAQ,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAASiO,CAAAA,CAAc,CAAE,IAAA,CAAM,IAAK,CAAC,CAAA,CAAA,CAGvE,IAAMC,CAAAA,CAAU,IAAM,CAChBD,CAAAA,EAAgBjO,CAAAA,CAAQ,MAAA,EAC1BA,CAAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,CAASiO,CAAY,EAE5D,CAAA,CAEM2b,EAAavb,CAAAA,EAAmC,CACpD,GAAI2C,CAAAA,CAAQ,OACZ,IAAM7D,CAAAA,CAAS2D,CAAAA,CAAQ,KAAA,EAAM,CACzB3D,CAAAA,CACFA,CAAAA,CAAOkB,CAAK,CAAA,EAERqb,CAAAA,CAAO,MAAA,EAAUF,CAAAA,EACnBE,CAAAA,CAAO,KAAA,EAAM,CAEfA,CAAAA,CAAO,IAAA,CAAKrb,CAAK,CAAA,EAErB,CAAA,CAEMwb,CAAAA,CAAc,IAAM,CACxB7Y,CAAAA,CAAS,IAAA,CACT9C,CAAAA,EAAQ,CACR,QAAWf,CAAAA,IAAU2D,CAAAA,CACnB3D,CAAAA,CAAO,IAAI,CAAA,CAEb2D,CAAAA,CAAQ,MAAA,CAAS,EACnB,CAAA,CAEMxC,CAAAA,CAAAA,CAAiB,SAAmC,CACxDsb,CAAAA,CAAU,CACR,IAAA,CAAM,UAAA,CACN,KAAA,CAAO,UAAA,CACP,OAAA,CAAS,0BACX,CAAC,CAAA,CAED,GAAI,CACF,IAAMtjB,CAAAA,CAAS,MAAM8Z,EAAAA,CAAkBzf,CAAAA,CAASqD,CAAAA,CAAO,CACrD,MAAA,CAAQ6J,EAAgB,MAAA,CACxB,SAAA,CAAYa,CAAAA,EAAY,CAEtB,GADAkb,CAAAA,CAAU,CAAE,IAAA,CAAM,SAAA,CAAW,OAAA,CAAAlb,CAAQ,CAAC,CAAA,CAClCA,CAAAA,CAAQ,IAAA,GAAS,WAAA,EAAeA,EAAQ,OAAA,CAAS,CACnD,IAAMob,CAAAA,CAAY,IAAA,CAAK,IAAA,CAAKpb,CAAAA,CAAQ,OAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CACtDX,CAAAA,EAAc+b,CAAAA,CACdH,CAAAA,EAAqBjb,CAAAA,CAAQ,OAAA,CACzBib,EAAkB,MAAA,CAASF,CAAAA,GAC7BE,CAAAA,CAAoBA,CAAAA,CAAkB,KAAA,CACpC,CAACF,CACH,CAAA,CAAA,CAEFG,CAAAA,CAAU,CAAE,IAAA,CAAM,OAAA,CAAS,IAAA,CAAMlb,CAAAA,CAAQ,OAAA,CAAS,UAAA,CAAAX,CAAW,CAAC,EAChE,CACF,CAAA,CACA,UAAA,CAAY,MAAOga,CAAAA,EAAa,CAC9B6B,CAAAA,CAAU,CACR,IAAA,CAAM,YAAA,CACN,IAAA,CAAM7B,CAAAA,CAAS,IAAA,CACf,WAAYA,CAAAA,CAAS,EAAA,CACrB,SAAA,CAAWA,CAAAA,CAAS,SACtB,CAAC,CAAA,CACGA,CAAAA,CAAS,MAAA,EACX6B,CAAAA,CAAU,CACR,IAAA,CAAM,UAAA,CACN,IAAA,CAAM7B,CAAAA,CAAS,IAAA,CACf,UAAA,CAAYA,CAAAA,CAAS,EAAA,CACrB,MAAA,CAAQA,CAAAA,CAAS,MACnB,CAAC,EAEL,CACF,CAAC,CAAA,CAEKpZ,CAAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CAAIzM,CAAAA,CAC9B,OAAA0nB,CAAAA,CAAU,CACR,IAAA,CAAM,MAAA,CACN,WAAA,CAAatjB,CAAAA,CAAO,WAAA,CACpB,QAAA,CAAAqI,CAAAA,CACA,aAAA,CAAe,CACjB,CAAC,CAAA,CACDkb,CAAAA,EAAY,CAELvjB,CACT,CAAA,MAASlE,CAAAA,CAAO,CACd,MAAIA,CAAAA,YAAiB8F,EAAAA,EACnB0hB,CAAAA,CAAU,CACR,IAAA,CAAM,qBAAA,CACN,aAAA,CAAexnB,CAAAA,CAAM,aAAA,CACrB,MAAA,CAAQA,CAAAA,CAAM,OAAA,CACd,cAAeunB,CAAAA,CACf,OAAA,CAAS,IACX,CAAC,CAAA,CAEHC,CAAAA,CAAU,CACR,IAAA,CAAM,OAAA,CACN,KAAA,CAAOxnB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CACjE,CAAC,CAAA,CACDynB,CAAAA,EAAY,CACNznB,CACR,CACF,CAAA,GAAG,CAEG8N,CAAAA,CAAiD,CACrD,CAAC,MAAA,CAAO,aAAa,CAAA,EAA4C,CAC/D,OAAO,CACL,MAAM,IAAA,EAAyD,CAC7D,OAAIwZ,CAAAA,CAAO,MAAA,CAAS,CAAA,CACX,CAAE,IAAA,CAAM,KAAA,CAAO,KAAA,CAAOA,CAAAA,CAAO,KAAA,EAAS,CAAA,CAE3C1Y,CAAAA,CACK,CAAE,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,MAAU,CAAA,CAGjC,IAAI,OAAA,CACR7N,CAAAA,EAAY,CACX2N,CAAAA,CAAQ,IAAA,CAAMzC,CAAAA,EAAU,CAEpBlL,EADEkL,CAAAA,GAAU,IAAA,CACJ,CAAE,IAAA,CAAM,IAAA,CAAM,KAAA,CAAO,MAAU,CAAA,CAE/B,CAAE,IAAA,CAAM,KAAA,CAAO,KAAA,CAAOA,CAAM,CAFI,EAI5C,CAAC,EACH,CACF,CACF,CACF,CACF,CACF,CAAA,CAGA,OAAAC,CAAAA,CAAc,KAAA,CAAM,IAAM,CAAC,CAAC,CAAA,CAErB,CACL,MAAA,CAAA4B,EACA,MAAA,CAAQ5B,CAAAA,CACR,KAAA,CAAO,IAAM,CACXT,CAAAA,CAAgB,KAAA,EAAM,CACtBgc,CAAAA,GACF,CACF,CACF,CAGA,eAAeE,EAAAA,CACb/R,CAAAA,CACAhU,CAAAA,CACA0R,CAAAA,CACY,CACZ,IAAMsU,CAAAA,CAAmB,IAAA,CAAK,GAAA,EAAI,CAC9BtU,CAAAA,EACFkK,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAAlK,CAAAA,CACA,WAAA,CAAa,UAAA,CACb,MAAA1R,CAAAA,CACA,SAAA,CAAWgmB,CACb,CAAC,CAAA,CAGH,IAAM9C,CAAAA,CAAa,IAAI,eAAA,CACnBjD,CAAAA,CAEAjM,CAAAA,CAAQ,OAAA,GACViM,CAAAA,CAAY,UAAA,CAAW,IAAMiD,CAAAA,CAAW,OAAM,CAAGlP,CAAAA,CAAQ,OAAO,CAAA,CAAA,CAGlE,IAAIiS,CAAAA,CACJ,GAAI,CACF,IAAMC,CAAAA,CAAWlS,CAAAA,CAAQ,QAAA,CAAS,GAAA,CAAKrX,CAAAA,EACrCyf,EAAAA,CAAezf,CAAAA,CAASqD,EAAO,CAC7B,MAAA,CAAQkjB,CAAAA,CAAW,MAAA,CACnB,SAAA,CAAAxR,CACF,CAAC,CAAA,CAAE,KAAA,CAAOtT,CAAAA,EAAU,CAClB,GAAI4V,CAAAA,CAAQ,UAAA,GAAe,KAAA,CAAA,CACzB,MAAM5V,CAAAA,CAGR,OAAO,IACT,CAAC,CACH,CAAA,CAEM0W,CAAAA,CAAU,MAAM,OAAA,CAAQ,GAAA,CAAIoR,CAAQ,CAAA,CACpCC,CAAAA,CAAiBrR,CAAAA,CAAQ,MAAA,CAC5BrR,CAAAA,EAA+BA,IAAM,IACxC,CAAA,CAEA,GACEuQ,CAAAA,CAAQ,UAAA,GAAe,KAAA,CAAA,EACvBmS,CAAAA,CAAe,MAAA,CAASnS,CAAAA,CAAQ,UAAA,CAChC,CACA,IAAMoS,CAAAA,CAAYtR,CAAAA,CAAQ,MAAA,CAASqR,CAAAA,CAAe,MAAA,CAElD,MAAM,IAAI,KAAA,CACR,CAAA,8CAAA,EAAiDA,CAAAA,CAAe,MAAM,CAAA,CAAA,EAAInS,CAAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,qCAAA,EACzEA,CAAAA,CAAQ,UAAU,CAAA,UAAA,EAAaoS,CAAS,GAClE,CACF,CAEA,OAAOpS,CAAAA,CAAQ,KAAA,CAAMmS,CAAc,CACrC,CAAA,MAAS/nB,CAAAA,CAAO,CACd,MAAA6nB,CAAAA,CAAe7nB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CACjEA,CACR,CAAA,OAAE,CACI6hB,CAAAA,EAAW,YAAA,CAAaA,CAAS,CAAA,CACjCvO,CAAAA,EACFkK,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,UAAAlK,CAAAA,CACA,WAAA,CAAa,UAAA,CACb,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIsU,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,KAAA,CAAOC,CACT,CAAC,EAEL,CACF,CAKA,eAAeI,EAAAA,CACbxkB,CAAAA,CACAykB,CAAAA,CACA3nB,CAAAA,CACwB,CACxB,IAAM4nB,CAAAA,CAAO1W,EAAAA,CAAehO,CAAK,CAAA,CAGjC,GAAIlD,CAAAA,EAAQ,IAAA,CACV,GAAI,CAaF,GAAI,CAZeA,CAAAA,CAAO,IAAA,CAAK,CAC7B,IAAA,CAAA4nB,CAAAA,CACA,WAAA,CAAa1kB,CAAAA,CAAM,IAAA,CACnB,KAAA,CACEA,CAAAA,CAAM,IAAA,GAAS,MAAA,CACVA,CAAAA,CAA8B,KAAA,CAC/B,KAAA,CAAA,CACN,YAAA,CACEA,CAAAA,CAAM,IAAA,GAAS,MAAA,CACVA,CAAAA,CAA8B,gBAAA,CAC/B,KAAA,CACR,CAAC,CAAA,CAEC,OAAO,IAEX,CAAA,KAAQ,CAEN,OAAO,IACT,CAGF,GAAI,CACF,IAAMwG,CAAAA,CAAyB,CAC7B,OAAA,CAAS,CAAA,CACT,EAAA,CAAIxG,CAAAA,CAAM,EAAA,CACV,SAAA,CAAWA,CAAAA,CAAM,SAAA,CACjB,KAAA,CAAOA,CAAAA,CAAM,KAAA,CACb,YAAA,CAAc,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAA,CAClC,cAAA,CAAgB,IAAA,CAChB,UAAA,CAAY,CACV,IAAA,CAAM,OAAA,CACN,gBAAA,CAAkB,CAAA,CAClB,YAAA,CAAc,MAAA,CACd,WAAA,CAAa,EAAC,CACd,cAAA,CAAgB,CAAA,CAChB,eAAA,CAAiB,EAAC,CAClB,cAAA,CAAgB,EAAC,CACjB,kBAAA,CAAoB,IACtB,CAAA,CACA,YAAA,CAAc,IAAA,CACd,gBAAA,CAAkB,OAAA,CAClB,QAAA,CAAU,CAAE,WAAA,CAAaA,CAAAA,CAAM,IAAK,CACtC,CAAA,CACA,OAAA,MAAMykB,CAAAA,CAAM,IAAA,CAAKje,CAAU,CAAA,CAGvB1K,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,KAAM,iBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,UAAA,CAAY,IAAA,CACZ,YAAA,CAAckE,CAAAA,CAAM,EAAA,CACpB,WAAA,CAAaA,CAAAA,CAAM,IAAA,CACnB,IAAA,CAAA0kB,CACF,CAAC,CAAA,CAGH3K,CAAAA,CAAS,kBAAA,CAAoB,CAC3B,YAAA,CAAc/Z,CAAAA,CAAM,EAAA,CACpB,WAAA,CAAaA,CAAAA,CAAM,IAAA,CACnB,IAAA,CAAA0kB,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAEM1kB,CAAAA,CAAM,EACf,CAAA,MAASnF,CAAAA,CAAK,CACZ,IAAM0B,CAAAA,CAAQ1B,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAG,CAAC,CAAA,CAChE,OAAA,OAAA,CAAQ,KAAA,CACN,CAAA,uBAAA,EAA0BmF,CAAAA,CAAM,IAAI,CAAA,yBAAA,CAAA,CACpCzD,CACF,CAAA,CAEAwd,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,WAAA,CAAa/Z,CAAAA,CAAM,IAAA,CACnB,IAAA,CAAA0kB,EACA,KAAA,CAAAnoB,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAEM,IACT,CACF,CAIA,eAAeooB,EAAAA,CACbxS,CAAAA,CACAyS,CAAAA,CACA/U,CAAAA,CACAgV,CAAAA,CACY,CACZ,IAAMV,CAAAA,CAAmB,IAAA,CAAK,GAAA,EAAI,CAC5BW,CAAAA,CAAMjV,CAAAA,EAAa,qBAAA,CACrBA,CAAAA,EACFkK,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAAlK,CAAAA,CACA,YAAa,YAAA,CACb,KAAA,CAAO+U,CAAAA,CACP,SAAA,CAAWT,CACb,CAAC,CAAA,CAIH,IAAMY,CAAAA,CAAa5S,CAAAA,CAAQ,UAAA,CACrB6S,CAAAA,CAAYD,CAAAA,EAAY,KAAA,EAASvV,EAAAA,CACjCyV,CAAAA,CAAaF,CAAAA,EAAY,MAAA,EAAU,CAAA,CACnCG,CAAAA,CAAaH,CAAAA,EAAY,WAAA,EAAe,YAAA,CAG1CrR,CAAAA,CAAemR,CAAAA,EAAY,YAAA,EAAgBD,CAAAA,CAC3Cxf,CAAAA,CACE+f,CAAAA,CAIDN,CAAAA,EAAY,OAAA,CAAU,CAAC,GAAGA,CAAAA,CAAW,OAAO,CAAA,CAAI,EAAC,CAChDO,CAAAA,CAAWP,CAAAA,EAAY,IAAA,EAAQ,CAAA,CACjCT,CAAAA,CAGJ,GAAIS,CAAAA,EAAcM,CAAAA,CAAiB,MAAA,CAAS,CAAA,CAAG,CAC7C,IAAME,CAAAA,CAAOF,CAAAA,CAAiBA,CAAAA,CAAiB,MAAA,CAAS,CAAC,CAAA,CACzD/f,CAAAA,CAAa,CACX,MAAA,CAAQigB,CAAAA,CAAK,MAAA,CACb,WAAA,CAAaA,CAAAA,CAAK,WAAA,CAClB,QAAA,CAAU,GACV,SAAA,CAAW,EACb,EACF,CAEA,GAAI,CACF,IAAA,IAAShqB,CAAAA,CAAI+pB,CAAAA,CAAU/pB,CAAAA,CAAI8W,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAAQ9W,CAAAA,EAAAA,CAAK,CACvD,IAAMP,CAAAA,CAAUqX,CAAAA,CAAQ,QAAA,CAAS9W,CAAC,CAAA,CAGlC,CACE,IAAMskB,CAAAA,CAAW,MAAMf,EAAAA,CACrB,kBAAA,CACA9jB,CAAAA,CACAie,CAAAA,CAAOje,CAAO,CAAA,EAAG,MAAM,IAAA,EAAQA,CAAAA,CAC/B4Y,CAAAA,CACA,KAAA,CAAA,CACA,CACE,SAAA,CAAA7D,CACF,CACF,CAAA,CACA,GAAI8P,CAAAA,CAAS,IAAA,CACX,SAEFjM,CAAAA,CAAeiM,CAAAA,CAAS,MAC1B,CAEA,GAAI,CAsBF,GArBAva,CAAAA,CAAa,MAAMmV,EAAAA,CAAezf,CAAAA,CAAS4Y,CAAAA,CAAc,CACvD,SAAA,CAAA7D,CACF,CAAC,CAAA,CACDsV,CAAAA,CAAiB,IAAA,CAAK,CACpB,OAAA,CAAArqB,CAAAA,CACA,MAAA,CAAQsK,CAAAA,CAAW,MAAA,CACnB,WAAA,CAAaA,CAAAA,CAAW,WAC1B,CAAC,CAAA,CAEG/J,CAAAA,CAAI8W,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAAS,CAAA,GAC5BA,CAAAA,CAAQ,SAAA,CACVuB,CAAAA,CAAevB,CAAAA,CAAQ,SAAA,CAAU/M,CAAAA,CAAW,MAAA,CAAQtK,CAAAA,CAASO,CAAC,CAAA,CAE9DqY,CAAAA,CACE,OAAOtO,CAAAA,CAAW,MAAA,EAAW,QAAA,CACzBA,CAAAA,CAAW,MAAA,CACX+N,wBAAc/N,CAAAA,CAAW,MAAM,CAAA,CAAA,CAMvC2f,CAAAA,EACAC,CAAAA,EACA3pB,CAAAA,CAAI+pB,CAAAA,EAAAA,CACH/pB,CAAAA,CAAI+pB,CAAAA,EAAYH,CAAAA,GAAe,CAAA,CAChC,CACA,IAAMK,CAAAA,CACJjqB,CAAAA,CAAI8W,CAAAA,CAAQ,SAAS,MAAA,CAAS,CAAA,CAAIuB,CAAAA,CAAekR,CAAAA,CACnD,MAAMJ,EAAAA,CACJ,CACE,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,CAAA,CACT,EAAA,CAAIve,EAAAA,EAAmB,CACvB,SAAA,CAAW,IAAI,MAAK,CAAE,WAAA,EAAY,CAClC,KAAA,CAAO,CAAA,EAAGif,CAAU,CAAA,MAAA,EAAS7pB,CAAAA,CAAI,CAAC,CAAA,CAAA,CAClC,SAAA,CAAWypB,CAAAA,CACX,UAAA,CAAY3S,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAC7B,IAAA,CAAM9W,CAAAA,CAAI,CAAA,CACV,YAAA,CAAciqB,CAAAA,CACd,OAAA,CAAS,CAAC,GAAGH,CAAgB,CAC/B,CAAA,CACAH,CAAAA,CACAD,CACF,EACF,CACF,CAAA,MAASxoB,EAAO,CACd,GAAI,CAAC4V,CAAAA,CAAQ,eAAA,CACX,MAAM5V,CAEV,CACF,CAEA,GAAI,CAAC6I,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,oEACF,CAAA,CAGF,OAAO+M,CAAAA,CAAQ,OAAA,CACXA,CAAAA,CAAQ,OAAA,CAAQ/M,CAAAA,CAAW,MAAM,CAAA,CAChCA,CAAAA,CAAW,MAClB,CAAA,MAAS7I,CAAAA,CAAO,CACd,MAAA6nB,CAAAA,CAAe7nB,aAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CACjEA,CACR,CAAA,OAAE,CACIsT,CAAAA,EACFkK,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,SAAA,CAAAlK,CAAAA,CACA,WAAA,CAAa,YAAA,CACb,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIsU,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,KAAA,CAAOC,CACT,CAAC,EAEL,CACF,CAEA,eAAemB,EAAAA,CACbpT,CAAAA,CACAhU,CAAAA,CACA0R,CAAAA,CACAgV,CAAAA,CACY,CACZ,IAAMV,CAAAA,CAAmB,IAAA,CAAK,GAAA,EAAI,CAC5BW,CAAAA,CAAMjV,CAAAA,EAAa,qBAAA,CACrBA,GACFkK,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAAlK,CAAAA,CACA,WAAA,CAAa,YAAA,CACb,KAAA,CAAA1R,CAAAA,CACA,SAAA,CAAWgmB,CACb,CAAC,CAAA,CAIH,IAAMY,CAAAA,CAAa5S,CAAAA,CAAQ,WACrB6S,CAAAA,CAAYD,CAAAA,EAAY,KAAA,EAASvV,EAAAA,CACjCyV,CAAAA,CAAaF,CAAAA,EAAY,MAAA,EAAU,CAAA,CACnCG,CAAAA,CAAaH,CAAAA,EAAY,WAAA,EAAe,YAAA,CAExC9Q,CAAAA,CAAsC,EAAC,CACvCuR,CAAAA,CAGDX,CAAAA,EAAY,aAAA,CAAgB,CAAC,GAAGA,CAAAA,CAAW,aAAa,CAAA,CAAI,EAAC,CAC5D7Q,CAAAA,CAAY7B,CAAAA,CAAQ,SAAA,EAAa,CAAA,CACvC,GAAI6B,CAAAA,CAAY,CAAA,EAAK,CAAC,MAAA,CAAO,QAAA,CAASA,CAAS,CAAA,CAC7C,MAAM,IAAI,KAAA,CACR,0DACF,CAAA,CAEF,IAAIoQ,CAAAA,CAGJ,GAAIS,CAAAA,CACF,IAAA,IAAWY,CAAAA,IAAMZ,CAAAA,CAAW,aAAA,CAC1B5Q,CAAAA,CAAc,IAAA,CAAK,CACjB,MAAA,CAAQwR,CAAAA,CAAG,MAAA,CACX,WAAA,CAAaA,CAAAA,CAAG,WAAA,CAChB,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EACb,CAAC,CAAA,CAIL,IAAMC,CAAAA,CAAab,CAAAA,EAAY,KAAA,EAAS,CAAA,CAExC,GAAI,CACF,IAAI3Q,CAAAA,CACA2Q,CAAAA,CACF3Q,CAAAA,CAAmB,CACjB,MAAA,CAAQ2Q,CAAAA,CAAW,gBAAA,CACnB,WAAA,CAAa,CAAA,CACb,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EACb,CAAA,CAEA3Q,CAAAA,CAAmB,MAAMqG,EAAAA,CACvBpI,CAAAA,CAAQ,UAAA,CACRhU,CACF,CAAA,CAGF,IAAIuV,CAAAA,CAAemR,CAAAA,EAAY,YAAA,EAAgB1mB,CAAAA,CAE/C,IAAA,IAASgW,CAAAA,CAAQuR,CAAAA,CAAYvR,CAAAA,CAAQH,CAAAA,CAAWG,CAAAA,EAAAA,CAAS,CAEvD,IAAMjU,CAAAA,CAAMgU,CAAAA,CAAiB,MAAA,CACzBE,CAAAA,CAOJ,GAAI,OAAOlU,CAAAA,EAAQ,QAAA,CACjB,GAAI,CAEF,IAAMylB,CAAAA,CAAUzlB,CAAAA,CAAI,OAAA,CAAQ,0BAAA,CAA4B,EAAE,CAAA,CAAE,IAAA,EAAK,CACjEkU,CAAAA,CAAS,IAAA,CAAK,MAAMuR,CAAO,EAC7B,CAAA,KAAQ,CAEN,GAAI,CAEF,IAAMtR,CAAAA,CAAWnU,CAAAA,CACd,OAAA,CAAQ,0BAAA,CAA4B,EAAE,CAAA,CACtC,OAAA,CAAQ,UAAA,CAAY,GAAG,CAAA,CACpB8M,CAAAA,CAAYxB,EAAAA,CAAsB6I,CAAQ,CAAA,CAChD,GACErH,CAAAA,EACA,OAAOA,CAAAA,EAAc,QAAA,EACrB,QAAA,GAAaA,CAAAA,CAEboH,CAAAA,CAASpH,CAAAA,CAAAA,KAET,MAAM,IAAI,MAAM,2CAA2C,CAE/D,CAAA,KAAQ,CACN,MAAM,IAAI,KAAA,CACR,CAAA,mCAAA,EAAsCmF,CAAAA,CAAQ,UAAU,CAAA,qCAAA,EAAwCgC,CAAAA,CAAQ,CAAC,CAAA,iEAAA,EACtCjU,CAAAA,CAAI,KAAA,CAAM,CAAA,CAAG,GAAG,CAAC,CAAA,CACtF,CACF,CACF,CAAA,KAAA,GACSA,CAAAA,EAAO,OAAOA,CAAAA,EAAQ,QAAA,EAAY,QAAA,GAAYA,CAAAA,CACvDkU,CAAAA,CAASlU,CAAAA,CAAAA,KAET,MAAM,IAAI,KAAA,CACR,CAAA,mCAAA,EAAsCiS,CAAAA,CAAQ,UAAU,CAAA,iCAAA,EAAoCgC,CAAAA,CAAQ,CAAC,CAAA,oEAAA,CAEvG,CAAA,CAGF,GAAIC,CAAAA,CAAO,MAAA,GAAW,UAAA,EAAc,CAACA,CAAAA,CAAO,MAAA,CAC1C,MAGF,GAAI,CAACjC,CAAAA,CAAQ,OAAA,CAAQ,QAAA,CAASiC,CAAAA,CAAO,MAAM,CAAA,CAAG,CAC5C,IAAMqM,CAAAA,CAAYtO,CAAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI,EAE3C,MAAM,IAAI,KAAA,CACR,CAAA,+DAAA,EAAkEiC,CAAAA,CAAO,MAAM,CAAA,sBAAA,EAAyBqM,CAAS,CAAA,CACnH,CACF,CAEA,IAAMnM,CAAAA,CAAe,MAAMiG,EAAAA,CACzBnG,CAAAA,CAAO,OACPA,CAAAA,CAAO,WAAA,EAAe,EAAA,CACtB,CAAE,SAAA,CAAAvE,CAAU,CACd,CAAA,CACAoE,CAAAA,CAAc,IAAA,CAAKK,CAAY,CAAA,CAC/BkR,CAAAA,CAAwB,IAAA,CAAK,CAC3B,MAAA,CAAQlR,EAAa,MAAA,CACrB,WAAA,CAAaA,CAAAA,CAAa,WAC5B,CAAC,CAAA,CAEDZ,CAAAA,CAAe,CAAA,OAAA,EAAUU,CAAAA,CAAO,MAAM,CAAA,wBAAA,EAA2BjB,uBAAAA,CAAcmB,CAAAA,CAAa,MAAM,CAAC,CAAA,CAAA,CACnGJ,CAAAA,CAAmB,MAAMqG,EAAAA,CACvBpI,CAAAA,CAAQ,UAAA,CACRuB,CAAAA,CACA,CAAE,SAAA,CAAA7D,CAAU,CACd,CAAA,CAIEkV,CAAAA,EACAC,CAAAA,EACA7Q,CAAAA,CAAQuR,CAAAA,EAAAA,CACPvR,CAAAA,CAAQuR,GAAcT,CAAAA,GAAe,CAAA,EAEtC,MAAMT,EAAAA,CACJ,CACE,IAAA,CAAM,YAAA,CACN,OAAA,CAAS,CAAA,CACT,EAAA,CAAIve,EAAAA,EAAmB,CACvB,SAAA,CAAW,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CAClC,KAAA,CAAO,CAAA,EAAGif,CAAU,CAAA,OAAA,EAAU/Q,CAAAA,CAAQ,CAAC,CAAA,CAAA,CACvC,SAAA,CAAW2Q,CAAAA,CACX,UAAA,CAAY3S,CAAAA,CAAQ,SAAA,EAAa,EAAA,CACjC,KAAA,CAAOgC,EAAQ,CAAA,CACf,gBAAA,CAAkBD,CAAAA,CAAiB,MAAA,CACnC,aAAA,CAAe,CAAC,GAAGsR,CAAuB,CAAA,CAC1C,YAAA,CAAA9R,CACF,CAAA,CACAsR,CAAAA,CACAD,CACF,EAEJ,CAEA,OAAO5S,CAAAA,CAAQ,OAAA,CACXA,CAAAA,CAAQ,OAAA,CAAQ+B,CAAAA,CAAiB,MAAA,CAAQD,CAAa,CAAA,CACrDC,CAAAA,CAAiB,MACxB,CAAA,MAAS3X,CAAAA,CAAO,CACd,MAAA6nB,CAAAA,CAAe7nB,aAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CACjEA,CACR,CAAA,OAAE,CACIsT,CAAAA,EACFkK,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,SAAA,CAAAlK,EACA,WAAA,CAAa,YAAA,CACb,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIsU,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,KAAA,CAAOC,CACT,CAAC,EAEL,CACF,CAGA,eAAewB,EAAAA,CACbzT,CAAAA,CACAhU,CAAAA,CACA0R,CAAAA,CACAgV,CAAAA,CACY,CACZ,IAAMV,CAAAA,CAAmB,IAAA,CAAK,GAAA,EAAI,CAC5BW,CAAAA,CAAMjV,CAAAA,EAAa,cAAA,CAErBA,CAAAA,EACFkK,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAAlK,CAAAA,CACA,WAAA,CAAa,KAAA,CACb,KAAA,CAAA1R,CAAAA,CACA,SAAA,CAAWgmB,CACb,CAAC,CAAA,CAIH,IAAM0B,CAAAA,CAAgB1T,CAAAA,CAAQ,WACxB2T,CAAAA,CAAeD,CAAAA,EAAe,KAAA,EAASrW,EAAAA,CACvCuW,CAAAA,CAAgBF,CAAAA,EAAe,MAAA,EAAU,CAAA,CACzCG,CAAAA,CAAgBH,CAAAA,EAAe,WAAA,EAAe,KAAA,CAChDI,CAAAA,CAAoBpB,CAAAA,EAAY,cAAA,EAAkB,CAAA,CAClDqB,CAAAA,CAAyB,CAAA,CAEzBC,CAAAA,CAAuC,OAAA,CAAQ,OAAA,EAAQ,CACrDC,CAAAA,CAAgB,MAAA,CAAO,IAAA,CAAKjU,CAAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,CAE3CxU,CAAAA,CAA+B,CACnC,KAAA,CAAOknB,GAAY,KAAA,EAAS1mB,CAAAA,CAC5B,OAAA,CAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC3B,QAAA,CAAU,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC5B,MAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC1B,OAAA,CAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAC7B,CAAA,CAGA,IAAA,IAAW6R,CAAAA,IAAU,MAAA,CAAO,IAAA,CAAKmC,CAAAA,CAAQ,KAAK,CAAA,CAC5CxU,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,SAAA,CAI7B,GAAI6U,CAAAA,CAAY,CACd,IAAA,GAAW,CAAC7U,CAAAA,CAAQqW,CAAM,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQxB,CAAAA,CAAW,QAAQ,CAAA,CAC/DlnB,CAAAA,CAAQ,SAASqS,CAAM,CAAA,CAAIqW,CAAAA,CAE7B,IAAA,GAAW,CAACrW,CAAAA,CAAQ1F,CAAM,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQua,CAAAA,CAAW,OAAO,CAAA,CAC9DlnB,CAAAA,CAAQ,OAAA,CAAQqS,CAAM,EAAI1F,CAAAA,CAE5B,IAAA,GAAW,CAAC0F,CAAAA,CAAQzT,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQsoB,CAAAA,CAAW,MAAM,CAAA,CAC5DlnB,CAAAA,CAAQ,MAAA,CAAOqS,CAAM,CAAA,CAAIzT,CAAAA,CAE3B,IAAA,GAAW,CAACyT,CAAAA,CAAQsW,CAAE,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQzB,CAAAA,CAAW,WAAW,CAAA,CAC9DlnB,CAAAA,CAAQ,OAAA,CAAQqS,CAAM,CAAA,CAAI,CACxB,MAAA,CAAQsW,EAAG,MAAA,CACX,WAAA,CAAaA,CAAAA,CAAG,WAAA,CAChB,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EACb,EAEJ,CAEA,IAAMC,CAAAA,CAAcpU,CAAAA,CAAQ,WAAA,EAAe,MAAA,CACrCqU,CAAAA,CAAgBrU,CAAAA,CAAQ,aAAA,EAAiB,MAAA,CAAO,iBAAA,CAChDkP,CAAAA,CAAa,IAAI,eAAA,CACnBoF,CAAAA,CACArC,CAAAA,CAEAjS,CAAAA,CAAQ,OAAA,GACVsU,CAAAA,CAAiB,UAAA,CAAW,IAAMpF,EAAW,KAAA,EAAM,CAAGlP,CAAAA,CAAQ,OAAO,CAAA,CAAA,CAGvE,GAAI,CAaF,IAASuU,CAAAA,CAAT,UAAsC,CACpC,IAAA,GAAW,CAAC1W,CAAAA,CAAQC,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQkC,CAAAA,CAAQ,KAAK,CAAA,CAAG,CAC1D,GAAIxU,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,GAAM,SAAA,CAC/B,SAIF,IAAM2W,CAAAA,CACJJ,CAAAA,GAAgB,OACZ,IAAI,GAAA,CAAI,CAAC,WAAA,CAAa,SAAS,CAAC,CAAA,CAChC,IAAI,GAAA,CAAI,CAAC,WAAA,CAAa,SAAA,CAAW,OAAO,CAAC,CAAA,CAK/C,GAAA,CAJsBtW,CAAAA,CAAK,IAAA,EAAQ,EAAC,EAAG,KAAA,CAAOC,CAAAA,EACrCyW,CAAAA,CAAiB,GAAA,CAAIhpB,CAAAA,CAAQ,QAAA,CAASuS,CAAK,CAAE,CACrD,CAAA,CAOD,CAAA,GAAIqW,CAAAA,GAAgB,oBACItW,CAAAA,CAAK,IAAA,EAAQ,EAAC,EAAG,IAAA,CACpCC,CAAAA,EACCvS,CAAAA,CAAQ,QAAA,CAASuS,CAAK,CAAA,GAAM,OAAA,EAC5BvS,CAAAA,CAAQ,QAAA,CAASuS,CAAK,CAAA,GAAM,SAChC,CAAA,CACkB,CAChBvS,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,SAAA,CACvBlU,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,iBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,GAChB,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAkU,CAAAA,CACA,MAAA,CAAQ,SAAA,CACR,IAAA,CAAMC,CAAAA,CAAK,IAAA,EAAQ,EACrB,CAAC,CAAA,CAEH8J,CAAAA,CAAS,kBAAA,CAAoB,CAC3B,SAAA,CAAW+K,CAAAA,CACX,MAAA,CAAA9U,CAAAA,CACA,OAAA,CAASC,CAAAA,CAAK,OAAA,CACd,QAAA,CAAU+I,EAAAA,CAAM/I,CAAAA,CAAK,OAAO,CAAA,CACvB,MAAA,CACA,OAAA,CACL,MAAA,CAAQ,6BAAA,CACR,UAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAED,QACF,CAIF,GAAIA,CAAAA,CAAK,IAAA,CACP,GAAI,CACF,GAAI,CAACA,CAAAA,CAAK,IAAA,CAAKtS,CAAO,CAAA,CAAG,CACvBA,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,SAAA,CACvBlU,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,iBAAA,CACN,SAAA,CAAW,IAAA,CAAK,KAAI,CACpB,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAkU,CAAAA,CACA,MAAA,CAAQ,SAAA,CACR,IAAA,CAAMC,CAAAA,CAAK,IAAA,EAAQ,EACrB,CAAC,CAAA,CAEH8J,CAAAA,CAAS,kBAAA,CAAoB,CAC3B,SAAA,CAAW+K,CAAAA,CACX,MAAA,CAAA9U,CAAAA,CACA,OAAA,CAASC,CAAAA,CAAK,OAAA,CACd,QAAA,CAAU+I,EAAAA,CAAM/I,CAAAA,CAAK,OAAO,CAAA,CACvB,MAAA,CACA,OAAA,CACL,MAAA,CAAQ,uBAAA,CACR,UAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAED,QACF,CACF,CAAA,KAAQ,CACNtS,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,SAAA,CAE3B,QACF,CAGFrS,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,QAAA,CAC7B,CACF,CAAA,CA1FS,IAAA0W,CAAAA,CAAAA,CAAAA,CAXT,GAAI,CAAC7B,CAAAA,CACH,IAAA,GAAW,CAAC7U,CAAAA,CAAQC,CAAI,IAAK,MAAA,CAAO,OAAA,CAAQkC,CAAAA,CAAQ,KAAK,CAAA,CAAA,CACnD,CAAClC,CAAAA,CAAK,IAAA,EAAQA,CAAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAAA,IACrCtS,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,OAAA,CAAA,CAKjC,IAAM4W,CAAAA,CAAW,IAAI,GAAA,CACjBC,CAAAA,CAAU,CAAA,CA8Fd,eAAeC,CAAAA,CAAW9W,CAAAA,CAAgBC,CAAAA,CAA8B,CACtE,IAAM8W,CAAAA,CAAgB,IAAA,CAAK,GAAA,GAC3BppB,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,SAAA,CAEvBlU,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,iBAAA,CACN,SAAA,CAAWirB,CAAAA,CACX,UAAA,CAAY,IAAA,CACZ,MAAA,CAAA/W,CAAAA,CACA,MAAA,CAAQ,SAAA,CACR,IAAA,CAAMC,CAAAA,CAAK,IAAA,EAAQ,EACrB,CAAC,CAAA,CAEH8J,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAW+K,CAAAA,CACX,MAAA,CAAA9U,EACA,OAAA,CAASC,CAAAA,CAAK,OAAA,CACd,QAAA,CAAU+I,EAAAA,CAAM/I,CAAAA,CAAK,OAAO,CAAA,CACvB,MAAA,CACA,OAAA,CACL,SAAA,CAAW8W,CACb,CAAC,CAAA,CAGD,IAAItS,CAAAA,CACJ,GAAIxE,CAAAA,CAAK,SAAA,CACPwE,CAAAA,CAAYxE,CAAAA,CAAK,SAAA,CAAUtS,CAAO,CAAA,CAAA,KAAA,GACzBsS,CAAAA,CAAK,IAAA,EAAQA,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAA,CAAG,CAC5C,IAAMyE,EAAAA,CAA2C,OAAO,MAAA,CAAO,IAAI,CAAA,CACnE,IAAA,IAAWxE,EAAAA,IAASD,CAAAA,CAAK,IAAA,CACnBtS,CAAAA,CAAQ,OAAA,CAAQuS,EAAK,CAAA,GAAM,KAAA,CAAA,GAC7BwE,EAAAA,CAAgBxE,EAAK,CAAA,CAAIvS,CAAAA,CAAQ,OAAA,CAAQuS,EAAK,CAAA,CAAA,CAGlDuE,CAAAA,CAAY,IAAA,CAAK,SAAA,CAAUC,EAAe,EAC5C,CAAA,KACED,CAAAA,CAAYtW,CAAAA,CAId,IAAM6oB,CAAAA,CAAiB,IAAI,eAAA,CACvBC,CAAAA,CACAhX,EAAK,OAAA,GACPgX,CAAAA,CAAgB,UAAA,CACd,IAAMD,CAAAA,CAAe,KAAA,EAAM,CAC3B/W,CAAAA,CAAK,OACP,CAAA,CAAA,CAIF,IAAM7H,EAAAA,CAAe,IAAM4e,CAAAA,CAAe,KAAA,EAAM,CAChD3F,CAAAA,CAAW,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAASjZ,EAAAA,CAAc,CACxD,IAAA,CAAM,CAAA,CACR,CAAC,CAAA,CAED,GAAI,CACF,IAAM3H,EAAAA,CAAS,MAAM8Z,EAAAA,CAAetK,EAAK,OAAA,CAASwE,CAAAA,CAAW,CAC3D,MAAA,CAAQuS,CAAAA,CAAe,MAAA,CACvB,SAAA,CAAWlC,CACb,CAAC,CAAA,CA6BD,GA3BAnnB,CAAAA,CAAQ,OAAA,CAAQqS,CAAM,CAAA,CAAIvP,EAAAA,CAAO,MAAA,CACjC9C,CAAAA,CAAQ,OAAA,CAAQqS,CAAM,CAAA,CAAIvP,EAAAA,CAC1B9C,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,WAAA,CAEvBlU,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,kBACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAkU,CAAAA,CACA,MAAA,CAAQ,WAAA,CACR,IAAA,CAAMC,CAAAA,CAAK,IAAA,EAAQ,EACrB,CAAC,EAEH8J,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,SAAA,CAAW+K,CAAAA,CACX,MAAA,CAAA9U,CAAAA,CACA,OAAA,CAASC,CAAAA,CAAK,OAAA,CACd,QAAA,CAAU+I,EAAAA,CAAM/I,CAAAA,CAAK,OAAO,CAAA,CACvB,MAAA,CACA,QACL,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAI8W,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAGDd,CAAAA,EAAAA,CAEEJ,CAAAA,EACAC,CAAAA,EACAG,CAAAA,CAAoBC,CAAAA,EACpBD,CAAAA,CAAoBC,CAAAA,EAA0BH,CAAAA,CAC9C,CACAG,CAAAA,CAAyBD,CAAAA,CACzB,IAAMiB,EAAAA,CAGF,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACtB,IAAA,GAAW,CAACC,EAAAA,CAAKvlB,EAAC,IAAK,MAAA,CAAO,OAAA,CAAQjE,CAAAA,CAAQ,OAAO,CAAA,CACnDupB,EAAAA,CAAYC,EAAG,CAAA,CAAI,CACjB,MAAA,CAAQvlB,EAAAA,CAAE,MAAA,CACV,WAAA,CAAaA,EAAAA,CAAE,WACjB,CAAA,CAEF,IAAMwlB,EAAAA,CAAY,CAChB,IAAA,CAAM,KAAA,CACN,OAAA,CAAS,CAAA,CACT,EAAA,CAAInhB,EAAAA,EAAmB,CACvB,SAAA,CAAW,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CAClC,MAAO,CAAA,EAAG+f,CAAa,CAAA,MAAA,EAASC,CAAiB,CAAA,CAAA,CACjD,SAAA,CAAWnB,CAAAA,CACX,UAAA,CAAYsB,CAAAA,CACZ,QAAA,CAAU,CAAE,GAAGzoB,CAAAA,CAAQ,QAAS,CAAA,CAChC,OAAA,CAAS,CAAE,GAAGA,CAAAA,CAAQ,OAAQ,CAAA,CAC9B,MAAA,CAAQ,CAAE,GAAGA,CAAAA,CAAQ,MAAO,CAAA,CAC5B,cAAA,CAAgBsoB,CAAAA,CAChB,WAAA,CAAAiB,EAAAA,CACA,KAAA,CAAOvpB,EAAQ,KACjB,CAAA,CACAwoB,CAAAA,CAAqBA,CAAAA,CAAmB,IAAA,CAAK,IAC3C3B,EAAAA,CAAsB4C,EAAAA,CAAWtB,CAAAA,CAAeD,CAAa,CAC/D,CAAA,CACA,MAAMM,EACR,CACF,CAAA,MAAS5pB,GAAO,CA2Bd,GA1BAoB,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,CAAI,OAAA,CAC3BrS,CAAAA,CAAQ,MAAA,CAAOqS,CAAM,CAAA,CACnBzT,EAAAA,YAAiB,KAAA,CAAQA,EAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,EAAK,CAAA,CAEnDT,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,iBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,UAAA,CAAY,IAAA,CACZ,MAAA,CAAAkU,CAAAA,CACA,MAAA,CAAQ,OAAA,CACR,IAAA,CAAMC,CAAAA,CAAK,IAAA,EAAQ,EACrB,CAAC,CAAA,CAEH8J,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAW+K,CAAAA,CACX,MAAA,CAAA9U,CAAAA,CACA,OAAA,CAASC,EAAK,OAAA,CACd,QAAA,CAAU+I,EAAAA,CAAM/I,CAAAA,CAAK,OAAO,CAAA,CACvB,MAAA,CACA,OAAA,CACL,KAAA,CAAO1T,EAAAA,YAAiB,KAAA,CAAQA,EAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,EAAK,CAAC,CAAA,CAC/D,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIwqB,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAEGR,CAAAA,GAAgB,MAAA,CAClB,MAAAlF,EAAW,KAAA,EAAM,CACX9kB,EAGV,CAAA,OAAE,CACI0qB,CAAAA,EACF,YAAA,CAAaA,CAAa,CAAA,CAE5B5F,CAAAA,CAAW,MAAA,CAAO,mBAAA,CAAoB,OAAA,CAASjZ,EAAY,CAAA,CAC3Dye,CAAAA,GACF,CACF,CAGA,KACM,CAAAxF,CAAAA,CAAW,MAAA,CAAO,OAAA,EADX,CAKXqF,CAAAA,EAAqB,CAGrB,IAAMW,CAAAA,CAAa,MAAA,CAAO,OAAA,CAAQlV,CAAAA,CAAQ,KAAK,EAC5C,MAAA,CAAO,CAAC,CAACnC,CAAM,CAAA,GAAMrS,CAAAA,CAAQ,QAAA,CAASqS,CAAM,CAAA,GAAM,OAAO,CAAA,CACzD,IAAA,CAAK,CAAC,EAAG7C,CAAC,EAAG,EAAGC,CAAC,CAAA,GAAA,CAAOA,CAAAA,CAAE,QAAA,EAAY,CAAA,GAAMD,CAAAA,CAAE,QAAA,EAAY,CAAA,CAAE,CAAA,CAG/D,IAAA,GAAW,CAAC6C,CAAAA,CAAQC,CAAI,CAAA,GAAKoX,EAAY,CACvC,GAAIR,CAAAA,EAAWL,CAAAA,CACb,MAEFK,CAAAA,EAAAA,CACA,IAAMS,CAAAA,CAAUR,CAAAA,CAAW9W,CAAAA,CAAQC,CAAI,CAAA,CAAE,OAAA,CAAQ,IAAM,CACrD2W,CAAAA,CAAS,MAAA,CAAOU,CAAO,EACzB,CAAC,CAAA,CACDV,CAAAA,CAAS,GAAA,CAAIU,CAAO,EACtB,CAMA,GAAI,CAHwB,MAAA,CAAO,MAAA,CAAO3pB,CAAAA,CAAQ,QAAQ,EAAE,IAAA,CACzDmC,CAAAA,EAAMA,CAAAA,GAAM,SAAA,EAAaA,CAAAA,GAAM,SAAA,EAAaA,CAAAA,GAAM,OACrD,CAAA,CAEE,MAIF,GAAI8mB,CAAAA,CAAS,IAAA,CAAO,CAAA,CAClB,MAAM,OAAA,CAAQ,IAAA,CAAKA,CAAQ,CAAA,CAAA,KAG3B,KAEJ,CAGA,OAAIA,CAAAA,CAAS,IAAA,CAAO,CAAA,EAClB,MAAM,OAAA,CAAQ,UAAA,CAAWA,CAAQ,CAAA,CAG5B,MAAMzU,CAAAA,CAAQ,MAAMxU,CAAO,CACpC,CAAA,MAASpB,CAAAA,CAAO,CACd,MAAA6nB,CAAAA,CAAe7nB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CACjEA,CACR,CAAA,OAAE,CACIkqB,CAAAA,EACF,YAAA,CAAaA,CAAc,CAAA,CAEzB5W,CAAAA,EACFkK,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,SAAA,CAAAlK,CAAAA,CACA,WAAA,CAAa,KAAA,CACb,UAAA,CAAY,KAAK,GAAA,EAAI,CAAIsU,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,KAAA,CAAOC,CACT,CAAC,EAEL,CACF,CAGA,eAAemD,EAAAA,CACbpV,CAAAA,CACAhU,EACA0R,CAAAA,CACAgV,CAAAA,CACY,CACZ,IAAMV,CAAAA,CAAmB,IAAA,CAAK,GAAA,EAAI,CAC5BW,CAAAA,CAAMjV,CAAAA,EAAa,kBAAA,CACnB/K,CAAAA,CAAgBqN,CAAAA,CAAQ,aAAA,EAAiB,CAAA,CAE/C,GAAIrN,EAAgB,CAAA,CAClB,MAAM,IAAI,KAAA,CACR,mEACF,CAAA,CAEE+T,EAAAA,EAAS/T,CAAAA,CAAgB,CAAA,EAC3B,OAAA,CAAQ,IAAA,CACN,iHACF,CAAA,CAIF,IAAI0iB,CAAAA,CAAkBrV,CAAAA,CAAQ,MAAA,CAC1BsV,CAAAA,CACAC,CAAAA,CACJ,GAAIvV,CAAAA,CAAQ,OAAA,EAAW,CAACqV,CAAAA,CAAiB,CACvC,IAAMnG,CAAAA,CAAa,IAAI,eAAA,CACvBoG,CAAAA,CAAmB,UAAA,CAAW,IAAMpG,EAAW,KAAA,EAAM,CAAGlP,CAAAA,CAAQ,OAAO,CAAA,CACvEqV,CAAAA,CAAkBnG,CAAAA,CAAW,OAC/B,CAAA,KAAA,GAAWlP,CAAAA,CAAQ,OAAA,EAAWqV,CAAAA,CAAiB,CAE7C,IAAMnG,CAAAA,CAAa,IAAI,eAAA,CACvBoG,CAAAA,CAAmB,UAAA,CAAW,IAAMpG,CAAAA,CAAW,KAAA,EAAM,CAAGlP,CAAAA,CAAQ,OAAO,CAAA,CACvEuV,CAAAA,CAAyB,IAAMrG,CAAAA,CAAW,KAAA,EAAM,CAChDmG,CAAAA,CAAgB,iBAAiB,OAAA,CAASE,CAAAA,CAAwB,CAChE,IAAA,CAAM,IACR,CAAC,CAAA,CACDF,CAAAA,CAAkBnG,CAAAA,CAAW,OAC/B,CAEA,IAAMsG,CAAAA,CACJxV,CAAAA,CAAQ,eAAA,GACN7H,CAAAA,EAA0C,CAC1C,GAAI,OAAOA,CAAAA,EAAW,QAAA,CACpB,GAAI,CACF,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAM,CAC1B,CAAA,KAAQ,CACN,OAAO,CACL,OAAQ,KAAA,CACR,QAAA,CAAU,CAAA,uCAAA,EAA0CA,CAAAA,CAAO,KAAA,CAAM,CAAA,CAAG,GAAG,CAAC,CAAA,CAC1E,CACF,CAEF,OAAIA,CAAAA,EAAU,OAAOA,CAAAA,EAAW,QAAA,EAAY,WAAYA,CAAAA,CAC/CA,CAAAA,CAGF,CAAE,MAAA,CAAQ,KAAA,CAAO,QAAA,CAAU,mCAAoC,CACxE,CAAA,CAAA,CACIvF,CAAAA,CACJoN,CAAAA,CAAQ,eAAA,GACP,CAAC4C,CAAAA,CAAapQ,CAAAA,CAAkBC,CAAAA,GAC/B,GAAGmQ,CAAG;;AAAA;AAAA,EAA4CpQ,CAAQ;;AAAA,6BAAA,CAAA,CAAA,CAE1DkL,GACFkK,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAW+K,CAAAA,CACX,YAAa,SAAA,CACb,KAAA,CAAA3mB,EACA,SAAA,CAAWgmB,CACb,CAAC,CAAA,CAIH,IAAMyD,EAAoBzV,CAAAA,CAAQ,UAAA,CAC5B0V,EAAmBD,CAAAA,EAAmB,KAAA,EAASpY,EAAAA,CAC/CsY,CAAAA,CAAoBF,GAAmB,MAAA,EAAU,CAAA,CACjDG,EAAoBH,CAAAA,EAAmB,WAAA,EAAe,UAExDxD,CAAAA,CACA4D,CAAAA,CACE/iB,EAAoC4f,CAAAA,EAAY,OAAA,CAClD,CAAC,GAAGA,CAAAA,CAAW,OAAO,CAAA,CACtB,GAEEoD,CAAAA,CACJpD,CAAAA,EAAY,eAAA,CAAkB,CAAC,GAAGA,CAAAA,CAAW,eAAe,EAAI,EAAC,CAC7DqD,EAAiBrD,CAAAA,EAAY,SAAA,EAAa,EAG5CA,CAAAA,EAAY,kBAAA,EAAsB,OACpCmD,CAAAA,CAAqB,CACnB,OAAQnD,CAAAA,CAAW,kBAAA,CACnB,YAAa,CAAA,CACb,QAAA,CAAU,EAAC,CACX,SAAA,CAAW,EACb,CAAA,CAAA,CAGF,GAAI,CACF,IAAI3f,EAAiB2f,CAAAA,EAAY,cAAA,EAAkB1mB,EAEnD,IAAA,IACMkH,CAAAA,CAAY6iB,EAChB7iB,CAAAA,CAAYP,CAAAA,CACZO,IACA,CAEA,GAAImiB,GAAiB,OAAA,CAAS,CAC5B,GAAIQ,CAAAA,CACF,OAAAxM,EAAAA,CAAwBvW,CAAAA,CAEjBkN,EAAQ,OAAA,CACXA,CAAAA,CAAQ,QAAQ6V,CAAAA,CAAmB,MAAM,EACxCA,CAAAA,CAAmB,MAAA,CAG1B,MAAM,IAAI,YAAA,CAAa,0BAA2B,YAAY,CAChE,CAEA,IAAMG,CAAAA,CAAY,KAAK,GAAA,EAAI,CAGrBC,EAAiB,MAAM7N,EAAAA,CAC3BpI,EAAQ,OAAA,CACRjN,CAAAA,CACA,CAAE,MAAA,CAAQsiB,CAAAA,CAAiB,UAAA3X,CAAU,CACvC,EACAmY,CAAAA,CAAqBI,CAAAA,CACrB,IAAMpT,CAAAA,CACJ,OAAOoT,EAAe,MAAA,EAAW,QAAA,CAC7BA,CAAAA,CAAe,MAAA,CACfjV,wBAAciV,CAAAA,CAAe,MAAM,EAGzC,GAAIZ,CAAAA,EAAiB,QACnB,OAAAhM,EAAAA,CAAwBvW,EAEjBkN,CAAAA,CAAQ,OAAA,CACXA,EAAQ,OAAA,CAAQiW,CAAAA,CAAe,MAAM,CAAA,CACpCA,CAAAA,CAAe,OAItB,IAAMC,CAAAA,CAAkB,MAAM9N,EAAAA,CAC5BpI,CAAAA,CAAQ,UACR6C,CAAAA,CACA,CAAE,OAAQwS,CAAAA,CAAiB,SAAA,CAAA3X,CAAU,CACvC,CAAA,CACItK,EACJ,GAAI,CACFA,EAAaoiB,CAAAA,CAAgBU,CAAAA,CAAgB,MAAM,EACrD,CAAA,MAASC,EAAY,CACnB/iB,CAAAA,CAAa,CACX,MAAA,CAAQ,GACR,QAAA,CAAU,CAAA,wBAAA,EAA2B+iB,aAAsB,KAAA,CAAQA,CAAAA,CAAW,QAAU,MAAA,CAAOA,CAAU,CAAC,CAAA,CAC5G,EACF,CAGA,GACE,CAAC/iB,EAAW,MAAA,EACZ4M,CAAAA,CAAQ,WAAa,IAAA,EACrB5M,CAAAA,CAAW,KAAA,EAAS,IAAA,CACpB,CACA,IAAMgjB,CAAAA,CACJ,OAAOpW,CAAAA,CAAQ,SAAA,EAAc,WACzBA,CAAAA,CAAQ,SAAA,CAAU9M,CAAS,CAAA,CAC3B8M,CAAAA,CAAQ,UACV5M,CAAAA,CAAW,KAAA,EAASgjB,IACtBhjB,CAAAA,CAAa,CAAE,GAAGA,CAAAA,CAAY,MAAA,CAAQ,CAAA,CAAK,CAAA,EAE/C,CAEA,IAAMijB,CAAAA,CAAiB,KAAK,GAAA,EAAI,CAAIL,EAGpCF,CAAAA,CAAgB,IAAA,CAAK,CACnB,MAAA,CAAQG,CAAAA,CAAe,OACvB,KAAA,CAAO7iB,CAAAA,CAAW,KACpB,CAAC,CAAA,CAGD,IAAMkjB,CAAAA,CAAiC,CACrC,UAAApjB,CAAAA,CACA,MAAA,CAAQE,EAAW,MAAA,CACnB,KAAA,CAAOA,EAAW,KAAA,CAClB,QAAA,CAAUA,EAAW,QAAA,CACrB,UAAA,CAAYijB,EACZ,cAAA,CAAgBJ,CAAAA,CAAe,aAAe,CAAA,CAC9C,eAAA,CAAiBC,EAAgB,WAAA,EAAe,CAClD,EAIA,GAHApjB,CAAAA,CAAQ,IAAA,CAAKwjB,CAAM,EAGftW,CAAAA,CAAQ,WAAA,CACV,GAAI,CACFA,CAAAA,CAAQ,YAAYsW,CAAM,EAC5B,OAASC,CAAAA,CAAS,CACZ7P,IACF,OAAA,CAAQ,IAAA,CACN,qDACA6P,CACF,EAEJ,CAkBF,GAdI5sB,CAAAA,EACFA,EAAS,MAAA,CAAO,CACd,KAAM,sBAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,WAAY,IAAA,CACZ,SAAA,CAAAuJ,EACA,MAAA,CAAQE,CAAAA,CAAW,OACnB,KAAA,CAAOA,CAAAA,CAAW,MAClB,UAAA,CAAYijB,CAAAA,CACZ,eAAgBJ,CAAAA,CAAe,WAAA,CAC/B,eAAA,CAAiBC,CAAAA,CAAgB,WACnC,CAAC,CAAA,CAGC9iB,EAAW,MAAA,CACb,OAAAiW,GAAwBvW,CAAAA,CAEjBkN,CAAAA,CAAQ,QACXA,CAAAA,CAAQ,OAAA,CAAQiW,EAAe,MAAM,CAAA,CACpCA,EAAe,MAAA,CAItB,GAAI/iB,EAAYP,CAAAA,CAAgB,CAAA,EAAKS,EAAW,QAAA,CAC9C,GAAI,CACFL,CAAAA,CAAiBH,CAAAA,CACf5G,EACAoH,CAAAA,CAAW,QAAA,CACXF,CACF,EACF,CAAA,MAASsjB,EAAY,CACf9P,EAAAA,EACF,QAAQ,IAAA,CACN,qEAAA,CACA8P,CACF,CAAA,CAEFzjB,CAAAA,CAAiB,GAAG/G,CAAK;;AAAA;AAAA,EAA4CoH,EAAW,QAAQ;;AAAA,6BAAA,EAC1F,CAKAqiB,CAAAA,EACAC,CAAAA,EACAxiB,CAAAA,EAAa6iB,CAAAA,EAAAA,CACZ7iB,CAAAA,CAAY6iB,CAAAA,CAAiB,CAAA,EAAKJ,CAAAA,GAAsB,CAAA,EAEzD,MAAMtD,EAAAA,CACJ,CACE,IAAA,CAAM,SAAA,CACN,OAAA,CAAS,CAAA,CACT,EAAA,CAAIve,EAAAA,EAAmB,CACvB,SAAA,CAAW,IAAI,IAAA,EAAK,CAAE,WAAA,EAAY,CAClC,KAAA,CAAO,CAAA,EAAG8hB,CAAiB,CAAA,MAAA,EAAS1iB,CAAAA,CAAY,CAAC,CAAA,CAAA,CACjD,SAAA,CAAWyf,CAAAA,CACX,UAAA,CAAYhgB,CAAAA,CACZ,SAAA,CAAWO,CAAAA,CAAY,CAAA,CACvB,cAAA,CAAAH,CAAAA,CACA,OAAA,CAAS,CAAC,GAAGD,CAAO,CAAA,CACpB,eAAA,CAAiB,CAAC,GAAGgjB,CAAe,CAAA,CACpC,kBAAA,CAAoBG,CAAAA,CAAe,MACrC,CAAA,CACAP,CAAAA,CACAD,CACF,EAEJ,CAKA,GAHApM,GAAwBvW,CAAAA,CAGpBkN,CAAAA,CAAQ,WAAA,GAAgB,OAAA,CAC1B,MAAM,IAAI1N,EAAAA,CAAyB,CACjC,UAAA,CAAYK,CAAAA,CACZ,OAAA,CAASG,CAAAA,CAAQ,GAAA,CAAKuJ,CAAAA,GAAO,CAC3B,MAAA,CAAQA,CAAAA,CAAE,MAAA,CACV,QAAA,CAAUA,CAAAA,CAAE,QAAA,CACZ,KAAA,CAAOA,CAAAA,CAAE,KACX,CAAA,CAAE,CAAA,CACF,UAAA,CAAYwZ,CAAAA,CACZ,WAAA,CAAaA,CAAAA,CAAoB,WAAA,EAAe,CAClD,CAAC,CAAA,CAIH,GAAI7V,CAAAA,CAAQ,WAAA,GAAgB,aAAA,EAAiB8V,CAAAA,CAAgB,MAAA,CAAS,CAAA,CAAG,CAEnE,CADgBA,CAAAA,CAAgB,IAAA,CAAMW,CAAAA,EAAMA,CAAAA,CAAE,KAAA,EAAS,IAAI,CAAA,EAC3C/P,EAAAA,EAClB,OAAA,CAAQ,IAAA,CACN,6HACF,CAAA,CAEF,IAAIgQ,CAAAA,CAAUZ,CAAAA,CAAgB,MAAA,CAAS,CAAA,CACnCa,CAAAA,CAAY,MAAA,CAAO,iBAAA,CACvB,IAAA,IAASztB,CAAAA,CAAI,EAAGA,CAAAA,CAAI4sB,CAAAA,CAAgB,MAAA,CAAQ5sB,CAAAA,EAAAA,CAAK,CAC/C,IAAMyE,CAAAA,CAAImoB,CAAAA,CAAgB5sB,CAAC,CAAA,CAAG,KAAA,CAC1ByE,CAAAA,EAAK,IAAA,EAAQA,CAAAA,CAAIgpB,CAAAA,GACnBA,CAAAA,CAAYhpB,CAAAA,CACZ+oB,CAAAA,CAAUxtB,CAAAA,EAEd,CAEA,IAAM0tB,CAAAA,CAAad,CAAAA,CAAgBY,CAAO,CAAA,CAAG,MAAA,CAE7C,OAAO1W,CAAAA,CAAQ,OAAA,CACXA,CAAAA,CAAQ,OAAA,CAAQ4W,CAAU,EACzBA,CACP,CAGA,OAAO5W,CAAAA,CAAQ,OAAA,CACXA,CAAAA,CAAQ,OAAA,CAAQ6V,CAAAA,CAAoB,MAAM,CAAA,CACzCA,CAAAA,CAAoB,MAC3B,CAAA,MAASzrB,CAAAA,CAAO,CACd,MAAAif,EAAAA,CAAwBvW,CAAAA,CACxBmf,CAAAA,CAAe7nB,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CACjEA,CACR,CAAA,OAAE,CACIkrB,CAAAA,EACF,aAAaA,CAAgB,CAAA,CAE3BC,CAAAA,EAA0BvV,CAAAA,CAAQ,MAAA,EACpCA,CAAAA,CAAQ,MAAA,CAAO,mBAAA,CAAoB,OAAA,CAASuV,CAAsB,CAAA,CAEhE7X,CAAAA,EACFkK,CAAAA,CAAS,mBAAA,CAAqB,CAC5B,SAAA,CAAW+K,CAAAA,CACX,WAAA,CAAa,SAAA,CACb,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIX,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,KAAA,CAAOC,CACT,CAAC,EAEL,CACF,CAGA,eAAe4E,EAAAA,CACb7W,CAAAA,CACAhU,CAAAA,CACA0R,CAAAA,CACwB,CACxB,GAAIsC,CAAAA,CAAQ,QAAA,CAAS,MAAA,GAAW,CAAA,CAC9B,MAAM,IAAI,KAAA,CACR,iEACF,CAAA,CAGF,IAAM8W,CAAAA,CAAa9W,CAAAA,CAAQ,UAAA,EAAc,CAAA,CAEzC,GAAI,CAAC,MAAA,CAAO,SAAA,CAAU8W,CAAU,CAAA,EAAKA,CAAAA,CAAa,CAAA,CAChD,MAAM,IAAI,MACR,2EACF,CAAA,CAEF,GAAIA,CAAAA,CAAa9W,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAChC,MAAM,IAAI,KAAA,CACR,CAAA,gDAAA,EAAmD8W,CAAU,CAAA,uBAAA,EAA0B9W,CAAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,CAAA,CAChH,CAAA,CAIF,IAAA,IAAWrX,CAAAA,IAAWqX,CAAAA,CAAQ,QAAA,CAC5B,GAAI,CAAC4G,CAAAA,CAAOje,CAAO,CAAA,EAAK,CAACke,EAAAA,CAAMle,CAAO,CAAA,CACpC,MAAM,IAAI,KAAA,CACR,CAAA,8CAAA,EAAiDA,CAAO,CAAA,CAAA,CAC1D,CAAA,CAIJ,IAAMqpB,CAAAA,CAAmB,IAAA,CAAK,GAAA,EAAI,CAC5BW,CAAAA,CAAMjV,CAAAA,EAAa,eAAA,CACnBwR,CAAAA,CAAa,IAAI,eAAA,CACnB6H,CAAAA,CAGAC,CAAAA,CACAhX,CAAAA,CAAQ,MAAA,GACNA,CAAAA,CAAQ,MAAA,CAAO,OAAA,CACjBkP,CAAAA,CAAW,KAAA,EAAM,EAEjB8H,CAAAA,CAAsB,IAAM9H,CAAAA,CAAW,KAAA,EAAM,CAC7ClP,CAAAA,CAAQ,OAAO,gBAAA,CAAiB,OAAA,CAASgX,CAAAA,CAAqB,CAC5D,IAAA,CAAM,IACR,CAAC,CAAA,CAAA,CAAA,CAIDtZ,CAAAA,EACFkK,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAW+K,CAAAA,CACX,WAAA,CAAa,MAAA,CACb,KAAA,CAAA3mB,CAAAA,CACA,SAAA,CAAWgmB,CACb,CAAC,CAAA,CAGCroB,CAAAA,EACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,YAAA,CACN,SAAA,CAAWqoB,CAAAA,CACX,UAAA,CAAY,IAAA,CACZ,UAAWW,CAAAA,CACX,MAAA,CAAQ3S,CAAAA,CAAQ,QAClB,CAAC,CAAA,CAGCA,CAAAA,CAAQ,OAAA,GACV+W,CAAAA,CAAgB,UAAA,CAAW,IAAM7H,CAAAA,CAAW,KAAA,EAAM,CAAGlP,CAAAA,CAAQ,OAAO,CAAA,CAAA,CAGtE,IAAIiS,CAAAA,CACEgF,CAAAA,CAAsC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACxDC,CAAAA,CAAgB,CAAC,GAAGlX,CAAAA,CAAQ,QAAQ,CAAA,CAE1C,GAAI,CAMF,IAAMmX,CAAAA,CAAuBnX,CAAAA,CAAQ,QAAA,CAAS,GAAA,CAAKrX,CAAAA,GAAa,CAC9D,OAAA,CAAAA,CAAAA,CAEA,OAAA,CAASyf,EAAAA,CAAezf,CAAAA,CAASqD,CAAAA,CAAO,CACtC,MAAA,CAAQkjB,CAAAA,CAAW,MAAA,CACnB,SAAA,CAAAxR,CACF,CAAC,CAAA,CAAE,IAAA,CAAMpP,CAAAA,GAAY,CAAE,OAAA,CAAA3F,CAAAA,CAAS,MAAA,CAAA2F,CAAO,CAAA,CAAE,CAC3C,CAAA,CAAE,CAAA,CAGI8oB,CAAAA,CAAcD,EAAQ,GAAA,CAAKvuB,CAAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,IAAG,CAAA,CAAY,CAAC,CAAA,CAEjEoqB,CAAAA,CAGD,EAAC,CAEA1kB,CAAAA,CAAS,MAAM,IAAI,OAAA,CAEvB,CAACnD,CAAAA,CAASC,CAAAA,GAAW,CACrB,IAAIisB,CAAAA,CAAe,CAAA,CACfC,CAAAA,CAAW,CAAA,CAAA,CAEf,IAAA,IAAW7b,CAAAA,IAAS0b,CAAAA,CAClB1b,CAAAA,CAAM,OAAA,CACH,IAAA,CAAM8b,CAAAA,EAAW,CAChBF,CAAAA,EAAAA,CACI,CAAAC,CAAAA,GAGJtE,CAAAA,CAAiB,IAAA,CAAKuE,CAAM,CAAA,CACxBvE,CAAAA,CAAiB,MAAA,EAAU8D,CAAAA,GAC7BQ,CAAAA,CAAW,CAAA,CAAA,CACXpI,CAAAA,CAAW,KAAA,EAAM,CACjB/jB,CAAAA,CAAQ,CAAC,GAAG6nB,CAAgB,CAAC,CAAA,CAAA,EAEjC,CAAC,CAAA,CACA,KAAA,CAAO5oB,CAAAA,EAAU,CAKhB,GAJA6sB,CAAAA,CAAYxb,CAAAA,CAAM,OAAO,CAAA,CACvBrR,CAAAA,YAAiB,MAAQA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAOA,CAAK,CAAA,CACvDitB,CAAAA,EAAAA,CAEIC,CAAAA,CACF,OAGF,IAAME,CAAAA,CAAc,MAAA,CAAO,IAAA,CAAKP,CAAW,CAAA,CAAE,MAAA,CACvCQ,CAAAA,CACJzE,EAAiB,MAAA,EAAUmE,CAAAA,CAAQ,MAAA,CAASE,CAAAA,CAAAA,CAI5CA,CAAAA,GAAiBF,CAAAA,CAAQ,MAAA,EACzBK,CAAAA,GAAgBL,CAAAA,CAAQ,MAAA,EAExBG,CAAAA,CAAW,CAAA,CAAA,CACXlsB,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,iCAAA,EAAoC+rB,EAAQ,MAAM,CAAA;AAAA,CAAA,CAChD,OAAO,OAAA,CAAQF,CAAW,CAAA,CACvB,GAAA,CAAI,CAAC,CAACntB,CAAAA,CAAI4tB,EAAG,CAAA,GAAM,OAAO5tB,CAAE,CAAA,EAAA,EAAK4tB,EAAG,CAAA,CAAE,EACtC,IAAA,CAAK;AAAA,CAAI,CAChB,CACF,CAAA,EACSD,CAAAA,CAAuBX,CAAAA,GAEhCQ,CAAAA,CAAW,CAAA,CAAA,CACXlsB,CAAAA,CACE,IAAI,KAAA,CACF,CAAA,sDAAA,EAAyD0rB,CAAU,MAC9DU,CAAW,CAAA;AAAA,CAAA,CACd,OAAO,OAAA,CAAQP,CAAW,CAAA,CACvB,GAAA,CAAI,CAAC,CAACntB,CAAAA,CAAI4tB,EAAG,CAAA,GAAM,OAAO5tB,CAAE,CAAA,EAAA,EAAK4tB,EAAG,CAAA,CAAE,EACtC,IAAA,CAAK;AAAA,CAAI,CAChB,CACF,CAAA,EAEJ,CAAC,EAEP,CAAC,EAID,MAAM,OAAA,CAAQ,GAAA,CAAIN,CAAW,EAAE,KAAA,CAAM,IAAM,CAAC,CAAC,CAAA,CAG7C,IAAMO,CAAAA,CAAQrpB,CAAAA,CAAO,CAAC,CAAA,CAChBspB,EAAWD,CAAAA,CAAM,OAAA,CACjBE,EAAa,IAAI,GAAA,CAAIvpB,EAAO,GAAA,CAAKmB,CAAAA,EAAMA,CAAAA,CAAE,OAAO,CAAC,CAAA,CACjDqoB,CAAAA,CAAeZ,EAAc,MAAA,CAChCptB,CAAAA,EAAO,CAAC+tB,CAAAA,CAAW,GAAA,CAAI/tB,CAAE,CAAA,EAAK,EAAEA,CAAAA,IAAMmtB,CAAAA,CACzC,EAEIttB,CAAAA,GACFA,CAAAA,CAAS,OAAO,CACd,IAAA,CAAM,aAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,WAAY,IAAA,CACZ,SAAA,CAAWgpB,EACX,QAAA,CAAAiF,CAAAA,CACA,UAAA,CAAY,IAAA,CAAK,KAAI,CAAI5F,CAC3B,CAAC,CAAA,CACG8F,CAAAA,CAAa,OAAS,CAAA,EACxBnuB,CAAAA,CAAS,MAAA,CAAO,CACd,KAAM,gBAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,WAAY,IAAA,CACZ,SAAA,CAAWgpB,CAAAA,CACX,YAAA,CAAAmF,EACA,MAAA,CAAQ,cACV,CAAC,CAAA,CAAA,CAIL,IAAMjd,EAAYmF,CAAAA,CAAQ,OAAA,CACtBA,CAAAA,CAAQ,OAAA,CAAQ2X,EAAM,MAAM,CAAA,CAC3BA,EAAM,MAAA,CAAO,MAAA,CAGZI,EACJjB,CAAAA,CAAa,CAAA,CACTxoB,CAAAA,CAAO,GAAA,CAAKmB,IAAO,CACjB,OAAA,CAASA,EAAE,OAAA,CACX,MAAA,CAAQuQ,EAAQ,OAAA,CACZA,CAAAA,CAAQ,OAAA,CAAQvQ,CAAAA,CAAE,MAAM,CAAA,CACvBA,CAAAA,CAAE,OAAO,MAChB,CAAA,CAAE,EACF,KAAA,CAAA,CAEN,OAAO,CAAE,QAAA,CAAAmoB,EAAU,MAAA,CAAQ/c,CAAAA,CAAW,WAAAkd,CAAW,CACnD,OAAS3tB,CAAAA,CAAO,CACd,MAAA6nB,CAAAA,CAAe7nB,aAAiB,KAAA,CAAQA,CAAAA,CAAQ,IAAI,KAAA,CAAM,MAAA,CAAOA,CAAK,CAAC,CAAA,CAGnET,CAAAA,EACFA,CAAAA,CAAS,OAAO,CACd,IAAA,CAAM,iBACN,SAAA,CAAW,IAAA,CAAK,KAAI,CACpB,UAAA,CAAY,KACZ,SAAA,CAAWgpB,CAAAA,CACX,aAAcuE,CAAAA,CACd,MAAA,CAAQhI,EAAW,MAAA,CAAO,OAAA,CAAU,UAAY,YAClD,CAAC,CAAA,CAGG9kB,CACR,QAAE,CACI2sB,CAAAA,EACF,aAAaA,CAAa,CAAA,CAExBC,GAAuBhX,CAAAA,CAAQ,MAAA,EACjCA,CAAAA,CAAQ,MAAA,CAAO,oBAAoB,OAAA,CAASgX,CAAmB,EAE7DtZ,CAAAA,EACFkK,CAAAA,CAAS,oBAAqB,CAC5B,SAAA,CAAW+K,CAAAA,CACX,WAAA,CAAa,OACb,UAAA,CAAY,IAAA,CAAK,KAAI,CAAIX,CAAAA,CACzB,UAAW,IAAA,CAAK,GAAA,EAAI,CACpB,KAAA,CAAOC,CACT,CAAC,EAEL,CACF,CAGA,eAAe+F,GACbhY,CAAAA,CACAhU,CAAAA,CACA0R,CAAAA,CACAgV,CAAAA,CAC0B,CAC1B,GAAM,CACJ,SAAUuF,CAAAA,CACV,SAAA,CAAAhZ,EACA,SAAA,CAAA4C,CAAAA,CAAY,CAAA,CACZ,OAAA,CAAAwC,EACA,cAAA,CAAAC,CACF,EAAItE,CAAAA,CAEJ,GAAIiY,EAAa,MAAA,CAAS,CAAA,CACxB,MAAM,IAAI,MACR,4DACF,CAAA,CAEF,GAAIpW,CAAAA,CAAY,CAAA,EAAK,CAAC,MAAA,CAAO,QAAA,CAASA,CAAS,CAAA,CAC7C,MAAM,IAAI,KAAA,CAAM,sDAAsD,EAIxE,IAAIwT,CAAAA,CAAkBrV,EAAQ,MAAA,CAC1BkY,CAAAA,CACAC,CAAAA,CACJ,GAAInY,EAAQ,OAAA,EAAW,CAACqV,EAAiB,CACvC,IAAM+C,EAAO,IAAI,eAAA,CACjBF,CAAAA,CAAkB,UAAA,CAAW,IAAME,CAAAA,CAAK,KAAA,GAASpY,CAAAA,CAAQ,OAAO,EAChEqV,CAAAA,CAAkB+C,CAAAA,CAAK,OACzB,CAAA,KAAA,GAAWpY,EAAQ,OAAA,EAAWqV,CAAAA,CAAiB,CAC7C,IAAM+C,CAAAA,CAAO,IAAI,eAAA,CACjBF,CAAAA,CAAkB,UAAA,CAAW,IAAME,EAAK,KAAA,EAAM,CAAGpY,EAAQ,OAAO,CAAA,CAChEmY,EAAkB,IAAMC,CAAAA,CAAK,KAAA,EAAM,CACnC/C,EAAgB,gBAAA,CAAiB,OAAA,CAAS8C,EAAiB,CACzD,IAAA,CAAM,IACR,CAAC,CAAA,CACD9C,CAAAA,CAAkB+C,CAAAA,CAAK,OACzB,CAuDA,IAAMC,EAAa/T,CAAAA,GApDjBnM,CAAAA,EAC4D,CAC5D,GAAI,OAAOA,CAAAA,EAAW,QAAA,CACpB,GAAI,CACF,IAAM9O,EAAS,IAAA,CAAK,KAAA,CAAM8O,CAAM,CAAA,CAChC,OACE9O,GACA,OAAOA,CAAAA,EAAW,UAClB,OAAOA,CAAAA,CAAO,UAAa,QAAA,CAEpBA,CAAAA,EAGLqd,IACF,OAAA,CAAQ,IAAA,CACN,yGACF,CAAA,CAGK,CAAE,QAAA,CAAUuR,CAAAA,CAAa,CAAC,CAAG,CAAA,CACtC,MAAQ,CACN,OAAIvR,EAAAA,EACF,OAAA,CAAQ,KACN,qGACF,CAAA,CAGK,CAAE,QAAA,CAAUuR,CAAAA,CAAa,CAAC,CAAG,CACtC,CAEF,OACE9f,GACA,OAAOA,CAAAA,EAAW,UAClB,UAAA,GAAcA,CAAAA,EACd,OAAQA,CAAAA,CAAmC,QAAA,EAAa,QAAA,CAEjDA,CAAAA,EAOLuO,IACF,OAAA,CAAQ,IAAA,CACN,uGACF,CAAA,CAGK,CAAE,SAAUuR,CAAAA,CAAa,CAAC,CAAG,CAAA,CACtC,GAGMK,CAAAA,CAAoC5F,CAAAA,EAAY,OAClD,CAAC,GAAGA,EAAW,MAAM,CAAA,CACrB,EAAC,CACDnR,EAAemR,CAAAA,EAAY,YAAA,EAAgB1mB,EAC3CusB,CAAAA,CAAe7F,CAAAA,EAAY,cAAgBuF,CAAAA,CAAa,CAAC,CAAA,CACzDO,CAAAA,CAA4B9F,GAAY,gBAAA,EAAoB,MAAA,CAC1Da,EAAab,CAAAA,EAAY,KAAA,EAAS,EAGlC+F,CAAAA,CAAmBzY,CAAAA,CAAQ,UAAA,CAC3B0Y,CAAAA,CAAkBD,GAAkB,KAAA,EAASpb,EAAAA,CAC7Csb,EAAmBF,CAAAA,EAAkB,MAAA,EAAU,EAC/CG,CAAAA,CAAmBH,CAAAA,EAAkB,WAAA,EAAe,QAAA,CAEpD9F,EAAMjV,CAAAA,EAAa,iBAAA,CACnBsU,EAAmB,IAAA,CAAK,GAAA,GAC1B6G,CAAAA,CAAoBnG,CAAAA,EAAY,cAAA,EAAkB,CAAA,CAElDhV,GACFkK,CAAAA,CAAS,gBAAA,CAAkB,CACzB,SAAA,CAAW+K,CAAAA,CACX,YAAa,QAAA,CACb,KAAA,CAAA3mB,CAAAA,CACA,SAAA,CAAWgmB,CACb,CAAC,CAAA,CAGH,IAAIC,CAAAA,CACJ,GAAI,CACF,IAAA,IAASjQ,CAAAA,CAAQuR,CAAAA,CAAYvR,CAAAA,CAAQH,GAC/B,CAAAwT,CAAAA,EAAiB,QADyBrT,CAAAA,EAAAA,CAAS,CAKvD,IAAM8W,CAAAA,CAAmBb,CAAAA,CAAa,GAAA,CAAI,MAAOtvB,IAAY,CAC3D,IAAM2F,GAAS,MAAM8Z,EAAAA,CAAezf,GAAS4Y,CAAAA,CAAc,CACzD,MAAA,CAAQ8T,CAAAA,CACR,UAAW1C,CACb,CAAC,EACD,OAAAkG,CAAAA,EAAqBvqB,GAAO,WAAA,CAErB,CAAE,OAAA,CAAA3F,EAAAA,CAAS,OAAQ2F,EAAAA,CAAO,MAAO,CAC1C,CAAC,CAAA,CACKyqB,EAAY,MAAM,OAAA,CAAQ,IAAID,CAAgB,CAAA,CAEpD,GAAIzD,CAAAA,EAAiB,OAAA,CACnB,MAGF,IAAM2D,EAAAA,CAAY,KAAK,SAAA,CAAU,CAC/B,KAAA,CAAOhX,CAAAA,CAAQ,EACf,WAAA,CAAaH,CAAAA,CACb,UAAWkX,CAAAA,CAAU,GAAA,CAAKtC,KAAO,CAC/B,OAAA,CAASA,EAAAA,CAAE,OAAA,CACX,SAAUA,EAAAA,CAAE,MACd,EAAE,CACJ,CAAC,EAEK1T,EAAAA,CAAa,MAAMqF,EAAAA,CAAenJ,CAAAA,CAAW+Z,GAAW,CAC5D,MAAA,CAAQ3D,EACR,SAAA,CAAW1C,CACb,CAAC,CAAA,CACDkG,CAAAA,EAAqB9V,EAAAA,CAAW,WAAA,CAChC,IAAMkW,EAAAA,CAAYZ,CAAAA,CAAWtV,GAAW,MAAM,CAAA,CA+B9C,GA5BKkV,CAAAA,CAAa,QAAA,CAASgB,EAAAA,CAAU,QAAQ,IAC3CA,EAAAA,CAAU,QAAA,CAAWhB,EAAa,CAAC,CAAA,CAAA,CAGrCK,EAAO,IAAA,CAAK,CAAE,SAAA,CAAAS,CAAAA,CAAW,UAAAE,EAAU,CAAC,EAGhCtvB,CAAAA,EACFA,CAAAA,CAAS,OAAO,CACd,IAAA,CAAM,cAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,WAAY,IAAA,CACZ,SAAA,CAAWgpB,EACX,KAAA,CAAO3Q,CAAAA,CAAQ,EACf,WAAA,CAAaH,CAAAA,CACb,SAAUoX,EAAAA,CAAU,QAAA,CACpB,MAAOA,EAAAA,CAAU,KAAA,CACjB,WAAYhB,CAAAA,CAAa,MAC3B,CAAC,CAAA,CAGHM,EAAeU,EAAAA,CAAU,QAAA,CAIzBT,EAHuBO,CAAAA,CAAU,IAAA,CAC9BtC,IAAMA,EAAAA,CAAE,OAAA,GAAYwC,EAAAA,CAAU,QACjC,GACmC,MAAA,EAAUF,CAAAA,CAAU,CAAC,CAAA,CAAG,MAAA,CAIzDN,GACAC,CAAAA,EACA1W,CAAAA,CAAQuR,CAAAA,EAAAA,CACPvR,CAAAA,CAAQuR,GAAcoF,CAAAA,GAAqB,CAAA,CAC5C,CACA,IAAM1D,EAAAA,CAAmC,CACvC,IAAA,CAAM,QAAA,CACN,OAAA,CAAS,CAAA,CACT,GAAInhB,EAAAA,EAAmB,CACvB,UAAW,IAAI,IAAA,GAAO,WAAA,EAAY,CAClC,KAAA,CAAO,CAAA,EAAG8kB,CAAgB,CAAA,OAAA,EAAU5W,CAAAA,CAAQ,CAAC,CAAA,CAAA,CAC7C,SAAA,CAAW2Q,EACX,UAAA,CAAY9Q,CAAAA,CACZ,KAAA,CAAOG,CAAAA,CAAQ,EACf,YAAA,CAAAT,CAAAA,CACA,OAAQ,CAAC,GAAG+W,CAAM,CAAA,CAClB,YAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,EACA,cAAA,CAAgBK,CAClB,EACA,MAAMxG,EAAAA,CACJ4C,GACAyD,CAAAA,CACAD,CACF,EACF,CAEIzW,CAAAA,CAAQH,EAAY,CAAA,EAAKoX,EAAAA,CAAU,WACrC1X,CAAAA,CAAe,CAAA,yBAAA,EAA4B0X,GAAU,QAAQ;;AAAA,eAAA,EAAsBjtB,CAAK,IAE5F,CAEA,GAAIssB,EAAO,MAAA,GAAW,CAAA,CACpB,MAAM,IAAI,KAAA,CACR,kEACF,CAAA,CAGF,IAAMhqB,EAAS+V,CAAAA,CACXA,CAAAA,CAAQmU,CAAgB,CAAA,CACvBA,CAAAA,CAEL,OAAO,CAAE,QAAA,CAAUD,CAAAA,CAAc,OAAAjqB,CAAAA,CAAQ,MAAA,CAAAgqB,CAAO,CAClD,CAAA,MAASluB,EAAO,CACd,MAAA6nB,EAAe7nB,CAAAA,YAAiB,KAAA,CAAQA,EAAQ,IAAI,KAAA,CAAM,OAAOA,CAAK,CAAC,EACjEA,CACR,CAAA,OAAE,CACI8tB,CAAAA,EACF,YAAA,CAAaA,CAAe,EAE1BC,CAAAA,EAAmBnY,CAAAA,CAAQ,QAC7BA,CAAAA,CAAQ,MAAA,CAAO,oBAAoB,OAAA,CAASmY,CAAe,EAEzDza,CAAAA,EACFkK,CAAAA,CAAS,oBAAqB,CAC5B,SAAA,CAAW+K,EACX,WAAA,CAAa,QAAA,CACb,WAAY,IAAA,CAAK,GAAA,EAAI,CAAIX,CAAAA,CACzB,SAAA,CAAW,IAAA,CAAK,KAAI,CACpB,KAAA,CAAOC,CACT,CAAC,EAEL,CACF,CAKA,IAAMiH,EAAAA,CAAoB,IAAI,GAAA,CAAI,CAChC,YACA,aAAA,CACA,WAAA,CACA,WACA,SAAA,CACA,gBACF,CAAC,CAAA,CAED,SAASC,EAAAA,CACPC,CAAAA,CACAhgB,CAAAA,CACM,CACN,QAAW9P,CAAAA,IAAO,MAAA,CAAO,KAAK8P,CAAM,CAAA,CAC7B8f,GAAkB,GAAA,CAAI5vB,CAAG,IAC5B8vB,CAAAA,CAAO9vB,CAAG,EAAI8P,CAAAA,CAAO9P,CAAG,GAG9B,CAMA,SAAS+vB,GACP1G,CAAAA,CACAhV,CAAAA,CACM,CAEN,IAAM2b,CAAAA,CAAwC,MAAA,CAAO,OAAO,IAAI,CAAA,CAChE,OAAW,CAACzb,CAAAA,CAAQC,CAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAK,CAAA,CAC/C,IAAA,IAAWrU,KAAOwU,CAAAA,CAAK,QAAA,CAChBwb,EAAYhwB,CAAG,CAAA,GAClBgwB,EAAYhwB,CAAG,CAAA,CAAI,EAAC,CAAA,CAEtBgwB,CAAAA,CAAYhwB,CAAG,EAAG,IAAA,CAAKuU,CAAM,EAKjC,IAAMD,CAAAA,CAAU,OAAO,IAAA,CAAKD,CAAK,EAC3BM,CAAAA,CAAmC,MAAA,CAAO,OAAO,IAAI,CAAA,CACrDC,EAAsC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC9D,IAAA,IAAWpU,CAAAA,IAAM8T,CAAAA,CACfK,CAAAA,CAASnU,CAAE,EAAI,CAAA,CACfoU,CAAAA,CAAUpU,CAAE,CAAA,CAAI,GAGlB,IAAA,GAAW,CAAC+T,CAAAA,CAAQC,CAAI,CAAA,GAAK,MAAA,CAAO,QAAQH,CAAK,CAAA,CAC/C,QAAW4b,CAAAA,IAAUzb,CAAAA,CAAK,UAAY,EAAC,CAAG,CACxC,IAAM0b,CAAAA,CAAYF,CAAAA,CAAYC,CAAM,CAAA,CACpC,GAAIC,EACF,IAAA,IAAWC,CAAAA,IAAcD,EACnBC,CAAAA,GAAe5b,CAAAA,GACjBK,EAAUub,CAAU,CAAA,CAAG,KAAK5b,CAAM,CAAA,CAClCI,EAASJ,CAAM,CAAA,CAAA,CAAKI,EAASJ,CAAM,CAAA,EAAK,CAAA,EAAK,CAAA,EAIrD,CAIF,IAAMM,EAAkB,EAAC,CACzB,QAAWrU,CAAAA,IAAM8T,CAAAA,CACXK,EAASnU,CAAE,CAAA,GAAM,CAAA,EACnBqU,CAAAA,CAAM,IAAA,CAAKrU,CAAE,EAIjB,IAAIsU,CAAAA,CAAU,EACd,KAAOD,CAAAA,CAAM,OAAS,CAAA,EAAG,CACvB,IAAME,CAAAA,CAAUF,CAAAA,CAAM,KAAA,GACtBC,CAAAA,EAAAA,CACA,IAAA,IAAWE,KAAaJ,CAAAA,CAAUG,CAAO,GAAK,EAAC,CAC7CJ,EAASK,CAAS,CAAA,EAAA,CACdL,EAASK,CAAS,CAAA,GAAM,GAC1BH,CAAAA,CAAM,IAAA,CAAKG,CAAS,EAG1B,CAEA,GAAIF,CAAAA,GAAYR,CAAAA,CAAQ,MAAA,CACtB,MAAM,IAAI,KAAA,CACR,wCAAwC+U,CAAG,CAAA,sDAAA,EAAyDvU,CAAO,CAAA,CAAA,EAAIR,CAAAA,CAAQ,MAAM,CAAA,OAAA,CAC/H,CAEJ,CAMA,SAAS8b,EAAAA,CACP/G,CAAAA,CACAhV,EACM,CACN,IAAM2b,EAAwC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAChE,IAAA,GAAW,CAACzb,EAAQC,CAAI,CAAA,GAAK,OAAO,OAAA,CAAQH,CAAK,EAC/C,IAAA,IAAWrU,CAAAA,IAAOwU,EAAK,QAAA,CAChBwb,CAAAA,CAAYhwB,CAAG,CAAA,GAClBgwB,CAAAA,CAAYhwB,CAAG,CAAA,CAAI,IAErBgwB,CAAAA,CAAYhwB,CAAG,CAAA,CAAG,IAAA,CAAKuU,CAAM,CAAA,CAIjC,OAAW,CAACvU,CAAAA,CAAKkwB,CAAS,CAAA,GAAK,MAAA,CAAO,QAAQF,CAAW,CAAA,CACnDE,CAAAA,CAAU,MAAA,CAAS,CAAA,EACrB,OAAA,CAAQ,KACN,CAAA,qCAAA,EAAwC7G,CAAG,gBAAgBrpB,CAAG,CAAA,iCAAA,EAAoCkwB,EAAU,IAAA,CAAK,IAAI,CAAC,CAAA,mBAAA,CACxH,EAGN,CAGA,SAASG,EAAAA,CACPthB,CAAAA,CAAAA,GACG5B,EACY,CACf,GAAK4B,EAIL,GAAI,CACF,OAAOA,CAAAA,CAAG,GAAG5B,CAAI,CACnB,CAAA,MAAS/N,EAAK,CACZ,OAAA,CAAQ,MAAM,mDAAA,CAAqDA,CAAG,CAAA,CAEtE,MACF,CACF,CAGA,eAAekxB,EAAAA,CACbvhB,CAAAA,CAAAA,GACG5B,EACqB,CACxB,GAAK4B,EAIL,GAAI,CACF,OAAO,MAAMA,CAAAA,CAAG,GAAG5B,CAAI,CACzB,CAAA,MAAS/N,EAAK,CACZ,OAAA,CAAQ,MAAM,mDAAA,CAAqDA,CAAG,CAAA,CAEtE,MACF,CACF,CAGA,SAASmxB,EAAAA,CACPC,CAAAA,CACAC,EACAC,CAAAA,CACa,CAEb,IAAMC,CAAAA,CAAcF,CAAAA,CAAY,MAAM,EAAE,CAAA,CAClCpd,EACJsd,CAAAA,CAAY,MAAA,CAAS,EACjBA,CAAAA,CAAY,MAAA,CAAO,CAAC/d,CAAAA,CAAKvO,CAAAA,GAAMuO,CAAAA,CAAMvO,CAAAA,CAAE,iBAAA,CAAmB,CAAC,EAC3DssB,CAAAA,CAAY,MAAA,CACZ,EAEFC,CAAAA,CAAyC,IAAA,CACzCvd,EAAW,CAAA,EAAKmd,CAAAA,CAAsB,IACxCI,CAAAA,CAA0B,IAAA,CAAK,MAC5B,CAAA,CAAMJ,CAAAA,EAAuBnd,CAChC,CAAA,CAAA,CAIF,IAAIwd,EAAe,KAAA,CACnB,GAAIJ,CAAAA,CAAY,MAAA,EAAU,CAAA,CAAG,CAC3B,IAAMK,CAAAA,CAAUL,CAAAA,CAAY,MAAM,EAAE,CAAA,CAC9BM,EAASN,CAAAA,CAAY,KAAA,CAAM,GAAI,EAAE,CAAA,CACjCO,EACJF,CAAAA,CAAQ,MAAA,CAAO,CAACzsB,CAAAA,CAAGiP,CAAAA,GAAMjP,EAAIiP,CAAAA,CAAE,iBAAA,CAAmB,CAAC,CAAA,CAAI,CAAA,CACnD2d,CAAAA,CAAWF,EAAO,MAAA,CAAO,CAAC1sB,EAAGiP,CAAAA,GAAMjP,CAAAA,CAAIiP,EAAE,iBAAA,CAAmB,CAAC,CAAA,CAAI,CAAA,CACvEud,CAAAA,CAAeG,CAAAA,CAAYC,EAAW,GACxC,CAEA,OAAO,CACL,YAAA,CAAcT,EACd,YAAA,CAAcnd,CAAAA,CACd,uBAAA,CAAAud,CAAAA,CACA,YAAA,CAAAC,CACF,CACF,CAGA,SAASK,GAAkB7tB,CAAAA,CAAmC,CAC5D,OAAIA,CAAAA,EAAS,IAAA,EAAQ,CAAC,MAAA,CAAO,QAAA,CAASA,CAAK,CAAA,CAClC,CAAA,CAGF,KAAK,GAAA,CAAI,CAAA,CAAG,KAAK,GAAA,CAAI,CAAA,CAAGA,CAAK,CAAC,CACvC,CAEA,eAAe8tB,EAAAA,CACbza,CAAAA,CACAyS,EACA/U,CAAAA,CACAgV,CAAAA,CACwB,CACxB,GAAM,CACJ,KAAA,CAAOgI,CAAAA,CACP,IAAA,CAAMC,CAAAA,CACN,aAAcC,CAAAA,CACd,QAAA,CAAAC,EAAW,EAAA,CACX,OAAA,CAAAxW,EACA,iBAAA,CAAAyW,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,QAAAC,CACF,CAAA,CAAIjb,EAGErC,CAAAA,CAAkC,MAAA,CAAO,OAAO,IAAI,CAAA,CAC1D,OAAW,CAAC7T,EAAAA,CAAIgU,EAAI,CAAA,GAAK,MAAA,CAAO,QAAQ4c,CAAa,CAAA,CACnD/c,EAAM7T,EAAE,CAAA,CAAI,CAAE,GAAGgU,EAAK,CAAA,CAIxB,GADgB,MAAA,CAAO,IAAA,CAAKH,CAAK,CAAA,CACrB,MAAA,GAAW,EACrB,MAAM,IAAI,KAAA,CAAM,wDAAwD,CAAA,CAG1E,IAAMgV,EAAMjV,CAAAA,EAAa,QAAA,CAGzB,OAAW,CAACG,EAAAA,CAAQC,EAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAK,CAAA,CAC/C,GAAI,CAACiJ,CAAAA,CAAO9I,EAAAA,CAAK,OAAO,CAAA,EAAK,CAAC+I,GAAM/I,EAAAA,CAAK,OAAO,EAC9C,MAAM,IAAI,MACR,CAAA,kCAAA,EAAqCD,EAAM,sCAAsCC,EAAAA,CAAK,OAAO,GAC/F,CAAA,CAKJub,EAAAA,CAAoB1G,CAAAA,CAAKhV,CAAK,CAAA,CAG9B+b,EAAAA,CAA0B/G,EAAKhV,CAAK,CAAA,CAGpC,OAAW,CAACE,EAAAA,CAAQC,EAAI,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAK,CAAA,CAC1CG,EAAAA,CAAK,eACR,OAAA,CAAQ,IAAA,CACN,qCAAqCD,EAAM,CAAA,+HAAA,CAC7C,EAKJ,IAAIwX,CAAAA,CAAkBrV,CAAAA,CAAQ,MAAA,CAC1Bkb,CAAAA,CACA/C,CAAAA,CACEgD,EAAYnb,CAAAA,CAAQ,OAAA,EAAW,IACrC,GAAImb,CAAAA,EAAa,CAAC9F,CAAAA,CAAiB,CACjC,IAAM+C,EAAAA,CAAO,IAAI,gBACjB8C,CAAAA,CAAgB,UAAA,CAAW,IAAM9C,EAAAA,CAAK,KAAA,GAAS+C,CAAS,CAAA,CACxD9F,CAAAA,CAAkB+C,EAAAA,CAAK,OACzB,CAAA,KAAA,GAAW+C,GAAa9F,CAAAA,CAAiB,CACvC,IAAM+C,EAAAA,CAAO,IAAI,gBACjB8C,CAAAA,CAAgB,UAAA,CAAW,IAAM9C,EAAAA,CAAK,KAAA,EAAM,CAAG+C,CAAS,CAAA,CACxDhD,CAAAA,CAAkB,IAAMC,EAAAA,CAAK,KAAA,GAC7B/C,CAAAA,CAAgB,gBAAA,CAAiB,OAAA,CAAS8C,CAAAA,CAAiB,CACzD,IAAA,CAAM,IACR,CAAC,CAAA,CACD9C,EAAkB+C,EAAAA,CAAK,OACzB,CAEA,IAAMpG,CAAAA,CAAmB,KAAK,GAAA,EAAI,CAElC,GAAIroB,CAAAA,CAAU,CACZ,IAAMyxB,EAAAA,CAAe,MAAA,CAAO,OAAOzd,CAAK,CAAA,CAAE,GAAA,CAAK0d,EAAAA,EAAMA,EAAAA,CAAE,OAAO,EAE9D1xB,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,eAAA,CACN,UAAWqoB,CAAAA,CACX,UAAA,CAAY,IAAA,CACZ,SAAA,CAAWW,CAAAA,CACX,WAAA,CAAa,OACb,QAAA,CAAUyI,EAAAA,CACV,QAASA,EAAAA,CAAa,MAAA,CAAQ/e,IAAMwK,EAAAA,CAAMxK,EAAC,CAAA,EAAK,IAAI,CACtD,CAAC,EACH,CACAuL,CAAAA,CAAS,iBAAkB,CACzB,SAAA,CAAW+K,EACX,WAAA,CAAa,MAAA,CACb,MACE,OAAOF,CAAAA,EAAiB,SACpBA,CAAAA,CACA,IAAA,CAAK,UAAUA,CAAY,CAAA,CACjC,UAAWT,CACb,CAAC,CAAA,CAGD,IAAMnhB,CAAAA,CAAiC,MAAA,CAAO,OAAO,IAAI,CAAA,CACrD6hB,EACFyG,EAAAA,CAActoB,CAAAA,CAAO6hB,EAAW,KAAK,CAAA,CAC5B,OAAOD,CAAAA,EAAiB,QAAA,CACjC5hB,CAAAA,CAAM,MAAQ4hB,CAAAA,CAEd0G,EAAAA,CAActoB,EAAO4hB,CAAY,CAAA,CAInC,IAAM6I,CAAAA,CAA2B5I,CAAAA,CAC7B,CAAC,GAAGA,CAAAA,CAAW,cAAc,EAC7B,EAAC,CACCqC,EAAkD,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAC1E,GAAIrC,EACF,IAAA,GAAW,CAAC5oB,GAAIyxB,EAAG,CAAA,GAAK,OAAO,OAAA,CAAQ7I,CAAAA,CAAW,WAAW,CAAA,CAC3DqC,CAAAA,CAAYjrB,EAAE,CAAA,CAAI,CAChB,MAAA,CAAQyxB,GAAI,MAAA,CACZ,WAAA,CAAaA,GAAI,WACnB,CAAA,CAGJ,IAAMxB,CAAAA,CAAiCrH,CAAAA,CACnC,CAAC,GAAGA,CAAAA,CAAW,WAAW,CAAA,CAC1B,GACE8I,CAAAA,CAAkC9I,CAAAA,CACpC,CAAC,GAAGA,CAAAA,CAAW,WAAW,CAAA,CAC1B,EAAC,CACC+I,EAAiB,IAAI,GAAA,CAAY/I,GAAY,cAAA,EAAkB,EAAE,CAAA,CACjEgJ,CAAAA,CAAc,IAAI,GAAA,CACtBhJ,CAAAA,CACI,OAAO,OAAA,CAAQA,CAAAA,CAAW,WAAW,CAAA,CAAE,GAAA,CAAI,CAAC,CAACpS,EAAAA,CAAGC,EAAC,CAAA,GAAM,CAACD,EAAAA,CAAGC,EAAC,CAAC,CAAA,CAC7D,EACN,CAAA,CACMob,EAAkB,IAAI,GAAA,CAC1BjJ,CAAAA,CAAa,MAAA,CAAO,OAAA,CAAQA,CAAAA,CAAW,eAAe,CAAA,CAAI,EAC5D,CAAA,CACMkJ,CAAAA,CAQF,OAAO,MAAA,CAAO,IAAI,CAAA,CACtB,GAAIlJ,CAAAA,CACF,IAAA,GAAW,CAAC5oB,EAAAA,CAAI8S,EAAC,IAAK,MAAA,CAAO,OAAA,CAAQ8V,EAAW,YAAY,CAAA,CAC1DkJ,EAAa9xB,EAAE,CAAA,CAAI,CACjB,IAAA,CAAM8S,EAAAA,CAAE,KACR,oBAAA,CAAsBA,EAAAA,CAAE,KAAO,CAAA,CAAIA,EAAAA,CAAE,UAAA,CAAaA,EAAAA,CAAE,IAAA,CAAO,CAAA,CAC3D,OAAQA,EAAAA,CAAE,MAAA,CACV,WAAYA,EAAAA,CAAE,UAChB,EAGJ,IAAIif,CAAAA,CAAanJ,CAAAA,EAAY,UAAA,EAAc,CAAA,CACvCoJ,EAAAA,CAAyBpJ,GAAY,sBAAA,EAA0B,CAAA,CAC/DqJ,GAAmBrJ,CAAAA,EAAY,gBAAA,EAAoB,EACnDT,EAAAA,CACA+J,EAAAA,CAAe,KAAA,CACbC,EAAAA,CAAYvJ,CAAAA,EAAY,IAAA,EAAQ,EAGhCwJ,EAAAA,CAAmBlc,CAAAA,CAAQ,WAC3Bmc,EAAAA,CAAmBD,EAAAA,EAAkB,QAAU,CAAA,CAC/CE,EAAAA,CAAqBF,IAAkB,KAAA,EAAS7e,EAAAA,CAChDgf,GAAwBH,EAAAA,EAAkB,WAAA,EAAe,OAC3DI,EAAAA,CAGEC,EAAAA,CAA2B,EAEjC,GAAI,CACF,IAAA,IAAShK,EAAAA,CAAO0J,EAAAA,CAAW1J,EAAAA,CAAOsI,EAAUtI,EAAAA,EAAAA,CAAQ,CAElD,GAAIoH,EAAAA,CAASgB,CAAAA,CAAU9pB,CAAK,CAAA,GAAM,CAAA,CAAA,CAAM,CACtCmrB,EAAAA,CAAe,CAAA,CAAA,CACf,IAAM3oB,EAAa,IAAA,CAAK,GAAA,GAAQ2e,CAAAA,CAC1BwK,CAAAA,CAAc,OAAO,MAAA,CAAOzH,CAAW,CAAA,CAAE,MAAA,CAC7C,CAAC7Y,EAAAA,CAAKzM,KAAMyM,EAAAA,CAAMzM,EAAAA,CAAE,YACpB,CACF,CAAA,CAEA,OAAO,CACL,QAAA,CAAU,GACV,MAAA,CAAQkqB,EAAAA,CAAStV,EAASxT,CAAK,CAAA,EAAMA,EACrC,KAAA,CAAO,CAAE,GAAGA,CAAM,CAAA,CAClB,cAAA,CAAAyqB,CAAAA,CACA,WAAA,CAAAvG,CAAAA,CACA,MAAOxC,EAAAA,CACP,WAAA,CAAAiK,EACA,UAAA,CAAAnpB,CAAAA,CACA,YAAA0mB,CAAAA,CACA,WAAA,CAAAyB,CACF,CACF,CAGA,GAAInG,GAAiB,OAAA,CAAS,CAC5B,IAAMhiB,CAAAA,CAAa,IAAA,CAAK,KAAI,CAAI2e,CAAAA,CAC1BwK,CAAAA,CAAc,MAAA,CAAO,MAAA,CAAOzH,CAAW,EAAE,MAAA,CAC7C,CAAC7Y,GAAKzM,EAAAA,GAAMyM,EAAAA,CAAMzM,GAAE,WAAA,CACpB,CACF,EAEA,OAAO,CACL,SAAU,CAAA,CAAA,CACV,MAAA,CAAQkqB,GAAStV,CAAAA,CAASxT,CAAK,GAAMA,CAAAA,CACrC,KAAA,CAAO,CAAE,GAAGA,CAAM,CAAA,CAClB,eAAAyqB,CAAAA,CACA,WAAA,CAAAvG,EACA,KAAA,CAAOxC,EAAAA,CACP,YAAAiK,CAAAA,CACA,UAAA,CAAAnpB,CAAAA,CACA,WAAA,CAAA0mB,CAAAA,CACA,WAAA,CAAAyB,EACA,KAAA,CAAO,sBACT,CACF,CAGA,IAAMtG,GAAuB,EAAC,CAC9B,IAAA,GAAW,CAACrX,CAAAA,CAAQC,CAAI,IAAK,MAAA,CAAO,OAAA,CAAQH,CAAK,CAAA,CAAG,CAElD,IAAK+d,CAAAA,CAAY,GAAA,CAAI7d,CAAM,CAAA,EAAK,CAAA,GAAM0e,GACpC,SAIF,IAAME,GAAW3e,CAAAA,CAAK,QAAA,EAAY,EAAC,CAEnC,GAD0B2e,EAAAA,CAAS,KAAA,CAAOnzB,EAAAA,EAAQuH,CAAAA,CAAMvH,EAAG,CAAA,EAAK,IAAI,EAMpE,CAAA,GAAImyB,CAAAA,CAAe,IAAI5d,CAAM,CAAA,CAAG,CAC9B,GAAI,CAACC,CAAAA,CAAK,WACR,SAIF,IAAM4e,GAAY,IAAA,CAAK,SAAA,CAAUD,GAAS,GAAA,CAAKnzB,EAAAA,EAAQuH,CAAAA,CAAMvH,EAAG,CAAC,CAAC,EAClE,GAAIqyB,CAAAA,CAAgB,IAAI9d,CAAM,CAAA,GAAM6e,GAClC,QAEJ,CAEAxH,GAAW,IAAA,CAAKrX,CAAM,GACxB,CAGA,IAAI8e,GAAgBzH,EAAAA,CACpB,GAAI4F,GAAqB5F,EAAAA,CAAW,MAAA,CAAS,CAAA,CAAG,CAC9C,IAAM0H,CAAAA,CAAkBhC,EACnBjB,EAAAA,CAASiB,CAAAA,CAAgB/pB,CAAK,CAAA,EAAK,CAAA,CACpC8oB,GAASgB,CAAAA,CAAU9pB,CAAK,CAAA,GAAM,CAAA,CAAA,CAC5B,CAAA,CACA,CAAA,CACAipB,EAAsBU,EAAAA,CAAkBoC,CAAe,EACvDC,EAAAA,CAAsBhD,EAAAA,CAC1BC,EACAC,CAAAA,CACAxH,EACF,CAAA,CAGMuK,EAAAA,CAGF,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACtB,IAAA,GAAW,CAAChzB,EAAAA,CAAI8S,EAAC,IAAK,MAAA,CAAO,OAAA,CAAQgf,CAAY,CAAA,CAC/CkB,EAAAA,CAAgBhzB,EAAE,CAAA,CAAI,CACpB,KAAM8S,EAAAA,CAAE,IAAA,CACR,qBAAsBA,EAAAA,CAAE,IAAA,CAAO,CAAA,CAAIA,EAAAA,CAAE,UAAA,CAAaA,EAAAA,CAAE,KAAO,CAAA,CAC3D,MAAA,CAAQA,GAAE,MACZ,CAAA,CAGF,IAAMmgB,EAAAA,CAAiBjC,CAAAA,CAAkB,MAAA,CACvC5F,EAAAA,CACA4H,EAAAA,CACAD,EACF,EAEAF,EAAAA,CACEI,EAAAA,EAAkBA,GAAe,MAAA,CAAS,CAAA,CACtCA,GACA7H,GACR,CAWA,GARAyH,EAAAA,CAAc,IAAA,CACZ,CAAC3hB,EAAGC,CAAAA,GAAAA,CAAO0C,CAAAA,CAAM1C,CAAC,CAAA,CAAG,QAAA,EAAY,IAAM0C,CAAAA,CAAM3C,CAAC,EAAG,QAAA,EAAY,CAAA,CAC/D,EAGA2e,EAAAA,CAASqB,CAAAA,CAAQzI,GAAM,CAAE,GAAG1hB,CAAM,CAAA,CAAG8rB,EAAa,CAAA,CAG9CA,EAAAA,CAAc,MAAA,GAAW,CAAA,CAAG,CAE9Bd,CAAAA,EAAAA,CACA,IAAImB,EAAoB,CAAA,CAAA,CAExB,GAAIjC,EACF,IAAA,IACMkC,CAAAA,CAAUnB,EAAAA,CACdmB,CAAAA,CAAUlC,CAAAA,CAAW,MAAA,CACrBkC,IACA,CACA,IAAMC,GAAOnC,CAAAA,CAAWkC,CAAO,EACzBjmB,EAAAA,CAAYkmB,EAAAA,CAAK,eAAA,EAAmB,CAAA,CAC1C,GAAIrB,CAAAA,EAAc7kB,GAAW,CAE3B,IAAMlC,GAAWooB,EAAAA,CAAK,QAAA,CACtB,OAAQpoB,EAAAA,CAAS,IAAA,EACf,KAAK,aAAA,CACH,QAAWkgB,EAAAA,IAAOlgB,EAAAA,CAAS,MACzB2mB,CAAAA,CAAe,MAAA,CAAOzG,EAAG,CAAA,CACzB2G,CAAAA,CAAgB,MAAA,CAAO3G,EAAG,CAAA,CAE5B,MACF,KAAK,mBAAA,CAEH,IAAA,IAAWmI,MAAWroB,EAAAA,CAAS,KAAA,CAAO,CACpC,IAAMsoB,EAAAA,CAAQ,CAAA,aAAA,EAAgBH,CAAO,CAAA,CAAA,EAAIE,EAAAA,CAAQ,OAAO,CAAA,CAAA,CACxDxf,CAAAA,CAAMyf,EAAK,CAAA,CAAI,CAAE,GAAGD,EAAQ,EAC9B,CACA,MACF,KAAK,cAAA,CACHhE,GAActoB,CAAAA,CAAOiE,EAAAA,CAAS,KAAK,CAAA,CACnC,MACF,KAAK,gBAAA,CAAkB,CACrB,IAAMzB,EAAAA,CAAa,IAAA,CAAK,KAAI,CAAI2e,CAAAA,CAC1BwK,GAAc,MAAA,CAAO,MAAA,CAAOzH,CAAW,CAAA,CAAE,MAAA,CAC7C,CAAC7Y,EAAAA,CAAKzM,EAAAA,GAAMyM,EAAAA,CAAMzM,GAAE,WAAA,CACpB,CACF,EAEA,OAAO,CACL,SAAU,CAAA,CAAA,CACV,MAAA,CACEkqB,EAAAA,CAAStV,CAAAA,CAASxT,CAAK,CAAA,EAAMA,EAC/B,KAAA,CAAO,CAAE,GAAGA,CAAM,CAAA,CAClB,eAAAyqB,CAAAA,CACA,WAAA,CAAAvG,CAAAA,CACA,KAAA,CAAOxC,EAAAA,CACP,WAAA,CAAAiK,GACA,UAAA,CAAAnpB,EAAAA,CACA,YAAA0mB,CAAAA,CACA,WAAA,CAAAyB,EACA,KAAA,CAAO,CAAA,6CAAA,EAAgD0B,GAAK,KAAK,CAAA,CAAA,CACnE,CACF,CACA,KAAK,SAAU,CACb,IAAMG,GAAS1D,EAAAA,CAASiB,CAAAA,CAAgB/pB,CAAK,CAAA,EAAK,CAAA,CAC5CysB,EAAAA,CAAyB,CAC7B,IAAA,CAAA/K,EAAAA,CACA,MAAO,CAAE,GAAG1hB,CAAM,CAAA,CAClB,OAAA,CAASgpB,EAAAA,CACPW,EAAAA,CAAkB6C,EAAM,CAAA,CACxBtD,EACAxH,EACF,CAAA,CACA,eAAgB,IAAI,GAAA,CAAIkJ,CAAc,CAAA,CACtC,WAAA,CAAa,IAAI,GAAA,CAAIC,CAAW,CAClC,EAEA,MAAM9B,EAAAA,CAAc9kB,GAAS,KAAA,CAAOwoB,EAAG,EACvC,KACF,CACF,CAEA9B,CAAAA,CAAY,IAAA,CAAK,CACf,IAAA,CAAAjJ,EAAAA,CACA,UAAW0K,CAAAA,CACX,KAAA,CAAOC,GAAK,KAAA,CACZ,QAAA,CAAUpoB,EAAAA,CAAS,IACrB,CAAC,CAAA,CACDgnB,GAAyBmB,CAAAA,CAAU,CAAA,CACnCpB,EAAa,CAAA,CACbmB,CAAAA,CAAoB,GACpB,KACF,CACF,CAGF,GAAI,CAACA,CAAAA,CAAmB,CAEtB,IAAMK,CAAAA,CAAS1D,GAASiB,CAAAA,CAAgB/pB,CAAK,GAAK,CAAA,CAC5C0sB,EAAAA,CAAe1D,EAAAA,CACnBW,EAAAA,CAAkB6C,CAAM,CAAA,CACxBtD,EACAxH,EACF,CAAA,CAIA,GAHAoH,EAAAA,CAASsB,CAAAA,CAAS1I,GAAMgL,EAAY,CAAA,CAGhC,CAACxC,CAAAA,EAAce,EAAAA,EAA0Bf,EAAW,MAAA,CAAQ,CAC9D,IAAM1nB,EAAAA,CAAa,IAAA,CAAK,KAAI,CAAI2e,CAAAA,CAC1BwK,EAAAA,CAAc,MAAA,CAAO,MAAA,CAAOzH,CAAW,EAAE,MAAA,CAC7C,CAAC7Y,GAAKzM,EAAAA,GAAMyM,EAAAA,CAAMzM,GAAE,WAAA,CACpB,CACF,CAAA,CAEA,OAAO,CACL,QAAA,CAAU,GACV,MAAA,CAAQkqB,EAAAA,CAAStV,EAASxT,CAAK,CAAA,EAAMA,EACrC,KAAA,CAAO,CAAE,GAAGA,CAAM,CAAA,CAClB,cAAA,CAAAyqB,EACA,WAAA,CAAAvG,CAAAA,CACA,MAAOxC,EAAAA,CACP,WAAA,CAAAiK,GACA,UAAA,CAAAnpB,EAAAA,CACA,YAAA0mB,CAAAA,CACA,WAAA,CAAAyB,EACA,KAAA,CACE,gEACJ,CACF,CACF,CAEA,QACF,CAGAK,CAAAA,CAAa,CAAA,CAGb,IAAM2B,EAAAA,CAAY,IAAA,CAAK,KAAI,CACrBC,EAAAA,CAAY7C,EACbjB,EAAAA,CAASiB,CAAAA,CAAgB/pB,CAAK,CAAA,EAAK,CAAA,CACpC8oB,EAAAA,CAASgB,CAAAA,CAAU9pB,CAAK,CAAA,GAAM,GAC5B,CAAA,CACA,CAAA,CACA6sB,GAAkBlD,EAAAA,CAAkBiD,EAAS,EAC/CE,EAAAA,CAAa,CAAA,CACXC,EAAAA,CAA0B,EAAC,CAE3BC,EAAAA,CAAelB,GAAc,GAAA,CAAI,MAAO9e,GAAW,CACvD,IAAMC,EAAOH,CAAAA,CAAME,CAAM,EAGnB4e,EAAAA,CAAW3e,CAAAA,CAAK,UAAY,EAAC,CAC7B4e,GAAY,IAAA,CAAK,SAAA,CAAUD,GAAS,GAAA,CAAKnzB,EAAAA,EAAQuH,CAAAA,CAAMvH,EAAG,CAAC,CAAC,EAClEqyB,CAAAA,CAAgB,GAAA,CAAI9d,EAAQ6e,EAAS,CAAA,CAGrC,IAAIpa,EAAAA,CACEwb,EAAAA,CAAcnE,GAAS7b,CAAAA,CAAK,UAAA,CAAYjN,CAAK,CAAA,CACnD,GAAIitB,IAAe,IAAA,CACjBxb,EAAAA,CAAYwb,QACP,CACL,IAAMC,EAAAA,CAAyC,MAAA,CAAO,MAAA,CAAO,IAAI,EACjE,IAAA,IAAWz0B,EAAAA,IAAOmzB,GACZ5rB,CAAAA,CAAMvH,EAAG,GAAK,IAAA,GAChBy0B,EAAAA,CAAcz0B,EAAG,CAAA,CAAIuH,CAAAA,CAAMvH,EAAG,CAAA,CAAA,CAG9B,MAAA,CAAO,KAAKy0B,EAAa,CAAA,CAAE,OAAS,CAAA,CACtCzb,EAAAA,CAAY,IAAA,CAAK,SAAA,CAAUyb,EAAa,CAAA,CAC/BltB,EAAM,KAAA,EAAS,IAAA,CACxByR,GAAY,MAAA,CAAOzR,CAAAA,CAAM,KAAK,CAAA,CAE9ByR,EAAAA,CAAY,IAAA,CAAK,SAAA,CAAUzR,CAAK,EAEpC,CAEA,GAAI,CACF,IAAMvC,EAAAA,CAAS,MAAM8Z,GAAetK,CAAAA,CAAK,OAAA,CAASwE,EAAAA,CAAW,CAC3D,MAAA,CAAQ+S,CAAAA,EAAmB,OAC3B,SAAA,CAAW1C,CACb,CAAC,CAAA,CAOD,GANAoC,EAAYlX,CAAM,CAAA,CAAIvP,GACtBgtB,CAAAA,CAAe,IAAA,CAAKzd,CAAM,CAAA,CAC1B4d,CAAAA,CAAe,IAAI5d,CAAM,CAAA,CACzB6d,EAAY,MAAA,CAAO7d,CAAM,CAAA,CAGrBC,CAAAA,CAAK,aAAA,CAAe,CACtB,IAAMkgB,EAAAA,CAAcrE,EAAAA,CAAS7b,EAAK,aAAA,CAAexP,EAAM,EACnD0vB,EAAAA,GACF7E,EAAAA,CAActoB,CAAAA,CAAOmtB,EAAW,CAAA,CAChCJ,EAAAA,CAAc,KAAK,GAAG,MAAA,CAAO,KAAKI,EAAW,CAAC,GAElD,CAAA,KAAO,CAEL,IAAM7P,EAAAA,CAAY7f,EAAAA,CAAO,MAAA,CACzB,GAAI6f,EAAAA,EAAa,OAAOA,IAAc,QAAA,CACpCgL,EAAAA,CAActoB,EAAOsd,EAAoC,CAAA,CACzDyP,GAAc,IAAA,CACZ,GAAG,OAAO,IAAA,CAAKzP,EAAoC,CACrD,CAAA,CAAA,KAAA,GACS,OAAOA,IAAc,QAAA,CAC9B,GAAI,CACF,IAAM9kB,EAAAA,CAAS,IAAA,CAAK,MAAM8kB,EAAS,CAAA,CACnC,GACE9kB,EAAAA,EACA,OAAOA,IAAW,QAAA,EAClB,CAAC,KAAA,CAAM,OAAA,CAAQA,EAAM,CAAA,CAErB8vB,GAActoB,CAAAA,CAAOxH,EAAM,EAC3Bu0B,EAAAA,CAAc,IAAA,CAAK,GAAG,MAAA,CAAO,IAAA,CAAKv0B,EAAM,CAAC,CAAA,CAAA,KAGzC,IAAA,IAAWC,MAAOwU,CAAAA,CAAK,QAAA,CACrBjN,EAAMvH,EAAG,CAAA,CAAI6kB,GACbyP,EAAAA,CAAc,IAAA,CAAKt0B,EAAG,EAG5B,CAAA,KAAQ,CACN,IAAA,IAAWA,EAAAA,IAAOwU,EAAK,QAAA,CACrBjN,CAAAA,CAAMvH,EAAG,CAAA,CAAI6kB,EAAAA,CACbyP,EAAAA,CAAc,IAAA,CAAKt0B,EAAG,EAE1B,CAEJ,CAEA,OAAAq0B,IAAcrvB,EAAAA,CAAO,WAAA,CAEd,CAAE,MAAA,CAAAuP,CAAAA,CAAQ,OAAA,CAAS,CAAA,CAAK,CACjC,CAAA,MAASzT,GAAO,CACd,IAAM8D,IAAYwtB,CAAAA,CAAY,GAAA,CAAI7d,CAAM,CAAA,EAAK,CAAA,EAAK,CAAA,CAClD,OAAA6d,CAAAA,CAAY,GAAA,CAAI7d,EAAQ3P,EAAQ,CAAA,CAEzB,CAAE,MAAA,CAAA2P,CAAAA,CAAQ,QAAS,CAAA,CAAA,CAAO,KAAA,CAAAzT,EAAM,CACzC,CACF,CAAC,CAAA,CAED,MAAM,QAAQ,UAAA,CAAWyzB,EAAY,EAGrC,IAAMI,EAAAA,CAAarD,CAAAA,CACdjB,EAAAA,CAASiB,CAAAA,CAAgB/pB,CAAK,GAAK,CAAA,CACpC8oB,EAAAA,CAASgB,EAAU9pB,CAAK,CAAA,GAAM,GAC5B,CAAA,CACA,CAAA,CACAqtB,EAAAA,CAAmB1D,EAAAA,CAAkByD,EAAU,CAAA,CAC/CE,GAAoBD,EAAAA,CAAmBR,EAAAA,CAa7C,GAXA3D,CAAAA,CAAY,IAAA,CAAK,CACf,IAAA,CAAAxH,EAAAA,CACA,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIiL,GACzB,QAAA,CAAU,CAAC,GAAGb,EAAa,CAAA,CAC3B,cAAAiB,EAAAA,CACA,YAAA,CAAcM,GACd,iBAAA,CAAAC,EAAAA,CACA,eAAgBR,EAClB,CAAC,EAGGh0B,CAAAA,CACF,IAAA,IAAWkU,KAAU8e,EAAAA,CAAe,CAClC,IAAM7e,CAAAA,CAAOH,CAAAA,CAAME,CAAM,EACzBlU,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,WAAA,CACN,UAAW,IAAA,CAAK,GAAA,EAAI,CACpB,UAAA,CAAY,IAAA,CACZ,OAAA,CAASmU,EAAK,OAAA,CACd,IAAA,CAAAyU,GACA,MAAA,CAAA1U,CAAAA,CACA,aAAcqgB,EAAAA,CACd,iBAAA,CAAAC,EACF,CAAC,EACH,CAIF,QAAWtgB,CAAAA,IAAU8e,EAAAA,CAAe,CAClC,IAAM7e,CAAAA,CAAOH,EAAME,CAAM,CAAA,CACpB+d,EAAa9d,CAAAA,CAAK,OAAO,IAC5B8d,CAAAA,CAAa9d,CAAAA,CAAK,OAAO,CAAA,CAAI,CAC3B,KAAM,CAAA,CACN,oBAAA,CAAsB,CAAA,CACtB,MAAA,CAAQ,CAAA,CACR,UAAA,CAAY,CACd,CAAA,CAAA,CAEF,IAAMlB,GAAIgf,CAAAA,CAAa9d,CAAAA,CAAK,OAAO,CAAA,CACnClB,EAAAA,CAAE,IAAA,EAAA,CACFA,EAAAA,CAAE,UAAA,EAAcuhB,EAAAA,CAChBvhB,GAAE,MAAA,EAAUmY,CAAAA,CAAYlX,CAAM,CAAA,EAAG,WAAA,EAAe,EAClD,CAYA,GAVAke,EAAAA,CAAmBmC,EAAAA,CAGfC,EAAAA,EAAqB,CAAA,CACvBtC,IAEAA,CAAAA,CAAa,CAAA,CAKbK,IACAE,EAAAA,EACA7J,EAAAA,CAAO0J,KACN1J,EAAAA,CAAO0J,EAAAA,EAAaE,KAAqB,CAAA,CAC1C,CACA,IAAMlH,CAAAA,CAAiC,CACrC,KAAM,MAAA,CACN,OAAA,CAAS,EACT,EAAA,CAAInhB,EAAAA,EAAmB,CACvB,SAAA,CAAW,IAAI,IAAA,GAAO,WAAA,EAAY,CAClC,MAAO,CAAA,EAAGuoB,EAAqB,SAAS9J,EAAI,CAAA,CAAA,CAC5C,UAAWI,CAAAA,CACX,UAAA,CAAYkI,EACZ,IAAA,CAAMtI,EAAAA,CAAO,EACb,KAAA,CAAO,eAAA,CAAgB1hB,CAAK,CAAA,CAC5B,cAAA,CAAgB,CAAC,GAAG4qB,CAAc,CAAA,CAClC,YAAa,MAAA,CAAO,WAAA,CAAYC,CAAW,CAAA,CAC3C,eAAA,CAAiB,OAAO,WAAA,CAAYC,CAAe,EACnD,WAAA,CAAa,MAAA,CAAO,YAClB,MAAA,CAAO,OAAA,CAAQ5G,CAAW,CAAA,CAAE,GAAA,CAAI,CAAC,CAACjrB,EAAAA,CAAI2F,EAAC,CAAA,GAAM,CAC3C3F,EAAAA,CACA,CAAE,MAAA,CAAQ2F,EAAAA,CAAE,OAAQ,WAAA,CAAaA,EAAAA,CAAE,WAAY,CACjD,CAAC,CACH,CAAA,CACA,cAAA,CAAgB,CAAC,GAAG6rB,CAAc,CAAA,CAClC,YAAa,CAAC,GAAGvB,CAAW,CAAA,CAC5B,WAAA,CAAa,CAAC,GAAGyB,CAAW,CAAA,CAC5B,uBAAAM,EAAAA,CACA,UAAA,CAAAD,EACA,gBAAA,CAAAE,EAAAA,CACA,aAAc,MAAA,CAAO,WAAA,CACnB,OAAO,OAAA,CAAQH,CAAY,EAAE,GAAA,CAAI,CAAC,CAAC9xB,EAAAA,CAAI8S,EAAC,IAAM,CAC5C9S,EAAAA,CACA,CAAE,IAAA,CAAM8S,EAAAA,CAAE,IAAA,CAAM,WAAYA,EAAAA,CAAE,UAAA,CAAY,OAAQA,EAAAA,CAAE,MAAO,CAC7D,CAAC,CACH,CACF,CAAA,CACMwhB,CAAAA,CAAU,MAAM/L,GACpB4C,CAAAA,CACAmH,EAAAA,CACAF,EACF,CAAA,CACIkC,CAAAA,GACF9B,GAAmB8B,CAAAA,EAEvB,CACF,CAGA,IAAM/qB,EAAAA,CAAa,IAAA,CAAK,KAAI,CAAI2e,CAAAA,CAC1BwK,GAAc,MAAA,CAAO,MAAA,CAAOzH,CAAW,CAAA,CAAE,MAAA,CAC7C,CAAC7Y,EAAAA,CAAKzM,EAAAA,GAAMyM,GAAMzM,EAAAA,CAAE,WAAA,CACpB,CACF,CAAA,CAEA,OAAO,CACL,QAAA,CAAU,CAAA,CAAA,CACV,MAAA,CAAQkqB,EAAAA,CAAStV,CAAAA,CAASxT,CAAK,GAAMA,CAAAA,CACrC,KAAA,CAAO,CAAE,GAAGA,CAAM,EAClB,cAAA,CAAAyqB,CAAAA,CACA,WAAA,CAAAvG,CAAAA,CACA,KAAA,CAAO8F,CAAAA,CACP,YAAA2B,EAAAA,CACA,UAAA,CAAAnpB,GACA,WAAA,CAAA0mB,CAAAA,CACA,YAAAyB,CAAAA,CACA,KAAA,CAAO,CAAA,WAAA,EAAcX,CAAQ,CAAA,kCAAA,CAC/B,CACF,OAASzwB,EAAAA,CAAO,CACd,MAAA6nB,EAAAA,CAAe7nB,EAAAA,YAAiB,MAAQA,EAAAA,CAAQ,IAAI,MAAM,MAAA,CAAOA,EAAK,CAAC,CAAA,CACjEA,EACR,QAAE,CAOA,GANI8wB,GAAiB,IAAA,EACnB,YAAA,CAAaA,CAAa,CAAA,CAExB/C,CAAAA,EAAmBnY,CAAAA,CAAQ,QAC7BA,CAAAA,CAAQ,MAAA,CAAO,oBAAoB,OAAA,CAASmY,CAAe,EAEzDxuB,CAAAA,CAAU,CACZ,IAAM6yB,EAAAA,CAAc,MAAA,CAAO,MAAA,CAAOzH,CAAW,CAAA,CAAE,MAAA,CAC7C,CAAC7Y,EAAAA,CAAKzM,EAAAA,GAAMyM,GAAMzM,EAAAA,CAAE,WAAA,CACpB,CACF,CAAA,CACA9F,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,kBAAA,CACN,UAAW,IAAA,CAAK,GAAA,GAChB,UAAA,CAAY,IAAA,CACZ,UAAWgpB,CAAAA,CACX,WAAA,CAAa,OACb,UAAA,CAAY,IAAA,CAAK,KAAI,CAAIX,CAAAA,CACzB,SAAUgK,EAAAA,CACV,WAAA,CAAAjC,CAAAA,CACA,WAAA,CAAAyB,CAAAA,CACA,WAAA,CAAAgB,GACA,GAAIvK,EAAAA,CAAe,CAAE,KAAA,CAAOA,EAAAA,CAAa,OAAQ,CAAA,CAAI,EACvD,CAAC,EACH,CACArK,EAAS,mBAAA,CAAqB,CAC5B,UAAW+K,CAAAA,CACX,WAAA,CAAa,OACb,UAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAAIX,CAAAA,CACzB,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,MAAOC,EACT,CAAC,EACH,CACF,CAGA,SAASvD,EAAAA,CAAqB/lB,CAAAA,CAA2B,CACvD,GAAI,CAACwd,EACH,OAAO,GAGT,IAAMsI,CAAAA,CAAwB,EAAC,CACzB4P,CAAAA,CAAO,IAAI,IAIjB,GAHAA,CAAAA,CAAK,IAAI11B,CAAO,CAAA,CAGZwd,EAAY,iBAAA,CAAA,CACd,IAAA,IAAWmY,CAAAA,IAAS,MAAA,CAAO,MAAA,CAAOnY,CAAAA,CAAY,iBAAiB,CAAA,CAC7D,GAAImY,EAAM,QAAA,CAAS31B,CAAO,EACxB,IAAA,IAAWmB,CAAAA,IAAMw0B,CAAAA,CACX,CAACD,CAAAA,CAAK,GAAA,CAAIv0B,CAAE,CAAA,EAAK8c,CAAAA,CAAO9c,CAAE,CAAA,GAC5B2kB,CAAAA,CAAY,KAAK3kB,CAAE,CAAA,CACnBu0B,EAAK,GAAA,CAAIv0B,CAAE,IAQrB,GAAIqc,CAAAA,CAAY,kBAAoB,KAAA,CAAO,CACzC,IAAMoY,CAAAA,CAAY3X,CAAAA,CAAOje,CAAO,CAAA,CAChC,GAAI41B,CAAAA,EAAW,cAAgBA,CAAAA,CAAU,YAAA,CAAa,OAAS,CAAA,CAC7D,IAAA,GAAW,CAACz0B,CAAAA,CAAIwZ,CAAG,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQsD,CAAM,EAAG,CAC9C,GAAIyX,EAAK,GAAA,CAAIv0B,CAAE,EACb,SAEF,IAAMyZ,CAAAA,CAAOD,CAAAA,CAAI,YAAA,EAAgB,GAC7Bib,CAAAA,CAAU,YAAA,CAAa,MAAOnvB,CAAAA,EAAMmU,CAAAA,CAAK,SAASnU,CAAC,CAAC,IACtDqf,CAAAA,CAAY,IAAA,CAAK3kB,CAAE,CAAA,CACnBu0B,CAAAA,CAAK,IAAIv0B,CAAE,CAAA,EAEf,CAEJ,CAGA,GAAI4d,EAAAA,CAAuB,CACzB,IAAM1Q,CAAAA,CAAYmP,EAAY,eAAA,EAAmB,EAAA,CAEjD,OAAOsI,CAAAA,CAAY,MAAA,CAAQ3kB,GACX4d,EAAAA,CAAuB,cAAA,CAAe5d,CAAE,CAAA,CAEvCkN,CAChB,CACH,CAEA,OAAOyX,CACT,CAEA,SAASG,GAAqBH,CAAAA,CAAsC,CAClE,GAAIA,CAAAA,CAAY,MAAA,GAAW,CAAA,CACzB,OAAO,IAAA,CAGT,GAAI,CAACtI,CAAAA,EAAe,CAACuB,GACnB,OAAO+G,CAAAA,CAAY,CAAC,CAAA,EAAK,IAAA,CAG3B,GAAItI,CAAAA,CAAY,iBAAA,GAAsB,eAAiBwB,EAAAA,CAAoB,CAEzE,IAAMre,CAAAA,CAAM,CAAC,GAAGmlB,CAAW,CAAA,CAAE,IAAA,GAAO,IAAA,CAAK,GAAG,EACtC+P,CAAAA,CAAU7W,EAAAA,CAAmB,IAAIre,CAAG,CAAA,EAAK,CAAA,CACzCm1B,CAAAA,CAAWhQ,CAAAA,CAAY+P,CAAAA,CAAU/P,EAAY,MAAM,CAAA,CACzD,OAAA9G,EAAAA,CAAmB,GAAA,CAAIre,EAAKk1B,CAAAA,CAAU,CAAC,CAAA,CAEhCC,CACT,CAGA,IAAIvd,EAAOuN,CAAAA,CAAY,CAAC,EACpBkI,CAAAA,CAAYjP,EAAAA,CAAsB,eAAexG,CAAI,CAAA,CACzD,QAAShY,CAAAA,CAAI,CAAA,CAAGA,EAAIulB,CAAAA,CAAY,MAAA,CAAQvlB,IAAK,CAC3C,IAAMgO,EAAQwQ,EAAAA,CAAsB,cAAA,CAAe+G,CAAAA,CAAYvlB,CAAC,CAAE,CAAA,CAC9DgO,EAAQyf,CAAAA,GACVzV,CAAAA,CAAOuN,EAAYvlB,CAAC,CAAA,CACpBytB,EAAYzf,CAAAA,EAEhB,CAEA,OAAOgK,CACT,CAGA,SAASwd,GAAmB1e,CAAAA,CAAqC,CAC/D,OAAQA,CAAAA,CAAQ,IAAA,EACd,KAAK,UAAA,CACH,OAAOA,CAAAA,CAAQ,QAAA,CACjB,KAAK,aACH,OAAOA,CAAAA,CAAQ,SACjB,KAAK,YAAA,CACH,OAAO,CAACA,CAAAA,CAAQ,WAAY,GAAGA,CAAAA,CAAQ,OAAO,CAAA,CAChD,KAAK,MACH,OAAO,MAAA,CAAO,OAAOA,CAAAA,CAAQ,KAAK,CAAA,CAAE,GAAA,CAAK,CAAA,EAAM,CAAA,CAAE,OAAO,CAAA,CAC1D,KAAK,UACH,OAAO,CAACA,EAAQ,OAAA,CAASA,CAAAA,CAAQ,SAAS,CAAA,CAC5C,KAAK,MAAA,CACH,OAAOA,CAAAA,CAAQ,QAAA,CACjB,KAAK,QAAA,CACH,OAAO,CAAC,GAAGA,CAAAA,CAAQ,QAAA,CAAUA,CAAAA,CAAQ,SAAS,CAAA,CAChD,KAAK,MAAA,CACH,OAAO,OAAO,MAAA,CAAOA,CAAAA,CAAQ,KAAK,CAAA,CAAE,GAAA,CAAK,GAAM,CAAA,CAAE,OAAO,EAC1D,QACE,OAAO,EACX,CACF,CAGA,IAAMsB,EAAAA,CAAuC,CAC3C,MAAA,CAAQrR,CAAAA,CAER,IAAI,OAAQ,CAEV,OAAOA,EAAO,KAChB,CAAA,CAEA,IAAI,QAAA,EAAW,CACb,OAAOtG,CACT,CAAA,CAEA,IAAI,eAAgB,CAClB,OAAO+d,EACT,CAAA,CAEA,IAAI,SAAU,CACZ,OAAO,MAAA,CAAO,MAAA,CAAO,CAAE,GAAGuC,EAAc,CAAC,CAC3C,EAEA,eAAA,CACEyB,CAAAA,CACY,CACZ,OAAAxB,EAAAA,CAAuB,IAAIwB,CAAQ,CAAA,CAE5B,IAAM,CACXxB,EAAAA,CAAuB,OAAOwB,CAAQ,EACxC,CACF,CAAA,CAEA,IAAI,UAAA,EAAa,CACf,OAAOR,EACT,EAEA,QAAA,CAAU9C,EAAAA,CACV,eAAgB2I,EAAAA,CAEhB,MAAM,WAAcrT,CAAAA,CAAmB1R,CAAAA,CAA2B,CAChEsd,EAAAA,EAAmB,CAEnB,IAAMtJ,EAAUvI,CAAAA,CAASiG,CAAS,EAClC,GAAI,CAACsC,EAAS,CACZ,IAAMsO,CAAAA,CAAY,MAAA,CAAO,IAAA,CAAK7W,CAAQ,EAAE,IAAA,CAAK,IAAI,GAAK,QAAA,CAEtD,MAAM,IAAI,KAAA,CACR,CAAA,wCAAA,EAA2CiG,CAAS,CAAA,uBAAA,EAA0B4Q,CAAS,EACzF,CACF,CAEA,IAAM0D,CAAAA,CAAmB,IAAA,CAAK,KAAI,CAClC,GAAIroB,CAAAA,CAAU,CACZ,IAAMg1B,CAAAA,CAAaD,GAAmB1e,CAAO,CAAA,CAE7CrW,EAAS,MAAA,CAAO,CACd,KAAM,eAAA,CACN,SAAA,CAAWqoB,CAAAA,CACX,UAAA,CAAY,IAAA,CACZ,SAAA,CAAAtU,EACA,WAAA,CAAasC,CAAAA,CAAQ,KACrB,QAAA,CAAU2e,CAAAA,CACV,QAASA,CAAAA,CAAW,MAAA,CAAQtiB,CAAAA,EAAMwK,EAAAA,CAAMxK,CAAC,CAAA,EAAK,IAAI,CACpD,CAAC,EACH,CAEA,IAAI4V,EACJ,GAAI,CACF,OAAQjS,CAAAA,CAAQ,IAAA,EACd,KAAK,UAAA,CACH,OAAO,MAAM+R,EAAAA,CACX/R,EACAhU,CAAAA,CACA0R,CACF,CAAA,CACF,KAAK,YAAA,CACH,OAAO,MAAM8U,EAAAA,CACXxS,CAAAA,CACAhU,EACA0R,CACF,CAAA,CACF,KAAK,YAAA,CACH,OAAO,MAAM0V,EAAAA,CACXpT,CAAAA,CACAhU,CAAAA,CACA0R,CACF,CAAA,CACF,KAAK,MACH,OAAO,MAAM+V,GACXzT,CAAAA,CACAhU,CAAAA,CACA0R,CACF,CAAA,CACF,KAAK,SAAA,CACH,OAAO,MAAM0X,EAAAA,CACXpV,EACAhU,CAAAA,CACA0R,CACF,EACF,KAAK,MAAA,CAOH,QANmB,MAAMmZ,EAAAA,CACvB7W,EACAhU,CAAAA,CACA0R,CACF,GAEkB,MAAA,CAEpB,KAAK,SAQH,OAAA,CANqB,MAAMsa,EAAAA,CADLhY,CAAAA,CAGpBhU,CAAAA,CACA0R,CACF,GAEoB,MAAA,CAEtB,KAAK,OAQH,OAAA,CANmB,MAAM+c,GADLza,CAAAA,CAGlBhU,CAAAA,CACA0R,CACF,CAAA,EAEkB,MAAA,CAEpB,QACE,MAAM,IAAI,KAAA,CACR,gDAAiDsC,CAAAA,CAA6B,IAAI,EACpF,CACJ,CACF,CAAA,MAAS5V,CAAAA,CAAO,CACd,MAAA6nB,EACE7nB,CAAAA,YAAiB,KAAA,CAAQA,EAAQ,IAAI,KAAA,CAAM,OAAOA,CAAK,CAAC,EACpDA,CACR,CAAA,OAAE,CACIT,CAAAA,EACFA,CAAAA,CAAS,OAAO,CACd,IAAA,CAAM,mBACN,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,UAAA,CAAY,IAAA,CACZ,UAAA+T,CAAAA,CACA,WAAA,CAAasC,EAAQ,IAAA,CACrB,UAAA,CAAY,KAAK,GAAA,EAAI,CAAIgS,CAAAA,CACzB,GAAIC,CAAAA,CAAe,CAAE,MAAOA,CAAAA,CAAa,OAAQ,EAAI,EACvD,CAAC,EAEL,CACF,CAAA,CAEA,MAAM,WAAA,CACJ2M,CAAAA,CACAC,EACApgB,CAAAA,CACAzW,CAAAA,CACY,CACZshB,EAAAA,EAAmB,CACnB,IAAMwV,CAAAA,CAAa,KAAA,CAAM,QAAQD,CAAM,CAAA,CACnCA,EACAD,CAAAA,CAAS,GAAA,CAAI,IAAMC,CAAM,CAAA,CAE7B,GAAIC,CAAAA,CAAW,MAAA,GAAWF,CAAAA,CAAS,MAAA,CACjC,MAAM,IAAI,MACR,CAAA,oCAAA,EAAuCE,CAAAA,CAAW,MAAM,CAAA,0BAAA,EAA6BF,CAAAA,CAAS,MAAM,CAAA,CAAA,CACtG,CAAA,CAGF,IAAM1P,CAAAA,CAAa,IAAI,eAAA,CACnBjD,EAEAjkB,CAAAA,EAAS,OAAA,GACXikB,EAAY,UAAA,CAAW,IAAMiD,EAAW,KAAA,EAAM,CAAGlnB,CAAAA,CAAQ,OAAO,CAAA,CAAA,CAGlE,GAAI,CACF,IAAMkqB,CAAAA,CAAW0M,EAAS,GAAA,CAAI,CAACj2B,EAASO,CAAAA,GACtCkf,EAAAA,CAAezf,EAASm2B,CAAAA,CAAW51B,CAAC,EAAI,CACtC,MAAA,CAAQgmB,EAAW,MACrB,CAAC,EAAE,KAAA,CAAO9kB,CAAAA,EAAU,CAClB,GAAIpC,CAAAA,EAAS,UAAA,GAAe,OAC1B,OAAO,IAAA,CAGT,MAAMoC,CACR,CAAC,CACH,CAAA,CAEM0W,CAAAA,CAAU,MAAM,OAAA,CAAQ,GAAA,CAAIoR,CAAQ,EACpCC,CAAAA,CAAiBrR,CAAAA,CAAQ,OAC5BrR,CAAAA,EAA+BA,CAAAA,GAAM,IACxC,CAAA,CAEA,GACEzH,CAAAA,EAAS,UAAA,GAAe,KAAA,CAAA,EACxBmqB,CAAAA,CAAe,OAASnqB,CAAAA,CAAQ,UAAA,CAChC,CACA,IAAMoqB,CAAAA,CAAYtR,EAAQ,MAAA,CAASqR,CAAAA,CAAe,OAElD,MAAM,IAAI,MACR,CAAA,yCAAA,EAA4CA,CAAAA,CAAe,MAAM,CAAA,CAAA,EAAIyM,CAAAA,CAAS,MAAM,CAAA,qCAAA,EAC5D52B,CAAAA,CAAQ,UAAU,CAAA,UAAA,EAAaoqB,CAAS,CAAA,CAAA,CAClE,CACF,CAEA,OAAO3T,EAAM0T,CAAc,CAC7B,QAAE,CACIlG,CAAAA,EACF,YAAA,CAAaA,CAAS,EAE1B,CACF,EAEA,MAAM,aAAA,CACJ2S,EACAnM,CAAAA,CACApgB,CAAAA,CAGyB,CACzBiX,EAAAA,EAAmB,CACnB,IAAMxI,CAAAA,CAAgC,EAAC,CACnCS,EAAekR,CAAAA,CAEnB,IAAA,IAASvpB,EAAI,CAAA,CAAGA,CAAAA,CAAI01B,EAAS,MAAA,CAAQ11B,CAAAA,EAAAA,CAAK,CACxC,IAAMP,CAAAA,CAAUi2B,EAAS11B,CAAC,CAAA,CACpBoF,EAAS,MAAM8Z,EAAAA,CAAezf,EAAS4Y,CAAY,CAAA,CACzDT,CAAAA,CAAQ,IAAA,CAAKxS,CAAM,CAAA,CAEfpF,EAAI01B,CAAAA,CAAS,MAAA,CAAS,IACpBvsB,CAAAA,EAAM,SAAA,CACRkP,EAAelP,CAAAA,CAAK,SAAA,CAAU/D,CAAAA,CAAO,MAAA,CAAQ3F,CAAAA,CAASO,CAAC,EAEvDqY,CAAAA,CACE,OAAOjT,EAAO,MAAA,EAAW,QAAA,CACrBA,EAAO,MAAA,CACP0S,uBAAAA,CAAc1S,CAAAA,CAAO,MAAM,CAAA,EAGvC,CAEA,OAAOwS,CACT,CAAA,CAEA,MAAM,OAAA,CACJie,CAAAA,CACAC,EACAhzB,CAAAA,CACAR,CAAAA,CAC6B,CAG7B,GAFA8d,EAAAA,GAEI,CAAC1C,CAAAA,CAAOmY,CAAS,CAAA,CAAG,CACtB,IAAMzQ,CAAAA,CAAY,MAAA,CAAO,IAAA,CAAK1H,CAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAK,QAAA,CAEpD,MAAM,IAAI,KAAA,CACR,gDAAgDmY,CAAS,CAAA,yBAAA,EAA4BzQ,CAAS,CAAA,CAChG,CACF,CACA,GAAI,CAAC1H,CAAAA,CAAOoY,CAAO,CAAA,CAAG,CACpB,IAAM1Q,CAAAA,CAAY,MAAA,CAAO,IAAA,CAAK1H,CAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,EAAK,QAAA,CAEpD,MAAM,IAAI,KAAA,CACR,gDAAgDoY,CAAO,CAAA,yBAAA,EAA4B1Q,CAAS,CAAA,CAC9F,CACF,CAGA,CACE,IAAMd,EAAW,MAAMf,EAAAA,CACrB,cACAsS,CAAAA,CACAnY,CAAAA,CAAOmY,CAAS,CAAA,CAAG,KAAA,CAAM,IAAA,CACzB/yB,EACA,MAAA,CACA,CACE,QAAS,CAAE,SAAA,CAAA+yB,EAAW,OAAA,CAAAC,CAAQ,CAChC,CACF,CAAA,CACA,GAAIxR,EAAS,IAAA,CACX,OAAO,CACL,MAAA,CAAQ,MAAA,CACR,SAAU,EAAC,CACX,SAAA,CAAW,EAAC,CACZ,WAAA,CAAa,CACf,CAAA,CAEFxhB,CAAAA,CAAQwhB,EAAS,MACnB,CAEA,IAAMV,CAAAA,CAA0B,CAC9B,GAAI,CAAA,QAAA,EAAW,EAAElD,EAAc,CAAA,CAAA,CAC/B,SAAA,CAAAmV,EACA,OAAA,CAAAC,CAAAA,CACA,MAAAhzB,CAAAA,CACA,OAAA,CAAAR,CAAAA,CACA,WAAA,CAAa,IAAA,CAAK,GAAA,EACpB,CAAA,CAEAke,EAAAA,CAAgB,KAAKoD,CAAO,CAAA,CAC5B,GAAI,CACF5H,CAAAA,GAAY4H,CAAO,EACrB,CAAA,MAASlkB,EAAG,CACN8d,EAAAA,EACF,QAAQ,KAAA,CAAM,yCAAA,CAA2C9d,CAAC,EAE9D,CACAgf,CAAAA,CAAS,WAAA,CAAakF,CAAO,CAAA,CAEzBnjB,GACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,eAAA,CACN,UAAW,IAAA,CAAK,GAAA,GAChB,UAAA,CAAY,IAAA,CACZ,UAAAo1B,CAAAA,CACA,OAAA,CAAAC,CACF,CAAC,CAAA,CAIH,IAAMC,CAAAA,CAAerY,CAAAA,CAAOoY,CAAO,CAAA,CAAG,MAAA,EAAUzZ,CAAAA,CAChD,GAAI0Z,CAAAA,EAAgBzzB,CAAAA,CAClB,GAAI,CACF,IAAM0zB,EAAiB,MAAA,CAAO,OAAA,CAAQ1zB,CAAO,CAAA,CAC1C,GAAA,CAAI,CAAC,CAAC8U,CAAAA,CAAGC,CAAC,IAAM,CAAA,EAAGD,CAAC,KAAKU,uBAAAA,CAAcT,CAAC,CAAC,CAAA,CAAE,CAAA,CAC3C,IAAA,CAAK,IAAI,CAAA,CACZ0e,CAAAA,CAAa,YAAY,CACvB,CACE,KAAM,QAAA,CACN,OAAA,CAAS,iBAAiBF,CAAS,CAAA,WAAA,EAAcG,CAAc,CAAA,CACjE,CACF,CAAC,EACH,CAAA,MAASrO,EAAa,CAChBnK,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,oDAAA,CACAmK,CACF,EAEJ,CAGF,GAAI,CACF,IAAMviB,CAAAA,CAAS,MAAM8Z,EAAAA,CAAe4W,CAAAA,CAAShzB,CAAK,CAAA,CAE5CmzB,CAAAA,CAA+B,CACnC,QAAArS,CAAAA,CACA,MAAA,CAAAxe,EACA,WAAA,CAAa,IAAA,CAAK,KACpB,CAAA,CAEAub,EAAAA,CAAiBsV,CAAa,CAAA,CAC9B,GAAI,CACFha,CAAAA,GAAoBga,CAAa,EACnC,CAAA,MAASv2B,CAAAA,CAAG,CACN8d,EAAAA,EACF,OAAA,CAAQ,MAAM,iDAAA,CAAmD9d,CAAC,EAEtE,CACAgf,CAAAA,CAAS,oBAAqBuX,CAAa,CAAA,CAEvCx1B,GACFA,CAAAA,CAAS,MAAA,CAAO,CACd,IAAA,CAAM,kBAAA,CACN,SAAA,CAAW,KAAK,GAAA,EAAI,CACpB,WAAY,IAAA,CACZ,SAAA,CAAAo1B,EACA,OAAA,CAAAC,CAAAA,CACA,UAAA,CAAYG,CAAAA,CAAc,WAAA,CAAcrS,CAAAA,CAAQ,WAClD,CAAC,CAAA,CAGH,IAAMtiB,CAAAA,CAAQkf,EAAAA,CAAgB,QAAQoD,CAAO,CAAA,CAC7C,OAAItiB,CAAAA,EAAS,CAAA,EAAGkf,EAAAA,CAAgB,OAAOlf,CAAAA,CAAO,CAAC,EAExC8D,CACT,CAAA,MAASlE,EAAO,CACd,IAAMI,EAAQkf,EAAAA,CAAgB,OAAA,CAAQoD,CAAO,CAAA,CAC7C,MAAItiB,GAAS,CAAA,EAAGkf,EAAAA,CAAgB,OAAOlf,CAAAA,CAAO,CAAC,CAAA,CACzCJ,CACR,CACF,CAAA,CAEA,QAAQ8iB,CAAAA,CAAyB,CAC/B5D,IAAmB,CAGnB,IAAM3gB,EAAUmhB,EAAAA,CAAqB,GAAA,CAAIoD,CAAS,CAAA,CAClD,GAAIvkB,CAAAA,CAAS,CACXmhB,EAAAA,CAAqB,MAAA,CAAOoD,CAAS,CAAA,CACrC,IAAMf,EAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CACxCsH,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMmgB,CAAAA,CAAkBnf,GAAiBkb,CAAU,CAAA,CAC7CiT,EAAuB,GAAA,CACvBC,CAAAA,CAAW,CAAC,GAAGjP,CAAAA,CAAgB,SAAUlD,CAAS,CAAA,CACxDhc,GAAiBib,CAAAA,CAAY,CAC3B,GAAGiE,CAAAA,CACH,OAAA,CAASA,CAAAA,CAAgB,OAAA,CAAQ,MAAA,CAC9B3gB,CAAAA,EAAuBA,EAAE,EAAA,GAAOyd,CACnC,EACA,QAAA,CACEmS,CAAAA,CAAS,OAASD,CAAAA,CACdC,CAAAA,CAAS,KAAA,CAAM,CAACD,CAAoB,CAAA,CACpCC,CACR,CAAC,EACH,CAAC,CAAA,CAED,MACF,CAEI3Y,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,CAAA,8DAAA,EAAiEwG,CAAS,CAAA,CAAA,CAC5E,EAEJ,CAAA,CAEA,MAAA,CAAOA,EAAmBoS,CAAAA,CAAuB,CAC/ChW,IAAmB,CAGnB,IAAM3gB,EAAUmhB,EAAAA,CAAqB,GAAA,CAAIoD,CAAS,CAAA,CAClD,GAAIvkB,EAAS,CACXmhB,EAAAA,CAAqB,OAAOoD,CAAS,CAAA,CACrC,IAAMf,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,EACxCsH,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAMmgB,EAAkBnf,EAAAA,CAAiBkb,CAAU,CAAA,CAC/CmT,CAAAA,EAAU5Y,EAAAA,EACZ,OAAA,CAAQ,MACN,CAAA,+BAAA,EAAkCwG,CAAS,cAAcoS,CAAM,CAAA,CACjE,EAEF,IAAMlS,CAAAA,CAAmC,CACvC,EAAA,CAAIF,CAAAA,CACJ,MAAA,CAAAoS,EACA,UAAA,CAAY,IAAA,CAAK,KACnB,CAAA,CACMC,EAAwB,GAAA,CACxBC,CAAAA,CAAW,CAAC,GAAGpP,CAAAA,CAAgB,SAAUhD,CAAe,CAAA,CAC9Dlc,GAAiBib,CAAAA,CAAY,CAC3B,GAAGiE,CAAAA,CACH,OAAA,CAASA,CAAAA,CAAgB,OAAA,CAAQ,MAAA,CAC9B3gB,CAAAA,EAAuBA,EAAE,EAAA,GAAOyd,CACnC,EACA,QAAA,CACEsS,CAAAA,CAAS,OAASD,CAAAA,CACdC,CAAAA,CAAS,KAAA,CAAM,CAACD,CAAqB,CAAA,CACrCC,CACR,CAAC,EACH,CAAC,CAAA,CAED,MACF,CAEI9Y,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,CAAA,6DAAA,EAAgEwG,CAAS,CAAA,CAAA,CAC3E,EAEJ,CAAA,CAEA,KAAA,EAAc,CACZ5D,EAAAA,EAAmB,CACnBnB,GAAe,QAAA,CACXzB,EAAAA,EACF,QAAQ,KAAA,CAAM,4CAA4C,EAE9D,CAAA,CAEA,MAAA,EAAe,CACb4C,EAAAA,EAAmB,CACfnB,KAAiB,QAAA,GACnBA,EAAAA,CAAe,MAAA,CACXzB,EAAAA,EACF,OAAA,CAAQ,KAAA,CAAM,6CAA6C,CAAA,EAGjE,CAAA,CAEA,cAAc/d,CAAAA,CAAiB,CAC7B,IAAMkF,CAAAA,CAAQ2b,EAAAA,CAAY7gB,CAAO,CAAA,CAEjC,OAAOkF,EAAQ,CAAE,GAAGA,CAAM,CAAA,CAAI,MAChC,EAEA,iBAAA,EAAoB,CAClB,OAAO,MAAA,CAAO,WAAA,CACZ,MAAA,CAAO,QAAQ2b,EAAW,CAAA,CAAE,IAAI,CAAC,CAAClJ,EAAGC,CAAC,CAAA,GAAM,CAACD,CAAAA,CAAG,CAAE,GAAGC,CAAE,CAAC,CAAC,CAC3D,CACF,EAEA,kBAAA,EAAqB,CACnB,OAAO,CAAC,GAAGmJ,EAAe,CAC5B,CAAA,CAGA,IAAI,aAAsB,CACxB,OAAOR,EACT,CAAA,CAGA,WAAA,CAAYiS,CAAAA,CAAmC,CAC7C,IAAMsE,CAAAA,CAAU,IACdrW,EAAAA,GAAgB,CAAA,EAChB,OAAO,MAAA,CAAOI,EAAW,EAAE,KAAA,CACxB,CAAA,EACC,CAAA,CAAE,MAAA,GAAW,MAAA,EACb,CAAA,CAAE,SAAW,WAAA,EACb,CAAA,CAAE,SAAW,OACjB,CAAA,CACF,OAAIiW,CAAAA,EAAQ,CACH,QAAQ,OAAA,EAAQ,CAGlB,IAAI,OAAA,CAAc,CAACt0B,EAASC,CAAAA,GAAW,CAC5C,IAAI6gB,CAAAA,CAAkD,IAAA,CAEhD/V,CAAAA,CAAU,IAAM,CACpB6T,EAAAA,CAAY,OAAO2V,CAAK,CAAA,CACpBzT,GACF,YAAA,CAAaA,CAAS,EAE1B,CAAA,CAEMyT,CAAAA,CAAQ,IAAM,CACdD,CAAAA,EAAQ,GACVvpB,GAAQ,CACR/K,CAAAA,IAEJ,CAAA,CAEA4e,EAAAA,CAAY,IAAI2V,CAAK,CAAA,CAEjBvE,CAAAA,GAAc,MAAA,GAChBlP,CAAAA,CAAY,UAAA,CAAW,IAAM,CAC3B/V,CAAAA,GACA9K,CAAAA,CACE,IAAI,MACF,CAAA,mDAAA,EAAsD+vB,CAAS,IACjE,CACF,EACF,EAAGA,CAAS,CAAA,EAEhB,CAAC,CACH,CAAA,CAGA,IACExyB,CAAAA,CACAqD,CAAAA,CACAhE,CAAAA,CACuB,CACvB,OAAOogB,EAAAA,CAAkBzf,EAASqD,CAAAA,CAAOhE,CAAO,CAClD,CAAA,CAGA,SAAA,CACEW,EACAqD,CAAAA,CACAhE,CAAAA,CAC6B,CAC7B,OAAO+oB,EAAAA,CAAsBpoB,CAAAA,CAASqD,EAAOhE,CAAO,CACtD,EAEA,aAAA,CAAcW,CAAAA,CAAiB6f,EAAuC,CAEpE,GADAc,EAAAA,EAAmB,CACfrC,EAAAA,CAAa,GAAA,CAAIte,CAAO,CAAA,CAC1B,MAAM,IAAI,KAAA,CACR,CAAA,iCAAA,EAAoCA,CAAO,CAAA,gCAAA,CAC7C,CAAA,CAEF,GAAIie,CAAAA,CAAOje,CAAO,EAChB,MAAM,IAAI,MACR,CAAA,8BAAA,EAAiCA,CAAO,4CAC1C,CAAA,CAEF,GAAIke,EAAAA,CAAMle,CAAO,CAAA,CACf,MAAM,IAAI,KAAA,CACR,CAAA,2BAAA,EAA8BA,CAAO,CAAA,iCAAA,CACvC,CAAA,CAKF,IAAM8f,CAAAA,CAA2CD,CAAAA,CAAa,WAAA,CAC1D5W,EAAAA,CAA+B4W,CAAAA,CAAa,WAAW,EACvD,EAAC,CAGCE,EAAyC,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACjE,GAAIF,CAAAA,CAAa,SAAA,CACf,IAAA,GAAW,CAAC1e,EAAIE,CAAQ,CAAA,GAAK,OAAO,OAAA,CAAQwe,CAAAA,CAAa,SAAS,CAAA,CAChEE,CAAAA,CAAkB5e,CAAE,CAAA,CAAI,CACtB,YAAaE,CAAAA,CAAS,WAAA,CACtB,IAAKA,CAAAA,CAAS,GAAA,CAEd,QAAS,MAAOC,CAAAA,CAAkBuB,CAAAA,GAAiB,CACjD,IAAMqC,CAAAA,CAAQ8D,GAAqBnG,CAAAA,CAAQ,KAAK,EAM1Cmd,CAAAA,CAEF,CACF,MARoB,CACpB,GAAGnd,CAAAA,CAAQ,KAAA,CACX,GAAGqC,CACL,EAME,QAAA,CAAU,MACR9B,EACAC,CAAAA,CACAqG,CAAAA,GAEOvG,EAAUC,CAAAA,CAAOC,CAAAA,CAAOqG,CAAI,CAAA,CAErC,MAAA,CAAQ7G,CAAAA,CAAQ,MAClB,CAAA,CAEA,OAAOxB,EAAS,OAAA,CAAQC,CAAAA,CAAK0e,CAAe,CAC9C,CACF,EAKJ,IAAMgX,CAAAA,CAAcrX,kBAAa3f,CAAAA,CAAS,CACxC,OAAQ+H,EAAAA,CACR,IAAA,CAAOG,GAAU,CACfE,EAAAA,CAAcF,CAAAA,CAAO,CACnB,MAAA,CAAQ,MAAA,CACR,aAAc2X,CAAAA,CAAa,KAAA,CAAM,KACjC,KAAA,CAAO,IAAA,CACP,OAAQ,IAAA,CACR,KAAA,CAAO,IAAA,CACP,UAAA,CAAY,CAAA,CACZ,SAAA,CAAW,EACX,SAAA,CAAW,IAAA,CACX,YAAa,IACf,CAAC,EACDtX,EAAAA,CAAiBL,CAAAA,CAAO,CAAE,OAAA,CAAS,EAAC,CAAG,SAAU,EAAC,CAAG,SAAU,EAAG,CAAC,CAAA,CACnEO,EAAAA,CAAgBP,EAAO,EAAE,EACzBU,EAAAA,CAAaV,CAAAA,CAAO,EAAE,CAAA,CACtBa,GAAmBb,CAAAA,CAAO+C,EAAAA,EAA8B,EAC1D,CAAA,CACA,WAAA,CAAa6U,EACb,SAAA,CACE,MAAA,CAAO,KAAKC,CAAiB,CAAA,CAAE,OAAS,CAAA,CACnCA,CAAAA,CACD,MACR,CAAC,CAAA,CAGAzY,CAAAA,CAAe,eAAetH,CAAAA,CAASg3B,CAAW,EAGnD/Y,CAAAA,CAAOje,CAAO,EAAI6f,CAAAA,CAGlBe,EAAAA,CAAW,GAAA,CAAI5gB,CAAAA,CAAS,IAAI2S,EAAAA,CAAUkN,EAAa,aAAA,EAAiB,CAAC,CAAC,CAAA,CAGtEgB,EAAAA,CAAY7gB,CAAO,CAAA,CAAI,CACrB,OAAQ,MAAA,CACR,QAAA,CAAU,EACV,WAAA,CAAa,CACf,EAEI+d,EAAAA,EACF,OAAA,CAAQ,MACN,CAAA,yCAAA,EAA4C/d,CAAO,CAAA,GAAA,EAAM6f,CAAAA,CAAa,KAAA,CAAM,IAAI,GAClF,CAAA,CAGF+B,EAAAA,GACF,CAAA,CAEA,eAAA,CAAgB5hB,EAAuB,CAErC,GADA2gB,IAAmB,CACf,CAAC1C,EAAOje,CAAO,CAAA,CACjB,MAAM,IAAI,KAAA,CACR,iCAAiCA,CAAO,CAAA,mBAAA,CAC1C,CAAA,CAIF,GADc6gB,EAAAA,CAAY7gB,CAAO,GACtB,MAAA,GAAW,SAAA,CACpB,MAAM,IAAI,KAAA,CACR,mDAAmDA,CAAO,CAAA,qBAAA,CAC5D,EAIF,IAAA,GAAW,CAAC+U,EAAWsC,CAAO,CAAA,GAAK,OAAO,OAAA,CAAQvI,CAAQ,EAAG,CAC3D,IAAImoB,CAAAA,CACJ,OAAQ5f,CAAAA,CAAQ,IAAA,EACd,KAAK,YAAA,CACH4f,EAAmB,CAAC5f,CAAAA,CAAQ,WAAY,GAAGA,CAAAA,CAAQ,OAAO,CAAA,CAC1D,MACF,KAAK,MACH4f,CAAAA,CAAmB,MAAA,CAAO,OAAO5f,CAAAA,CAAQ,KAAK,EAAE,GAAA,CAC7Cqb,CAAAA,EAAMA,CAAAA,CAAE,OACX,CAAA,CACA,MACF,KAAK,SAAA,CACHuE,CAAAA,CAAmB,CAAC5f,CAAAA,CAAQ,OAAA,CAASA,EAAQ,SAAS,CAAA,CACtD,MACF,KAAK,UAAA,CACL,KAAK,YAAA,CACL,KAAK,OACH4f,CAAAA,CAAmB5f,CAAAA,CAAQ,SAC3B,MACF,KAAK,QAAA,CACH4f,CAAAA,CAAmB,CACjB,GAAI5f,EAA0B,QAAA,CAC7BA,CAAAA,CAA0B,SAC7B,CAAA,CACA,MACF,QACE4f,CAAAA,CAAmB,GACvB,CACIA,CAAAA,CAAiB,QAAA,CAASj3B,CAAO,CAAA,EACnC,OAAA,CAAQ,KACN,CAAA,yCAAA,EAA4C+U,CAAS,oCAAoC/U,CAAO,CAAA,CAAA,CAClG,EAEJ,CAGA,IAAM+kB,CAAAA,CAAMnE,GAAW,GAAA,CAAI5gB,CAAO,EAC9B+kB,CAAAA,GACFA,CAAAA,CAAI,OAAM,CACVnE,EAAAA,CAAW,OAAO5gB,CAAO,CAAA,CAAA,CAI3B,IAAMwjB,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CACpCwjB,CAAAA,EACFlc,EAAO,KAAA,CAAM,IAAM,CACjBc,EAAAA,CAAcob,CAAAA,CAAY,CACxB,OAAQ,MAAA,CACR,YAAA,CAAc,KACd,KAAA,CAAO,IAAA,CACP,OAAQ,IAAA,CACR,KAAA,CAAO,IAAA,CACP,UAAA,CAAY,CAAA,CACZ,SAAA,CAAW,EACX,SAAA,CAAW,IAAA,CACX,YAAa,IACf,CAAC,EACDjb,EAAAA,CAAiBib,CAAAA,CAAY,CAC3B,OAAA,CAAS,EAAC,CACV,SAAU,EAAC,CACX,SAAU,EACZ,CAAC,CAAA,CACD/a,EAAAA,CAAgB+a,EAAY,EAAE,EAC9B5a,EAAAA,CAAa4a,CAAAA,CAAY,EAAE,CAAA,CAC3Bza,GAAmBya,CAAAA,CAAYvY,EAAAA,EAA8B,EAC/D,CAAC,CAAA,CAMH,OAAOgT,CAAAA,CAAOje,CAAO,EACrB,OAAO6gB,EAAAA,CAAY7gB,CAAO,CAAA,CAEtB+d,EAAAA,EACF,OAAA,CAAQ,KAAA,CAAM,CAAA,2CAAA,EAA8C/d,CAAO,GAAG,CAAA,CAGxE4hB,EAAAA,GACF,CAAA,CAEA,WAAA,EAAwB,CACtB,OAAO,MAAA,CAAO,IAAA,CAAK3D,CAAM,CAC3B,CAAA,CAEA,aAAaG,CAAAA,CAAgByB,CAAAA,CAAsC,CAEjE,GADAc,EAAAA,GACIrC,EAAAA,CAAa,GAAA,CAAIF,CAAM,CAAA,CACzB,MAAM,IAAI,KAAA,CACR,CAAA,gCAAA,EAAmCA,CAAM,CAAA,gCAAA,CAC3C,CAAA,CAEF,GACE,CAACA,CAAAA,EACD,OAAOA,CAAAA,EAAW,QAAA,EAClBA,CAAAA,CAAO,MAAK,GAAMA,CAAAA,EAClBA,EAAO,MAAA,GAAW,CAAA,CAElB,MAAM,IAAI,KAAA,CACR,mEACF,CAAA,CAEF,GAAIH,CAAAA,CAAOG,CAAM,CAAA,CACf,MAAM,IAAI,KAAA,CACR,CAAA,2BAAA,EAA8BA,CAAM,CAAA,mCAAA,CACtC,CAAA,CAEF,GAAIF,EAAAA,CAAME,CAAM,CAAA,CACd,MAAM,IAAI,KAAA,CACR,gCAAgCA,CAAM,CAAA,uBAAA,CACxC,EAGF,GACEyB,CAAAA,CAAa,UAAY,MAAA,GACxB,CAAC,OAAO,QAAA,CAASA,CAAAA,CAAa,OAAO,CAAA,EAAKA,CAAAA,CAAa,SAAW,CAAA,CAAA,CAEnE,MAAM,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgCzB,CAAM,uCACxC,CAAA,CAEF,GACEyB,EAAa,aAAA,GAAkB,MAAA,GAC9B,CAAC,MAAA,CAAO,QAAA,CAASA,CAAAA,CAAa,aAAa,CAAA,EAC1CA,CAAAA,CAAa,cAAgB,CAAA,EAC7B,CAAC,OAAO,SAAA,CAAUA,CAAAA,CAAa,aAAa,CAAA,CAAA,CAE9C,MAAM,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgCzB,CAAM,+CACxC,CAAA,CAGF,GAAIyB,EAAa,KAAA,CAAO,CACtB,GAAM,CAAE,QAAA,CAAArB,EAAU,OAAA,CAAAC,CAAQ,EAAIoB,CAAAA,CAAa,KAAA,CAC3C,GAAI,CAAC,MAAA,CAAO,SAASrB,CAAQ,CAAA,EAAKA,CAAAA,CAAW,CAAA,CAC3C,MAAM,IAAI,MACR,CAAA,6BAAA,EAAgCJ,CAAM,+CACxC,CAAA,CAEF,GACEK,IAAY,MAAA,GACX,CAAC,MAAA,CAAO,QAAA,CAASA,CAAO,CAAA,EAAKA,EAAU,CAAA,CAAA,CAExC,MAAM,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgCL,CAAM,CAAA,4CAAA,CACxC,CAEJ,CACAF,EAAAA,CAAME,CAAM,CAAA,CAAIyB,EAChB1B,EAAAA,CAAWC,CAAM,EAAI,CAAE,MAAA,CAAQ,MAAO,CAAA,CACtCC,EAAAA,CAAe,IACbD,CAAAA,CACA,IAAIzL,GAAUkN,CAAAA,CAAa,aAAA,EAAiB,CAAC,CAC/C,CAAA,CAEI9B,IACF,OAAA,CAAQ,KAAA,CACN,CAAA,wCAAA,EAA2CK,CAAM,CAAA,GAAA,EAAMyB,CAAAA,CAAa,OAASzB,CAAM,CAAA,CAAA,CACrF,EAEJ,CAAA,CAEA,cAAA,CAAeA,EAAsB,CAEnC,GADAuC,EAAAA,EAAmB,CACf,CAACzC,EAAAA,CAAME,CAAM,CAAA,CACf,MAAM,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgCA,CAAM,CAAA,mBAAA,CACxC,CAAA,CAGF,GADcD,EAAAA,CAAWC,CAAM,CAAA,EACpB,SAAW,SAAA,CACpB,MAAM,IAAI,KAAA,CACR,CAAA,+CAAA,EAAkDA,CAAM,CAAA,qBAAA,CAC1D,CAAA,CAEF,IAAM2G,CAAAA,CAAM1G,EAAAA,CAAe,IAAID,CAAM,CAAA,CACjC2G,IACFA,CAAAA,CAAI,KAAA,GACJ1G,EAAAA,CAAe,MAAA,CAAOD,CAAM,CAAA,CAAA,CAE9B,OAAOF,EAAAA,CAAME,CAAM,CAAA,CACnB,OAAOD,GAAWC,CAAM,CAAA,CAEpBL,IACF,OAAA,CAAQ,KAAA,CAAM,CAAA,0CAAA,EAA6CK,CAAM,CAAA,CAAA,CAAG,EAExE,EAEA,UAAA,EAAuB,CACrB,OAAO,MAAA,CAAO,IAAA,CAAKF,EAAK,CAC1B,CAAA,CAEA,eAAA,EAGE,CACA,IAAMvY,CAAAA,CACJ,OAAO,MAAA,CAAO,IAAI,EACpB,IAAA,GAAW,CAACxE,EAAIwZ,CAAG,CAAA,GAAK,OAAO,OAAA,CAAQuD,EAAK,EAC1CvY,CAAAA,CAAOxE,CAAE,EAAI,CAAE,KAAA,CAAOwZ,EAAI,KAAA,CAAO,WAAA,CAAaA,CAAAA,CAAI,WAAY,CAAA,CAGhE,OAAOhV,CACT,CAAA,CAEA,YAAA,CAAayY,EAAgB,CAC3B,IAAMpZ,EAAImZ,EAAAA,CAAWC,CAAM,CAAA,CAE3B,OAAOpZ,CAAAA,CAAI,MAAA,CAAO,OAAO,eAAA,CAAgBA,CAAC,CAAC,CAAA,CAAI,MACjD,EAEA,gBAAA,EAAmB,CACjB,IAAMW,CAAAA,CASF,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CACtB,IAAA,GAAW,CAACxE,CAAAA,CAAI,CAAC,IAAK,MAAA,CAAO,OAAA,CAAQgd,EAAU,CAAA,CAC7CxY,CAAAA,CAAOxE,CAAE,CAAA,CAAI,MAAA,CAAO,OAAO,eAAA,CAAgB,CAAC,CAAC,CAAA,CAG/C,OAAOwE,CACT,CAAA,CAEA,UAAA,EAAuB,CACrB,OAAO,CAAC,GAAG,OAAO,IAAA,CAAKsY,CAAM,EAAG,GAAG,MAAA,CAAO,IAAA,CAAKC,EAAK,CAAC,CACvD,EAEA,KAAA,EAAQ,CACNyC,IAAmB,CACnB,IAAA,IAAW3gB,KAAW,MAAA,CAAO,IAAA,CAAKie,CAAM,CAAA,CAAG,CACzC,IAAMyN,EAAgBzN,CAAAA,CAAOje,CAAO,GAAG,aAAA,EAAiB,CAAA,CACxD6gB,GAAY7gB,CAAO,CAAA,CAAI,CACrB,MAAA,CAAQ,MAAA,CACR,SAAU,CAAA,CACV,WAAA,CAAa,CACf,CAAA,CACA,IAAMk3B,EAAWtW,EAAAA,CAAW,GAAA,CAAI5gB,CAAO,CAAA,CACnCk3B,CAAAA,EACFA,CAAAA,CAAS,OAAM,CAEjBtW,EAAAA,CAAW,IAAI5gB,CAAAA,CAAS,IAAI2S,GAAU+Y,CAAa,CAAC,CAAA,CAGpD,IAAMlI,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CACxCsH,CAAAA,CAAO,MAAM,IAAM,CACjBc,GAAcob,CAAAA,CAAY,CACxB,MAAA,CAAQ,MAAA,CACR,YAAA,CAAcvF,CAAAA,CAAOje,CAAO,CAAA,CAAG,KAAA,CAAM,KACrC,KAAA,CAAO,IAAA,CACP,OAAQ,IAAA,CACR,KAAA,CAAO,KACP,UAAA,CAAY,CAAA,CACZ,UAAW,CAAA,CACX,SAAA,CAAW,KACX,WAAA,CAAa,IACf,CAAC,CAAA,CACDuI,EAAAA,CAAiBib,CAAAA,CAAY,CAC3B,OAAA,CAAS,GACT,QAAA,CAAU,GACV,QAAA,CAAU,EACZ,CAAC,CAAA,CACD/a,EAAAA,CAAgB+a,CAAAA,CAAY,EAAE,EAC9B5a,EAAAA,CAAa4a,CAAAA,CAAY,EAAE,CAAA,CAC3Bza,GAAmBya,CAAAA,CAAYvY,EAAAA,EAA8B,EAC/D,CAAC,EACH,CAEA,IAAA,IAAWmT,CAAAA,IAAU,OAAO,IAAA,CAAKF,EAAK,EAAG,CACvCC,EAAAA,CAAWC,CAAM,CAAA,CAAI,CAAE,OAAQ,MAAO,CAAA,CACtC,IAAM+Y,CAAAA,CAAO9Y,EAAAA,CAAe,IAAID,CAAM,CAAA,CAClC+Y,CAAAA,EACFA,CAAAA,CAAK,KAAA,EAAM,CAEb9Y,GAAe,GAAA,CACbD,CAAAA,CACA,IAAIzL,EAAAA,CAAUuL,EAAAA,CAAME,CAAM,CAAA,CAAG,aAAA,EAAiB,CAAC,CACjD,EACF,CAEA8E,GAAwB,KAAA,EAAM,CAC9BC,GAAwB,KAAA,EAAM,CAC9BhC,GAAqB,KAAA,EAAM,CAC3BJ,EAAAA,CAAgB,MAAA,CAAS,CAAA,CACzBC,EAAAA,CAAe,OAAS,CAAA,CACxBC,EAAAA,CAAiB,EACjBV,EAAAA,CAAmB,CAAA,CACnBf,GAAe,MAAA,CACfiB,EAAAA,CAAc,EACdY,EAAAA,EAAkB,CAGlB,IAAMlC,CAAAA,CAAauC,EAAAA,CAAc,SAAS,CAAA,CAC1Cpa,CAAAA,CAAO,MAAM,IAAM,CACjBe,0BAAAA,CAAc8W,CAAAA,CAAY,gBAAA,CAAkB,CAAC,EAC7C9W,0BAAAA,CAAc8W,CAAAA,CAAY,WAAY,MAAM,CAAA,CAC5C9W,2BAAc8W,CAAAA,CAAY,YAAA,CAAc,EAAE,CAAA,CAC1C9W,0BAAAA,CAAc8W,EAAY,kBAAA,CAAoB,EAAE,CAAA,CAChD9W,0BAAAA,CAAc8W,EAAY,sBAAA,CAAwB,KAAK,CAAA,CACnDtB,EAAAA,EACFxV,0BAAAA,CAAc8W,CAAAA,CAAYrX,GAAgB,CACxC,GAAG+V,GAAiB,IACtB,CAAC,EAEL,CAAC,CAAA,CAGGkB,IACFA,EAAAA,CAAsB,KAAA,GAGxB2B,EAAAA,CAAwB,IAAA,CAGxB,QAAW/f,CAAAA,IAAO,MAAA,CAAO,KAAK2gB,EAAa,CAAA,CACzC,OAAOA,EAAAA,CAAc3gB,CAAG,CAAA,CAE1BihB,KACF,CAAA,CAIA,MAAM,UAAA,CAAWlY,CAAAA,CAAgD,CAC/DiX,EAAAA,EAAmB,CAGnB,OAAW,CAACxf,CAAAA,CAAI6D,CAAC,CAAA,GAAK,MAAA,CAAO,QAAQ6b,EAAW,CAAA,CAC9C,GAAI7b,CAAAA,CAAE,MAAA,GAAW,SAAA,CACf,MAAM,IAAI,KAAA,CACR,yDAAyD7D,CAAE,CAAA,YAAA,CAC7D,EAGJ,IAAA,GAAW,CAACA,EAAI6D,CAAC,CAAA,GAAK,OAAO,OAAA,CAAQmZ,EAAU,EAC7C,GAAInZ,CAAAA,CAAE,SAAW,SAAA,CACf,MAAM,IAAI,KAAA,CACR,CAAA,qDAAA,EAAwD7D,CAAE,CAAA,YAAA,CAC5D,CAAA,CAGJ,GAAI,CAAEmG,CAAAA,CAAe,OAAA,EAAS,OAC5B,MAAM,IAAI,MACR,mGACF,CAAA,CAGF,IAAMoE,CAAAA,CAAyB,CAC7B,OAAA,CAAS,EACT,EAAA,CAAIP,EAAAA,GACJ,SAAA,CAAW,IAAI,MAAK,CAAE,WAAA,EAAY,CAClC,KAAA,CAAOzB,CAAAA,EAAM,KAAA,CACb,aAAepC,CAAAA,CAAe,OAAA,CAAQ,QAAO,CAC7C,cAAA,CAAgBtG,GAAU,MAAA,EAAO,EAAK,KACtC,UAAA,CAAY,CACV,KAAM,OAAA,CACN,gBAAA,CAAAuf,GACA,YAAA,CAAAf,EAAAA,CACA,YAAa,MAAA,CAAO,WAAA,CAClB,MAAA,CAAO,OAAA,CAAQqB,EAAW,CAAA,CAAE,IAAI,CAAC,CAAClJ,EAAGC,CAAC,CAAA,GAAM,CAC1CD,CAAAA,CACA,eAAA,CAAgBC,CAAC,CACnB,CAAC,CACH,EACA,cAAA,CAAAqJ,EAAAA,CACA,gBAAiB,CAAC,GAAGF,EAAe,CAAA,CACpC,cAAA,CAAgB,CAAC,GAAGC,EAAc,CAAA,CAClC,mBAAoBhC,EAAAA,CAChB,MAAA,CAAO,YAAYA,EAAkB,CAAA,CACrC,KACJ,UAAA,CAAY,MAAA,CAAO,YACjB,MAAA,CAAO,OAAA,CAAQb,EAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAACxG,CAAAA,CAAGC,CAAC,CAAA,GAAM,CACzCD,CAAAA,CACA,CACE,UAAA,CACEC,CAAAA,CAAE,YAAc,IAAA,CAAO,MAAA,CAAOA,EAAE,UAAU,CAAA,CAAI,OAChD,SAAA,CAAWA,CAAAA,CAAE,SACf,CACF,CAAC,CACH,CACF,CAAA,CACA,YAAA,CAAcgF,EACRA,CAAAA,CAAqB,MAAA,MAAc,IAAA,CACrC,IAAA,CACJ,gBAAA,CAAkB,OACpB,CAAA,CAEA,OAAIlI,IACF,MAAMA,EAAAA,CAAgB,KAAKhJ,CAAU,CAAA,CAGhCA,CACT,CAAA,CAEA,OAAA,CAAQG,EAAgBnC,CAAAA,CAA4C,CAGlE,GAFAiX,EAAAA,EAAmB,CAEf,CAACrV,EAAAA,CAAmBO,CAAE,EACxB,MAAM,IAAI,KAAA,CAAM,gDAAgD,CAAA,CAElE,GAAIA,EAAG,gBAAA,GAAqB,OAAA,CAC1B,MAAM,IAAI,KAAA,CACR,gEAAgEA,CAAAA,CAAG,gBAAgB,CAAA,CAAA,CACrF,CAAA,CAIF,GAAI,CAAEvE,EAAe,OAAA,EAAS,MAAA,CAC5B,MAAM,IAAI,KAAA,CACR,4GACF,CAAA,CAEDA,CAAAA,CAAe,OAAA,CAAQ,MAAA,CAAOuE,CAAAA,CAAG,YAAY,EAG1CnC,CAAAA,EAAM,eAAA,GAAoB,OAASmC,CAAAA,CAAG,cAAA,EAAkB7K,GAC1DA,CAAAA,CAAS,MAAA,CAAO6K,EAAG,cAAc,CAAA,CAI/BA,EAAG,YAAA,EAAgB+Q,CAAAA,EAAiBA,EAAqB,MAAA,EAC1DA,CAAAA,CAAqB,OAAO/Q,CAAAA,CAAG,YAAY,CAAA,CAI9C,IAAMurB,CAAAA,CAAQvrB,CAAAA,CAAG,WACjB0U,EAAAA,CAAmB6W,CAAAA,CAAM,iBACzB5X,EAAAA,CAAe4X,CAAAA,CAAM,aACrBnW,EAAAA,CAAiBmW,CAAAA,CAAM,cAAA,CACvBrW,EAAAA,CAAgB,MAAA,CAAS,CAAA,CACzBA,GAAgB,IAAA,CAAK,GAAIqW,EAAM,eAAoC,CAAA,CACnEpW,GAAe,MAAA,CAAS,CAAA,CACxBA,EAAAA,CAAe,IAAA,CAAK,GAAIoW,CAAAA,CAAM,cAAkC,CAAA,CAGhE,IAAA,GAAW,CAACj2B,CAAAA,CAAI6D,CAAC,IAAK,MAAA,CAAO,OAAA,CAAQoyB,EAAM,WAAW,CAAA,CAChDvW,GAAY1f,CAAE,CAAA,GAChB0f,GAAY1f,CAAE,CAAA,CAAI,CAAE,GAAG6D,CAAE,CAAA,CAAA,CAK7B,GAAIoyB,CAAAA,CAAM,kBAAA,EAAsBpY,GAAoB,CAClDA,EAAAA,CAAmB,OAAM,CACzB,IAAA,GAAW,CAACrH,CAAAA,CAAGC,CAAC,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQwf,CAAAA,CAAM,kBAAkB,CAAA,CAC1DpY,EAAAA,CAAmB,IAAIrH,CAAAA,CAAGC,CAAC,EAE/B,CAGA,IAAA,GAAW,CAAC5X,CAAAA,CAAS2a,CAAG,CAAA,GAAK,OAAO,OAAA,CAAQsD,CAAM,EAAG,CACnD,IAAMiZ,EAAWtW,EAAAA,CAAW,GAAA,CAAI5gB,CAAO,CAAA,CACnCk3B,CAAAA,EACFA,EAAS,KAAA,EAAM,CAEjBtW,GAAW,GAAA,CAAI5gB,CAAAA,CAAS,IAAI2S,EAAAA,CAAUgI,CAAAA,CAAI,aAAA,EAAiB,CAAC,CAAC,EAC/D,CAGA,GAAIyc,CAAAA,CAAM,WAAY,CACpB,IAAA,GAAW,CAACj2B,CAAAA,CAAI6D,CAAC,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQoyB,CAAAA,CAAM,UAAU,CAAA,CAAG,CACtD,GAAI,CAAClZ,EAAAA,CAAM/c,CAAE,CAAA,CACX,MAAM,IAAI,KAAA,CACR,CAAA,mDAAA,EAAsDA,CAAE,6GAC1D,CAAA,CAEFgd,EAAAA,CAAWhd,CAAE,CAAA,CAAI,CACf,OAAQ,MAAA,CACR,UAAA,CAAY6D,EAAE,UAAA,CACd,SAAA,CAAWA,EAAE,SACf,EACF,CAEA,IAAA,GAAW,CAACoZ,EAAQzD,CAAG,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQuD,EAAK,CAAA,CAAG,CACjD,IAAMgZ,CAAAA,CAAW7Y,GAAe,GAAA,CAAID,CAAM,EACtC8Y,CAAAA,EACFA,CAAAA,CAAS,KAAA,EAAM,CAEjB7Y,EAAAA,CAAe,GAAA,CAAID,EAAQ,IAAIzL,EAAAA,CAAUgI,EAAI,aAAA,EAAiB,CAAC,CAAC,EAClE,CACF,CAGAiH,EAAAA,GACF,CAAA,CAIA,kBACEqU,CAAAA,CACAC,CAAAA,CACApgB,EACApM,CAAAA,CAC4B,CAC5BiX,IAAmB,CAEnB,IAAMwV,EAAa,KAAA,CAAM,OAAA,CAAQD,CAAM,CAAA,CACnCA,CAAAA,CACAD,EAAS,GAAA,CAAI,IAAMC,CAAM,CAAA,CAE7B,GAAIC,CAAAA,CAAW,MAAA,GAAWF,CAAAA,CAAS,MAAA,CACjC,MAAM,IAAI,KAAA,CACR,uCAAuCE,CAAAA,CAAW,MAAM,6BAA6BF,CAAAA,CAAS,MAAM,CAAA,CAAA,CACtG,CAAA,CAGF,IAAM1P,CAAAA,CAAa,IAAI,eAAA,CACnBjD,CAAAA,CAEA5Z,GAAM,OAAA,GACR4Z,CAAAA,CAAY,WAAW,IAAMiD,CAAAA,CAAW,KAAA,EAAM,CAAG7c,CAAAA,CAAK,OAAO,GAK/D,IAAM2tB,CAAAA,CAAkBpB,EAAS,GAAA,CAAI,CAACj2B,EAASO,CAAAA,GAAM,CACnD,IAAM+2B,CAAAA,CAAelP,EAAAA,CAAmBpoB,EAASm2B,CAAAA,CAAW51B,CAAC,EAAI,CAC/D,MAAA,CAAQgmB,EAAW,MACrB,CAAC,CAAA,CAED,OAAO,CACL,OAAA,CAAAvmB,EACA,YAAA,CAAAs3B,CACF,CACF,CAAC,CAAA,CAGKC,EAAgBF,CAAAA,CAAgB,GAAA,CACpC,CAAC,CAAE,OAAA,CAAAr3B,CAAAA,CAAS,aAAAs3B,CAAa,CAAA,IAAO,CAC9B,OAAA,CAAAt3B,CAAAA,CACA,OAAQs3B,CAAAA,CAAa,MACvB,CAAA,CACF,CAAA,CAEM,CAAE,MAAA,CAAQE,EAAc,eAAA,CAAAC,CAAgB,EAC5CznB,EAAAA,CAAmBunB,CAAa,EAG9B/H,CAAAA,CACA9lB,CAAAA,EAAM,SACR8lB,CAAAA,CAAkB,IAAMjJ,EAAW,KAAA,EAAM,CACzC7c,EAAK,MAAA,CAAO,gBAAA,CAAiB,QAAS8lB,CAAAA,CAAiB,CAAE,IAAA,CAAM,IAAK,CAAC,CAAA,CAAA,CAIvE,IAAMkI,CAAAA,CAAiB,OAAA,CAAQ,WAC7BL,CAAAA,CAAgB,GAAA,CAAI,CAAC,CAAE,YAAA,CAAAC,CAAa,CAAA,GAAMA,CAAAA,CAAa,MAAM,CAC/D,CAAA,CAAE,IAAA,CAAM/T,GAAY,CACdD,CAAAA,EACF,aAAaA,CAAS,CAAA,CAGpBkM,CAAAA,EAAmB9lB,CAAAA,EAAM,MAAA,EAC3BA,CAAAA,CAAK,OAAO,mBAAA,CAAoB,OAAA,CAAS8lB,CAAe,CAAA,CAG1D,IAAMlqB,EAAkC,EAAC,CACzC,QAAWN,CAAAA,IAAKue,CAAAA,CACVve,EAAE,MAAA,GAAW,WAAA,EACfM,EAAU,IAAA,CAAKN,CAAAA,CAAE,KAAK,CAAA,CAI1B,GACE0E,CAAAA,EAAM,UAAA,GAAe,MAAA,EACrBpE,CAAAA,CAAU,OAASoE,CAAAA,CAAK,UAAA,CAExB,MAAM,IAAI,KAAA,CACR,kDAAkDpE,CAAAA,CAAU,MAAM,CAAA,CAAA,EAAI2wB,CAAAA,CAAS,MAAM,CAAA,qCAAA,EAC7DvsB,EAAK,UAAU,CAAA,CAAA,CACzC,EAGF,OAAOpE,CACT,CAAC,CAAA,CAEKqyB,CAAAA,CAAeD,CAAAA,CAAe,IAAA,CAAMvf,CAAAA,EAAYrC,CAAAA,CAAMqC,CAAO,CAAC,CAAA,CAGpE,OAAAuf,CAAAA,CAAe,KAAA,CAAM,IAAM,CAAC,CAAC,EAC7BC,CAAAA,CAAa,KAAA,CAAM,IAAM,CAAC,CAAC,EAEpB,CACL,MAAA,CAAQH,EACR,OAAA,CAASE,CAAAA,CACT,KAAA,CAAOC,CAAAA,CACP,eAAA,CAAAF,CAAAA,CACA,MAAO,IAAM,CACXlR,EAAW,KAAA,EAAM,CACbiJ,GAAmB9lB,CAAAA,EAAM,MAAA,EAC3BA,CAAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,OAAA,CAAS8lB,CAAe,CAAA,CAE1D,IAAA,GAAW,CAAE,YAAA,CAAA8H,CAAa,IAAKD,CAAAA,CAC7BC,CAAAA,CAAa,KAAA,GAEjB,CACF,CACF,EAIA,MAAM,OAAA,CACJrB,EACA5yB,CAAAA,CACAu0B,CAAAA,CAMwB,CACxBjX,EAAAA,EAAmB,CAEnB,IAAMtJ,CAAAA,CAA0B,CAC9B,KAAM,MAAA,CACN,QAAA,CAAU4e,EACV,OAAA,CAAS2B,CAAAA,EAAU,QACnB,OAAA,CAASA,CAAAA,EAAU,OAAA,CACnB,UAAA,CAAYA,CAAAA,EAAU,UAAA,CACtB,OAAQA,CAAAA,EAAU,MACpB,EAEA,OAAO1J,EAAAA,CAAkB7W,EAAShU,CAAAA,CAAO,mBAAmB,CAC9D,CAAA,CAIA,MAAM,UAAA,CACJytB,EACA+G,CAAAA,CACAx0B,CAAAA,CACAy0B,EAoBC,CACDnX,EAAAA,GAEA,IAAMtJ,CAAAA,CAA6B,CACjC,IAAA,CAAM,SAAA,CACN,OAAA,CAASyZ,EACT,SAAA,CAAW+G,CAAAA,CACX,cAAeC,CAAAA,EAAa,aAAA,CAC5B,gBAAiBA,CAAAA,EAAa,eAAA,CAC9B,gBAAiBA,CAAAA,EAAa,eAAA,CAC9B,QAASA,CAAAA,EAAa,OAAA,CACtB,YAAaA,CAAAA,EAAa,WAAA,CAC1B,YAAaA,CAAAA,EAAa,WAAA,CAC1B,MAAA,CAAQA,CAAAA,EAAa,MAAA,CACrB,OAAA,CAASA,GAAa,OAAA,CACtB,SAAA,CAAWA,GAAa,SAC1B,CAAA,CAEMnyB,EAAS,MAAM8mB,EAAAA,CACnBpV,CAAAA,CACAhU,CAAAA,CACA,sBACF,CAAA,CACM8G,EAAUuW,EAAAA,CAAwB,CAAC,GAAGA,EAAqB,CAAA,CAAI,EAAC,CAChE1W,CAAAA,CAAgB8tB,CAAAA,EAAa,aAAA,EAAiB,CAAA,CAC9CC,CAAAA,CACJ5tB,EAAQ,MAAA,CAAS,CAAA,EACjB,CAACA,CAAAA,CAAQA,CAAAA,CAAQ,OAAS,CAAC,CAAA,CAAG,QAC9BA,CAAAA,CAAQ,MAAA,EAAUH,EAEpB,OAAO,CAAE,OAAArE,CAAAA,CAAQ,UAAA,CAAYwE,EAAQ,MAAA,CAAQ,OAAA,CAAAA,CAAAA,CAAS,SAAA,CAAA4tB,CAAU,CAClE,EAIA,MAAM,SAAA,CACJ9B,EACA4B,CAAAA,CACAx0B,CAAAA,CACA20B,EAW0B,CAC1B,OAAArX,IAAmB,CAEZ0O,EAAAA,CACL,CAEE,SAAU4G,CAAAA,CACV,SAAA,CAAW4B,EACX,SAAA,CAAWG,CAAAA,EAAY,SAAA,CACvB,OAAA,CAASA,CAAAA,EAAY,OAAA,CACrB,eAAgBA,CAAAA,EAAY,cAAA,CAC5B,OAAQA,CAAAA,EAAY,MAAA,CACpB,QAASA,CAAAA,EAAY,OACvB,EACA30B,CAAAA,CACA,qBACF,CACF,CAAA,CAIA,MAAM,QACJ2R,CAAAA,CACA8U,CAAAA,CACArT,EACAwhB,CAAAA,CAYwB,CACxB,OAAAtX,EAAAA,EAAmB,CAEZmR,EAAAA,CACL,CAEE,MAAA9c,CAAAA,CACA,IAAA,CAAAyB,EACA,YAAA,CAAcwhB,CAAAA,EAAU,YAAA,CACxB,QAAA,CAAUA,CAAAA,EAAU,QAAA,CACpB,QAASA,CAAAA,EAAU,OAAA,CACnB,QAASA,CAAAA,EAAU,OAAA,CACnB,OAAQA,CAAAA,EAAU,MAAA,CAClB,iBAAA,CAAmBA,CAAAA,EAAU,iBAAA,CAC7B,UAAA,CAAYA,GAAU,UAAA,CACtB,MAAA,CAAQA,GAAU,MAAA,CAClB,OAAA,CAASA,GAAU,OAAA,CACnB,UAAA,CAAYA,GAAU,UACxB,CAAA,CACAnO,EACA,mBACF,CACF,EAEA,MAAM,UAAA,CACJoO,EACA7gB,CAAAA,CACwB,CAGxB,GAFAsJ,EAAAA,EAAmB,CAGjB,CAACuX,GACDA,CAAAA,CAAgB,OAAA,GAAY,GAC5BA,CAAAA,CAAgB,IAAA,GAAS,OAEzB,MAAM,IAAI,KAAA,CAAM,sDAAsD,CAAA,CAGxE,OAAOpG,GACLza,CAAAA,CACA,GACA6gB,CAAAA,CAAgB,SAAA,CAChBA,CACF,CACF,CAAA,CAEA,MAAM,gBAAA,CACJA,CAAAA,CACA7gB,CAAAA,CACY,CAGZ,GAFAsJ,EAAAA,GAGE,CAACuX,CAAAA,EACDA,EAAgB,OAAA,GAAY,CAAA,EAC5BA,EAAgB,IAAA,GAAS,YAAA,CAEzB,MAAM,IAAI,KAAA,CACR,4DACF,CAAA,CAGF,OAAOrO,GACLxS,CAAAA,CACA6gB,CAAAA,CAAgB,YAAA,CAChBA,CAAAA,CAAgB,SAAA,CAChBA,CACF,CACF,CAAA,CAEA,MAAM,iBACJA,CAAAA,CACA7gB,CAAAA,CACAhY,EACY,CAGZ,GAFAshB,EAAAA,EAAmB,CAGjB,CAACuX,CAAAA,EACDA,EAAgB,OAAA,GAAY,CAAA,EAC5BA,EAAgB,IAAA,GAAS,YAAA,CAEzB,MAAM,IAAI,KAAA,CACR,4DACF,CAAA,CAGF,IAAM70B,CAAAA,CAAQhE,GAAS,KAAA,EAAS64B,CAAAA,CAAgB,aAEhD,OAAOzN,EAAAA,CACLpT,EACAhU,CAAAA,CACA60B,CAAAA,CAAgB,UAChBA,CACF,CACF,EAEA,MAAM,aAAA,CACJA,EACA7gB,CAAAA,CACAhY,CAAAA,CACY,CAGZ,GAFAshB,EAAAA,EAAmB,CAGjB,CAACuX,CAAAA,EACDA,CAAAA,CAAgB,UAAY,CAAA,EAC5BA,CAAAA,CAAgB,OAAS,SAAA,CAEzB,MAAM,IAAI,KAAA,CACR,yDACF,CAAA,CAGF,IAAM70B,CAAAA,CAAQhE,CAAAA,EAAS,OAAS64B,CAAAA,CAAgB,cAAA,CAEhD,OAAOzL,EAAAA,CACLpV,CAAAA,CACAhU,EACA60B,CAAAA,CAAgB,SAAA,CAChBA,CACF,CACF,CAAA,CAEA,MAAM,aACJA,CAAAA,CACA7gB,CAAAA,CAC0B,CAG1B,GAFAsJ,EAAAA,GAGE,CAACuX,CAAAA,EACDA,EAAgB,OAAA,GAAY,CAAA,EAC5BA,EAAgB,IAAA,GAAS,QAAA,CAEzB,MAAM,IAAI,KAAA,CACR,wDACF,CAAA,CAGF,OAAO7I,EAAAA,CACLhY,CAAAA,CACA6gB,CAAAA,CAAgB,YAAA,CAChBA,EAAgB,SAAA,CAChBA,CACF,CACF,CAAA,CAEA,MAAM,UACJA,CAAAA,CACA7gB,CAAAA,CACAhY,CAAAA,CACY,CAGZ,GAFAshB,EAAAA,GAGE,CAACuX,CAAAA,EACDA,EAAgB,OAAA,GAAY,CAAA,EAC5BA,EAAgB,IAAA,GAAS,KAAA,CAEzB,MAAM,IAAI,KAAA,CAAM,qDAAqD,EAGvE,IAAM70B,CAAAA,CAAQhE,GAAS,KAAA,EAAS64B,CAAAA,CAAgB,MAEhD,OAAOpN,EAAAA,CACLzT,EACAhU,CAAAA,CACA60B,CAAAA,CAAgB,UAChBA,CACF,CACF,EAEA,MAAM,MAAA,CACJtsB,EACAyL,CAAAA,CACAhY,CAAAA,CACY,CAGZ,GAFAshB,EAAAA,EAAmB,CAEf,CAACjM,EAAAA,CACH,MAAM,IAAI,KAAA,CACR,uDACF,EAGF,IAAMhJ,CAAAA,CAAa,MAAMgJ,EAAAA,CAAgB,IAAA,CAAK9I,CAAY,EAC1D,GAAI,CAACF,EACH,MAAM,IAAI,MACR,CAAA,6CAAA,EAAgDE,CAAY,CAAA,CAC9D,CAAA,CAIF,IAAI1G,CAAAA,CACJ,GAAI,CACF,IAAMxE,EAAS,IAAA,CAAK,KAAA,CAAMgL,EAAW,YAAY,CAAA,CACjD,GAAI,CAAChL,CAAAA,EAAU,OAAOA,CAAAA,EAAW,QAAA,CAC/B,MAAM,IAAI,KAAA,CAAM,0CAA0C,CAAA,CAG5D,IAAMy3B,CAAAA,CAAU,IAAI,GAAA,CAAI,CAAC,YAAa,aAAA,CAAe,WAAW,CAAC,CAAA,CACjE,IAAA,IAAWx3B,KAAO,MAAA,CAAO,IAAA,CAAKD,CAAM,CAAA,CAClC,GAAIy3B,CAAAA,CAAQ,IAAIx3B,CAAG,CAAA,CACjB,MAAM,IAAI,KAAA,CAAM,0CAA0CA,CAAG,CAAA,CAAE,CAAA,CAYnE,GAAI,CARe,IAAI,IAAI,CACzB,YAAA,CACA,aACA,SAAA,CACA,QAAA,CACA,MACA,MACF,CAAC,EACe,GAAA,CAAID,CAAAA,CAAO,IAAI,CAAA,CAC7B,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoCA,EAAO,IAAI,CAAA,CAAE,CAAA,CAEnE,GAAIA,CAAAA,CAAO,OAAA,GAAY,EACrB,MAAM,IAAI,MAAM,CAAA,gCAAA,EAAmCA,CAAAA,CAAO,OAAO,CAAA,CAAE,CAAA,CAGrEwE,CAAAA,CAAQxE,EACV,CAAA,MAASX,CAAAA,CAAK,CACZ,MAAM,IAAI,MACR,CAAA,iDAAA,EAAoDA,CAAAA,YAAe,MAAQA,CAAAA,CAAI,OAAA,CAAU,MAAA,CAAOA,CAAG,CAAC,CAAA,CACtG,CACF,CAEA,IAAM6pB,EAAO1W,EAAAA,CAAehO,CAAK,EAC3BkzB,CAAAA,CACJ/4B,CAAAA,EAAS,QACR,cAAA,GAAkB6F,CAAAA,CACdA,EAAmC,YAAA,CACpC,EAAA,CAAA,CAcN,OAXIlE,CAAAA,EACFA,CAAAA,CAAS,OAAO,CACd,IAAA,CAAM,oBAAA,CACN,SAAA,CAAW,IAAA,CAAK,GAAA,GAChB,UAAA,CAAY,IAAA,CACZ,aAAA4K,CAAAA,CACA,WAAA,CAAa1G,EAAM,IAAA,CACnB,IAAA,CAAA0kB,CACF,CAAC,CAAA,CAGK1kB,CAAAA,CAAM,MACZ,KAAK,aACH,OAAO2kB,EAAAA,CACLxS,EACA+gB,CAAAA,CACAlzB,CAAAA,CAAM,SAAA,CACNA,CACF,CAAA,CACF,KAAK,aACH,OAAOulB,EAAAA,CACLpT,EACA+gB,CAAAA,CACAlzB,CAAAA,CAAM,UACNA,CACF,CAAA,CACF,KAAK,SAAA,CACH,OAAOunB,GACLpV,CAAAA,CACA+gB,CAAAA,CACAlzB,EAAM,SAAA,CACNA,CACF,EACF,KAAK,QAAA,CACH,OAAOmqB,EAAAA,CACLhY,CAAAA,CACA+gB,CAAAA,CACAlzB,EAAM,SAAA,CACNA,CACF,EACF,KAAK,KAAA,CACH,OAAO4lB,EAAAA,CACLzT,CAAAA,CACA+gB,CAAAA,CACAlzB,CAAAA,CAAM,SAAA,CACNA,CACF,EACF,KAAK,MAAA,CACH,OAAO4sB,EAAAA,CACLza,CAAAA,CACAnS,EAAM,KAAA,CACNA,CAAAA,CAAM,SAAA,CACNA,CACF,CACJ,CACF,EAIA,gBAAA,CACE/D,CAAAA,CACAkjB,EACM,CACN1D,EAAAA,GAEI0D,CAAAA,EACFnB,EAAAA,CAAwB,IAAI/hB,CAAAA,CAAIkjB,CAAa,EAI/C,IAAA,IAAWrkB,CAAAA,IAAW,OAAO,IAAA,CAAKie,CAAM,EAAG,CACzC,IAAMuF,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CAExC,GADgB8I,EAAAA,CAAmB0a,CAAU,EACjC,OAAA,CAAQ,IAAA,CAAM1c,GAAyBA,CAAAA,CAAE,EAAA,GAAO3F,CAAE,CAAA,CAAG,CAC/DmG,CAAAA,CAAO,MAAM,IAAM,CACjB,IAAM8c,CAAAA,CAAYtb,EAAAA,CAAmB0a,CAAU,CAAA,CACzCmL,CAAAA,CAAW,CAAC,GAAGvK,CAAAA,CAAU,QAAA,CAAUjjB,CAAE,CAAA,CAC3C4H,EAAAA,CAAmBya,EAAY,CAC7B,GAAGY,EACH,OAAA,CAASA,CAAAA,CAAU,QAAQ,MAAA,CACxBtd,CAAAA,EAAyBA,EAAE,EAAA,GAAO3F,CACrC,EACA,QAAA,CACEwtB,CAAAA,CAAS,OAAShkB,EAAAA,CACdgkB,CAAAA,CAAS,KAAA,CAAM,CAAChkB,EAAsB,CAAA,CACtCgkB,CACR,CAAC,EACH,CAAC,CAAA,CAED,MACF,CACF,CAEI5Q,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,CAAA,0EAAA,EAA6E5c,CAAE,GACjF,EAEJ,CAAA,CAEA,iBAAiBA,CAAAA,CAAYw1B,CAAAA,CAAuB,CAClDhW,EAAAA,EAAmB,CAEfgW,CAAAA,EACFxT,EAAAA,CAAwB,GAAA,CAAIhiB,CAAAA,CAAIw1B,CAAM,CAAA,CAGxC,IAAA,IAAW32B,KAAW,MAAA,CAAO,IAAA,CAAKie,CAAM,CAAA,CAAG,CACzC,IAAMuF,CAAAA,CAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CAExC,GADgB8I,GAAmB0a,CAAU,CAAA,CACjC,QAAQ,IAAA,CAAM1c,CAAAA,EAAyBA,CAAAA,CAAE,EAAA,GAAO3F,CAAE,CAAA,CAAG,CAC/DmG,CAAAA,CAAO,KAAA,CAAM,IAAM,CACjB,IAAM8c,EAAYtb,EAAAA,CAAmB0a,CAAU,CAAA,CACzC6U,CAAAA,CAAY,CAAC,GAAGjU,EAAU,SAAA,CAAWjjB,CAAE,EAC7C4H,EAAAA,CAAmBya,CAAAA,CAAY,CAC7B,GAAGY,CAAAA,CACH,OAAA,CAASA,CAAAA,CAAU,OAAA,CAAQ,MAAA,CACxBtd,GAAyBA,CAAAA,CAAE,EAAA,GAAO3F,CACrC,CAAA,CACA,SAAA,CACEk3B,EAAU,MAAA,CAAS1tB,EAAAA,CACf0tB,EAAU,KAAA,CAAM,CAAC1tB,EAAsB,CAAA,CACvC0tB,CACR,CAAC,EACH,CAAC,EAED,MACF,CACF,CAEIta,EAAAA,EACF,OAAA,CAAQ,KAAA,CACN,6EAA6E5c,CAAE,CAAA,CAAA,CACjF,EAEJ,CAAA,CAEA,qBAAA,EAA6C,CAC3C,IAAM8R,CAAAA,CAA+B,EAAC,CACtC,IAAA,IAAWjT,CAAAA,IAAW,OAAO,IAAA,CAAKie,CAAM,EAAG,CACzC,IAAMuF,EAAa9B,EAAAA,CAAc1hB,CAAO,CAAA,CAClC2jB,CAAAA,CAAU7a,EAAAA,CAAmB0a,CAAU,EAC7CvQ,CAAAA,CAAQ,IAAA,CAAK,GAAG0Q,CAAAA,CAAQ,OAAO,EACjC,CAEA,OAAO1Q,CACT,CAAA,CAEA,wBAAA,EAA4D,CAC1D,OAAOyN,EAAAA,CAAwB,CAAC,GAAGA,EAAqB,EAAI,IAC9D,CAAA,CAEA,OAAA,EAAU,CACJF,EAAAA,GAIJ7H,EAAAA,CAAa,OAAM,CAEnB0J,EAAAA,CAA0B,OAAM,CAChCC,EAAAA,CAAuB,OAAM,CAC7Bf,EAAAA,CAAuB,KAAA,EAAM,CAC7BH,EAAAA,CAAY,KAAA,GACZZ,EAAAA,CAAY,IAAA,CACZlZ,EAAO,OAAA,EAAQ,EACjB,CACF,CAAA,CAGA,OAAAsa,EAAAA,EAAqB,CAEdjJ,EACT","file":"chunk-X3VQ5F7D.cjs","sourcesContent":["/**\n * Debug Timeline — AI-specific event log with snapshot correlation.\n *\n * Records agent lifecycle events (start, complete, error, guardrail checks,\n * approvals, handoffs, patterns) and correlates them with core time-travel\n * snapshots for visual timeline UIs and fork-and-replay debugging.\n *\n * Zero-cost when debug=false — the timeline is simply `null`.\n *\n * @module\n */\n\nimport type { Plugin } from \"@directive-run/core\";\nimport type { DebugEvent, DebugEventType } from \"./types.js\";\n\n/** A12: Known event types for import validation */\nconst KNOWN_EVENT_TYPES: Set<string> = new Set([\n \"agent_start\",\n \"agent_complete\",\n \"agent_error\",\n \"agent_retry\",\n \"guardrail_check\",\n \"constraint_evaluate\",\n \"resolver_start\",\n \"resolver_complete\",\n \"resolver_error\",\n \"approval_request\",\n \"approval_response\",\n \"handoff_start\",\n \"handoff_complete\",\n \"pattern_start\",\n \"pattern_complete\",\n \"dag_node_update\",\n \"breakpoint_hit\",\n \"breakpoint_resumed\",\n \"derivation_update\",\n \"scratchpad_update\",\n \"reflection_iteration\",\n \"race_start\",\n \"race_winner\",\n \"race_cancelled\",\n \"debate_round\",\n \"reroute\",\n \"checkpoint_save\",\n \"checkpoint_restore\",\n \"task_start\",\n \"task_complete\",\n \"task_error\",\n \"task_progress\",\n \"goal_step\",\n]);\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Callback fired when a new event is recorded */\nexport type DebugTimelineListener = (event: DebugEvent) => void;\n\n/** Debug timeline instance */\nexport interface DebugTimeline {\n /** Record a new event (id is auto-assigned) */\n record(event: Omit<DebugEvent, \"id\"> & Record<string, unknown>): DebugEvent;\n /** Get all events in order */\n getEvents(): DebugEvent[];\n /** Get events for a specific agent */\n getEventsForAgent(agentId: string): DebugEvent[];\n /** Get events by type with type narrowing */\n getEventsByType<T extends DebugEventType>(\n type: T,\n ): Extract<DebugEvent, { type: T }>[];\n /** Get events at a specific snapshot */\n getEventsAtSnapshot(snapshotId: number): DebugEvent[];\n /** Get events in a time range */\n getEventsInRange(startMs: number, endMs: number): DebugEvent[];\n /** Fork from a snapshot — truncates events after it and calls goTo */\n forkFrom(snapshotId: number): void;\n /** Export timeline as JSON */\n export(): string;\n /** Import timeline from JSON */\n import(json: string): void;\n /** Clear all events */\n clear(): void;\n /** Subscribe to new events. Returns unsubscribe function. */\n subscribe(listener: DebugTimelineListener): () => void;\n /** Current number of events */\n readonly length: number;\n}\n\n/** Options for creating a debug timeline */\nexport interface DebugTimelineOptions {\n /** Maximum events before eviction. @default 2000 */\n maxEvents?: number;\n /** Callback to get current snapshot ID from the system */\n getSnapshotId?: () => number | null;\n /** Callback to navigate to a snapshot (for forkFrom) */\n goToSnapshot?: (snapshotId: number) => void;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\nconst BLOCKED_IMPORT_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n]);\n\n/**\n * Create a debug timeline for recording and correlating AI events.\n *\n * @example\n * ```typescript\n * const timeline = createDebugTimeline({ maxEvents: 1000 });\n *\n * timeline.record({\n * type: \"agent_start\",\n * timestamp: Date.now(),\n * agentId: \"researcher\",\n * snapshotId: null,\n * inputLength: 42,\n * });\n *\n * const agentEvents = timeline.getEventsForAgent(\"researcher\");\n * ```\n */\nexport function createDebugTimeline(\n options: DebugTimelineOptions = {},\n): DebugTimeline {\n const maxEvents = options.maxEvents ?? 2000;\n const goToSnapshot = options.goToSnapshot;\n\n // Validate config\n if (!Number.isFinite(maxEvents) || maxEvents < 1) {\n throw new Error(\"[Directive DebugTimeline] maxEvents must be >= 1\");\n }\n\n let events: DebugEvent[] = [];\n let nextId = 0;\n const listeners = new Set<DebugTimelineListener>();\n\n const timeline: DebugTimeline = {\n record(event: Omit<DebugEvent, \"id\">): DebugEvent {\n const fullEvent = { ...event, id: nextId++ } as DebugEvent;\n events.push(fullEvent);\n\n // Batch eviction — single splice instead of per-element shift\n const overflow = events.length - maxEvents;\n if (overflow > 0) {\n events.splice(0, overflow);\n }\n\n // Notify listeners\n for (const listener of listeners) {\n try {\n listener(fullEvent);\n } catch (err) {\n // A6: Log listener errors in dev mode instead of swallowing silently\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\"\n ) {\n console.error(\n \"[Directive DebugTimeline] Listener threw:\",\n err instanceof Error ? err.message : err,\n );\n }\n }\n }\n\n return fullEvent;\n },\n\n getEvents(): DebugEvent[] {\n return [...events];\n },\n\n getEventsForAgent(agentId: string): DebugEvent[] {\n return events.filter((e) => e.agentId === agentId);\n },\n\n getEventsByType<T extends DebugEventType>(\n type: T,\n ): Extract<DebugEvent, { type: T }>[] {\n return events.filter((e) => e.type === type) as Extract<\n DebugEvent,\n { type: T }\n >[];\n },\n\n getEventsAtSnapshot(snapshotId: number): DebugEvent[] {\n return events.filter((e) => e.snapshotId === snapshotId);\n },\n\n getEventsInRange(startMs: number, endMs: number): DebugEvent[] {\n return events.filter(\n (e) => e.timestamp >= startMs && e.timestamp <= endMs,\n );\n },\n\n forkFrom(snapshotId: number): void {\n // A8: Single reverse scan instead of two .filter() passes\n let cutoffId = -1;\n for (let i = events.length - 1; i >= 0; i--) {\n if (\n events[i]!.snapshotId !== null &&\n events[i]!.snapshotId! <= snapshotId\n ) {\n cutoffId = events[i]!.id;\n break;\n }\n }\n\n if (cutoffId >= 0) {\n // Find the index to slice at (events are monotonic by id)\n let sliceEnd = events.length;\n for (let i = events.length - 1; i >= 0; i--) {\n if (events[i]!.id <= cutoffId) {\n sliceEnd = i + 1;\n break;\n }\n }\n events = events.slice(0, sliceEnd);\n } else {\n // No matching events — clear all\n events = [];\n }\n\n // Navigate the system to the snapshot\n if (goToSnapshot) {\n goToSnapshot(snapshotId);\n }\n },\n\n export(): string {\n return JSON.stringify({ version: 1, events, nextId });\n },\n\n import(json: string): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch {\n throw new Error(\"[Directive DebugTimeline] Invalid JSON\");\n }\n\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"[Directive DebugTimeline] Invalid timeline data\");\n }\n\n // Prototype pollution defense\n for (const key of Object.keys(parsed)) {\n if (BLOCKED_IMPORT_KEYS.has(key)) {\n throw new Error(\n `[Directive DebugTimeline] Blocked key in import: ${key}`,\n );\n }\n }\n\n const data = parsed as {\n version?: number;\n events?: unknown[];\n nextId?: number;\n };\n\n if (!Array.isArray(data.events)) {\n throw new Error(\"[Directive DebugTimeline] Missing events array\");\n }\n\n // Validate each event has required fields\n const validated: DebugEvent[] = [];\n for (const evt of data.events) {\n if (!evt || typeof evt !== \"object\") {\n continue;\n }\n\n // Prototype pollution defense on event objects\n for (const key of Object.keys(evt)) {\n if (BLOCKED_IMPORT_KEYS.has(key)) {\n throw new Error(\n `[Directive DebugTimeline] Blocked key in event: ${key}`,\n );\n }\n }\n\n const e = evt as Record<string, unknown>;\n // A12: Also validate that event type is a known DebugEventType\n if (\n typeof e.id === \"number\" &&\n typeof e.type === \"string\" &&\n KNOWN_EVENT_TYPES.has(e.type) &&\n typeof e.timestamp === \"number\"\n ) {\n validated.push(evt as DebugEvent);\n }\n }\n\n // Enforce maxEvents cap on imported data\n events =\n validated.length > maxEvents ? validated.slice(-maxEvents) : validated;\n nextId = typeof data.nextId === \"number\" ? data.nextId : validated.length;\n },\n\n clear(): void {\n events = [];\n nextId = 0;\n },\n\n subscribe(listener: DebugTimelineListener): () => void {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\n };\n },\n\n get length(): number {\n return events.length;\n },\n };\n\n return timeline;\n}\n\n// ============================================================================\n// Plugin Factory\n// ============================================================================\n\n/**\n * Create a Directive plugin that bridges core constraint/resolver events\n * to the debug timeline.\n *\n * @example\n * ```typescript\n * const timeline = createDebugTimeline();\n * const plugin = createDebugTimelinePlugin(timeline, () => system.history?.currentIndex ?? null);\n * ```\n */\nexport function createDebugTimelinePlugin(\n timeline: DebugTimeline,\n getSnapshotId: () => number | null,\n): Plugin {\n const resolverStartTimes = new Map<string, number>();\n\n return {\n name: \"directive-ai-debug-timeline\",\n\n onConstraintEvaluate(id: string, active: boolean) {\n timeline.record({\n type: \"constraint_evaluate\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n constraintId: id,\n fired: active,\n });\n },\n\n onResolverStart(resolver: string, req) {\n resolverStartTimes.set(resolver, Date.now());\n timeline.record({\n type: \"resolver_start\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n resolverId: resolver,\n requirementType: req.requirement.type,\n });\n },\n\n onResolverComplete(resolver: string) {\n const startTime = resolverStartTimes.get(resolver);\n resolverStartTimes.delete(resolver);\n timeline.record({\n type: \"resolver_complete\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n resolverId: resolver,\n durationMs: startTime ? Date.now() - startTime : 0,\n });\n },\n\n onResolverError(resolver: string, _req, error) {\n const startTime = resolverStartTimes.get(resolver);\n resolverStartTimes.delete(resolver);\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n timeline.record({\n type: \"resolver_error\",\n timestamp: Date.now(),\n snapshotId: getSnapshotId(),\n resolverId: resolver,\n errorMessage,\n durationMs: startTime ? Date.now() - startTime : 0,\n });\n },\n };\n}\n","/**\n * Shared guardrail and retry utilities — used by both single-agent and multi-agent orchestrators.\n *\n * Extracted from agent-orchestrator.ts to enable reuse without circular dependencies.\n * Internal module — not a public subpath export.\n *\n * @module\n */\n\nimport type {\n AgentLike,\n AgentRetryConfig,\n AgentRunner,\n GuardrailContext,\n GuardrailFn,\n GuardrailResult,\n GuardrailRetryConfig,\n NamedGuardrail,\n RunOptions,\n RunResult,\n} from \"./types.js\";\n\n// ============================================================================\n// Guardrail Helpers\n// ============================================================================\n\n/**\n * Normalize a bare guardrail function or a {@link NamedGuardrail} into a consistent\n * {@link NamedGuardrail} shape. Bare functions are wrapped with a generated name\n * and `critical: true` by default.\n *\n * @param guardrail - A guardrail function or named guardrail object.\n * @param index - Positional index used to generate a unique name for bare functions.\n * @param type - Guardrail category label (e.g. `\"input\"`, `\"output\"`) included in the generated name.\n * @returns A {@link NamedGuardrail} with a guaranteed `name`, `fn`, and `critical` flag.\n */\nexport function normalizeGuardrail<T>(\n guardrail: GuardrailFn<T> | NamedGuardrail<T>,\n index: number,\n type: string,\n): NamedGuardrail<T> {\n if (typeof guardrail === \"function\") {\n return {\n name: `${type}-guardrail-${index}`,\n fn: guardrail,\n critical: true,\n };\n }\n\n return guardrail;\n}\n\n/**\n * Calculate the delay in milliseconds before the next guardrail retry attempt.\n * Supports exponential, linear, and fixed backoff strategies.\n *\n * @param attempt - The just-completed attempt number (1-based).\n * @param config - Retry configuration controlling backoff strategy and delay bounds.\n * @returns Delay in milliseconds, clamped to {@link GuardrailRetryConfig.maxDelayMs}.\n */\nexport function calculateRetryDelay(\n attempt: number,\n config: GuardrailRetryConfig,\n): number {\n const {\n backoff = \"exponential\",\n baseDelayMs = 100,\n maxDelayMs = 5000,\n } = config;\n let delay: number;\n switch (backoff) {\n case \"exponential\":\n delay = baseDelayMs * 2 ** (attempt - 1);\n break;\n case \"linear\":\n delay = baseDelayMs * attempt;\n break;\n default:\n delay = baseDelayMs;\n }\n\n return Math.min(delay, maxDelayMs);\n}\n\n/** Sleep that respects an abort signal — resolves early if aborted */\nfunction abortableDelay(ms: number, signal?: AbortSignal): Promise<void> {\n if (signal?.aborted) {\n return Promise.reject(signal.reason ?? new Error(\"Aborted\"));\n }\n\n return new Promise<void>((resolve, reject) => {\n if (!signal) {\n setTimeout(resolve, ms);\n\n return;\n }\n\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal.reason ?? new Error(\"Aborted\"));\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/**\n * Execute a guardrail function, retrying on thrown errors up to the configured\n * number of attempts. Delays between retries respect the guardrail's\n * {@link GuardrailRetryConfig} and can be cancelled via an {@link AbortSignal}.\n *\n * @remarks\n * When all retries are exhausted the function returns a structured\n * `{ passed: false }` result rather than re-throwing, so callers can classify\n * the failure as a guardrail rejection instead of an unhandled error.\n *\n * @param guardrail - The named guardrail to execute (includes retry config).\n * @param data - The guardrail input data (input text, output value, or tool call).\n * @param context - Shared guardrail context providing access to system facts.\n * @param signal - Optional abort signal to cancel pending retry delays.\n * @returns The guardrail result from a successful attempt, or a failure result after all retries.\n */\nexport async function executeGuardrailWithRetry<T>(\n guardrail: NamedGuardrail<T>,\n data: T,\n context: GuardrailContext,\n signal?: AbortSignal,\n): Promise<GuardrailResult> {\n const { retry } = guardrail;\n const maxAttempts = Math.max(retry?.attempts ?? 1, 1);\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await guardrail.fn(data, context);\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Only retry if we have more attempts left\n if (attempt < maxAttempts) {\n const delay = calculateRetryDelay(attempt, retry ?? {});\n await abortableDelay(delay, signal);\n }\n }\n }\n\n // All retries exhausted — return structured failure instead of raw throw\n // so callers can classify this as a guardrail failure, not an unhandled error\n return {\n passed: false,\n reason: `Guardrail \"${guardrail.name}\" failed after ${maxAttempts} attempt(s): ${lastError!.message}`,\n };\n}\n\n// ============================================================================\n// Agent Retry Helpers\n// ============================================================================\n\n/**\n * Calculate the delay in milliseconds before the next agent-level retry attempt.\n * Supports exponential, linear, and fixed backoff strategies.\n *\n * @param attempt - The just-completed attempt number (1-based).\n * @param config - Retry configuration controlling backoff strategy and delay bounds.\n * @returns Delay in milliseconds, clamped to {@link AgentRetryConfig.maxDelayMs}.\n */\nexport function calculateAgentRetryDelay(\n attempt: number,\n config: AgentRetryConfig,\n): number {\n const {\n backoff = \"exponential\",\n baseDelayMs = 1000,\n maxDelayMs = 30000,\n } = config;\n let delay: number;\n switch (backoff) {\n case \"exponential\":\n delay = baseDelayMs * 2 ** (attempt - 1);\n break;\n case \"linear\":\n delay = baseDelayMs * attempt;\n break;\n default:\n delay = baseDelayMs;\n }\n\n return Math.min(delay, maxDelayMs);\n}\n\n/**\n * Execute an agent run via the provided {@link AgentRunner}, retrying on errors up to\n * the configured number of attempts. The optional `isRetryable` predicate and `onRetry`\n * callback in the retry config control which errors are retried and provide observability.\n *\n * @remarks\n * Unlike {@link executeGuardrailWithRetry}, this function re-throws the last error\n * when all retries are exhausted, since agent failures are not structured guardrail\n * rejections.\n *\n * @param runner - The agent runner function that performs the LLM call.\n * @param agent - The agent definition passed through to the runner.\n * @param input - The user input string for the agent run.\n * @param options - Optional run options including abort signal and message callbacks.\n * @param retryConfig - Optional retry configuration (attempts, backoff, predicates).\n * @returns The successful run result from the first passing attempt.\n * @throws The last error encountered when all retry attempts are exhausted.\n */\nexport async function executeAgentWithRetry<T>(\n runner: AgentRunner,\n agent: AgentLike,\n input: string,\n options: RunOptions | undefined,\n retryConfig: AgentRetryConfig | undefined,\n): Promise<RunResult<T>> {\n const maxAttempts = Math.max(retryConfig?.attempts ?? 1, 1);\n const isRetryable = retryConfig?.isRetryable ?? (() => true);\n const onRetry = retryConfig?.onRetry;\n\n let lastError: Error | undefined;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await runner<T>(agent, input, options);\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Check if error is retryable and we have more attempts\n if (attempt < maxAttempts) {\n let retryable = true;\n try {\n retryable = isRetryable(lastError);\n } catch {\n // If isRetryable itself throws, treat as non-retryable\n break;\n }\n if (!retryable) {\n break;\n }\n const delay = calculateAgentRetryDelay(attempt, retryConfig ?? {});\n try {\n onRetry?.(attempt, lastError, delay);\n } catch {\n // onRetry is best-effort — don't let callback errors disrupt retry logic\n }\n await abortableDelay(delay, options?.signal);\n } else {\n // Out of attempts\n break;\n }\n }\n }\n // All retries exhausted, throw the last error\n throw lastError!;\n}\n","/**\n * Health Monitor — tracks per-agent health metrics for self-healing networks.\n *\n * Pure computation module with zero Directive dependency.\n * Maintains a rolling window of success/failure events and computes a health\n * score from 0-100 based on configurable weights.\n *\n * @module\n */\n\nimport type { HealthMonitorConfig } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Circuit state values */\nexport type HealthCircuitState = \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\";\n\n/** Per-agent health metrics */\nexport interface AgentHealthMetrics {\n agentId: string;\n circuitState: HealthCircuitState;\n successRate: number;\n avgLatencyMs: number;\n recentFailures: number;\n recentSuccesses: number;\n healthScore: number;\n /** Last N error messages (most recent last) */\n lastErrors: string[];\n}\n\n/** Internal event record */\ninterface HealthEvent {\n success: boolean;\n latencyMs: number;\n timestamp: number;\n errorMessage?: string;\n}\n\n/** Health monitor instance */\nexport interface HealthMonitor {\n recordSuccess(agentId: string, latencyMs: number): void;\n recordFailure(agentId: string, latencyMs: number, error?: Error): void;\n getMetrics(agentId: string): AgentHealthMetrics;\n getAllMetrics(): Record<string, AgentHealthMetrics>;\n /** Returns a 0-100 health score. Returns 50 (neutral) when no data is available for the agent. */\n getHealthScore(agentId: string): number;\n updateCircuitState(agentId: string, state: HealthCircuitState): void;\n /** Reset all metrics. Useful for testing. */\n reset(): void;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\nconst DEFAULT_WINDOW_MS = 60_000;\nconst DEFAULT_MAX_NORMAL_LATENCY_MS = 5_000;\nconst DEFAULT_MAX_EVENTS_PER_AGENT = 1_000;\nconst DEFAULT_MAX_STORED_ERRORS = 5;\nconst DEFAULT_WEIGHTS = {\n successRate: 0.5,\n latency: 0.3,\n circuitState: 0.2,\n};\n\n/**\n * Create a health monitor that tracks per-agent metrics.\n *\n * @example\n * ```typescript\n * const monitor = createHealthMonitor({ windowMs: 30000 });\n *\n * monitor.recordSuccess(\"agent-a\", 120);\n * monitor.recordFailure(\"agent-a\", 5000, new Error(\"timeout\"));\n *\n * const score = monitor.getHealthScore(\"agent-a\");\n * console.log(score); // 0-100\n * ```\n */\nexport function createHealthMonitor(\n config: HealthMonitorConfig = {},\n): HealthMonitor {\n const windowMs = config.windowMs ?? DEFAULT_WINDOW_MS;\n const maxNormalLatencyMs =\n config.maxNormalLatencyMs ?? DEFAULT_MAX_NORMAL_LATENCY_MS;\n const maxEventsPerAgent =\n config.maxEventsPerAgent ?? DEFAULT_MAX_EVENTS_PER_AGENT;\n const weights = {\n successRate: config.weights?.successRate ?? DEFAULT_WEIGHTS.successRate,\n latency: config.weights?.latency ?? DEFAULT_WEIGHTS.latency,\n circuitState: config.weights?.circuitState ?? DEFAULT_WEIGHTS.circuitState,\n };\n\n // Validate config\n if (!Number.isFinite(windowMs) || windowMs <= 0) {\n throw new Error(\n \"[Directive HealthMonitor] windowMs must be a positive number\",\n );\n }\n if (!Number.isFinite(maxNormalLatencyMs) || maxNormalLatencyMs <= 0) {\n throw new Error(\n \"[Directive HealthMonitor] maxNormalLatencyMs must be a positive number\",\n );\n }\n if (!Number.isFinite(maxEventsPerAgent) || maxEventsPerAgent < 1) {\n throw new Error(\"[Directive HealthMonitor] maxEventsPerAgent must be >= 1\");\n }\n\n // A14: Validate individual weight bounds\n for (const [key, value] of Object.entries(weights)) {\n if (value < 0 || value > 1) {\n throw new Error(\n `[Directive HealthMonitor] weight \"${key}\" must be between 0 and 1 (got ${value})`,\n );\n }\n }\n\n // Validate weights sum approximately to 1.0\n const weightSum =\n weights.successRate + weights.latency + weights.circuitState;\n if (Math.abs(weightSum - 1.0) > 0.01) {\n throw new Error(\n `[Directive HealthMonitor] weights must sum to ~1.0 (tolerance: ±0.01, got ${weightSum.toFixed(4)})`,\n );\n }\n\n const events = new Map<string, HealthEvent[]>();\n const circuitStates = new Map<string, HealthCircuitState>();\n\n // L4: Generation counter for getAllMetrics caching\n let generation = 0;\n let cachedAll: Record<string, AgentHealthMetrics> | null = null;\n let cachedGen = -1;\n\n function getAgentEvents(agentId: string): HealthEvent[] {\n let agentEvents = events.get(agentId);\n if (!agentEvents) {\n agentEvents = [];\n events.set(agentId, agentEvents);\n }\n\n return agentEvents;\n }\n\n function pruneAndCap(agentEvents: HealthEvent[], now: number): void {\n // Time-based pruning: find first event within the window\n const cutoff = now - windowMs;\n let firstValid = 0;\n while (\n firstValid < agentEvents.length &&\n agentEvents[firstValid]!.timestamp < cutoff\n ) {\n firstValid++;\n }\n\n // Cap-based pruning: ensure we don't exceed maxEventsPerAgent\n const excessFromCap = agentEvents.length - firstValid - maxEventsPerAgent;\n if (excessFromCap > 0) {\n firstValid += excessFromCap;\n }\n\n // Batch remove all expired/excess events in one operation\n if (firstValid > 0) {\n agentEvents.splice(0, firstValid);\n }\n }\n\n function computeScore(agentId: string): number {\n const agentEvents = events.get(agentId);\n if (!agentEvents || agentEvents.length === 0) {\n return 50; // No data = neutral\n }\n\n const now = Date.now();\n pruneAndCap(agentEvents, now);\n\n if (agentEvents.length === 0) {\n return 50;\n }\n\n const successes = agentEvents.filter((e) => e.success).length;\n const successRate = successes / agentEvents.length;\n\n const avgLatency =\n agentEvents.reduce((s, e) => s + e.latencyMs, 0) / agentEvents.length;\n const normalizedLatency = Math.min(avgLatency / maxNormalLatencyMs, 1);\n\n const state = circuitStates.get(agentId) ?? \"CLOSED\";\n const circuitScore =\n state === \"CLOSED\" ? 1 : state === \"HALF_OPEN\" ? 0.5 : 0;\n\n const raw =\n successRate * weights.successRate +\n (1 - normalizedLatency) * weights.latency +\n circuitScore * weights.circuitState;\n\n return Math.round(raw * 100);\n }\n\n function buildMetrics(agentId: string): AgentHealthMetrics {\n const agentEvents = getAgentEvents(agentId);\n const now = Date.now();\n pruneAndCap(agentEvents, now);\n\n const successes = agentEvents.filter((e) => e.success).length;\n const failures = agentEvents.length - successes;\n const successRate =\n agentEvents.length > 0 ? successes / agentEvents.length : 0;\n const avgLatencyMs =\n agentEvents.length > 0\n ? agentEvents.reduce((s, e) => s + e.latencyMs, 0) / agentEvents.length\n : 0;\n\n // Collect last N error messages\n const lastErrors: string[] = [];\n for (\n let i = agentEvents.length - 1;\n i >= 0 && lastErrors.length < DEFAULT_MAX_STORED_ERRORS;\n i--\n ) {\n if (agentEvents[i]!.errorMessage) {\n lastErrors.unshift(agentEvents[i]!.errorMessage!);\n }\n }\n\n return {\n agentId,\n circuitState: circuitStates.get(agentId) ?? \"CLOSED\",\n successRate,\n avgLatencyMs,\n recentFailures: failures,\n recentSuccesses: successes,\n healthScore: computeScore(agentId),\n lastErrors,\n };\n }\n\n return {\n recordSuccess(agentId: string, latencyMs: number): void {\n const agentEvents = getAgentEvents(agentId);\n agentEvents.push({ success: true, latencyMs, timestamp: Date.now() });\n // A9: Prune on write path to prevent unbounded growth between reads\n pruneAndCap(agentEvents, Date.now());\n generation++;\n },\n\n recordFailure(agentId: string, latencyMs: number, error?: Error): void {\n const agentEvents = getAgentEvents(agentId);\n agentEvents.push({\n success: false,\n latencyMs,\n timestamp: Date.now(),\n errorMessage: error?.message,\n });\n // A9: Prune on write path to prevent unbounded growth between reads\n pruneAndCap(agentEvents, Date.now());\n generation++;\n },\n\n getMetrics(agentId: string): AgentHealthMetrics {\n return buildMetrics(agentId);\n },\n\n getAllMetrics(): Record<string, AgentHealthMetrics> {\n // L4: Return cached result when no writes have occurred\n if (generation === cachedGen && cachedAll) {\n return cachedAll;\n }\n\n const result: Record<string, AgentHealthMetrics> = Object.create(null);\n for (const agentId of events.keys()) {\n result[agentId] = buildMetrics(agentId);\n }\n\n cachedAll = result;\n cachedGen = generation;\n\n return result;\n },\n\n getHealthScore(agentId: string): number {\n return computeScore(agentId);\n },\n\n updateCircuitState(agentId: string, state: HealthCircuitState): void {\n circuitStates.set(agentId, state);\n generation++;\n },\n\n reset(): void {\n events.clear();\n circuitStates.clear();\n generation++;\n cachedAll = null;\n cachedGen = -1;\n },\n };\n}\n","/**\n * Meta Context - Format system metadata for LLM consumption\n *\n * Reads system.inspect() and produces a concise, structured context string\n * that helps LLMs understand the system's constraints, resolvers, modules,\n * and annotated facts.\n *\n * @example\n * ```typescript\n * import { toAIContext } from \"@directive-run/ai\";\n *\n * const context = toAIContext(system);\n * // Use in custom prompt building\n * ```\n */\n\nimport type { DefinitionMeta, SystemInspection } from \"@directive-run/core\";\n\n// ============================================================================\n// Format Helpers\n// ============================================================================\n\n/** Format tags/category as bracketed suffix: [auth, critical] */\nfunction formatTags(meta: DefinitionMeta): string {\n const parts: string[] = [];\n if (meta.category) parts.push(meta.category);\n if (meta.tags?.length) {\n for (const tag of meta.tags) {\n if (tag !== meta.category) parts.push(tag);\n }\n }\n\n return parts.length > 0 ? ` [${parts.join(\", \")}]` : \"\";\n}\n\n/** Format a single definition entry: \"id (Label): Description [tags]\" */\nfunction formatEntry(\n id: string,\n meta: DefinitionMeta | undefined,\n): string | null {\n if (!meta) return null;\n\n const label = meta.label ?? id;\n const desc = meta.description ? `: ${meta.description}` : \"\";\n const tags = formatTags(meta);\n const prefix = meta.label ? `${id} (${label})` : id;\n\n return `- ${prefix}${desc}${tags}`;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Format a SystemInspection into a concise context string for LLM consumption.\n *\n * Only includes definitions that have meta annotations. Sections with no\n * annotated definitions are omitted entirely to minimize token usage.\n *\n * @param inspection - Result of system.inspect()\n * @returns Formatted context string, or empty string if no meta exists\n */\nexport function formatSystemMeta(inspection: SystemInspection): string {\n const sections: string[] = [];\n\n // Modules\n const moduleEntries = inspection.modules\n .map((m) => formatEntry(m.id, m.meta))\n .filter(Boolean);\n if (moduleEntries.length > 0) {\n sections.push(`### Modules\\n${moduleEntries.join(\"\\n\")}`);\n }\n\n // Active constraints (only those with meta)\n const activeConstraints = inspection.constraints\n .filter((c) => c.active && c.meta)\n .map((c) => formatEntry(c.id, c.meta))\n .filter(Boolean);\n if (activeConstraints.length > 0) {\n sections.push(`### Active Constraints\\n${activeConstraints.join(\"\\n\")}`);\n }\n\n // Unmet requirements (with constraint label if available)\n if (inspection.unmet.length > 0) {\n const constraintMetaMap = new Map(\n inspection.constraints\n .filter((c) => c.meta?.label)\n .map((c) => [c.id, c.meta!.label!]),\n );\n\n const reqEntries = inspection.unmet.map((req) => {\n const constraintLabel =\n constraintMetaMap.get(req.fromConstraint) ?? req.fromConstraint;\n\n return `- ${req.requirement.type} — from \"${constraintLabel}\"`;\n });\n sections.push(`### Unmet Requirements\\n${reqEntries.join(\"\\n\")}`);\n }\n\n // Resolver definitions (only those with meta)\n const resolverEntries = inspection.resolverDefs\n .map((r) => formatEntry(r.id, r.meta))\n .filter(Boolean);\n if (resolverEntries.length > 0) {\n sections.push(`### Resolvers\\n${resolverEntries.join(\"\\n\")}`);\n }\n\n // Events (only those with meta)\n const eventEntries = inspection.events\n .map((e) => formatEntry(e.name, e.meta))\n .filter(Boolean);\n if (eventEntries.length > 0) {\n sections.push(`### Events\\n${eventEntries.join(\"\\n\")}`);\n }\n\n // Facts with annotations (only those with meta)\n const factEntries = inspection.facts\n .map((f) => formatEntry(f.key, f.meta))\n .filter(Boolean);\n if (factEntries.length > 0) {\n sections.push(`### Annotated Facts\\n${factEntries.join(\"\\n\")}`);\n }\n\n // Effects (only those with meta)\n const effectEntries = inspection.effects\n .map((e) => formatEntry(e.id, e.meta))\n .filter(Boolean);\n if (effectEntries.length > 0) {\n sections.push(`### Effects\\n${effectEntries.join(\"\\n\")}`);\n }\n\n // Derivations (only those with meta)\n const derivationEntries = inspection.derivations\n .map((d) => formatEntry(d.id, d.meta))\n .filter(Boolean);\n if (derivationEntries.length > 0) {\n sections.push(`### Derivations\\n${derivationEntries.join(\"\\n\")}`);\n }\n\n if (sections.length === 0) {\n return \"\";\n }\n\n return `## System Context\\n\\n${sections.join(\"\\n\\n\")}`;\n}\n\n/**\n * Convenience: inspect a system and format its metadata for LLM context.\n *\n * @param system - Any object with an inspect() method returning SystemInspection\n * @returns Formatted context string, or empty string if no meta exists\n *\n * @example\n * ```typescript\n * const context = toAIContext(system);\n * if (context) {\n * agent.instructions += \"\\n\\n\" + context;\n * }\n * ```\n */\nexport function toAIContext(system: {\n inspect(): SystemInspection;\n}): string {\n return formatSystemMeta(system.inspect());\n}\n","/**\n * Shared types for AI adapter — used by orchestrator, guardrails, helpers, and stack.\n */\n\nimport type {\n ModuleSchema,\n Requirement,\n SchemaType,\n} from \"@directive-run/core\";\nimport { t } from \"@directive-run/core\";\nimport type {\n BreakpointRequest,\n BreakpointState as BreakpointStateFromBreakpoints,\n} from \"./breakpoints.js\";\n\n// ============================================================================\n// Agent Types (LLM-agnostic)\n// ============================================================================\n\n/** Simplified Agent interface */\nexport interface AgentLike {\n name: string;\n instructions?: string;\n model?: string;\n tools?: unknown[];\n}\n\n/** Agent run result */\nexport interface RunResult<T = unknown> {\n output: T;\n messages: Message[];\n toolCalls: ToolCall[];\n totalTokens: number;\n /** Breakdown of input vs output tokens, when available from the provider */\n tokenUsage?: TokenUsage;\n /** True when result was served from semantic cache */\n isCached?: boolean;\n}\n\n/** Breakdown of token usage by input/output */\nexport interface TokenUsage {\n inputTokens: number;\n outputTokens: number;\n}\n\n/** Message from agent run */\nexport interface Message {\n role: \"user\" | \"assistant\" | \"tool\" | \"system\";\n content: string;\n toolCallId?: string;\n}\n\n/** Tool call record */\nexport interface ToolCall {\n id: string;\n name: string;\n arguments: string;\n result?: string;\n}\n\n/** Run function type */\nexport type AgentRunner = <T = unknown>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n) => Promise<RunResult<T>>;\n\n/** Callback-based streaming run function (e.g. for SSE-based LLM APIs) */\nexport type StreamingCallbackRunner = (\n agent: AgentLike,\n input: string,\n callbacks: {\n onToken?: (token: string) => void;\n onToolStart?: (tool: string, id: string, args: string) => void;\n onToolEnd?: (tool: string, id: string, result: string) => void;\n onMessage?: (message: Message) => void;\n signal?: AbortSignal;\n },\n) => Promise<RunResult<unknown>>;\n\n/** Run options */\nexport interface RunOptions {\n maxTurns?: number;\n signal?: AbortSignal;\n onMessage?: (message: Message) => void;\n onToolCall?: (toolCall: ToolCall) => void | Promise<void>;\n}\n\n// ============================================================================\n// Adapter Lifecycle Hooks\n// ============================================================================\n\n/**\n * Lifecycle hooks for adapter-level observability.\n *\n * Attach to any adapter (runner or streaming runner) to trace, log,\n * or measure individual LLM calls without modifying application code.\n *\n * @example\n * ```typescript\n * const runner = createOpenAIRunner({\n * apiKey: process.env.OPENAI_API_KEY!,\n * hooks: {\n * onBeforeCall: ({ agent, input }) => console.log(`→ ${agent.name}`, input.slice(0, 50)),\n * onAfterCall: ({ durationMs, tokenUsage }) => {\n * metrics.track('llm_call', { durationMs, ...tokenUsage });\n * },\n * onError: ({ error }) => Sentry.captureException(error),\n * },\n * });\n * ```\n */\nexport interface AdapterHooks {\n /** Fires before each LLM API call. */\n onBeforeCall?: (event: {\n agent: AgentLike;\n input: string;\n timestamp: number;\n }) => void;\n\n /** Fires after a successful LLM API call. */\n onAfterCall?: (event: {\n agent: AgentLike;\n input: string;\n output: string;\n totalTokens: number;\n tokenUsage: TokenUsage;\n durationMs: number;\n timestamp: number;\n }) => void;\n\n /** Fires when an LLM API call fails. */\n onError?: (event: {\n agent: AgentLike;\n input: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n}\n\n// ============================================================================\n// Guardrail Types\n// ============================================================================\n\n/** Guardrail function */\nexport type GuardrailFn<T = unknown> = (\n data: T,\n context: GuardrailContext,\n) => GuardrailResult | Promise<GuardrailResult>;\n\n/** Guardrail context */\nexport interface GuardrailContext {\n agentName: string;\n input: string;\n facts: Record<string, unknown>;\n}\n\n/** Guardrail result */\nexport interface GuardrailResult {\n passed: boolean;\n reason?: string;\n transformed?: unknown;\n}\n\n/** Input guardrail data */\nexport interface InputGuardrailData {\n input: string;\n agentName: string;\n}\n\n/** Output guardrail data */\nexport interface OutputGuardrailData {\n output: unknown;\n agentName: string;\n input: string;\n messages: Message[];\n}\n\n/** Tool call guardrail data */\nexport interface ToolCallGuardrailData {\n toolCall: ToolCall;\n agentName: string;\n input: string;\n}\n\n/** Retry configuration for guardrails */\nexport interface GuardrailRetryConfig {\n /** Total attempts (1 = no retries, 2 = one retry, etc.). @default 1 */\n attempts?: number;\n /** @default \"exponential\" */\n backoff?: \"exponential\" | \"linear\" | \"fixed\";\n /** @default 100 */\n baseDelayMs?: number;\n /** @default 5000 */\n maxDelayMs?: number;\n}\n\n/** Named guardrail for better debugging */\nexport interface NamedGuardrail<T = unknown> {\n name: string;\n fn: GuardrailFn<T>;\n /** @default true */\n critical?: boolean;\n retry?: GuardrailRetryConfig;\n}\n\n/** Guardrails configuration */\nexport interface GuardrailsConfig {\n input?: Array<\n GuardrailFn<InputGuardrailData> | NamedGuardrail<InputGuardrailData>\n >;\n output?: Array<\n GuardrailFn<OutputGuardrailData> | NamedGuardrail<OutputGuardrailData>\n >;\n toolCall?: Array<\n GuardrailFn<ToolCallGuardrailData> | NamedGuardrail<ToolCallGuardrailData>\n >;\n}\n\n// ============================================================================\n// Retry Configuration\n// ============================================================================\n\n/** Retry configuration for agent runs */\nexport interface AgentRetryConfig {\n /** @default 1 */\n attempts?: number;\n /** @default \"exponential\" */\n backoff?: \"exponential\" | \"linear\" | \"fixed\";\n /** @default 1000 */\n baseDelayMs?: number;\n /** @default 30000 */\n maxDelayMs?: number;\n isRetryable?: (error: Error) => boolean;\n onRetry?: (attempt: number, error: Error, delayMs: number) => void;\n}\n\n// ============================================================================\n// Orchestrator State Types\n// ============================================================================\n\n/** Agent state in facts */\nexport interface AgentState {\n status: \"idle\" | \"running\" | \"paused\" | \"completed\" | \"error\";\n currentAgent: string | null;\n input: string | null;\n output: unknown | null;\n error: string | null;\n tokenUsage: number;\n turnCount: number;\n startedAt: number | null;\n completedAt: number | null;\n}\n\n/** Approval state */\nexport interface ApprovalState {\n pending: ApprovalRequest[];\n approved: string[];\n rejected: RejectedRequest[];\n}\n\n/** Rejected request with tracking information */\nexport interface RejectedRequest {\n id: string;\n reason?: string;\n rejectedAt: number;\n}\n\n/** Approval request */\nexport interface ApprovalRequest {\n id: string;\n type: \"tool_call\" | \"output\" | \"handoff\";\n agentName: string;\n description: string;\n data: unknown;\n requestedAt: number;\n}\n\n/** Combined orchestrator state */\nexport interface OrchestratorState {\n agent: AgentState;\n approval: ApprovalState;\n conversation: Message[];\n toolCalls: ToolCall[];\n}\n\n// ============================================================================\n// Orchestrator Config Types\n// ============================================================================\n\n/** Constraint for orchestrator */\nexport interface OrchestratorConstraint<F extends Record<string, unknown>> {\n when: (facts: F & OrchestratorState) => boolean | Promise<boolean>;\n require: Requirement | ((facts: F & OrchestratorState) => Requirement);\n priority?: number;\n}\n\n/** Resolver context for orchestrator */\nexport interface OrchestratorResolverContext<\n F extends Record<string, unknown>,\n> {\n facts: F & OrchestratorState;\n runAgent: <T>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n ) => Promise<RunResult<T>>;\n signal: AbortSignal;\n}\n\n/** Resolver for orchestrator */\nexport interface OrchestratorResolver<\n F extends Record<string, unknown>,\n R extends Requirement = Requirement,\n> {\n requirement: (req: Requirement) => req is R;\n key?: (req: R) => string;\n resolve: (\n req: R,\n context: OrchestratorResolverContext<F>,\n ) => void | Promise<void>;\n}\n\n/** Lifecycle hooks for observability */\nexport interface OrchestratorLifecycleHooks {\n onAgentStart?: (event: {\n agentName: string;\n input: string;\n timestamp: number;\n }) => void;\n onAgentComplete?: (event: {\n agentName: string;\n input: string;\n output: unknown;\n tokenUsage: number;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentError?: (event: {\n agentName: string;\n input: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n onGuardrailCheck?: (event: {\n agentId?: string;\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n passed: boolean;\n reason?: string;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentRetry?: (event: {\n agentName: string;\n input: string;\n attempt: number;\n error: Error;\n delayMs: number;\n timestamp: number;\n }) => void;\n /** Called when a breakpoint is hit and waiting for resolution. */\n onBreakpoint?: (request: BreakpointRequest) => void;\n}\n\n/** Lifecycle hooks for multi-agent orchestrator observability */\nexport interface MultiAgentLifecycleHooks {\n onAgentStart?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n timestamp: number;\n }) => void;\n onAgentComplete?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n output: unknown;\n tokenUsage: number;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentError?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n onGuardrailCheck?: (event: {\n agentId: string;\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n passed: boolean;\n reason?: string;\n durationMs: number;\n timestamp: number;\n }) => void;\n onAgentRetry?: (event: {\n agentId: string;\n agentName: string;\n input: string;\n attempt: number;\n error: Error;\n delayMs: number;\n timestamp: number;\n }) => void;\n onHandoff?: (request: {\n id: string;\n fromAgent: string;\n toAgent: string;\n input: string;\n requestedAt: number;\n }) => void;\n onHandoffComplete?: (result: {\n request: { id: string; fromAgent: string; toAgent: string };\n completedAt: number;\n }) => void;\n onPatternStart?: (event: {\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n input: string;\n timestamp: number;\n }) => void;\n onPatternComplete?: (event: {\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n durationMs: number;\n timestamp: number;\n error?: Error;\n }) => void;\n onDagNodeStart?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n timestamp: number;\n }) => void;\n onDagNodeComplete?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n durationMs: number;\n timestamp: number;\n }) => void;\n onDagNodeError?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n onDagNodeSkipped?: (event: {\n patternId: string;\n nodeId: string;\n agentId: string;\n nodeType: \"agent\" | \"task\";\n reason: string;\n timestamp: number;\n }) => void;\n onHealthChange?: (event: {\n agentId: string;\n oldScore: number;\n newScore: number;\n timestamp: number;\n }) => void;\n onReroute?: (event: RerouteEvent) => void;\n /** Called when a breakpoint is hit and waiting for resolution. */\n onBreakpoint?: (request: BreakpointRequest) => void;\n /** Called when a cross-agent derivation value updates */\n onDerivationUpdate?: (event: {\n derivationId: string;\n value: unknown;\n timestamp: number;\n }) => void;\n /** Called when a cross-agent derivation throws an error */\n onDerivationError?: (event: {\n derivationId: string;\n error: Error;\n timestamp: number;\n }) => void;\n /** Called when scratchpad values are updated */\n onScratchpadUpdate?: (event: { keys: string[]; timestamp: number }) => void;\n /** Called when a task starts executing */\n onTaskStart?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n timestamp: number;\n }) => void;\n /** Called when a task completes successfully */\n onTaskComplete?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n durationMs: number;\n timestamp: number;\n }) => void;\n /** Called when a task fails */\n onTaskError?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n error: Error;\n durationMs: number;\n timestamp: number;\n }) => void;\n /** Called when a task reports progress */\n onTaskProgress?: (event: {\n patternId: string;\n taskId: string;\n label: string;\n percent: number;\n message?: string;\n timestamp: number;\n }) => void;\n /** Called when a pattern checkpoint is saved */\n onCheckpointSave?: (event: {\n checkpointId: string;\n patternType: string;\n step: number;\n timestamp: number;\n }) => void;\n /** Called when a checkpoint save fails */\n onCheckpointError?: (event: {\n patternType: string;\n step: number;\n error: Error;\n timestamp: number;\n }) => void;\n}\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/** Error codes for guardrail errors */\nexport type GuardrailErrorCode =\n | \"INPUT_GUARDRAIL_FAILED\"\n | \"OUTPUT_GUARDRAIL_FAILED\"\n | \"TOOL_CALL_GUARDRAIL_FAILED\"\n | \"APPROVAL_REJECTED\"\n | \"BUDGET_EXCEEDED\"\n | \"RATE_LIMIT_EXCEEDED\"\n | \"AGENT_ERROR\";\n\n/**\n * Structured error for guardrail failures.\n *\n * **Security:** The `input` and `data` properties are non-enumerable to prevent\n * accidental leakage of sensitive data via JSON.stringify or console.log.\n */\nexport class GuardrailError extends Error {\n readonly code: GuardrailErrorCode;\n readonly guardrailName: string;\n readonly guardrailType: \"input\" | \"output\" | \"toolCall\";\n readonly userMessage: string;\n declare readonly data: unknown;\n readonly agentName: string;\n declare readonly input: string;\n\n constructor(options: {\n code: GuardrailErrorCode;\n message: string;\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n userMessage?: string;\n data?: unknown;\n agentName: string;\n input: string;\n cause?: Error;\n }) {\n super(options.message, { cause: options.cause });\n this.name = \"GuardrailError\";\n this.code = options.code;\n this.guardrailName = options.guardrailName;\n this.guardrailType = options.guardrailType;\n this.userMessage = options.userMessage ?? options.message;\n this.agentName = options.agentName;\n\n Object.defineProperty(this, \"input\", {\n value: options.input,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n Object.defineProperty(this, \"data\", {\n value: options.data,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n guardrailName: this.guardrailName,\n guardrailType: this.guardrailType,\n userMessage: this.userMessage,\n agentName: this.agentName,\n };\n }\n}\n\n/** Check if an error is a GuardrailError. */\nexport function isGuardrailError(error: unknown): error is GuardrailError {\n return error instanceof GuardrailError;\n}\n\n// ============================================================================\n// Schema Validation Types (used by built-in guardrails)\n// ============================================================================\n\n/** Schema validation result */\nexport interface SchemaValidationResult {\n valid: boolean;\n errors?: string[];\n}\n\n/** Schema validator function type */\nexport type SchemaValidator<_T = unknown> = (\n value: unknown,\n) => SchemaValidationResult | boolean;\n\n// ============================================================================\n// Bridge Schema Constants\n// ============================================================================\n\nexport const AGENT_KEY = \"__agent\" as const;\nexport const APPROVAL_KEY = \"__approval\" as const;\nexport const CONVERSATION_KEY = \"__conversation\" as const;\nexport const TOOL_CALLS_KEY = \"__toolCalls\" as const;\nexport const BREAKPOINT_KEY = \"__breakpoints\" as const;\n\n// ============================================================================\n// DAG Execution Types (Multi-Agent)\n// ============================================================================\n\n/** Status of a DAG node during execution */\nexport type DagNodeStatus =\n | \"pending\"\n | \"ready\"\n | \"running\"\n | \"completed\"\n | \"error\"\n | \"skipped\";\n\n/** Execution context available to DAG node callbacks */\nexport interface DagExecutionContext {\n /** Original input to the DAG */\n input: string;\n /** Outputs keyed by node ID (populated as nodes complete) */\n outputs: Record<string, unknown>;\n /** Statuses keyed by node ID */\n statuses: Record<string, DagNodeStatus>;\n /** Error messages keyed by node ID */\n errors: Record<string, string>;\n /** Full RunResult keyed by node ID */\n results: Record<string, RunResult<unknown>>;\n}\n\n/** A node in a DAG execution pattern */\nexport interface DagNode {\n /** Registered handler ID (agent or task) to run for this node */\n handler: string;\n /** Upstream node IDs this node depends on */\n deps?: string[];\n /** Conditional edge — evaluated when deps are met. @default unconditional */\n when?: (context: DagExecutionContext) => boolean;\n /** Build input string for this node's agent. @default JSON.stringify(upstream outputs) */\n transform?: (context: DagExecutionContext) => string;\n /** Per-node timeout (ms) */\n timeout?: number;\n /** Tiebreaker when multiple nodes are ready (higher = first). @default 0 */\n priority?: number;\n}\n\n/** DAG execution pattern — nodes are agents, edges are reactive conditions */\nexport interface DagPattern<T = unknown> {\n type: \"dag\";\n /** Nodes keyed by node ID */\n nodes: Record<string, DagNode>;\n /** Merge all node outputs into the final result */\n merge: (context: DagExecutionContext) => T | Promise<T>;\n /** Overall DAG timeout (ms) */\n timeout?: number;\n /** Maximum nodes running concurrently. @default Infinity. Consider setting this to avoid API rate limits. */\n maxConcurrent?: number;\n /** Error handling strategy. @default \"fail\" */\n onNodeError?: \"fail\" | \"skip-downstream\" | \"continue\";\n /** Checkpoint configuration for mid-execution fault tolerance */\n checkpoint?: PatternCheckpointConfig;\n}\n\n// ============================================================================\n// Debug Configuration\n// ============================================================================\n\n/** Debug configuration for orchestrators */\nexport interface OrchestratorDebugConfig {\n verboseTimeline?: boolean;\n}\n\n// ============================================================================\n// Debug Timeline Types\n// ============================================================================\n\n/** All debug event types */\nexport type DebugEventType =\n | \"agent_start\"\n | \"agent_complete\"\n | \"agent_error\"\n | \"agent_retry\"\n | \"guardrail_check\"\n | \"constraint_evaluate\"\n | \"resolver_start\"\n | \"resolver_complete\"\n | \"resolver_error\"\n | \"approval_request\"\n | \"approval_response\"\n | \"handoff_start\"\n | \"handoff_complete\"\n | \"pattern_start\"\n | \"pattern_complete\"\n | \"dag_node_update\"\n | \"breakpoint_hit\"\n | \"breakpoint_resumed\"\n | \"derivation_update\"\n | \"scratchpad_update\"\n | \"reflection_iteration\"\n | \"race_start\"\n | \"race_winner\"\n | \"race_cancelled\"\n | \"debate_round\"\n | \"reroute\"\n | \"checkpoint_save\"\n | \"checkpoint_restore\"\n | \"task_start\"\n | \"task_complete\"\n | \"task_error\"\n | \"task_progress\"\n | \"goal_step\";\n\n/** Base debug event */\nexport interface DebugEventBase {\n id: number;\n type: DebugEventType;\n timestamp: number;\n agentId?: string;\n snapshotId: number | null;\n}\n\n/** Agent start event */\nexport interface AgentStartEvent extends DebugEventBase {\n type: \"agent_start\";\n agentId: string;\n inputLength: number;\n /** Truncated input text (max 5000 chars) */\n input?: string;\n}\n\n/** Agent complete event */\nexport interface AgentCompleteEvent extends DebugEventBase {\n type: \"agent_complete\";\n agentId: string;\n outputLength: number;\n totalTokens: number;\n inputTokens: number;\n outputTokens: number;\n durationMs: number;\n modelId?: string;\n /** Truncated output text (max 5000 chars) */\n output?: string;\n}\n\n/** Agent error event */\nexport interface AgentErrorEvent extends DebugEventBase {\n type: \"agent_error\";\n agentId: string;\n errorMessage: string;\n durationMs: number;\n}\n\n/** Agent retry event */\nexport interface AgentRetryEvent extends DebugEventBase {\n type: \"agent_retry\";\n agentId: string;\n attempt: number;\n errorMessage: string;\n delayMs: number;\n}\n\n/** Guardrail check event */\nexport interface GuardrailCheckEvent extends DebugEventBase {\n type: \"guardrail_check\";\n guardrailName: string;\n guardrailType: \"input\" | \"output\" | \"toolCall\";\n passed: boolean;\n reason?: string;\n durationMs: number;\n}\n\n/** Constraint evaluate event */\nexport interface ConstraintEvaluateEvent extends DebugEventBase {\n type: \"constraint_evaluate\";\n constraintId: string;\n fired: boolean;\n}\n\n/** Resolver start event */\nexport interface ResolverStartEvent extends DebugEventBase {\n type: \"resolver_start\";\n resolverId: string;\n requirementType: string;\n}\n\n/** Resolver complete event */\nexport interface ResolverCompleteEvent extends DebugEventBase {\n type: \"resolver_complete\";\n resolverId: string;\n durationMs: number;\n}\n\n/** Resolver error event */\nexport interface ResolverErrorEvent extends DebugEventBase {\n type: \"resolver_error\";\n resolverId: string;\n errorMessage: string;\n durationMs: number;\n}\n\n/** Approval request event */\nexport interface ApprovalRequestEvent extends DebugEventBase {\n type: \"approval_request\";\n requestId: string;\n approvalType: \"tool_call\" | \"output\" | \"handoff\";\n}\n\n/** Approval response event */\nexport interface ApprovalResponseEvent extends DebugEventBase {\n type: \"approval_response\";\n requestId: string;\n approved: boolean;\n reason?: string;\n}\n\n/** Handoff start event */\nexport interface HandoffStartEvent extends DebugEventBase {\n type: \"handoff_start\";\n fromAgent: string;\n toAgent: string;\n}\n\n/** Handoff complete event */\nexport interface HandoffCompleteEvent extends DebugEventBase {\n type: \"handoff_complete\";\n fromAgent: string;\n toAgent: string;\n durationMs: number;\n}\n\n/** Pattern start event */\nexport interface PatternStartEvent extends DebugEventBase {\n type: \"pattern_start\";\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n /** All handler IDs in this pattern (agents + tasks) */\n handlers?: string[];\n /** Which handler IDs are tasks (rest are agents) */\n taskIds?: string[];\n}\n\n/** Pattern complete event */\nexport interface PatternCompleteEvent extends DebugEventBase {\n type: \"pattern_complete\";\n patternId: string;\n patternType:\n | \"parallel\"\n | \"sequential\"\n | \"supervisor\"\n | \"dag\"\n | \"reflect\"\n | \"race\"\n | \"debate\"\n | \"goal\";\n durationMs: number;\n error?: string;\n}\n\n/** DAG node update event */\nexport interface DagNodeUpdateEvent extends DebugEventBase {\n type: \"dag_node_update\";\n nodeId: string;\n status: DagNodeStatus;\n deps?: string[];\n}\n\n/** Breakpoint hit event */\nexport interface BreakpointHitEvent extends DebugEventBase {\n type: \"breakpoint_hit\";\n breakpointId: string;\n breakpointType: string;\n label?: string;\n}\n\n/** Breakpoint resumed event */\nexport interface BreakpointResumedEvent extends DebugEventBase {\n type: \"breakpoint_resumed\";\n breakpointId: string;\n modified: boolean;\n skipped: boolean;\n}\n\n/** Derivation update event */\nexport interface DerivationUpdateEvent extends DebugEventBase {\n type: \"derivation_update\";\n derivationId: string;\n valueType: string;\n}\n\n/** Scratchpad update event */\nexport interface ScratchpadUpdateEvent extends DebugEventBase {\n type: \"scratchpad_update\";\n keys: string[];\n}\n\n/** Reflection iteration event */\nexport interface ReflectionIterationEvent extends DebugEventBase {\n type: \"reflection_iteration\";\n iteration: number;\n passed: boolean;\n score?: number;\n durationMs: number;\n producerTokens: number;\n evaluatorTokens: number;\n}\n\n/** Race start event */\nexport interface RaceStartEvent extends DebugEventBase {\n type: \"race_start\";\n patternId: string;\n agents: string[];\n}\n\n/** Race winner event */\nexport interface RaceWinnerEvent extends DebugEventBase {\n type: \"race_winner\";\n patternId: string;\n winnerId: string;\n durationMs: number;\n}\n\n/** Race cancelled event */\nexport interface RaceCancelledEvent extends DebugEventBase {\n type: \"race_cancelled\";\n patternId: string;\n cancelledIds: string[];\n reason: \"winner_found\" | \"timeout\" | \"all_failed\";\n}\n\n/** Debate round event — emitted after each round's judgement */\nexport interface DebateRoundEvent extends DebugEventBase {\n type: \"debate_round\";\n patternId: string;\n round: number;\n totalRounds: number;\n winnerId: string;\n score?: number;\n agentCount: number;\n}\n\n/** Reroute debug event recorded when self-healing reroutes to an alternate agent */\nexport interface RerouteDebugEvent extends DebugEventBase {\n type: \"reroute\";\n agentId: string;\n from: string;\n to: string;\n reason: string;\n}\n\n/** Checkpoint save event */\nexport interface CheckpointSaveEvent extends DebugEventBase {\n type: \"checkpoint_save\";\n checkpointId: string;\n patternType: string;\n step: number;\n}\n\n/** Checkpoint restore event */\nexport interface CheckpointRestoreEvent extends DebugEventBase {\n type: \"checkpoint_restore\";\n checkpointId: string;\n patternType: string;\n step: number;\n}\n\n/** Task start event */\nexport interface TaskStartEvent extends DebugEventBase {\n type: \"task_start\";\n taskId: string;\n label: string;\n description?: string;\n inputLength: number;\n}\n\n/** Task complete event */\nexport interface TaskCompleteEvent extends DebugEventBase {\n type: \"task_complete\";\n taskId: string;\n label: string;\n durationMs: number;\n}\n\n/** Task error event */\nexport interface TaskErrorEvent extends DebugEventBase {\n type: \"task_error\";\n taskId: string;\n label: string;\n error: string;\n durationMs: number;\n attempt?: number;\n}\n\n/** Task progress event */\nexport interface TaskProgressEvent extends DebugEventBase {\n type: \"task_progress\";\n taskId: string;\n label: string;\n percent: number;\n message?: string;\n}\n\n/** Goal step event — emitted for each agent invocation within a goal step */\nexport interface GoalStepEvent extends DebugEventBase {\n type: \"goal_step\";\n agentId: string;\n step: number;\n nodeId: string;\n satisfaction: number;\n satisfactionDelta: number;\n}\n\n/** Union of all debug event types */\nexport type DebugEvent =\n | AgentStartEvent\n | AgentCompleteEvent\n | AgentErrorEvent\n | AgentRetryEvent\n | GuardrailCheckEvent\n | ConstraintEvaluateEvent\n | ResolverStartEvent\n | ResolverCompleteEvent\n | ResolverErrorEvent\n | ApprovalRequestEvent\n | ApprovalResponseEvent\n | HandoffStartEvent\n | HandoffCompleteEvent\n | PatternStartEvent\n | PatternCompleteEvent\n | DagNodeUpdateEvent\n | BreakpointHitEvent\n | BreakpointResumedEvent\n | DerivationUpdateEvent\n | ScratchpadUpdateEvent\n | ReflectionIterationEvent\n | RaceStartEvent\n | RaceWinnerEvent\n | RaceCancelledEvent\n | DebateRoundEvent\n | RerouteDebugEvent\n | CheckpointSaveEvent\n | CheckpointRestoreEvent\n | TaskStartEvent\n | TaskCompleteEvent\n | TaskErrorEvent\n | TaskProgressEvent\n | GoalStepEvent;\n\n// ============================================================================\n// Self-Healing Types\n// ============================================================================\n\n/** Health state for an agent stored in facts */\nexport interface AgentHealthState {\n circuitState: \"CLOSED\" | \"OPEN\" | \"HALF_OPEN\";\n healthScore: number;\n lastUpdated: number;\n}\n\n/** Reroute event fired when an agent is rerouted */\nexport interface RerouteEvent {\n originalAgent: string;\n reroutedTo: string;\n reason: string;\n timestamp: number;\n}\n\n/** Health monitor configuration */\nexport interface HealthMonitorConfig {\n /** Rolling window for metrics (ms). @default 60000 */\n windowMs?: number;\n /** Weights for health score computation (must sum to ~1.0) */\n weights?: {\n /** Weight for success rate (0-1). @default 0.5 */\n successRate?: number;\n /** Weight for latency (0-1). @default 0.3 */\n latency?: number;\n /** Weight for circuit state (0-1). @default 0.2 */\n circuitState?: number;\n };\n /** Max latency considered \"normal\" (ms). @default 5000 */\n maxNormalLatencyMs?: number;\n /** Max events per agent before FIFO eviction. @default 1000 */\n maxEventsPerAgent?: number;\n}\n\n/** Self-healing configuration for single-agent orchestrator */\nexport interface SelfHealingConfig {\n /** Fallback runners to try in order when primary CB is open */\n fallbackRunners?: AgentRunner[];\n /** Fallback agent to try when all runners fail */\n fallbackAgent?: AgentLike;\n /** Circuit breaker config for primary runner */\n circuitBreaker?: AgentCircuitBreakerConfig;\n /** Health score below which to trigger reroute. @default 30 */\n healthThreshold?: number;\n /** Behavior when all fallbacks exhausted */\n degradation?: \"reject\" | \"fallback-response\";\n /** Static response to return when degradation is \"fallback-response\" */\n fallbackResponse?: unknown;\n /** Callback when reroute occurs */\n onReroute?: (event: RerouteEvent) => void;\n}\n\n/** Self-healing configuration for multi-agent orchestrator */\nexport interface MultiAgentSelfHealingConfig {\n /** Default circuit breaker config for agents without their own */\n circuitBreakerDefaults?: AgentCircuitBreakerConfig;\n /** Health score below which to trigger reroute. @default 30 */\n healthThreshold?: number;\n /** Explicit equivalency groups (group name → agent IDs) */\n equivalencyGroups?: Record<string, string[]>;\n /** Use capability matching for implicit equivalency. @default true */\n useCapabilities?: boolean;\n /** Strategy for selecting equivalent agent */\n selectionStrategy?: \"healthiest\" | \"round-robin\";\n /** Behavior when all equivalents are down */\n degradation?: \"reject\" | \"fallback-response\";\n /** Static response for \"fallback-response\" degradation */\n fallbackResponse?: unknown;\n /** Callback when reroute occurs */\n onReroute?: (event: RerouteEvent) => void;\n /** Callback when agent health changes */\n onHealthChange?: (event: {\n agentId: string;\n oldScore: number;\n newScore: number;\n }) => void;\n /** Health monitor configuration */\n healthMonitor?: HealthMonitorConfig;\n}\n\n/** Circuit breaker config for AI agent self-healing (simplified subset of core CircuitBreakerConfig) */\nexport interface AgentCircuitBreakerConfig {\n /** Number of failures before opening. @default 5 */\n failureThreshold?: number;\n /** Time before trying half-open (ms). @default 30000 */\n resetTimeoutMs?: number;\n /** Successes needed to close from half-open. @default 2 */\n halfOpenSuccesses?: number;\n /** State change callback */\n onStateChange?: (from: string, to: string) => void;\n}\n\n/** Internal key for health state in coordinator facts */\nexport const HEALTH_KEY = \"__agentHealth\" as const;\n\n/** Breakpoint state stored in bridge schema — canonical definition in breakpoints.ts */\nexport type BreakpointState = BreakpointStateFromBreakpoints;\n\n// ============================================================================\n// Cross-Agent Derivation Types\n// ============================================================================\n\n/** Snapshot of all agent states for cross-agent derivations */\nexport interface CrossAgentSnapshot {\n agents: Record<\n string,\n {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n lastInput?: string;\n lastOutput?: unknown;\n lastError?: string;\n runCount: number;\n totalTokens: number;\n }\n >;\n coordinator: { globalTokens: number; status: string };\n scratchpad?: Record<string, unknown>;\n}\n\n/** Function that computes a derived value from a cross-agent snapshot */\nexport type CrossAgentDerivationFn<T = unknown> = (\n snapshot: CrossAgentSnapshot,\n) => T;\n\n// ============================================================================\n// Shared Scratchpad Types\n// ============================================================================\n\n/** Internal key for scratchpad fact on coordinator module */\nexport const SCRATCHPAD_KEY = \"__scratchpad\" as const;\n\n/** Shared scratchpad interface for multi-agent collaboration */\nexport interface Scratchpad<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n get<K extends keyof T>(key: K): T[K];\n set<K extends keyof T>(key: K, value: T[K]): void;\n /** Check if a key exists in the scratchpad */\n has<K extends keyof T>(key: K): boolean;\n /** Delete a key from the scratchpad */\n delete<K extends keyof T>(key: K): void;\n update(values: Partial<T>): void;\n getAll(): T;\n subscribe(\n keys: (keyof T)[],\n callback: (key: keyof T, value: unknown) => void,\n ): () => void;\n onChange(callback: (key: string, value: unknown) => void): () => void;\n reset(): void;\n}\n\n// ============================================================================\n// Goal Pattern Types\n// ============================================================================\n\n/** A node in a goal execution pattern */\nexport interface GoalNode {\n /** Handler ID — agent or task registered on the orchestrator */\n handler: string;\n /** Fact keys this node can produce */\n produces: string[];\n /** Fact keys this node needs (must be satisfied before running) */\n requires?: string[];\n /** Allow re-run if input facts change after completion */\n allowRerun?: boolean;\n /** Priority for selection when multiple nodes are ready. Higher = first */\n priority?: number;\n /** Build the input string from current facts */\n buildInput?: (facts: Record<string, unknown>) => string;\n /** Extract output facts from the agent's result */\n extractOutput?: (result: RunResult<unknown>) => Record<string, unknown>;\n}\n\n/** Goal step metrics */\nexport interface GoalStepMetrics {\n step: number;\n durationMs: number;\n nodesRun: string[];\n factsProduced: string[];\n satisfaction: number;\n satisfactionDelta: number;\n tokensConsumed: number;\n}\n\n/** Goal progress metrics */\nexport interface GoalMetrics {\n satisfaction: number;\n progressRate: number;\n estimatedStepsRemaining: number | null;\n decelerating: boolean;\n}\n\n/** Agent selection strategy for goal pattern */\nexport interface AgentSelectionStrategy {\n /**\n * Select which ready agents to run this step.\n *\n * @param readyAgents - Agent IDs whose `requires` are satisfied\n * @param metrics - Per-agent performance metrics (runs, avgSatisfactionDelta, tokens)\n * @param goalMetrics - Global goal progress metrics. Built-in strategies use per-agent\n * metrics only; this parameter enables custom strategies that account for overall goal\n * progress (e.g., switching to cheaper agents as satisfaction approaches 1.0).\n */\n select: (\n readyAgents: string[],\n metrics: Record<\n string,\n { runs: number; avgSatisfactionDelta: number; tokens: number }\n >,\n goalMetrics: GoalMetrics,\n ) => string[];\n}\n\n/** Relaxation context passed to custom relaxation strategies */\nexport interface RelaxationContext {\n step: number;\n facts: Record<string, unknown>;\n metrics: GoalMetrics;\n completedNodes: Set<string>;\n failedNodes: Map<string, number>;\n}\n\n/** Relaxation strategy for when goal pursuit stalls */\nexport type RelaxationStrategy =\n | { type: \"allow_rerun\"; nodes: string[] }\n | { type: \"alternative_nodes\"; nodes: GoalNode[] }\n | { type: \"inject_facts\"; facts: Record<string, unknown> }\n | { type: \"accept_partial\" }\n | {\n type: \"custom\";\n apply: (context: RelaxationContext) => void | Promise<void>;\n };\n\n/** Relaxation tier — progressively applied when goal pursuit stalls */\nexport interface RelaxationTier {\n label: string;\n /** Steps of no progress before applying. @default 3 */\n afterStallSteps?: number;\n strategy: RelaxationStrategy;\n}\n\n/** Record of a relaxation event */\nexport interface RelaxationRecord {\n step: number;\n tierIndex: number;\n label: string;\n strategy: RelaxationStrategy[\"type\"];\n}\n\n/** Goal execution pattern — declare desired state, let the runtime resolve */\nexport interface GoalPattern<T = unknown> {\n type: \"goal\";\n /** Nodes with produces/requires declarations */\n nodes: Record<string, GoalNode>;\n /** Goal condition — when this returns true, the goal is achieved */\n when: (facts: Record<string, unknown>) => boolean;\n /** Quantitative satisfaction: 0.0 to 1.0. Enables progress tracking.\n * If omitted, binary: 0.0 when when() is false, 1.0 when true. */\n satisfaction?: (facts: Record<string, unknown>) => number;\n /** Max goal steps. @default 50 */\n maxSteps?: number;\n /** Extract final result from achieved facts */\n extract?: (facts: Record<string, unknown>) => T;\n /** Timeout in ms. @default 300000 */\n timeout?: number;\n /** Abort signal */\n signal?: AbortSignal;\n /** Agent selection strategy. @default \"all-ready\" */\n selectionStrategy?: AgentSelectionStrategy;\n /** Relaxation tiers — progressively applied when goal pursuit stalls */\n relaxation?: RelaxationTier[];\n /** Lifecycle hooks */\n onStep?: (\n step: number,\n facts: Record<string, unknown>,\n readyAgents: string[],\n ) => void;\n onStall?: (step: number, metrics: GoalMetrics) => void;\n /** Checkpoint configuration for mid-execution fault tolerance */\n checkpoint?: PatternCheckpointConfig;\n}\n\n/** Result of a goal pattern execution */\nexport interface GoalResult<T = unknown> {\n /** Whether the when() condition was satisfied */\n achieved: boolean;\n /** Final value (from extract, or raw facts) */\n result: T;\n /** Final facts state */\n facts: Record<string, unknown>;\n /** Nodes that ran, in execution order */\n executionOrder: string[];\n /** Per-node results */\n nodeResults: Record<string, RunResult<unknown>>;\n /** Total goal steps taken */\n steps: number;\n /** Total tokens consumed */\n totalTokens: number;\n /** Total duration (ms) */\n durationMs: number;\n /** Per-step metrics (satisfaction, nodes run, etc.) */\n stepMetrics: GoalStepMetrics[];\n /** Relaxation events applied */\n relaxations: RelaxationRecord[];\n /** Error message if goal was not achieved */\n error?: string;\n}\n\n// ============================================================================\n// Pattern Checkpoint Types (Universal)\n// ============================================================================\n\n/** Universal checkpoint configuration for all execution patterns */\nexport interface PatternCheckpointConfig {\n /** Save a checkpoint every N steps/rounds/iterations. @default 5 */\n everyN?: number;\n /** Checkpoint store. Uses the orchestrator's store if not provided. */\n store?: import(\"./checkpoint.js\").CheckpointStore;\n /** Label prefix for checkpoints. @default pattern type name */\n labelPrefix?: string;\n /** Conditional: only save when this returns true */\n when?: (context: CheckpointContext) => boolean;\n}\n\n/** Context passed to conditional checkpoint predicates */\nexport interface CheckpointContext {\n /** Current step/round/iteration number */\n step: number;\n /** Pattern type identifier */\n patternType: string;\n /** Pattern-specific facts (goal only) */\n facts?: Record<string, unknown>;\n /** Satisfaction score 0-1 (goal only) */\n satisfaction?: number;\n}\n\nexport type GoalCheckpointConfig = PatternCheckpointConfig;\n\n// ---- Common checkpoint state fields ----\n\n/** Common fields present on all pattern checkpoint states */\nexport interface PatternCheckpointBase {\n /** Checkpoint format version */\n version: 1;\n /** Unique ID */\n id: string;\n /** ISO timestamp */\n createdAt: string;\n /** User label */\n label?: string;\n /** Pattern ID */\n patternId: string;\n /** Total expected steps/rounds/iterations (null for unbounded) */\n stepsTotal?: number | null;\n}\n\n// ---- Per-pattern checkpoint states ----\n\n/** Checkpoint state for sequential pattern */\nexport interface SequentialCheckpointState extends PatternCheckpointBase {\n type: \"sequential\";\n /** Next agent index to run */\n step: number;\n /** Current input for the next agent */\n currentInput: string;\n /** Results collected so far (output + tokens) */\n results: Array<{ agentId: string; output: unknown; totalTokens: number }>;\n}\n\n/** Checkpoint state for supervisor pattern */\nexport interface SupervisorCheckpointState extends PatternCheckpointBase {\n type: \"supervisor\";\n /** Next round number */\n round: number;\n /** Last supervisor output */\n supervisorOutput: unknown;\n /** Worker results so far */\n workerResults: Array<{ output: unknown; totalTokens: number }>;\n /** Current input to supervisor */\n currentInput: string;\n}\n\n/** Checkpoint state for reflect pattern */\nexport interface ReflectCheckpointState extends PatternCheckpointBase {\n type: \"reflect\";\n /** Next iteration number */\n iteration: number;\n /** Current effective input */\n effectiveInput: string;\n /** Iteration history */\n history: Array<{\n iteration: number;\n passed: boolean;\n score?: number;\n feedback?: string;\n durationMs: number;\n producerTokens: number;\n evaluatorTokens: number;\n }>;\n /** Producer outputs so far */\n producerOutputs: Array<{ output: unknown; score?: number }>;\n /** Last producer output */\n lastProducerOutput: unknown | null;\n}\n\n/** Checkpoint state for debate pattern */\nexport interface DebateCheckpointState extends PatternCheckpointBase {\n type: \"debate\";\n /** Next round number */\n round: number;\n /** Current input for the round */\n currentInput: string;\n /** Completed rounds */\n rounds: Array<{\n proposals: Array<{ agentId: string; output: unknown }>;\n judgement: { winnerId: string; feedback?: string; score?: number };\n }>;\n /** Last winning agent ID */\n lastWinnerId: string;\n /** Last winning output */\n lastWinnerOutput: unknown;\n /** Tokens consumed so far */\n tokensConsumed: number;\n}\n\n/** Checkpoint state for DAG pattern */\nexport interface DagCheckpointState extends PatternCheckpointBase {\n type: \"dag\";\n /** Per-node statuses */\n statuses: Record<string, DagNodeStatus>;\n /** Per-node outputs */\n outputs: Record<string, unknown>;\n /** Per-node errors */\n errors: Record<string, string>;\n /** Number of completed nodes */\n completedCount: number;\n /** Full results (output + tokens per node) */\n nodeResults: Record<string, { output: unknown; totalTokens: number }>;\n /** Original input */\n input: string;\n}\n\n/** Serializable mid-goal state for save/resume */\nexport interface GoalCheckpointState extends PatternCheckpointBase {\n /** Pattern type discriminator */\n type: \"goal\";\n /** Current step */\n step: number;\n /** Current facts snapshot */\n facts: Record<string, unknown>;\n /** Completed node IDs */\n completedNodes: string[];\n /** Failed node IDs with consecutive failure counts */\n failedNodes: Record<string, number>;\n /** Node input hashes (for allowRerun detection) */\n nodeInputHashes: Record<string, string>;\n /** Per-node results (serialized — output only, not the full RunResult) */\n nodeOutputs: Record<string, { output: unknown; totalTokens: number }>;\n /** Execution order so far */\n executionOrder: string[];\n /** Step metrics collected so far */\n stepMetrics: GoalStepMetrics[];\n /** Relaxations applied so far */\n relaxations: RelaxationRecord[];\n /** Applied relaxation tier index */\n appliedRelaxationTiers: number;\n /** Stall step counter */\n stallSteps: number;\n /** Last satisfaction value */\n lastSatisfaction: number;\n /** Per-agent metrics */\n agentMetrics: Record<\n string,\n { runs: number; totalDelta: number; tokens: number }\n >;\n}\n\n/** Discriminated union of all pattern checkpoint states */\nexport type PatternCheckpointState =\n | SequentialCheckpointState\n | SupervisorCheckpointState\n | ReflectCheckpointState\n | DebateCheckpointState\n | DagCheckpointState\n | GoalCheckpointState;\n\n// ---- Checkpoint utilities ----\n\n/** Progress computed from a checkpoint state */\nexport interface CheckpointProgress {\n /** 0-100 percentage complete */\n percentage: number;\n /** Steps/rounds/iterations completed */\n stepsCompleted: number;\n /** Total expected steps (null for unbounded patterns) */\n stepsTotal: number | null;\n /** Tokens consumed so far */\n tokensConsumed: number;\n /** Estimated tokens remaining (null when unknowable) */\n estimatedTokensRemaining: number | null;\n /** Estimated steps remaining (null when unknowable) */\n estimatedStepsRemaining: number | null;\n}\n\n/** Diff between two checkpoint states */\nexport interface CheckpointDiff {\n /** Pattern type */\n patternType: string;\n /** Step/round/iteration difference */\n stepDelta: number;\n /** Token difference */\n tokensDelta: number;\n /** Fact changes (goal only) */\n facts?: {\n added: string[];\n removed: string[];\n changed: Array<{ key: string; before: unknown; after: unknown }>;\n };\n /** Nodes completed between checkpoints (DAG/goal) */\n nodesCompleted?: string[];\n}\n\n/** Bridge schema for orchestrator (internal plumbing — types cast to bypass t.object constraint) */\nexport const orchestratorBridgeSchema = {\n facts: {\n [AGENT_KEY]: t.object() as unknown as SchemaType<AgentState>,\n [APPROVAL_KEY]: t.object() as unknown as SchemaType<ApprovalState>,\n [CONVERSATION_KEY]: t.array() as unknown as SchemaType<Message[]>,\n [TOOL_CALLS_KEY]: t.array() as unknown as SchemaType<ToolCall[]>,\n [BREAKPOINT_KEY]: t.object() as unknown as SchemaType<BreakpointState>,\n },\n derivations: {},\n events: {},\n requirements: {},\n} satisfies ModuleSchema;\n","/**\n * Shared bridge accessors and constraint/resolver converters.\n *\n * Used by both `agent-orchestrator.ts` (single-agent) and `multi-agent-orchestrator.ts` (multi-agent)\n * to read/write the bridge schema facts (agent state, approval, conversation,\n * tool calls) and convert user-facing OrchestratorConstraint/OrchestratorResolver\n * types into the Directive core format.\n *\n * Extracted to prevent drift between the two orchestrator implementations.\n * Internal module — not a public subpath export.\n *\n * @module\n */\n\nimport type { Requirement } from \"@directive-run/core\";\nimport {\n getBridgeFact,\n setBridgeFact,\n} from \"@directive-run/core/adapter-utils\";\n\nimport type {\n AgentHealthState,\n AgentLike,\n AgentState,\n ApprovalState,\n BreakpointState,\n Message,\n OrchestratorConstraint,\n OrchestratorResolver,\n OrchestratorResolverContext,\n OrchestratorState,\n RunOptions,\n RunResult,\n ToolCall,\n} from \"./types.js\";\n\nimport {\n AGENT_KEY,\n APPROVAL_KEY,\n BREAKPOINT_KEY,\n CONVERSATION_KEY,\n HEALTH_KEY,\n TOOL_CALLS_KEY,\n} from \"./types.js\";\n\n// ============================================================================\n// Bridge Accessors\n// ============================================================================\n\n/** @internal Read the agent state from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getAgentState(facts: any): AgentState {\n return getBridgeFact<AgentState>(facts, AGENT_KEY);\n}\n\n/** @internal Write the agent state to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setAgentState(facts: any, state: AgentState): void {\n setBridgeFact(facts, AGENT_KEY, state);\n}\n\n/** @internal Read the approval state from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getApprovalState(facts: any): ApprovalState {\n return getBridgeFact<ApprovalState>(facts, APPROVAL_KEY);\n}\n\n/** @internal Write the approval state to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setApprovalState(facts: any, state: ApprovalState): void {\n setBridgeFact(facts, APPROVAL_KEY, state);\n}\n\n/** @internal Read the conversation messages from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getConversation(facts: any): Message[] {\n return getBridgeFact<Message[]>(facts, CONVERSATION_KEY);\n}\n\n/** @internal Write conversation messages to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setConversation(facts: any, messages: Message[]): void {\n setBridgeFact(facts, CONVERSATION_KEY, messages);\n}\n\n/** @internal Read the tool calls from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getToolCalls(facts: any): ToolCall[] {\n return getBridgeFact<ToolCall[]>(facts, TOOL_CALLS_KEY);\n}\n\n/** @internal Write tool calls to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setToolCalls(facts: any, toolCalls: ToolCall[]): void {\n setBridgeFact(facts, TOOL_CALLS_KEY, toolCalls);\n}\n\n/** @internal Read the health state map from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getHealthState(facts: any): Record<string, AgentHealthState> {\n return getBridgeFact<Record<string, AgentHealthState>>(facts, HEALTH_KEY);\n}\n\n/** @internal Write the health state map to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setHealthState(\n facts: any,\n state: Record<string, AgentHealthState>,\n): void {\n setBridgeFact(facts, HEALTH_KEY, state);\n}\n\n/** @internal Read the breakpoint state from bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getBreakpointState(facts: any): BreakpointState {\n return getBridgeFact<BreakpointState>(facts, BREAKPOINT_KEY);\n}\n\n/** @internal Write the breakpoint state to bridge facts. */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setBreakpointState(facts: any, state: BreakpointState): void {\n setBridgeFact(facts, BREAKPOINT_KEY, state);\n}\n\n/** Get full orchestrator state from facts */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getOrchestratorState(facts: any): OrchestratorState {\n return {\n agent: getAgentState(facts),\n approval: getApprovalState(facts),\n conversation: getConversation(facts),\n toolCalls: getToolCalls(facts),\n };\n}\n\n// ============================================================================\n// Constraint/Resolver Converters\n// ============================================================================\n\n/** Convert user-facing OrchestratorConstraint objects into Directive core constraint format */\n// biome-ignore lint/suspicious/noExplicitAny: Constraint types are complex\nexport function convertOrchestratorConstraints<\n F extends Record<string, unknown>,\n>(constraints: Record<string, OrchestratorConstraint<F>>): Record<string, any> {\n // biome-ignore lint/suspicious/noExplicitAny: Result type is complex\n const result: Record<string, any> = Object.create(null);\n\n for (const [id, constraint] of Object.entries(constraints)) {\n result[id] = {\n priority: constraint.priority ?? 0,\n // biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n when: (facts: any) => {\n const state = getOrchestratorState(facts);\n const combinedFacts = { ...facts, ...state } as unknown as F &\n OrchestratorState;\n\n return constraint.when(combinedFacts);\n },\n // biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n require: (facts: any) => {\n const state = getOrchestratorState(facts);\n const combinedFacts = { ...facts, ...state } as unknown as F &\n OrchestratorState;\n\n return typeof constraint.require === \"function\"\n ? constraint.require(combinedFacts)\n : constraint.require;\n },\n };\n }\n\n return result;\n}\n\n/** Convert user-facing OrchestratorResolver objects into Directive core resolver format */\n// biome-ignore lint/suspicious/noExplicitAny: Resolver types are complex\nexport function convertOrchestratorResolvers<F extends Record<string, unknown>>(\n resolvers: Record<string, OrchestratorResolver<F, Requirement>>,\n runAgentWithGuardrails: <T>(\n agent: AgentLike,\n input: string,\n currentFacts: F & OrchestratorState,\n opts?: RunOptions,\n ) => Promise<RunResult<T>>,\n // biome-ignore lint/suspicious/noExplicitAny: Facts getter type varies\n getSystemFacts: () => any,\n): Record<string, any> {\n // biome-ignore lint/suspicious/noExplicitAny: Result type is complex\n const result: Record<string, any> = Object.create(null);\n\n for (const [id, resolver] of Object.entries(resolvers)) {\n result[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = { ...context.facts, ...state } as unknown as F &\n OrchestratorState;\n\n const orchestratorContext: OrchestratorResolverContext<F> = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runAgentWithGuardrails<T>(\n agent,\n input,\n getOrchestratorState(getSystemFacts()) as unknown as F &\n OrchestratorState,\n opts,\n );\n },\n signal: context.signal,\n };\n await resolver.resolve(req, orchestratorContext);\n },\n };\n }\n\n return result;\n}\n","/**\n * Agent Reflection / Self-Improvement\n *\n * Quality-based iteration: agent produces output → evaluator checks it → retry\n * with feedback until pass. Works with any AgentRunner.\n *\n * Shipped with aggressive safeguards to prevent silent budget burn:\n * - maxIterations default: 2 (conservative)\n * - Dev-mode warning for maxIterations > 3\n * - onIteration fires on every iteration (observable by default)\n * - Token usage accumulated across iterations\n *\n * @example\n * ```typescript\n * import { withReflection } from '@directive-run/ai';\n *\n * const reflective = withReflection(runner, {\n * evaluate: (output) => ({\n * passed: output.includes('conclusion'),\n * feedback: 'Missing conclusion section',\n * }),\n * maxIterations: 2,\n * });\n *\n * const result = await reflective(agent, 'Write a report');\n * ```\n */\n\nimport type { AgentLike, AgentRunner, RunOptions, RunResult } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Context passed to the reflection evaluator */\nexport interface ReflectionContext {\n input: string;\n /** 0-based iteration number */\n iteration: number;\n result: RunResult<unknown>;\n history: ReflectionEvaluation[];\n}\n\n/** Result of a reflection evaluation */\nexport interface ReflectionEvaluation {\n passed: boolean;\n feedback?: string;\n /** Quality score from 0 to 1, optional */\n score?: number;\n}\n\n/** Evaluator function for reflection */\nexport type ReflectionEvaluator<T = unknown> = (\n output: T,\n context: ReflectionContext,\n) => ReflectionEvaluation | Promise<ReflectionEvaluation>;\n\n/** Configuration for the reflection wrapper */\nexport interface ReflectionConfig<T = unknown> {\n /** Evaluator function — decides if the output is acceptable */\n evaluate: ReflectionEvaluator<T>;\n /** Maximum iterations (including the first). Default: 2 (conservative) */\n maxIterations?: number;\n /** Build the retry input from original input + feedback */\n buildRetryInput?: (\n input: string,\n feedback: string,\n iteration: number,\n ) => string;\n /** Callback on each iteration */\n onIteration?: (event: {\n iteration: number;\n passed: boolean;\n feedback?: string;\n score?: number;\n durationMs: number;\n }) => void;\n /** Behavior when maxIterations exhausted. Default: \"accept-last\" */\n onExhausted?: \"accept-last\" | \"throw\";\n /** Stop early if budget remaining < threshold (tokens). Works with withBudget. */\n budgetThreshold?: number;\n}\n\n// ============================================================================\n// Error\n// ============================================================================\n\n/** Error thrown when reflection iterations are exhausted and onExhausted is \"throw\" */\nexport class ReflectionExhaustedError extends Error {\n readonly iterations: number;\n readonly history: ReflectionEvaluation[];\n readonly lastResult: RunResult<unknown>;\n readonly totalTokens: number;\n\n constructor(options: {\n iterations: number;\n history: ReflectionEvaluation[];\n lastResult: RunResult<unknown>;\n totalTokens: number;\n }) {\n super(\n `[Directive Reflection] Exhausted ${options.iterations} iterations without passing evaluation. ` +\n `Last feedback: ${options.history[options.history.length - 1]?.feedback ?? \"(none)\"}`,\n );\n this.name = \"ReflectionExhaustedError\";\n this.iterations = options.iterations;\n this.history = options.history;\n this.lastResult = options.lastResult;\n this.totalTokens = options.totalTokens;\n }\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/** Default retry input format */\nfunction defaultBuildRetryInput(\n input: string,\n feedback: string,\n _iteration: number,\n): string {\n return `${input}\\n\\nFeedback on your previous response:\\n${feedback}\\n\\nPlease improve your response.`;\n}\n\n/**\n * Wrap an AgentRunner with reflection (self-improvement) logic.\n *\n * The returned runner runs the agent, evaluates the output, and retries with\n * feedback if the evaluation fails — up to `maxIterations` times.\n *\n * @example\n * ```typescript\n * const reflective = withReflection(runner, {\n * evaluate: (output) => ({\n * passed: typeof output === 'string' && output.length > 100,\n * feedback: 'Response too short, please elaborate',\n * score: Math.min(1, (output as string).length / 200),\n * }),\n * maxIterations: 3,\n * onExhausted: 'accept-last',\n * });\n * ```\n */\nexport function withReflection<T = unknown>(\n runner: AgentRunner,\n config: ReflectionConfig<T>,\n): AgentRunner {\n const maxIterations = config.maxIterations ?? 2;\n const buildRetryInput = config.buildRetryInput ?? defaultBuildRetryInput;\n const onExhausted = config.onExhausted ?? \"accept-last\";\n\n if (maxIterations < 1) {\n throw new Error(\"[Directive Reflection] maxIterations must be >= 1\");\n }\n\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\" &&\n maxIterations > 3\n ) {\n console.warn(\n \"[Directive Reflection] maxIterations > 3 rarely improves quality. \" +\n \"Consider using maxIterations <= 3 to avoid unbounded token burn.\",\n );\n }\n\n return async <R>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n ): Promise<RunResult<R>> => {\n const history: ReflectionEvaluation[] = [];\n let effectiveInput = input;\n let accumulatedTokens = 0;\n let lastResult: RunResult<unknown> | null = null;\n\n for (let iteration = 0; iteration < maxIterations; iteration++) {\n const iterationStart = Date.now();\n\n // Run the agent\n const result = await runner(agent, effectiveInput, options);\n lastResult = result;\n accumulatedTokens += result.totalTokens;\n\n // Evaluate the output\n const context: ReflectionContext = {\n input,\n iteration,\n result,\n history: [...history],\n };\n\n const evaluation = await config.evaluate(result.output as T, context);\n history.push(evaluation);\n\n const durationMs = Date.now() - iterationStart;\n\n // Fire callback\n try {\n config.onIteration?.({\n iteration,\n passed: evaluation.passed,\n feedback: evaluation.feedback,\n score: evaluation.score,\n durationMs,\n });\n } catch {\n // callback error is non-fatal\n }\n\n if (evaluation.passed) {\n // Return with accumulated tokens\n return {\n ...result,\n totalTokens: accumulatedTokens,\n } as RunResult<R>;\n }\n\n // Check budget threshold\n if (\n config.budgetThreshold !== undefined &&\n accumulatedTokens >= config.budgetThreshold\n ) {\n break;\n }\n\n // Build retry input for next iteration (unless this is the last)\n if (iteration < maxIterations - 1 && evaluation.feedback) {\n effectiveInput = buildRetryInput(input, evaluation.feedback, iteration);\n }\n }\n\n // Exhausted all iterations\n if (onExhausted === \"throw\") {\n throw new ReflectionExhaustedError({\n iterations: maxIterations,\n history,\n lastResult: lastResult!,\n totalTokens: accumulatedTokens,\n });\n }\n\n // \"accept-last\" — return the last result with accumulated tokens\n return {\n ...lastResult!,\n totalTokens: accumulatedTokens,\n } as RunResult<R>;\n };\n}\n","/**\n * Human-in-the-Loop Breakpoints — Pause/inspect/modify/resume at arbitrary execution points.\n *\n * Separate from approvals (which are safety gates for tool calls). Breakpoints are\n * general-purpose pause points for debugging, inspection, and input modification.\n *\n * Zero overhead when breakpoints array is empty — guard at each insertion point.\n *\n * @module\n */\n\nimport {\n getBridgeFact,\n setBridgeFact,\n} from \"@directive-run/core/adapter-utils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Breakpoint types for single-agent orchestrator */\nexport type BreakpointType =\n | \"pre_input_guardrails\"\n | \"pre_agent_run\"\n | \"pre_output_guardrails\"\n | \"post_run\";\n\n/** Extended breakpoint types for multi-agent orchestrator */\nexport type MultiAgentBreakpointType =\n | BreakpointType\n | \"pre_handoff\"\n | \"pre_pattern_step\";\n\n/** Breakpoint configuration */\nexport interface BreakpointConfig<T extends string = BreakpointType> {\n type: T;\n when?: (context: BreakpointContext) => boolean;\n label?: string;\n}\n\n/** Context available when a breakpoint fires */\nexport interface BreakpointContext {\n agentId: string;\n agentName: string;\n input: string;\n state: Record<string, unknown>;\n breakpointType: string;\n patternId?: string;\n handoff?: { fromAgent: string; toAgent: string };\n}\n\n/** A pending breakpoint request */\nexport interface BreakpointRequest {\n id: string;\n type: string;\n agentId: string;\n input: string;\n label?: string;\n requestedAt: number;\n}\n\n/** Modifications that can be applied when resuming a breakpoint */\nexport interface BreakpointModifications {\n input?: string;\n skip?: boolean;\n}\n\n/** Breakpoint state stored in facts */\nexport interface BreakpointState {\n pending: BreakpointRequest[];\n resolved: string[];\n cancelled: string[];\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n// Import from types.ts — single source of truth\nimport { BREAKPOINT_KEY } from \"./types.js\";\nexport { BREAKPOINT_KEY };\n\n/** Maximum number of resolved/cancelled breakpoint IDs to retain (FIFO eviction) */\nexport const MAX_BREAKPOINT_HISTORY = 200;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nlet breakpointCounter = 0;\n\n/** Create a unique breakpoint ID */\nexport function createBreakpointId(): string {\n return `bp_${Date.now().toString(36)}_${(++breakpointCounter).toString(36)}`;\n}\n\n/**\n * Match a breakpoint configuration against the current execution point.\n * Returns the matching config or null if no match.\n */\nexport function matchBreakpoint<T extends string>(\n breakpoints: BreakpointConfig<T>[],\n type: T,\n context: BreakpointContext,\n): BreakpointConfig<T> | null {\n for (const bp of breakpoints) {\n if (bp.type !== type) {\n continue;\n }\n\n // If no condition, always match\n if (!bp.when) {\n return bp;\n }\n\n // Evaluate condition (catch errors — user-provided predicate)\n try {\n if (bp.when(context)) {\n return bp;\n }\n } catch {\n // Predicate error — skip this breakpoint\n }\n }\n\n return null;\n}\n\n/** Get breakpoint state from facts */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function getBreakpointState(facts: any): BreakpointState {\n return getBridgeFact<BreakpointState>(facts, BREAKPOINT_KEY);\n}\n\n/** Set breakpoint state in facts */\n// biome-ignore lint/suspicious/noExplicitAny: Facts type varies\nexport function setBreakpointState(facts: any, state: BreakpointState): void {\n setBridgeFact(facts, BREAKPOINT_KEY, state);\n}\n\n/** Create initial breakpoint state */\nexport function createInitialBreakpointState(): BreakpointState {\n return {\n pending: [],\n resolved: [],\n cancelled: [],\n };\n}\n","/**\n * Persistent Checkpointing — Serialize/restore full orchestrator state.\n *\n * Enables long-running workflows, process restarts, and fork-and-replay by\n * capturing a complete snapshot of orchestrator state at rest.\n *\n * @module\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Checkpoint local state for single-agent orchestrators */\nexport interface SingleAgentCheckpointLocalState {\n type: \"single\";\n}\n\n/** Checkpoint local state for multi-agent orchestrators */\nexport interface MultiAgentCheckpointLocalState {\n type: \"multi\";\n globalTokenCount: number;\n globalStatus: \"idle\" | \"paused\";\n agentStates: Record<\n string,\n {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n lastInput?: string;\n lastOutput?: unknown;\n lastError?: string;\n runCount: number;\n totalTokens: number;\n }\n >;\n handoffCounter: number;\n pendingHandoffs: unknown[];\n handoffResults: unknown[];\n roundRobinCounters: Record<string, number> | null;\n /** Serialized task states (task run functions are closures, not serializable) */\n taskStates?: Record<string, { lastOutput?: string; lastError?: string }>;\n}\n\n/** Union of local state types */\nexport type CheckpointLocalState =\n | SingleAgentCheckpointLocalState\n | MultiAgentCheckpointLocalState;\n\n/** Full checkpoint data */\nexport interface Checkpoint {\n version: 1;\n id: string;\n createdAt: string;\n label?: string;\n systemExport: string;\n timelineExport: string | null;\n localState: CheckpointLocalState;\n memoryExport: unknown | null;\n orchestratorType: \"single\" | \"multi\";\n /** Associated time-travel snapshot ID */\n snapshotId?: number;\n /** Arbitrary metadata */\n metadata?: Record<string, unknown>;\n}\n\n/** Checkpoint store interface */\nexport interface CheckpointStore {\n save(checkpoint: Checkpoint): Promise<string>;\n load(checkpointId: string): Promise<Checkpoint | null>;\n list(): Promise<Array<{ id: string; label?: string; createdAt: string }>>;\n delete(checkpointId: string): Promise<boolean>;\n clear(): Promise<void>;\n /** Prune old checkpoints based on retention policy. Returns number pruned. */\n prune(): Promise<number>;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst BLOCKED_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n]);\n\n/** Create a unique checkpoint ID */\nexport function createCheckpointId(): string {\n const timestamp = Date.now().toString(36);\n const random = crypto.randomUUID().slice(0, 8);\n\n return `ckpt_${timestamp}_${random}`;\n}\n\n/** Validate that an unknown value is a valid Checkpoint */\nexport function validateCheckpoint(data: unknown): data is Checkpoint {\n if (!data || typeof data !== \"object\") {\n return false;\n }\n\n // Prototype pollution defense\n for (const key of Object.keys(data)) {\n if (BLOCKED_KEYS.has(key)) {\n return false;\n }\n }\n\n const obj = data as Record<string, unknown>;\n\n if (obj.version !== 1) {\n return false;\n }\n\n if (typeof obj.id !== \"string\" || obj.id.length === 0) {\n return false;\n }\n\n if (typeof obj.createdAt !== \"string\") {\n return false;\n }\n\n if (typeof obj.systemExport !== \"string\") {\n return false;\n }\n\n if (obj.timelineExport !== null && typeof obj.timelineExport !== \"string\") {\n return false;\n }\n\n if (!obj.localState || typeof obj.localState !== \"object\") {\n return false;\n }\n\n // Validate localState prototype pollution\n for (const key of Object.keys(obj.localState)) {\n if (BLOCKED_KEYS.has(key)) {\n return false;\n }\n }\n\n const localState = obj.localState as Record<string, unknown>;\n if (localState.type !== \"single\" && localState.type !== \"multi\") {\n return false;\n }\n\n if (obj.orchestratorType !== \"single\" && obj.orchestratorType !== \"multi\") {\n return false;\n }\n\n return true;\n}\n\n// ============================================================================\n// InMemoryCheckpointStore\n// ============================================================================\n\n/** Options for InMemoryCheckpointStore */\nexport interface InMemoryCheckpointStoreOptions {\n /** Maximum checkpoints to retain before FIFO eviction. @default 100 */\n maxCheckpoints?: number;\n /** Time-based retention: prune checkpoints older than this (ms). @default Infinity */\n retentionMs?: number;\n /** When true, labeled checkpoints are exempt from auto-prune. @default false */\n preserveLabeled?: boolean;\n}\n\n/**\n * In-memory checkpoint store with FIFO eviction and time-based retention.\n *\n * @example\n * ```typescript\n * const store = new InMemoryCheckpointStore({\n * maxCheckpoints: 50,\n * retentionMs: 3600000, // 1 hour\n * preserveLabeled: true,\n * });\n *\n * const id = await store.save(checkpoint);\n * const pruned = await store.prune();\n * ```\n */\nexport class InMemoryCheckpointStore implements CheckpointStore {\n private readonly store = new Map<string, Checkpoint>();\n private readonly order: string[] = [];\n private readonly maxCheckpoints: number;\n private readonly retentionMs: number;\n private readonly preserveLabeled: boolean;\n\n constructor(options?: InMemoryCheckpointStoreOptions) {\n this.maxCheckpoints = options?.maxCheckpoints ?? 100;\n this.retentionMs = options?.retentionMs ?? Number.POSITIVE_INFINITY;\n this.preserveLabeled = options?.preserveLabeled ?? false;\n\n if (!Number.isFinite(this.maxCheckpoints) || this.maxCheckpoints < 1) {\n throw new Error(\n `[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`,\n );\n }\n }\n\n async save(checkpoint: Checkpoint): Promise<string> {\n if (!validateCheckpoint(checkpoint)) {\n throw new Error(\"[Directive Checkpoint] Invalid checkpoint data\");\n }\n\n // FIFO eviction (respects preserveLabeled)\n while (this.order.length >= this.maxCheckpoints) {\n const evicted = this.evictOldest();\n if (!evicted) {\n break;\n }\n }\n\n // Deduplicate: remove existing order entry if updating\n const existingIdx = this.order.indexOf(checkpoint.id);\n if (existingIdx >= 0) {\n this.order.splice(existingIdx, 1);\n }\n\n this.store.set(checkpoint.id, checkpoint);\n this.order.push(checkpoint.id);\n\n return checkpoint.id;\n }\n\n async load(checkpointId: string): Promise<Checkpoint | null> {\n return this.store.get(checkpointId) ?? null;\n }\n\n async list(): Promise<\n Array<{ id: string; label?: string; createdAt: string }>\n > {\n return this.order.map((id) => {\n const cp = this.store.get(id)!;\n\n return { id: cp.id, label: cp.label, createdAt: cp.createdAt };\n });\n }\n\n async delete(checkpointId: string): Promise<boolean> {\n if (!this.store.has(checkpointId)) {\n return false;\n }\n\n this.store.delete(checkpointId);\n const index = this.order.indexOf(checkpointId);\n if (index >= 0) {\n this.order.splice(index, 1);\n }\n\n return true;\n }\n\n async clear(): Promise<void> {\n this.store.clear();\n this.order.length = 0;\n }\n\n async prune(): Promise<number> {\n if (!Number.isFinite(this.retentionMs)) {\n return 0;\n }\n\n const cutoff = Date.now() - this.retentionMs;\n let pruned = 0;\n\n // Iterate from oldest to newest\n const toRemove: string[] = [];\n for (const id of this.order) {\n const cp = this.store.get(id);\n if (!cp) {\n continue;\n }\n\n const createdAtMs = new Date(cp.createdAt).getTime();\n if (createdAtMs >= cutoff) {\n break; // Remaining are newer\n }\n\n // Skip labeled checkpoints if preserveLabeled\n if (this.preserveLabeled && cp.label) {\n continue;\n }\n\n toRemove.push(id);\n }\n\n for (const id of toRemove) {\n this.store.delete(id);\n const idx = this.order.indexOf(id);\n if (idx >= 0) {\n this.order.splice(idx, 1);\n }\n pruned++;\n }\n\n return pruned;\n }\n\n /** Evict the oldest non-labeled checkpoint. Returns true if one was evicted. */\n private evictOldest(): boolean {\n if (this.preserveLabeled) {\n // Find first non-labeled checkpoint\n for (let i = 0; i < this.order.length; i++) {\n const id = this.order[i]!;\n const cp = this.store.get(id);\n if (cp && !cp.label) {\n this.order.splice(i, 1);\n this.store.delete(id);\n\n return true;\n }\n }\n\n // All are labeled — evict oldest anyway to make room\n }\n\n const oldest = this.order.shift();\n if (oldest) {\n this.store.delete(oldest);\n\n return true;\n }\n\n return false;\n }\n}\n","/**\n * Agent Streaming - Token-by-token streaming with backpressure support\n *\n * Provides async iterators for streaming agent responses with guardrail evaluation\n * on partial output and configurable backpressure handling.\n *\n * @example\n * ```typescript\n * import { createAgentOrchestrator } from '@directive-run/ai';\n * import { createStreamingRunner } from '@directive-run/ai';\n *\n * const { stream, result } = orchestrator.runStream(agent, input);\n *\n * for await (const chunk of stream) {\n * if (chunk.type === 'token') process.stdout.write(chunk.data);\n * if (chunk.type === 'guardrail_triggered') handleGuardrail(chunk);\n * }\n *\n * const finalResult = await result;\n * ```\n */\n\nimport type { OrchestratorStreamChunk } from \"./agent-orchestrator.js\";\nimport type {\n AgentLike,\n GuardrailFn,\n Message,\n OutputGuardrailData,\n RunResult,\n StreamingCallbackRunner,\n} from \"./types.js\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Default buffer size for streaming backpressure */\nexport const DEFAULT_BUFFER_SIZE = 1000;\n\n/** Default interval (in tokens) between guardrail checks during streaming */\nexport const DEFAULT_GUARDRAIL_CHECK_INTERVAL = 50;\n\n/** Default toxicity threshold for toxicity streaming guardrail */\nexport const DEFAULT_TOXICITY_THRESHOLD = 0.8;\n\n// ============================================================================\n// Stream Event Types\n// ============================================================================\n\n/** Token chunk from streaming response */\nexport interface TokenChunk {\n type: \"token\";\n data: string;\n /** Running total of tokens received */\n tokenCount: number;\n}\n\n/** Tool execution started */\nexport interface ToolStartChunk {\n type: \"tool_start\";\n tool: string;\n toolCallId: string;\n arguments: string;\n}\n\n/** Tool execution completed */\nexport interface ToolEndChunk {\n type: \"tool_end\";\n tool: string;\n toolCallId: string;\n result: string;\n}\n\n/** Message added to conversation */\nexport interface MessageChunk {\n type: \"message\";\n message: Message;\n}\n\n/** Guardrail was triggered during streaming */\nexport interface GuardrailTriggeredChunk {\n type: \"guardrail_triggered\";\n guardrailName: string;\n reason: string;\n /** Partial output at the time of trigger */\n partialOutput: string;\n /** Whether the stream was stopped */\n stopped: boolean;\n}\n\n/** Progress update for UI feedback */\nexport interface ProgressChunk {\n type: \"progress\";\n phase: \"starting\" | \"generating\" | \"tool_calling\" | \"finishing\";\n /** Percentage complete (0-100), if known */\n percent?: number;\n /** Human-readable status message */\n message?: string;\n}\n\n/** Stream completed */\nexport interface DoneChunk {\n type: \"done\";\n totalTokens: number;\n duration: number;\n /** Number of tokens dropped due to backpressure (only with 'drop' strategy) */\n droppedTokens: number;\n}\n\n/** Error during streaming */\nexport interface ErrorChunk {\n type: \"error\";\n error: Error;\n /** Partial output before error */\n partialOutput?: string;\n}\n\n/** Union of all stream chunk types */\nexport type StreamChunk =\n | TokenChunk\n | ToolStartChunk\n | ToolEndChunk\n | MessageChunk\n | GuardrailTriggeredChunk\n | ProgressChunk\n | DoneChunk\n | ErrorChunk;\n\n// ============================================================================\n// Streaming Run Types\n// ============================================================================\n\n/** Backpressure strategy when consumer is slow */\nexport type BackpressureStrategy =\n /** Drop tokens when buffer is full (lossy, fast) */\n | \"drop\"\n /** Block producer when buffer is full (lossless, may slow response) */\n | \"block\"\n /** Buffer all tokens (lossless, uses memory) */\n | \"buffer\";\n\n/** Streaming run options */\nexport interface StreamRunOptions {\n /** Maximum turns before stopping */\n maxTurns?: number;\n /** Abort signal for cancellation */\n signal?: AbortSignal;\n /** Backpressure strategy. @default \"buffer\" */\n backpressure?: BackpressureStrategy;\n /** Buffer size for 'drop' and 'block' strategies. @default 1000 */\n bufferSize?: number;\n /** Evaluate guardrails every N tokens. @default 50 */\n guardrailCheckInterval?: number;\n /** Stop stream on guardrail trigger. @default true */\n stopOnGuardrail?: boolean | ((chunk: GuardrailTriggeredChunk) => boolean);\n}\n\n/** Stream run function type (mirrors OpenAI Agents streaming API) */\nexport type StreamRunner = <T = unknown>(\n agent: AgentLike,\n input: string,\n options?: StreamRunOptions,\n) => StreamingRunResult<T>;\n\n/** Result from a streaming run */\nexport interface StreamingRunResult<T = unknown> {\n /** Async iterator for streaming chunks */\n stream: AsyncIterable<StreamChunk>;\n /** Promise that resolves to the final result */\n result: Promise<RunResult<T>>;\n /** Abort the stream */\n abort: () => void;\n}\n\n// ============================================================================\n// Streaming Guardrail Types\n// ============================================================================\n\n/** Streaming guardrail that evaluates partial output */\nexport interface StreamingGuardrail {\n /** Unique name for this guardrail */\n name: string;\n /** Check partial output (called every guardrailCheckInterval tokens) */\n check: (\n partialOutput: string,\n tokenCount: number,\n ) => StreamingGuardrailResult | Promise<StreamingGuardrailResult>;\n /** Whether to stop the stream on failure. @default true */\n stopOnFail?: boolean;\n}\n\n/** Result from a streaming guardrail check */\nexport interface StreamingGuardrailResult {\n passed: boolean;\n reason?: string;\n /** Severity level for UI display */\n severity?: \"warning\" | \"error\" | \"critical\";\n /** Warning message (guardrail passed but wants to emit a warning) */\n warning?: string;\n}\n\n// ============================================================================\n// Stream Buffer Implementation\n// ============================================================================\n\n/** Internal buffer for managing backpressure */\nclass StreamBuffer<T> {\n private buffer: T[] = [];\n private maxSize: number;\n private strategy: BackpressureStrategy;\n private pullWaiters: Array<(value: T | null) => void> = [];\n private pushWaiters: Array<() => void> = []; // For block strategy - queue-based, not polling\n private closed = false;\n private droppedCount = 0;\n\n constructor(\n strategy: BackpressureStrategy = \"buffer\",\n maxSize = DEFAULT_BUFFER_SIZE,\n ) {\n this.strategy = strategy;\n this.maxSize = maxSize;\n }\n\n async push(item: T): Promise<boolean> {\n if (this.closed) {\n return false;\n }\n\n // If there's a pull waiter, send directly\n const pullWaiter = this.pullWaiters.shift();\n if (pullWaiter) {\n pullWaiter(item);\n return true;\n }\n\n // Handle based on strategy\n if (this.buffer.length >= this.maxSize) {\n switch (this.strategy) {\n case \"drop\":\n this.droppedCount++;\n return false;\n case \"block\":\n // Queue-based blocking (no polling) - wait for consumer to pull\n await new Promise<void>((resolve) => {\n this.pushWaiters.push(resolve);\n });\n if (this.closed) {\n return false;\n }\n break;\n case \"buffer\":\n // Just push anyway (may use lots of memory)\n break;\n }\n }\n\n this.buffer.push(item);\n return true;\n }\n\n async pull(): Promise<T | null> {\n // Notify a blocked producer that space is available\n const pushWaiter = this.pushWaiters.shift();\n if (pushWaiter) {\n pushWaiter();\n }\n\n if (this.buffer.length > 0) {\n return this.buffer.shift()!;\n }\n\n if (this.closed) {\n return null;\n }\n\n // Wait for next item\n return new Promise<T | null>((resolve) => {\n this.pullWaiters.push(resolve);\n });\n }\n\n close(): void {\n this.closed = true;\n // Resolve all waiting consumers with null\n for (const waiter of this.pullWaiters) {\n waiter(null);\n }\n this.pullWaiters = [];\n // Unblock all waiting producers\n for (const waiter of this.pushWaiters) {\n waiter();\n }\n this.pushWaiters = [];\n }\n\n getDroppedCount(): number {\n return this.droppedCount;\n }\n}\n\n// ============================================================================\n// Streaming Runner Implementation\n// ============================================================================\n\n/**\n * Create a streaming runner that wraps a base run function.\n * This is used internally by the orchestrator but can be used standalone.\n *\n * @param baseRunner - The underlying non-streaming runner\n * @param options - Configuration options\n */\nexport function createStreamingRunner(\n baseRunner: StreamingCallbackRunner,\n options: {\n streamingGuardrails?: StreamingGuardrail[];\n } = {},\n): StreamRunner {\n const { streamingGuardrails = [] } = options;\n\n return <T>(\n agent: AgentLike,\n input: string,\n runOptions: StreamRunOptions = {},\n ): StreamingRunResult<T> => {\n const {\n signal,\n backpressure = \"buffer\",\n bufferSize = DEFAULT_BUFFER_SIZE,\n guardrailCheckInterval = DEFAULT_GUARDRAIL_CHECK_INTERVAL,\n stopOnGuardrail = true,\n } = runOptions;\n\n // Validate configuration\n if (\n guardrailCheckInterval <= 0 ||\n !Number.isFinite(guardrailCheckInterval)\n ) {\n throw new Error(\n `[Directive Streaming] guardrailCheckInterval must be a positive number, got ${guardrailCheckInterval}`,\n );\n }\n\n const buffer = new StreamBuffer<StreamChunk>(backpressure, bufferSize);\n const abortController = new AbortController();\n let partialOutput = \"\";\n let tokenCount = 0;\n let stopped = false;\n const startTime = Date.now();\n\n // Combine external abort signal with internal one (with proper cleanup)\n let abortHandler: (() => void) | undefined;\n if (signal) {\n abortHandler = () => abortController.abort();\n signal.addEventListener(\"abort\", abortHandler);\n }\n\n // Cleanup function to prevent memory leaks\n const cleanup = () => {\n if (abortHandler && signal) {\n signal.removeEventListener(\"abort\", abortHandler);\n }\n };\n\n // Check streaming guardrails\n async function checkGuardrails(): Promise<GuardrailTriggeredChunk | null> {\n for (const guardrail of streamingGuardrails) {\n try {\n const result = await guardrail.check(partialOutput, tokenCount);\n if (!result.passed) {\n const shouldStop = guardrail.stopOnFail !== false;\n const chunk: GuardrailTriggeredChunk = {\n type: \"guardrail_triggered\",\n guardrailName: guardrail.name,\n reason: result.reason ?? \"Guardrail check failed\",\n partialOutput,\n stopped: shouldStop,\n };\n\n await buffer.push(chunk);\n\n if (shouldStop) {\n const stopFn =\n typeof stopOnGuardrail === \"function\"\n ? stopOnGuardrail\n : () => stopOnGuardrail;\n if (stopFn(chunk)) {\n stopped = true;\n abortController.abort();\n }\n }\n\n return chunk;\n }\n } catch {\n // Guardrail errors during streaming are silently swallowed —\n // the guardrail result itself carries error info when applicable.\n }\n }\n return null;\n }\n\n // Run the agent and pipe to buffer\n const resultPromise = (async (): Promise<RunResult<T>> => {\n await buffer.push({\n type: \"progress\",\n phase: \"starting\",\n message: \"Starting agent\",\n });\n\n try {\n const result = await baseRunner(agent, input, {\n signal: abortController.signal,\n onToken: async (token) => {\n if (stopped) return;\n\n tokenCount++;\n partialOutput += token;\n\n await buffer.push({\n type: \"token\",\n data: token,\n tokenCount,\n });\n\n // Check guardrails periodically\n if (tokenCount % guardrailCheckInterval === 0) {\n await checkGuardrails();\n }\n },\n onToolStart: async (tool, id, args) => {\n await buffer.push({\n type: \"progress\",\n phase: \"tool_calling\",\n message: `Calling ${tool}`,\n });\n await buffer.push({\n type: \"tool_start\",\n tool,\n toolCallId: id,\n arguments: args,\n });\n },\n onToolEnd: async (tool, id, result) => {\n await buffer.push({\n type: \"tool_end\",\n tool,\n toolCallId: id,\n result,\n });\n await buffer.push({\n type: \"progress\",\n phase: \"generating\",\n message: \"Continuing generation\",\n });\n },\n onMessage: async (message) => {\n await buffer.push({ type: \"message\", message });\n },\n });\n\n // Final guardrail check\n await checkGuardrails();\n\n const duration = Date.now() - startTime;\n const droppedTokens = buffer.getDroppedCount();\n await buffer.push({\n type: \"done\",\n totalTokens: result.totalTokens,\n duration,\n droppedTokens,\n });\n\n buffer.close();\n return result as RunResult<T>;\n } catch (error) {\n const errorChunk: ErrorChunk = {\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error)),\n partialOutput: partialOutput || undefined,\n };\n await buffer.push(errorChunk);\n buffer.close();\n throw error;\n } finally {\n // Always cleanup abort signal listener to prevent memory leaks\n cleanup();\n }\n })();\n\n // Create async iterator\n const stream: AsyncIterable<StreamChunk> = {\n [Symbol.asyncIterator](): AsyncIterator<StreamChunk> {\n return {\n async next(): Promise<IteratorResult<StreamChunk>> {\n const chunk = await buffer.pull();\n if (chunk === null) {\n return { done: true, value: undefined };\n }\n return { done: false, value: chunk };\n },\n };\n },\n };\n\n return {\n stream,\n result: resultPromise,\n abort: () => abortController.abort(),\n };\n };\n}\n\n// ============================================================================\n// Built-in Streaming Guardrails\n// ============================================================================\n\n/**\n * Create a streaming guardrail that detects toxic content.\n *\n * @example\n * ```typescript\n * const toxicityGuardrail = createToxicityStreamingGuardrail({\n * threshold: 0.9,\n * checkFn: async (text) => myToxicityModel.score(text),\n * });\n * ```\n */\nexport function createToxicityStreamingGuardrail(options: {\n /** Toxicity scoring function (returns 0-1) */\n checkFn: (text: string) => number | Promise<number>;\n /** Threshold above which content is flagged. @default 0.8 */\n threshold?: number;\n /** Stop the stream on detection. @default true */\n stopOnFail?: boolean;\n}): StreamingGuardrail {\n const {\n checkFn,\n threshold = DEFAULT_TOXICITY_THRESHOLD,\n stopOnFail = true,\n } = options;\n\n return {\n name: \"toxicity-streaming\",\n stopOnFail,\n async check(partialOutput) {\n const score = await checkFn(partialOutput);\n if (score > threshold) {\n return {\n passed: false,\n reason: `Toxicity score ${score.toFixed(2)} exceeds threshold ${threshold}`,\n severity: \"critical\",\n };\n }\n return { passed: true };\n },\n };\n}\n\n/**\n * Create a streaming guardrail that limits output length.\n *\n * @example\n * ```typescript\n * const lengthGuardrail = createLengthStreamingGuardrail({\n * maxTokens: 4000,\n * warnAt: 3500,\n * });\n * ```\n */\nexport function createLengthStreamingGuardrail(options: {\n /** Maximum tokens before stopping */\n maxTokens: number;\n /** Warn at this token count (optional) */\n warnAt?: number;\n /** Stop the stream on max. @default true */\n stopOnFail?: boolean;\n}): StreamingGuardrail {\n const { maxTokens, warnAt, stopOnFail = true } = options;\n\n // Per-instance flag: if this guardrail is shared across concurrent streams,\n // the warning fires only once globally. Create separate instances for independent warning per stream.\n let warned = false;\n\n return {\n name: \"length-streaming\",\n stopOnFail,\n check(_partialOutput, tokenCount) {\n if (tokenCount >= maxTokens) {\n return {\n passed: false,\n reason: `Output exceeded maximum length of ${maxTokens} tokens`,\n severity: \"error\",\n };\n }\n\n if (warnAt && tokenCount >= warnAt && !warned) {\n warned = true;\n\n return {\n passed: true,\n warning: `Approaching maximum length: ${tokenCount}/${maxTokens} tokens`,\n severity: \"warning\",\n };\n }\n\n return { passed: true };\n },\n };\n}\n\n/**\n * Create a streaming guardrail that detects patterns (regex-based).\n *\n * @example\n * ```typescript\n * const piiGuardrail = createPatternStreamingGuardrail({\n * patterns: [\n * { regex: /\\b\\d{3}-\\d{2}-\\d{4}\\b/, name: 'SSN' },\n * { regex: /\\b\\d{16}\\b/, name: 'Credit Card' },\n * ],\n * stopOnFail: true,\n * });\n * ```\n */\nexport function createPatternStreamingGuardrail(options: {\n patterns: Array<{ regex: RegExp; name: string }>;\n stopOnFail?: boolean;\n}): StreamingGuardrail {\n const { patterns, stopOnFail = true } = options;\n\n return {\n name: \"pattern-streaming\",\n stopOnFail,\n check(partialOutput) {\n for (const { regex, name } of patterns) {\n regex.lastIndex = 0;\n if (regex.test(partialOutput)) {\n return {\n passed: false,\n reason: `Detected ${name} pattern in output`,\n severity: \"error\",\n };\n }\n }\n return { passed: true };\n },\n };\n}\n\n/**\n * Combine multiple streaming guardrails into one.\n *\n * @example\n * ```typescript\n * const combined = combineStreamingGuardrails([\n * createToxicityStreamingGuardrail({ ... }),\n * createLengthStreamingGuardrail({ ... }),\n * ]);\n * ```\n */\nexport function combineStreamingGuardrails(\n guardrails: StreamingGuardrail[],\n options: { name?: string; stopOnFirstFail?: boolean } = {},\n): StreamingGuardrail {\n const { name = \"combined-streaming\", stopOnFirstFail = true } = options;\n\n return {\n name,\n stopOnFail: stopOnFirstFail,\n async check(partialOutput, tokenCount) {\n const failures: string[] = [];\n for (const guardrail of guardrails) {\n const result = await guardrail.check(partialOutput, tokenCount);\n if (!result.passed) {\n if (stopOnFirstFail) {\n return {\n ...result,\n reason: `[${guardrail.name}] ${result.reason}`,\n };\n }\n failures.push(`[${guardrail.name}] ${result.reason ?? \"failed\"}`);\n }\n }\n if (failures.length > 0) {\n return { passed: false, reason: failures.join(\"; \") };\n }\n return { passed: true };\n },\n };\n}\n\n// ============================================================================\n// Output Guardrail Adapter\n// ============================================================================\n\n/**\n * Convert a regular output guardrail to a streaming guardrail.\n * Useful for reusing existing guardrails in streaming context.\n *\n * @example\n * ```typescript\n * const streamingPII = adaptOutputGuardrail(\n * \"pii-streaming\",\n * createPIIGuardrail({ redact: false }),\n * { checkInterval: 100 }\n * );\n * ```\n */\nexport function adaptOutputGuardrail(\n name: string,\n guardrail: GuardrailFn<OutputGuardrailData>,\n options: {\n /** Only run after this many tokens (optimization) */\n minTokens?: number;\n stopOnFail?: boolean;\n } = {},\n): StreamingGuardrail {\n const { minTokens = 0, stopOnFail = true } = options;\n\n return {\n name,\n stopOnFail,\n async check(partialOutput, tokenCount) {\n if (tokenCount < minTokens) {\n return { passed: true };\n }\n\n const result = await guardrail(\n {\n output: partialOutput,\n agentName: \"streaming\",\n input: \"\",\n messages: [],\n },\n {\n agentName: \"streaming\",\n input: \"\",\n facts: {},\n },\n );\n\n return {\n passed: result.passed,\n reason: result.reason,\n severity: result.passed ? undefined : \"error\",\n };\n },\n };\n}\n\n// ============================================================================\n// Stream Utilities\n// ============================================================================\n\n/**\n * Collect all tokens from a stream into a string.\n *\n * @example\n * ```typescript\n * const { stream, result } = orchestrator.runStream(agent, input);\n * const fullOutput = await collectTokens(stream);\n * ```\n */\nexport async function collectTokens(\n stream: AsyncIterable<StreamChunk>,\n): Promise<string> {\n let output = \"\";\n for await (const chunk of stream) {\n if (chunk.type === \"token\") {\n output += chunk.data;\n }\n }\n return output;\n}\n\n/**\n * Tap into a stream without consuming it.\n * Useful for logging or side effects.\n *\n * @example\n * ```typescript\n * const { stream } = orchestrator.runStream(agent, input);\n * const tapped = tapStream(stream, (chunk) => console.log(chunk));\n * for await (const chunk of tapped) { ... }\n * ```\n */\nexport async function* tapStream(\n stream: AsyncIterable<StreamChunk>,\n fn: (chunk: StreamChunk) => void | Promise<void>,\n): AsyncIterable<StreamChunk> {\n for await (const chunk of stream) {\n await fn(chunk);\n yield chunk;\n }\n}\n\n/**\n * Filter stream chunks by type.\n *\n * @example\n * ```typescript\n * const tokensOnly = filterStream(stream, ['token']);\n * ```\n */\nexport async function* filterStream<T extends StreamChunk[\"type\"]>(\n stream: AsyncIterable<StreamChunk>,\n types: T[],\n): AsyncIterable<Extract<StreamChunk, { type: T }>> {\n const typeSet = new Set(types);\n for await (const chunk of stream) {\n if (typeSet.has(chunk.type as T)) {\n yield chunk as Extract<StreamChunk, { type: T }>;\n }\n }\n}\n\n/**\n * Transform stream chunks.\n *\n * @example\n * ```typescript\n * const upperTokens = mapStream(stream, (chunk) => {\n * if (chunk.type === 'token') return { ...chunk, data: chunk.data.toUpperCase() };\n * return chunk;\n * });\n * ```\n */\nexport async function* mapStream<R>(\n stream: AsyncIterable<StreamChunk>,\n fn: (chunk: StreamChunk) => R | Promise<R>,\n): AsyncIterable<R> {\n for await (const chunk of stream) {\n yield await fn(chunk);\n }\n}\n\n// ============================================================================\n// Multiplexed Streaming (Parallel Agent Streams)\n// ============================================================================\n\n/** A multiplexed stream chunk tagged with the agent that produced it */\nexport interface MultiplexedStreamChunk {\n chunk: OrchestratorStreamChunk;\n agentId: string;\n}\n\n/** Result from a parallel streaming operation */\nexport interface MultiplexedStreamResult<T = unknown> {\n stream: AsyncIterable<MultiplexedStreamChunk>;\n results: Promise<RunResult<unknown>[]>;\n merge: Promise<T>;\n abort: () => void;\n /** Number of chunks dropped due to buffer overflow */\n getDroppedCount: () => number;\n}\n\n/** Maximum buffer size for multiplexed streams */\nconst MAX_MULTIPLEX_BUFFER = 10_000;\n\n/** A source stream with its agent ID */\ninterface TaggedSource {\n agentId: string;\n stream: AsyncIterable<OrchestratorStreamChunk>;\n}\n\n/**\n * Merge multiple async iterables into a single multiplexed stream,\n * tagging each chunk with its source agent ID.\n *\n * Race-based merge: pulls from all sources concurrently, emitting\n * chunks in arrival order. Error chunks from individual agents are\n * tagged and emitted (other agents continue).\n *\n * @example\n * ```typescript\n * const merged = mergeTaggedStreams([\n * { agentId: \"researcher\", stream: researchStream },\n * { agentId: \"writer\", stream: writerStream },\n * ]);\n *\n * for await (const { chunk, agentId } of merged) {\n * console.log(`[${agentId}]`, chunk);\n * }\n * ```\n */\n/** Result from mergeTaggedStreams */\nexport interface MergedTaggedStreamResult {\n stream: AsyncIterable<MultiplexedStreamChunk>;\n /** Number of chunks dropped due to buffer overflow */\n getDroppedCount: () => number;\n}\n\n/**\n * Merge multiple tagged async iterables into a single multiplexed stream.\n *\n * @param sources - Array of tagged source streams to merge.\n * @returns A merged stream result with a `getDroppedCount` accessor.\n */\nexport function mergeTaggedStreams(\n sources: TaggedSource[],\n): MergedTaggedStreamResult {\n // Guard: empty sources would hang forever since no consumer calls finish()\n if (sources.length === 0) {\n const emptyStream: AsyncIterable<MultiplexedStreamChunk> = {\n [Symbol.asyncIterator]() {\n const done = {\n done: true as const,\n value: undefined as unknown as MultiplexedStreamChunk,\n };\n\n return {\n async next() {\n return done;\n },\n async return() {\n return done;\n },\n };\n },\n };\n\n return { stream: emptyStream, getDroppedCount: () => 0 };\n }\n\n const buffer: MultiplexedStreamChunk[] = [];\n const waiters: Array<(item: MultiplexedStreamChunk | null) => void> = [];\n let activeSources = sources.length;\n let closed = false;\n let droppedCount = 0;\n\n function push(item: MultiplexedStreamChunk): void {\n if (closed) {\n return;\n }\n\n const waiter = waiters.shift();\n if (waiter) {\n waiter(item);\n\n return;\n }\n\n if (buffer.length < MAX_MULTIPLEX_BUFFER) {\n buffer.push(item);\n } else {\n droppedCount++;\n }\n }\n\n function finish(): void {\n activeSources--;\n if (activeSources <= 0) {\n closed = true;\n for (const waiter of waiters) {\n waiter(null);\n }\n waiters.length = 0;\n }\n }\n\n // Start consumers for each source\n for (const source of sources) {\n (async () => {\n try {\n for await (const chunk of source.stream) {\n push({ chunk, agentId: source.agentId });\n }\n } catch (error) {\n // Emit error as a tagged chunk\n push({\n chunk: {\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error)),\n },\n agentId: source.agentId,\n });\n } finally {\n finish();\n }\n })();\n }\n\n const stream: AsyncIterable<MultiplexedStreamChunk> = {\n [Symbol.asyncIterator](): AsyncIterator<MultiplexedStreamChunk> {\n return {\n async next(): Promise<IteratorResult<MultiplexedStreamChunk>> {\n if (buffer.length > 0) {\n return { done: false, value: buffer.shift()! };\n }\n\n if (closed) {\n return { done: true, value: undefined };\n }\n\n return new Promise<IteratorResult<MultiplexedStreamChunk>>(\n (resolve) => {\n waiters.push((item) => {\n if (item === null) {\n resolve({ done: true, value: undefined });\n } else {\n resolve({ done: false, value: item });\n }\n });\n },\n );\n },\n\n return(): Promise<IteratorResult<MultiplexedStreamChunk>> {\n // Stop accepting new chunks\n closed = true;\n buffer.length = 0;\n for (const waiter of waiters) {\n waiter(null);\n }\n waiters.length = 0;\n\n return Promise.resolve({ done: true, value: undefined });\n },\n };\n },\n };\n\n return {\n stream,\n getDroppedCount: () => droppedCount,\n };\n}\n","/**\n * P6: Structured Outputs — Schema validation with auto-retry for LLM responses.\n *\n * Turns unreliable text output into typed, validated data. Appends JSON schema\n * instructions to the system prompt and retries with error feedback on parse failure.\n *\n * Works with any Zod-compatible schema (any object with a `safeParse` method).\n *\n * @module\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n * import { withStructuredOutput, StructuredOutputError } from '@directive-run/ai';\n *\n * const SentimentSchema = z.object({\n * sentiment: z.enum([\"positive\", \"negative\", \"neutral\"]),\n * confidence: z.number().min(0).max(1),\n * });\n *\n * const runner = withStructuredOutput(baseRunner, {\n * schema: SentimentSchema,\n * maxRetries: 2,\n * });\n *\n * const result = await runner(agent, \"Analyze: I love this product!\");\n * // result.output is typed as { sentiment: string; confidence: number }\n * ```\n */\n\nimport type { AgentLike, AgentRunner, RunOptions, RunResult } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Zod-compatible schema duck type — any object with a `safeParse` method.\n *\n * This interface allows structured outputs to work with Zod, Valibot,\n * or any validation library that implements this pattern.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n *\n * // Zod schemas implement SafeParseable automatically\n * const schema = z.object({ name: z.string() });\n *\n * // Custom schema\n * const custom: SafeParseable<{ name: string }> = {\n * safeParse(value) {\n * if (typeof value === \"object\" && value && \"name\" in value) {\n * return { success: true, data: value as { name: string } };\n * }\n * return { success: false, error: { message: \"Missing name field\" } };\n * },\n * };\n * ```\n */\nexport interface SafeParseable<T = unknown> {\n safeParse(value: unknown): SafeParseResult<T>;\n /** Optional: schema description injected into the system prompt. */\n description?: string;\n}\n\nexport interface SafeParseResult<T> {\n success: boolean;\n data?: T;\n error?: { message?: string; issues?: Array<{ message: string }> };\n}\n\nexport interface StructuredOutputConfig<T = unknown> {\n /** Zod-compatible schema with safeParse. */\n schema: SafeParseable<T>;\n /** Max retries on parse/validation failure. @default 2 */\n maxRetries?: number;\n /** Custom JSON extractor. Default: finds first `{...}` or `[...]` in output. */\n extractJson?: (output: string) => unknown;\n /** Schema description to inject into system prompt. Auto-derived from schema.description if available. */\n schemaDescription?: string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Maximum output length to process (1MB). */\nconst MAX_EXTRACT_LENGTH = 1_048_576;\n\n/** Default JSON extractor — finds the first `{...}` or `[...]` in output. */\nexport function extractJsonFromOutput(output: string): unknown {\n if (output.length > MAX_EXTRACT_LENGTH) {\n throw new Error(\n `[Directive] Output too large for JSON extraction (${output.length} chars, max ${MAX_EXTRACT_LENGTH}).`,\n );\n }\n\n const trimmed = output.trim();\n\n // Try direct parse first\n try {\n return JSON.parse(trimmed);\n } catch {\n // Continue to extraction\n }\n\n // Try to find JSON object or array\n const objectStart = trimmed.indexOf(\"{\");\n const arrayStart = trimmed.indexOf(\"[\");\n\n let start: number;\n let openChar: string;\n let closeChar: string;\n\n if (objectStart === -1 && arrayStart === -1) {\n throw new Error(\"[Directive] No JSON object or array found in output\");\n }\n\n if (objectStart === -1) {\n start = arrayStart;\n openChar = \"[\";\n closeChar = \"]\";\n } else if (arrayStart === -1) {\n start = objectStart;\n openChar = \"{\";\n closeChar = \"}\";\n } else {\n start = Math.min(objectStart, arrayStart);\n openChar = start === objectStart ? \"{\" : \"[\";\n closeChar = start === objectStart ? \"}\" : \"]\";\n }\n\n // Find matching closing bracket\n let depth = 0;\n let inString = false;\n let escaped = false;\n\n for (let i = start; i < trimmed.length; i++) {\n const char = trimmed[i]!;\n\n if (escaped) {\n escaped = false;\n continue;\n }\n\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n\n if (char === '\"') {\n inString = !inString;\n continue;\n }\n\n if (inString) {\n continue;\n }\n\n if (char === openChar) {\n depth++;\n } else if (char === closeChar) {\n depth--;\n if (depth === 0) {\n const jsonStr = trimmed.slice(start, i + 1);\n\n try {\n return JSON.parse(jsonStr);\n } catch {\n // LLMs emit literal newlines inside JSON string values — escape them\n const sanitized = jsonStr.replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, (match) =>\n match\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\")\n .replace(/\\t/g, \"\\\\t\"),\n );\n\n return JSON.parse(sanitized);\n }\n }\n }\n }\n\n throw new Error(\"[Directive] No valid JSON found in output\");\n}\n\n/** Format validation errors for feedback. */\nfunction formatValidationError(\n error: SafeParseResult<unknown>[\"error\"],\n): string {\n if (!error) {\n return \"Validation failed\";\n }\n\n if (error.issues && error.issues.length > 0) {\n return error.issues.map((issue) => issue.message).join(\"; \");\n }\n\n return error.message ?? \"Validation failed\";\n}\n\n// ============================================================================\n// Wrapper\n// ============================================================================\n\n/**\n * Wrap an AgentRunner with structured output parsing and validation.\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n *\n * const SentimentSchema = z.object({\n * sentiment: z.enum([\"positive\", \"negative\", \"neutral\"]),\n * confidence: z.number().min(0).max(1),\n * });\n *\n * const runner = withStructuredOutput(baseRunner, {\n * schema: SentimentSchema,\n * maxRetries: 2,\n * });\n *\n * const result = await runner(agent, \"Analyze: I love this product!\");\n * // result.output is typed as { sentiment: string; confidence: number }\n * ```\n */\nexport function withStructuredOutput<T = unknown>(\n runner: AgentRunner,\n config: StructuredOutputConfig<T>,\n): AgentRunner {\n const {\n schema,\n maxRetries = 2,\n extractJson = extractJsonFromOutput,\n schemaDescription,\n } = config;\n\n // Validate config\n if (!Number.isFinite(maxRetries) || maxRetries < 0) {\n throw new Error(\n \"[Directive] withStructuredOutput: maxRetries must be a non-negative finite number.\",\n );\n }\n\n const schemaPrompt =\n schemaDescription ?? schema.description ?? \"the specified JSON schema\";\n\n // The returned runner produces `T` from the schema. We cast at the\n // boundary to satisfy the `AgentRunner` generic while keeping output type-safe.\n return async <_T = unknown>(\n agent: AgentLike,\n input: string,\n options?: RunOptions,\n ): Promise<RunResult<_T>> => {\n // Append JSON instruction to agent's system prompt\n const structuredAgent: AgentLike = {\n ...agent,\n instructions:\n (agent.instructions ?? \"\") +\n \"\\n\\nIMPORTANT: Respond with valid JSON matching \" +\n schemaPrompt +\n \". \" +\n \"Output ONLY the JSON object, no additional text or markdown formatting.\",\n };\n\n let lastResult: RunResult<unknown> | undefined;\n let lastError: string | undefined;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n // On retries, append error feedback as additional input\n const effectiveInput =\n attempt === 0\n ? input\n : `${input}\\n\\nYour previous response was not valid JSON. Error: ${lastError}\\nPlease try again with valid JSON only.`;\n\n const result = await runner(structuredAgent, effectiveInput, options);\n lastResult = result;\n\n // Try to extract and validate JSON\n const outputStr =\n typeof result.output === \"string\"\n ? result.output\n : JSON.stringify(result.output);\n\n try {\n const extracted = extractJson(outputStr);\n const parsed = schema.safeParse(extracted);\n\n if (parsed.success) {\n return {\n ...result,\n output: parsed.data as _T,\n };\n }\n\n lastError = formatValidationError(parsed.error);\n } catch (err) {\n lastError = err instanceof Error ? err.message : String(err);\n }\n }\n\n // All retries exhausted — throw with context\n throw new StructuredOutputError(\n `[Directive] Failed to get valid structured output after ${maxRetries + 1} attempts: ${lastError}`,\n lastResult,\n );\n };\n}\n\n/** Error thrown when structured output parsing fails after all retries. */\nexport class StructuredOutputError extends Error {\n readonly lastResult: RunResult<unknown> | undefined;\n\n constructor(message: string, lastResult?: RunResult<unknown>) {\n super(message);\n this.name = \"StructuredOutputError\";\n this.lastResult = lastResult;\n }\n}\n","// ============================================================================\n// Multi-Agent Orchestrator Utilities\n// ============================================================================\n//\n// Extracted from multi-agent-orchestrator.ts — pure utility functions and\n// classes that are independent of the orchestrator instance.\n// ============================================================================\n\nimport type { CheckpointStore } from \"./checkpoint.js\";\nimport type {\n MultiAgentOrchestrator,\n MultiAgentOrchestratorOptions,\n} from \"./orchestrator-types.js\";\nimport type {\n CheckpointDiff,\n CheckpointProgress,\n DagNode,\n GoalCheckpointState,\n PatternCheckpointState,\n} from \"./types.js\";\n\n// ============================================================================\n// Shallow Equality\n// ============================================================================\n\n/** Shallow structural equality for change detection (plain objects, arrays, and primitives) */\nexport function shallowEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (typeof a !== typeof b || a === null || b === null) {\n return false;\n }\n\n if (typeof a !== \"object\") {\n return false;\n }\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== (b as unknown[]).length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== (b as unknown[])[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (const key of aKeys) {\n if (aObj[key] !== bObj[key]) {\n return false;\n }\n }\n\n return true;\n}\n\n// ============================================================================\n// Async Semaphore\n// ============================================================================\n\n/**\n * Async semaphore for controlling concurrent access.\n * Uses a queue-based approach instead of polling for efficiency.\n *\n * @example\n * ```typescript\n * import { Semaphore } from '@directive-run/ai';\n *\n * const sem = new Semaphore(3); // Allow 3 concurrent operations\n *\n * async function doWork() {\n * const release = await sem.acquire();\n * try {\n * await performWork();\n * } finally {\n * release();\n * }\n * }\n * ```\n */\nexport class Semaphore {\n private count: number;\n private readonly maxPermits: number;\n private readonly queue: Array<{\n resolve: (release: () => void) => void;\n reject: (error: Error) => void;\n }> = [];\n\n constructor(max: number) {\n if (max < 1 || !Number.isFinite(max)) {\n throw new Error(\n `[Directive Semaphore] Invalid max permits: ${max}. Must be a finite number >= 1.`,\n );\n }\n this.maxPermits = max;\n this.count = max;\n }\n\n /** Create a one-shot release function that guards against double-release */\n private createReleaseFn(): () => void {\n let released = false;\n\n return () => {\n if (released) {\n return;\n }\n released = true;\n this.release();\n };\n }\n\n /** Acquire a permit, optionally with abort signal support */\n async acquire(signal?: AbortSignal): Promise<() => void> {\n if (signal?.aborted) {\n throw new Error(\"[Directive Semaphore] Aborted before acquiring permit\");\n }\n if (this.count > 0) {\n this.count--;\n\n return this.createReleaseFn();\n }\n\n return new Promise<() => void>((resolve, reject) => {\n let onAbort: (() => void) | undefined;\n\n const entry = {\n resolve: (releaseFn: () => void) => {\n if (onAbort && signal) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n resolve(releaseFn);\n },\n reject,\n };\n this.queue.push(entry);\n\n if (signal) {\n onAbort = () => {\n const idx = this.queue.indexOf(entry);\n if (idx >= 0) {\n this.queue.splice(idx, 1);\n reject(\n new Error(\n \"[Directive Semaphore] Aborted while waiting for permit\",\n ),\n );\n }\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n }\n\n /** Non-blocking acquire — returns null if no permits available */\n tryAcquire(): (() => void) | null {\n if (this.count > 0) {\n this.count--;\n\n return this.createReleaseFn();\n }\n\n return null;\n }\n\n private release(): void {\n this.count++;\n const next = this.queue.shift();\n if (next) {\n this.count--;\n next.resolve(this.createReleaseFn());\n }\n }\n\n /** Get current available permits */\n get available(): number {\n return this.count;\n }\n\n /** Get number of waiters in queue */\n get waiting(): number {\n return this.queue.length;\n }\n\n /** Get maximum permits */\n get max(): number {\n return this.maxPermits;\n }\n\n /** Reject all pending waiters with an error and reset permits */\n drain(): void {\n const err = new Error(\n \"[Directive Semaphore] Semaphore drained - all pending acquisitions rejected\",\n );\n const pending = this.queue.splice(0, this.queue.length);\n for (const waiter of pending) {\n waiter.reject(err);\n }\n this.count = this.maxPermits;\n }\n}\n\n// ============================================================================\n// Checkpoint Utility Functions\n// ============================================================================\n\n/**\n * Get the current step/round/iteration count from a pattern checkpoint state.\n *\n * Maps each pattern type to its natural progress counter: `step` for sequential\n * and goal, `round` for supervisor and debate, `iteration` for reflect, and\n * `completedCount` for DAG.\n *\n * @param state - The pattern checkpoint state to inspect.\n * @returns The current progress count for the pattern.\n */\nexport function getPatternStep(state: PatternCheckpointState): number {\n switch (state.type) {\n case \"sequential\":\n return state.step;\n case \"supervisor\":\n return state.round;\n case \"reflect\":\n return state.iteration;\n case \"debate\":\n return state.round;\n case \"dag\":\n return state.completedCount;\n case \"goal\":\n return state.step;\n }\n}\n\n/**\n * Compute progress metrics from a pattern checkpoint state.\n *\n * Returns percentage complete, steps completed/remaining, tokens consumed,\n * and estimated tokens remaining (when computable). Each pattern type\n * calculates these metrics from its own state structure.\n *\n * @param state - The pattern checkpoint state to analyze.\n * @returns A {@link CheckpointProgress} object with completion metrics.\n */\nexport function getCheckpointProgress(\n state: PatternCheckpointState,\n): CheckpointProgress {\n const stepsCompleted = getPatternStep(state);\n const stepsTotal = state.stepsTotal ?? null;\n\n switch (state.type) {\n case \"sequential\": {\n const tokensConsumed = state.results.reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const avgTokens =\n state.results.length > 0 ? tokensConsumed / state.results.length : 0;\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining:\n avgTokens > 0 && remaining != null\n ? Math.round(avgTokens * remaining)\n : null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"supervisor\": {\n const tokensConsumed = state.workerResults.reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"reflect\": {\n const tokensConsumed = state.history.reduce(\n (sum, h) => sum + h.producerTokens + h.evaluatorTokens,\n 0,\n );\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"debate\": {\n const tokensConsumed = state.tokensConsumed;\n const remaining = stepsTotal != null ? stepsTotal - stepsCompleted : null;\n\n return {\n percentage:\n stepsTotal != null && stepsTotal > 0\n ? Math.round((stepsCompleted / stepsTotal) * 100)\n : 0,\n stepsCompleted,\n stepsTotal,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"dag\": {\n const total = stepsTotal ?? Object.keys(state.statuses).length;\n const completed = state.completedCount;\n const tokensConsumed = Object.values(state.nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const avgTokens = completed > 0 ? tokensConsumed / completed : 0;\n const remaining = total - completed;\n\n return {\n percentage: total > 0 ? Math.round((completed / total) * 100) : 0,\n stepsCompleted: completed,\n stepsTotal: total,\n tokensConsumed,\n estimatedTokensRemaining:\n remaining > 0 ? Math.round(avgTokens * remaining) : 0,\n estimatedStepsRemaining: remaining,\n };\n }\n\n case \"goal\": {\n const tokensConsumed = Object.values(state.nodeOutputs).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n const satisfaction = state.lastSatisfaction;\n\n return {\n percentage: Math.round(satisfaction * 100),\n stepsCompleted,\n stepsTotal: stepsTotal ?? null,\n tokensConsumed,\n estimatedTokensRemaining: null,\n estimatedStepsRemaining:\n state.stepMetrics.length > 0 ? estimateGoalSteps(state) : null,\n };\n }\n }\n}\n\nfunction estimateGoalSteps(state: GoalCheckpointState): number | null {\n const metrics = state.stepMetrics;\n if (metrics.length < 2) {\n return null;\n }\n\n const remaining = 1.0 - state.lastSatisfaction;\n if (remaining <= 0) {\n return 0;\n }\n\n // Average satisfaction delta\n const totalDelta = metrics.reduce(\n (sum, m) => sum + Math.max(0, m.satisfactionDelta),\n 0,\n );\n const avgDelta = totalDelta / metrics.length;\n if (avgDelta <= 0) {\n return null;\n }\n\n return Math.ceil(remaining / avgDelta);\n}\n\n/**\n * Compute the diff between two checkpoint states of the same pattern type.\n *\n * Returns the delta in steps, tokens, and time between checkpoints.\n * Useful for understanding how much progress occurred between saves.\n *\n * @param a - The earlier checkpoint state.\n * @param b - The later checkpoint state.\n * @returns A {@link CheckpointDiff} with step, token, and time deltas.\n * @throws If the two checkpoints have different pattern types.\n */\nexport function diffCheckpoints(\n a: PatternCheckpointState,\n b: PatternCheckpointState,\n): CheckpointDiff {\n if (a.type !== b.type) {\n throw new Error(\n `[Directive Checkpoint] Cannot diff different pattern types: ${a.type} vs ${b.type}`,\n );\n }\n\n const getTokens = (s: PatternCheckpointState): number => {\n switch (s.type) {\n case \"sequential\":\n return s.results.reduce((sum, r) => sum + r.totalTokens, 0);\n case \"supervisor\":\n return s.workerResults.reduce((sum, r) => sum + r.totalTokens, 0);\n case \"reflect\":\n return s.history.reduce(\n (sum, h) => sum + h.producerTokens + h.evaluatorTokens,\n 0,\n );\n case \"debate\":\n return s.tokensConsumed;\n case \"dag\":\n return Object.values(s.nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n case \"goal\":\n return Object.values(s.nodeOutputs).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n }\n };\n\n const diff: CheckpointDiff = {\n patternType: a.type,\n stepDelta: getPatternStep(b) - getPatternStep(a),\n tokensDelta: getTokens(b) - getTokens(a),\n };\n\n // Add facts diff for goal pattern\n if (a.type === \"goal\" && b.type === \"goal\") {\n const aKeys = new Set(Object.keys(a.facts));\n const bKeys = new Set(Object.keys(b.facts));\n const added: string[] = [];\n const removed: string[] = [];\n const changed: Array<{ key: string; before: unknown; after: unknown }> = [];\n\n for (const key of bKeys) {\n if (!aKeys.has(key)) {\n added.push(key);\n } else if (\n JSON.stringify(a.facts[key]) !== JSON.stringify(b.facts[key])\n ) {\n changed.push({ key, before: a.facts[key], after: b.facts[key] });\n }\n }\n for (const key of aKeys) {\n if (!bKeys.has(key)) {\n removed.push(key);\n }\n }\n\n diff.facts = { added, removed, changed };\n }\n\n // Add nodes completed for DAG/goal\n if (a.type === \"dag\" && b.type === \"dag\") {\n const aCompleted = new Set(\n Object.entries(a.statuses)\n .filter(([, s]) => s === \"completed\")\n .map(([id]) => id),\n );\n diff.nodesCompleted = Object.entries(b.statuses)\n .filter(([id, s]) => s === \"completed\" && !aCompleted.has(id))\n .map(([id]) => id);\n }\n\n if (a.type === \"goal\" && b.type === \"goal\") {\n const aCompleted = new Set(a.completedNodes);\n diff.nodesCompleted = b.completedNodes.filter((id) => !aCompleted.has(id));\n }\n\n return diff;\n}\n\n/**\n * Fork an orchestrator from a checkpoint — creates a new independent orchestrator\n * restored to the checkpoint's state, ready to diverge from that point.\n *\n * @param options - The original orchestrator options used to create the orchestrator\n * @param checkpointStore - The checkpoint store containing the checkpoint\n * @param checkpointId - The ID of the checkpoint to fork from\n * @returns A new independent MultiAgentOrchestrator restored to checkpoint state\n *\n * @example\n * ```typescript\n * const forked = await forkFromCheckpoint(orchestratorOptions, store, \"ckpt_abc123\");\n * const result = await forked.replay(\"ckpt_abc123\", pattern, { input: \"new input\" });\n * ```\n */\nexport async function forkFromCheckpoint(\n options: MultiAgentOrchestratorOptions,\n checkpointStore: CheckpointStore,\n checkpointId: string,\n): Promise<MultiAgentOrchestrator> {\n // Lazy import to avoid circular dependency — createMultiAgentOrchestrator\n // is defined in multi-agent-orchestrator.ts which imports from this file.\n const { createMultiAgentOrchestrator } = await import(\n \"./multi-agent-orchestrator.js\"\n );\n\n const checkpoint = await checkpointStore.load(checkpointId);\n if (!checkpoint) {\n throw new Error(\n `[Directive MultiAgent] Checkpoint not found: ${checkpointId}`,\n );\n }\n\n // Deep-clone the checkpoint so the forked orchestrator is fully independent\n const cloned = structuredClone(checkpoint);\n\n const forked = createMultiAgentOrchestrator({\n ...options,\n checkpointStore,\n });\n\n forked.restore(cloned);\n\n return forked;\n}\n\n// ============================================================================\n// DAG Validation\n// ============================================================================\n\n/**\n * Validate that a DAG pattern has no cycles using Kahn's algorithm.\n *\n * Also validates that all dependency references point to existing nodes\n * and that at least one root node (no dependencies) exists.\n *\n * @param patternId - The pattern ID (for error messages).\n * @param nodes - The DAG node definitions.\n * @throws If a cycle is detected, a dependency is missing, or no root nodes exist.\n * @internal\n */\nexport function validateDagAcyclic(\n patternId: string,\n nodes: Record<string, DagNode>,\n): void {\n const nodeIds = Object.keys(nodes);\n\n // Validate deps reference valid node IDs\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const depId of node.deps ?? []) {\n if (!nodes[depId]) {\n throw new Error(\n `[Directive MultiAgent] DAG pattern \"${patternId}\": node \"${nodeId}\" depends on unknown node \"${depId}\"`,\n );\n }\n }\n }\n\n // Ensure at least one root node\n const hasRoot = nodeIds.some((id) => {\n const deps = nodes[id]?.deps;\n\n return !deps || deps.length === 0;\n });\n if (!hasRoot) {\n throw new Error(\n `[Directive MultiAgent] DAG pattern \"${patternId}\": no root nodes (every node has dependencies)`,\n );\n }\n\n // Kahn's algorithm for cycle detection\n const inDegree: Record<string, number> = Object.create(null);\n const adjacency: Record<string, string[]> = Object.create(null);\n for (const id of nodeIds) {\n adjacency[id] = [];\n }\n for (const [nodeId, node] of Object.entries(nodes)) {\n inDegree[nodeId] = (node.deps ?? []).length;\n for (const depId of node.deps ?? []) {\n adjacency[depId]!.push(nodeId);\n }\n }\n\n const queue: string[] = [];\n for (const id of nodeIds) {\n if (inDegree[id] === 0) {\n queue.push(id);\n }\n }\n\n let visited = 0;\n while (queue.length > 0) {\n const current = queue.shift()!;\n visited++;\n for (const dependent of adjacency[current] ?? []) {\n inDegree[dependent]!--;\n if (inDegree[dependent] === 0) {\n queue.push(dependent);\n }\n }\n }\n\n if (visited !== nodeIds.length) {\n throw new Error(\n `[Directive MultiAgent] DAG pattern \"${patternId}\": cycle detected. Visited ${visited}/${nodeIds.length} nodes.`,\n );\n }\n}\n","import type {\n ParallelPattern,\n RacePattern,\n ReflectIterationRecord,\n ReflectPattern,\n SequentialPattern,\n SupervisorPattern,\n} from \"./multi-agent-orchestrator.js\";\nimport type { ReflectionEvaluation } from \"./reflection.js\";\nimport type {\n AgentSelectionStrategy,\n DagExecutionContext,\n DagNode,\n DagPattern,\n GoalMetrics,\n GoalNode,\n GoalPattern,\n PatternCheckpointConfig,\n RelaxationTier,\n RunResult,\n} from \"./types.js\";\n\n// ============================================================================\n// Pattern Helpers\n// ============================================================================\n\n/**\n * Create a parallel execution pattern that runs handlers concurrently and merges results.\n *\n * @param handlers - Handler IDs (agents or tasks) to run concurrently.\n * @param merge - Combine all handler results into a single output (array may be shorter than handlers when `minSuccess` is set).\n * @param options - Optional `minSuccess` and `timeout` overrides.\n * @returns A {@link ParallelPattern} configuration object.\n *\n * @example\n * ```typescript\n * const researchPattern = parallel(\n * ['researcher', 'researcher', 'researcher'],\n * (results) => results.map(r => r.output).join('\\n'),\n * );\n * ```\n */\nexport function parallel<T>(\n handlers: string[],\n merge: (results: RunResult<unknown>[]) => T | Promise<T>,\n options?: { minSuccess?: number; timeout?: number },\n): ParallelPattern<T> {\n return {\n type: \"parallel\",\n handlers,\n merge,\n ...options,\n };\n}\n\n/**\n * Create a sequential execution pattern that pipes output from one handler to the next.\n *\n * @param handlers - Handler IDs (agents or tasks) to run in order, where each handler's output feeds as input to the next.\n * @param options - Optional `transform`, `extract`, and `continueOnError` overrides.\n * @returns A {@link SequentialPattern} configuration object.\n *\n * @example\n * ```typescript\n * const writeReviewPattern = sequential(\n * ['writer', 'reviewer'],\n * { transform: (output) => `Review this: ${output}` },\n * );\n * ```\n */\nexport function sequential<T>(\n handlers: string[],\n options?: {\n transform?: (output: unknown, handlerId: string, index: number) => string;\n extract?: (output: unknown) => T;\n continueOnError?: boolean;\n },\n): SequentialPattern<T> {\n return {\n type: \"sequential\",\n handlers,\n ...options,\n };\n}\n\n/**\n * Create a supervisor pattern where a coordinating agent delegates work to a pool of workers.\n *\n * The supervisor runs first, then dispatches tasks to workers based on its output.\n * This repeats for up to `maxRounds` until the supervisor signals completion.\n *\n * @param supervisorAgent - Agent ID that coordinates the workers.\n * @param workers - Agent IDs for the worker pool.\n * @param options - Optional `maxRounds` and `extract` overrides.\n * @returns A {@link SupervisorPattern} configuration object.\n *\n * @example\n * ```typescript\n * const managedPattern = supervisor(\n * 'manager',\n * ['worker1', 'worker2'],\n * { maxRounds: 3 },\n * );\n * ```\n */\nexport function supervisor<T>(\n supervisorAgent: string,\n workers: string[],\n options?: {\n maxRounds?: number;\n extract?: (\n supervisorOutput: unknown,\n workerResults: RunResult<unknown>[],\n ) => T;\n },\n): SupervisorPattern<T> {\n return {\n type: \"supervisor\",\n supervisor: supervisorAgent,\n workers,\n ...options,\n };\n}\n\n/**\n * Create a directed acyclic graph (DAG) execution pattern.\n *\n * Nodes run concurrently when their dependencies are satisfied. The runtime\n * validates the graph is acyclic and that all dependency references are valid.\n *\n * @param nodes - Node definitions keyed by ID, each with a `handler` and optional `deps` array.\n * @param merge - Combine DAG outputs into a single result (defaults to `context.outputs`).\n * @param options - Optional `timeout`, `maxConcurrent`, and `onNodeError` strategy.\n * @returns A {@link DagPattern} configuration object.\n *\n * @example\n * ```typescript\n * const researchPipeline = dag(\n * {\n * fetch: { handler: 'fetcher' },\n * analyze: { handler: 'analyzer', deps: ['fetch'] },\n * summarize: { handler: 'summarizer', deps: ['analyze'] },\n * },\n * (context) => context.outputs.summarize,\n * );\n * ```\n */\nexport function dag<T = Record<string, unknown>>(\n nodes: Record<string, DagNode>,\n merge?: (context: DagExecutionContext) => T | Promise<T>,\n options?: {\n /** Overall timeout in ms for the entire DAG. */\n timeout?: number;\n /** Max nodes running concurrently. Default: Infinity */\n maxConcurrent?: number;\n /**\n * Error handling strategy.\n * - `\"fail\"` — abort entire DAG on first node error (default)\n * - `\"skip-downstream\"` — mark downstream nodes as skipped, other branches continue\n * - `\"continue\"` — ignore errors, other branches continue\n */\n onNodeError?: \"fail\" | \"skip-downstream\" | \"continue\";\n },\n): DagPattern<T> {\n return {\n type: \"dag\",\n nodes,\n merge: merge ?? ((context: DagExecutionContext) => context.outputs as T),\n ...options,\n };\n}\n\n/**\n * Create a reflect pattern that iterates between a producer and evaluator until quality is met.\n *\n * The producer generates output, then the evaluator scores it. If the score\n * is below the threshold, the producer retries with evaluator feedback,\n * up to `maxIterations` times.\n *\n * @param handler - Producer handler ID (agent or task) that generates output.\n * @param evaluator - Evaluator handler ID that judges quality and provides feedback.\n * @param options - Optional iteration, parsing, signal, and threshold configuration.\n * @returns A {@link ReflectPattern} configuration object.\n *\n * @example\n * ```typescript\n * const reviewPattern = reflect('writer', 'reviewer', { maxIterations: 2 });\n * ```\n */\nexport function reflect<T>(\n handler: string,\n evaluator: string,\n options?: {\n maxIterations?: number;\n parseEvaluation?: (output: unknown) => ReflectionEvaluation;\n buildRetryInput?: (\n input: string,\n feedback: string,\n iteration: number,\n ) => string;\n extract?: (output: unknown) => T;\n onExhausted?: \"accept-last\" | \"accept-best\" | \"throw\";\n onIteration?: (record: ReflectIterationRecord) => void;\n signal?: AbortSignal;\n timeout?: number;\n threshold?: number | ((iteration: number) => number);\n },\n): ReflectPattern<T> {\n return {\n type: \"reflect\",\n handler,\n evaluator,\n ...options,\n };\n}\n\n/**\n * Create a race pattern that runs handlers concurrently and returns the first successful result.\n *\n * All handlers start simultaneously. The first to complete successfully wins;\n * remaining handlers are aborted. Use `minSuccess` to wait for N results before picking.\n *\n * @param handlers - Handler IDs (agents or tasks) to race concurrently.\n * @param options - Optional `extract`, `timeout`, `minSuccess`, and `signal` overrides.\n * @returns A {@link RacePattern} configuration object.\n *\n * @example\n * ```typescript\n * const fastest = race(['fast-model', 'smart-model'], { timeout: 5000 });\n * ```\n */\nexport function race<T>(\n handlers: string[],\n options?: {\n extract?: (result: RunResult<unknown>) => T;\n timeout?: number;\n minSuccess?: number;\n signal?: AbortSignal;\n },\n): RacePattern<T> {\n return {\n type: \"race\",\n handlers,\n ...options,\n };\n}\n\n// ============================================================================\n// Goal Pattern Factory & Selection Strategies\n// ============================================================================\n\n/**\n * Create a goal-driven execution pattern where agents are selected and run\n * until a goal condition is satisfied.\n *\n * Declare what each agent produces and requires. The runtime automatically\n * infers the execution graph from dependency analysis and drives agents\n * toward goal achievement, with optional satisfaction scoring and relaxation tiers.\n *\n * @param nodes - Goal node definitions keyed by ID, each declaring `produces`, `requires`, and a `handler`.\n * @param when - Predicate that returns `true` when the goal is achieved.\n * @param options - Optional `satisfaction`, `maxSteps`, `extract`, `timeout`, `selectionStrategy`, and `relaxation` config.\n * @returns A {@link GoalPattern} configuration object.\n *\n * @example\n * ```typescript\n * const pipeline = goal(\n * {\n * researcher: {\n * handler: \"researcher\",\n * produces: [\"research.findings\"],\n * requires: [\"research.topic\"],\n * extractOutput: (r) => ({ \"research.findings\": r.output }),\n * },\n * writer: {\n * handler: \"writer\",\n * produces: [\"article.draft\"],\n * requires: [\"research.findings\"],\n * extractOutput: (r) => ({ \"article.draft\": r.output }),\n * },\n * },\n * (facts) => facts[\"article.draft\"] != null,\n * { maxSteps: 10, extract: (facts) => facts[\"article.draft\"] },\n * );\n * ```\n */\nexport function goal<T = Record<string, unknown>>(\n nodes: Record<string, GoalNode>,\n when: (facts: Record<string, unknown>) => boolean,\n options?: {\n satisfaction?: (facts: Record<string, unknown>) => number;\n maxSteps?: number;\n extract?: (facts: Record<string, unknown>) => T;\n timeout?: number;\n signal?: AbortSignal;\n selectionStrategy?: AgentSelectionStrategy;\n relaxation?: RelaxationTier[];\n onStep?: (\n step: number,\n facts: Record<string, unknown>,\n readyNodes: string[],\n ) => void;\n onStall?: (step: number, metrics: GoalMetrics) => void;\n checkpoint?: PatternCheckpointConfig;\n },\n): GoalPattern<T> {\n return {\n type: \"goal\",\n nodes,\n when,\n ...options,\n };\n}\n\n/**\n * Create a selection strategy that runs all ready agents concurrently.\n *\n * This is the default strategy for {@link goal} patterns.\n *\n * @returns An {@link AgentSelectionStrategy} that selects every ready agent.\n */\nexport function allReadyStrategy(): AgentSelectionStrategy {\n return {\n select: (readyAgents) => readyAgents,\n };\n}\n\n/**\n * Create a selection strategy that picks agents with the highest historical impact.\n *\n * Sorts ready agents by average satisfaction delta (descending) and selects the top N.\n *\n * @param opts - Optional `topN` to limit how many agents are selected (default: 3).\n * @returns An {@link AgentSelectionStrategy} that prioritizes high-impact agents.\n */\nexport function highestImpactStrategy(opts?: {\n topN?: number;\n}): AgentSelectionStrategy {\n const topN = opts?.topN ?? 3;\n\n return {\n select: (readyAgents, metrics) => {\n const sorted = [...readyAgents].sort((a, b) => {\n const aAvg = metrics[a]?.avgSatisfactionDelta ?? 0;\n const bAvg = metrics[b]?.avgSatisfactionDelta ?? 0;\n\n return bAvg - aAvg;\n });\n\n return sorted.slice(0, topN);\n },\n };\n}\n\n/**\n * Create a selection strategy that prefers agents with lower token cost per satisfaction delta.\n *\n * Agents without historical metrics are prioritized first (to gather data).\n *\n * @returns An {@link AgentSelectionStrategy} that optimizes for cost efficiency.\n */\nexport function costEfficientStrategy(): AgentSelectionStrategy {\n return {\n select: (readyAgents, metrics) => {\n const sorted = [...readyAgents].sort((a, b) => {\n const aM = metrics[a];\n const bM = metrics[b];\n\n // Agents without metrics go first (need data)\n if (!aM || aM.runs === 0) {\n return -1;\n }\n if (!bM || bM.runs === 0) {\n return 1;\n }\n\n // Cost per delta: lower is better\n const aCost =\n aM.avgSatisfactionDelta > 0\n ? aM.tokens / aM.runs / aM.avgSatisfactionDelta\n : Number.POSITIVE_INFINITY;\n const bCost =\n bM.avgSatisfactionDelta > 0\n ? bM.tokens / bM.runs / bM.avgSatisfactionDelta\n : Number.POSITIVE_INFINITY;\n\n return aCost - bCost;\n });\n\n return sorted;\n },\n };\n}\n","import type { ExecutionPattern } from \"./multi-agent-orchestrator.js\";\n\n// ============================================================================\n// Pattern Serialization\n// ============================================================================\n\n/** Serialized DAG node (functions stripped) */\nexport interface SerializedDagNode {\n handler: string;\n agent?: string;\n deps?: string[];\n timeout?: number;\n priority?: number;\n}\n\n/** JSON-safe representation of any execution pattern (all functions stripped) */\nexport type SerializedPattern =\n | {\n type: \"parallel\";\n handlers: string[];\n minSuccess?: number;\n timeout?: number;\n }\n | { type: \"sequential\"; handlers: string[]; continueOnError?: boolean }\n | {\n type: \"supervisor\";\n supervisor: string;\n workers: string[];\n maxRounds?: number;\n }\n | {\n type: \"dag\";\n nodes: Record<string, SerializedDagNode>;\n timeout?: number;\n maxConcurrent?: number;\n onNodeError?: \"fail\" | \"skip-downstream\" | \"continue\";\n }\n | {\n type: \"reflect\";\n handler: string;\n evaluator: string;\n maxIterations?: number;\n onExhausted?: \"accept-last\" | \"accept-best\" | \"throw\";\n timeout?: number;\n threshold?: number;\n }\n | { type: \"race\"; handlers: string[]; timeout?: number; minSuccess?: number }\n | {\n type: \"debate\";\n handlers: string[];\n evaluator: string;\n maxRounds?: number;\n timeout?: number;\n }\n | {\n type: \"goal\";\n nodes: Record<string, SerializedGoalNode>;\n maxSteps?: number;\n timeout?: number;\n };\n\n/** Serialized goal node (functions stripped) */\nexport interface SerializedGoalNode {\n handler: string;\n agent?: string;\n produces: string[];\n requires?: string[];\n allowRerun?: boolean;\n priority?: number;\n}\n\n/**\n * Serialize an execution pattern to a JSON-safe object.\n *\n * @remarks\n * Strips all function callbacks and runtime objects (AbortSignal) while\n * preserving the topology -- which agents, in what structure, with what\n * numeric/string/boolean options.\n *\n * Use this for visual editors, LLM-generated plans, persistence, or\n * debugging. Restore with {@link patternFromJSON}.\n *\n * Function-form `threshold` on reflect patterns is not serializable and will be dropped.\n * Re-supply it via `overrides` when calling {@link patternFromJSON}.\n *\n * @param pattern - The execution pattern to serialize.\n * @returns A {@link SerializedPattern} safe for `JSON.stringify`.\n *\n * @example\n * ```typescript\n * const p = parallel(['a', 'b'], (r) => r);\n * const json = patternToJSON(p);\n * // { type: \"parallel\", handlers: [\"a\", \"b\"] }\n * localStorage.setItem(\"plan\", JSON.stringify(json));\n * ```\n */\nexport function patternToJSON(\n pattern: ExecutionPattern<unknown>,\n): SerializedPattern {\n switch (pattern.type) {\n case \"parallel\":\n return {\n type: \"parallel\",\n handlers: pattern.handlers,\n minSuccess: pattern.minSuccess,\n timeout: pattern.timeout,\n };\n case \"sequential\":\n return {\n type: \"sequential\",\n handlers: pattern.handlers,\n continueOnError: pattern.continueOnError,\n };\n case \"supervisor\":\n return {\n type: \"supervisor\",\n supervisor: pattern.supervisor,\n workers: pattern.workers,\n maxRounds: pattern.maxRounds,\n };\n case \"dag\": {\n const nodes: Record<string, SerializedDagNode> = Object.create(null);\n for (const [id, node] of Object.entries(pattern.nodes)) {\n nodes[id] = {\n handler: node.handler,\n deps: node.deps,\n timeout: node.timeout,\n priority: node.priority,\n };\n }\n\n return {\n type: \"dag\",\n nodes,\n timeout: pattern.timeout,\n maxConcurrent: pattern.maxConcurrent,\n onNodeError: pattern.onNodeError,\n };\n }\n case \"reflect\":\n return {\n type: \"reflect\",\n handler: pattern.handler,\n evaluator: pattern.evaluator,\n maxIterations: pattern.maxIterations,\n onExhausted: pattern.onExhausted,\n timeout: pattern.timeout,\n threshold:\n typeof pattern.threshold === \"number\" ? pattern.threshold : undefined,\n };\n case \"race\":\n return {\n type: \"race\",\n handlers: pattern.handlers,\n timeout: pattern.timeout,\n minSuccess: pattern.minSuccess,\n };\n case \"debate\":\n return {\n type: \"debate\",\n handlers: pattern.handlers,\n evaluator: pattern.evaluator,\n maxRounds: pattern.maxRounds,\n timeout: pattern.timeout,\n };\n case \"goal\": {\n const cnodes: Record<string, SerializedGoalNode> = Object.create(null);\n for (const [id, node] of Object.entries(pattern.nodes)) {\n cnodes[id] = {\n handler: node.handler,\n produces: node.produces,\n requires: node.requires,\n allowRerun: node.allowRerun,\n priority: node.priority,\n };\n }\n\n return {\n type: \"goal\",\n nodes: cnodes,\n maxSteps: pattern.maxSteps,\n timeout: pattern.timeout,\n };\n }\n }\n}\n\nconst ALLOWED_PATTERN_TYPES = new Set([\n \"parallel\",\n \"sequential\",\n \"supervisor\",\n \"dag\",\n \"reflect\",\n \"race\",\n \"debate\",\n \"goal\",\n]);\n\n/**\n * Restore an execution pattern from its serialized JSON form.\n *\n * @remarks\n * Returns the data structure with all function fields set to `undefined`.\n * Supply callbacks via the optional `overrides` parameter to re-attach\n * runtime behavior.\n *\n * @param json - The serialized pattern from {@link patternToJSON} or persisted storage.\n * @param overrides - Optional partial pattern to re-attach function callbacks (e.g. `merge`, `extract`).\n * @returns A fully typed {@link ExecutionPattern} ready for use with the imperative API.\n * @throws If the pattern type is invalid or unknown.\n *\n * @example\n * ```typescript\n * const json = JSON.parse(localStorage.getItem(\"plan\")!);\n * const pattern = patternFromJSON<string[]>(json, {\n * merge: (results) => results.map(r => r.output as string),\n * });\n * if (pattern.type === \"parallel\") {\n * const result = await orchestrator.runParallel(pattern.handlers, input, pattern.merge);\n * }\n * ```\n */\nexport function patternFromJSON<T = unknown>(\n json: SerializedPattern,\n overrides?: Partial<ExecutionPattern<T>>,\n): ExecutionPattern<T> {\n if (\n !json ||\n typeof json !== \"object\" ||\n !ALLOWED_PATTERN_TYPES.has((json as SerializedPattern).type)\n ) {\n throw new Error(\n `[Directive] patternFromJSON: invalid or unknown pattern type \"${(json as Record<string, unknown>)?.type}\"`,\n );\n }\n const safe: Record<string, unknown> = Object.create(null);\n for (const [k, v] of Object.entries(json)) {\n if (k !== \"__proto__\" && k !== \"constructor\" && k !== \"prototype\") {\n safe[k] = v;\n }\n }\n\n return { ...safe, ...overrides } as ExecutionPattern<T>;\n}\n","// ============================================================================\n// Pattern Composition Helpers\n// ============================================================================\n//\n// Extracted from multi-agent-orchestrator.ts — agent selection, result merging,\n// pattern composition, constraint spawning, debate, derived constraints, and\n// pool scaling utilities.\n// ============================================================================\n\nimport type {\n DagExecutionContext,\n DagPattern,\n GoalPattern,\n OrchestratorConstraint,\n OrchestratorState,\n RunResult,\n} from \"./types.js\";\n\nimport type {\n AgentRegistry,\n DebatePattern,\n DebateResult,\n ExecutionPattern,\n MultiAgentOrchestrator,\n ParallelPattern,\n RacePattern,\n ReflectPattern,\n RunAgentRequirement,\n SequentialPattern,\n SupervisorPattern,\n} from \"./multi-agent-orchestrator.js\";\n\nimport type { ReflectionEvaluation } from \"./reflection.js\";\n\nimport { extractJsonFromOutput } from \"./structured-output.js\";\n\nimport { safeStringify } from \"@directive-run/core/internals\";\n\n// ============================================================================\n// Agent Selection Helpers\n// ============================================================================\n\n/**\n * Create a constraint that routes to a specific agent when a condition is met.\n *\n * @param when - Predicate that triggers the constraint (may be async).\n * @param agent - Agent ID or function returning an agent ID to route to.\n * @param input - Input string or function returning the input for the selected agent.\n * @param priority - Optional constraint priority (higher = evaluated first).\n * @returns An {@link OrchestratorConstraint} that emits a `RUN_AGENT` requirement.\n *\n * @example\n * ```typescript\n * const constraints = {\n * routeToExpert: selectAgent(\n * (facts) => facts.complexity > 0.8,\n * 'expert',\n * (facts) => facts.query,\n * ),\n * };\n * ```\n */\nexport function selectAgent(\n when: (facts: Record<string, unknown>) => boolean | Promise<boolean>,\n agent: string | ((facts: Record<string, unknown>) => string),\n input: string | ((facts: Record<string, unknown>) => string),\n priority?: number,\n): OrchestratorConstraint<Record<string, unknown>> {\n return {\n when: when as (\n facts: Record<string, unknown> & OrchestratorState,\n ) => boolean | Promise<boolean>,\n require: (facts: Record<string, unknown> & OrchestratorState) => {\n const selectedAgent = typeof agent === \"function\" ? agent(facts) : agent;\n const selectedInput = typeof input === \"function\" ? input(facts) : input;\n\n return {\n type: \"RUN_AGENT\",\n agent: selectedAgent,\n input: selectedInput,\n } as RunAgentRequirement;\n },\n priority,\n };\n}\n\n/**\n * Create a `RUN_AGENT` requirement object for use in constraint `require()` functions.\n *\n * @param agent - The agent ID to run.\n * @param input - The input string for the agent.\n * @param context - Optional additional context passed to the agent runner.\n * @returns A `RUN_AGENT` {@link RunAgentRequirement} object.\n *\n * @example\n * ```typescript\n * constraints: {\n * needsResearch: {\n * when: (facts) => facts.hasUnknowns,\n * require: (facts) => runAgentRequirement('researcher', facts.query as string),\n * },\n * }\n * ```\n */\nexport function runAgentRequirement(\n agent: string,\n input: string,\n context?: Record<string, unknown>,\n): RunAgentRequirement {\n return {\n type: \"RUN_AGENT\",\n agent,\n input,\n context,\n };\n}\n\n// ============================================================================\n// Result Merging Utilities\n// ============================================================================\n\n/**\n * Merge run results by concatenating their outputs into a single string.\n *\n * @param results - Array of run results to concatenate.\n * @param separator - String inserted between outputs (default: `\"\\n\\n\"`).\n * @returns The concatenated output string.\n */\nexport function concatResults(\n results: RunResult<unknown>[],\n separator = \"\\n\\n\",\n): string {\n return results\n .map((r) =>\n typeof r.output === \"string\" ? r.output : safeStringify(r.output),\n )\n .join(separator);\n}\n\n/**\n * Pick the highest-scoring result from an array using a scoring function.\n *\n * @param results - Array of run results to compare.\n * @param score - Function that assigns a numeric score to each result (higher wins).\n * @returns The {@link RunResult} with the highest score.\n * @throws If the results array is empty.\n */\nexport function pickBestResult<T>(\n results: RunResult<T>[],\n score: (result: RunResult<T>) => number,\n): RunResult<T> {\n if (results.length === 0) {\n throw new Error(\"[Directive MultiAgent] No results to pick from\");\n }\n\n return results.reduce((best, current) =>\n score(current) > score(best) ? current : best,\n );\n}\n\n/**\n * Extract the `output` value from each run result into an array.\n *\n * @param results - Array of run results to collect from.\n * @returns An array of output values in the same order as the input results.\n */\nexport function collectOutputs<T>(results: RunResult<T>[]): T[] {\n return results.map((r) => r.output);\n}\n\n/**\n * Sum the total token counts from an array of run results.\n *\n * @param results - Array of run results to aggregate.\n * @returns The total number of tokens consumed across all results.\n */\nexport function aggregateTokens(results: RunResult<unknown>[]): number {\n return results.reduce((sum, r) => sum + r.totalTokens, 0);\n}\n\n// ============================================================================\n// Pattern Composition\n// ============================================================================\n\n/**\n * Compose multiple execution patterns into a pipeline where each pattern's\n * output feeds as input to the next.\n *\n * @remarks\n * Between patterns, output is converted to a string input:\n * - `string` output passes through directly\n * - Objects are JSON-stringified\n * - Optionally provide a `transform` to customize between steps\n *\n * @param patterns - One or more execution patterns to chain together.\n * @returns An async function that runs the pipeline on a given orchestrator.\n *\n * @example\n * ```typescript\n * const workflow = composePatterns(\n * parallel(['researcher', 'researcher'], concatResults),\n * sequential(['writer', 'reviewer']),\n * );\n *\n * const result = await workflow(orchestrator, 'Research topic X');\n * ```\n */\nexport function composePatterns(\n ...patterns: ExecutionPattern[]\n): (orchestrator: MultiAgentOrchestrator, input: string) => Promise<unknown> {\n if (patterns.length === 0) {\n throw new Error(\n \"[Directive MultiAgent] composePatterns requires at least one pattern\",\n );\n }\n\n return async (\n orchestrator: MultiAgentOrchestrator,\n input: string,\n ): Promise<unknown> => {\n let currentInput = input;\n let lastOutput: unknown = undefined;\n\n for (const pattern of patterns) {\n switch (pattern.type) {\n case \"parallel\": {\n const parallelPattern = pattern as ParallelPattern<unknown>;\n const inputsArr = parallelPattern.handlers.map(() => currentInput);\n lastOutput = await orchestrator.runParallel(\n parallelPattern.handlers,\n inputsArr,\n parallelPattern.merge,\n {\n minSuccess: parallelPattern.minSuccess,\n timeout: parallelPattern.timeout,\n },\n );\n break;\n }\n\n case \"sequential\": {\n const seqPattern = pattern as SequentialPattern<unknown>;\n const results = await orchestrator.runSequential(\n seqPattern.handlers,\n currentInput,\n { transform: seqPattern.transform },\n );\n\n const lastResult = results[results.length - 1];\n lastOutput = seqPattern.extract\n ? seqPattern.extract(lastResult?.output)\n : lastResult?.output;\n break;\n }\n\n case \"supervisor\": {\n const supPattern = pattern as SupervisorPattern<unknown>;\n const maxRounds = supPattern.maxRounds ?? 5;\n if (maxRounds < 1 || !Number.isFinite(maxRounds)) {\n throw new Error(\n \"[Directive MultiAgent] supervisor maxRounds must be >= 1\",\n );\n }\n const workerResults: RunResult<unknown>[] = [];\n let supervisorResult = await orchestrator.runAgent<unknown>(\n supPattern.supervisor,\n currentInput,\n );\n\n for (let round = 0; round < maxRounds; round++) {\n const raw = supervisorResult.output;\n let action: {\n action: string;\n worker?: string;\n workerInput?: string;\n };\n\n if (typeof raw === \"string\") {\n try {\n action = JSON.parse(raw);\n } catch {\n try {\n const stripped = raw\n .replace(/```(?:json|JSON)?\\s*\\n?/g, \"\")\n .replace(/<[^>]+>/g, \" \");\n const extracted = extractJsonFromOutput(stripped);\n if (\n extracted &&\n typeof extracted === \"object\" &&\n \"action\" in (extracted as Record<string, unknown>)\n ) {\n action = extracted as typeof action;\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n } else if (raw && typeof raw === \"object\" && \"action\" in raw) {\n action = raw as typeof action;\n } else {\n break;\n }\n\n if (action.action === \"complete\" || !action.worker) {\n break;\n }\n\n if (!supPattern.workers.includes(action.worker)) {\n break;\n }\n\n const workerResult = await orchestrator.runAgent(\n action.worker,\n action.workerInput ?? \"\",\n );\n workerResults.push(workerResult);\n\n supervisorResult = await orchestrator.runAgent(\n supPattern.supervisor,\n `Worker ${action.worker} completed with result: ${safeStringify(workerResult.output)}`,\n );\n }\n\n lastOutput = supPattern.extract\n ? supPattern.extract(supervisorResult.output, workerResults)\n : supervisorResult.output;\n break;\n }\n\n case \"dag\": {\n const dagPattern = pattern as DagPattern<unknown>;\n // DAG patterns must be run via runPattern to get full execution\n // We simulate by running agents individually following the DAG structure\n const dagContext: DagExecutionContext = {\n input: currentInput,\n outputs: Object.create(null),\n statuses: Object.create(null),\n errors: Object.create(null),\n results: Object.create(null),\n };\n\n // Simple sequential execution of DAG for composePatterns\n // (Full parallel DAG execution happens via runPattern/runDagPattern)\n if (\n typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\"\n ) {\n console.debug(\n \"[Directive MultiAgent] composePatterns: DAG nodes executed sequentially — use runPattern() for full parallel DAG execution\",\n );\n }\n const nodeIds = Object.keys(dagPattern.nodes);\n for (const nodeId of nodeIds) {\n const node = dagPattern.nodes[nodeId]!;\n dagContext.statuses[nodeId] = \"running\";\n try {\n let nodeInput = currentInput;\n if (node.transform) {\n nodeInput = node.transform(dagContext);\n } else if (node.deps && node.deps.length > 0) {\n const upstreamOutputs: Record<string, unknown> =\n Object.create(null);\n for (const depId of node.deps) {\n if (dagContext.outputs[depId] !== undefined) {\n upstreamOutputs[depId] = dagContext.outputs[depId];\n }\n }\n nodeInput = JSON.stringify(upstreamOutputs);\n }\n const result = await orchestrator.runAgent(\n node.handler,\n nodeInput,\n );\n dagContext.outputs[nodeId] = result.output;\n dagContext.results[nodeId] = result;\n dagContext.statuses[nodeId] = \"completed\";\n } catch (error) {\n dagContext.statuses[nodeId] = \"error\";\n dagContext.errors[nodeId] =\n error instanceof Error ? error.message : String(error);\n if (dagPattern.onNodeError === \"fail\") {\n throw error;\n }\n }\n }\n lastOutput = await dagPattern.merge(dagContext);\n break;\n }\n\n case \"reflect\": {\n const reflectPattern = pattern as ReflectPattern<unknown>;\n // Run producer→evaluator loop using runAgent\n const maxIter = reflectPattern.maxIterations ?? 2;\n const parseEval =\n reflectPattern.parseEvaluation ??\n ((output: unknown): ReflectionEvaluation => {\n if (typeof output === \"string\") {\n try {\n return JSON.parse(output);\n } catch {\n return { passed: false, feedback: output };\n }\n }\n if (output && typeof output === \"object\" && \"passed\" in output) {\n return output as ReflectionEvaluation;\n }\n\n return { passed: false, feedback: \"Invalid evaluator output\" };\n });\n const buildInput =\n reflectPattern.buildRetryInput ??\n ((inp: string, feedback: string) =>\n `${inp}\\n\\nFeedback on your previous response:\\n${feedback}\\n\\nPlease improve your response.`);\n\n let effectiveInput = currentInput;\n let producerOutput: unknown;\n for (let i = 0; i < maxIter; i++) {\n const producerResult = await orchestrator.runAgent(\n reflectPattern.handler,\n effectiveInput,\n );\n producerOutput = producerResult.output;\n const producerStr =\n typeof producerOutput === \"string\"\n ? producerOutput\n : JSON.stringify(producerOutput);\n const evalResult = await orchestrator.runAgent(\n reflectPattern.evaluator,\n producerStr,\n );\n const evaluation = parseEval(evalResult.output);\n if (evaluation.passed) {\n break;\n }\n if (i < maxIter - 1 && evaluation.feedback) {\n effectiveInput = buildInput(currentInput, evaluation.feedback, i);\n }\n }\n lastOutput = reflectPattern.extract\n ? reflectPattern.extract(producerOutput)\n : producerOutput;\n break;\n }\n\n case \"race\": {\n const racePattern = pattern as RacePattern<unknown>;\n const raceResult = await orchestrator.runRace(\n racePattern.handlers,\n currentInput,\n { extract: racePattern.extract, timeout: racePattern.timeout },\n );\n lastOutput = raceResult.result;\n break;\n }\n\n case \"debate\": {\n const debatePattern = pattern as DebatePattern<unknown>;\n const debateResult = await orchestrator.runDebate(\n debatePattern.handlers,\n debatePattern.evaluator,\n currentInput,\n {\n maxRounds: debatePattern.maxRounds,\n extract: debatePattern.extract,\n parseJudgement: debatePattern.parseJudgement,\n signal: debatePattern.signal,\n timeout: debatePattern.timeout,\n },\n );\n lastOutput = debateResult.result;\n break;\n }\n\n case \"goal\": {\n const cp = pattern as GoalPattern<unknown>;\n const initialFacts =\n typeof currentInput === \"string\"\n ? { input: currentInput }\n : (() => {\n try {\n return JSON.parse(currentInput);\n } catch {\n return { input: currentInput };\n }\n })();\n const goalResult = await orchestrator.runGoal(\n cp.nodes,\n initialFacts,\n cp.when,\n {\n satisfaction: cp.satisfaction,\n maxSteps: cp.maxSteps,\n extract: cp.extract,\n timeout: cp.timeout,\n signal: cp.signal,\n selectionStrategy: cp.selectionStrategy,\n relaxation: cp.relaxation,\n onStep: cp.onStep,\n onStall: cp.onStall,\n },\n );\n lastOutput = goalResult.result;\n break;\n }\n\n default:\n throw new Error(\n `[Directive MultiAgent] composePatterns: unknown pattern type \"${(pattern as ExecutionPattern).type}\"`,\n );\n }\n\n // Convert output to string for next pattern's input\n if (lastOutput !== undefined) {\n currentInput =\n typeof lastOutput === \"string\"\n ? lastOutput\n : safeStringify(lastOutput);\n }\n }\n\n return lastOutput;\n };\n}\n\n/**\n * Find agents in a registry that match all required capabilities.\n *\n * @param registry - The agent registry to search.\n * @param requiredCapabilities - Capabilities that each matching agent must have.\n * @returns An array of agent IDs whose `capabilities` include every required capability.\n *\n * @example\n * ```typescript\n * const agents = {\n * researcher: { agent: researchAgent, capabilities: ['search', 'summarize'] },\n * coder: { agent: coderAgent, capabilities: ['code', 'debug'] },\n * writer: { agent: writerAgent, capabilities: ['write', 'edit'] },\n * };\n *\n * const matches = findAgentsByCapability(agents, ['search']);\n * // Returns ['researcher']\n * ```\n */\nexport function findAgentsByCapability(\n registry: AgentRegistry,\n requiredCapabilities: string[],\n): string[] {\n return Object.entries(registry)\n .filter(([, reg]) => {\n const caps = reg.capabilities ?? [];\n\n return requiredCapabilities.every((c) => caps.includes(c));\n })\n .map(([id]) => id);\n}\n\n/**\n * Create a constraint that auto-routes to an agent based on required capabilities.\n *\n * When the condition fires, it finds agents matching the capabilities returned by\n * `getCapabilities`, then emits a `RUN_AGENT` requirement for the best match.\n *\n * @param registry - The agent registry to search for matching capabilities.\n * @param getCapabilities - Function that extracts required capabilities from facts.\n * @param getInput - Function that extracts the input string from facts.\n * @param options - Optional `priority` and custom `select` function.\n * @returns An {@link OrchestratorConstraint} that routes to a capability-matched agent.\n *\n * @example\n * ```typescript\n * const routeByCapability = capabilityRoute(\n * agents,\n * (facts) => facts.requiredCapabilities as string[],\n * (facts) => facts.query as string,\n * );\n * ```\n */\nexport function capabilityRoute(\n registry: AgentRegistry,\n getCapabilities: (facts: Record<string, unknown>) => string[],\n getInput: (facts: Record<string, unknown>) => string,\n options?: {\n priority?: number;\n select?: (matches: string[], registry: AgentRegistry) => string;\n },\n): OrchestratorConstraint<Record<string, unknown>> {\n const { priority, select } = options ?? {};\n\n // Cache matches between when() and require() using a generation counter\n // to ensure require() only uses cache from the same evaluation cycle\n let cachedMatches: string[] = [];\n let cacheGeneration = 0;\n let requireGeneration = -1;\n\n return {\n when: (facts) => {\n const caps = getCapabilities(facts);\n cachedMatches = findAgentsByCapability(registry, caps);\n cacheGeneration++;\n\n return cachedMatches.length > 0;\n },\n require: (facts) => {\n // Use cached matches only if from the current when() call\n const matches =\n cacheGeneration !== requireGeneration && cachedMatches.length > 0\n ? ((requireGeneration = cacheGeneration), cachedMatches)\n : findAgentsByCapability(registry, getCapabilities(facts));\n\n if (matches.length === 0) {\n throw new Error(\n `[Directive MultiAgent] No agent matches capabilities: ${getCapabilities(facts).join(\", \")}`,\n );\n }\n\n const chosen = select ? select(matches, registry) : matches[0]!;\n\n return {\n type: \"RUN_AGENT\",\n agent: chosen,\n input: getInput(facts),\n } as RunAgentRequirement;\n },\n priority,\n };\n}\n\n// ============================================================================\n// Constraint-Driven Agent Spawning\n// ============================================================================\n\nlet spawnOnConditionOptionsWarned = false;\n\n/**\n * Options for spawnOnCondition.\n */\nexport interface SpawnOnConditionOptions {\n /** Priority for the constraint (higher = evaluated first) */\n priority?: number;\n /** Additional context passed to the agent */\n context?: Record<string, unknown>;\n}\n\n/**\n * Create a constraint that auto-runs a single agent when a condition is met.\n *\n * The orchestrator's built-in `RUN_AGENT` resolver handles execution --\n * you only need to add this to your `constraints` config.\n *\n * @param config - Condition, agent ID, input builder, and optional priority/context.\n * @returns An {@link OrchestratorConstraint} that emits a `RUN_AGENT` requirement.\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: { reviewer: { agent: reviewerAgent } },\n * constraints: {\n * autoReview: spawnOnCondition({\n * when: (facts) => (facts.confidence as number) < 0.7,\n * agent: 'reviewer',\n * input: (facts) => `Review this: ${facts.lastOutput}`,\n * }),\n * },\n * });\n * ```\n */\nexport function spawnOnCondition(config: {\n when: (facts: Record<string, unknown>) => boolean;\n agent: string;\n input: (facts: Record<string, unknown>) => string;\n /** Priority for the constraint (higher = evaluated first) */\n priority?: number;\n /** Additional context passed to the agent */\n context?: Record<string, unknown>;\n options?: SpawnOnConditionOptions;\n}): OrchestratorConstraint<Record<string, unknown>> {\n const { when, agent, input, priority, context, options } = config;\n if (options && !spawnOnConditionOptionsWarned) {\n spawnOnConditionOptionsWarned = true;\n console.warn(\n \"[Directive MultiAgent] spawnOnCondition `options` is deprecated. Use top-level `priority` and `context` instead.\",\n );\n }\n const effectivePriority = priority ?? options?.priority;\n const effectiveContext = context ?? options?.context;\n\n return {\n when,\n require: (facts) =>\n ({\n type: \"RUN_AGENT\",\n agent,\n input: input(facts),\n context: effectiveContext,\n }) as RunAgentRequirement,\n priority: effectivePriority,\n };\n}\n\n// ============================================================================\n// Debate Pattern\n// ============================================================================\n\n/** Configuration for the debate() factory and runDebate() imperative API. @see DebatePattern */\nexport type DebateConfig<T = unknown> = Omit<DebatePattern<T>, \"type\">;\n\n/**\n * Create a debate pattern where agents compete and an evaluator picks the best.\n *\n * @remarks\n * Flow:\n * 1. All agents produce proposals in parallel\n * 2. Evaluator receives all proposals and picks a winner\n * 3. Optionally repeat with evaluator feedback for refinement\n *\n * @param config - Debate configuration with `handlers`, `evaluator`, and optional settings.\n * @returns A {@link DebatePattern} configuration object.\n * @see {@link runDebate} for the imperative API\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: {\n * optimist: { agent: optimistAgent },\n * pessimist: { agent: pessimistAgent },\n * judge: { agent: judgeAgent },\n * },\n * patterns: {\n * debate: debate({\n * handlers: ['optimist', 'pessimist'],\n * evaluator: 'judge',\n * maxRounds: 2,\n * }),\n * },\n * });\n *\n * const result = await orchestrator.runPattern('debate', 'Should we invest in X?');\n * ```\n */\nexport function debate<T = unknown>(config: DebateConfig<T>): DebatePattern<T> {\n const {\n handlers,\n evaluator,\n maxRounds,\n extract,\n parseJudgement,\n signal,\n timeout,\n } = config;\n\n if (handlers.length < 2) {\n throw new Error(\n \"[Directive MultiAgent] debate requires at least 2 handlers\",\n );\n }\n if (maxRounds != null && (maxRounds < 1 || !Number.isFinite(maxRounds))) {\n throw new Error(\"[Directive MultiAgent] debate maxRounds must be >= 1\");\n }\n\n return {\n type: \"debate\",\n handlers,\n evaluator,\n maxRounds,\n extract,\n parseJudgement,\n signal,\n timeout,\n };\n}\n\n/**\n * Run a debate imperatively on an orchestrator without pattern registration.\n *\n * Delegates to `orchestrator.runDebate()` so that lifecycle hooks, debug timeline,\n * and signal propagation all work correctly.\n *\n * @param orchestrator - The multi-agent orchestrator instance to run the debate on.\n * @param config - Debate configuration with agents, evaluator, and optional settings.\n * @param input - The initial input/prompt for the debate.\n * @returns The winning agent's output, the winner ID, and all proposals from each round.\n * @see {@link debate} for the declarative pattern API\n */\nexport async function runDebate<T>(\n orchestrator: MultiAgentOrchestrator,\n config: DebateConfig<T>,\n input: string,\n): Promise<DebateResult<T>> {\n return orchestrator.runDebate<T>(config.handlers, config.evaluator, input, {\n maxRounds: config.maxRounds,\n extract: config.extract,\n parseJudgement: config.parseJudgement,\n signal: config.signal,\n timeout: config.timeout,\n });\n}\n\n// ============================================================================\n// Derivation-Triggered Constraints\n// ============================================================================\n\n/**\n * Create a constraint that fires when a cross-agent derivation meets a condition.\n *\n * @remarks\n * Wire this into the orchestrator's `derive` config and `constraints` config together.\n * The constraint's `when()` reads the derivation value from the orchestrator's derived snapshot.\n *\n * @param derivationId - The ID of the cross-agent derivation to watch.\n * @param condition - Predicate that receives the derivation value and returns `true` when the constraint should fire.\n * @param action - Agent ID, input builder, and optional priority/context for the emitted requirement.\n * @returns An {@link OrchestratorConstraint} that emits a `RUN_AGENT` requirement when the derivation condition is met.\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: { ... },\n * derive: {\n * totalCost: (snap) => snap.coordinator.globalTokens * 0.001,\n * },\n * constraints: {\n * budgetAlert: derivedConstraint('totalCost', (cost) => cost > 5.0, {\n * agent: 'budget-manager',\n * input: (value) => `Budget exceeded: $${value}`,\n * }),\n * },\n * });\n * ```\n */\nexport function derivedConstraint(\n derivationId: string,\n condition: (value: unknown) => boolean,\n action: {\n agent: string;\n input: (value: unknown) => string;\n priority?: number;\n context?: Record<string, unknown>;\n },\n): OrchestratorConstraint<Record<string, unknown>> {\n // Generation counter to guard against stale closure between when() and require()\n let lastValue: unknown = undefined;\n let whenGeneration = 0;\n let requireGeneration = -1;\n\n return {\n when: (facts) => {\n // Read derivation value from coordinator facts (injected by recomputeDerivations)\n const derived = facts.__derived as Record<string, unknown> | undefined;\n const value = derived?.[derivationId];\n lastValue = value;\n whenGeneration++;\n\n return condition(value);\n },\n require: (facts) => {\n // Re-read from facts if generation is stale (concurrent evaluation)\n const value =\n whenGeneration !== requireGeneration\n ? ((requireGeneration = whenGeneration), lastValue)\n : (facts.__derived as Record<string, unknown> | undefined)?.[\n derivationId\n ];\n\n return {\n type: \"RUN_AGENT\",\n agent: action.agent,\n input: action.input(value),\n context: action.context,\n } as RunAgentRequirement;\n },\n priority: action.priority,\n };\n}\n\n// ============================================================================\n// Pool Auto-Scaling Constraint\n// ============================================================================\n\n/** Configuration for spawnPool constraint-driven auto-scaling */\nexport interface SpawnPoolConfig {\n /** Agent ID to spawn (must be registered in the orchestrator) */\n agent: string;\n /** Build the input for each spawned agent. Receives current facts and spawn index (0-based). */\n input: (facts: Record<string, unknown>, index: number) => string;\n /** How many agents to spawn. Number or function of facts for dynamic scaling. */\n count: number | ((facts: Record<string, unknown>) => number);\n /** Priority for the constraint. @default undefined */\n priority?: number;\n /** Additional context passed to each spawned agent */\n context?: Record<string, unknown>;\n}\n\n/**\n * Create a constraint that spawns a pool of agent instances when a condition is met.\n *\n * @remarks\n * Unlike {@link spawnOnCondition} (which spawns one agent), `spawnPool` can target N agents.\n * However, only one requirement is emitted per constraint evaluation cycle -- the constraint\n * re-fires on subsequent cycles as long as `when()` returns true, spawning one agent per cycle.\n *\n * @param when - Predicate that triggers the pool spawn.\n * @param config - Pool configuration with agent ID, input builder, count, and optional priority/context.\n * @returns An {@link OrchestratorConstraint} that emits `RUN_AGENT` requirements.\n * @see {@link spawnOnCondition} for spawning a single agent\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: { worker: { agent: workerAgent } },\n * constraints: {\n * scaleWorkers: spawnPool(\n * (facts) => (facts.pendingTasks as number) > 0,\n * {\n * agent: 'worker',\n * count: (facts) => Math.min(facts.pendingTasks as number, 5),\n * input: (facts, i) => `Process task ${i + 1}`,\n * },\n * ),\n * },\n * });\n * ```\n */\nexport function spawnPool(\n when: (facts: Record<string, unknown>) => boolean,\n config: SpawnPoolConfig,\n): OrchestratorConstraint<Record<string, unknown>> {\n const { agent, input, priority, context } = config;\n\n return {\n when,\n require: (facts) => {\n // Only the first requirement is used per constraint cycle.\n // For count > 1, the constraint re-fires on subsequent cycles as long as `when` is true.\n return {\n type: \"RUN_AGENT\",\n agent,\n input: input(facts, 0),\n context,\n } as RunAgentRequirement;\n },\n priority,\n };\n}\n","/**\n * Multi-Agent Orchestration Patterns\n *\n * Provides patterns for coordinating multiple AI agents:\n * - Parallel execution with result merging\n * - Sequential pipelines\n * - Supervisor patterns with worker delegation\n * - Constraint-driven agent selection\n *\n * @example\n * ```typescript\n * import { createMultiAgentOrchestrator } from '@directive-run/ai';\n *\n * const orchestrator = createMultiAgentOrchestrator({\n * agents: {\n * researcher: { agent: researchAgent, maxConcurrent: 3 },\n * writer: { agent: writerAgent, maxConcurrent: 1 },\n * reviewer: { agent: reviewerAgent, maxConcurrent: 1 },\n * },\n * patterns: {\n * parallelResearch: {\n * type: 'parallel',\n * handlers: ['researcher', 'researcher', 'researcher'],\n * merge: (results) => combineResearch(results),\n * },\n * },\n * });\n * ```\n */\n\nimport type { ModuleSchema, Requirement, System } from \"@directive-run/core\";\nimport { createModule, createSystem, t } from \"@directive-run/core\";\nimport {\n createCallbackPlugin,\n getBridgeFact,\n requirementGuard,\n setBridgeFact,\n} from \"@directive-run/core/adapter-utils\";\nimport type {\n OrchestratorStreamChunk,\n OrchestratorStreamResult,\n} from \"./agent-orchestrator.js\";\nimport {\n type DebugTimeline,\n createDebugTimeline,\n createDebugTimelinePlugin,\n} from \"./debug-timeline.js\";\nimport {\n executeAgentWithRetry,\n executeGuardrailWithRetry,\n normalizeGuardrail,\n} from \"./guardrail-utils.js\";\nimport { type HealthMonitor, createHealthMonitor } from \"./health-monitor.js\";\nimport { formatSystemMeta } from \"./meta-context.js\";\nimport {\n convertOrchestratorConstraints,\n getAgentState,\n getApprovalState,\n getBreakpointState,\n getConversation,\n getOrchestratorState,\n getToolCalls,\n setAgentState,\n setApprovalState,\n setBreakpointState,\n setConversation,\n setToolCalls,\n} from \"./orchestrator-bridge.js\";\nimport { ReflectionExhaustedError } from \"./reflection.js\";\nimport type { ReflectionEvaluation } from \"./reflection.js\";\nimport type {\n AgentLike,\n AgentRunner,\n AgentSelectionStrategy,\n ApprovalRequest,\n CrossAgentSnapshot,\n DagCheckpointState,\n DagExecutionContext,\n DagNode,\n DagPattern,\n DebateCheckpointState,\n GoalCheckpointState,\n GoalMetrics,\n GoalNode,\n GoalPattern,\n GoalResult,\n GoalStepMetrics,\n MultiAgentLifecycleHooks,\n OrchestratorResolverContext,\n OrchestratorState,\n PatternCheckpointConfig,\n PatternCheckpointState,\n ReflectCheckpointState,\n RejectedRequest,\n RelaxationContext,\n RelaxationRecord,\n RelaxationTier,\n RerouteEvent,\n RunOptions,\n RunResult,\n Scratchpad,\n SequentialCheckpointState,\n SupervisorCheckpointState,\n} from \"./types.js\";\nimport {\n APPROVAL_KEY,\n BREAKPOINT_KEY,\n GuardrailError,\n SCRATCHPAD_KEY,\n isGuardrailError,\n orchestratorBridgeSchema,\n} from \"./types.js\";\n\nimport type {\n BreakpointContext,\n BreakpointModifications,\n BreakpointRequest,\n MultiAgentBreakpointType,\n} from \"./breakpoints.js\";\nimport {\n MAX_BREAKPOINT_HISTORY,\n createBreakpointId,\n createInitialBreakpointState,\n matchBreakpoint,\n} from \"./breakpoints.js\";\nimport {\n type Checkpoint,\n type CheckpointStore,\n type MultiAgentCheckpointLocalState,\n createCheckpointId,\n validateCheckpoint,\n} from \"./checkpoint.js\";\nimport {\n type MultiplexedStreamResult,\n mergeTaggedStreams,\n} from \"./streaming.js\";\nimport {\n extractJsonFromOutput,\n withStructuredOutput,\n} from \"./structured-output.js\";\n\nimport { safeStringify } from \"@directive-run/core/internals\";\n\n// ============================================================================\n// Re-exports from extracted modules (types, utils, Semaphore)\n// ============================================================================\n\nexport * from \"./orchestrator-types.js\";\nexport {\n Semaphore,\n shallowEqual,\n getPatternStep,\n getCheckpointProgress,\n diffCheckpoints,\n forkFromCheckpoint,\n validateDagAcyclic,\n} from \"./orchestrator-utils.js\";\n\n// ============================================================================\n// Internal imports from extracted modules (used by createMultiAgentOrchestrator)\n// ============================================================================\n\nimport type {\n AgentRegistration,\n AgentRegistry,\n DebatePattern,\n DebateResult,\n ExecutionPattern,\n HandoffRequest,\n HandoffResult,\n MultiAgentOrchestrator,\n MultiAgentOrchestratorOptions,\n MultiAgentRunCallOptions,\n MultiAgentState,\n ParallelPattern,\n RacePattern,\n RaceResult,\n ReflectIterationRecord,\n ReflectPattern,\n RunAgentRequirement,\n SequentialPattern,\n SupervisorPattern,\n TaskContext,\n TaskRegistration,\n} from \"./orchestrator-types.js\";\nimport {\n Semaphore,\n getPatternStep,\n shallowEqual,\n validateDagAcyclic,\n} from \"./orchestrator-utils.js\";\n\n/** Built-in pause requirement type */\ninterface PauseBudgetExceededReq extends Requirement {\n type: \"__PAUSE_BUDGET_EXCEEDED\";\n}\n\n/** Built-in RUN_AGENT requirement guard */\nconst isRunAgentReq = requirementGuard<RunAgentRequirement>(\"RUN_AGENT\");\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * Create a multi-agent orchestrator backed by a Directive System.\n *\n * Each registered agent becomes a namespaced Directive module with reactive state,\n * constraint evaluation, guardrails, streaming, approval, memory, retry, budget,\n * hooks, and time-travel debugging -- all features at parity with {@link createAgentOrchestrator}.\n *\n * @param options - Orchestrator configuration including runner, agent registry, patterns, guardrails, and plugins.\n * @returns A {@link MultiAgentOrchestrator} instance with `runAgent`, `runPattern`, `handoff`, and checkpoint APIs.\n *\n * @example\n * ```typescript\n * const orchestrator = createMultiAgentOrchestrator({\n * runner,\n * agents: {\n * researcher: { agent: researchAgent, maxConcurrent: 3 },\n * writer: { agent: writerAgent },\n * reviewer: { agent: reviewerAgent },\n * },\n * guardrails: {\n * input: [createEnhancedPIIGuardrail()],\n * output: [checkToxicity],\n * },\n * hooks: {\n * onAgentStart: ({ agentId, input }) => console.log(`${agentId}: ${input}`),\n * },\n * maxTokenBudget: 50000,\n * debug: true,\n * });\n *\n * // Run with full guardrails + approval + streaming\n * const result = await orchestrator.runAgent('researcher', 'What is AI?');\n *\n * // Stream agent output\n * const { stream } = orchestrator.runAgentStream('writer', 'Write about AI');\n * for await (const chunk of stream) {\n * if (chunk.type === 'token') process.stdout.write(chunk.data);\n * }\n * ```\n *\n * @throws If a pattern references an agent that is not in the registry\n * @throws If autoApproveToolCalls is false but no onApprovalRequest callback is provided\n * @public\n */\nexport function createMultiAgentOrchestrator(\n options: MultiAgentOrchestratorOptions,\n): MultiAgentOrchestrator {\n const {\n runner,\n agents: inputAgents,\n patterns = {},\n onHandoff,\n onHandoffComplete,\n maxHandoffHistory = 1000,\n debug: rawDebug = false,\n guardrails = {},\n hooks = {},\n memory: sharedMemory,\n agentRetry: defaultAgentRetry,\n maxTokenBudget,\n plugins = [],\n onApprovalRequest,\n autoApproveToolCalls = true,\n approvalTimeoutMs = 300000,\n constraints: userConstraints = {},\n resolvers: userResolvers = {},\n circuitBreaker: orchestratorCircuitBreaker,\n budgetWarningThreshold = 0.8,\n onBudgetWarning,\n selfHealing,\n checkpointStore,\n breakpoints: breakpointConfigs = [],\n onBreakpoint,\n breakpointTimeoutMs = 300000,\n derive: userDerivations,\n scratchpad: scratchpadConfig,\n tasks: inputTasks = {},\n } = options;\n\n // Normalize debug config\n const debug = typeof rawDebug === \"object\" ? true : !!rawDebug;\n const MAX_VERBOSE_LENGTH = 5000;\n\n // Shallow copy so registerAgent/unregisterAgent don't mutate the caller's object\n const agents: AgentRegistry = { ...inputAgents };\n\n // Task registry (shallow copy for same reason as agents)\n const tasks: Record<string, TaskRegistration> = { ...inputTasks };\n\n // Task state tracking (parallel to agentStates)\n const taskStates: Record<\n string,\n {\n status: string;\n lastOutput?: unknown;\n lastError?: string;\n startTime?: number;\n durationMs?: number;\n }\n > = Object.create(null);\n for (const taskId of Object.keys(tasks)) {\n taskStates[taskId] = { status: \"idle\" };\n }\n\n // Task semaphores are created after validation (below)\n const taskSemaphores = new Map<string, Semaphore>();\n\n // Enforce approval workflow configuration\n if (!autoApproveToolCalls && !onApprovalRequest) {\n throw new Error(\n \"[Directive MultiAgent] Invalid approval configuration: autoApproveToolCalls is false but no onApprovalRequest callback provided. \" +\n \"Tool calls would wait for approval indefinitely. Either:\\n\" +\n \" - Set autoApproveToolCalls: true to auto-approve all tool calls\\n\" +\n \" - Provide an onApprovalRequest callback to handle approvals programmatically\",\n );\n }\n\n // Validate budget warning threshold\n if (budgetWarningThreshold < 0 || budgetWarningThreshold > 1) {\n throw new Error(\n `[Directive MultiAgent] budgetWarningThreshold must be between 0 and 1, got ${budgetWarningThreshold}`,\n );\n }\n\n // Validate reserved agent IDs\n const RESERVED_IDS = new Set([\n \"__coord\",\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n ]);\n for (const agentId of Object.keys(agents)) {\n if (RESERVED_IDS.has(agentId)) {\n throw new Error(\n `[Directive MultiAgent] Agent ID \"${agentId}\" is reserved and cannot be used`,\n );\n }\n }\n for (const [taskId, taskReg] of Object.entries(tasks)) {\n if (!taskId || taskId.trim() !== taskId) {\n throw new Error(\n `[Directive MultiAgent] Task ID must be a non-empty trimmed string, got \"${taskId}\"`,\n );\n }\n if (RESERVED_IDS.has(taskId)) {\n throw new Error(\n `[Directive MultiAgent] Task ID \"${taskId}\" is reserved and cannot be used`,\n );\n }\n // Validate timeout and maxConcurrent\n if (\n taskReg.timeout !== undefined &&\n (!Number.isFinite(taskReg.timeout) || taskReg.timeout <= 0)\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" timeout must be a finite number > 0`,\n );\n }\n if (\n taskReg.maxConcurrent !== undefined &&\n (!Number.isFinite(taskReg.maxConcurrent) ||\n taskReg.maxConcurrent < 1 ||\n !Number.isInteger(taskReg.maxConcurrent))\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" maxConcurrent must be a finite integer >= 1`,\n );\n }\n // Validate retry configuration\n if (taskReg.retry) {\n const { attempts, delayMs } = taskReg.retry;\n if (!Number.isFinite(attempts) || attempts < 1) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry attempts must be a finite number >= 1`,\n );\n }\n if (delayMs !== undefined && (!Number.isFinite(delayMs) || delayMs < 0)) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry delayMs must be a finite number >= 0`,\n );\n }\n }\n }\n\n // Create task semaphores (after validation passes)\n for (const [taskId, reg] of Object.entries(tasks)) {\n taskSemaphores.set(taskId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n\n // Validate no ID collisions between agents and tasks\n for (const taskId of Object.keys(tasks)) {\n if (agents[taskId]) {\n throw new Error(\n `[Directive MultiAgent] ID \"${taskId}\" is registered as both an agent and a task. IDs must be unique across both registries.`,\n );\n }\n }\n\n // Validate that all pattern handlers exist in the combined registry\n const registeredAgentIds = new Set([\n ...Object.keys(agents),\n ...Object.keys(tasks),\n ]);\n const missingAgents: Array<{ patternId: string; agentId: string }> = [];\n\n for (const [patternId, pattern] of Object.entries(patterns)) {\n const agentsToCheck: string[] = [];\n\n switch (pattern.type) {\n case \"parallel\":\n agentsToCheck.push(...pattern.handlers);\n break;\n case \"sequential\":\n agentsToCheck.push(...pattern.handlers);\n break;\n case \"supervisor\":\n agentsToCheck.push(pattern.supervisor, ...pattern.workers);\n break;\n case \"dag\":\n for (const node of Object.values(pattern.nodes)) {\n agentsToCheck.push(node.handler);\n }\n break;\n case \"reflect\":\n agentsToCheck.push(pattern.handler, pattern.evaluator);\n break;\n case \"race\":\n agentsToCheck.push(...pattern.handlers);\n break;\n case \"debate\":\n agentsToCheck.push(\n ...(pattern as DebatePattern).handlers,\n (pattern as DebatePattern).evaluator,\n );\n break;\n }\n\n for (const agentId of agentsToCheck) {\n if (!registeredAgentIds.has(agentId)) {\n missingAgents.push({ patternId, agentId });\n }\n }\n }\n\n if (missingAgents.length > 0) {\n const details = missingAgents\n .map(\n ({ patternId, agentId }) =>\n ` - Pattern \"${patternId}\" references unknown agent \"${agentId}\"`,\n )\n .join(\"\\n\");\n throw new Error(\n `[Directive MultiAgent] Pattern validation failed. The following agents are not registered:\\n${details}\\n\\nRegistered agents: ${[...registeredAgentIds].join(\", \") || \"(none)\"}`,\n );\n }\n\n // Validate DAG patterns for cycles\n for (const [patternId, pattern] of Object.entries(patterns)) {\n if (pattern.type === \"dag\") {\n validateDagAcyclic(patternId, pattern.nodes);\n }\n }\n\n // ---- Debug Timeline setup ----\n let timeline: DebugTimeline | null = null;\n let timelinePlugin: ReturnType<typeof createDebugTimelinePlugin> | null =\n null;\n if (debug) {\n timeline = createDebugTimeline({\n getSnapshotId: () => {\n try {\n return (system as any).history?.currentIndex ?? null;\n } catch {\n return null;\n }\n },\n goToSnapshot: (snapshotId: number) => {\n try {\n (system as any).history?.goTo?.(snapshotId);\n } catch {\n // System may not support goTo\n }\n },\n });\n }\n\n // ---- Health Monitor setup ----\n let healthMonitorInstance: HealthMonitor | null = null;\n let roundRobinCounters: Map<string, number> | null = null;\n if (selfHealing) {\n healthMonitorInstance = createHealthMonitor(selfHealing.healthMonitor);\n if (selfHealing.selectionStrategy === \"round-robin\") {\n roundRobinCounters = new Map();\n }\n }\n\n /** Safe hook caller — user-provided hooks must never crash the orchestrator */\n function fireHook<K extends keyof MultiAgentLifecycleHooks>(\n name: K,\n event: Parameters<NonNullable<MultiAgentLifecycleHooks[K]>>[0],\n ): void {\n try {\n (hooks[name] as ((e: typeof event) => void) | undefined)?.(event);\n } catch (hookError) {\n if (debug) {\n console.debug(`[Directive MultiAgent] hooks.${name} threw:`, hookError);\n }\n }\n }\n\n // ---- Coordinator Module ----\n // biome-ignore lint/suspicious/noExplicitAny: Dynamic schema construction\n const coordFacts: Record<string, any> = {\n __globalTokens: t.number(),\n __status: t.string(),\n __handoffs: t.array() as unknown as ReturnType<typeof t.array>,\n __handoffResults: t.array() as unknown as ReturnType<typeof t.array>,\n __budgetWarningFired: t.boolean(),\n };\n\n // Add scratchpad fact to coordinator schema if configured\n if (scratchpadConfig) {\n coordFacts[SCRATCHPAD_KEY] = t.object() as unknown;\n }\n\n // Add __derived bridge fact so constraints can read derivation values via facts.__derived\n if (userDerivations && Object.keys(userDerivations).length > 0) {\n coordFacts.__derived = t.object() as unknown;\n }\n\n const coordSchema = {\n facts: coordFacts,\n derivations: {},\n events: {},\n requirements: {},\n } satisfies ModuleSchema;\n\n // Convert orchestrator-level constraints\n // biome-ignore lint/suspicious/noExplicitAny: Constraint types complex\n const coordConstraints: Record<string, any> =\n convertOrchestratorConstraints(userConstraints);\n\n // Add built-in budget constraint — reads coordinator fact reactively\n if (maxTokenBudget) {\n coordConstraints.__budgetLimit = {\n priority: 100,\n // biome-ignore lint/suspicious/noExplicitAny: Facts type varies\n when: (facts: any) => {\n const tokens = getBridgeFact<number>(facts, \"__globalTokens\");\n\n return tokens > maxTokenBudget;\n },\n require: { type: \"__PAUSE_BUDGET_EXCEEDED\" } as PauseBudgetExceededReq,\n };\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: Resolver types complex\n const coordResolvers: Record<string, any> = Object.create(null);\n\n // Convert user-provided orchestrator-level resolvers\n for (const [id, resolver] of Object.entries(userResolvers)) {\n coordResolvers[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = {\n ...context.facts,\n ...state,\n } as unknown as Record<string, unknown> & OrchestratorState;\n\n const resolverCtx: OrchestratorResolverContext<\n Record<string, unknown>\n > = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runner<T>(agent, input, opts);\n },\n signal: context.signal,\n };\n\n return resolver.resolve(req, resolverCtx);\n },\n };\n }\n\n // Built-in pause resolver\n coordResolvers.__pause = {\n requirement: requirementGuard<PauseBudgetExceededReq>(\n \"__PAUSE_BUDGET_EXCEEDED\",\n ),\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async () => {\n globalStatus = \"paused\";\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] Budget exceeded — all agents paused\",\n );\n }\n },\n };\n\n // Built-in RUN_AGENT resolver\n coordResolvers.__runAgent = {\n requirement: isRunAgentReq,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: RunAgentRequirement) => {\n await runSingleAgent(req.agent, req.input);\n },\n };\n\n const coordinatorModule = createModule(\"__coord\", {\n schema: coordSchema,\n init: (facts) => {\n setBridgeFact(facts, \"__globalTokens\", 0);\n setBridgeFact(facts, \"__status\", \"idle\");\n setBridgeFact(facts, \"__handoffs\", []);\n setBridgeFact(facts, \"__handoffResults\", []);\n setBridgeFact(facts, \"__budgetWarningFired\", false);\n if (scratchpadConfig) {\n setBridgeFact(facts, SCRATCHPAD_KEY, { ...scratchpadConfig.init });\n }\n // Derived values initialized via recomputeDerivations() after system creation\n },\n constraints: coordConstraints,\n resolvers: coordResolvers as any,\n });\n\n // ---- Per-Agent Modules (as a map for createSystem) ----\n // biome-ignore lint/suspicious/noExplicitAny: Module types vary\n const modulesMap: Record<string, any> = Object.create(null);\n modulesMap.__coord = coordinatorModule;\n\n for (const [agentId, registration] of Object.entries(agents)) {\n // biome-ignore lint/suspicious/noExplicitAny: Constraint types complex\n const perAgentConstraints: Record<string, any> = registration.constraints\n ? convertOrchestratorConstraints(registration.constraints)\n : {};\n\n // Convert per-agent resolvers\n // biome-ignore lint/suspicious/noExplicitAny: Resolver types complex\n const perAgentResolvers: Record<string, any> = Object.create(null);\n if (registration.resolvers) {\n for (const [id, resolver] of Object.entries(registration.resolvers)) {\n perAgentResolvers[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = {\n ...context.facts,\n ...state,\n } as unknown as Record<string, unknown> & OrchestratorState;\n\n const resolverContext: OrchestratorResolverContext<\n Record<string, unknown>\n > = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runner<T>(agent, input, opts);\n },\n signal: context.signal,\n };\n\n return resolver.resolve(req, resolverContext);\n },\n };\n }\n }\n\n modulesMap[agentId] = createModule(agentId, {\n schema: orchestratorBridgeSchema,\n init: (facts) => {\n setAgentState(facts, {\n status: \"idle\",\n currentAgent: registration.agent.name,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(facts, { pending: [], approved: [], rejected: [] });\n setConversation(facts, []);\n setToolCalls(facts, []);\n setBreakpointState(facts, createInitialBreakpointState());\n },\n constraints: perAgentConstraints,\n resolvers:\n Object.keys(perAgentResolvers).length > 0\n ? (perAgentResolvers as any)\n : undefined,\n });\n }\n\n // ---- Create System ----\n const callbackPlugin = createCallbackPlugin(\n \"directive-multi-agent-callbacks\",\n {},\n );\n\n // Build plugins array with optional timeline plugin\n const allPlugins = [...plugins, callbackPlugin];\n if (debug && timeline) {\n // Create timeline plugin after system is available (uses lazy getSnapshotId)\n timelinePlugin = createDebugTimelinePlugin(timeline, () => {\n try {\n return (system as any).history?.currentIndex ?? null;\n } catch {\n return null;\n }\n });\n allPlugins.push(timelinePlugin);\n }\n\n const system = createSystem({\n modules: modulesMap,\n plugins: allPlugins,\n history: debug ? true : undefined,\n } as any);\n\n system.start();\n\n // Maximum conversation messages to retain per agent (prevent unbounded growth)\n const MAX_CONVERSATION_MESSAGES = 500;\n const MAX_TOOL_CALLS = 200;\n\n // ---- Mutable State (tracked via System facts + local) ----\n let globalTokenCount = 0;\n let globalStatus: \"idle\" | \"paused\" = \"idle\";\n let destroyed = false;\n // Tracks in-flight runAgent calls (incremented synchronously before any await)\n // so waitForIdle knows when runs have been dispatched but not yet started\n let pendingRuns = 0;\n // Reflection score history — updated after each runReflectPattern call\n let lastReflectionHistory: ReflectIterationRecord[] | null = null;\n\n function assertNotDestroyed(): void {\n if (destroyed) {\n throw new Error(\"[Directive MultiAgent] Orchestrator has been destroyed\");\n }\n }\n\n // Semaphores for concurrency control\n const semaphores = new Map<string, Semaphore>();\n for (const [agentId, reg] of Object.entries(agents)) {\n semaphores.set(agentId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n\n // Agent states: lightweight local tracking for orchestrator API methods (getAgentState, etc.)\n // System facts (per-agent bridge schema) provide the rich state for constraints/resolvers/plugins.\n // Both are updated together — local state is the quick-access view, System facts drive reactivity.\n const agentStates: Record<string, MultiAgentState[\"__agents\"][string]> =\n Object.create(null);\n for (const agentId of Object.keys(agents)) {\n agentStates[agentId] = {\n status: \"idle\",\n runCount: 0,\n totalTokens: 0,\n };\n }\n\n // Handoff tracking\n const MAX_HANDOFF_RESULTS = maxHandoffHistory;\n const pendingHandoffs: HandoffRequest[] = [];\n const handoffResults: HandoffResult[] = [];\n let handoffCounter = 0;\n\n function addHandoffResult(result: HandoffResult): void {\n handoffResults.push(result);\n while (handoffResults.length > MAX_HANDOFF_RESULTS) {\n handoffResults.shift();\n }\n }\n\n // Approval request reverse index: requestId → agentId for O(1) approve/reject lookup\n const approvalRequestIndex = new Map<string, string>();\n\n // Idle waiters — notified whenever any agent's status changes\n const idleWaiters = new Set<() => void>();\n function notifyIdleWaiters(): void {\n for (const waiter of idleWaiters) {\n waiter();\n }\n }\n\n // ---- Cross-Agent Derivations ----\n const derivedValues: Record<string, unknown> = Object.create(null);\n const derivedChangeCallbacks = new Set<\n (id: string, value: unknown) => void\n >();\n\n /** Build a CrossAgentSnapshot from current state */\n function buildCrossAgentSnapshot(): CrossAgentSnapshot {\n const agentsSnap: CrossAgentSnapshot[\"agents\"] = Object.create(null);\n for (const [id, s] of Object.entries(agentStates)) {\n agentsSnap[id] = {\n status: s.status,\n lastInput: s.lastInput,\n lastOutput: s.lastOutput,\n lastError: s.lastError,\n runCount: s.runCount,\n totalTokens: s.totalTokens,\n };\n }\n\n const coordFacts = getAgentFacts(\"__coord\");\n const snapshot: CrossAgentSnapshot = {\n agents: agentsSnap,\n coordinator: {\n globalTokens: globalTokenCount,\n status: globalStatus,\n },\n };\n\n // Include scratchpad in snapshot if configured\n if (scratchpadConfig && coordFacts) {\n snapshot.scratchpad =\n getBridgeFact<Record<string, unknown>>(coordFacts, SCRATCHPAD_KEY) ??\n {};\n }\n\n return snapshot;\n }\n\n /** Recompute all cross-agent derivations */\n function recomputeDerivations(): void {\n if (!userDerivations) {\n return;\n }\n\n const snapshot = buildCrossAgentSnapshot();\n\n // Collect changed derivations and errors during the batch (fact writes only)\n type ChangedEntry = { derivId: string; newValue: unknown };\n type ErrorEntry = { derivId: string; derivError: unknown };\n const changed: ChangedEntry[] = [];\n const errors: ErrorEntry[] = [];\n\n system.batch(() => {\n for (const [derivId, derivFn] of Object.entries(userDerivations)) {\n try {\n const newValue = derivFn(snapshot);\n const oldValue = derivedValues[derivId];\n\n // Change detection: === for primitives, shallow equality for objects\n const hasChanged = !shallowEqual(newValue, oldValue);\n\n derivedValues[derivId] = newValue;\n\n if (hasChanged) {\n changed.push({ derivId, newValue });\n }\n } catch (derivError) {\n errors.push({ derivId, derivError });\n }\n }\n\n // Inject derived values into coordinator facts AFTER computation so constraints see current-cycle values\n const coordFacts = getAgentFacts(\"__coord\");\n if (coordFacts) {\n setBridgeFact(coordFacts, \"__derived\", { ...derivedValues });\n }\n });\n\n // Fire timeline records, hooks, and callbacks outside the batch\n for (const { derivId, newValue } of changed) {\n if (timeline) {\n timeline.record({\n type: \"derivation_update\",\n timestamp: Date.now(),\n snapshotId: null,\n derivationId: derivId,\n valueType: typeof newValue,\n });\n }\n\n fireHook(\"onDerivationUpdate\", {\n derivationId: derivId,\n value: newValue,\n timestamp: Date.now(),\n });\n\n for (const cb of derivedChangeCallbacks) {\n try {\n cb(derivId, newValue);\n } catch {\n // callback error is non-fatal\n }\n }\n }\n\n for (const { derivId, derivError } of errors) {\n if (debug) {\n console.warn(\n `[Directive MultiAgent] Derivation \"${derivId}\" threw:`,\n derivError,\n );\n }\n fireHook(\"onDerivationError\", {\n derivationId: derivId,\n error:\n derivError instanceof Error\n ? derivError\n : new Error(String(derivError)),\n timestamp: Date.now(),\n });\n }\n }\n\n // ---- Shared Scratchpad ----\n const scratchpadChangeCallbacks = new Set<\n (key: string, value: unknown) => void\n >();\n const scratchpadKeyCallbacks = new Map<\n string,\n Set<(key: string, value: unknown) => void>\n >();\n\n const scratchpadInstance: Scratchpad | null = scratchpadConfig\n ? {\n get(key: string): unknown {\n const coordFacts = getAgentFacts(\"__coord\");\n const data = getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n );\n if (data == null || !Object.hasOwn(data, key)) {\n return undefined;\n }\n\n return data[key];\n },\n\n set(key: string, value: unknown): void {\n if (\n key === \"__proto__\" ||\n key === \"constructor\" ||\n key === \"prototype\"\n ) {\n return;\n }\n\n const coordFacts = getAgentFacts(\"__coord\");\n const changedKeys = [key];\n system.batch(() => {\n const current =\n getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {};\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...current,\n [key]: value,\n });\n });\n\n notifyScratchpadChange(changedKeys, key, value);\n recomputeDerivations();\n },\n\n has(key: string): boolean {\n const coordFacts = getAgentFacts(\"__coord\");\n const data = getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n );\n\n return data != null && Object.hasOwn(data, key);\n },\n\n delete(key: string): void {\n if (\n key === \"__proto__\" ||\n key === \"constructor\" ||\n key === \"prototype\"\n ) {\n return;\n }\n const coordFacts = getAgentFacts(\"__coord\");\n system.batch(() => {\n const current =\n getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {};\n const { [key]: _, ...rest } = current;\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, rest);\n });\n\n notifyScratchpadChange([key], key, undefined);\n recomputeDerivations();\n },\n\n update(values: Record<string, unknown>): void {\n // Filter out prototype pollution keys\n const safeValues: Record<string, unknown> = Object.create(null);\n for (const k of Object.keys(values)) {\n if (k === \"__proto__\" || k === \"constructor\" || k === \"prototype\") {\n continue;\n }\n safeValues[k] = values[k];\n }\n\n const coordFacts = getAgentFacts(\"__coord\");\n const keys = Object.keys(safeValues);\n if (keys.length === 0) {\n return;\n }\n\n system.batch(() => {\n const current =\n getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {};\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...current,\n ...safeValues,\n });\n });\n\n for (const [k, v] of Object.entries(safeValues)) {\n notifyScratchpadChange(keys, k, v);\n }\n recomputeDerivations();\n },\n\n getAll(): Record<string, unknown> {\n const coordFacts = getAgentFacts(\"__coord\");\n\n return {\n ...(getBridgeFact<Record<string, unknown>>(\n coordFacts,\n SCRATCHPAD_KEY,\n ) ?? {}),\n };\n },\n\n subscribe(\n keys: string[],\n callback: (key: string, value: unknown) => void,\n ): () => void {\n for (const key of keys) {\n if (!scratchpadKeyCallbacks.has(key)) {\n scratchpadKeyCallbacks.set(key, new Set());\n }\n scratchpadKeyCallbacks.get(key)!.add(callback);\n }\n\n return () => {\n for (const key of keys) {\n scratchpadKeyCallbacks.get(key)?.delete(callback);\n }\n };\n },\n\n onChange(callback: (key: string, value: unknown) => void): () => void {\n scratchpadChangeCallbacks.add(callback);\n\n return () => {\n scratchpadChangeCallbacks.delete(callback);\n };\n },\n\n reset(): void {\n if (!scratchpadConfig) {\n return;\n }\n const coordFacts = getAgentFacts(\"__coord\");\n system.batch(() => {\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...scratchpadConfig.init,\n });\n });\n },\n }\n : null;\n\n function notifyScratchpadChange(\n allKeys: string[],\n key: string,\n value: unknown,\n ): void {\n // Fire key-specific callbacks\n const keyCbs = scratchpadKeyCallbacks.get(key);\n if (keyCbs) {\n for (const cb of keyCbs) {\n try {\n cb(key, value);\n } catch {\n /* non-fatal */\n }\n }\n }\n\n // Fire global change callbacks\n for (const cb of scratchpadChangeCallbacks) {\n try {\n cb(key, value);\n } catch {\n /* non-fatal */\n }\n }\n\n // Record timeline event (once per batch of keys, not per key)\n if (timeline && key === allKeys[allKeys.length - 1]) {\n timeline.record({\n type: \"scratchpad_update\",\n timestamp: Date.now(),\n snapshotId: null,\n keys: allKeys,\n });\n }\n\n // Fire lifecycle hook (once per batch of keys)\n if (key === allKeys[allKeys.length - 1]) {\n fireHook(\"onScratchpadUpdate\", {\n keys: allKeys,\n timestamp: Date.now(),\n });\n }\n }\n\n // ---- Breakpoint Infrastructure ----\n const breakpointModifications = new Map<string, BreakpointModifications>();\n const breakpointCancelReasons = new Map<string, string>();\n\n /** Wait for a breakpoint to be resolved or cancelled */\n function waitForBreakpointResolution(\n agentId: string,\n breakpointId: string,\n signal?: AbortSignal,\n ): Promise<BreakpointModifications | null> {\n return new Promise((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let settled = false;\n let onAbort: (() => void) | undefined;\n const agentFacts = getAgentFacts(agentId);\n\n const cleanupAll = () => {\n if (settled) {\n return;\n }\n settled = true;\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (onAbort && signal) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n unsubscribe();\n };\n\n const unsubscribe = system.subscribe(\n [`${agentId}.${BREAKPOINT_KEY}`],\n () => {\n const bpState = getBreakpointState(agentFacts);\n if (bpState.resolved.includes(breakpointId)) {\n cleanupAll();\n const mods = breakpointModifications.get(breakpointId) ?? null;\n breakpointModifications.delete(breakpointId);\n\n resolve(mods);\n } else if (bpState.cancelled.includes(breakpointId)) {\n cleanupAll();\n breakpointModifications.delete(breakpointId);\n const cancelReason = breakpointCancelReasons.get(breakpointId);\n breakpointCancelReasons.delete(breakpointId);\n reject(\n new Error(\n cancelReason\n ? `[Directive MultiAgent] Breakpoint ${breakpointId} cancelled: ${cancelReason}`\n : `[Directive MultiAgent] Breakpoint ${breakpointId} cancelled`,\n ),\n );\n }\n },\n );\n\n if (signal) {\n onAbort = () => {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Breakpoint wait aborted for ${breakpointId}`,\n ),\n );\n };\n if (signal.aborted) {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Breakpoint wait aborted for ${breakpointId}`,\n ),\n );\n\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n timeoutId = setTimeout(() => {\n cleanupAll();\n breakpointModifications.delete(breakpointId);\n breakpointCancelReasons.delete(breakpointId);\n reject(\n new Error(\n `[Directive MultiAgent] Breakpoint timeout: ${breakpointId} not resolved within ${Math.round(breakpointTimeoutMs / 1000)}s`,\n ),\n );\n }, breakpointTimeoutMs);\n });\n }\n\n /** Check and handle a breakpoint at a given execution point */\n async function handleBreakpoint(\n type: MultiAgentBreakpointType,\n agentId: string,\n agentName: string,\n input: string,\n signal?: AbortSignal,\n extra?: {\n patternId?: string;\n handoff?: { fromAgent: string; toAgent: string };\n },\n ): Promise<{ input: string; skip: boolean }> {\n if (breakpointConfigs.length === 0) {\n return { input, skip: false };\n }\n\n const agentFacts = getAgentFacts(agentId);\n const context: BreakpointContext = {\n agentId,\n agentName,\n input,\n state: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n breakpointType: type,\n patternId: extra?.patternId,\n handoff: extra?.handoff,\n };\n\n const matched = matchBreakpoint(breakpointConfigs, type, context);\n if (!matched) {\n return { input, skip: false };\n }\n\n const bpId = createBreakpointId();\n const request: BreakpointRequest = {\n id: bpId,\n type,\n agentId,\n input,\n label: matched.label,\n requestedAt: Date.now(),\n };\n\n // Write to facts\n system.batch(() => {\n const currentBp = getBreakpointState(agentFacts);\n setBreakpointState(agentFacts, {\n ...currentBp,\n pending: [...currentBp.pending, request],\n });\n });\n\n // Fire callbacks\n try {\n onBreakpoint?.(request);\n } catch {\n /* callback error non-fatal */\n }\n try {\n (hooks as any).onBreakpoint?.(request);\n } catch {\n /* hook error non-fatal */\n }\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"breakpoint_hit\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n breakpointId: bpId,\n breakpointType: type,\n label: matched.label,\n });\n }\n\n // Wait for resolution\n const modifications = await waitForBreakpointResolution(\n agentId,\n bpId,\n signal,\n );\n\n // Record resume event\n if (timeline) {\n timeline.record({\n type: \"breakpoint_resumed\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n breakpointId: bpId,\n modified: !!modifications?.input,\n skipped: !!modifications?.skip,\n });\n }\n\n return {\n input: modifications?.input ?? input,\n skip: modifications?.skip ?? false,\n };\n }\n\n // ---- Helper: Get per-agent facts from namespaced System ----\n // biome-ignore lint/suspicious/noExplicitAny: System facts vary\n function getAgentFacts(agentId: string): any {\n return (system.facts as any)[agentId];\n }\n\n // ---- Helper: Wait for approval ----\n function waitForApproval(\n agentId: string,\n requestId: string,\n signal?: AbortSignal,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let settled = false;\n let onAbort: (() => void) | undefined;\n const agentFacts = getAgentFacts(agentId);\n\n const cleanupAll = () => {\n if (settled) return;\n settled = true;\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n if (onAbort && signal) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n unsubscribe();\n };\n\n // Use system.subscribe with namespaced key\n const unsubscribe = system.subscribe(\n [`${agentId}.${APPROVAL_KEY}`],\n () => {\n const approval = getApprovalState(agentFacts);\n if (approval.approved.includes(requestId)) {\n cleanupAll();\n resolve();\n } else {\n const rejectedRequest = approval.rejected.find(\n (r: RejectedRequest) => r.id === requestId,\n );\n if (rejectedRequest) {\n cleanupAll();\n const errorMsg = rejectedRequest.reason\n ? `Request ${requestId} rejected: ${rejectedRequest.reason}`\n : `Request ${requestId} rejected`;\n reject(new Error(errorMsg));\n }\n }\n },\n );\n\n // Abort signal cleanup\n if (signal) {\n onAbort = () => {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Approval wait aborted for request ${requestId}`,\n ),\n );\n };\n if (signal.aborted) {\n cleanupAll();\n reject(\n new Error(\n `[Directive MultiAgent] Approval wait aborted for request ${requestId}`,\n ),\n );\n\n return;\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n // Timeout with solution guidance\n timeoutId = setTimeout(() => {\n cleanupAll();\n const timeoutSeconds = Math.round(approvalTimeoutMs / 1000);\n reject(\n new Error(\n `[Directive MultiAgent] Approval timeout: Request ${requestId} not resolved within ${timeoutSeconds}s.\\n` +\n \"Solutions:\\n\" +\n \" 1. Handle via onApprovalRequest callback and call orchestrator.approve()/reject()\\n\" +\n \" 2. Set autoApproveToolCalls: true to auto-approve\\n\" +\n ` 3. Increase approvalTimeoutMs (current: ${approvalTimeoutMs}ms)\\n` +\n \"See: https://directive.run/docs/ai/multi-agent\",\n ),\n );\n }, approvalTimeoutMs);\n });\n }\n\n // ---- Core: Run a task (imperative code) ----\n async function runTask<T>(\n taskId: string,\n taskReg: TaskRegistration,\n input: string,\n opts?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n const label = taskReg.label ?? taskId;\n const startTime = Date.now();\n const state =\n taskStates[taskId] ?? (taskStates[taskId] = { status: \"idle\" });\n state.status = \"running\";\n state.startTime = startTime;\n state.lastError = undefined;\n\n // Check breakpoints — tasks don't have system modules, so only check if\n // breakpoints are configured and handle the missing agent facts gracefully\n let effectiveInput = input;\n if (breakpointConfigs.length > 0) {\n try {\n const bpResult = await handleBreakpoint(\n \"pre_agent_run\",\n taskId,\n label,\n input,\n opts?.signal,\n );\n if (bpResult.skip) {\n state.status = \"completed\";\n\n return {\n output: undefined as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n effectiveInput = bpResult.input;\n } catch {\n // Tasks don't have system facts — breakpoint state access may fail.\n // Fall through with original input.\n }\n }\n\n // Emit timeline event\n if (timeline) {\n timeline.record({\n type: \"task_start\",\n timestamp: startTime,\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n description: taskReg.description,\n inputLength: effectiveInput.length,\n input: effectiveInput.slice(0, MAX_VERBOSE_LENGTH),\n });\n }\n\n // Fire hook\n const effectivePatternId = opts?.patternId ?? \"\";\n fireHook(\"onTaskStart\", {\n patternId: effectivePatternId,\n taskId,\n label,\n timestamp: startTime,\n });\n\n // Semaphore for maxConcurrent\n const sem = taskSemaphores.get(taskId);\n\n // Build TaskContext with deep-cloned memory and scratchpad\n const buildContext = (): TaskContext => ({\n taskId,\n memory: sharedMemory\n ? (structuredClone(\n sharedMemory.getContextMessages?.() ?? [],\n ) as ReadonlyArray<{ role: string; content: string }>)\n : [],\n scratchpad: scratchpadInstance\n ? Object.freeze(structuredClone(scratchpadInstance.getAll()))\n : Object.freeze({}),\n readAgentState: (nodeId: string) => {\n // Check agent states first, then task states\n const agentState = agentStates[nodeId];\n if (agentState) {\n return Object.freeze({\n status: agentState.status,\n lastOutput:\n agentState.lastOutput != null\n ? String(agentState.lastOutput)\n : undefined,\n lastError: agentState.lastError,\n totalTokens: agentState.totalTokens,\n });\n }\n const taskState = taskStates[nodeId];\n if (taskState) {\n return Object.freeze({\n status: taskState.status,\n lastOutput:\n taskState.lastOutput != null\n ? String(taskState.lastOutput)\n : undefined,\n lastError: taskState.lastError,\n totalTokens: 0,\n });\n }\n\n return undefined;\n },\n reportProgress: (percent: number, message?: string) => {\n const clampedPercent = Number.isFinite(percent)\n ? Math.max(0, Math.min(100, percent))\n : 0;\n if (timeline) {\n timeline.record({\n type: \"task_progress\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n percent: clampedPercent,\n message,\n });\n }\n fireHook(\"onTaskProgress\", {\n patternId: effectivePatternId,\n taskId,\n label,\n percent: clampedPercent,\n message,\n timestamp: Date.now(),\n });\n },\n });\n\n const maxAttempts = taskReg.retry?.attempts ?? 1;\n const backoff = taskReg.retry?.backoff ?? \"fixed\";\n const baseDelay = taskReg.retry?.delayMs ?? 1000;\n let lastError: Error | undefined;\n\n const executeAttempt = async (signal: AbortSignal): Promise<unknown> => {\n const context = buildContext();\n\n return taskReg.run(effectiveInput, signal, context);\n };\n\n let releaseFn: (() => void) | null = null;\n\n try {\n if (sem) {\n releaseFn = await sem.acquire();\n }\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const abortController = new AbortController();\n let timeoutTimer: ReturnType<typeof setTimeout> | undefined;\n\n // Chain with external signal — store handler for cleanup\n const abortHandler = () => abortController.abort();\n if (opts?.signal) {\n if (opts.signal.aborted) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" aborted before starting`,\n );\n }\n opts.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n // Timeout\n if (taskReg.timeout) {\n timeoutTimer = setTimeout(\n () => abortController.abort(),\n taskReg.timeout,\n );\n }\n\n try {\n const rawOutput = await executeAttempt(abortController.signal);\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n }\n\n // Stringify non-string output\n const output =\n typeof rawOutput === \"string\"\n ? rawOutput\n : safeStringify(rawOutput);\n const durationMs = Date.now() - startTime;\n\n state.status = \"completed\";\n state.lastOutput = output;\n state.durationMs = durationMs;\n\n // Emit timeline event\n if (timeline) {\n timeline.record({\n type: \"task_complete\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n durationMs,\n output,\n });\n }\n\n // Fire hooks\n fireHook(\"onTaskComplete\", {\n patternId: opts?.patternId ?? \"\",\n taskId,\n label,\n durationMs,\n timestamp: Date.now(),\n });\n\n // Update coordinator fact for constraint reactivity\n try {\n const coordFacts = system.read(\"__coord\");\n setBridgeFact(coordFacts as any, \"__lastTaskCompletion\" as any, {\n taskId,\n timestamp: Date.now(),\n });\n } catch {\n // non-fatal: system might be destroyed\n }\n\n return {\n output: output as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n } catch (err) {\n if (timeoutTimer) {\n clearTimeout(timeoutTimer);\n }\n lastError = err instanceof Error ? err : new Error(String(err));\n\n // Emit per-attempt error if retrying\n if (attempt < maxAttempts) {\n if (timeline) {\n timeline.record({\n type: \"task_error\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n error: lastError.message,\n durationMs: Date.now() - startTime,\n attempt,\n });\n }\n\n // Backoff with cap and abort-awareness\n const MAX_BACKOFF_MS = 30_000;\n const rawDelay =\n backoff === \"exponential\"\n ? baseDelay * 2 ** (attempt - 1)\n : baseDelay;\n const delay = Math.min(rawDelay, MAX_BACKOFF_MS);\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n const onAbort = () => {\n if (!settled) {\n settled = true;\n clearTimeout(timer);\n reject(\n new Error(\n `[Directive MultiAgent] Task \"${taskId}\" aborted during retry backoff`,\n ),\n );\n }\n };\n const timer = setTimeout(() => {\n settled = true;\n opts?.signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delay);\n if (opts?.signal) {\n opts.signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n }\n } finally {\n // Clean up abort listener to prevent accumulation\n opts?.signal?.removeEventListener(\"abort\", abortHandler);\n }\n }\n\n // All attempts exhausted\n const durationMs = Date.now() - startTime;\n state.status = \"error\";\n state.lastError = lastError?.message;\n state.durationMs = durationMs;\n\n // Emit final error event\n if (timeline) {\n timeline.record({\n type: \"task_error\",\n timestamp: Date.now(),\n agentId: taskId,\n snapshotId: null,\n taskId,\n label,\n error: lastError?.message ?? \"Unknown error\",\n durationMs,\n });\n }\n\n fireHook(\"onTaskError\", {\n patternId: effectivePatternId,\n taskId,\n label,\n error: lastError!,\n durationMs,\n timestamp: Date.now(),\n });\n\n // Note: Tasks bypass the circuit breaker's execute() wrapper (tasks are imperative\n // code, not LLM calls). Task failure recovery is handled by the retry config on\n // TaskRegistration. The CB's execute() is only used for agent runs.\n\n throw lastError;\n } finally {\n releaseFn?.();\n }\n }\n\n // ---- Core: Run a single agent ----\n async function runSingleAgent<T>(\n agentId: string,\n input: string,\n opts?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n assertNotDestroyed();\n\n if (opts?.signal?.aborted) {\n throw new Error(\n `[Directive MultiAgent] Handler \"${agentId}\" run aborted before starting`,\n );\n }\n\n if (globalStatus === \"paused\") {\n throw new Error(\n \"[Directive MultiAgent] Orchestrator is paused (budget exceeded or manual pause)\",\n );\n }\n\n // Increment synchronously before any await so waitForIdle knows a run is pending\n pendingRuns++;\n\n try {\n // Check if this is a task (imperative code), not an agent (LLM call)\n const taskReg = tasks[agentId];\n if (taskReg) {\n return await runTask<T>(agentId, taskReg, input, opts);\n }\n\n const registration = agents[agentId];\n if (!registration) {\n const available =\n [...Object.keys(agents), ...Object.keys(tasks)].join(\", \") ||\n \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown handler \"${agentId}\". Registered handlers: ${available}`,\n );\n }\n\n const effectiveCircuitBreaker =\n registration.circuitBreaker ?? orchestratorCircuitBreaker;\n if (effectiveCircuitBreaker) {\n return await effectiveCircuitBreaker.execute(() =>\n runSingleAgentInner<T>(agentId, registration, input, opts),\n );\n }\n\n return await runSingleAgentInner<T>(agentId, registration, input, opts);\n } catch (error) {\n // Self-healing: attempt reroute if configured and this is a CB error or health threshold\n // Tasks are imperative code — self-healing reroute/degradation only applies to agents\n if (\n selfHealing &&\n !tasks[agentId] &&\n !(opts as { __isReroute?: boolean })?.__isReroute\n ) {\n const equivalents = findEquivalentAgents(agentId);\n const alternate = selectBestEquivalent(equivalents);\n if (alternate) {\n const rerouteEvent: RerouteEvent = {\n originalAgent: agentId,\n reroutedTo: alternate,\n reason: error instanceof Error ? error.message : String(error),\n timestamp: Date.now(),\n };\n\n try {\n selfHealing.onReroute?.(rerouteEvent);\n } catch {\n // callback error is non-fatal\n }\n fireHook(\"onReroute\", rerouteEvent);\n\n if (timeline) {\n timeline.record({\n type: \"reroute\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n from: agentId,\n to: alternate,\n reason: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Prevent circular reroute (max 1 hop)\n return runSingleAgent<T>(alternate, input, {\n ...opts,\n __isReroute: true,\n } as any);\n }\n\n // No equivalents — apply degradation policy\n if (\n selfHealing.degradation === \"fallback-response\" &&\n selfHealing.fallbackResponse !== undefined\n ) {\n return {\n output: selfHealing.fallbackResponse as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n }\n\n // Update state for errors that happen before semaphore acquisition\n const state = agentStates[agentId];\n if (state && state.status !== \"error\") {\n state.status = \"error\";\n state.lastError =\n error instanceof Error ? error.message : String(error);\n }\n\n throw error;\n } finally {\n pendingRuns--;\n notifyIdleWaiters();\n }\n }\n\n async function runSingleAgentInner<T>(\n agentId: string,\n registration: AgentRegistration,\n originalInput: string,\n opts?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n const startTime = Date.now();\n const agentFacts = getAgentFacts(agentId);\n const state = agentStates[agentId]!;\n let agent = registration.agent;\n let processedInput = originalInput;\n\n // Acquire semaphore slot\n const semaphore = semaphores.get(agentId);\n if (!semaphore) {\n const available = Object.keys(agents).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown agent \"${agentId}\". Registered agents: ${available}`,\n );\n }\n const release = await semaphore.acquire(opts?.signal);\n\n // Create timeout if specified\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let abortHandler: (() => void) | undefined;\n\n try {\n if (registration.timeout) {\n timeoutId = setTimeout(() => controller.abort(), registration.timeout);\n }\n if (opts?.signal) {\n abortHandler = () => controller.abort();\n opts.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n // Inject memory context\n const effectiveMemory = registration.memory ?? sharedMemory;\n if (effectiveMemory) {\n const contextMessages = effectiveMemory.getContextMessages();\n if (contextMessages.length > 0) {\n const contextStr = contextMessages\n .map((m) => `${m.role}: ${m.content}`)\n .join(\"\\n\");\n agent = {\n ...agent,\n instructions:\n (agent.instructions ?? \"\") +\n \"\\n\\nConversation context:\\n\" +\n contextStr,\n };\n }\n }\n\n // Inject system meta context if enabled\n if (options.metaContext) {\n const metaStr = formatSystemMeta(system.inspect());\n if (metaStr) {\n agent = {\n ...agent,\n instructions: (agent.instructions ?? \"\") + \"\\n\\n\" + metaStr,\n };\n }\n }\n\n // ---- Breakpoint: pre_input_guardrails ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_input_guardrails\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n if (bpResult.skip) {\n state.status = \"completed\";\n notifyIdleWaiters();\n\n return {\n output: undefined as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n processedInput = bpResult.input;\n }\n\n // ---- Input guardrails BEFORE agent_start so timeline shows correct order ----\n const allInputGuardrails = [\n ...(guardrails.input ?? []),\n ...(registration.guardrails?.input ?? []),\n ];\n const inputGuardrailsList = allInputGuardrails.map((g, i) =>\n normalizeGuardrail(g, i, \"input\"),\n );\n for (const guardrail of inputGuardrailsList) {\n const { name } = guardrail;\n const context = {\n agentName: agent.name,\n input: processedInput,\n facts: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n };\n const guardStartTime = Date.now();\n const result = await executeGuardrailWithRetry(\n guardrail,\n { input: processedInput, agentName: agent.name },\n context,\n );\n fireHook(\"onGuardrailCheck\", {\n agentId,\n guardrailName: name,\n guardrailType: \"input\",\n passed: result.passed,\n reason: result.reason,\n durationMs: Date.now() - guardStartTime,\n timestamp: Date.now(),\n });\n if (!result.passed) {\n throw new GuardrailError({\n code: \"INPUT_GUARDRAIL_FAILED\",\n message: `Input guardrail \"${name}\" failed: ${result.reason}`,\n guardrailName: name,\n guardrailType: \"input\",\n userMessage: result.reason ?? \"Input validation failed\",\n agentName: agent.name,\n input: processedInput,\n });\n }\n if (result.transformed !== undefined) {\n processedInput = result.transformed as string;\n }\n }\n\n // Fire onAgentStart hook (after guardrails pass)\n fireHook(\"onAgentStart\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n timestamp: startTime,\n });\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"agent_start\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n inputLength: processedInput.length,\n ...(\"description\" in agent && agent.description\n ? { description: String(agent.description) }\n : {}),\n ...(agent.instructions\n ? { instructions: agent.instructions.slice(0, MAX_VERBOSE_LENGTH) }\n : {}),\n input: processedInput.slice(0, MAX_VERBOSE_LENGTH),\n });\n }\n\n // Update per-agent facts\n system.batch(() => {\n const currentAgent = getAgentState(agentFacts);\n setAgentState(agentFacts, {\n ...currentAgent,\n status: \"running\",\n input: processedInput,\n startedAt: Date.now(),\n });\n });\n state.status = \"running\";\n state.lastInput = processedInput;\n\n // ---- Breakpoint: pre_agent_run ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_agent_run\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n if (bpResult.skip) {\n state.status = \"completed\";\n notifyIdleWaiters();\n\n return {\n output: undefined as T,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n processedInput = bpResult.input;\n }\n\n // ---- Per-agent structured output wrapping (per-call overrides per-agent) ----\n let effectiveRunner: AgentRunner = runner;\n const effectiveSchema =\n opts?.outputSchema !== undefined\n ? opts.outputSchema // null = opt-out, SafeParseable = override\n : registration.outputSchema; // per-agent default\n if (effectiveSchema) {\n effectiveRunner = withStructuredOutput(runner, {\n schema: effectiveSchema,\n maxRetries:\n opts?.maxSchemaRetries ?? registration.maxSchemaRetries ?? 2,\n extractJson: registration.extractJson,\n schemaDescription: registration.schemaDescription,\n });\n }\n\n // Effective retry config: per-agent overrides orchestrator default\n const effectiveRetry = registration.retry ?? defaultAgentRetry;\n\n // Run agent with retry support\n const result = await executeAgentWithRetry<T>(\n effectiveRunner,\n agent,\n processedInput,\n {\n ...registration.runOptions,\n ...opts,\n signal: controller.signal,\n onMessage: (message) => {\n const currentConversation = getConversation(agentFacts);\n const updated = [...currentConversation, message];\n setConversation(\n agentFacts,\n updated.length > MAX_CONVERSATION_MESSAGES\n ? updated.slice(-MAX_CONVERSATION_MESSAGES)\n : updated,\n );\n opts?.onMessage?.(message);\n },\n onToolCall: async (toolCall) => {\n // ---- Tool call guardrails: orchestrator-level, then per-agent ----\n const allToolCallGuardrails = [\n ...(guardrails.toolCall ?? []),\n ...(registration.guardrails?.toolCall ?? []),\n ];\n const toolCallGuardrailsList = allToolCallGuardrails.map((g, i) =>\n normalizeGuardrail(g, i, \"toolCall\"),\n );\n for (const guardrail of toolCallGuardrailsList) {\n const { name } = guardrail;\n const context = {\n agentName: agent.name,\n input: processedInput,\n facts: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n };\n const guardStartTime = Date.now();\n const guardResult = await executeGuardrailWithRetry(\n guardrail,\n { toolCall, agentName: agent.name, input: processedInput },\n context,\n );\n fireHook(\"onGuardrailCheck\", {\n agentId,\n guardrailName: name,\n guardrailType: \"toolCall\",\n passed: guardResult.passed,\n reason: guardResult.reason,\n durationMs: Date.now() - guardStartTime,\n timestamp: Date.now(),\n });\n if (!guardResult.passed) {\n throw new GuardrailError({\n code: \"TOOL_CALL_GUARDRAIL_FAILED\",\n message: `Tool call guardrail \"${name}\" failed: ${guardResult.reason}`,\n guardrailName: name,\n guardrailType: \"toolCall\",\n userMessage: guardResult.reason ?? \"Tool call blocked\",\n data: { toolCall },\n agentName: agent.name,\n input: processedInput,\n });\n }\n }\n\n // Approval workflow\n if (!autoApproveToolCalls) {\n const approvalId = `tool-${agentId}-${toolCall.id}`;\n const approvalRequest: ApprovalRequest = {\n id: approvalId,\n type: \"tool_call\",\n agentName: agent.name,\n description: `Tool call: ${toolCall.name}`,\n data: toolCall,\n requestedAt: Date.now(),\n };\n\n approvalRequestIndex.set(approvalId, agentId);\n system.batch(() => {\n const currentApproval = getApprovalState(agentFacts);\n setApprovalState(agentFacts, {\n ...currentApproval,\n pending: [...currentApproval.pending, approvalRequest],\n });\n });\n\n onApprovalRequest?.(approvalRequest);\n await waitForApproval(agentId, approvalId, opts?.signal);\n }\n\n const currentToolCalls = getToolCalls(agentFacts);\n const updatedToolCalls = [...currentToolCalls, toolCall];\n setToolCalls(\n agentFacts,\n updatedToolCalls.length > MAX_TOOL_CALLS\n ? updatedToolCalls.slice(-MAX_TOOL_CALLS)\n : updatedToolCalls,\n );\n opts?.onToolCall?.(toolCall);\n },\n },\n effectiveRetry\n ? {\n ...effectiveRetry,\n onRetry: (attempt, error, delayMs) => {\n effectiveRetry.onRetry?.(attempt, error, delayMs);\n fireHook(\"onAgentRetry\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n attempt,\n error,\n delayMs,\n timestamp: Date.now(),\n });\n },\n }\n : undefined,\n );\n\n // ---- Breakpoint: pre_output_guardrails ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_output_guardrails\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n if (bpResult.skip) {\n // Skip output guardrails, return result directly\n state.status = \"completed\";\n notifyIdleWaiters();\n\n return result;\n }\n }\n\n // ---- Output guardrails: orchestrator-level, then per-agent ----\n const allOutputGuardrails = [\n ...(guardrails.output ?? []),\n ...(registration.guardrails?.output ?? []),\n ];\n const outputGuardrailsList = allOutputGuardrails.map((g, i) =>\n normalizeGuardrail(g, i, \"output\"),\n );\n for (const guardrail of outputGuardrailsList) {\n const { name } = guardrail;\n const context = {\n agentName: agent.name,\n input: processedInput,\n facts: getOrchestratorState(agentFacts) as unknown as Record<\n string,\n unknown\n >,\n };\n const guardStartTime = Date.now();\n const guardResult = await executeGuardrailWithRetry(\n guardrail,\n {\n output: result.output,\n agentName: agent.name,\n input: processedInput,\n messages: result.messages,\n },\n context,\n );\n fireHook(\"onGuardrailCheck\", {\n agentId,\n guardrailName: name,\n guardrailType: \"output\",\n passed: guardResult.passed,\n reason: guardResult.reason,\n durationMs: Date.now() - guardStartTime,\n timestamp: Date.now(),\n });\n if (!guardResult.passed) {\n throw new GuardrailError({\n code: \"OUTPUT_GUARDRAIL_FAILED\",\n message: `Output guardrail \"${name}\" failed: ${guardResult.reason}`,\n guardrailName: name,\n guardrailType: \"output\",\n userMessage: guardResult.reason ?? \"Output validation failed\",\n agentName: agent.name,\n input: processedInput,\n });\n }\n if (guardResult.transformed !== undefined) {\n (result as { output: unknown }).output = guardResult.transformed;\n }\n }\n\n // Update per-agent facts\n system.batch(() => {\n const currentAgent = getAgentState(agentFacts);\n setAgentState(agentFacts, {\n ...currentAgent,\n status: \"completed\",\n output: result.output,\n tokenUsage: currentAgent.tokenUsage + result.totalTokens,\n turnCount: currentAgent.turnCount + result.messages.length,\n completedAt: Date.now(),\n });\n });\n\n // Update local state\n state.status = \"completed\";\n state.lastOutput = result.output;\n state.runCount++;\n state.totalTokens += result.totalTokens;\n notifyIdleWaiters();\n\n // Update global token count atomically via System facts\n // Use read-modify-write inside batch to prevent desync from concurrent runs\n const coordFacts = getAgentFacts(\"__coord\");\n let shouldFireBudgetWarning = false;\n let budgetPercentage = 0;\n system.batch(() => {\n const currentTokens = getBridgeFact<number>(\n coordFacts,\n \"__globalTokens\",\n );\n const newTotal = currentTokens + result.totalTokens;\n globalTokenCount = newTotal;\n setBridgeFact(coordFacts, \"__globalTokens\", newTotal);\n\n // Check budget warning threshold\n if (maxTokenBudget && onBudgetWarning) {\n budgetPercentage = newTotal / maxTokenBudget;\n const warningFired = getBridgeFact<boolean>(\n coordFacts,\n \"__budgetWarningFired\",\n );\n if (budgetPercentage >= budgetWarningThreshold && !warningFired) {\n setBridgeFact(coordFacts, \"__budgetWarningFired\", true);\n shouldFireBudgetWarning = true;\n }\n }\n });\n\n // Fire budget warning callback outside of batch (callbacks shouldn't run inside batch)\n if (shouldFireBudgetWarning) {\n try {\n onBudgetWarning!({\n currentTokens: globalTokenCount,\n maxBudget: maxTokenBudget!,\n percentage: budgetPercentage,\n });\n } catch (callbackError) {\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] onBudgetWarning threw:\",\n callbackError,\n );\n }\n }\n }\n\n // Store messages in memory (best-effort — don't fail the run on memory errors)\n // Only store the user message once — agent-utils includes it in every result,\n // but memory already has it from the first agent call in a conversation.\n if (effectiveMemory && result.messages.length > 0) {\n try {\n const existingMessages = effectiveMemory.getContextMessages();\n const hasUserMessage = existingMessages.some(\n (m) => m.role === \"user\" && m.content === processedInput,\n );\n const messagesToStore = hasUserMessage\n ? result.messages.filter(\n (m) => !(m.role === \"user\" && m.content === processedInput),\n )\n : result.messages;\n effectiveMemory.addMessages(messagesToStore);\n } catch (memoryError) {\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] Memory addMessages failed:\",\n memoryError,\n );\n }\n }\n }\n\n // Fire onAgentComplete hook\n fireHook(\"onAgentComplete\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n output: result.output,\n tokenUsage: result.totalTokens,\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n });\n\n // Record timeline event\n if (timeline) {\n const outputStr =\n typeof result.output === \"string\"\n ? result.output\n : safeStringify(result.output);\n timeline.record({\n type: \"agent_complete\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n outputLength: outputStr.length,\n totalTokens: result.totalTokens,\n inputTokens: result.tokenUsage?.inputTokens ?? 0,\n outputTokens: result.tokenUsage?.outputTokens ?? 0,\n durationMs: Date.now() - startTime,\n modelId: registration.agent.model ?? undefined,\n output: outputStr.slice(0, MAX_VERBOSE_LENGTH),\n });\n }\n\n // Record health success\n if (healthMonitorInstance) {\n healthMonitorInstance.recordSuccess(agentId, Date.now() - startTime);\n }\n\n // Recompute cross-agent derivations\n recomputeDerivations();\n\n // ---- Breakpoint: post_run ----\n await handleBreakpoint(\n \"post_run\",\n agentId,\n agent.name,\n processedInput,\n opts?.signal,\n );\n\n return result;\n } catch (error) {\n state.status = \"error\";\n state.lastError = error instanceof Error ? error.message : String(error);\n notifyIdleWaiters();\n\n // Update per-agent facts with error\n system.batch(() => {\n const currentAgent = getAgentState(agentFacts);\n setAgentState(agentFacts, {\n ...currentAgent,\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n completedAt: Date.now(),\n });\n });\n\n // Fire onAgentError hook\n fireHook(\"onAgentError\", {\n agentId,\n agentName: agent.name,\n input: processedInput,\n error: error instanceof Error ? error : new Error(String(error)),\n durationMs: Date.now() - startTime,\n timestamp: Date.now(),\n });\n\n // Record timeline event\n if (timeline) {\n const base: Record<string, unknown> = {\n type: \"agent_error\",\n timestamp: Date.now(),\n agentId,\n snapshotId: null,\n errorMessage: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - startTime,\n };\n if (isGuardrailError(error)) {\n base.guardrailName = error.guardrailName;\n base.guardrailType = error.guardrailType;\n base.errorCode = error.code;\n }\n timeline.record(base as any);\n }\n\n // Record health failure\n if (healthMonitorInstance) {\n healthMonitorInstance.recordFailure(\n agentId,\n Date.now() - startTime,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n\n // Recompute cross-agent derivations\n recomputeDerivations();\n\n throw error;\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n if (abortHandler && opts?.signal) {\n opts.signal.removeEventListener(\"abort\", abortHandler);\n }\n release();\n }\n }\n\n // ---- Streaming ----\n function runAgentStreamImpl<T>(\n agentId: string,\n input: string,\n options: { signal?: AbortSignal } = {},\n ): OrchestratorStreamResult<T> {\n assertNotDestroyed();\n\n // Task streaming: run task, emit single chunk + done\n const taskReg = tasks[agentId];\n if (taskReg) {\n const taskChunks: OrchestratorStreamChunk[] = [];\n const taskWaiters: Array<\n (chunk: OrchestratorStreamChunk | null) => void\n > = [];\n let taskClosed = false;\n\n const pushTaskChunk = (chunk: OrchestratorStreamChunk) => {\n if (taskClosed) {\n return;\n }\n const waiter = taskWaiters.shift();\n if (waiter) {\n waiter(chunk);\n } else {\n taskChunks.push(chunk);\n }\n };\n\n const closeTaskStream = () => {\n taskClosed = true;\n for (const w of taskWaiters) {\n w(null);\n }\n taskWaiters.length = 0;\n };\n\n const taskAbortController = new AbortController();\n // Wire external signal into task-local controller\n let taskExternalAbortHandler: (() => void) | undefined;\n if (options.signal) {\n if (options.signal.aborted) {\n taskAbortController.abort();\n } else {\n taskExternalAbortHandler = () => taskAbortController.abort();\n options.signal.addEventListener(\"abort\", taskExternalAbortHandler, {\n once: true,\n });\n }\n }\n\n const resultPromise = runSingleAgent<T>(agentId, input, {\n signal: taskAbortController.signal,\n })\n .then(\n (result) => {\n const output =\n typeof result.output === \"string\"\n ? result.output\n : safeStringify(result.output);\n pushTaskChunk({ type: \"token\", data: output, tokenCount: 0 });\n pushTaskChunk({\n type: \"done\",\n totalTokens: 0,\n duration: 0,\n droppedTokens: 0,\n });\n closeTaskStream();\n\n return result;\n },\n (err) => {\n pushTaskChunk({ type: \"error\", error: err });\n closeTaskStream();\n throw err;\n },\n )\n .finally(() => {\n if (taskExternalAbortHandler && options.signal) {\n options.signal.removeEventListener(\n \"abort\",\n taskExternalAbortHandler,\n );\n }\n });\n\n // Prevent unhandled rejection if no one awaits .result\n resultPromise.catch(() => {});\n\n return {\n stream: {\n async *[Symbol.asyncIterator]() {\n while (true) {\n const chunk = taskChunks.shift();\n if (chunk) {\n yield chunk;\n if (chunk.type === \"done\" || chunk.type === \"error\") {\n return;\n }\n } else if (taskClosed) {\n return;\n } else {\n const next = await new Promise<OrchestratorStreamChunk | null>(\n (resolve) => taskWaiters.push(resolve),\n );\n if (!next) {\n return;\n }\n yield next;\n if (next.type === \"done\" || next.type === \"error\") {\n return;\n }\n }\n }\n },\n },\n result: resultPromise,\n abort: () => {\n taskAbortController.abort();\n },\n } as OrchestratorStreamResult<T>;\n }\n\n const registration = agents[agentId];\n if (!registration) {\n const available =\n [...Object.keys(agents), ...Object.keys(tasks)].join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown handler \"${agentId}\". Registered handlers: ${available}`,\n );\n }\n\n const MAX_AGENT_STREAM_BUFFER = 10_000;\n const MAX_ACCUMULATED_OUTPUT = 100_000;\n const abortController = new AbortController();\n const chunks: OrchestratorStreamChunk[] = [];\n const waiters: Array<(chunk: OrchestratorStreamChunk | null) => void> = [];\n let closed = false;\n const startTime = Date.now();\n let tokenCount = 0;\n let accumulatedOutput = \"\";\n\n let abortHandler: (() => void) | undefined;\n if (options.signal) {\n abortHandler = () => abortController.abort();\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n const cleanup = () => {\n if (abortHandler && options.signal) {\n options.signal.removeEventListener(\"abort\", abortHandler);\n }\n };\n\n const pushChunk = (chunk: OrchestratorStreamChunk) => {\n if (closed) return;\n const waiter = waiters.shift();\n if (waiter) {\n waiter(chunk);\n } else {\n if (chunks.length >= MAX_AGENT_STREAM_BUFFER) {\n chunks.shift();\n }\n chunks.push(chunk);\n }\n };\n\n const closeStream = () => {\n closed = true;\n cleanup();\n for (const waiter of waiters) {\n waiter(null);\n }\n waiters.length = 0;\n };\n\n const resultPromise = (async (): Promise<RunResult<T>> => {\n pushChunk({\n type: \"progress\",\n phase: \"starting\",\n message: \"Running input guardrails\",\n });\n\n try {\n const result = await runSingleAgent<T>(agentId, input, {\n signal: abortController.signal,\n onMessage: (message) => {\n pushChunk({ type: \"message\", message });\n if (message.role === \"assistant\" && message.content) {\n const newTokens = Math.ceil(message.content.length / 4);\n tokenCount += newTokens;\n accumulatedOutput += message.content;\n if (accumulatedOutput.length > MAX_ACCUMULATED_OUTPUT) {\n accumulatedOutput = accumulatedOutput.slice(\n -MAX_ACCUMULATED_OUTPUT,\n );\n }\n pushChunk({ type: \"token\", data: message.content, tokenCount });\n }\n },\n onToolCall: async (toolCall) => {\n pushChunk({\n type: \"tool_start\",\n tool: toolCall.name,\n toolCallId: toolCall.id,\n arguments: toolCall.arguments,\n });\n if (toolCall.result) {\n pushChunk({\n type: \"tool_end\",\n tool: toolCall.name,\n toolCallId: toolCall.id,\n result: toolCall.result,\n });\n }\n },\n });\n\n const duration = Date.now() - startTime;\n pushChunk({\n type: \"done\",\n totalTokens: result.totalTokens,\n duration,\n droppedTokens: 0,\n });\n closeStream();\n\n return result;\n } catch (error) {\n if (error instanceof GuardrailError) {\n pushChunk({\n type: \"guardrail_triggered\",\n guardrailName: error.guardrailName,\n reason: error.message,\n partialOutput: accumulatedOutput,\n stopped: true,\n });\n }\n pushChunk({\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error)),\n });\n closeStream();\n throw error;\n }\n })();\n\n const stream: AsyncIterable<OrchestratorStreamChunk> = {\n [Symbol.asyncIterator](): AsyncIterator<OrchestratorStreamChunk> {\n return {\n async next(): Promise<IteratorResult<OrchestratorStreamChunk>> {\n if (chunks.length > 0) {\n return { done: false, value: chunks.shift()! };\n }\n if (closed) {\n return { done: true, value: undefined };\n }\n\n return new Promise<IteratorResult<OrchestratorStreamChunk>>(\n (resolve) => {\n waiters.push((chunk) => {\n if (chunk === null) {\n resolve({ done: true, value: undefined });\n } else {\n resolve({ done: false, value: chunk });\n }\n });\n },\n );\n },\n };\n },\n };\n\n // Prevent unhandled rejection if caller only consumes stream (not .result)\n resultPromise.catch(() => {});\n\n return {\n stream,\n result: resultPromise,\n abort: () => {\n abortController.abort();\n closeStream();\n },\n };\n }\n\n // ---- Pattern Runners ----\n async function runParallelPattern<T>(\n pattern: ParallelPattern<T>,\n input: string,\n patternId?: string,\n ): Promise<T> {\n const patternStartTime = Date.now();\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"parallel\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if (pattern.timeout) {\n timeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n }\n\n let patternError: Error | undefined;\n try {\n const promises = pattern.handlers.map((agentId) =>\n runSingleAgent(agentId, input, {\n signal: controller.signal,\n patternId,\n }).catch((error) => {\n if (pattern.minSuccess === undefined) {\n throw error;\n }\n\n return null;\n }),\n );\n\n const results = await Promise.all(promises);\n const successResults = results.filter(\n (r): r is RunResult<unknown> => r !== null,\n );\n\n if (\n pattern.minSuccess !== undefined &&\n successResults.length < pattern.minSuccess\n ) {\n const failCount = results.length - successResults.length;\n\n throw new Error(\n `[Directive MultiAgent] Parallel pattern: Only ${successResults.length}/${pattern.handlers.length} agents succeeded ` +\n `(minimum required: ${pattern.minSuccess}, failed: ${failCount})`,\n );\n }\n\n return pattern.merge(successResults);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"parallel\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Shared checkpoint helper ----\n\n /** Save a pattern checkpoint state to the configured store */\n async function savePatternCheckpoint(\n state: PatternCheckpointState,\n store: CheckpointStore,\n config?: PatternCheckpointConfig,\n ): Promise<string | null> {\n const step = getPatternStep(state);\n\n // Conditional: evaluate when() predicate\n if (config?.when) {\n try {\n const shouldSave = config.when({\n step,\n patternType: state.type,\n facts:\n state.type === \"goal\"\n ? (state as GoalCheckpointState).facts\n : undefined,\n satisfaction:\n state.type === \"goal\"\n ? (state as GoalCheckpointState).lastSatisfaction\n : undefined,\n });\n if (!shouldSave) {\n return null;\n }\n } catch {\n // If when() throws, skip this checkpoint\n return null;\n }\n }\n\n try {\n const checkpoint: Checkpoint = {\n version: 1,\n id: state.id,\n createdAt: state.createdAt,\n label: state.label,\n systemExport: JSON.stringify(state),\n timelineExport: null,\n localState: {\n type: \"multi\",\n globalTokenCount: 0,\n globalStatus: \"idle\",\n agentStates: {},\n handoffCounter: 0,\n pendingHandoffs: [],\n handoffResults: [],\n roundRobinCounters: null,\n },\n memoryExport: null,\n orchestratorType: \"multi\",\n metadata: { patternType: state.type },\n };\n await store.save(checkpoint);\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"checkpoint_save\",\n timestamp: Date.now(),\n snapshotId: null,\n checkpointId: state.id,\n patternType: state.type,\n step,\n });\n }\n\n fireHook(\"onCheckpointSave\", {\n checkpointId: state.id,\n patternType: state.type,\n step,\n timestamp: Date.now(),\n });\n\n return state.id;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n console.error(\n `[Directive MultiAgent] ${state.type}: checkpoint save failed:`,\n error,\n );\n\n fireHook(\"onCheckpointError\", {\n patternType: state.type,\n step,\n error,\n timestamp: Date.now(),\n });\n\n return null;\n }\n }\n\n // ---- Pattern Runners ----\n\n async function runSequentialPattern<T>(\n pattern: SequentialPattern<T>,\n initialInput: string,\n patternId?: string,\n resumeFrom?: SequentialCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_sequential\";\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"sequential\",\n input: initialInput,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const ckptConfig = pattern.checkpoint;\n const ckptStore = ckptConfig?.store ?? checkpointStore;\n const ckptEveryN = ckptConfig?.everyN ?? 5;\n const ckptPrefix = ckptConfig?.labelPrefix ?? \"sequential\";\n\n // Resume state\n let currentInput = resumeFrom?.currentInput ?? initialInput;\n let lastResult: RunResult<unknown> | undefined;\n const collectedResults: Array<{\n agentId: string;\n output: unknown;\n totalTokens: number;\n }> = resumeFrom?.results ? [...resumeFrom.results] : [];\n const startIdx = resumeFrom?.step ?? 0;\n let patternError: Error | undefined;\n\n // Restore lastResult from checkpoint\n if (resumeFrom && collectedResults.length > 0) {\n const last = collectedResults[collectedResults.length - 1]!;\n lastResult = {\n output: last.output,\n totalTokens: last.totalTokens,\n messages: [],\n toolCalls: [],\n };\n }\n\n try {\n for (let i = startIdx; i < pattern.handlers.length; i++) {\n const agentId = pattern.handlers[i]!;\n\n // ---- Breakpoint: pre_pattern_step ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_pattern_step\",\n agentId,\n agents[agentId]?.agent.name ?? agentId,\n currentInput,\n undefined,\n {\n patternId,\n },\n );\n if (bpResult.skip) {\n continue;\n }\n currentInput = bpResult.input;\n }\n\n try {\n lastResult = await runSingleAgent(agentId, currentInput, {\n patternId,\n });\n collectedResults.push({\n agentId,\n output: lastResult.output,\n totalTokens: lastResult.totalTokens,\n });\n\n if (i < pattern.handlers.length - 1) {\n if (pattern.transform) {\n currentInput = pattern.transform(lastResult.output, agentId, i);\n } else {\n currentInput =\n typeof lastResult.output === \"string\"\n ? lastResult.output\n : safeStringify(lastResult.output);\n }\n }\n\n // Save checkpoint after each agent\n if (\n ckptConfig &&\n ckptStore &&\n i > startIdx &&\n (i - startIdx) % ckptEveryN === 0\n ) {\n const nextInput =\n i < pattern.handlers.length - 1 ? currentInput : initialInput;\n await savePatternCheckpoint(\n {\n type: \"sequential\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${ckptPrefix}:step-${i + 1}`,\n patternId: pId,\n stepsTotal: pattern.handlers.length,\n step: i + 1,\n currentInput: nextInput,\n results: [...collectedResults],\n },\n ckptStore,\n ckptConfig,\n );\n }\n } catch (error) {\n if (!pattern.continueOnError) {\n throw error;\n }\n }\n }\n\n if (!lastResult) {\n throw new Error(\n \"[Directive MultiAgent] No successful results in sequential pattern\",\n );\n }\n\n return pattern.extract\n ? pattern.extract(lastResult.output)\n : (lastResult.output as T);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"sequential\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n async function runSupervisorPattern<T>(\n pattern: SupervisorPattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: SupervisorCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_supervisor\";\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"supervisor\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const ckptConfig = pattern.checkpoint;\n const ckptStore = ckptConfig?.store ?? checkpointStore;\n const ckptEveryN = ckptConfig?.everyN ?? 5;\n const ckptPrefix = ckptConfig?.labelPrefix ?? \"supervisor\";\n\n const workerResults: RunResult<unknown>[] = [];\n const serializedWorkerResults: Array<{\n output: unknown;\n totalTokens: number;\n }> = resumeFrom?.workerResults ? [...resumeFrom.workerResults] : [];\n const maxRounds = pattern.maxRounds ?? 5;\n if (maxRounds < 1 || !Number.isFinite(maxRounds)) {\n throw new Error(\n \"[Directive MultiAgent] supervisor maxRounds must be >= 1\",\n );\n }\n let patternError: Error | undefined;\n\n // Restore worker results from checkpoint\n if (resumeFrom) {\n for (const wr of resumeFrom.workerResults) {\n workerResults.push({\n output: wr.output,\n totalTokens: wr.totalTokens,\n messages: [],\n toolCalls: [],\n });\n }\n }\n\n const startRound = resumeFrom?.round ?? 0;\n\n try {\n let supervisorResult: RunResult<unknown>;\n if (resumeFrom) {\n supervisorResult = {\n output: resumeFrom.supervisorOutput,\n totalTokens: 0,\n messages: [],\n toolCalls: [],\n };\n } else {\n supervisorResult = await runSingleAgent<unknown>(\n pattern.supervisor,\n input,\n );\n }\n\n let currentInput = resumeFrom?.currentInput ?? input;\n\n for (let round = startRound; round < maxRounds; round++) {\n // Validate supervisor output shape\n const raw = supervisorResult.output;\n let action: {\n action: string;\n worker?: string;\n workerInput?: string;\n output?: unknown;\n };\n\n if (typeof raw === \"string\") {\n try {\n // Strip markdown code fences LLMs often wrap JSON in\n const cleaned = raw.replace(/```(?:json|JSON)?\\s*\\n?/g, \"\").trim();\n action = JSON.parse(cleaned);\n } catch {\n // LLMs sometimes wrap JSON in conversational text or XML tool-call markup\n try {\n // Strip markdown fences + XML tags (models sometimes emit <function_calls>/<invoke>/<parameter> wrappers)\n const stripped = raw\n .replace(/```(?:json|JSON)?\\s*\\n?/g, \"\")\n .replace(/<[^>]+>/g, \" \");\n const extracted = extractJsonFromOutput(stripped);\n if (\n extracted &&\n typeof extracted === \"object\" &&\n \"action\" in (extracted as Record<string, unknown>)\n ) {\n action = extracted as typeof action;\n } else {\n throw new Error(\"extracted value missing 'action' property\");\n }\n } catch {\n throw new Error(\n `[Directive MultiAgent] Supervisor \"${pattern.supervisor}\" returned unparseable output (round ${round + 1}). ` +\n `Expected JSON with { action, worker?, workerInput? } but got: ${raw.slice(0, 200)}`,\n );\n }\n }\n } else if (raw && typeof raw === \"object\" && \"action\" in raw) {\n action = raw as typeof action;\n } else {\n throw new Error(\n `[Directive MultiAgent] Supervisor \"${pattern.supervisor}\" returned invalid output (round ${round + 1}). ` +\n `Expected { action: \"delegate\"|\"complete\", worker?, workerInput? }`,\n );\n }\n\n if (action.action === \"complete\" || !action.worker) {\n break;\n }\n\n if (!pattern.workers.includes(action.worker)) {\n const available = pattern.workers.join(\", \");\n\n throw new Error(\n `[Directive MultiAgent] Supervisor delegated to unknown worker \"${action.worker}\". Available workers: ${available}`,\n );\n }\n\n const workerResult = await runSingleAgent(\n action.worker,\n action.workerInput ?? \"\",\n { patternId },\n );\n workerResults.push(workerResult);\n serializedWorkerResults.push({\n output: workerResult.output,\n totalTokens: workerResult.totalTokens,\n });\n\n currentInput = `Worker ${action.worker} completed with result: ${safeStringify(workerResult.output)}`;\n supervisorResult = await runSingleAgent(\n pattern.supervisor,\n currentInput,\n { patternId },\n );\n\n // Save checkpoint after each round\n if (\n ckptConfig &&\n ckptStore &&\n round > startRound &&\n (round - startRound) % ckptEveryN === 0\n ) {\n await savePatternCheckpoint(\n {\n type: \"supervisor\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${ckptPrefix}:round-${round + 1}`,\n patternId: pId,\n stepsTotal: pattern.maxRounds ?? 10,\n round: round + 1,\n supervisorOutput: supervisorResult.output,\n workerResults: [...serializedWorkerResults],\n currentInput,\n },\n ckptStore,\n ckptConfig,\n );\n }\n }\n\n return pattern.extract\n ? pattern.extract(supervisorResult.output, workerResults)\n : (supervisorResult.output as T);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"supervisor\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- DAG Pattern Runner ----\n async function runDagPattern<T>(\n pattern: DagPattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: DagCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_dag\";\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId,\n patternType: \"dag\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const dagCkptConfig = pattern.checkpoint;\n const dagCkptStore = dagCkptConfig?.store ?? checkpointStore;\n const dagCkptEveryN = dagCkptConfig?.everyN ?? 5;\n const dagCkptPrefix = dagCkptConfig?.labelPrefix ?? \"dag\";\n let dagCompletedCount = resumeFrom?.completedCount ?? 0;\n let dagLastCheckpointCount = 0;\n // Serialize concurrent checkpoint saves to prevent race conditions\n let dagCheckpointChain: Promise<unknown> = Promise.resolve();\n const dagTotalNodes = Object.keys(pattern.nodes).length;\n\n const context: DagExecutionContext = {\n input: resumeFrom?.input ?? input,\n outputs: Object.create(null),\n statuses: Object.create(null),\n errors: Object.create(null),\n results: Object.create(null),\n };\n\n // Initialize all nodes as pending\n for (const nodeId of Object.keys(pattern.nodes)) {\n context.statuses[nodeId] = \"pending\";\n }\n\n // Restore from checkpoint\n if (resumeFrom) {\n for (const [nodeId, status] of Object.entries(resumeFrom.statuses)) {\n context.statuses[nodeId] = status;\n }\n for (const [nodeId, output] of Object.entries(resumeFrom.outputs)) {\n context.outputs[nodeId] = output;\n }\n for (const [nodeId, error] of Object.entries(resumeFrom.errors)) {\n context.errors[nodeId] = error;\n }\n for (const [nodeId, nr] of Object.entries(resumeFrom.nodeResults)) {\n context.results[nodeId] = {\n output: nr.output,\n totalTokens: nr.totalTokens,\n messages: [],\n toolCalls: [],\n };\n }\n }\n\n const onNodeError = pattern.onNodeError ?? \"fail\";\n const maxConcurrent = pattern.maxConcurrent ?? Number.POSITIVE_INFINITY;\n const controller = new AbortController();\n let graphTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let patternError: Error | undefined;\n\n if (pattern.timeout) {\n graphTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n }\n\n try {\n // Mark root nodes as ready (skip if restoring from checkpoint)\n if (!resumeFrom) {\n for (const [nodeId, node] of Object.entries(pattern.nodes)) {\n if (!node.deps || node.deps.length === 0) {\n context.statuses[nodeId] = \"ready\";\n }\n }\n }\n\n const inflight = new Set<Promise<void>>();\n let running = 0;\n\n function evaluatePendingNodes(): void {\n for (const [nodeId, node] of Object.entries(pattern.nodes)) {\n if (context.statuses[nodeId] !== \"pending\") {\n continue;\n }\n\n // Check if all deps are terminal (completed, skipped, or error for non-fail modes)\n const terminalStatuses =\n onNodeError === \"fail\"\n ? new Set([\"completed\", \"skipped\"])\n : new Set([\"completed\", \"skipped\", \"error\"]);\n const depsResolved = (node.deps ?? []).every((depId) => {\n return terminalStatuses.has(context.statuses[depId]!);\n });\n\n if (!depsResolved) {\n continue;\n }\n\n // Check if any dep errored or was skipped (for skip-downstream propagation)\n if (onNodeError === \"skip-downstream\") {\n const anyDepFailed = (node.deps ?? []).some(\n (depId) =>\n context.statuses[depId] === \"error\" ||\n context.statuses[depId] === \"skipped\",\n );\n if (anyDepFailed) {\n context.statuses[nodeId] = \"skipped\";\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"skipped\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeSkipped\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n reason: \"upstream dependency errored\",\n timestamp: Date.now(),\n });\n\n continue;\n }\n }\n\n // Evaluate when condition\n if (node.when) {\n try {\n if (!node.when(context)) {\n context.statuses[nodeId] = \"skipped\";\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"skipped\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeSkipped\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n reason: \"when() returned false\",\n timestamp: Date.now(),\n });\n\n continue;\n }\n } catch {\n context.statuses[nodeId] = \"skipped\";\n\n continue;\n }\n }\n\n context.statuses[nodeId] = \"ready\";\n }\n }\n\n async function launchNode(nodeId: string, node: DagNode): Promise<void> {\n const nodeStartTime = Date.now();\n context.statuses[nodeId] = \"running\";\n\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: nodeStartTime,\n snapshotId: null,\n nodeId,\n status: \"running\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeStart\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n timestamp: nodeStartTime,\n });\n\n // Build input\n let nodeInput: string;\n if (node.transform) {\n nodeInput = node.transform(context);\n } else if (node.deps && node.deps.length > 0) {\n const upstreamOutputs: Record<string, unknown> = Object.create(null);\n for (const depId of node.deps) {\n if (context.outputs[depId] !== undefined) {\n upstreamOutputs[depId] = context.outputs[depId];\n }\n }\n nodeInput = JSON.stringify(upstreamOutputs);\n } else {\n nodeInput = input;\n }\n\n // Per-node timeout\n const nodeController = new AbortController();\n let nodeTimeoutId: ReturnType<typeof setTimeout> | undefined;\n if (node.timeout) {\n nodeTimeoutId = setTimeout(\n () => nodeController.abort(),\n node.timeout,\n );\n }\n\n // Forward graph-level abort\n const abortHandler = () => nodeController.abort();\n controller.signal.addEventListener(\"abort\", abortHandler, {\n once: true,\n });\n\n try {\n const result = await runSingleAgent(node.handler, nodeInput, {\n signal: nodeController.signal,\n patternId: pId,\n });\n\n context.outputs[nodeId] = result.output;\n context.results[nodeId] = result;\n context.statuses[nodeId] = \"completed\";\n\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"completed\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeComplete\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n durationMs: Date.now() - nodeStartTime,\n timestamp: Date.now(),\n });\n\n // Save checkpoint after node completion (serialized to prevent concurrent race)\n dagCompletedCount++;\n if (\n dagCkptConfig &&\n dagCkptStore &&\n dagCompletedCount > dagLastCheckpointCount &&\n dagCompletedCount - dagLastCheckpointCount >= dagCkptEveryN\n ) {\n dagLastCheckpointCount = dagCompletedCount;\n const nodeResults: Record<\n string,\n { output: unknown; totalTokens: number }\n > = Object.create(null);\n for (const [nid, r] of Object.entries(context.results)) {\n nodeResults[nid] = {\n output: r.output,\n totalTokens: r.totalTokens,\n };\n }\n const ckptState = {\n type: \"dag\" as const,\n version: 1 as const,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${dagCkptPrefix}:node-${dagCompletedCount}`,\n patternId: pId,\n stepsTotal: dagTotalNodes,\n statuses: { ...context.statuses },\n outputs: { ...context.outputs },\n errors: { ...context.errors },\n completedCount: dagCompletedCount,\n nodeResults,\n input: context.input,\n };\n dagCheckpointChain = dagCheckpointChain.then(() =>\n savePatternCheckpoint(ckptState, dagCkptStore!, dagCkptConfig),\n );\n await dagCheckpointChain;\n }\n } catch (error) {\n context.statuses[nodeId] = \"error\";\n context.errors[nodeId] =\n error instanceof Error ? error.message : String(error);\n\n if (timeline) {\n timeline.record({\n type: \"dag_node_update\",\n timestamp: Date.now(),\n snapshotId: null,\n nodeId,\n status: \"error\",\n deps: node.deps ?? [],\n });\n }\n fireHook(\"onDagNodeError\", {\n patternId: pId,\n nodeId,\n agentId: node.handler,\n nodeType: tasks[node.handler]\n ? (\"task\" as const)\n : (\"agent\" as const),\n error: error instanceof Error ? error : new Error(String(error)),\n durationMs: Date.now() - nodeStartTime,\n timestamp: Date.now(),\n });\n\n if (onNodeError === \"fail\") {\n controller.abort();\n throw error;\n }\n // \"continue\" and \"skip-downstream\" just keep going\n } finally {\n if (nodeTimeoutId) {\n clearTimeout(nodeTimeoutId);\n }\n controller.signal.removeEventListener(\"abort\", abortHandler);\n running--;\n }\n }\n\n // Main loop\n while (true) {\n if (controller.signal.aborted) {\n break;\n }\n\n evaluatePendingNodes();\n\n // Collect ready nodes sorted by priority (descending)\n const readyNodes = Object.entries(pattern.nodes)\n .filter(([nodeId]) => context.statuses[nodeId] === \"ready\")\n .sort(([, a], [, b]) => (b.priority ?? 0) - (a.priority ?? 0));\n\n // Launch ready nodes up to maxConcurrent\n for (const [nodeId, node] of readyNodes) {\n if (running >= maxConcurrent) {\n break;\n }\n running++;\n const promise = launchNode(nodeId, node).finally(() => {\n inflight.delete(promise);\n });\n inflight.add(promise);\n }\n\n // Check if we're done\n const hasPendingOrRunning = Object.values(context.statuses).some(\n (s) => s === \"pending\" || s === \"running\" || s === \"ready\",\n );\n if (!hasPendingOrRunning) {\n break;\n }\n\n // Wait for at least one inflight to complete\n if (inflight.size > 0) {\n await Promise.race(inflight);\n } else {\n // No inflight and still pending — must be stuck (unreachable deps)\n break;\n }\n }\n\n // Wait for remaining inflight\n if (inflight.size > 0) {\n await Promise.allSettled(inflight);\n }\n\n return await pattern.merge(context);\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (graphTimeoutId) {\n clearTimeout(graphTimeoutId);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId,\n patternType: \"dag\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Reflect Pattern Runner ----\n async function runReflectPattern<T>(\n pattern: ReflectPattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: ReflectCheckpointState,\n ): Promise<T> {\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_reflect\";\n const maxIterations = pattern.maxIterations ?? 2;\n\n if (maxIterations < 1) {\n throw new Error(\n \"[Directive MultiAgent] Reflect pattern maxIterations must be >= 1\",\n );\n }\n if (debug && maxIterations > 3) {\n console.warn(\n \"[Directive MultiAgent] Reflection loops > 3 iterations rarely improve quality. Consider reducing maxIterations.\",\n );\n }\n\n // Merge timeout into signal if provided\n let effectiveSignal = pattern.signal;\n let reflectTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let reflectExternalOnAbort: (() => void) | undefined;\n if (pattern.timeout && !effectiveSignal) {\n const controller = new AbortController();\n reflectTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n effectiveSignal = controller.signal;\n } else if (pattern.timeout && effectiveSignal) {\n // Both timeout and signal: combine them\n const controller = new AbortController();\n reflectTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n reflectExternalOnAbort = () => controller.abort();\n effectiveSignal.addEventListener(\"abort\", reflectExternalOnAbort, {\n once: true,\n });\n effectiveSignal = controller.signal;\n }\n\n const parseEvaluation =\n pattern.parseEvaluation ??\n ((output: unknown): ReflectionEvaluation => {\n if (typeof output === \"string\") {\n try {\n return JSON.parse(output);\n } catch {\n return {\n passed: false,\n feedback: `Evaluator returned unparseable output: ${output.slice(0, 200)}`,\n };\n }\n }\n if (output && typeof output === \"object\" && \"passed\" in output) {\n return output as ReflectionEvaluation;\n }\n\n return { passed: false, feedback: \"Evaluator returned invalid format\" };\n });\n const buildRetryInput =\n pattern.buildRetryInput ??\n ((inp: string, feedback: string, _iteration: number) =>\n `${inp}\\n\\nFeedback on your previous response:\\n${feedback}\\n\\nPlease improve your response.`);\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"reflect\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n // Checkpoint config\n const reflectCkptConfig = pattern.checkpoint;\n const reflectCkptStore = reflectCkptConfig?.store ?? checkpointStore;\n const reflectCkptEveryN = reflectCkptConfig?.everyN ?? 5;\n const reflectCkptPrefix = reflectCkptConfig?.labelPrefix ?? \"reflect\";\n\n let patternError: Error | undefined;\n let lastProducerResult: RunResult<unknown> | undefined;\n const history: ReflectIterationRecord[] = resumeFrom?.history\n ? [...resumeFrom.history]\n : [];\n // Track per-iteration producer outputs for accept-best\n const producerOutputs: Array<{ output: unknown; score?: number }> =\n resumeFrom?.producerOutputs ? [...resumeFrom.producerOutputs] : [];\n const startIteration = resumeFrom?.iteration ?? 0;\n\n // Restore last producer result from checkpoint\n if (resumeFrom?.lastProducerOutput != null) {\n lastProducerResult = {\n output: resumeFrom.lastProducerOutput,\n totalTokens: 0,\n messages: [],\n toolCalls: [],\n };\n }\n\n try {\n let effectiveInput = resumeFrom?.effectiveInput ?? input;\n\n for (\n let iteration = startIteration;\n iteration < maxIterations;\n iteration++\n ) {\n // Check abort signal at top of each iteration\n if (effectiveSignal?.aborted) {\n if (lastProducerResult) {\n lastReflectionHistory = history;\n\n return pattern.extract\n ? pattern.extract(lastProducerResult.output)\n : (lastProducerResult.output as T);\n }\n\n throw new DOMException(\"Reflect pattern aborted\", \"AbortError\");\n }\n\n const iterStart = Date.now();\n\n // Run producer (pass signal through)\n const producerResult = await runSingleAgent(\n pattern.handler,\n effectiveInput,\n { signal: effectiveSignal, patternId },\n );\n lastProducerResult = producerResult;\n const producerOutput =\n typeof producerResult.output === \"string\"\n ? producerResult.output\n : safeStringify(producerResult.output);\n\n // Check abort after producer, before evaluator\n if (effectiveSignal?.aborted) {\n lastReflectionHistory = history;\n\n return pattern.extract\n ? pattern.extract(producerResult.output)\n : (producerResult.output as T);\n }\n\n // Run evaluator (pass signal through)\n const evaluatorResult = await runSingleAgent(\n pattern.evaluator,\n producerOutput,\n { signal: effectiveSignal, patternId },\n );\n let evaluation: ReflectionEvaluation;\n try {\n evaluation = parseEvaluation(evaluatorResult.output);\n } catch (parseError) {\n evaluation = {\n passed: false,\n feedback: `Evaluation parse error: ${parseError instanceof Error ? parseError.message : String(parseError)}`,\n };\n }\n\n // Apply threshold-based pass override\n if (\n !evaluation.passed &&\n pattern.threshold != null &&\n evaluation.score != null\n ) {\n const thresholdValue =\n typeof pattern.threshold === \"function\"\n ? pattern.threshold(iteration)\n : pattern.threshold;\n if (evaluation.score >= thresholdValue) {\n evaluation = { ...evaluation, passed: true };\n }\n }\n\n const iterDurationMs = Date.now() - iterStart;\n\n // Store producer output for accept-best\n producerOutputs.push({\n output: producerResult.output,\n score: evaluation.score,\n });\n\n // Build iteration record\n const record: ReflectIterationRecord = {\n iteration,\n passed: evaluation.passed,\n score: evaluation.score,\n feedback: evaluation.feedback,\n durationMs: iterDurationMs,\n producerTokens: producerResult.totalTokens ?? 0,\n evaluatorTokens: evaluatorResult.totalTokens ?? 0,\n };\n history.push(record);\n\n // Fire onIteration callback\n if (pattern.onIteration) {\n try {\n pattern.onIteration(record);\n } catch (cbError) {\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] onIteration callback threw:\",\n cbError,\n );\n }\n }\n }\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"reflection_iteration\",\n timestamp: Date.now(),\n snapshotId: null,\n iteration,\n passed: evaluation.passed,\n score: evaluation.score,\n durationMs: iterDurationMs,\n producerTokens: producerResult.totalTokens,\n evaluatorTokens: evaluatorResult.totalTokens,\n });\n }\n\n if (evaluation.passed) {\n lastReflectionHistory = history;\n\n return pattern.extract\n ? pattern.extract(producerResult.output)\n : (producerResult.output as T);\n }\n\n // Build retry input for next iteration\n if (iteration < maxIterations - 1 && evaluation.feedback) {\n try {\n effectiveInput = buildRetryInput(\n input,\n evaluation.feedback,\n iteration,\n );\n } catch (retryError) {\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] buildRetryInput threw, using default format:\",\n retryError,\n );\n }\n effectiveInput = `${input}\\n\\nFeedback on your previous response:\\n${evaluation.feedback}\\n\\nPlease improve your response.`;\n }\n }\n\n // Save checkpoint after each iteration\n if (\n reflectCkptConfig &&\n reflectCkptStore &&\n iteration >= startIteration &&\n (iteration - startIteration + 1) % reflectCkptEveryN === 0\n ) {\n await savePatternCheckpoint(\n {\n type: \"reflect\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${reflectCkptPrefix}:iter-${iteration + 1}`,\n patternId: pId,\n stepsTotal: maxIterations,\n iteration: iteration + 1,\n effectiveInput,\n history: [...history],\n producerOutputs: [...producerOutputs],\n lastProducerOutput: producerResult.output,\n },\n reflectCkptStore,\n reflectCkptConfig,\n );\n }\n }\n\n lastReflectionHistory = history;\n\n // Exhausted\n if (pattern.onExhausted === \"throw\") {\n throw new ReflectionExhaustedError({\n iterations: maxIterations,\n history: history.map((h) => ({\n passed: h.passed,\n feedback: h.feedback,\n score: h.score,\n })),\n lastResult: lastProducerResult!,\n totalTokens: lastProducerResult!.totalTokens ?? 0,\n });\n }\n\n // \"accept-best\" — pick iteration with highest score\n if (pattern.onExhausted === \"accept-best\" && producerOutputs.length > 0) {\n const hasAnyScore = producerOutputs.some((p) => p.score != null);\n if (!hasAnyScore && debug) {\n console.warn(\n \"[Directive MultiAgent] accept-best exhaustion strategy used but no iterations returned scores. Falling back to last output.\",\n );\n }\n let bestIdx = producerOutputs.length - 1;\n let bestScore = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < producerOutputs.length; i++) {\n const s = producerOutputs[i]!.score;\n if (s != null && s > bestScore) {\n bestScore = s;\n bestIdx = i;\n }\n }\n\n const bestOutput = producerOutputs[bestIdx]!.output;\n\n return pattern.extract\n ? pattern.extract(bestOutput)\n : (bestOutput as T);\n }\n\n // \"accept-last\" (default)\n return pattern.extract\n ? pattern.extract(lastProducerResult!.output)\n : (lastProducerResult!.output as T);\n } catch (error) {\n lastReflectionHistory = history;\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (reflectTimeoutId) {\n clearTimeout(reflectTimeoutId);\n }\n if (reflectExternalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", reflectExternalOnAbort);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"reflect\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Race Pattern Runner ----\n async function runRacePattern<T>(\n pattern: RacePattern<T>,\n input: string,\n patternId?: string,\n ): Promise<RaceResult<T>> {\n if (pattern.handlers.length === 0) {\n throw new Error(\n \"[Directive MultiAgent] Race pattern requires at least one agent\",\n );\n }\n\n const minSuccess = pattern.minSuccess ?? 1;\n\n if (!Number.isInteger(minSuccess) || minSuccess < 1) {\n throw new Error(\n \"[Directive MultiAgent] Race pattern minSuccess must be a positive integer\",\n );\n }\n if (minSuccess > pattern.handlers.length) {\n throw new Error(\n `[Directive MultiAgent] Race pattern minSuccess (${minSuccess}) exceeds agent count (${pattern.handlers.length})`,\n );\n }\n\n // Validate handler IDs (agents or tasks)\n for (const agentId of pattern.handlers) {\n if (!agents[agentId] && !tasks[agentId]) {\n throw new Error(\n `[Directive MultiAgent] Race: unknown handler \"${agentId}\"`,\n );\n }\n }\n\n const patternStartTime = Date.now();\n const pId = patternId ?? \"__inline_race\";\n const controller = new AbortController();\n let raceTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n // Wire external signal into internal controller\n let raceExternalOnAbort: (() => void) | undefined;\n if (pattern.signal) {\n if (pattern.signal.aborted) {\n controller.abort();\n } else {\n raceExternalOnAbort = () => controller.abort();\n pattern.signal.addEventListener(\"abort\", raceExternalOnAbort, {\n once: true,\n });\n }\n }\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"race\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n if (timeline) {\n timeline.record({\n type: \"race_start\",\n timestamp: patternStartTime,\n snapshotId: null,\n patternId: pId,\n agents: pattern.handlers,\n });\n }\n\n if (pattern.timeout) {\n raceTimeoutId = setTimeout(() => controller.abort(), pattern.timeout);\n }\n\n let patternError: Error | undefined;\n const agentErrors: Record<string, string> = Object.create(null);\n const startedAgents = [...pattern.handlers];\n\n try {\n // Start all agents, collecting promises\n type RaceEntry = {\n agentId: string;\n promise: Promise<{ agentId: string; result: RunResult<unknown> }>;\n };\n const entries: RaceEntry[] = pattern.handlers.map((agentId) => ({\n agentId,\n // Output guardrails are already checked inside runSingleAgent\n promise: runSingleAgent(agentId, input, {\n signal: controller.signal,\n patternId,\n }).then((result) => ({ agentId, result })),\n }));\n\n // Custom race: track settled count, await all promises for cleanup\n const allPromises = entries.map((e) => e.promise.catch(() => undefined));\n\n const collectedResults: Array<{\n agentId: string;\n result: RunResult<unknown>;\n }> = [];\n\n const result = await new Promise<\n Array<{ agentId: string; result: RunResult<unknown> }>\n >((resolve, reject) => {\n let settledCount = 0;\n let resolved = false;\n\n for (const entry of entries) {\n entry.promise\n .then((winner) => {\n settledCount++;\n if (resolved) {\n return;\n }\n collectedResults.push(winner);\n if (collectedResults.length >= minSuccess) {\n resolved = true;\n controller.abort();\n resolve([...collectedResults]);\n }\n })\n .catch((error) => {\n agentErrors[entry.agentId] =\n error instanceof Error ? error.message : String(error);\n settledCount++;\n\n if (resolved) {\n return;\n }\n\n const failedCount = Object.keys(agentErrors).length;\n const maxPossibleSuccesses =\n collectedResults.length + (entries.length - settledCount);\n\n // All agents failed\n if (\n settledCount === entries.length &&\n failedCount === entries.length\n ) {\n resolved = true;\n reject(\n new Error(\n `[Directive MultiAgent] Race: all ${entries.length} agents failed.\\n` +\n Object.entries(agentErrors)\n .map(([id, msg]) => ` - ${id}: ${msg}`)\n .join(\"\\n\"),\n ),\n );\n } else if (maxPossibleSuccesses < minSuccess) {\n // Impossible to reach minSuccess — some succeeded but not enough can\n resolved = true;\n reject(\n new Error(\n `[Directive MultiAgent] Race: cannot reach minSuccess (${minSuccess}). ` +\n `${failedCount} agent(s) failed.\\n` +\n Object.entries(agentErrors)\n .map(([id, msg]) => ` - ${id}: ${msg}`)\n .join(\"\\n\"),\n ),\n );\n }\n });\n }\n });\n\n // Wait for all losing agents to settle so their side effects\n // (token counting, state mutations) complete before we return\n await Promise.all(allPromises).catch(() => {});\n\n // First result is the \"winner\" (fastest) — guaranteed to exist since minSuccess >= 1\n const first = result[0]!;\n const winnerId = first.agentId;\n const successIds = new Set(result.map((r) => r.agentId));\n const cancelledIds = startedAgents.filter(\n (id) => !successIds.has(id) && !(id in agentErrors),\n );\n\n if (timeline) {\n timeline.record({\n type: \"race_winner\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n winnerId,\n durationMs: Date.now() - patternStartTime,\n });\n if (cancelledIds.length > 0) {\n timeline.record({\n type: \"race_cancelled\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n cancelledIds,\n reason: \"winner_found\",\n });\n }\n }\n\n const extracted = pattern.extract\n ? pattern.extract(first.result)\n : (first.result.output as T);\n\n // Build allResults when minSuccess > 1\n const allResults =\n minSuccess > 1\n ? result.map((r) => ({\n agentId: r.agentId,\n result: pattern.extract\n ? pattern.extract(r.result)\n : (r.result.output as T),\n }))\n : undefined;\n\n return { winnerId, result: extracted, allResults };\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n\n // Record cancellation due to all-failed or timeout\n if (timeline) {\n timeline.record({\n type: \"race_cancelled\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n cancelledIds: startedAgents,\n reason: controller.signal.aborted ? \"timeout\" : \"all_failed\",\n });\n }\n\n throw error;\n } finally {\n if (raceTimeoutId) {\n clearTimeout(raceTimeoutId);\n }\n if (raceExternalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", raceExternalOnAbort);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"race\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Debate Pattern Runner ----\n async function runDebateInternal<T>(\n pattern: DebatePattern<T>,\n input: string,\n patternId?: string,\n resumeFrom?: DebateCheckpointState,\n ): Promise<DebateResult<T>> {\n const {\n handlers: debateAgents,\n evaluator,\n maxRounds = 2,\n extract,\n parseJudgement,\n } = pattern;\n\n if (debateAgents.length < 2) {\n throw new Error(\n \"[Directive MultiAgent] debate requires at least 2 handlers\",\n );\n }\n if (maxRounds < 1 || !Number.isFinite(maxRounds)) {\n throw new Error(\"[Directive MultiAgent] debate maxRounds must be >= 1\");\n }\n\n // Signal/timeout composition\n let effectiveSignal = pattern.signal;\n let debateTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let externalOnAbort: (() => void) | undefined;\n if (pattern.timeout && !effectiveSignal) {\n const ctrl = new AbortController();\n debateTimeoutId = setTimeout(() => ctrl.abort(), pattern.timeout);\n effectiveSignal = ctrl.signal;\n } else if (pattern.timeout && effectiveSignal) {\n const ctrl = new AbortController();\n debateTimeoutId = setTimeout(() => ctrl.abort(), pattern.timeout);\n externalOnAbort = () => ctrl.abort();\n effectiveSignal.addEventListener(\"abort\", externalOnAbort, {\n once: true,\n });\n effectiveSignal = ctrl.signal;\n }\n\n const defaultParseJudgement = (\n output: unknown,\n ): { winnerId: string; feedback?: string; score?: number } => {\n if (typeof output === \"string\") {\n try {\n const parsed = JSON.parse(output);\n if (\n parsed &&\n typeof parsed === \"object\" &&\n typeof parsed.winnerId === \"string\"\n ) {\n return parsed;\n }\n\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent\",\n );\n }\n\n return { winnerId: debateAgents[0]! };\n } catch {\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent\",\n );\n }\n\n return { winnerId: debateAgents[0]! };\n }\n }\n if (\n output &&\n typeof output === \"object\" &&\n \"winnerId\" in output &&\n typeof (output as Record<string, unknown>).winnerId === \"string\"\n ) {\n return output as {\n winnerId: string;\n feedback?: string;\n score?: number;\n };\n }\n\n if (debug) {\n console.warn(\n \"[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent\",\n );\n }\n\n return { winnerId: debateAgents[0]! };\n };\n\n const parseJudge = parseJudgement ?? defaultParseJudgement;\n const rounds: DebateResult<T>[\"rounds\"] = resumeFrom?.rounds\n ? [...resumeFrom.rounds]\n : [];\n let currentInput = resumeFrom?.currentInput ?? input;\n let lastWinnerId = resumeFrom?.lastWinnerId ?? debateAgents[0]!;\n let lastWinnerOutput: unknown = resumeFrom?.lastWinnerOutput ?? undefined;\n const startRound = resumeFrom?.round ?? 0;\n\n // Checkpoint config\n const debateCkptConfig = pattern.checkpoint;\n const debateCkptStore = debateCkptConfig?.store ?? checkpointStore;\n const debateCkptEveryN = debateCkptConfig?.everyN ?? 5;\n const debateCkptPrefix = debateCkptConfig?.labelPrefix ?? \"debate\";\n\n const pId = patternId ?? \"__inline_debate\";\n const patternStartTime = Date.now();\n let debateTotalTokens = resumeFrom?.tokensConsumed ?? 0;\n\n if (patternId) {\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"debate\",\n input,\n timestamp: patternStartTime,\n });\n }\n\n let patternError: Error | undefined;\n try {\n for (let round = startRound; round < maxRounds; round++) {\n if (effectiveSignal?.aborted) {\n break;\n }\n\n const proposalPromises = debateAgents.map(async (agentId) => {\n const result = await runSingleAgent(agentId, currentInput, {\n signal: effectiveSignal,\n patternId: pId,\n });\n debateTotalTokens += result.totalTokens;\n\n return { agentId, output: result.output };\n });\n const proposals = await Promise.all(proposalPromises);\n\n if (effectiveSignal?.aborted) {\n break;\n }\n\n const evalInput = JSON.stringify({\n round: round + 1,\n totalRounds: maxRounds,\n proposals: proposals.map((p) => ({\n agentId: p.agentId,\n proposal: p.output,\n })),\n });\n\n const evalResult = await runSingleAgent(evaluator, evalInput, {\n signal: effectiveSignal,\n patternId: pId,\n });\n debateTotalTokens += evalResult.totalTokens;\n const judgement = parseJudge(evalResult.output);\n\n // Validate winnerId\n if (!debateAgents.includes(judgement.winnerId)) {\n judgement.winnerId = debateAgents[0]!;\n }\n\n rounds.push({ proposals, judgement });\n\n // Record debate round timeline event\n if (timeline) {\n timeline.record({\n type: \"debate_round\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n round: round + 1,\n totalRounds: maxRounds,\n winnerId: judgement.winnerId,\n score: judgement.score,\n agentCount: debateAgents.length,\n });\n }\n\n lastWinnerId = judgement.winnerId;\n const winnerProposal = proposals.find(\n (p) => p.agentId === judgement.winnerId,\n );\n lastWinnerOutput = winnerProposal?.output ?? proposals[0]!.output;\n\n // Save checkpoint at configured intervals\n if (\n debateCkptConfig &&\n debateCkptStore &&\n round > startRound &&\n (round - startRound) % debateCkptEveryN === 0\n ) {\n const ckptState: DebateCheckpointState = {\n type: \"debate\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${debateCkptPrefix}:round-${round + 1}`,\n patternId: pId,\n stepsTotal: maxRounds,\n round: round + 1,\n currentInput,\n rounds: [...rounds],\n lastWinnerId,\n lastWinnerOutput,\n tokensConsumed: debateTotalTokens,\n };\n await savePatternCheckpoint(\n ckptState,\n debateCkptStore,\n debateCkptConfig,\n );\n }\n\n if (round < maxRounds - 1 && judgement.feedback) {\n currentInput = `Previous round feedback: ${judgement.feedback}\\n\\nOriginal task: ${input}`;\n }\n }\n\n if (rounds.length === 0) {\n throw new Error(\n \"[Directive MultiAgent] Debate aborted before any round completed\",\n );\n }\n\n const result = extract\n ? extract(lastWinnerOutput)\n : (lastWinnerOutput as T);\n\n return { winnerId: lastWinnerId, result, rounds };\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (debateTimeoutId) {\n clearTimeout(debateTimeoutId);\n }\n if (externalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n if (patternId) {\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"debate\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n }\n\n // ---- Goal Pattern Implementation ----\n\n /** Keys that must never appear in goal facts (prototype pollution guard) */\n const GOAL_BLOCKED_KEYS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"toString\",\n \"valueOf\",\n \"hasOwnProperty\",\n ]);\n\n function goalSafeMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n ): void {\n for (const key of Object.keys(source)) {\n if (!GOAL_BLOCKED_KEYS.has(key)) {\n target[key] = source[key];\n }\n }\n }\n\n /**\n * Detect cycles in goal node dependency graph.\n * Builds an implicit DAG from produces/requires and applies Kahn's algorithm.\n */\n function validateGoalAcyclic(\n pId: string,\n nodes: Record<string, GoalNode>,\n ): void {\n // Build producer map: factKey → nodeId(s) that produce it\n const producerMap: Record<string, string[]> = Object.create(null);\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const key of node.produces) {\n if (!producerMap[key]) {\n producerMap[key] = [];\n }\n producerMap[key]!.push(nodeId);\n }\n }\n\n // Build adjacency from requires → produces edges\n const nodeIds = Object.keys(nodes);\n const inDegree: Record<string, number> = Object.create(null);\n const adjacency: Record<string, string[]> = Object.create(null);\n for (const id of nodeIds) {\n inDegree[id] = 0;\n adjacency[id] = [];\n }\n\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const reqKey of node.requires ?? []) {\n const producers = producerMap[reqKey];\n if (producers) {\n for (const producerId of producers) {\n if (producerId !== nodeId) {\n adjacency[producerId]!.push(nodeId);\n inDegree[nodeId] = (inDegree[nodeId] ?? 0) + 1;\n }\n }\n }\n }\n }\n\n // Kahn's algorithm\n const queue: string[] = [];\n for (const id of nodeIds) {\n if (inDegree[id] === 0) {\n queue.push(id);\n }\n }\n\n let visited = 0;\n while (queue.length > 0) {\n const current = queue.shift()!;\n visited++;\n for (const dependent of adjacency[current] ?? []) {\n inDegree[dependent]!--;\n if (inDegree[dependent] === 0) {\n queue.push(dependent);\n }\n }\n }\n\n if (visited !== nodeIds.length) {\n throw new Error(\n `[Directive MultiAgent] goal pattern \"${pId}\": cycle detected in produces/requires graph. Visited ${visited}/${nodeIds.length} nodes.`,\n );\n }\n }\n\n /**\n * Validate that no two nodes produce the same fact key (M1: producer conflict detection).\n * Logs a dev-mode warning rather than throwing, since some use cases intentionally overlap.\n */\n function validateProducerConflicts(\n pId: string,\n nodes: Record<string, GoalNode>,\n ): void {\n const producerMap: Record<string, string[]> = Object.create(null);\n for (const [nodeId, node] of Object.entries(nodes)) {\n for (const key of node.produces) {\n if (!producerMap[key]) {\n producerMap[key] = [];\n }\n producerMap[key]!.push(nodeId);\n }\n }\n\n for (const [key, producers] of Object.entries(producerMap)) {\n if (producers.length > 1) {\n console.warn(\n `[Directive MultiAgent] goal pattern \"${pId}\": fact key \"${key}\" is produced by multiple nodes: ${producers.join(\", \")}. Last writer wins.`,\n );\n }\n }\n }\n\n /** Safe wrapper for user-provided callbacks (C1). */\n function safeCall<A extends unknown[], R>(\n fn: ((...args: A) => R) | undefined,\n ...args: A\n ): R | undefined {\n if (!fn) {\n return undefined;\n }\n\n try {\n return fn(...args);\n } catch (err) {\n console.error(\"[Directive MultiAgent] goal: user callback threw:\", err);\n\n return undefined;\n }\n }\n\n /** Safe wrapper for async user-provided callbacks (C1). */\n async function safeCallAsync<A extends unknown[], R>(\n fn: ((...args: A) => R | Promise<R>) | undefined,\n ...args: A\n ): Promise<R | undefined> {\n if (!fn) {\n return undefined;\n }\n\n try {\n return await fn(...args);\n } catch (err) {\n console.error(\"[Directive MultiAgent] goal: user callback threw:\", err);\n\n return undefined;\n }\n }\n\n /** Compute estimatedStepsRemaining and decelerating from step history (M7). */\n function computeGoalMetrics(\n currentSatisfaction: number,\n stepMetrics: GoalStepMetrics[],\n _step: number,\n ): GoalMetrics {\n // Calculate recent progress rate (average delta over last 3 steps)\n const recentSteps = stepMetrics.slice(-3);\n const avgDelta =\n recentSteps.length > 0\n ? recentSteps.reduce((sum, s) => sum + s.satisfactionDelta, 0) /\n recentSteps.length\n : 0;\n\n let estimatedStepsRemaining: number | null = null;\n if (avgDelta > 0 && currentSatisfaction < 1.0) {\n estimatedStepsRemaining = Math.ceil(\n (1.0 - currentSatisfaction) / avgDelta,\n );\n }\n\n // Decelerating: compare last 3 deltas to prior 3 deltas\n let decelerating = false;\n if (stepMetrics.length >= 6) {\n const recent3 = stepMetrics.slice(-3);\n const prior3 = stepMetrics.slice(-6, -3);\n const recentAvg =\n recent3.reduce((s, m) => s + m.satisfactionDelta, 0) / 3;\n const priorAvg = prior3.reduce((s, m) => s + m.satisfactionDelta, 0) / 3;\n decelerating = recentAvg < priorAvg * 0.5;\n }\n\n return {\n satisfaction: currentSatisfaction,\n progressRate: avgDelta,\n estimatedStepsRemaining,\n decelerating,\n };\n }\n\n /** Clamp satisfaction to [0, 1] and guard against NaN/Infinity (M4). */\n function clampSatisfaction(value: number | undefined): number {\n if (value == null || !Number.isFinite(value)) {\n return 0;\n }\n\n return Math.max(0, Math.min(1, value));\n }\n\n async function runGoalInternal<T>(\n pattern: GoalPattern<T>,\n initialInput: string | Record<string, unknown>,\n patternId?: string,\n resumeFrom?: GoalCheckpointState,\n ): Promise<GoalResult<T>> {\n const {\n nodes: originalNodes,\n when: goalWhen,\n satisfaction: satisfactionFn,\n maxSteps = 50,\n extract,\n selectionStrategy,\n relaxation,\n onStep,\n onStall,\n } = pattern;\n\n // Shadow copy of nodes so relaxation mutations don't affect the original (M2)\n const nodes: Record<string, GoalNode> = Object.create(null);\n for (const [id, node] of Object.entries(originalNodes)) {\n nodes[id] = { ...node };\n }\n\n const nodeIds = Object.keys(nodes);\n if (nodeIds.length === 0) {\n throw new Error(\"[Directive MultiAgent] goal requires at least one node\");\n }\n\n const pId = patternId ?? \"__goal\";\n\n // Validate all node handlers (agents or tasks) are registered\n for (const [nodeId, node] of Object.entries(nodes)) {\n if (!agents[node.handler] && !tasks[node.handler]) {\n throw new Error(\n `[Directive MultiAgent] goal node \"${nodeId}\" references unregistered handler \"${node.handler}\"`,\n );\n }\n }\n\n // Cycle detection\n validateGoalAcyclic(pId, nodes);\n\n // Producer conflict warnings\n validateProducerConflicts(pId, nodes);\n\n // Warn if extractOutput is missing (dev guidance)\n for (const [nodeId, node] of Object.entries(nodes)) {\n if (!node.extractOutput) {\n console.warn(\n `[Directive MultiAgent] goal node \"${nodeId}\": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`,\n );\n }\n }\n\n // Signal/timeout composition\n let effectiveSignal = pattern.signal;\n let goalTimeoutId: ReturnType<typeof setTimeout> | undefined;\n let externalOnAbort: (() => void) | undefined;\n const timeoutMs = pattern.timeout ?? 300_000;\n if (timeoutMs && !effectiveSignal) {\n const ctrl = new AbortController();\n goalTimeoutId = setTimeout(() => ctrl.abort(), timeoutMs);\n effectiveSignal = ctrl.signal;\n } else if (timeoutMs && effectiveSignal) {\n const ctrl = new AbortController();\n goalTimeoutId = setTimeout(() => ctrl.abort(), timeoutMs);\n externalOnAbort = () => ctrl.abort();\n effectiveSignal.addEventListener(\"abort\", externalOnAbort, {\n once: true,\n });\n effectiveSignal = ctrl.signal;\n }\n\n const patternStartTime = Date.now();\n\n if (timeline) {\n const goalHandlers = Object.values(nodes).map((n) => n.handler);\n\n timeline.record({\n type: \"pattern_start\",\n timestamp: patternStartTime,\n snapshotId: null,\n patternId: pId,\n patternType: \"goal\",\n handlers: goalHandlers,\n taskIds: goalHandlers.filter((h) => tasks[h] != null),\n });\n }\n fireHook(\"onPatternStart\", {\n patternId: pId,\n patternType: \"goal\",\n input:\n typeof initialInput === \"string\"\n ? initialInput\n : JSON.stringify(initialInput),\n timestamp: patternStartTime,\n });\n\n // Initialize facts\n const facts: Record<string, unknown> = Object.create(null);\n if (resumeFrom) {\n goalSafeMerge(facts, resumeFrom.facts);\n } else if (typeof initialInput === \"string\") {\n facts.input = initialInput;\n } else {\n goalSafeMerge(facts, initialInput);\n }\n\n // Tracking state — restore from checkpoint or start fresh\n const executionOrder: string[] = resumeFrom\n ? [...resumeFrom.executionOrder]\n : [];\n const nodeResults: Record<string, RunResult<unknown>> = Object.create(null);\n if (resumeFrom) {\n for (const [id, out] of Object.entries(resumeFrom.nodeOutputs)) {\n nodeResults[id] = {\n output: out.output,\n totalTokens: out.totalTokens,\n } as RunResult<unknown>;\n }\n }\n const stepMetrics: GoalStepMetrics[] = resumeFrom\n ? [...resumeFrom.stepMetrics]\n : [];\n const relaxations: RelaxationRecord[] = resumeFrom\n ? [...resumeFrom.relaxations]\n : [];\n const completedNodes = new Set<string>(resumeFrom?.completedNodes ?? []);\n const failedNodes = new Map<string, number>(\n resumeFrom\n ? Object.entries(resumeFrom.failedNodes).map(([k, v]) => [k, v])\n : [],\n );\n const nodeInputHashes = new Map<string, string>(\n resumeFrom ? Object.entries(resumeFrom.nodeInputHashes) : [],\n );\n const agentMetrics: Record<\n string,\n {\n runs: number;\n avgSatisfactionDelta: number;\n tokens: number;\n totalDelta: number;\n }\n > = Object.create(null);\n if (resumeFrom) {\n for (const [id, m] of Object.entries(resumeFrom.agentMetrics)) {\n agentMetrics[id] = {\n runs: m.runs,\n avgSatisfactionDelta: m.runs > 0 ? m.totalDelta / m.runs : 0,\n tokens: m.tokens,\n totalDelta: m.totalDelta,\n };\n }\n }\n let stallSteps = resumeFrom?.stallSteps ?? 0;\n let appliedRelaxationTiers = resumeFrom?.appliedRelaxationTiers ?? 0;\n let lastSatisfaction = resumeFrom?.lastSatisfaction ?? 0;\n let patternError: Error | undefined;\n let goalAchieved = false;\n const startStep = resumeFrom?.step ?? 0;\n\n // Checkpoint config\n const checkpointConfig = pattern.checkpoint;\n const checkpointEveryN = checkpointConfig?.everyN ?? 5;\n const checkpointStoreRef = checkpointConfig?.store ?? checkpointStore;\n const checkpointLabelPrefix = checkpointConfig?.labelPrefix ?? \"goal\";\n let lastCheckpointId: string | undefined;\n void lastCheckpointId; // Used later in checkpoint save\n\n const MAX_CONSECUTIVE_FAILURES = 3;\n\n try {\n for (let step = startStep; step < maxSteps; step++) {\n // Check goal condition (C1: safe-wrap user callback)\n if (safeCall(goalWhen, facts) === true) {\n goalAchieved = true;\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: true,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n };\n }\n\n // Check abort\n if (effectiveSignal?.aborted) {\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error: \"Aborted or timed out\",\n };\n }\n\n // Find ready nodes\n const readyNodes: string[] = [];\n for (const [nodeId, node] of Object.entries(nodes)) {\n // Skip permanently failed nodes\n if ((failedNodes.get(nodeId) ?? 0) >= MAX_CONSECUTIVE_FAILURES) {\n continue;\n }\n\n // Check requires satisfied\n const requires = node.requires ?? [];\n const requiresSatisfied = requires.every((key) => facts[key] != null);\n if (!requiresSatisfied) {\n continue;\n }\n\n // Check if already completed\n if (completedNodes.has(nodeId)) {\n if (!node.allowRerun) {\n continue;\n }\n\n // Check if inputs changed\n const inputHash = JSON.stringify(requires.map((key) => facts[key]));\n if (nodeInputHashes.get(nodeId) === inputHash) {\n continue;\n }\n }\n\n readyNodes.push(nodeId);\n }\n\n // Apply selection strategy\n let selectedNodes = readyNodes;\n if (selectionStrategy && readyNodes.length > 0) {\n const rawSatisfaction = satisfactionFn\n ? (safeCall(satisfactionFn, facts) ?? 0)\n : safeCall(goalWhen, facts) === true\n ? 1.0\n : 0.0;\n const currentSatisfaction = clampSatisfaction(rawSatisfaction);\n const goalProgressMetrics = computeGoalMetrics(\n currentSatisfaction,\n stepMetrics,\n step,\n );\n\n // Build per-agent metrics for the strategy\n const strategyMetrics: Record<\n string,\n { runs: number; avgSatisfactionDelta: number; tokens: number }\n > = Object.create(null);\n for (const [id, m] of Object.entries(agentMetrics)) {\n strategyMetrics[id] = {\n runs: m.runs,\n avgSatisfactionDelta: m.runs > 0 ? m.totalDelta / m.runs : 0,\n tokens: m.tokens,\n };\n }\n\n const strategyResult = selectionStrategy.select(\n readyNodes,\n strategyMetrics,\n goalProgressMetrics,\n );\n // Guard against empty selection strategy result — fall back to readyNodes\n selectedNodes =\n strategyResult && strategyResult.length > 0\n ? strategyResult\n : readyNodes;\n }\n\n // Sort by priority (higher first)\n selectedNodes.sort(\n (a, b) => (nodes[b]!.priority ?? 0) - (nodes[a]!.priority ?? 0),\n );\n\n // Fire onStep hook (C1: safe-wrap)\n safeCall(onStep, step, { ...facts }, selectedNodes);\n\n // Handle no ready nodes\n if (selectedNodes.length === 0) {\n // Check relaxation tiers\n stallSteps++;\n let relaxationApplied = false;\n\n if (relaxation) {\n for (\n let tierIdx = appliedRelaxationTiers;\n tierIdx < relaxation.length;\n tierIdx++\n ) {\n const tier = relaxation[tierIdx]!;\n const threshold = tier.afterStallSteps ?? 3;\n if (stallSteps >= threshold) {\n // Apply relaxation\n const strategy = tier.strategy;\n switch (strategy.type) {\n case \"allow_rerun\":\n for (const nid of strategy.nodes) {\n completedNodes.delete(nid);\n nodeInputHashes.delete(nid);\n }\n break;\n case \"alternative_nodes\":\n // Use shadow copy — don't mutate original pattern nodes\n for (const altNode of strategy.nodes) {\n const altId = `__relaxation_${tierIdx}_${altNode.handler}`;\n nodes[altId] = { ...altNode };\n }\n break;\n case \"inject_facts\":\n goalSafeMerge(facts, strategy.facts);\n break;\n case \"accept_partial\": {\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result:\n safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error: `Accepted partial result via relaxation tier \"${tier.label}\"`,\n };\n }\n case \"custom\": {\n const rawSat = safeCall(satisfactionFn, facts) ?? 0;\n const ctx: RelaxationContext = {\n step,\n facts: { ...facts },\n metrics: computeGoalMetrics(\n clampSatisfaction(rawSat),\n stepMetrics,\n step,\n ),\n completedNodes: new Set(completedNodes),\n failedNodes: new Map(failedNodes),\n };\n // safe-wrap custom strategy callback\n await safeCallAsync(strategy.apply, ctx);\n break;\n }\n }\n\n relaxations.push({\n step,\n tierIndex: tierIdx,\n label: tier.label,\n strategy: strategy.type,\n });\n appliedRelaxationTiers = tierIdx + 1;\n stallSteps = 0;\n relaxationApplied = true;\n break;\n }\n }\n }\n\n if (!relaxationApplied) {\n // Fire onStall hook (C1: safe-wrap, M7: computed metrics)\n const rawSat = safeCall(satisfactionFn, facts) ?? 0;\n const stallMetrics = computeGoalMetrics(\n clampSatisfaction(rawSat),\n stepMetrics,\n step,\n );\n safeCall(onStall, step, stallMetrics);\n\n // If we've exhausted all relaxation tiers and still stalled, fail\n if (!relaxation || appliedRelaxationTiers >= relaxation.length) {\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: step,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error:\n \"Goal stalled: no ready nodes and no remaining relaxation tiers\",\n };\n }\n }\n\n continue;\n }\n\n // Reset stall counter since we have ready nodes\n stallSteps = 0;\n\n // Run selected nodes in parallel\n const stepStart = Date.now();\n const rawPreSat = satisfactionFn\n ? (safeCall(satisfactionFn, facts) ?? 0)\n : safeCall(goalWhen, facts) === true\n ? 1.0\n : 0.0;\n const preSatisfaction = clampSatisfaction(rawPreSat);\n let stepTokens = 0;\n const factsProduced: string[] = [];\n\n const nodePromises = selectedNodes.map(async (nodeId) => {\n const node = nodes[nodeId]!;\n\n // Record input hash for allowRerun detection\n const requires = node.requires ?? [];\n const inputHash = JSON.stringify(requires.map((key) => facts[key]));\n nodeInputHashes.set(nodeId, inputHash);\n\n // Build input (C1: safe-wrap buildInput)\n let nodeInput: string;\n const customInput = safeCall(node.buildInput, facts);\n if (customInput != null) {\n nodeInput = customInput;\n } else {\n const relevantFacts: Record<string, unknown> = Object.create(null);\n for (const key of requires) {\n if (facts[key] != null) {\n relevantFacts[key] = facts[key];\n }\n }\n if (Object.keys(relevantFacts).length > 0) {\n nodeInput = JSON.stringify(relevantFacts);\n } else if (facts.input != null) {\n nodeInput = String(facts.input);\n } else {\n nodeInput = JSON.stringify(facts);\n }\n }\n\n try {\n const result = await runSingleAgent(node.handler, nodeInput, {\n signal: effectiveSignal ?? undefined,\n patternId: pId,\n });\n nodeResults[nodeId] = result;\n executionOrder.push(nodeId);\n completedNodes.add(nodeId);\n failedNodes.delete(nodeId);\n\n // Extract output facts (C1: safe-wrap extractOutput)\n if (node.extractOutput) {\n const outputFacts = safeCall(node.extractOutput, result);\n if (outputFacts) {\n goalSafeMerge(facts, outputFacts);\n factsProduced.push(...Object.keys(outputFacts));\n }\n } else {\n // Default: try JSON parse of output\n const rawOutput = result.output;\n if (rawOutput && typeof rawOutput === \"object\") {\n goalSafeMerge(facts, rawOutput as Record<string, unknown>);\n factsProduced.push(\n ...Object.keys(rawOutput as Record<string, unknown>),\n );\n } else if (typeof rawOutput === \"string\") {\n try {\n const parsed = JSON.parse(rawOutput);\n if (\n parsed &&\n typeof parsed === \"object\" &&\n !Array.isArray(parsed)\n ) {\n goalSafeMerge(facts, parsed);\n factsProduced.push(...Object.keys(parsed));\n } else {\n // Store under produce keys\n for (const key of node.produces) {\n facts[key] = rawOutput;\n factsProduced.push(key);\n }\n }\n } catch {\n for (const key of node.produces) {\n facts[key] = rawOutput;\n factsProduced.push(key);\n }\n }\n }\n }\n\n stepTokens += result.totalTokens;\n\n return { nodeId, success: true };\n } catch (error) {\n const failures = (failedNodes.get(nodeId) ?? 0) + 1;\n failedNodes.set(nodeId, failures);\n\n return { nodeId, success: false, error };\n }\n });\n\n await Promise.allSettled(nodePromises);\n\n // Compute step metrics (M4: clamp satisfaction)\n const rawPostSat = satisfactionFn\n ? (safeCall(satisfactionFn, facts) ?? 0)\n : safeCall(goalWhen, facts) === true\n ? 1.0\n : 0.0;\n const postSatisfaction = clampSatisfaction(rawPostSat);\n const satisfactionDelta = postSatisfaction - preSatisfaction;\n\n stepMetrics.push({\n step,\n durationMs: Date.now() - stepStart,\n nodesRun: [...selectedNodes],\n factsProduced,\n satisfaction: postSatisfaction,\n satisfactionDelta,\n tokensConsumed: stepTokens,\n });\n\n // Record timeline events for each node run in this step\n if (timeline) {\n for (const nodeId of selectedNodes) {\n const node = nodes[nodeId]!;\n timeline.record({\n type: \"goal_step\",\n timestamp: Date.now(),\n snapshotId: null,\n agentId: node.handler,\n step,\n nodeId,\n satisfaction: postSatisfaction,\n satisfactionDelta,\n });\n }\n }\n\n // Update per-agent metrics\n for (const nodeId of selectedNodes) {\n const node = nodes[nodeId]!;\n if (!agentMetrics[node.handler]) {\n agentMetrics[node.handler] = {\n runs: 0,\n avgSatisfactionDelta: 0,\n tokens: 0,\n totalDelta: 0,\n };\n }\n const m = agentMetrics[node.handler]!;\n m.runs++;\n m.totalDelta += satisfactionDelta;\n m.tokens += nodeResults[nodeId]?.totalTokens ?? 0;\n }\n\n lastSatisfaction = postSatisfaction;\n\n // Track stall (no satisfaction change)\n if (satisfactionDelta <= 0) {\n stallSteps++;\n } else {\n stallSteps = 0;\n }\n\n // Save checkpoint at configured intervals\n if (\n checkpointConfig &&\n checkpointStoreRef &&\n step > startStep &&\n (step - startStep) % checkpointEveryN === 0\n ) {\n const ckptState: GoalCheckpointState = {\n type: \"goal\",\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: `${checkpointLabelPrefix}:step-${step}`,\n patternId: pId,\n stepsTotal: maxSteps,\n step: step + 1, // Next step to run\n facts: structuredClone(facts),\n completedNodes: [...completedNodes],\n failedNodes: Object.fromEntries(failedNodes),\n nodeInputHashes: Object.fromEntries(nodeInputHashes),\n nodeOutputs: Object.fromEntries(\n Object.entries(nodeResults).map(([id, r]) => [\n id,\n { output: r.output, totalTokens: r.totalTokens },\n ]),\n ),\n executionOrder: [...executionOrder],\n stepMetrics: [...stepMetrics],\n relaxations: [...relaxations],\n appliedRelaxationTiers,\n stallSteps,\n lastSatisfaction,\n agentMetrics: Object.fromEntries(\n Object.entries(agentMetrics).map(([id, m]) => [\n id,\n { runs: m.runs, totalDelta: m.totalDelta, tokens: m.tokens },\n ]),\n ),\n };\n const savedId = await savePatternCheckpoint(\n ckptState,\n checkpointStoreRef,\n checkpointConfig,\n );\n if (savedId) {\n lastCheckpointId = savedId;\n }\n }\n }\n\n // Max steps exhausted\n const durationMs = Date.now() - patternStartTime;\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n\n return {\n achieved: false,\n result: safeCall(extract, facts) ?? (facts as unknown as T),\n facts: { ...facts },\n executionOrder,\n nodeResults,\n steps: maxSteps,\n totalTokens,\n durationMs,\n stepMetrics,\n relaxations,\n error: `Max steps (${maxSteps}) exhausted without achieving goal`,\n };\n } catch (error) {\n patternError = error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (goalTimeoutId != null) {\n clearTimeout(goalTimeoutId);\n }\n if (externalOnAbort && pattern.signal) {\n pattern.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n if (timeline) {\n const totalTokens = Object.values(nodeResults).reduce(\n (sum, r) => sum + r.totalTokens,\n 0,\n );\n timeline.record({\n type: \"pattern_complete\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId: pId,\n patternType: \"goal\",\n durationMs: Date.now() - patternStartTime,\n achieved: goalAchieved,\n stepMetrics,\n relaxations,\n totalTokens,\n ...(patternError ? { error: patternError.message } : {}),\n });\n }\n fireHook(\"onPatternComplete\", {\n patternId: pId,\n patternType: \"goal\",\n durationMs: Date.now() - patternStartTime,\n timestamp: Date.now(),\n error: patternError,\n });\n }\n }\n\n // ---- Self-Healing Helpers ----\n function findEquivalentAgents(agentId: string): string[] {\n if (!selfHealing) {\n return [];\n }\n\n const equivalents: string[] = [];\n const seen = new Set<string>();\n seen.add(agentId);\n\n // Check explicit groups first\n if (selfHealing.equivalencyGroups) {\n for (const group of Object.values(selfHealing.equivalencyGroups)) {\n if (group.includes(agentId)) {\n for (const id of group) {\n if (!seen.has(id) && agents[id]) {\n equivalents.push(id);\n seen.add(id);\n }\n }\n }\n }\n }\n\n // Then capability matching\n if (selfHealing.useCapabilities !== false) {\n const sourceReg = agents[agentId];\n if (sourceReg?.capabilities && sourceReg.capabilities.length > 0) {\n for (const [id, reg] of Object.entries(agents)) {\n if (seen.has(id)) {\n continue;\n }\n const caps = reg.capabilities ?? [];\n if (sourceReg.capabilities.every((c) => caps.includes(c))) {\n equivalents.push(id);\n seen.add(id);\n }\n }\n }\n }\n\n // Filter out unhealthy agents\n if (healthMonitorInstance) {\n const threshold = selfHealing.healthThreshold ?? 30;\n\n return equivalents.filter((id) => {\n const score = healthMonitorInstance!.getHealthScore(id);\n\n return score > threshold;\n });\n }\n\n return equivalents;\n }\n\n function selectBestEquivalent(equivalents: string[]): string | null {\n if (equivalents.length === 0) {\n return null;\n }\n\n if (!selfHealing || !healthMonitorInstance) {\n return equivalents[0] ?? null;\n }\n\n if (selfHealing.selectionStrategy === \"round-robin\" && roundRobinCounters) {\n // Round-robin across equivalents\n const key = [...equivalents].sort().join(\",\");\n const counter = roundRobinCounters.get(key) ?? 0;\n const selected = equivalents[counter % equivalents.length]!;\n roundRobinCounters.set(key, counter + 1);\n\n return selected;\n }\n\n // Default: healthiest\n let best = equivalents[0]!;\n let bestScore = healthMonitorInstance.getHealthScore(best);\n for (let i = 1; i < equivalents.length; i++) {\n const score = healthMonitorInstance.getHealthScore(equivalents[i]!);\n if (score > bestScore) {\n best = equivalents[i]!;\n bestScore = score;\n }\n }\n\n return best;\n }\n\n // ---- Pattern handler extraction (for debug events) ----\n function getPatternHandlers(pattern: ExecutionPattern): string[] {\n switch (pattern.type) {\n case \"parallel\":\n return pattern.handlers;\n case \"sequential\":\n return pattern.handlers;\n case \"supervisor\":\n return [pattern.supervisor, ...pattern.workers];\n case \"dag\":\n return Object.values(pattern.nodes).map((n) => n.handler);\n case \"reflect\":\n return [pattern.handler, pattern.evaluator];\n case \"race\":\n return pattern.handlers;\n case \"debate\":\n return [...pattern.handlers, pattern.evaluator];\n case \"goal\":\n return Object.values(pattern.nodes).map((n) => n.handler);\n default:\n return [];\n }\n }\n\n // ---- Build Orchestrator Object ----\n const orchestrator: MultiAgentOrchestrator = {\n system: system as unknown as System<any>,\n\n get facts() {\n // biome-ignore lint/suspicious/noExplicitAny: System facts vary\n return system.facts as any;\n },\n\n get timeline() {\n return timeline;\n },\n\n get healthMonitor() {\n return healthMonitorInstance;\n },\n\n get derived() {\n return Object.freeze({ ...derivedValues });\n },\n\n onDerivedChange(\n callback: (id: string, value: unknown) => void,\n ): () => void {\n derivedChangeCallbacks.add(callback);\n\n return () => {\n derivedChangeCallbacks.delete(callback);\n };\n },\n\n get scratchpad() {\n return scratchpadInstance;\n },\n\n runAgent: runSingleAgent,\n runAgentStream: runAgentStreamImpl,\n\n async runPattern<T>(patternId: string, input: string): Promise<T> {\n assertNotDestroyed();\n\n const pattern = patterns[patternId];\n if (!pattern) {\n const available = Object.keys(patterns).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Unknown pattern \"${patternId}\". Available patterns: ${available}`,\n );\n }\n\n const patternStartTime = Date.now();\n if (timeline) {\n const handlerIds = getPatternHandlers(pattern);\n\n timeline.record({\n type: \"pattern_start\",\n timestamp: patternStartTime,\n snapshotId: null,\n patternId,\n patternType: pattern.type,\n handlers: handlerIds,\n taskIds: handlerIds.filter((h) => tasks[h] != null),\n });\n }\n\n let patternError: Error | undefined;\n try {\n switch (pattern.type) {\n case \"parallel\":\n return await runParallelPattern(\n pattern as ParallelPattern<T>,\n input,\n patternId,\n );\n case \"sequential\":\n return await runSequentialPattern(\n pattern as SequentialPattern<T>,\n input,\n patternId,\n );\n case \"supervisor\":\n return await runSupervisorPattern(\n pattern as SupervisorPattern<T>,\n input,\n patternId,\n );\n case \"dag\":\n return await runDagPattern(\n pattern as DagPattern<T>,\n input,\n patternId,\n );\n case \"reflect\":\n return await runReflectPattern(\n pattern as ReflectPattern<T>,\n input,\n patternId,\n );\n case \"race\": {\n const raceResult = await runRacePattern(\n pattern as RacePattern<T>,\n input,\n patternId,\n );\n\n return raceResult.result;\n }\n case \"debate\": {\n const debatePattern = pattern as DebatePattern<T>;\n const debateResult = await runDebateInternal<T>(\n debatePattern,\n input,\n patternId,\n );\n\n return debateResult.result;\n }\n case \"goal\": {\n const goalPattern = pattern as GoalPattern<T>;\n const goalResult = await runGoalInternal<T>(\n goalPattern,\n input,\n patternId,\n );\n\n return goalResult.result;\n }\n default:\n throw new Error(\n `[Directive MultiAgent] Unknown pattern type: ${(pattern as { type: string }).type}`,\n );\n }\n } catch (error) {\n patternError =\n error instanceof Error ? error : new Error(String(error));\n throw error;\n } finally {\n if (timeline) {\n timeline.record({\n type: \"pattern_complete\",\n timestamp: Date.now(),\n snapshotId: null,\n patternId,\n patternType: pattern.type,\n durationMs: Date.now() - patternStartTime,\n ...(patternError ? { error: patternError.message } : {}),\n });\n }\n }\n },\n\n async runParallel<T>(\n agentIds: string[],\n inputs: string | string[],\n merge: (results: RunResult<unknown>[]) => T | Promise<T>,\n options?: { minSuccess?: number; timeout?: number },\n ): Promise<T> {\n assertNotDestroyed();\n const inputArray = Array.isArray(inputs)\n ? inputs\n : agentIds.map(() => inputs);\n\n if (inputArray.length !== agentIds.length) {\n throw new Error(\n `[Directive MultiAgent] Input count (${inputArray.length}) must match agent count (${agentIds.length})`,\n );\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if (options?.timeout) {\n timeoutId = setTimeout(() => controller.abort(), options.timeout);\n }\n\n try {\n const promises = agentIds.map((agentId, i) =>\n runSingleAgent(agentId, inputArray[i]!, {\n signal: controller.signal,\n }).catch((error) => {\n if (options?.minSuccess !== undefined) {\n return null;\n }\n\n throw error;\n }),\n );\n\n const results = await Promise.all(promises);\n const successResults = results.filter(\n (r): r is RunResult<unknown> => r !== null,\n );\n\n if (\n options?.minSuccess !== undefined &&\n successResults.length < options.minSuccess\n ) {\n const failCount = results.length - successResults.length;\n\n throw new Error(\n `[Directive MultiAgent] runParallel: Only ${successResults.length}/${agentIds.length} agents succeeded ` +\n `(minimum required: ${options.minSuccess}, failed: ${failCount})`,\n );\n }\n\n return merge(successResults);\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n },\n\n async runSequential<T>(\n agentIds: string[],\n initialInput: string,\n opts?: {\n transform?: (output: unknown, agentId: string, index: number) => string;\n },\n ): Promise<RunResult<T>[]> {\n assertNotDestroyed();\n const results: RunResult<unknown>[] = [];\n let currentInput = initialInput;\n\n for (let i = 0; i < agentIds.length; i++) {\n const agentId = agentIds[i]!;\n const result = await runSingleAgent(agentId, currentInput);\n results.push(result);\n\n if (i < agentIds.length - 1) {\n if (opts?.transform) {\n currentInput = opts.transform(result.output, agentId, i);\n } else {\n currentInput =\n typeof result.output === \"string\"\n ? result.output\n : safeStringify(result.output);\n }\n }\n }\n\n return results as RunResult<T>[];\n },\n\n async handoff(\n fromAgent: string,\n toAgent: string,\n input: string,\n context?: Record<string, unknown>,\n ): Promise<RunResult<unknown>> {\n assertNotDestroyed();\n\n if (!agents[fromAgent]) {\n const available = Object.keys(agents).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Handoff source agent \"${fromAgent}\" not found. Registered: ${available}`,\n );\n }\n if (!agents[toAgent]) {\n const available = Object.keys(agents).join(\", \") || \"(none)\";\n\n throw new Error(\n `[Directive MultiAgent] Handoff target agent \"${toAgent}\" not found. Registered: ${available}`,\n );\n }\n\n // ---- Breakpoint: pre_handoff ----\n {\n const bpResult = await handleBreakpoint(\n \"pre_handoff\",\n fromAgent,\n agents[fromAgent]!.agent.name,\n input,\n undefined,\n {\n handoff: { fromAgent, toAgent },\n },\n );\n if (bpResult.skip) {\n return {\n output: undefined as unknown,\n messages: [],\n toolCalls: [],\n totalTokens: 0,\n };\n }\n input = bpResult.input;\n }\n\n const request: HandoffRequest = {\n id: `handoff-${++handoffCounter}`,\n fromAgent,\n toAgent,\n input,\n context,\n requestedAt: Date.now(),\n };\n\n pendingHandoffs.push(request);\n try {\n onHandoff?.(request);\n } catch (e) {\n if (debug) {\n console.debug(\"[Directive MultiAgent] onHandoff threw:\", e);\n }\n }\n fireHook(\"onHandoff\", request);\n\n if (timeline) {\n timeline.record({\n type: \"handoff_start\",\n timestamp: Date.now(),\n snapshotId: null,\n fromAgent,\n toAgent,\n });\n }\n\n // Forward handoff context to receiving agent's memory (best-effort)\n const targetMemory = agents[toAgent]!.memory ?? sharedMemory;\n if (targetMemory && context) {\n try {\n const contextSummary = Object.entries(context)\n .map(([k, v]) => `${k}: ${safeStringify(v)}`)\n .join(\", \");\n targetMemory.addMessages([\n {\n role: \"system\",\n content: `[Handoff from ${fromAgent}] Context: ${contextSummary}`,\n },\n ]);\n } catch (memoryError) {\n if (debug) {\n console.debug(\n \"[Directive MultiAgent] Handoff addMessages failed:\",\n memoryError,\n );\n }\n }\n }\n\n try {\n const result = await runSingleAgent(toAgent, input);\n\n const handoffResult: HandoffResult = {\n request,\n result,\n completedAt: Date.now(),\n };\n\n addHandoffResult(handoffResult);\n try {\n onHandoffComplete?.(handoffResult);\n } catch (e) {\n if (debug) {\n console.debug(\"[Directive MultiAgent] onHandoffComplete threw:\", e);\n }\n }\n fireHook(\"onHandoffComplete\", handoffResult);\n\n if (timeline) {\n timeline.record({\n type: \"handoff_complete\",\n timestamp: Date.now(),\n snapshotId: null,\n fromAgent,\n toAgent,\n durationMs: handoffResult.completedAt - request.requestedAt,\n });\n }\n\n const index = pendingHandoffs.indexOf(request);\n if (index >= 0) pendingHandoffs.splice(index, 1);\n\n return result;\n } catch (error) {\n const index = pendingHandoffs.indexOf(request);\n if (index >= 0) pendingHandoffs.splice(index, 1);\n throw error;\n }\n },\n\n approve(requestId: string): void {\n assertNotDestroyed();\n\n // O(1) lookup via reverse index\n const agentId = approvalRequestIndex.get(requestId);\n if (agentId) {\n approvalRequestIndex.delete(requestId);\n const agentFacts = getAgentFacts(agentId);\n system.batch(() => {\n const currentApproval = getApprovalState(agentFacts);\n const MAX_APPROVAL_HISTORY = 200;\n const approved = [...currentApproval.approved, requestId];\n setApprovalState(agentFacts, {\n ...currentApproval,\n pending: currentApproval.pending.filter(\n (r: ApprovalRequest) => r.id !== requestId,\n ),\n approved:\n approved.length > MAX_APPROVAL_HISTORY\n ? approved.slice(-MAX_APPROVAL_HISTORY)\n : approved,\n });\n });\n\n return;\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] approve() ignored: no pending request \"${requestId}\"`,\n );\n }\n },\n\n reject(requestId: string, reason?: string): void {\n assertNotDestroyed();\n\n // O(1) lookup via reverse index\n const agentId = approvalRequestIndex.get(requestId);\n if (agentId) {\n approvalRequestIndex.delete(requestId);\n const agentFacts = getAgentFacts(agentId);\n system.batch(() => {\n const currentApproval = getApprovalState(agentFacts);\n if (reason && debug) {\n console.debug(\n `[Directive MultiAgent] Request ${requestId} rejected: ${reason}`,\n );\n }\n const rejectedRequest: RejectedRequest = {\n id: requestId,\n reason,\n rejectedAt: Date.now(),\n };\n const MAX_REJECTION_HISTORY = 200;\n const rejected = [...currentApproval.rejected, rejectedRequest];\n setApprovalState(agentFacts, {\n ...currentApproval,\n pending: currentApproval.pending.filter(\n (r: ApprovalRequest) => r.id !== requestId,\n ),\n rejected:\n rejected.length > MAX_REJECTION_HISTORY\n ? rejected.slice(-MAX_REJECTION_HISTORY)\n : rejected,\n });\n });\n\n return;\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] reject() ignored: no pending request \"${requestId}\"`,\n );\n }\n },\n\n pause(): void {\n assertNotDestroyed();\n globalStatus = \"paused\";\n if (debug) {\n console.debug(\"[Directive MultiAgent] Orchestrator paused\");\n }\n },\n\n resume(): void {\n assertNotDestroyed();\n if (globalStatus === \"paused\") {\n globalStatus = \"idle\";\n if (debug) {\n console.debug(\"[Directive MultiAgent] Orchestrator resumed\");\n }\n }\n },\n\n getAgentState(agentId: string) {\n const state = agentStates[agentId];\n\n return state ? { ...state } : undefined;\n },\n\n getAllAgentStates() {\n return Object.fromEntries(\n Object.entries(agentStates).map(([k, v]) => [k, { ...v }]),\n );\n },\n\n getPendingHandoffs() {\n return [...pendingHandoffs];\n },\n\n /** Total tokens consumed across all agents */\n get totalTokens(): number {\n return globalTokenCount;\n },\n\n /** Wait until all agents are idle (no running agents) */\n waitForIdle(timeoutMs?: number): Promise<void> {\n const allIdle = () =>\n pendingRuns === 0 &&\n Object.values(agentStates).every(\n (s) =>\n s.status === \"idle\" ||\n s.status === \"completed\" ||\n s.status === \"error\",\n );\n if (allIdle()) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve, reject) => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n idleWaiters.delete(check);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n\n const check = () => {\n if (allIdle()) {\n cleanup();\n resolve();\n }\n };\n\n idleWaiters.add(check);\n\n if (timeoutMs !== undefined) {\n timeoutId = setTimeout(() => {\n cleanup();\n reject(\n new Error(\n `[Directive MultiAgent] waitForIdle timed out after ${timeoutMs}ms`,\n ),\n );\n }, timeoutMs);\n }\n });\n },\n\n /** Alias for runAgent */\n run<T>(\n agentId: string,\n input: string,\n options?: MultiAgentRunCallOptions,\n ): Promise<RunResult<T>> {\n return runSingleAgent<T>(agentId, input, options);\n },\n\n /** Alias for runAgentStream */\n runStream<T>(\n agentId: string,\n input: string,\n options?: { signal?: AbortSignal },\n ): OrchestratorStreamResult<T> {\n return runAgentStreamImpl<T>(agentId, input, options);\n },\n\n registerAgent(agentId: string, registration: AgentRegistration): void {\n assertNotDestroyed();\n if (RESERVED_IDS.has(agentId)) {\n throw new Error(\n `[Directive MultiAgent] Agent ID \"${agentId}\" is reserved and cannot be used`,\n );\n }\n if (agents[agentId]) {\n throw new Error(\n `[Directive MultiAgent] Agent \"${agentId}\" is already registered. Unregister first.`,\n );\n }\n if (tasks[agentId]) {\n throw new Error(\n `[Directive MultiAgent] ID \"${agentId}\" is already registered as a task`,\n );\n }\n\n // Build per-agent constraints and resolvers (same as initial setup)\n // biome-ignore lint/suspicious/noExplicitAny: Constraint types complex\n const perAgentConstraints: Record<string, any> = registration.constraints\n ? convertOrchestratorConstraints(registration.constraints)\n : {};\n\n // biome-ignore lint/suspicious/noExplicitAny: Resolver types complex\n const perAgentResolvers: Record<string, any> = Object.create(null);\n if (registration.resolvers) {\n for (const [id, resolver] of Object.entries(registration.resolvers)) {\n perAgentResolvers[id] = {\n requirement: resolver.requirement,\n key: resolver.key,\n // biome-ignore lint/suspicious/noExplicitAny: Context type varies\n resolve: async (req: Requirement, context: any) => {\n const state = getOrchestratorState(context.facts);\n const combinedFacts = {\n ...context.facts,\n ...state,\n } as unknown as Record<string, unknown> & OrchestratorState;\n\n const resolverContext: OrchestratorResolverContext<\n Record<string, unknown>\n > = {\n facts: combinedFacts,\n runAgent: async <T>(\n agent: AgentLike,\n input: string,\n opts?: RunOptions,\n ) => {\n return runner<T>(agent, input, opts);\n },\n signal: context.signal,\n };\n\n return resolver.resolve(req, resolverContext);\n },\n };\n }\n }\n\n // Create Directive module and register with the System\n const agentModule = createModule(agentId, {\n schema: orchestratorBridgeSchema,\n init: (facts) => {\n setAgentState(facts, {\n status: \"idle\",\n currentAgent: registration.agent.name,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(facts, { pending: [], approved: [], rejected: [] });\n setConversation(facts, []);\n setToolCalls(facts, []);\n setBreakpointState(facts, createInitialBreakpointState());\n },\n constraints: perAgentConstraints,\n resolvers:\n Object.keys(perAgentResolvers).length > 0\n ? (perAgentResolvers as any)\n : undefined,\n });\n\n // biome-ignore lint/suspicious/noExplicitAny: System type narrowing loses namespaced overload\n (system as any).registerModule(agentId, agentModule);\n\n // Add to registry\n agents[agentId] = registration;\n\n // Create semaphore\n semaphores.set(agentId, new Semaphore(registration.maxConcurrent ?? 1));\n\n // Initialize agent state\n agentStates[agentId] = {\n status: \"idle\",\n runCount: 0,\n totalTokens: 0,\n };\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] Registered agent \"${agentId}\" (${registration.agent.name})`,\n );\n }\n\n recomputeDerivations();\n },\n\n unregisterAgent(agentId: string): void {\n assertNotDestroyed();\n if (!agents[agentId]) {\n throw new Error(\n `[Directive MultiAgent] Agent \"${agentId}\" is not registered`,\n );\n }\n\n const state = agentStates[agentId];\n if (state?.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot unregister agent \"${agentId}\" while it is running`,\n );\n }\n\n // Warn about orphaned patterns referencing this agent\n for (const [patternId, pattern] of Object.entries(patterns)) {\n let referencedAgents: string[];\n switch (pattern.type) {\n case \"supervisor\":\n referencedAgents = [pattern.supervisor, ...pattern.workers];\n break;\n case \"dag\":\n referencedAgents = Object.values(pattern.nodes).map(\n (n) => n.handler,\n );\n break;\n case \"reflect\":\n referencedAgents = [pattern.handler, pattern.evaluator];\n break;\n case \"parallel\":\n case \"sequential\":\n case \"race\":\n referencedAgents = pattern.handlers;\n break;\n case \"debate\":\n referencedAgents = [\n ...(pattern as DebatePattern).handlers,\n (pattern as DebatePattern).evaluator,\n ];\n break;\n default:\n referencedAgents = [];\n }\n if (referencedAgents.includes(agentId)) {\n console.warn(\n `[Directive MultiAgent] Warning: Pattern \"${patternId}\" references unregistered agent \"${agentId}\"`,\n );\n }\n }\n\n // Drain semaphore\n const sem = semaphores.get(agentId);\n if (sem) {\n sem.drain();\n semaphores.delete(agentId);\n }\n\n // Reset per-agent System facts to idle state\n const agentFacts = getAgentFacts(agentId);\n if (agentFacts) {\n system.batch(() => {\n setAgentState(agentFacts, {\n status: \"idle\",\n currentAgent: null,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(agentFacts, {\n pending: [],\n approved: [],\n rejected: [],\n });\n setConversation(agentFacts, []);\n setToolCalls(agentFacts, []);\n setBreakpointState(agentFacts, createInitialBreakpointState());\n });\n }\n\n // Remove from local registries\n // Note: Directive System modules cannot be removed at runtime,\n // but the agent's facts are reset and it won't be accessible via orchestrator methods\n delete agents[agentId];\n delete agentStates[agentId];\n\n if (debug) {\n console.debug(`[Directive MultiAgent] Unregistered agent \"${agentId}\"`);\n }\n\n recomputeDerivations();\n },\n\n getAgentIds(): string[] {\n return Object.keys(agents);\n },\n\n registerTask(taskId: string, registration: TaskRegistration): void {\n assertNotDestroyed();\n if (RESERVED_IDS.has(taskId)) {\n throw new Error(\n `[Directive MultiAgent] Task ID \"${taskId}\" is reserved and cannot be used`,\n );\n }\n if (\n !taskId ||\n typeof taskId !== \"string\" ||\n taskId.trim() !== taskId ||\n taskId.length === 0\n ) {\n throw new Error(\n \"[Directive MultiAgent] Task ID must be a non-empty trimmed string\",\n );\n }\n if (agents[taskId]) {\n throw new Error(\n `[Directive MultiAgent] ID \"${taskId}\" is already registered as an agent`,\n );\n }\n if (tasks[taskId]) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" is already registered`,\n );\n }\n // Validate timeout and maxConcurrent\n if (\n registration.timeout !== undefined &&\n (!Number.isFinite(registration.timeout) || registration.timeout <= 0)\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" timeout must be a finite number > 0`,\n );\n }\n if (\n registration.maxConcurrent !== undefined &&\n (!Number.isFinite(registration.maxConcurrent) ||\n registration.maxConcurrent < 1 ||\n !Number.isInteger(registration.maxConcurrent))\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" maxConcurrent must be a finite integer >= 1`,\n );\n }\n // Validate retry configuration\n if (registration.retry) {\n const { attempts, delayMs } = registration.retry;\n if (!Number.isFinite(attempts) || attempts < 1) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry attempts must be a finite number >= 1`,\n );\n }\n if (\n delayMs !== undefined &&\n (!Number.isFinite(delayMs) || delayMs < 0)\n ) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" retry delayMs must be a finite number >= 0`,\n );\n }\n }\n tasks[taskId] = registration;\n taskStates[taskId] = { status: \"idle\" };\n taskSemaphores.set(\n taskId,\n new Semaphore(registration.maxConcurrent ?? 1),\n );\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] Registered task \"${taskId}\" (${registration.label ?? taskId})`,\n );\n }\n },\n\n unregisterTask(taskId: string): void {\n assertNotDestroyed();\n if (!tasks[taskId]) {\n throw new Error(\n `[Directive MultiAgent] Task \"${taskId}\" is not registered`,\n );\n }\n const state = taskStates[taskId];\n if (state?.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot unregister task \"${taskId}\" while it is running`,\n );\n }\n const sem = taskSemaphores.get(taskId);\n if (sem) {\n sem.drain();\n taskSemaphores.delete(taskId);\n }\n delete tasks[taskId];\n delete taskStates[taskId];\n\n if (debug) {\n console.debug(`[Directive MultiAgent] Unregistered task \"${taskId}\"`);\n }\n },\n\n getTaskIds(): string[] {\n return Object.keys(tasks);\n },\n\n getTaskRegistry(): Record<\n string,\n { label?: string; description?: string }\n > {\n const result: Record<string, { label?: string; description?: string }> =\n Object.create(null);\n for (const [id, reg] of Object.entries(tasks)) {\n result[id] = { label: reg.label, description: reg.description };\n }\n\n return result;\n },\n\n getTaskState(taskId: string) {\n const s = taskStates[taskId];\n\n return s ? Object.freeze(structuredClone(s)) : undefined;\n },\n\n getAllTaskStates() {\n const result: Record<\n string,\n {\n status: string;\n lastOutput?: unknown;\n lastError?: string;\n startTime?: number;\n durationMs?: number;\n }\n > = Object.create(null);\n for (const [id, s] of Object.entries(taskStates)) {\n result[id] = Object.freeze(structuredClone(s));\n }\n\n return result;\n },\n\n getNodeIds(): string[] {\n return [...Object.keys(agents), ...Object.keys(tasks)];\n },\n\n reset() {\n assertNotDestroyed();\n for (const agentId of Object.keys(agents)) {\n const maxConcurrent = agents[agentId]?.maxConcurrent ?? 1;\n agentStates[agentId] = {\n status: \"idle\",\n runCount: 0,\n totalTokens: 0,\n };\n const existing = semaphores.get(agentId);\n if (existing) {\n existing.drain();\n }\n semaphores.set(agentId, new Semaphore(maxConcurrent));\n\n // Reset per-agent facts\n const agentFacts = getAgentFacts(agentId);\n system.batch(() => {\n setAgentState(agentFacts, {\n status: \"idle\",\n currentAgent: agents[agentId]!.agent.name,\n input: null,\n output: null,\n error: null,\n tokenUsage: 0,\n turnCount: 0,\n startedAt: null,\n completedAt: null,\n });\n setApprovalState(agentFacts, {\n pending: [],\n approved: [],\n rejected: [],\n });\n setConversation(agentFacts, []);\n setToolCalls(agentFacts, []);\n setBreakpointState(agentFacts, createInitialBreakpointState());\n });\n }\n // Reset task states\n for (const taskId of Object.keys(tasks)) {\n taskStates[taskId] = { status: \"idle\" };\n const tsem = taskSemaphores.get(taskId);\n if (tsem) {\n tsem.drain();\n }\n taskSemaphores.set(\n taskId,\n new Semaphore(tasks[taskId]!.maxConcurrent ?? 1),\n );\n }\n\n breakpointModifications.clear();\n breakpointCancelReasons.clear();\n approvalRequestIndex.clear();\n pendingHandoffs.length = 0;\n handoffResults.length = 0;\n handoffCounter = 0;\n globalTokenCount = 0;\n globalStatus = \"idle\";\n pendingRuns = 0;\n notifyIdleWaiters();\n\n // Reset coordinator facts\n const coordFacts = getAgentFacts(\"__coord\");\n system.batch(() => {\n setBridgeFact(coordFacts, \"__globalTokens\", 0);\n setBridgeFact(coordFacts, \"__status\", \"idle\");\n setBridgeFact(coordFacts, \"__handoffs\", []);\n setBridgeFact(coordFacts, \"__handoffResults\", []);\n setBridgeFact(coordFacts, \"__budgetWarningFired\", false);\n if (scratchpadConfig) {\n setBridgeFact(coordFacts, SCRATCHPAD_KEY, {\n ...scratchpadConfig.init,\n });\n }\n });\n\n // Reset health monitor to clear stale metrics\n if (healthMonitorInstance) {\n healthMonitorInstance.reset();\n }\n\n lastReflectionHistory = null;\n\n // Reset derived values and recompute\n for (const key of Object.keys(derivedValues)) {\n delete derivedValues[key];\n }\n recomputeDerivations();\n },\n\n // ---- Checkpoint Methods ----\n\n async checkpoint(opts?: { label?: string }): Promise<Checkpoint> {\n assertNotDestroyed();\n\n // Ensure no agents or tasks are running\n for (const [id, s] of Object.entries(agentStates)) {\n if (s.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot checkpoint while agent \"${id}\" is running`,\n );\n }\n }\n for (const [id, s] of Object.entries(taskStates)) {\n if (s.status === \"running\") {\n throw new Error(\n `[Directive MultiAgent] Cannot checkpoint while task \"${id}\" is running`,\n );\n }\n }\n if (!(system as any).history?.export) {\n throw new Error(\n \"[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.\",\n );\n }\n\n const checkpoint: Checkpoint = {\n version: 1,\n id: createCheckpointId(),\n createdAt: new Date().toISOString(),\n label: opts?.label,\n systemExport: (system as any).history.export(),\n timelineExport: timeline?.export() ?? null,\n localState: {\n type: \"multi\",\n globalTokenCount,\n globalStatus,\n agentStates: Object.fromEntries(\n Object.entries(agentStates).map(([k, v]) => [\n k,\n structuredClone(v),\n ]),\n ),\n handoffCounter,\n pendingHandoffs: [...pendingHandoffs],\n handoffResults: [...handoffResults],\n roundRobinCounters: roundRobinCounters\n ? Object.fromEntries(roundRobinCounters)\n : null,\n taskStates: Object.fromEntries(\n Object.entries(taskStates).map(([k, v]) => [\n k,\n {\n lastOutput:\n v.lastOutput != null ? String(v.lastOutput) : undefined,\n lastError: v.lastError,\n },\n ]),\n ),\n } satisfies MultiAgentCheckpointLocalState,\n memoryExport: sharedMemory\n ? ((sharedMemory as any).export?.() ?? null)\n : null,\n orchestratorType: \"multi\",\n };\n\n if (checkpointStore) {\n await checkpointStore.save(checkpoint);\n }\n\n return checkpoint;\n },\n\n restore(cp: Checkpoint, opts?: { restoreTimeline?: boolean }): void {\n assertNotDestroyed();\n\n if (!validateCheckpoint(cp)) {\n throw new Error(\"[Directive MultiAgent] Invalid checkpoint data\");\n }\n if (cp.orchestratorType !== \"multi\") {\n throw new Error(\n `[Directive MultiAgent] Expected multi-agent checkpoint, got \"${cp.orchestratorType}\"`,\n );\n }\n\n // Restore system state\n if (!(system as any).history?.import) {\n throw new Error(\n \"[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.\",\n );\n }\n (system as any).history.import(cp.systemExport);\n\n // Restore timeline\n if (opts?.restoreTimeline !== false && cp.timelineExport && timeline) {\n timeline.import(cp.timelineExport);\n }\n\n // Restore memory\n if (cp.memoryExport && sharedMemory && (sharedMemory as any).import) {\n (sharedMemory as any).import(cp.memoryExport);\n }\n\n // Restore closure-local state\n const local = cp.localState as MultiAgentCheckpointLocalState;\n globalTokenCount = local.globalTokenCount;\n globalStatus = local.globalStatus;\n handoffCounter = local.handoffCounter;\n pendingHandoffs.length = 0;\n pendingHandoffs.push(...(local.pendingHandoffs as HandoffRequest[]));\n handoffResults.length = 0;\n handoffResults.push(...(local.handoffResults as HandoffResult[]));\n\n // Restore agent states\n for (const [id, s] of Object.entries(local.agentStates)) {\n if (agentStates[id]) {\n agentStates[id] = { ...s };\n }\n }\n\n // Restore round robin counters\n if (local.roundRobinCounters && roundRobinCounters) {\n roundRobinCounters.clear();\n for (const [k, v] of Object.entries(local.roundRobinCounters)) {\n roundRobinCounters.set(k, v);\n }\n }\n\n // Rebuild semaphores from registrations\n for (const [agentId, reg] of Object.entries(agents)) {\n const existing = semaphores.get(agentId);\n if (existing) {\n existing.drain();\n }\n semaphores.set(agentId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n\n // Restore task states\n if (local.taskStates) {\n for (const [id, s] of Object.entries(local.taskStates)) {\n if (!tasks[id]) {\n throw new Error(\n `[Directive MultiAgent] Checkpoint references task \"${id}\" which is not registered. Task run functions cannot be serialized — re-provide the task registration.`,\n );\n }\n taskStates[id] = {\n status: \"idle\",\n lastOutput: s.lastOutput,\n lastError: s.lastError,\n };\n }\n // Rebuild task semaphores\n for (const [taskId, reg] of Object.entries(tasks)) {\n const existing = taskSemaphores.get(taskId);\n if (existing) {\n existing.drain();\n }\n taskSemaphores.set(taskId, new Semaphore(reg.maxConcurrent ?? 1));\n }\n }\n\n // Recompute derivations from restored state\n recomputeDerivations();\n },\n\n // ---- Parallel Streaming ----\n\n runParallelStream<T>(\n agentIds: string[],\n inputs: string | string[],\n merge: (results: RunResult<unknown>[]) => T | Promise<T>,\n opts?: { minSuccess?: number; timeout?: number; signal?: AbortSignal },\n ): MultiplexedStreamResult<T> {\n assertNotDestroyed();\n\n const inputArray = Array.isArray(inputs)\n ? inputs\n : agentIds.map(() => inputs);\n\n if (inputArray.length !== agentIds.length) {\n throw new Error(\n `[Directive MultiAgent] Input count (${inputArray.length}) must match agent count (${agentIds.length})`,\n );\n }\n\n const controller = new AbortController();\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n if (opts?.timeout) {\n timeoutId = setTimeout(() => controller.abort(), opts.timeout);\n }\n // External signal handling is done after mergeTaggedStreams setup\n\n // Launch per-agent streams\n const perAgentStreams = agentIds.map((agentId, i) => {\n const streamResult = runAgentStreamImpl(agentId, inputArray[i]!, {\n signal: controller.signal,\n });\n\n return {\n agentId,\n streamResult,\n };\n });\n\n // Merge tagged streams\n const taggedSources = perAgentStreams.map(\n ({ agentId, streamResult }) => ({\n agentId,\n stream: streamResult.stream,\n }),\n );\n\n const { stream: mergedStream, getDroppedCount } =\n mergeTaggedStreams(taggedSources);\n\n // Clean up external abort listener when done\n let externalOnAbort: (() => void) | undefined;\n if (opts?.signal) {\n externalOnAbort = () => controller.abort();\n opts.signal.addEventListener(\"abort\", externalOnAbort, { once: true });\n }\n\n // Collect all results\n const resultsPromise = Promise.allSettled(\n perAgentStreams.map(({ streamResult }) => streamResult.result),\n ).then((settled) => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n // Clean up external signal listener\n if (externalOnAbort && opts?.signal) {\n opts.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n\n const successes: RunResult<unknown>[] = [];\n for (const s of settled) {\n if (s.status === \"fulfilled\") {\n successes.push(s.value);\n }\n }\n\n if (\n opts?.minSuccess !== undefined &&\n successes.length < opts.minSuccess\n ) {\n throw new Error(\n `[Directive MultiAgent] runParallelStream: Only ${successes.length}/${agentIds.length} agents succeeded ` +\n `(minimum required: ${opts.minSuccess})`,\n );\n }\n\n return successes;\n });\n\n const mergePromise = resultsPromise.then((results) => merge(results));\n\n // Prevent unhandled rejections\n resultsPromise.catch(() => {});\n mergePromise.catch(() => {});\n\n return {\n stream: mergedStream,\n results: resultsPromise,\n merge: mergePromise,\n getDroppedCount,\n abort: () => {\n controller.abort();\n if (externalOnAbort && opts?.signal) {\n opts.signal.removeEventListener(\"abort\", externalOnAbort);\n }\n for (const { streamResult } of perAgentStreams) {\n streamResult.abort();\n }\n },\n };\n },\n\n // ---- Race ----\n\n async runRace<T>(\n agentIds: string[],\n input: string,\n raceOpts?: {\n extract?: (result: RunResult<unknown>) => T;\n timeout?: number;\n minSuccess?: number;\n signal?: AbortSignal;\n },\n ): Promise<RaceResult<T>> {\n assertNotDestroyed();\n\n const pattern: RacePattern<T> = {\n type: \"race\",\n handlers: agentIds,\n extract: raceOpts?.extract,\n timeout: raceOpts?.timeout,\n minSuccess: raceOpts?.minSuccess,\n signal: raceOpts?.signal,\n };\n\n return runRacePattern<T>(pattern, input, \"__imperative_race\");\n },\n\n // ---- Reflect (imperative) ----\n\n async runReflect<T>(\n producerId: string,\n evaluatorId: string,\n input: string,\n reflectOpts?: {\n maxIterations?: number;\n parseEvaluation?: (output: unknown) => ReflectionEvaluation;\n buildRetryInput?: (\n input: string,\n feedback: string,\n iteration: number,\n ) => string;\n extract?: (output: unknown) => T;\n onExhausted?: \"accept-last\" | \"accept-best\" | \"throw\";\n onIteration?: (record: ReflectIterationRecord) => void;\n signal?: AbortSignal;\n timeout?: number;\n threshold?: number | ((iteration: number) => number);\n },\n ): Promise<{\n result: T;\n iterations: number;\n history: ReflectIterationRecord[];\n exhausted: boolean;\n }> {\n assertNotDestroyed();\n\n const pattern: ReflectPattern<T> = {\n type: \"reflect\",\n handler: producerId,\n evaluator: evaluatorId,\n maxIterations: reflectOpts?.maxIterations,\n parseEvaluation: reflectOpts?.parseEvaluation,\n buildRetryInput: reflectOpts?.buildRetryInput,\n extract: reflectOpts?.extract,\n onExhausted: reflectOpts?.onExhausted,\n onIteration: reflectOpts?.onIteration,\n signal: reflectOpts?.signal,\n timeout: reflectOpts?.timeout,\n threshold: reflectOpts?.threshold,\n };\n\n const result = await runReflectPattern<T>(\n pattern,\n input,\n \"__imperative_reflect\",\n );\n const history = lastReflectionHistory ? [...lastReflectionHistory] : [];\n const maxIterations = reflectOpts?.maxIterations ?? 2;\n const exhausted =\n history.length > 0 &&\n !history[history.length - 1]!.passed &&\n history.length >= maxIterations;\n\n return { result, iterations: history.length, history, exhausted };\n },\n\n // ---- Debate (imperative) ----\n\n async runDebate<T>(\n agentIds: string[],\n evaluatorId: string,\n input: string,\n debateOpts?: {\n maxRounds?: number;\n extract?: (output: unknown) => T;\n parseJudgement?: (output: unknown) => {\n winnerId: string;\n feedback?: string;\n score?: number;\n };\n signal?: AbortSignal;\n timeout?: number;\n },\n ): Promise<DebateResult<T>> {\n assertNotDestroyed();\n\n return runDebateInternal<T>(\n {\n type: \"debate\",\n handlers: agentIds,\n evaluator: evaluatorId,\n maxRounds: debateOpts?.maxRounds,\n extract: debateOpts?.extract,\n parseJudgement: debateOpts?.parseJudgement,\n signal: debateOpts?.signal,\n timeout: debateOpts?.timeout,\n },\n input,\n \"__imperative_debate\",\n );\n },\n\n // ---- Goal Pattern ----\n\n async runGoal<T>(\n nodes: Record<string, GoalNode>,\n initialInput: string | Record<string, unknown>,\n when: (facts: Record<string, unknown>) => boolean,\n goalOpts?: {\n satisfaction?: (facts: Record<string, unknown>) => number;\n maxSteps?: number;\n extract?: (facts: Record<string, unknown>) => T;\n timeout?: number;\n signal?: AbortSignal;\n selectionStrategy?: AgentSelectionStrategy;\n relaxation?: RelaxationTier[];\n onStep?: GoalPattern[\"onStep\"];\n onStall?: GoalPattern[\"onStall\"];\n checkpoint?: PatternCheckpointConfig;\n },\n ): Promise<GoalResult<T>> {\n assertNotDestroyed();\n\n return runGoalInternal<T>(\n {\n type: \"goal\",\n nodes,\n when,\n satisfaction: goalOpts?.satisfaction,\n maxSteps: goalOpts?.maxSteps,\n extract: goalOpts?.extract,\n timeout: goalOpts?.timeout,\n signal: goalOpts?.signal,\n selectionStrategy: goalOpts?.selectionStrategy,\n relaxation: goalOpts?.relaxation,\n onStep: goalOpts?.onStep,\n onStall: goalOpts?.onStall,\n checkpoint: goalOpts?.checkpoint,\n },\n initialInput,\n \"__imperative_goal\",\n );\n },\n\n async resumeGoal<T>(\n checkpointState: GoalCheckpointState,\n pattern: GoalPattern<T>,\n ): Promise<GoalResult<T>> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"goal\"\n ) {\n throw new Error(\"[Directive MultiAgent] Invalid goal checkpoint state\");\n }\n\n return runGoalInternal<T>(\n pattern,\n {}, // initialInput ignored when resumeFrom is provided\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeSequential<T>(\n checkpointState: SequentialCheckpointState,\n pattern: SequentialPattern<T>,\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"sequential\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid sequential checkpoint state\",\n );\n }\n\n return runSequentialPattern<T>(\n pattern,\n checkpointState.currentInput,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeSupervisor<T>(\n checkpointState: SupervisorCheckpointState,\n pattern: SupervisorPattern<T>,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"supervisor\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid supervisor checkpoint state\",\n );\n }\n\n const input = options?.input ?? checkpointState.currentInput;\n\n return runSupervisorPattern<T>(\n pattern,\n input,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeReflect<T>(\n checkpointState: ReflectCheckpointState,\n pattern: ReflectPattern<T>,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"reflect\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid reflect checkpoint state\",\n );\n }\n\n const input = options?.input ?? checkpointState.effectiveInput;\n\n return runReflectPattern<T>(\n pattern,\n input,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeDebate<T>(\n checkpointState: DebateCheckpointState,\n pattern: DebatePattern<T>,\n ): Promise<DebateResult<T>> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"debate\"\n ) {\n throw new Error(\n \"[Directive MultiAgent] Invalid debate checkpoint state\",\n );\n }\n\n return runDebateInternal<T>(\n pattern,\n checkpointState.currentInput,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async resumeDag<T>(\n checkpointState: DagCheckpointState,\n pattern: DagPattern<T>,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (\n !checkpointState ||\n checkpointState.version !== 1 ||\n checkpointState.type !== \"dag\"\n ) {\n throw new Error(\"[Directive MultiAgent] Invalid DAG checkpoint state\");\n }\n\n const input = options?.input ?? checkpointState.input;\n\n return runDagPattern<T>(\n pattern,\n input,\n checkpointState.patternId,\n checkpointState,\n );\n },\n\n async replay<T>(\n checkpointId: string,\n pattern: ExecutionPattern,\n options?: { input?: string },\n ): Promise<T> {\n assertNotDestroyed();\n\n if (!checkpointStore) {\n throw new Error(\n \"[Directive MultiAgent] No checkpoint store configured\",\n );\n }\n\n const checkpoint = await checkpointStore.load(checkpointId);\n if (!checkpoint) {\n throw new Error(\n `[Directive MultiAgent] Checkpoint not found: ${checkpointId}`,\n );\n }\n\n // Validate parsed state — prototype pollution defense + structure check\n let state: PatternCheckpointState;\n try {\n const parsed = JSON.parse(checkpoint.systemExport);\n if (!parsed || typeof parsed !== \"object\") {\n throw new Error(\"Parsed checkpoint state is not an object\");\n }\n\n const BLOCKED = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n for (const key of Object.keys(parsed)) {\n if (BLOCKED.has(key)) {\n throw new Error(`Checkpoint state contains blocked key: ${key}`);\n }\n }\n\n const validTypes = new Set([\n \"sequential\",\n \"supervisor\",\n \"reflect\",\n \"debate\",\n \"dag\",\n \"goal\",\n ]);\n if (!validTypes.has(parsed.type)) {\n throw new Error(`Unknown checkpoint pattern type: ${parsed.type}`);\n }\n if (parsed.version !== 1) {\n throw new Error(`Unsupported checkpoint version: ${parsed.version}`);\n }\n\n state = parsed as PatternCheckpointState;\n } catch (err) {\n throw new Error(\n `[Directive MultiAgent] Invalid checkpoint state: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n\n const step = getPatternStep(state);\n const replayInput =\n options?.input ??\n (\"currentInput\" in state\n ? (state as { currentInput: string }).currentInput\n : \"\");\n\n // Record timeline event\n if (timeline) {\n timeline.record({\n type: \"checkpoint_restore\",\n timestamp: Date.now(),\n snapshotId: null,\n checkpointId,\n patternType: state.type,\n step,\n });\n }\n\n switch (state.type) {\n case \"sequential\":\n return runSequentialPattern<T>(\n pattern as SequentialPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"supervisor\":\n return runSupervisorPattern<T>(\n pattern as SupervisorPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"reflect\":\n return runReflectPattern<T>(\n pattern as ReflectPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"debate\":\n return runDebateInternal(\n pattern as DebatePattern<T>,\n replayInput,\n state.patternId,\n state,\n ) as Promise<T>;\n case \"dag\":\n return runDagPattern<T>(\n pattern as DagPattern<T>,\n replayInput,\n state.patternId,\n state,\n );\n case \"goal\":\n return runGoalInternal(\n pattern as GoalPattern<T>,\n state.facts,\n state.patternId,\n state,\n ) as Promise<T>;\n }\n },\n\n // ---- Breakpoint Methods ----\n\n resumeBreakpoint(\n id: string,\n modifications?: BreakpointModifications,\n ): void {\n assertNotDestroyed();\n\n if (modifications) {\n breakpointModifications.set(id, modifications);\n }\n\n // Find which agent has this breakpoint pending and resolve it\n for (const agentId of Object.keys(agents)) {\n const agentFacts = getAgentFacts(agentId);\n const bpState = getBreakpointState(agentFacts);\n if (bpState.pending.some((r: BreakpointRequest) => r.id === id)) {\n system.batch(() => {\n const currentBp = getBreakpointState(agentFacts);\n const resolved = [...currentBp.resolved, id];\n setBreakpointState(agentFacts, {\n ...currentBp,\n pending: currentBp.pending.filter(\n (r: BreakpointRequest) => r.id !== id,\n ),\n resolved:\n resolved.length > MAX_BREAKPOINT_HISTORY\n ? resolved.slice(-MAX_BREAKPOINT_HISTORY)\n : resolved,\n });\n });\n\n return;\n }\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint \"${id}\"`,\n );\n }\n },\n\n cancelBreakpoint(id: string, reason?: string): void {\n assertNotDestroyed();\n\n if (reason) {\n breakpointCancelReasons.set(id, reason);\n }\n\n for (const agentId of Object.keys(agents)) {\n const agentFacts = getAgentFacts(agentId);\n const bpState = getBreakpointState(agentFacts);\n if (bpState.pending.some((r: BreakpointRequest) => r.id === id)) {\n system.batch(() => {\n const currentBp = getBreakpointState(agentFacts);\n const cancelled = [...currentBp.cancelled, id];\n setBreakpointState(agentFacts, {\n ...currentBp,\n pending: currentBp.pending.filter(\n (r: BreakpointRequest) => r.id !== id,\n ),\n cancelled:\n cancelled.length > MAX_BREAKPOINT_HISTORY\n ? cancelled.slice(-MAX_BREAKPOINT_HISTORY)\n : cancelled,\n });\n });\n\n return;\n }\n }\n\n if (debug) {\n console.debug(\n `[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint \"${id}\"`,\n );\n }\n },\n\n getPendingBreakpoints(): BreakpointRequest[] {\n const pending: BreakpointRequest[] = [];\n for (const agentId of Object.keys(agents)) {\n const agentFacts = getAgentFacts(agentId);\n const bpState = getBreakpointState(agentFacts);\n pending.push(...bpState.pending);\n }\n\n return pending;\n },\n\n getLastReflectionHistory(): ReflectIterationRecord[] | null {\n return lastReflectionHistory ? [...lastReflectionHistory] : null;\n },\n\n destroy() {\n if (destroyed) {\n return;\n }\n // Reset before marking as destroyed (reset() calls assertNotDestroyed())\n orchestrator.reset();\n // Clear callback references to allow garbage collection\n scratchpadChangeCallbacks.clear();\n scratchpadKeyCallbacks.clear();\n derivedChangeCallbacks.clear();\n idleWaiters.clear();\n destroyed = true;\n system.destroy();\n },\n };\n\n // Compute initial derivation values so they're available immediately\n recomputeDerivations();\n\n return orchestrator;\n}\n\n// ============================================================================\n// Barrel Re-exports from Extracted Modules\n// ============================================================================\n// These modules were extracted for maintainability. Re-exporting here so all\n// existing `import { ... } from \"./multi-agent-orchestrator.js\"` continue to work.\n\nexport * from \"./pattern-factories.js\";\nexport * from \"./pattern-serialization.js\";\nexport * from \"./pattern-composition.js\";\n"]}
|