@directive-run/ai 1.23.1 → 1.24.1

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.
Files changed (93) hide show
  1. package/README.md +27 -0
  2. package/dist/anthropic.cjs +1 -1
  3. package/dist/anthropic.cjs.map +1 -1
  4. package/dist/anthropic.d.cts +33 -1
  5. package/dist/anthropic.d.ts +33 -1
  6. package/dist/anthropic.js +1 -1
  7. package/dist/anthropic.js.map +1 -1
  8. package/dist/{chunk-QMSLWAMH.cjs → chunk-25OLDNZ3.cjs} +3 -3
  9. package/dist/{chunk-QMSLWAMH.cjs.map → chunk-25OLDNZ3.cjs.map} +1 -1
  10. package/dist/chunk-2Y4YWZDV.js +3 -0
  11. package/dist/chunk-2Y4YWZDV.js.map +1 -0
  12. package/dist/{chunk-J2Q5KKPN.js → chunk-437ADRES.js} +3 -3
  13. package/dist/{chunk-J2Q5KKPN.js.map → chunk-437ADRES.js.map} +1 -1
  14. package/dist/{chunk-2FPL5W2H.cjs → chunk-4LENWYLG.cjs} +7 -7
  15. package/dist/{chunk-2FPL5W2H.cjs.map → chunk-4LENWYLG.cjs.map} +1 -1
  16. package/dist/chunk-4TDH6ZTX.cjs +3 -0
  17. package/dist/chunk-4TDH6ZTX.cjs.map +1 -0
  18. package/dist/{chunk-K64WKZ22.cjs → chunk-AEX7HKNM.cjs} +2 -2
  19. package/dist/chunk-AEX7HKNM.cjs.map +1 -0
  20. package/dist/{chunk-4VP67W7L.js → chunk-CMH5TJGN.js} +4 -4
  21. package/dist/{chunk-4VP67W7L.js.map → chunk-CMH5TJGN.js.map} +1 -1
  22. package/dist/{chunk-XGOTVPN6.js → chunk-EUB4NVVN.js} +3 -3
  23. package/dist/{chunk-XGOTVPN6.js.map → chunk-EUB4NVVN.js.map} +1 -1
  24. package/dist/{chunk-EW77VF5K.js → chunk-H7UFBMLV.js} +3 -3
  25. package/dist/{chunk-EW77VF5K.js.map → chunk-H7UFBMLV.js.map} +1 -1
  26. package/dist/{chunk-FSSCGRAM.js → chunk-L6H6Y6IK.js} +3 -3
  27. package/dist/{chunk-FSSCGRAM.js.map → chunk-L6H6Y6IK.js.map} +1 -1
  28. package/dist/{chunk-JMG5GZAH.cjs → chunk-L7QHLH6U.cjs} +4 -4
  29. package/dist/{chunk-JMG5GZAH.cjs.map → chunk-L7QHLH6U.cjs.map} +1 -1
  30. package/dist/{chunk-F73AKFDB.cjs → chunk-LPTC3N2Z.cjs} +7 -7
  31. package/dist/{chunk-F73AKFDB.cjs.map → chunk-LPTC3N2Z.cjs.map} +1 -1
  32. package/dist/{chunk-UR5BMWEN.js → chunk-XMEJN4FA.js} +2 -2
  33. package/dist/chunk-XMEJN4FA.js.map +1 -0
  34. package/dist/{chunk-XN5LUOVS.cjs → chunk-ZUNORULG.cjs} +7 -7
  35. package/dist/{chunk-XN5LUOVS.cjs.map → chunk-ZUNORULG.cjs.map} +1 -1
  36. package/dist/{debug-timeline-Sc9cxgxV.d.cts → debug-timeline-B_bXRStF.d.cts} +1 -1
  37. package/dist/{debug-timeline-C5Dzs2r_.d.ts → debug-timeline-Btt-iaak.d.ts} +1 -1
  38. package/dist/devtools.d.cts +5 -5
  39. package/dist/devtools.d.ts +5 -5
  40. package/dist/evals.cjs +1 -1
  41. package/dist/evals.d.cts +2 -2
  42. package/dist/evals.d.ts +2 -2
  43. package/dist/evals.js +1 -1
  44. package/dist/gemini.cjs +1 -1
  45. package/dist/gemini.d.cts +1 -1
  46. package/dist/gemini.d.ts +1 -1
  47. package/dist/gemini.js +1 -1
  48. package/dist/{guardrails-export-BL8ozXSj.d.ts → guardrails-export-lvaBJlt6.d.ts} +1 -1
  49. package/dist/{guardrails-export-ByaYNGvG.d.cts → guardrails-export-pmpQjIKb.d.cts} +1 -1
  50. package/dist/guardrails.cjs +1 -1
  51. package/dist/guardrails.d.cts +2 -2
  52. package/dist/guardrails.d.ts +2 -2
  53. package/dist/guardrails.js +1 -1
  54. package/dist/{health-monitor-C9v10_tj.d.cts → health-monitor-DqAzufyM.d.cts} +1 -1
  55. package/dist/{health-monitor-J2eKmP--.d.ts → health-monitor-DrlBF6n9.d.ts} +1 -1
  56. package/dist/index.cjs +4 -4
  57. package/dist/index.d.cts +12 -8
  58. package/dist/index.d.ts +12 -8
  59. package/dist/index.js +1 -1
  60. package/dist/{multi-agent-orchestrator-ZZ63F75F.js → multi-agent-orchestrator-PI7X7ZGP.js} +2 -2
  61. package/dist/{multi-agent-orchestrator-ZZ63F75F.js.map → multi-agent-orchestrator-PI7X7ZGP.js.map} +1 -1
  62. package/dist/multi-agent-orchestrator-Z5NK4HIJ.cjs +2 -0
  63. package/dist/{multi-agent-orchestrator-DUMT67N5.cjs.map → multi-agent-orchestrator-Z5NK4HIJ.cjs.map} +1 -1
  64. package/dist/multi-agent.cjs +1 -1
  65. package/dist/multi-agent.d.cts +6 -6
  66. package/dist/multi-agent.d.ts +6 -6
  67. package/dist/multi-agent.js +1 -1
  68. package/dist/ollama.cjs +1 -1
  69. package/dist/ollama.d.cts +1 -1
  70. package/dist/ollama.d.ts +1 -1
  71. package/dist/ollama.js +1 -1
  72. package/dist/openai.cjs +1 -1
  73. package/dist/openai.d.cts +1 -1
  74. package/dist/openai.d.ts +1 -1
  75. package/dist/openai.js +1 -1
  76. package/dist/{orchestrator-types-BT-NIFOe.d.cts → orchestrator-types-B9nrJYFx.d.cts} +3 -3
  77. package/dist/{orchestrator-types-DMuSD8Vq.d.ts → orchestrator-types-ByqFuu3O.d.ts} +3 -3
  78. package/dist/predicate.d.cts +1 -1
  79. package/dist/predicate.d.ts +1 -1
  80. package/dist/testing.cjs +1 -1
  81. package/dist/testing.d.cts +4 -4
  82. package/dist/testing.d.ts +4 -4
  83. package/dist/testing.js +1 -1
  84. package/dist/{types-6NoeLyrD.d.cts → types-BzpGfUA2.d.cts} +10 -0
  85. package/dist/{types-6NoeLyrD.d.ts → types-BzpGfUA2.d.ts} +10 -0
  86. package/package.json +2 -2
  87. package/dist/chunk-3WO4MWJM.cjs +0 -3
  88. package/dist/chunk-3WO4MWJM.cjs.map +0 -1
  89. package/dist/chunk-K64WKZ22.cjs.map +0 -1
  90. package/dist/chunk-UR5BMWEN.js.map +0 -1
  91. package/dist/chunk-ZFLHWJ56.js +0 -3
  92. package/dist/chunk-ZFLHWJ56.js.map +0 -1
  93. package/dist/multi-agent-orchestrator-DUMT67N5.cjs +0 -2
@@ -0,0 +1,3 @@
1
+ 'use strict';function x(t){return t.status==="running"}function C(t){return t.pending.length>0}function O(t,e){return t/1e6*e}var y=new Set(["http:","https:"]);function L(t){try{let e=new URL(t);if(!y.has(e.protocol))throw new Error(`[Directive] Invalid baseURL protocol "${e.protocol}" \u2013 only http: and https: are allowed`)}catch(e){throw e instanceof Error&&e.message.startsWith("[Directive]")?e:new Error(`[Directive] Invalid baseURL "${t}" \u2013 must be a valid URL (e.g. "https://api.openai.com/v1")`)}}function S(t){let e=t.filter(s=>s!==void 0);if(e.length===0)return;if(e.length===1)return e[0];let l=AbortSignal.any;if(typeof l=="function")return l(e);let r=new AbortController,p=e.find(s=>s.aborted);if(p)return r.abort(p.reason??void 0),r.signal;for(let s of e)s.addEventListener("abort",()=>{r.abort(s.reason??void 0);},{once:true});return r.signal}function M(t){let{fetch:e=globalThis.fetch,buildRequest:l,parseResponse:r,parseOutput:p,hooks:s}=t,b=p??(o=>{try{return JSON.parse(o)}catch{return o}});return async(o,a,f)=>{let g=Date.now();s?.onBeforeCall?.({agent:o,input:a,timestamp:g});let d=[{role:"user",content:a}];try{let{url:i,init:u}=l(o,a,d),h=S([u.signal??void 0,f?.signal]),m=h?{...u,signal:h}:u,c=await e(i,m);if(!c.ok){let R=await c.text().catch(()=>"");throw new Error(`[Directive] AgentRunner request failed: ${c.status} ${c.statusText}${R?` \u2013 ${R.slice(0,300)}`:""}`)}let n=await r(c,d),k={inputTokens:n.inputTokens??0,outputTokens:n.outputTokens??0,...n.cacheReadTokens!=null?{cacheReadTokens:n.cacheReadTokens}:{},...n.cacheCreationTokens!=null?{cacheCreationTokens:n.cacheCreationTokens}:{}},T={role:"assistant",content:n.text},A=[...d,T];f?.onMessage?.(T);let w=Date.now()-g;return s?.onAfterCall?.({agent:o,input:a,output:n.text,totalTokens:n.totalTokens,tokenUsage:k,durationMs:w,timestamp:Date.now()}),{output:b(n.text),messages:A,toolCalls:[],totalTokens:n.totalTokens,tokenUsage:k}}catch(i){let u=Date.now()-g;throw i instanceof Error&&s?.onError?.({agent:o,input:a,error:i,durationMs:u,timestamp:Date.now()}),i}}}
2
+ exports.a=x;exports.b=C;exports.c=O;exports.d=L;exports.e=S;exports.f=M;//# sourceMappingURL=chunk-4TDH6ZTX.cjs.map
3
+ //# sourceMappingURL=chunk-4TDH6ZTX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent-utils.ts"],"names":["isAgentRunning","state","hasPendingApprovals","estimateCost","tokenUsage","ratePerMillionTokens","ALLOWED_PROTOCOLS","validateBaseURL","baseURL","url","err","combineSignals","signals","live","anyFn","controller","already","createRunner","options","fetchFn","buildRequest","parseResponse","parseOutput","hooks","parse","text","agent","input","runOptions","startTime","messages","init","combined","fetchInit","response","errBody","parsed","assistantMessage","allMessages","durationMs"],"mappings":"aA0BO,SAASA,CAAAA,CAAeC,CAAAA,CAA4B,CACzD,OAAOA,CAAAA,CAAM,SAAW,SAC1B,CAQO,SAASC,CAAAA,CAAoBD,CAAAA,CAA+B,CACjE,OAAOA,CAAAA,CAAM,OAAA,CAAQ,MAAA,CAAS,CAChC,CAiBO,SAASE,EACdC,CAAAA,CACAC,CAAAA,CACQ,CACR,OAAQD,CAAAA,CAAa,GAAA,CAAaC,CACpC,CAMA,IAAMC,CAAAA,CAAoB,IAAI,GAAA,CAAI,CAAC,QAAS,QAAQ,CAAC,CAAA,CAU9C,SAASC,CAAAA,CAAgBC,CAAAA,CAAuB,CACrD,GAAI,CACF,IAAMC,CAAAA,CAAM,IAAI,GAAA,CAAID,CAAO,CAAA,CAC3B,GAAI,CAACF,CAAAA,CAAkB,GAAA,CAAIG,CAAAA,CAAI,QAAQ,CAAA,CACrC,MAAM,IAAI,KAAA,CACR,CAAA,sCAAA,EAAyCA,CAAAA,CAAI,QAAQ,CAAA,0CAAA,CACvD,CAEJ,CAAA,MAASC,CAAAA,CAAK,CACZ,MAAIA,aAAe,KAAA,EAASA,CAAAA,CAAI,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,CACxDA,EAGF,IAAI,KAAA,CACR,CAAA,6BAAA,EAAgCF,CAAO,CAAA,+DAAA,CACzC,CACF,CACF,CAaO,SAASG,CAAAA,CACdC,CAAAA,CACyB,CACzB,IAAMC,EAAOD,CAAAA,CAAQ,MAAA,CAAQ,CAAA,EAAwB,CAAA,GAAM,MAAS,CAAA,CACpE,GAAIC,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAG,OACvB,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAG,OAAOA,CAAAA,CAAK,CAAC,CAAA,CAGpC,IAAMC,CAAAA,CACJ,YAGA,GAAA,CACF,GAAI,OAAOA,CAAAA,EAAU,UAAA,CACnB,OAAOA,EAAMD,CAAI,CAAA,CAKnB,IAAME,CAAAA,CAAa,IAAI,eAAA,CACjBC,EAAUH,CAAAA,CAAK,IAAA,CAAM,CAAA,EAAM,CAAA,CAAE,OAAO,CAAA,CAC1C,GAAIG,CAAAA,CACF,OAAAD,CAAAA,CAAW,KAAA,CACRC,CAAAA,CAA+C,MAAA,EAAU,MAC5D,CAAA,CAEOD,CAAAA,CAAW,MAAA,CAEpB,IAAA,IAAW,CAAA,IAAKF,CAAAA,CACd,EAAE,gBAAA,CACA,OAAA,CACA,IAAM,CACJE,CAAAA,CAAW,KAAA,CACR,EAAyC,MAAA,EAAU,MACtD,EACF,CAAA,CACA,CAAE,IAAA,CAAM,IAAK,CACf,CAAA,CAGF,OAAOA,CAAAA,CAAW,MACpB,CAyFO,SAASE,CAAAA,CAAaC,CAAAA,CAA2C,CACtE,GAAM,CACJ,KAAA,CAAOC,EAAU,UAAA,CAAW,KAAA,CAC5B,YAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CACA,KAAA,CAAAC,CACF,CAAA,CAAIL,CAAAA,CAUEM,CAAAA,CAAQF,IARiBG,CAAAA,EAAoB,CACjD,GAAI,CACF,OAAO,IAAA,CAAK,MAAMA,CAAI,CACxB,CAAA,KAAQ,CACN,OAAOA,CACT,CACF,CAAA,CAAA,CAIA,OAAO,MACLC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,GAC0B,CAC1B,IAAMC,CAAAA,CAAY,IAAA,CAAK,GAAA,EAAI,CAC3BN,CAAAA,EAAO,YAAA,GAAe,CAAE,KAAA,CAAAG,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAWE,CAAU,CAAC,CAAA,CAE5D,IAAMC,CAAAA,CAAsB,CAAC,CAAE,IAAA,CAAM,OAAQ,OAAA,CAASH,CAAM,CAAC,CAAA,CAE7D,GAAI,CACF,GAAM,CAAE,GAAA,CAAAlB,CAAAA,CAAK,IAAA,CAAAsB,CAAK,CAAA,CAAIX,EAAaM,CAAAA,CAAOC,CAAAA,CAAOG,CAAQ,CAAA,CAOnDE,CAAAA,CAAWrB,CAAAA,CAAe,CAC9BoB,CAAAA,CAAK,MAAA,EAAU,KAAA,CAAA,CACfH,CAAAA,EAAY,MACd,CAAC,EACKK,CAAAA,CAAyBD,CAAAA,CAC3B,CAAE,GAAGD,CAAAA,CAAM,MAAA,CAAQC,CAAS,CAAA,CAC5BD,CAAAA,CAEEG,CAAAA,CAAW,MAAMf,CAAAA,CAAQV,CAAAA,CAAKwB,CAAS,CAAA,CAE7C,GAAI,CAACC,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAMC,CAAAA,CAAU,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAAE,KAAA,CAAM,IAAM,EAAE,CAAA,CAEpD,MAAM,IAAI,KAAA,CACR,CAAA,wCAAA,EAA2CA,EAAS,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAS,UAAU,CAAA,EAAGC,CAAAA,CAAU,WAAMA,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,GAAG,CAAC,CAAA,CAAA,CAAK,EAAE,CAAA,CAClI,CACF,CAEA,IAAMC,CAAAA,CAAS,MAAMf,EAAca,CAAAA,CAAUJ,CAAQ,CAAA,CAC/C1B,CAAAA,CAAyB,CAC7B,WAAA,CAAagC,EAAO,WAAA,EAAe,CAAA,CACnC,YAAA,CAAcA,CAAAA,CAAO,YAAA,EAAgB,CAAA,CACrC,GAAIA,CAAAA,CAAO,eAAA,EAAmB,IAAA,CAC1B,CAAE,eAAA,CAAiBA,CAAAA,CAAO,eAAgB,EAC1C,EAAC,CACL,GAAIA,CAAAA,CAAO,mBAAA,EAAuB,IAAA,CAC9B,CAAE,mBAAA,CAAqBA,CAAAA,CAAO,mBAAoB,CAAA,CAClD,EACN,EAEMC,CAAAA,CAA4B,CAChC,IAAA,CAAM,WAAA,CACN,OAAA,CAASD,CAAAA,CAAO,IAClB,CAAA,CACME,CAAAA,CAAyB,CAAC,GAAGR,CAAAA,CAAUO,CAAgB,EAE7DT,CAAAA,EAAY,SAAA,GAAYS,CAAgB,CAAA,CAExC,IAAME,CAAAA,CAAa,KAAK,GAAA,EAAI,CAAIV,CAAAA,CAChC,OAAAN,CAAAA,EAAO,WAAA,GAAc,CACnB,KAAA,CAAAG,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAQS,CAAAA,CAAO,KACf,WAAA,CAAaA,CAAAA,CAAO,WAAA,CACpB,UAAA,CAAAhC,CAAAA,CACA,UAAA,CAAAmC,EACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAEM,CACL,MAAA,CAAQf,CAAAA,CAASY,CAAAA,CAAO,IAAI,CAAA,CAC5B,QAAA,CAAUE,EACV,SAAA,CAAW,EAAC,CACZ,WAAA,CAAaF,CAAAA,CAAO,WAAA,CACpB,WAAAhC,CACF,CACF,CAAA,MAASM,CAAAA,CAAK,CACZ,IAAM6B,EAAa,IAAA,CAAK,GAAA,EAAI,CAAIV,CAAAA,CAChC,MAAInB,CAAAA,YAAe,OACjBa,CAAAA,EAAO,OAAA,GAAU,CACf,KAAA,CAAAG,CAAAA,CACA,KAAA,CAAAC,EACA,KAAA,CAAOjB,CAAAA,CACP,UAAA,CAAA6B,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAC,CAAA,CAGG7B,CACR,CACF,CACF","file":"chunk-4TDH6ZTX.cjs","sourcesContent":["/**\n * Agent utilities — createRunner, estimateCost, state queries, URL validation.\n */\n\nimport type {\n AdapterHooks,\n AgentLike,\n AgentRunner,\n AgentState,\n ApprovalState,\n Message,\n RunOptions,\n RunResult,\n TokenUsage,\n} from \"./types.js\";\n\n// ============================================================================\n// State Query Helpers\n// ============================================================================\n\n/**\n * Check whether an agent is currently executing a run.\n *\n * @param state - The current {@link AgentState} to inspect.\n * @returns `true` when the agent status is `\"running\"`.\n */\nexport function isAgentRunning(state: AgentState): boolean {\n return state.status === \"running\";\n}\n\n/**\n * Check whether there are tool-call approvals waiting for user confirmation.\n *\n * @param state - The current {@link ApprovalState} to inspect.\n * @returns `true` when one or more approvals are pending.\n */\nexport function hasPendingApprovals(state: ApprovalState): boolean {\n return state.pending.length > 0;\n}\n\n// ============================================================================\n// Cost Estimation\n// ============================================================================\n\n/**\n * Estimate the dollar cost of an agent run based on total token usage.\n *\n * @remarks\n * No default rate is provided — callers must supply the current per-million-token\n * price to avoid silently using stale pricing.\n *\n * @param tokenUsage - Total number of tokens consumed (input + output).\n * @param ratePerMillionTokens - Cost in dollars per one million tokens.\n * @returns Estimated cost in dollars.\n */\nexport function estimateCost(\n tokenUsage: number,\n ratePerMillionTokens: number,\n): number {\n return (tokenUsage / 1_000_000) * ratePerMillionTokens;\n}\n\n// ============================================================================\n// Validation Helpers\n// ============================================================================\n\nconst ALLOWED_PROTOCOLS = new Set([\"http:\", \"https:\"]);\n\n/**\n * Validate that a base URL uses the `http:` or `https:` protocol.\n * Throws immediately at adapter creation time (not at call time) to surface\n * configuration errors before any LLM requests are made.\n *\n * @param baseURL - The base URL string to validate.\n * @throws When the URL is malformed or uses a protocol other than `http:` or `https:`.\n */\nexport function validateBaseURL(baseURL: string): void {\n try {\n const url = new URL(baseURL);\n if (!ALLOWED_PROTOCOLS.has(url.protocol)) {\n throw new Error(\n `[Directive] Invalid baseURL protocol \"${url.protocol}\" – only http: and https: are allowed`,\n );\n }\n } catch (err) {\n if (err instanceof Error && err.message.startsWith(\"[Directive]\")) {\n throw err;\n }\n\n throw new Error(\n `[Directive] Invalid baseURL \"${baseURL}\" – must be a valid URL (e.g. \"https://api.openai.com/v1\")`,\n );\n }\n}\n\n// ============================================================================\n// AbortSignal combination helper\n// ============================================================================\n\n/**\n * Combine multiple `AbortSignal`s into one — the resulting signal aborts\n * as soon as ANY input signal aborts. Falls back to a manual controller\n * wiring on runtimes without `AbortSignal.any` (Node < 20).\n *\n * @internal\n */\nexport function combineSignals(\n signals: ReadonlyArray<AbortSignal | undefined>,\n): AbortSignal | undefined {\n const live = signals.filter((s): s is AbortSignal => s !== undefined);\n if (live.length === 0) return undefined;\n if (live.length === 1) return live[0];\n\n // Prefer the standard helper when available (Node 20.3+, modern browsers).\n const anyFn = (\n AbortSignal as unknown as {\n any?: (signals: readonly AbortSignal[]) => AbortSignal;\n }\n ).any;\n if (typeof anyFn === \"function\") {\n return anyFn(live);\n }\n\n // Fallback: manual controller. If any input is already aborted, the\n // result is too — wire listeners for the rest.\n const controller = new AbortController();\n const already = live.find((s) => s.aborted);\n if (already) {\n controller.abort(\n (already as AbortSignal & { reason?: unknown }).reason ?? undefined,\n );\n\n return controller.signal;\n }\n for (const s of live) {\n s.addEventListener(\n \"abort\",\n () => {\n controller.abort(\n (s as AbortSignal & { reason?: unknown }).reason ?? undefined,\n );\n },\n { once: true },\n );\n }\n\n return controller.signal;\n}\n\n// ============================================================================\n// createRunner Helper\n// ============================================================================\n\n/** Parsed response from an LLM provider */\nexport interface ParsedResponse {\n text: string;\n totalTokens: number;\n /** Input token count, when available from the provider */\n inputTokens?: number;\n /** Output token count, when available from the provider */\n outputTokens?: number;\n /** Prompt-cache read token count, when available from the provider */\n cacheReadTokens?: number;\n /** Prompt-cache creation token count, when available from the provider */\n cacheCreationTokens?: number;\n}\n\n/** Options for creating an AgentRunner from buildRequest/parseResponse */\nexport interface CreateRunnerOptions {\n fetch?: typeof globalThis.fetch;\n buildRequest: (\n agent: AgentLike,\n input: string,\n messages: Message[],\n ) => { url: string; init: RequestInit };\n parseResponse: (\n response: Response,\n messages: Message[],\n ) => Promise<ParsedResponse>;\n parseOutput?: <T>(text: string) => T;\n /** Lifecycle hooks for tracing, logging, and metrics */\n hooks?: AdapterHooks;\n}\n\n/**\n * Create an {@link AgentRunner} from `buildRequest`/`parseResponse` helpers, reducing\n * ~50 lines of fetch boilerplate to ~20 lines of configuration.\n *\n * @remarks\n * Supports lifecycle hooks for observability:\n * - `onBeforeCall` fires before each API request\n * - `onAfterCall` fires after a successful response (includes token breakdown)\n * - `onError` fires when the request fails\n *\n * Output parsing defaults to `JSON.parse` with a string fallback. Supply a custom\n * `parseOutput` to override (e.g. for structured output schemas).\n *\n * @param options - Configuration for the runner, including request building, response parsing, and hooks.\n * @returns An {@link AgentRunner} function that performs LLM calls via fetch.\n *\n * @example\n * ```typescript\n * const runClaude = createRunner({\n * buildRequest: (agent, input) => ({\n * url: \"/api/claude\",\n * init: {\n * method: \"POST\",\n * headers: { \"Content-Type\": \"application/json\" },\n * body: JSON.stringify({\n * model: agent.model ?? \"claude-haiku-4-5-20251001\",\n * system: agent.instructions ?? \"\",\n * messages: [{ role: \"user\", content: input }],\n * }),\n * },\n * }),\n * parseResponse: async (res) => {\n * const data = await res.json();\n * const inputTokens = data.usage?.input_tokens ?? 0;\n * const outputTokens = data.usage?.output_tokens ?? 0;\n * return {\n * text: data.content?.[0]?.text ?? \"\",\n * totalTokens: inputTokens + outputTokens,\n * inputTokens,\n * outputTokens,\n * };\n * },\n * hooks: {\n * onAfterCall: ({ durationMs, tokenUsage }) => {\n * console.log(`LLM call: ${durationMs}ms, ${tokenUsage.inputTokens}in/${tokenUsage.outputTokens}out`);\n * },\n * },\n * });\n * ```\n *\n * @public\n */\nexport function createRunner(options: CreateRunnerOptions): AgentRunner {\n const {\n fetch: fetchFn = globalThis.fetch,\n buildRequest,\n parseResponse,\n parseOutput,\n hooks,\n } = options;\n\n const defaultParseOutput = <T>(text: string): T => {\n try {\n return JSON.parse(text) as T;\n } catch {\n return text as unknown as T;\n }\n };\n\n const parse = parseOutput ?? defaultParseOutput;\n\n return async <T = unknown>(\n agent: AgentLike,\n input: string,\n runOptions?: RunOptions,\n ): Promise<RunResult<T>> => {\n const startTime = Date.now();\n hooks?.onBeforeCall?.({ agent, input, timestamp: startTime });\n\n const messages: Message[] = [{ role: \"user\", content: input }];\n\n try {\n const { url, init } = buildRequest(agent, input, messages);\n\n // (Sec MAJOR) Combine signals — `buildRequest` may set\n // `init.signal` (e.g. `AbortSignal.timeout(timeoutMs)`) and the\n // caller may pass their own via `runOptions.signal`. Naively\n // overwriting one with the other silently disables whichever was\n // dropped. `combineSignals` aborts as soon as either fires.\n const combined = combineSignals([\n init.signal ?? undefined,\n runOptions?.signal,\n ]);\n const fetchInit: RequestInit = combined\n ? { ...init, signal: combined }\n : init;\n\n const response = await fetchFn(url, fetchInit);\n\n if (!response.ok) {\n const errBody = await response.text().catch(() => \"\");\n\n throw new Error(\n `[Directive] AgentRunner request failed: ${response.status} ${response.statusText}${errBody ? ` – ${errBody.slice(0, 300)}` : \"\"}`,\n );\n }\n\n const parsed = await parseResponse(response, messages);\n const tokenUsage: TokenUsage = {\n inputTokens: parsed.inputTokens ?? 0,\n outputTokens: parsed.outputTokens ?? 0,\n ...(parsed.cacheReadTokens != null\n ? { cacheReadTokens: parsed.cacheReadTokens }\n : {}),\n ...(parsed.cacheCreationTokens != null\n ? { cacheCreationTokens: parsed.cacheCreationTokens }\n : {}),\n };\n\n const assistantMessage: Message = {\n role: \"assistant\",\n content: parsed.text,\n };\n const allMessages: Message[] = [...messages, assistantMessage];\n\n runOptions?.onMessage?.(assistantMessage);\n\n const durationMs = Date.now() - startTime;\n hooks?.onAfterCall?.({\n agent,\n input,\n output: parsed.text,\n totalTokens: parsed.totalTokens,\n tokenUsage,\n durationMs,\n timestamp: Date.now(),\n });\n\n return {\n output: parse<T>(parsed.text),\n messages: allMessages,\n toolCalls: [],\n totalTokens: parsed.totalTokens,\n tokenUsage,\n };\n } catch (err) {\n const durationMs = Date.now() - startTime;\n if (err instanceof Error) {\n hooks?.onError?.({\n agent,\n input,\n error: err,\n durationMs,\n timestamp: Date.now(),\n });\n }\n\n throw err;\n }\n };\n}\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var core=require('@directive-run/core');var n=class extends Error{code;guardrailName;guardrailType;userMessage;agentName;constructor(e){super(e.message,{cause:e.cause}),this.name="GuardrailError",this.code=e.code,this.guardrailName=e.guardrailName,this.guardrailType=e.guardrailType,this.userMessage=e.userMessage??e.message,this.agentName=e.agentName,Object.defineProperty(this,"input",{value:e.input,enumerable:false,writable:false,configurable:false}),Object.defineProperty(this,"data",{value:e.data,enumerable:false,writable:false,configurable:false});}toJSON(){return {name:this.name,code:this.code,message:this.message,guardrailName:this.guardrailName,guardrailType:this.guardrailType,userMessage:this.userMessage,agentName:this.agentName}}};function g(r){return r instanceof n}var a="__agent",o="__approval",s="__conversation",i="__toolCalls",u="__breakpoints";var d="__scratchpad",l={facts:{[a]:core.t.object(),[o]:core.t.object(),[s]:core.t.array(),[i]:core.t.array(),[u]:core.t.object()},derivations:{},events:{},requirements:{}};exports.a=n;exports.b=g;exports.c=a;exports.d=o;exports.e=s;exports.f=i;exports.g=u;exports.h=d;exports.i=l;//# sourceMappingURL=chunk-K64WKZ22.cjs.map
2
- //# sourceMappingURL=chunk-K64WKZ22.cjs.map
1
+ 'use strict';var core=require('@directive-run/core');var n=class extends Error{code;guardrailName;guardrailType;userMessage;agentName;constructor(e){super(e.message,{cause:e.cause}),this.name="GuardrailError",this.code=e.code,this.guardrailName=e.guardrailName,this.guardrailType=e.guardrailType,this.userMessage=e.userMessage??e.message,this.agentName=e.agentName,Object.defineProperty(this,"input",{value:e.input,enumerable:false,writable:false,configurable:false}),Object.defineProperty(this,"data",{value:e.data,enumerable:false,writable:false,configurable:false});}toJSON(){return {name:this.name,code:this.code,message:this.message,guardrailName:this.guardrailName,guardrailType:this.guardrailType,userMessage:this.userMessage,agentName:this.agentName}}};function g(r){return r instanceof n}var a="__agent",o="__approval",s="__conversation",i="__toolCalls",u="__breakpoints";var d="__scratchpad",l={facts:{[a]:core.t.object(),[o]:core.t.object(),[s]:core.t.array(),[i]:core.t.array(),[u]:core.t.object()},derivations:{},events:{},requirements:{}};exports.a=n;exports.b=g;exports.c=a;exports.d=o;exports.e=s;exports.f=i;exports.g=u;exports.h=d;exports.i=l;//# sourceMappingURL=chunk-AEX7HKNM.cjs.map
2
+ //# sourceMappingURL=chunk-AEX7HKNM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts"],"names":["GuardrailError","options","isGuardrailError","error","AGENT_KEY","APPROVAL_KEY","CONVERSATION_KEY","TOOL_CALLS_KEY","BREAKPOINT_KEY","SCRATCHPAD_KEY","orchestratorBridgeSchema","t"],"mappings":"qDAwkBO,IAAMA,EAAN,cAA6B,KAAM,CAC/B,IAAA,CACA,aAAA,CACA,aAAA,CACA,WAAA,CAEA,UAGT,WAAA,CAAYC,CAAAA,CAUT,CACD,KAAA,CAAMA,CAAAA,CAAQ,QAAS,CAAE,KAAA,CAAOA,CAAAA,CAAQ,KAAM,CAAC,CAAA,CAC/C,IAAA,CAAK,KAAO,gBAAA,CACZ,IAAA,CAAK,KAAOA,CAAAA,CAAQ,IAAA,CACpB,IAAA,CAAK,aAAA,CAAgBA,EAAQ,aAAA,CAC7B,IAAA,CAAK,cAAgBA,CAAAA,CAAQ,aAAA,CAC7B,KAAK,WAAA,CAAcA,CAAAA,CAAQ,WAAA,EAAeA,CAAAA,CAAQ,QAClD,IAAA,CAAK,SAAA,CAAYA,EAAQ,SAAA,CAEzB,MAAA,CAAO,eAAe,IAAA,CAAM,OAAA,CAAS,CACnC,KAAA,CAAOA,EAAQ,KAAA,CACf,UAAA,CAAY,MACZ,QAAA,CAAU,KAAA,CACV,aAAc,KAChB,CAAC,CAAA,CACD,MAAA,CAAO,eAAe,IAAA,CAAM,MAAA,CAAQ,CAClC,KAAA,CAAOA,CAAAA,CAAQ,KACf,UAAA,CAAY,KAAA,CACZ,SAAU,KAAA,CACV,YAAA,CAAc,KAChB,CAAC,EACH,CAEA,MAAA,EAAkC,CAChC,OAAO,CACL,IAAA,CAAM,IAAA,CAAK,IAAA,CACX,KAAM,IAAA,CAAK,IAAA,CACX,QAAS,IAAA,CAAK,OAAA,CACd,cAAe,IAAA,CAAK,aAAA,CACpB,aAAA,CAAe,IAAA,CAAK,cACpB,WAAA,CAAa,IAAA,CAAK,YAClB,SAAA,CAAW,IAAA,CAAK,SAClB,CACF,CACF,EAGO,SAASC,EAAiBC,CAAAA,CAAyC,CACxE,OAAOA,CAAAA,YAAiBH,CAC1B,CAqBO,IAAMI,CAAAA,CAAY,UACZC,CAAAA,CAAe,YAAA,CACfC,EAAmB,gBAAA,CACnBC,CAAAA,CAAiB,cACjBC,CAAAA,CAAiB,oBA2kBjBC,CAAAA,CAAiB,cAAA,CA0YjBC,CAAAA,CAA2B,CACtC,MAAO,CACL,CAACN,CAAS,EAAGO,MAAA,CAAE,QAAO,CACtB,CAACN,CAAY,EAAGM,OAAE,MAAA,EAAO,CACzB,CAACL,CAAgB,EAAGK,OAAE,KAAA,EAAM,CAC5B,CAACJ,CAAc,EAAGI,MAAA,CAAE,KAAA,GACpB,CAACH,CAAc,EAAGG,MAAA,CAAE,MAAA,EACtB,CAAA,CACA,WAAA,CAAa,EAAC,CACd,MAAA,CAAQ,EAAC,CACT,YAAA,CAAc,EAChB","file":"chunk-AEX7HKNM.cjs","sourcesContent":["/**\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 * Tokens read from the provider's prompt cache, when available.\n * Populated by adapters with prompt-caching enabled (e.g. Anthropic).\n */\n cacheReadTokens?: number;\n /**\n * Tokens written to the provider's prompt cache, when available.\n * Populated by adapters with prompt-caching enabled (e.g. Anthropic).\n */\n cacheCreationTokens?: 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"]}
@@ -1,4 +1,4 @@
1
- import {c,d,e,f,g,h,i,a as a$2,b as b$2}from'./chunk-UR5BMWEN.js';import {a as a$1,c as c$1,b}from'./chunk-FBT73WFY.js';import {a,b as b$1}from'./chunk-HRR45JZX.js';import {t,createModule,createSystem}from'@directive-run/core';import {requirementGuard,getBridgeFact,setBridgeFact,createCallbackPlugin}from'@directive-run/core/adapter-utils';import {safeStringify}from'@directive-run/core/internals';function Ht(s,r,i){return typeof s=="function"?{name:`${i}-guardrail-${r}`,fn:s,critical:true}:s}function kr(s,r){let{backoff:i="exponential",baseDelayMs:d=100,maxDelayMs:f=5e3}=r,g;switch(i){case "exponential":g=d*2**(s-1);break;case "linear":g=d*s;break;default:g=d;}return Math.min(g,f)}function Nn(s,r){return r?.aborted?Promise.reject(r.reason??new Error("Aborted")):new Promise((i,d)=>{if(!r){setTimeout(i,s);return}let f=()=>{clearTimeout(g),d(r.reason??new Error("Aborted"));},g=setTimeout(()=>{r.removeEventListener("abort",f),i();},s);r.addEventListener("abort",f,{once:true});})}async function Ut(s,r,i,d){let{retry:f}=s,g=Math.max(f?.attempts??1,1),c;for(let R=1;R<=g;R++)try{return await s.fn(r,i)}catch(O){if(c=O instanceof Error?O:new Error(String(O)),R<g){let y=kr(R,f??{});await Nn(y,d);}}return {passed:false,reason:`Guardrail "${s.name}" failed after ${g} attempt(s): ${c.message}`}}function wr(s,r){let{backoff:i="exponential",baseDelayMs:d=1e3,maxDelayMs:f=3e4}=r,g;switch(i){case "exponential":g=d*2**(s-1);break;case "linear":g=d*s;break;default:g=d;}return Math.min(g,f)}async function qn(s,r,i,d,f){let g=Math.max(f?.attempts??1,1),c=f?.isRetryable??(()=>true),R=f?.onRetry,O;for(let y=1;y<=g;y++)try{return await s(r,i,d)}catch(_){if(O=_ instanceof Error?_:new Error(String(_)),y<g){let I=true;try{I=c(O);}catch{break}if(!I)break;let F=wr(y,f??{});try{R?.(y,O,F);}catch{}await Nn(F,d?.signal);}else break}throw O}function vr(s){let r=[];if(s.category&&r.push(s.category),s.tags?.length)for(let i of s.tags)i!==s.category&&r.push(i);return r.length>0?` [${r.join(", ")}]`:""}function rt(s,r){if(!r)return null;let i=r.label??s,d=r.description?`: ${r.description}`:"",f=vr(r);return `- ${r.label?`${s} (${i})`:s}${d}${f}`}function cn(s){let r=[],i=s.modules.map(y=>rt(y.id,y.meta)).filter(Boolean);i.length>0&&r.push(`### Modules
1
+ import {c,d,e,f,g,h,i,a as a$2,b as b$2}from'./chunk-XMEJN4FA.js';import {a as a$1,c as c$1,b}from'./chunk-FBT73WFY.js';import {a,b as b$1}from'./chunk-HRR45JZX.js';import {t,createModule,createSystem}from'@directive-run/core';import {requirementGuard,getBridgeFact,setBridgeFact,createCallbackPlugin}from'@directive-run/core/adapter-utils';import {safeStringify}from'@directive-run/core/internals';function Ht(s,r,i){return typeof s=="function"?{name:`${i}-guardrail-${r}`,fn:s,critical:true}:s}function kr(s,r){let{backoff:i="exponential",baseDelayMs:d=100,maxDelayMs:f=5e3}=r,g;switch(i){case "exponential":g=d*2**(s-1);break;case "linear":g=d*s;break;default:g=d;}return Math.min(g,f)}function Nn(s,r){return r?.aborted?Promise.reject(r.reason??new Error("Aborted")):new Promise((i,d)=>{if(!r){setTimeout(i,s);return}let f=()=>{clearTimeout(g),d(r.reason??new Error("Aborted"));},g=setTimeout(()=>{r.removeEventListener("abort",f),i();},s);r.addEventListener("abort",f,{once:true});})}async function Ut(s,r,i,d){let{retry:f}=s,g=Math.max(f?.attempts??1,1),c;for(let R=1;R<=g;R++)try{return await s.fn(r,i)}catch(O){if(c=O instanceof Error?O:new Error(String(O)),R<g){let y=kr(R,f??{});await Nn(y,d);}}return {passed:false,reason:`Guardrail "${s.name}" failed after ${g} attempt(s): ${c.message}`}}function wr(s,r){let{backoff:i="exponential",baseDelayMs:d=1e3,maxDelayMs:f=3e4}=r,g;switch(i){case "exponential":g=d*2**(s-1);break;case "linear":g=d*s;break;default:g=d;}return Math.min(g,f)}async function qn(s,r,i,d,f){let g=Math.max(f?.attempts??1,1),c=f?.isRetryable??(()=>true),R=f?.onRetry,O;for(let y=1;y<=g;y++)try{return await s(r,i,d)}catch(_){if(O=_ instanceof Error?_:new Error(String(_)),y<g){let I=true;try{I=c(O);}catch{break}if(!I)break;let F=wr(y,f??{});try{R?.(y,O,F);}catch{}await Nn(F,d?.signal);}else break}throw O}function vr(s){let r=[];if(s.category&&r.push(s.category),s.tags?.length)for(let i of s.tags)i!==s.category&&r.push(i);return r.length>0?` [${r.join(", ")}]`:""}function rt(s,r){if(!r)return null;let i=r.label??s,d=r.description?`: ${r.description}`:"",f=vr(r);return `- ${r.label?`${s} (${i})`:s}${d}${f}`}function cn(s){let r=[],i=s.modules.map(y=>rt(y.id,y.meta)).filter(Boolean);i.length>0&&r.push(`### Modules
2
2
  ${i.join(`
3
3
  `)}`);let d=s.constraints.filter(y=>y.active&&y.meta).map(y=>rt(y.id,y.meta)).filter(Boolean);if(d.length>0&&r.push(`### Active Constraints
4
4
  ${d.join(`
@@ -23,7 +23,7 @@ ${r.join(`
23
23
  Feedback on your previous response:
24
24
  ${r}
25
25
 
26
- Please improve your response.`}function Lr(s,r){let i=r.maxIterations??2,d=r.buildRetryInput??Rr,f=r.onExhausted??"accept-last";if(i<1)throw new Error("[Directive Reflection] maxIterations must be >= 1");return typeof process<"u"&&process.env?.NODE_ENV!=="production"&&i>3&&console.warn("[Directive Reflection] maxIterations > 3 rarely improves quality. Consider using maxIterations <= 3 to avoid unbounded token burn."),async(g,c,R)=>{let O=[],y=c,_=0,I=null;for(let F=0;F<i;F++){let he=Date.now(),ce=await s(g,y,R);I=ce,_+=ce.totalTokens;let Se={input:c,iteration:F,result:ce,history:[...O]},ke=await r.evaluate(ce.output,Se);O.push(ke);let Fe=Date.now()-he;try{r.onIteration?.({iteration:F,passed:ke.passed,feedback:ke.feedback,score:ke.score,durationMs:Fe});}catch{}if(ke.passed)return {...ce,totalTokens:_};if(r.budgetThreshold!==void 0&&_>=r.budgetThreshold)break;F<i-1&&ke.feedback&&(y=d(c,ke.feedback,F));}if(f==="throw")throw new xt({iterations:i,history:O,lastResult:I,totalTokens:_});return {...I,totalTokens:_}}}var At=200,Tr=0;function Gn(){return `bp_${Date.now().toString(36)}_${(++Tr).toString(36)}`}function Fn(s,r,i){for(let d of s)if(d.type===r){if(!d.when)return d;try{if(d.when(i))return d}catch{}}return null}function Ct(){return {pending:[],resolved:[],cancelled:[]}}var Ln=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ke(){let s=Date.now().toString(36),r=crypto.randomUUID().slice(0,8);return `ckpt_${s}_${r}`}function fn(s){if(!s||typeof s!="object")return false;for(let d of Object.keys(s))if(Ln.has(d))return false;let r=s;if(r.version!==1||typeof r.id!="string"||r.id.length===0||typeof r.createdAt!="string"||typeof r.systemExport!="string"||r.timelineExport!==null&&typeof r.timelineExport!="string"||!r.localState||typeof r.localState!="object")return false;for(let d of Object.keys(r.localState))if(Ln.has(d))return false;let i=r.localState;return !(i.type!=="single"&&i.type!=="multi"||r.orchestratorType!=="single"&&r.orchestratorType!=="multi")}var Bn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(r){if(this.maxCheckpoints=r?.maxCheckpoints??100,this.retentionMs=r?.retentionMs??Number.POSITIVE_INFINITY,this.preserveLabeled=r?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(r){if(!fn(r))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let i=this.order.indexOf(r.id);return i>=0&&this.order.splice(i,1),this.store.set(r.id,r),this.order.push(r.id),r.id}async load(r){return this.store.get(r)??null}async list(){return this.order.map(r=>{let i=this.store.get(r);return {id:i.id,label:i.label,createdAt:i.createdAt}})}async delete(r){if(!this.store.has(r))return false;this.store.delete(r);let i=this.order.indexOf(r);return i>=0&&this.order.splice(i,1),true}async clear(){this.store.clear(),this.order.length=0;}async prune(){if(!Number.isFinite(this.retentionMs))return 0;let r=Date.now()-this.retentionMs,i=0,d=[];for(let f of this.order){let g=this.store.get(f);if(!g)continue;if(new Date(g.createdAt).getTime()>=r)break;this.preserveLabeled&&g.label||d.push(f);}for(let f of d){this.store.delete(f);let g=this.order.indexOf(f);g>=0&&this.order.splice(g,1),i++;}return i}evictOldest(){if(this.preserveLabeled)for(let i=0;i<this.order.length;i++){let d=this.order[i],f=this.store.get(d);if(f&&!f.label)return this.order.splice(i,1),this.store.delete(d),true}let r=this.order.shift();return r?(this.store.delete(r),true):false}};var gn=class{buffer=[];maxSize;strategy;pullWaiters=[];pushWaiters=[];closed=false;droppedCount=0;constructor(r="buffer",i=1e3){this.strategy=r,this.maxSize=i;}async push(r){if(this.closed)return false;let i=this.pullWaiters.shift();if(i)return i(r),true;if(this.buffer.length>=this.maxSize)switch(this.strategy){case "drop":return this.droppedCount++,false;case "block":if(await new Promise(d=>{this.pushWaiters.push(d);}),this.closed)return false;break;}return this.buffer.push(r),true}async pull(){let r=this.pushWaiters.shift();return r&&r(),this.buffer.length>0?this.buffer.shift():this.closed?null:new Promise(i=>{this.pullWaiters.push(i);})}close(){this.closed=true;for(let r of this.pullWaiters)r(null);this.pullWaiters=[];for(let r of this.pushWaiters)r();this.pushWaiters=[];}getDroppedCount(){return this.droppedCount}};function Kr(s,r={}){let{streamingGuardrails:i=[]}=r;return (d,f,g={})=>{let{signal:c,backpressure:R="buffer",bufferSize:O=1e3,guardrailCheckInterval:y=50,stopOnGuardrail:_=true}=g;if(y<=0||!Number.isFinite(y))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${y}`);let I=new gn(R,O),F=new AbortController,he="",ce=0,Se=false,ke=Date.now(),Fe;c&&(Fe=()=>F.abort(),c.addEventListener("abort",Fe));let Wt=()=>{Fe&&c&&c.removeEventListener("abort",Fe);};async function Et(){for(let Z of i)try{let we=await Z.check(he,ce);if(!we.passed){let Le=Z.stopOnFail!==!1,Re={type:"guardrail_triggered",guardrailName:Z.name,reason:we.reason??"Guardrail check failed",partialOutput:he,stopped:Le};return await I.push(Re),Le&&(typeof _=="function"?_:()=>_)(Re)&&(Se=!0,F.abort()),Re}}catch{}return null}let at=(async()=>{await I.push({type:"progress",phase:"starting",message:"Starting agent"});try{let Z=await s(d,f,{signal:F.signal,onToken:async Re=>{Se||(ce++,he+=Re,await I.push({type:"token",data:Re,tokenCount:ce}),ce%y===0&&await Et());},onToolStart:async(Re,Ye,Be)=>{await I.push({type:"progress",phase:"tool_calling",message:`Calling ${Re}`}),await I.push({type:"tool_start",tool:Re,toolCallId:Ye,arguments:Be});},onToolEnd:async(Re,Ye,Be)=>{await I.push({type:"tool_end",tool:Re,toolCallId:Ye,result:Be}),await I.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async Re=>{await I.push({type:"message",message:Re});}});await Et();let we=Date.now()-ke,Le=I.getDroppedCount();return await I.push({type:"done",totalTokens:Z.totalTokens,duration:we,droppedTokens:Le}),I.close(),Z}catch(Z){let we={type:"error",error:Z instanceof Error?Z:new Error(String(Z)),partialOutput:he||void 0};throw await I.push(we),I.close(),Z}finally{Wt();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let Z=await I.pull();return Z===null?{done:true,value:void 0}:{done:false,value:Z}}}}},result:at,abort:()=>F.abort()}}}function Vr(s){let{checkFn:r,threshold:i=.8,stopOnFail:d=true}=s;return {name:"toxicity-streaming",stopOnFail:d,async check(f){let g=await r(f);return g>i?{passed:false,reason:`Toxicity score ${g.toFixed(2)} exceeds threshold ${i}`,severity:"critical"}:{passed:true}}}}function Yr(s){let{maxTokens:r,warnAt:i,stopOnFail:d=true}=s,f=false;return {name:"length-streaming",stopOnFail:d,check(g,c){return c>=r?{passed:false,reason:`Output exceeded maximum length of ${r} tokens`,severity:"error"}:i&&c>=i&&!f?(f=true,{passed:true,warning:`Approaching maximum length: ${c}/${r} tokens`,severity:"warning"}):{passed:true}}}}function Xr(s){let{patterns:r,stopOnFail:i=true}=s;return {name:"pattern-streaming",stopOnFail:i,check(d){for(let{regex:f,name:g}of r)if(f.lastIndex=0,f.test(d))return {passed:false,reason:`Detected ${g} pattern in output`,severity:"error"};return {passed:true}}}}function Zr(s,r={}){let{name:i="combined-streaming",stopOnFirstFail:d=true}=r;return {name:i,stopOnFail:d,async check(f,g){let c=[];for(let R of s){let O=await R.check(f,g);if(!O.passed){if(d)return {...O,reason:`[${R.name}] ${O.reason}`};c.push(`[${R.name}] ${O.reason??"failed"}`);}}return c.length>0?{passed:false,reason:c.join("; ")}:{passed:true}}}}function Qr(s,r,i={}){let{minTokens:d=0,stopOnFail:f=true}=i;return {name:s,stopOnFail:f,async check(g,c){if(c<d)return {passed:true};let R=await r({output:g,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:R.passed,reason:R.reason,severity:R.passed?void 0:"error"}}}}async function eo(s){let r="";for await(let i of s)i.type==="token"&&(r+=i.data);return r}async function*to(s,r){for await(let i of s)await r(i),yield i;}async function*no(s,r){let i=new Set(r);for await(let d of s)i.has(d.type)&&(yield d);}async function*ro(s,r){for await(let i of s)yield await r(i);}var Sr=1e4;function Hn(s){if(s.length===0)return {stream:{[Symbol.asyncIterator](){let _={done:true,value:void 0};return {async next(){return _},async return(){return _}}}},getDroppedCount:()=>0};let r=[],i=[],d=s.length,f=false,g=0;function c(y){if(f)return;let _=i.shift();if(_){_(y);return}r.length<Sr?r.push(y):g++;}function R(){if(d--,d<=0){f=true;for(let y of i)y(null);i.length=0;}}for(let y of s)(async()=>{try{for await(let _ of y.stream)c({chunk:_,agentId:y.agentId});}catch(_){c({chunk:{type:"error",error:_ instanceof Error?_:new Error(String(_))},agentId:y.agentId});}finally{R();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return r.length>0?{done:false,value:r.shift()}:f?{done:true,value:void 0}:new Promise(y=>{i.push(_=>{y(_===null?{done:true,value:void 0}:{done:false,value:_});});})},return(){f=true,r.length=0;for(let y of i)y(null);return i.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>g}}function mn(s,r){if(Object.is(s,r))return true;if(typeof s!=typeof r||s===null||r===null||typeof s!="object")return false;if(Array.isArray(s)){if(!Array.isArray(r)||s.length!==r.length)return false;for(let c=0;c<s.length;c++)if(s[c]!==r[c])return false;return true}let i=s,d=r,f=Object.keys(i),g=Object.keys(d);if(f.length!==g.length)return false;for(let c of f)if(i[c]!==d[c])return false;return true}var Ee=class{count;maxPermits;queue=[];constructor(r){if(r<1||!Number.isFinite(r))throw new Error(`[Directive Semaphore] Invalid max permits: ${r}. Must be a finite number >= 1.`);this.maxPermits=r,this.count=r;}createReleaseFn(){let r=false;return ()=>{r||(r=true,this.release());}}async acquire(r){if(r?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((i,d)=>{let f,g={resolve:c=>{f&&r&&r.removeEventListener("abort",f),i(c);},reject:d};this.queue.push(g),r&&(f=()=>{let c=this.queue.indexOf(g);c>=0&&(this.queue.splice(c,1),d(new Error("[Directive Semaphore] Aborted while waiting for permit")));},r.addEventListener("abort",f,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let r=this.queue.shift();r&&(this.count--,r.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let r=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),i=this.queue.splice(0,this.queue.length);for(let d of i)d.reject(r);this.count=this.maxPermits;}};function ot(s){switch(s.type){case "sequential":return s.step;case "supervisor":return s.round;case "reflect":return s.iteration;case "debate":return s.round;case "dag":return s.completedCount;case "goal":return s.step}}function xr(s){let r=ot(s),i=s.stepsTotal??null;switch(s.type){case "sequential":{let d=s.results.reduce((c,R)=>c+R.totalTokens,0),f=s.results.length>0?d/s.results.length:0,g=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:f>0&&g!=null?Math.round(f*g):null,estimatedStepsRemaining:g}}case "supervisor":{let d=s.workerResults.reduce((g,c)=>g+c.totalTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "reflect":{let d=s.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "debate":{let d=s.tokensConsumed,f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "dag":{let d=i??Object.keys(s.statuses).length,f=s.completedCount,g=Object.values(s.nodeResults).reduce((O,y)=>O+y.totalTokens,0),c=f>0?g/f:0,R=d-f;return {percentage:d>0?Math.round(f/d*100):0,stepsCompleted:f,stepsTotal:d,tokensConsumed:g,estimatedTokensRemaining:R>0?Math.round(c*R):0,estimatedStepsRemaining:R}}case "goal":{let d=Object.values(s.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0),f=s.lastSatisfaction;return {percentage:Math.round(f*100),stepsCompleted:r,stepsTotal:i??null,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:s.stepMetrics.length>0?Ar(s):null}}}}function Ar(s){let r=s.stepMetrics;if(r.length<2)return null;let i=1-s.lastSatisfaction;if(i<=0)return 0;let f=r.reduce((g,c)=>g+Math.max(0,c.satisfactionDelta),0)/r.length;return f<=0?null:Math.ceil(i/f)}function Cr(s,r){if(s.type!==r.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${s.type} vs ${r.type}`);let i=f=>{switch(f.type){case "sequential":return f.results.reduce((g,c)=>g+c.totalTokens,0);case "supervisor":return f.workerResults.reduce((g,c)=>g+c.totalTokens,0);case "reflect":return f.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0);case "debate":return f.tokensConsumed;case "dag":return Object.values(f.nodeResults).reduce((g,c)=>g+c.totalTokens,0);case "goal":return Object.values(f.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0)}},d={patternType:s.type,stepDelta:ot(r)-ot(s),tokensDelta:i(r)-i(s)};if(s.type==="goal"&&r.type==="goal"){let f=new Set(Object.keys(s.facts)),g=new Set(Object.keys(r.facts)),c=[],R=[],O=[];for(let y of g)f.has(y)?JSON.stringify(s.facts[y])!==JSON.stringify(r.facts[y])&&O.push({key:y,before:s.facts[y],after:r.facts[y]}):c.push(y);for(let y of f)g.has(y)||R.push(y);d.facts={added:c,removed:R,changed:O};}if(s.type==="dag"&&r.type==="dag"){let f=new Set(Object.entries(s.statuses).filter(([,g])=>g==="completed").map(([g])=>g));d.nodesCompleted=Object.entries(r.statuses).filter(([g,c])=>c==="completed"&&!f.has(g)).map(([g])=>g);}if(s.type==="goal"&&r.type==="goal"){let f=new Set(s.completedNodes);d.nodesCompleted=r.completedNodes.filter(g=>!f.has(g));}return d}async function Er(s,r,i){let{createMultiAgentOrchestrator:d}=await import('./multi-agent-orchestrator-ZZ63F75F.js'),f=await r.load(i);if(!f)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let g=structuredClone(f),c=d({...s,checkpointStore:r});return c.restore(g),c}function hn(s,r){let i=Object.keys(r);for(let[O,y]of Object.entries(r))for(let _ of y.deps??[])if(!r[_])throw new Error(`[Directive MultiAgent] DAG pattern "${s}": node "${O}" depends on unknown node "${_}"`);if(!i.some(O=>{let y=r[O]?.deps;return !y||y.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${s}": no root nodes (every node has dependencies)`);let f=Object.create(null),g=Object.create(null);for(let O of i)g[O]=[];for(let[O,y]of Object.entries(r)){f[O]=(y.deps??[]).length;for(let _ of y.deps??[])g[_].push(O);}let c=[];for(let O of i)f[O]===0&&c.push(O);let R=0;for(;c.length>0;){let O=c.shift();R++;for(let y of g[O]??[])f[y]--,f[y]===0&&c.push(y);}if(R!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${s}": cycle detected. Visited ${R}/${i.length} nodes.`)}function ao(s,r,i){return {type:"parallel",handlers:s,merge:r,...i}}function io(s,r){return {type:"sequential",handlers:s,...r}}function uo(s,r,i){return {type:"supervisor",supervisor:s,workers:r,...i}}function lo(s,r,i){return {type:"dag",nodes:s,merge:r??(d=>d.outputs),...i}}function co(s,r,i){return {type:"reflect",handler:s,evaluator:r,...i}}function po(s,r){return {type:"race",handlers:s,...r}}function fo(s,r,i){return {type:"goal",nodes:s,when:r,...i}}function go(){return {select:s=>s}}function mo(s){let r=s?.topN??3;return {select:(i,d)=>[...i].sort((g,c)=>{let R=d[g]?.avgSatisfactionDelta??0;return (d[c]?.avgSatisfactionDelta??0)-R}).slice(0,r)}}function ho(){return {select:(s,r)=>[...s].sort((d,f)=>{let g=r[d],c=r[f];if(!g||g.runs===0)return -1;if(!c||c.runs===0)return 1;let R=g.avgSatisfactionDelta>0?g.tokens/g.runs/g.avgSatisfactionDelta:Number.POSITIVE_INFINITY,O=c.avgSatisfactionDelta>0?c.tokens/c.runs/c.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return R-O})}}function yo(s){switch(s.type){case "parallel":return {type:"parallel",handlers:s.handlers,minSuccess:s.minSuccess,timeout:s.timeout};case "sequential":return {type:"sequential",handlers:s.handlers,continueOnError:s.continueOnError};case "supervisor":return {type:"supervisor",supervisor:s.supervisor,workers:s.workers,maxRounds:s.maxRounds};case "dag":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,deps:d.deps,timeout:d.timeout,priority:d.priority};return {type:"dag",nodes:r,timeout:s.timeout,maxConcurrent:s.maxConcurrent,onNodeError:s.onNodeError}}case "reflect":return {type:"reflect",handler:s.handler,evaluator:s.evaluator,maxIterations:s.maxIterations,onExhausted:s.onExhausted,timeout:s.timeout,threshold:typeof s.threshold=="number"?s.threshold:void 0};case "race":return {type:"race",handlers:s.handlers,timeout:s.timeout,minSuccess:s.minSuccess};case "debate":return {type:"debate",handlers:s.handlers,evaluator:s.evaluator,maxRounds:s.maxRounds,timeout:s.timeout};case "goal":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,produces:d.produces,requires:d.requires,allowRerun:d.allowRerun,priority:d.priority};return {type:"goal",nodes:r,maxSteps:s.maxSteps,timeout:s.timeout}}}}var Dr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function ko(s,r){if(!s||typeof s!="object"||!Dr.has(s.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${s?.type}"`);let i=Object.create(null);for(let[d,f]of Object.entries(s))d!=="__proto__"&&d!=="constructor"&&d!=="prototype"&&(i[d]=f);return {...i,...r}}function To(s,r,i,d){return {when:s,require:f=>{let g=typeof r=="function"?r(f):r,c=typeof i=="function"?i(f):i;return {type:"RUN_AGENT",agent:g,input:c}},priority:d}}function So(s,r,i){return {type:"RUN_AGENT",agent:s,input:r,context:i}}function xo(s,r=`
26
+ Please improve your response.`}function Lr(s,r){let i=r.maxIterations??2,d=r.buildRetryInput??Rr,f=r.onExhausted??"accept-last";if(i<1)throw new Error("[Directive Reflection] maxIterations must be >= 1");return typeof process<"u"&&process.env?.NODE_ENV!=="production"&&i>3&&console.warn("[Directive Reflection] maxIterations > 3 rarely improves quality. Consider using maxIterations <= 3 to avoid unbounded token burn."),async(g,c,R)=>{let O=[],y=c,_=0,I=null;for(let F=0;F<i;F++){let he=Date.now(),ce=await s(g,y,R);I=ce,_+=ce.totalTokens;let Se={input:c,iteration:F,result:ce,history:[...O]},ke=await r.evaluate(ce.output,Se);O.push(ke);let Fe=Date.now()-he;try{r.onIteration?.({iteration:F,passed:ke.passed,feedback:ke.feedback,score:ke.score,durationMs:Fe});}catch{}if(ke.passed)return {...ce,totalTokens:_};if(r.budgetThreshold!==void 0&&_>=r.budgetThreshold)break;F<i-1&&ke.feedback&&(y=d(c,ke.feedback,F));}if(f==="throw")throw new xt({iterations:i,history:O,lastResult:I,totalTokens:_});return {...I,totalTokens:_}}}var At=200,Tr=0;function Gn(){return `bp_${Date.now().toString(36)}_${(++Tr).toString(36)}`}function Fn(s,r,i){for(let d of s)if(d.type===r){if(!d.when)return d;try{if(d.when(i))return d}catch{}}return null}function Ct(){return {pending:[],resolved:[],cancelled:[]}}var Ln=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function Ke(){let s=Date.now().toString(36),r=crypto.randomUUID().slice(0,8);return `ckpt_${s}_${r}`}function fn(s){if(!s||typeof s!="object")return false;for(let d of Object.keys(s))if(Ln.has(d))return false;let r=s;if(r.version!==1||typeof r.id!="string"||r.id.length===0||typeof r.createdAt!="string"||typeof r.systemExport!="string"||r.timelineExport!==null&&typeof r.timelineExport!="string"||!r.localState||typeof r.localState!="object")return false;for(let d of Object.keys(r.localState))if(Ln.has(d))return false;let i=r.localState;return !(i.type!=="single"&&i.type!=="multi"||r.orchestratorType!=="single"&&r.orchestratorType!=="multi")}var Bn=class{store=new Map;order=[];maxCheckpoints;retentionMs;preserveLabeled;constructor(r){if(this.maxCheckpoints=r?.maxCheckpoints??100,this.retentionMs=r?.retentionMs??Number.POSITIVE_INFINITY,this.preserveLabeled=r?.preserveLabeled??false,!Number.isFinite(this.maxCheckpoints)||this.maxCheckpoints<1)throw new Error(`[Directive Checkpoint] maxCheckpoints must be >= 1, got ${this.maxCheckpoints}`)}async save(r){if(!fn(r))throw new Error("[Directive Checkpoint] Invalid checkpoint data");for(;this.order.length>=this.maxCheckpoints&&this.evictOldest(););let i=this.order.indexOf(r.id);return i>=0&&this.order.splice(i,1),this.store.set(r.id,r),this.order.push(r.id),r.id}async load(r){return this.store.get(r)??null}async list(){return this.order.map(r=>{let i=this.store.get(r);return {id:i.id,label:i.label,createdAt:i.createdAt}})}async delete(r){if(!this.store.has(r))return false;this.store.delete(r);let i=this.order.indexOf(r);return i>=0&&this.order.splice(i,1),true}async clear(){this.store.clear(),this.order.length=0;}async prune(){if(!Number.isFinite(this.retentionMs))return 0;let r=Date.now()-this.retentionMs,i=0,d=[];for(let f of this.order){let g=this.store.get(f);if(!g)continue;if(new Date(g.createdAt).getTime()>=r)break;this.preserveLabeled&&g.label||d.push(f);}for(let f of d){this.store.delete(f);let g=this.order.indexOf(f);g>=0&&this.order.splice(g,1),i++;}return i}evictOldest(){if(this.preserveLabeled)for(let i=0;i<this.order.length;i++){let d=this.order[i],f=this.store.get(d);if(f&&!f.label)return this.order.splice(i,1),this.store.delete(d),true}let r=this.order.shift();return r?(this.store.delete(r),true):false}};var gn=class{buffer=[];maxSize;strategy;pullWaiters=[];pushWaiters=[];closed=false;droppedCount=0;constructor(r="buffer",i=1e3){this.strategy=r,this.maxSize=i;}async push(r){if(this.closed)return false;let i=this.pullWaiters.shift();if(i)return i(r),true;if(this.buffer.length>=this.maxSize)switch(this.strategy){case "drop":return this.droppedCount++,false;case "block":if(await new Promise(d=>{this.pushWaiters.push(d);}),this.closed)return false;break;}return this.buffer.push(r),true}async pull(){let r=this.pushWaiters.shift();return r&&r(),this.buffer.length>0?this.buffer.shift():this.closed?null:new Promise(i=>{this.pullWaiters.push(i);})}close(){this.closed=true;for(let r of this.pullWaiters)r(null);this.pullWaiters=[];for(let r of this.pushWaiters)r();this.pushWaiters=[];}getDroppedCount(){return this.droppedCount}};function Kr(s,r={}){let{streamingGuardrails:i=[]}=r;return (d,f,g={})=>{let{signal:c,backpressure:R="buffer",bufferSize:O=1e3,guardrailCheckInterval:y=50,stopOnGuardrail:_=true}=g;if(y<=0||!Number.isFinite(y))throw new Error(`[Directive Streaming] guardrailCheckInterval must be a positive number, got ${y}`);let I=new gn(R,O),F=new AbortController,he="",ce=0,Se=false,ke=Date.now(),Fe;c&&(Fe=()=>F.abort(),c.addEventListener("abort",Fe));let Wt=()=>{Fe&&c&&c.removeEventListener("abort",Fe);};async function Et(){for(let Z of i)try{let we=await Z.check(he,ce);if(!we.passed){let Le=Z.stopOnFail!==!1,Re={type:"guardrail_triggered",guardrailName:Z.name,reason:we.reason??"Guardrail check failed",partialOutput:he,stopped:Le};return await I.push(Re),Le&&(typeof _=="function"?_:()=>_)(Re)&&(Se=!0,F.abort()),Re}}catch{}return null}let at=(async()=>{await I.push({type:"progress",phase:"starting",message:"Starting agent"});try{let Z=await s(d,f,{signal:F.signal,onToken:async Re=>{Se||(ce++,he+=Re,await I.push({type:"token",data:Re,tokenCount:ce}),ce%y===0&&await Et());},onToolStart:async(Re,Ye,Be)=>{await I.push({type:"progress",phase:"tool_calling",message:`Calling ${Re}`}),await I.push({type:"tool_start",tool:Re,toolCallId:Ye,arguments:Be});},onToolEnd:async(Re,Ye,Be)=>{await I.push({type:"tool_end",tool:Re,toolCallId:Ye,result:Be}),await I.push({type:"progress",phase:"generating",message:"Continuing generation"});},onMessage:async Re=>{await I.push({type:"message",message:Re});}});await Et();let we=Date.now()-ke,Le=I.getDroppedCount();return await I.push({type:"done",totalTokens:Z.totalTokens,duration:we,droppedTokens:Le}),I.close(),Z}catch(Z){let we={type:"error",error:Z instanceof Error?Z:new Error(String(Z)),partialOutput:he||void 0};throw await I.push(we),I.close(),Z}finally{Wt();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){let Z=await I.pull();return Z===null?{done:true,value:void 0}:{done:false,value:Z}}}}},result:at,abort:()=>F.abort()}}}function Vr(s){let{checkFn:r,threshold:i=.8,stopOnFail:d=true}=s;return {name:"toxicity-streaming",stopOnFail:d,async check(f){let g=await r(f);return g>i?{passed:false,reason:`Toxicity score ${g.toFixed(2)} exceeds threshold ${i}`,severity:"critical"}:{passed:true}}}}function Yr(s){let{maxTokens:r,warnAt:i,stopOnFail:d=true}=s,f=false;return {name:"length-streaming",stopOnFail:d,check(g,c){return c>=r?{passed:false,reason:`Output exceeded maximum length of ${r} tokens`,severity:"error"}:i&&c>=i&&!f?(f=true,{passed:true,warning:`Approaching maximum length: ${c}/${r} tokens`,severity:"warning"}):{passed:true}}}}function Xr(s){let{patterns:r,stopOnFail:i=true}=s;return {name:"pattern-streaming",stopOnFail:i,check(d){for(let{regex:f,name:g}of r)if(f.lastIndex=0,f.test(d))return {passed:false,reason:`Detected ${g} pattern in output`,severity:"error"};return {passed:true}}}}function Zr(s,r={}){let{name:i="combined-streaming",stopOnFirstFail:d=true}=r;return {name:i,stopOnFail:d,async check(f,g){let c=[];for(let R of s){let O=await R.check(f,g);if(!O.passed){if(d)return {...O,reason:`[${R.name}] ${O.reason}`};c.push(`[${R.name}] ${O.reason??"failed"}`);}}return c.length>0?{passed:false,reason:c.join("; ")}:{passed:true}}}}function Qr(s,r,i={}){let{minTokens:d=0,stopOnFail:f=true}=i;return {name:s,stopOnFail:f,async check(g,c){if(c<d)return {passed:true};let R=await r({output:g,agentName:"streaming",input:"",messages:[]},{agentName:"streaming",input:"",facts:{}});return {passed:R.passed,reason:R.reason,severity:R.passed?void 0:"error"}}}}async function eo(s){let r="";for await(let i of s)i.type==="token"&&(r+=i.data);return r}async function*to(s,r){for await(let i of s)await r(i),yield i;}async function*no(s,r){let i=new Set(r);for await(let d of s)i.has(d.type)&&(yield d);}async function*ro(s,r){for await(let i of s)yield await r(i);}var Sr=1e4;function Hn(s){if(s.length===0)return {stream:{[Symbol.asyncIterator](){let _={done:true,value:void 0};return {async next(){return _},async return(){return _}}}},getDroppedCount:()=>0};let r=[],i=[],d=s.length,f=false,g=0;function c(y){if(f)return;let _=i.shift();if(_){_(y);return}r.length<Sr?r.push(y):g++;}function R(){if(d--,d<=0){f=true;for(let y of i)y(null);i.length=0;}}for(let y of s)(async()=>{try{for await(let _ of y.stream)c({chunk:_,agentId:y.agentId});}catch(_){c({chunk:{type:"error",error:_ instanceof Error?_:new Error(String(_))},agentId:y.agentId});}finally{R();}})();return {stream:{[Symbol.asyncIterator](){return {async next(){return r.length>0?{done:false,value:r.shift()}:f?{done:true,value:void 0}:new Promise(y=>{i.push(_=>{y(_===null?{done:true,value:void 0}:{done:false,value:_});});})},return(){f=true,r.length=0;for(let y of i)y(null);return i.length=0,Promise.resolve({done:true,value:void 0})}}}},getDroppedCount:()=>g}}function mn(s,r){if(Object.is(s,r))return true;if(typeof s!=typeof r||s===null||r===null||typeof s!="object")return false;if(Array.isArray(s)){if(!Array.isArray(r)||s.length!==r.length)return false;for(let c=0;c<s.length;c++)if(s[c]!==r[c])return false;return true}let i=s,d=r,f=Object.keys(i),g=Object.keys(d);if(f.length!==g.length)return false;for(let c of f)if(i[c]!==d[c])return false;return true}var Ee=class{count;maxPermits;queue=[];constructor(r){if(r<1||!Number.isFinite(r))throw new Error(`[Directive Semaphore] Invalid max permits: ${r}. Must be a finite number >= 1.`);this.maxPermits=r,this.count=r;}createReleaseFn(){let r=false;return ()=>{r||(r=true,this.release());}}async acquire(r){if(r?.aborted)throw new Error("[Directive Semaphore] Aborted before acquiring permit");return this.count>0?(this.count--,this.createReleaseFn()):new Promise((i,d)=>{let f,g={resolve:c=>{f&&r&&r.removeEventListener("abort",f),i(c);},reject:d};this.queue.push(g),r&&(f=()=>{let c=this.queue.indexOf(g);c>=0&&(this.queue.splice(c,1),d(new Error("[Directive Semaphore] Aborted while waiting for permit")));},r.addEventListener("abort",f,{once:true}));})}tryAcquire(){return this.count>0?(this.count--,this.createReleaseFn()):null}release(){this.count++;let r=this.queue.shift();r&&(this.count--,r.resolve(this.createReleaseFn()));}get available(){return this.count}get waiting(){return this.queue.length}get max(){return this.maxPermits}drain(){let r=new Error("[Directive Semaphore] Semaphore drained - all pending acquisitions rejected"),i=this.queue.splice(0,this.queue.length);for(let d of i)d.reject(r);this.count=this.maxPermits;}};function ot(s){switch(s.type){case "sequential":return s.step;case "supervisor":return s.round;case "reflect":return s.iteration;case "debate":return s.round;case "dag":return s.completedCount;case "goal":return s.step}}function xr(s){let r=ot(s),i=s.stepsTotal??null;switch(s.type){case "sequential":{let d=s.results.reduce((c,R)=>c+R.totalTokens,0),f=s.results.length>0?d/s.results.length:0,g=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:f>0&&g!=null?Math.round(f*g):null,estimatedStepsRemaining:g}}case "supervisor":{let d=s.workerResults.reduce((g,c)=>g+c.totalTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "reflect":{let d=s.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0),f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "debate":{let d=s.tokensConsumed,f=i!=null?i-r:null;return {percentage:i!=null&&i>0?Math.round(r/i*100):0,stepsCompleted:r,stepsTotal:i,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:f}}case "dag":{let d=i??Object.keys(s.statuses).length,f=s.completedCount,g=Object.values(s.nodeResults).reduce((O,y)=>O+y.totalTokens,0),c=f>0?g/f:0,R=d-f;return {percentage:d>0?Math.round(f/d*100):0,stepsCompleted:f,stepsTotal:d,tokensConsumed:g,estimatedTokensRemaining:R>0?Math.round(c*R):0,estimatedStepsRemaining:R}}case "goal":{let d=Object.values(s.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0),f=s.lastSatisfaction;return {percentage:Math.round(f*100),stepsCompleted:r,stepsTotal:i??null,tokensConsumed:d,estimatedTokensRemaining:null,estimatedStepsRemaining:s.stepMetrics.length>0?Ar(s):null}}}}function Ar(s){let r=s.stepMetrics;if(r.length<2)return null;let i=1-s.lastSatisfaction;if(i<=0)return 0;let f=r.reduce((g,c)=>g+Math.max(0,c.satisfactionDelta),0)/r.length;return f<=0?null:Math.ceil(i/f)}function Cr(s,r){if(s.type!==r.type)throw new Error(`[Directive Checkpoint] Cannot diff different pattern types: ${s.type} vs ${r.type}`);let i=f=>{switch(f.type){case "sequential":return f.results.reduce((g,c)=>g+c.totalTokens,0);case "supervisor":return f.workerResults.reduce((g,c)=>g+c.totalTokens,0);case "reflect":return f.history.reduce((g,c)=>g+c.producerTokens+c.evaluatorTokens,0);case "debate":return f.tokensConsumed;case "dag":return Object.values(f.nodeResults).reduce((g,c)=>g+c.totalTokens,0);case "goal":return Object.values(f.nodeOutputs).reduce((g,c)=>g+c.totalTokens,0)}},d={patternType:s.type,stepDelta:ot(r)-ot(s),tokensDelta:i(r)-i(s)};if(s.type==="goal"&&r.type==="goal"){let f=new Set(Object.keys(s.facts)),g=new Set(Object.keys(r.facts)),c=[],R=[],O=[];for(let y of g)f.has(y)?JSON.stringify(s.facts[y])!==JSON.stringify(r.facts[y])&&O.push({key:y,before:s.facts[y],after:r.facts[y]}):c.push(y);for(let y of f)g.has(y)||R.push(y);d.facts={added:c,removed:R,changed:O};}if(s.type==="dag"&&r.type==="dag"){let f=new Set(Object.entries(s.statuses).filter(([,g])=>g==="completed").map(([g])=>g));d.nodesCompleted=Object.entries(r.statuses).filter(([g,c])=>c==="completed"&&!f.has(g)).map(([g])=>g);}if(s.type==="goal"&&r.type==="goal"){let f=new Set(s.completedNodes);d.nodesCompleted=r.completedNodes.filter(g=>!f.has(g));}return d}async function Er(s,r,i){let{createMultiAgentOrchestrator:d}=await import('./multi-agent-orchestrator-PI7X7ZGP.js'),f=await r.load(i);if(!f)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${i}`);let g=structuredClone(f),c=d({...s,checkpointStore:r});return c.restore(g),c}function hn(s,r){let i=Object.keys(r);for(let[O,y]of Object.entries(r))for(let _ of y.deps??[])if(!r[_])throw new Error(`[Directive MultiAgent] DAG pattern "${s}": node "${O}" depends on unknown node "${_}"`);if(!i.some(O=>{let y=r[O]?.deps;return !y||y.length===0}))throw new Error(`[Directive MultiAgent] DAG pattern "${s}": no root nodes (every node has dependencies)`);let f=Object.create(null),g=Object.create(null);for(let O of i)g[O]=[];for(let[O,y]of Object.entries(r)){f[O]=(y.deps??[]).length;for(let _ of y.deps??[])g[_].push(O);}let c=[];for(let O of i)f[O]===0&&c.push(O);let R=0;for(;c.length>0;){let O=c.shift();R++;for(let y of g[O]??[])f[y]--,f[y]===0&&c.push(y);}if(R!==i.length)throw new Error(`[Directive MultiAgent] DAG pattern "${s}": cycle detected. Visited ${R}/${i.length} nodes.`)}function ao(s,r,i){return {type:"parallel",handlers:s,merge:r,...i}}function io(s,r){return {type:"sequential",handlers:s,...r}}function uo(s,r,i){return {type:"supervisor",supervisor:s,workers:r,...i}}function lo(s,r,i){return {type:"dag",nodes:s,merge:r??(d=>d.outputs),...i}}function co(s,r,i){return {type:"reflect",handler:s,evaluator:r,...i}}function po(s,r){return {type:"race",handlers:s,...r}}function fo(s,r,i){return {type:"goal",nodes:s,when:r,...i}}function go(){return {select:s=>s}}function mo(s){let r=s?.topN??3;return {select:(i,d)=>[...i].sort((g,c)=>{let R=d[g]?.avgSatisfactionDelta??0;return (d[c]?.avgSatisfactionDelta??0)-R}).slice(0,r)}}function ho(){return {select:(s,r)=>[...s].sort((d,f)=>{let g=r[d],c=r[f];if(!g||g.runs===0)return -1;if(!c||c.runs===0)return 1;let R=g.avgSatisfactionDelta>0?g.tokens/g.runs/g.avgSatisfactionDelta:Number.POSITIVE_INFINITY,O=c.avgSatisfactionDelta>0?c.tokens/c.runs/c.avgSatisfactionDelta:Number.POSITIVE_INFINITY;return R-O})}}function yo(s){switch(s.type){case "parallel":return {type:"parallel",handlers:s.handlers,minSuccess:s.minSuccess,timeout:s.timeout};case "sequential":return {type:"sequential",handlers:s.handlers,continueOnError:s.continueOnError};case "supervisor":return {type:"supervisor",supervisor:s.supervisor,workers:s.workers,maxRounds:s.maxRounds};case "dag":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,deps:d.deps,timeout:d.timeout,priority:d.priority};return {type:"dag",nodes:r,timeout:s.timeout,maxConcurrent:s.maxConcurrent,onNodeError:s.onNodeError}}case "reflect":return {type:"reflect",handler:s.handler,evaluator:s.evaluator,maxIterations:s.maxIterations,onExhausted:s.onExhausted,timeout:s.timeout,threshold:typeof s.threshold=="number"?s.threshold:void 0};case "race":return {type:"race",handlers:s.handlers,timeout:s.timeout,minSuccess:s.minSuccess};case "debate":return {type:"debate",handlers:s.handlers,evaluator:s.evaluator,maxRounds:s.maxRounds,timeout:s.timeout};case "goal":{let r=Object.create(null);for(let[i,d]of Object.entries(s.nodes))r[i]={handler:d.handler,produces:d.produces,requires:d.requires,allowRerun:d.allowRerun,priority:d.priority};return {type:"goal",nodes:r,maxSteps:s.maxSteps,timeout:s.timeout}}}}var Dr=new Set(["parallel","sequential","supervisor","dag","reflect","race","debate","goal"]);function ko(s,r){if(!s||typeof s!="object"||!Dr.has(s.type))throw new Error(`[Directive] patternFromJSON: invalid or unknown pattern type "${s?.type}"`);let i=Object.create(null);for(let[d,f]of Object.entries(s))d!=="__proto__"&&d!=="constructor"&&d!=="prototype"&&(i[d]=f);return {...i,...r}}function To(s,r,i,d){return {when:s,require:f=>{let g=typeof r=="function"?r(f):r,c=typeof i=="function"?i(f):i;return {type:"RUN_AGENT",agent:g,input:c}},priority:d}}function So(s,r,i){return {type:"RUN_AGENT",agent:s,input:r,context:i}}function xo(s,r=`
27
27
 
28
28
  `){return s.map(i=>typeof i.output=="string"?i.output:safeStringify(i.output)).join(r)}function Ao(s,r){if(s.length===0)throw new Error("[Directive MultiAgent] No results to pick from");return s.reduce((i,d)=>r(d)>r(i)?d:i)}function Co(s){return s.map(r=>r.output)}function Eo(s){return s.reduce((r,i)=>r+i.totalTokens,0)}function Do(...s){if(s.length===0)throw new Error("[Directive MultiAgent] composePatterns requires at least one pattern");return async(r,i)=>{let d=i,f;for(let g of s){switch(g.type){case "parallel":{let c=g,R=c.handlers.map(()=>d);f=await r.runParallel(c.handlers,R,c.merge,{minSuccess:c.minSuccess,timeout:c.timeout});break}case "sequential":{let c=g,R=await r.runSequential(c.handlers,d,{transform:c.transform}),O=R[R.length-1];f=c.extract?c.extract(O?.output):O?.output;break}case "supervisor":{let c=g,R=c.maxRounds??5;if(R<1||!Number.isFinite(R))throw new Error("[Directive MultiAgent] supervisor maxRounds must be >= 1");let O=[],y=await r.runAgent(c.supervisor,d);for(let _=0;_<R;_++){let I=y.output,F;if(typeof I=="string")try{F=JSON.parse(I);}catch{try{let ce=I.replace(/```(?:json|JSON)?\s*\n?/g,"").replace(/<[^>]+>/g," "),Se=a(ce);if(Se&&typeof Se=="object"&&"action"in Se)F=Se;else break}catch{break}}else if(I&&typeof I=="object"&&"action"in I)F=I;else break;if(F.action==="complete"||!F.worker||!c.workers.includes(F.worker))break;let he=await r.runAgent(F.worker,F.workerInput??"");O.push(he),y=await r.runAgent(c.supervisor,`Worker ${F.worker} completed with result: ${safeStringify(he.output)}`);}f=c.extract?c.extract(y.output,O):y.output;break}case "dag":{let c=g,R={input:d,outputs:Object.create(null),statuses:Object.create(null),errors:Object.create(null),results:Object.create(null)};typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.debug("[Directive MultiAgent] composePatterns: DAG nodes executed sequentially \u2014 use runPattern() for full parallel DAG execution");let O=Object.keys(c.nodes);for(let y of O){let _=c.nodes[y];R.statuses[y]="running";try{let I=d;if(_.transform)I=_.transform(R);else if(_.deps&&_.deps.length>0){let he=Object.create(null);for(let ce of _.deps)R.outputs[ce]!==void 0&&(he[ce]=R.outputs[ce]);I=JSON.stringify(he);}let F=await r.runAgent(_.handler,I);R.outputs[y]=F.output,R.results[y]=F,R.statuses[y]="completed";}catch(I){if(R.statuses[y]="error",R.errors[y]=I instanceof Error?I.message:String(I),c.onNodeError==="fail")throw I}}f=await c.merge(R);break}case "reflect":{let c=g,R=c.maxIterations??2,O=c.parseEvaluation??(F=>{if(typeof F=="string")try{return JSON.parse(F)}catch{return {passed:false,feedback:F}}return F&&typeof F=="object"&&"passed"in F?F:{passed:false,feedback:"Invalid evaluator output"}}),y=c.buildRetryInput??((F,he)=>`${F}
29
29
 
@@ -63,5 +63,5 @@ ${Object.entries(S).map(([$,ue])=>` - ${$}: ${ue}`).join(`
63
63
  ${Object.entries(S).map(([$,ue])=>` - ${$}: ${ue}`).join(`
64
64
  `)}`)));});});await Promise.all(q).catch(()=>{});let B=x[0],M=B.agentId,N=new Set(x.map(v=>v.agentId)),G=D.filter(v=>!N.has(v)&&!(v in S));P&&(P.record({type:"race_winner",timestamp:Date.now(),snapshotId:null,patternId:l,winnerId:M,durationMs:Date.now()-a}),G.length>0&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:l,cancelledIds:G,reason:"winner_found"}));let A=e.extract?e.extract(B.result):B.result.output,m=n>1?x.map(v=>({agentId:v.agentId,result:e.extract?e.extract(v.result):v.result.output})):void 0;return {winnerId:M,result:A,allResults:m}}catch(E){throw T=E instanceof Error?E:new Error(String(E)),P&&P.record({type:"race_cancelled",timestamp:Date.now(),snapshotId:null,patternId:l,cancelledIds:D,reason:u.signal.aborted?"timeout":"all_failed"}),E}finally{p&&clearTimeout(p),h&&e.signal&&e.signal.removeEventListener("abort",h),o&&J("onPatternComplete",{patternId:l,patternType:"race",durationMs:Date.now()-a,timestamp:Date.now(),error:T});}}async function qt(e,t,o,n){let{handlers:a,evaluator:l,maxRounds:u=2,extract:p,parseJudgement:h}=e;if(a.length<2)throw new Error("[Directive MultiAgent] debate requires at least 2 handlers");if(u<1||!Number.isFinite(u))throw new Error("[Directive MultiAgent] debate maxRounds must be >= 1");let T=e.signal,S,D;if(e.timeout&&!T){let w=new AbortController;S=setTimeout(()=>w.abort(),e.timeout),T=w.signal;}else if(e.timeout&&T){let w=new AbortController;S=setTimeout(()=>w.abort(),e.timeout),D=()=>w.abort(),T.addEventListener("abort",D,{once:true}),T=w.signal;}let q=h??(w=>{if(typeof w=="string")try{let C=JSON.parse(w);return C&&typeof C=="object"&&typeof C.winnerId=="string"?C:(ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: parsed JSON missing winnerId, falling back to first agent"),{winnerId:a[0]})}catch{return ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: output is not valid JSON, falling back to first agent"),{winnerId:a[0]}}return w&&typeof w=="object"&&"winnerId"in w&&typeof w.winnerId=="string"?w:(ee&&console.warn("[Directive MultiAgent] defaultParseJudgement: unrecognized output format, falling back to first agent"),{winnerId:a[0]})}),k=n?.rounds?[...n.rounds]:[],x=n?.currentInput??t,B=n?.lastWinnerId??a[0],M=n?.lastWinnerOutput??void 0,N=n?.round??0,G=e.checkpoint,A=G?.store??we,m=G?.everyN??5,v=G?.labelPrefix??"debate",L=o??"__inline_debate",H=Date.now(),j=n?.tokensConsumed??0;o&&J("onPatternStart",{patternId:L,patternType:"debate",input:t,timestamp:H});let b;try{for(let C=N;C<u&&!T?.aborted;C++){let U=a.map(async pe=>{let De=await de(pe,x,{signal:T,patternId:L});return j+=De.totalTokens,{agentId:pe,output:De.output}}),$=await Promise.all(U);if(T?.aborted)break;let ue=JSON.stringify({round:C+1,totalRounds:u,proposals:$.map(pe=>({agentId:pe.agentId,proposal:pe.output}))}),te=await de(l,ue,{signal:T,patternId:L});j+=te.totalTokens;let re=q(te.output);if(a.includes(re.winnerId)||(re.winnerId=a[0]),k.push({proposals:$,judgement:re}),P&&P.record({type:"debate_round",timestamp:Date.now(),snapshotId:null,patternId:L,round:C+1,totalRounds:u,winnerId:re.winnerId,score:re.score,agentCount:a.length}),B=re.winnerId,M=$.find(pe=>pe.agentId===re.winnerId)?.output??$[0].output,G&&A&&C>N&&(C-N)%m===0){let pe={type:"debate",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${v}:round-${C+1}`,patternId:L,stepsTotal:u,round:C+1,currentInput:x,rounds:[...k],lastWinnerId:B,lastWinnerOutput:M,tokensConsumed:j};await dt(pe,A,G);}C<u-1&&re.feedback&&(x=`Previous round feedback: ${re.feedback}
65
65
 
66
- Original task: ${t}`);}if(k.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let w=p?p(M):M;return {winnerId:B,result:w,rounds:k}}catch(w){throw b=w instanceof Error?w:new Error(String(w)),w}finally{S&&clearTimeout(S),D&&e.signal&&e.signal.removeEventListener("abort",D),o&&J("onPatternComplete",{patternId:L,patternType:"debate",durationMs:Date.now()-H,timestamp:Date.now(),error:b});}}let or=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function pt(e,t){for(let o of Object.keys(t))or.has(o)||(e[o]=t[o]);}function sr(e,t){let o=Object.create(null);for(let[h,T]of Object.entries(t))for(let S of T.produces)o[S]||(o[S]=[]),o[S].push(h);let n=Object.keys(t),a=Object.create(null),l=Object.create(null);for(let h of n)a[h]=0,l[h]=[];for(let[h,T]of Object.entries(t))for(let S of T.requires??[]){let D=o[S];if(D)for(let E of D)E!==h&&(l[E].push(h),a[h]=(a[h]??0)+1);}let u=[];for(let h of n)a[h]===0&&u.push(h);let p=0;for(;u.length>0;){let h=u.shift();p++;for(let T of l[h]??[])a[T]--,a[T]===0&&u.push(T);}if(p!==n.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${p}/${n.length} nodes.`)}function ar(e,t){let o=Object.create(null);for(let[n,a]of Object.entries(t))for(let l of a.produces)o[l]||(o[l]=[]),o[l].push(n);for(let[n,a]of Object.entries(o))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${n}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function be(e,...t){if(e)try{return e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}async function ir(e,...t){if(e)try{return await e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}function on(e,t,o){let n=t.slice(-3),a=n.length>0?n.reduce((p,h)=>p+h.satisfactionDelta,0)/n.length:0,l=null;a>0&&e<1&&(l=Math.ceil((1-e)/a));let u=false;if(t.length>=6){let p=t.slice(-3),h=t.slice(-6,-3),T=p.reduce((D,E)=>D+E.satisfactionDelta,0)/3,S=h.reduce((D,E)=>D+E.satisfactionDelta,0)/3;u=T<S*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:l,decelerating:u}}function yt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Gt(e,t,o,n){let{nodes:a,when:l,satisfaction:u,maxSteps:p=50,extract:h,selectionStrategy:T,relaxation:S,onStep:D,onStall:E}=e,q=Object.create(null);for(let[Q,ne]of Object.entries(a))q[Q]={...ne};if(Object.keys(q).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let x=o??"__goal";for(let[Q,ne]of Object.entries(q))if(!W[ne.handler]&&!Y[ne.handler])throw new Error(`[Directive MultiAgent] goal node "${Q}" references unregistered handler "${ne.handler}"`);sr(x,q),ar(x,q);for(let[Q,ne]of Object.entries(q))ne.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Q}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let B=e.signal,M,N,G=e.timeout??3e5;if(G&&!B){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),B=Q.signal;}else if(G&&B){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),N=()=>Q.abort(),B.addEventListener("abort",N,{once:true}),B=Q.signal;}let A=Date.now();if(P){let Q=Object.values(q).map(ne=>ne.handler);P.record({type:"pattern_start",timestamp:A,snapshotId:null,patternId:x,patternType:"goal",handlers:Q,taskIds:Q.filter(ne=>Y[ne]!=null)});}J("onPatternStart",{patternId:x,patternType:"goal",input:typeof t=="string"?t:JSON.stringify(t),timestamp:A});let m=Object.create(null);n?pt(m,n.facts):typeof t=="string"?m.input=t:pt(m,t);let v=n?[...n.executionOrder]:[],L=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.nodeOutputs))L[Q]={output:ne.output,totalTokens:ne.totalTokens};let H=n?[...n.stepMetrics]:[],j=n?[...n.relaxations]:[],b=new Set(n?.completedNodes??[]),w=new Map(n?Object.entries(n.failedNodes).map(([Q,ne])=>[Q,ne]):[]),C=new Map(n?Object.entries(n.nodeInputHashes):[]),U=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.agentMetrics))U[Q]={runs:ne.runs,avgSatisfactionDelta:ne.runs>0?ne.totalDelta/ne.runs:0,tokens:ne.tokens,totalDelta:ne.totalDelta};let $=n?.stallSteps??0,ue=n?.appliedRelaxationTiers??0,te=n?.lastSatisfaction??0,re,tt=false,pe=n?.step??0,De=e.checkpoint,dr=De?.everyN??5,En=De?.store??we,pr=De?.labelPrefix??"goal",Dn,fr=3;try{for(let ae=pe;ae<p;ae++){if(be(l,m)===!0){tt=!0;let V=Date.now()-A,z=Object.values(L).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!0,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j}}if(B?.aborted){let V=Date.now()-A,z=Object.values(L).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j,error:"Aborted or timed out"}}let nt=[];for(let[V,z]of Object.entries(q)){if((w.get(V)??0)>=fr)continue;let oe=z.requires??[];if(oe.every(le=>m[le]!=null)){if(b.has(V)){if(!z.allowRerun)continue;let le=JSON.stringify(oe.map(ye=>m[ye]));if(C.get(V)===le)continue}nt.push(V);}}let He=nt;if(T&&nt.length>0){let V=u?be(u,m)??0:be(l,m)===!0?1:0,z=yt(V),oe=on(z,H,ae),fe=Object.create(null);for(let[ye,se]of Object.entries(U))fe[ye]={runs:se.runs,avgSatisfactionDelta:se.runs>0?se.totalDelta/se.runs:0,tokens:se.tokens};let le=T.select(nt,fe,oe);He=le&&le.length>0?le:nt;}if(He.sort((V,z)=>(q[z].priority??0)-(q[V].priority??0)),be(D,ae,{...m},He),He.length===0){$++;let V=!1;if(S)for(let z=ue;z<S.length;z++){let oe=S[z],fe=oe.afterStallSteps??3;if($>=fe){let le=oe.strategy;switch(le.type){case "allow_rerun":for(let ye of le.nodes)b.delete(ye),C.delete(ye);break;case "alternative_nodes":for(let ye of le.nodes){let se=`__relaxation_${z}_${ye.handler}`;q[se]={...ye};}break;case "inject_facts":pt(m,le.facts);break;case "accept_partial":{let ye=Date.now()-A,se=Object.values(L).reduce((ge,_e)=>ge+_e.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:se,durationMs:ye,stepMetrics:H,relaxations:j,error:`Accepted partial result via relaxation tier "${oe.label}"`}}case "custom":{let ye=be(u,m)??0,se={step:ae,facts:{...m},metrics:on(yt(ye),H,ae),completedNodes:new Set(b),failedNodes:new Map(w)};await ir(le.apply,se);break}}j.push({step:ae,tierIndex:z,label:oe.label,strategy:le.type}),ue=z+1,$=0,V=!0;break}}if(!V){let z=be(u,m)??0,oe=on(yt(z),H,ae);if(be(E,ae,oe),!S||ue>=S.length){let fe=Date.now()-A,le=Object.values(L).reduce((ye,se)=>ye+se.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:le,durationMs:fe,stepMetrics:H,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}$=0;let gr=Date.now(),mr=u?be(u,m)??0:be(l,m)===!0?1:0,hr=yt(mr),On=0,ft=[],br=He.map(async V=>{let z=q[V],oe=z.requires??[],fe=JSON.stringify(oe.map(se=>m[se]));C.set(V,fe);let le,ye=be(z.buildInput,m);if(ye!=null)le=ye;else {let se=Object.create(null);for(let ge of oe)m[ge]!=null&&(se[ge]=m[ge]);Object.keys(se).length>0?le=JSON.stringify(se):m.input!=null?le=String(m.input):le=JSON.stringify(m);}try{let se=await de(z.handler,le,{signal:B??void 0,patternId:x});if(L[V]=se,v.push(V),b.add(V),w.delete(V),z.extractOutput){let ge=be(z.extractOutput,se);ge&&(pt(m,ge),ft.push(...Object.keys(ge)));}else {let ge=se.output;if(ge&&typeof ge=="object")pt(m,ge),ft.push(...Object.keys(ge));else if(typeof ge=="string")try{let _e=JSON.parse(ge);if(_e&&typeof _e=="object"&&!Array.isArray(_e))pt(m,_e),ft.push(...Object.keys(_e));else for(let Pn of z.produces)m[Pn]=ge,ft.push(Pn);}catch{for(let _e of z.produces)m[_e]=ge,ft.push(_e);}}return On+=se.totalTokens,{nodeId:V,success:!0}}catch(se){let ge=(w.get(V)??0)+1;return w.set(V,ge),{nodeId:V,success:!1,error:se}}});await Promise.allSettled(br);let yr=u?be(u,m)??0:be(l,m)===!0?1:0,Ft=yt(yr),Lt=Ft-hr;if(H.push({step:ae,durationMs:Date.now()-gr,nodesRun:[...He],factsProduced:ft,satisfaction:Ft,satisfactionDelta:Lt,tokensConsumed:On}),P)for(let V of He){let z=q[V];P.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:z.handler,step:ae,nodeId:V,satisfaction:Ft,satisfactionDelta:Lt});}for(let V of He){let z=q[V];U[z.handler]||(U[z.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let oe=U[z.handler];oe.runs++,oe.totalDelta+=Lt,oe.tokens+=L[V]?.totalTokens??0;}if(te=Ft,Lt<=0?$++:$=0,De&&En&&ae>pe&&(ae-pe)%dr===0){let V={type:"goal",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${pr}:step-${ae}`,patternId:x,stepsTotal:p,step:ae+1,facts:structuredClone(m),completedNodes:[...b],failedNodes:Object.fromEntries(w),nodeInputHashes:Object.fromEntries(C),nodeOutputs:Object.fromEntries(Object.entries(L).map(([oe,fe])=>[oe,{output:fe.output,totalTokens:fe.totalTokens}])),executionOrder:[...v],stepMetrics:[...H],relaxations:[...j],appliedRelaxationTiers:ue,stallSteps:$,lastSatisfaction:te,agentMetrics:Object.fromEntries(Object.entries(U).map(([oe,fe])=>[oe,{runs:fe.runs,totalDelta:fe.totalDelta,tokens:fe.tokens}]))},z=await dt(V,En,De);z&&(Dn=z);}}let Q=Date.now()-A,ne=Object.values(L).reduce((ae,nt)=>ae+nt.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:p,totalTokens:ne,durationMs:Q,stepMetrics:H,relaxations:j,error:`Max steps (${p}) exhausted without achieving goal`}}catch(Q){throw re=Q instanceof Error?Q:new Error(String(Q)),Q}finally{if(M!=null&&clearTimeout(M),N&&e.signal&&e.signal.removeEventListener("abort",N),P){let Q=Object.values(L).reduce((ne,ae)=>ne+ae.totalTokens,0);P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:x,patternType:"goal",durationMs:Date.now()-A,achieved:tt,stepMetrics:H,relaxations:j,totalTokens:Q,...re?{error:re.message}:{}});}J("onPatternComplete",{patternId:x,patternType:"goal",durationMs:Date.now()-A,timestamp:Date.now(),error:re});}}function ur(e){if(!Z)return [];let t=[],o=new Set;if(o.add(e),Z.equivalencyGroups){for(let n of Object.values(Z.equivalencyGroups))if(n.includes(e))for(let a of n)!o.has(a)&&W[a]&&(t.push(a),o.add(a));}if(Z.useCapabilities!==false){let n=W[e];if(n?.capabilities&&n.capabilities.length>0)for(let[a,l]of Object.entries(W)){if(o.has(a))continue;let u=l.capabilities??[];n.capabilities.every(p=>u.includes(p))&&(t.push(a),o.add(a));}}if(Ae){let n=Z.healthThreshold??30;return t.filter(a=>Ae.getHealthScore(a)>n)}return t}function lr(e){if(e.length===0)return null;if(!Z||!Ae)return e[0]??null;if(Z.selectionStrategy==="round-robin"&&Ne){let n=[...e].sort().join(","),a=Ne.get(n)??0,l=e[a%e.length];return Ne.set(n,a+1),l}let t=e[0],o=Ae.getHealthScore(t);for(let n=1;n<e.length;n++){let a=Ae.getHealthScore(e[n]);a>o&&(t=e[n],o=a);}return t}function cr(e){switch(e.type){case "parallel":return e.handlers;case "sequential":return e.handlers;case "supervisor":return [e.supervisor,...e.workers];case "dag":return Object.values(e.nodes).map(t=>t.handler);case "reflect":return [e.handler,e.evaluator];case "race":return e.handlers;case "debate":return [...e.handlers,e.evaluator];case "goal":return Object.values(e.nodes).map(t=>t.handler);default:return []}}let Cn={system:K,get facts(){return K.facts},get timeline(){return P},get healthMonitor(){return Ae},get derived(){return Object.freeze({...ut})},onDerivedChange(e){return It.add(e),()=>{It.delete(e);}},get scratchpad(){return Zt},runAgent:de,runAgentStream:en,async runPattern(e,t){X();let o=d$1[e];if(!o){let l=Object.keys(d$1).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${l}`)}let n=Date.now();if(P){let l=cr(o);P.record({type:"pattern_start",timestamp:n,snapshotId:null,patternId:e,patternType:o.type,handlers:l,taskIds:l.filter(u=>Y[u]!=null)});}let a;try{switch(o.type){case "parallel":return await rr(o,t,e);case "sequential":return await tn(o,t,e);case "supervisor":return await nn(o,t,e);case "dag":return await rn(o,t,e);case "reflect":return await Nt(o,t,e);case "race":return (await An(o,t,e)).result;case "debate":return (await qt(o,t,e)).result;case "goal":return (await Gt(o,t,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${o.type}`)}}catch(l){throw a=l instanceof Error?l:new Error(String(l)),l}finally{P&&P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:o.type,durationMs:Date.now()-n,...a?{error:a.message}:{}});}},async runParallel(e,t,o,n){X();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));try{let p=e.map((S,D)=>de(S,a[D],{signal:l.signal}).catch(E=>{if(n?.minSuccess!==void 0)return null;throw E})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(n?.minSuccess!==void 0&&T.length<n.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${T.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess}, failed: ${S})`)}return o(T)}finally{u&&clearTimeout(u);}},async runSequential(e,t,o){X();let n=[],a=t;for(let l=0;l<e.length;l++){let u=e[l],p=await de(u,a);n.push(p),l<e.length-1&&(o?.transform?a=o.transform(p.output,u,l):a=typeof p.output=="string"?p.output:safeStringify(p.output));}return n},async handoff(e,t,o,n){if(X(),!W[e]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${u}`)}if(!W[t]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${t}" not found. Registered: ${u}`)}{let u=await et("pre_handoff",e,W[e].agent.name,o,void 0,{handoff:{fromAgent:e,toAgent:t}});if(u.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};o=u.input;}let a={id:`handoff-${++_t}`,fromAgent:e,toAgent:t,input:o,context:n,requestedAt:Date.now()};Pe.push(a);try{f?.(a);}catch(u){ee&&console.debug("[Directive MultiAgent] onHandoff threw:",u);}J("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t});let l=W[t].memory??_;if(l&&n)try{let u=Object.entries(n).map(([p,h])=>`${p}: ${safeStringify(h)}`).join(", ");l.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${u}`}]);}catch(u){ee&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",u);}try{let u=await de(t,o),p={request:a,result:u,completedAt:Date.now()};Zn(p);try{g$1?.(p);}catch(T){ee&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",T);}J("onHandoffComplete",p),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t,durationMs:p.completedAt-a.requestedAt});let h=Pe.indexOf(a);return h>=0&&Pe.splice(h,1),u}catch(u){let p=Pe.indexOf(a);throw p>=0&&Pe.splice(p,1),u}},approve(e){X();let t=it.get(e);if(t){it.delete(e);let o=ie(t);K.batch(()=>{let n=gt(o),a=200,l=[...n.approved,e];Je(o,{...n,pending:n.pending.filter(u=>u.id!==e),approved:l.length>a?l.slice(-a):l});});return}ee&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,t){X();let o=it.get(e);if(o){it.delete(e);let n=ie(o);K.batch(()=>{let a=gt(n);t&&ee&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${t}`);let l={id:e,reason:t,rejectedAt:Date.now()},u=200,p=[...a.rejected,l];Je(n,{...a,pending:a.pending.filter(h=>h.id!==e),rejected:p.length>u?p.slice(-u):p});});return}ee&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){X(),qe="paused",ee&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){X(),qe==="paused"&&(qe="idle",ee&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let t=ve[e];return t?{...t}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{...t}]))},getPendingHandoffs(){return [...Pe]},get totalTokens(){return Xe},waitForIdle(e){let t=()=>Mt===0&&Object.values(ve).every(o=>o.status==="idle"||o.status==="completed"||o.status==="error");return t()?Promise.resolve():new Promise((o,n)=>{let a=null,l=()=>{jt.delete(u),a&&clearTimeout(a);},u=()=>{t()&&(l(),o());};jt.add(u),e!==void 0&&(a=setTimeout(()=>{l(),n(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,t,o){return de(e,t,o)},runStream(e,t,o){return en(e,t,o)},registerAgent(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let o=t.constraints?Jt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[l,u]of Object.entries(t.resolvers))n[l]={requirement:u.requirement,key:u.key,resolve:async(p,h)=>{let T=Ce(h.facts),D={facts:{...h.facts,...T},runAgent:async(E,q,k)=>r(E,q,k),signal:h.signal};return u.resolve(p,D)}};let a=createModule(e,{schema:i,init:l=>{Ue(l,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(l,{pending:[],approved:[],rejected:[]}),mt(l,[]),ht(l,[]),ze(l,Ct());},constraints:o,resolvers:Object.keys(n).length>0?n:void 0});K.registerModule(e,a),W[e]=t,Ge.set(e,new Ee(t.maxConcurrent??1)),ve[e]={status:"idle",runCount:0,totalTokens:0},ee&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${t.agent.name})`),Me();},unregisterAgent(e){if(X(),!W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(ve[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,l]of Object.entries(d$1)){let u;switch(l.type){case "supervisor":u=[l.supervisor,...l.workers];break;case "dag":u=Object.values(l.nodes).map(p=>p.handler);break;case "reflect":u=[l.handler,l.evaluator];break;case "parallel":case "sequential":case "race":u=l.handlers;break;case "debate":u=[...l.handlers,l.evaluator];break;default:u=[];}u.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let o=Ge.get(e);o&&(o.drain(),Ge.delete(e));let n=ie(e);n&&K.batch(()=>{Ue(n,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(n,{pending:[],approved:[],rejected:[]}),mt(n,[]),ht(n,[]),ze(n,Ct());}),delete W[e],delete ve[e],ee&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),Me();},getAgentIds(){return Object.keys(W)},registerTask(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(!e||typeof e!="string"||e.trim()!==e||e.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(W[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is already registered`);if(t.timeout!==void 0&&(!Number.isFinite(t.timeout)||t.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(t.maxConcurrent!==void 0&&(!Number.isFinite(t.maxConcurrent)||t.maxConcurrent<1||!Number.isInteger(t.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(t.retry){let{attempts:o,delayMs:n}=t.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(n!==void 0&&(!Number.isFinite(n)||n<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}Y[e]=t,xe[e]={status:"idle"},$e.set(e,new Ee(t.maxConcurrent??1)),ee&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${t.label??e})`);},unregisterTask(e){if(X(),!Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let o=$e.get(e);o&&(o.drain(),$e.delete(e)),delete Y[e],delete xe[e],ee&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(Y)},getTaskRegistry(){let e=Object.create(null);for(let[t,o]of Object.entries(Y))e[t]={label:o.label,description:o.description};return e},getTaskState(e){let t=xe[e];return t?Object.freeze(structuredClone(t)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[t,o]of Object.entries(xe))e[t]=Object.freeze(structuredClone(o));return e},getNodeIds(){return [...Object.keys(W),...Object.keys(Y)]},reset(){X();for(let t of Object.keys(W)){let o=W[t]?.maxConcurrent??1;ve[t]={status:"idle",runCount:0,totalTokens:0};let n=Ge.get(t);n&&n.drain(),Ge.set(t,new Ee(o));let a=ie(t);K.batch(()=>{Ue(a,{status:"idle",currentAgent:W[t].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),ze(a,Ct());});}for(let t of Object.keys(Y)){xe[t]={status:"idle"};let o=$e.get(t);o&&o.drain(),$e.set(t,new Ee(Y[t].maxConcurrent??1));}ct.clear(),bt.clear(),it.clear(),Pe.length=0,Ze.length=0,_t=0,Xe=0,qe="idle",Mt=0,Qe();let e=ie("__coord");K.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ie&&setBridgeFact(e,h,{...Ie.init});}),Ae&&Ae.reset(),Oe=null;for(let t of Object.keys(ut))delete ut[t];Me();},async checkpoint(e){X();for(let[o,n]of Object.entries(ve))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${o}" is running`);for(let[o,n]of Object.entries(xe))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${o}" is running`);if(!K.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let t={version:1,id:Ke(),createdAt:new Date().toISOString(),label:e?.label,systemExport:K.history.export(),timelineExport:P?.export()??null,localState:{type:"multi",globalTokenCount:Xe,globalStatus:qe,agentStates:Object.fromEntries(Object.entries(ve).map(([o,n])=>[o,structuredClone(n)])),handoffCounter:_t,pendingHandoffs:[...Pe],handoffResults:[...Ze],roundRobinCounters:Ne?Object.fromEntries(Ne):null,taskStates:Object.fromEntries(Object.entries(xe).map(([o,n])=>[o,{lastOutput:n.lastOutput!=null?String(n.lastOutput):void 0,lastError:n.lastError}]))},memoryExport:_?_.export?.()??null:null,orchestratorType:"multi"};return we&&await we.save(t),t},restore(e,t){if(X(),!fn(e))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(e.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${e.orchestratorType}"`);if(!K.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");K.history.import(e.systemExport),t?.restoreTimeline!==false&&e.timelineExport&&P&&P.import(e.timelineExport),e.memoryExport&&_&&_.import&&_.import(e.memoryExport);let o=e.localState;Xe=o.globalTokenCount,qe=o.globalStatus,_t=o.handoffCounter,Pe.length=0,Pe.push(...o.pendingHandoffs),Ze.length=0,Ze.push(...o.handoffResults);for(let[n,a]of Object.entries(o.agentStates))ve[n]&&(ve[n]={...a});if(o.roundRobinCounters&&Ne){Ne.clear();for(let[n,a]of Object.entries(o.roundRobinCounters))Ne.set(n,a);}for(let[n,a]of Object.entries(W)){let l=Ge.get(n);l&&l.drain(),Ge.set(n,new Ee(a.maxConcurrent??1));}if(o.taskStates){for(let[n,a]of Object.entries(o.taskStates)){if(!Y[n])throw new Error(`[Directive MultiAgent] Checkpoint references task "${n}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);xe[n]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[n,a]of Object.entries(Y)){let l=$e.get(n);l&&l.drain(),$e.set(n,new Ee(a.maxConcurrent??1));}}Me();},runParallelStream(e,t,o,n){X();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));let p=e.map((k,x)=>{let B=en(k,a[x],{signal:l.signal});return {agentId:k,streamResult:B}}),h=p.map(({agentId:k,streamResult:x})=>({agentId:k,stream:x.stream})),{stream:T,getDroppedCount:S}=Hn(h),D;n?.signal&&(D=()=>l.abort(),n.signal.addEventListener("abort",D,{once:true}));let E=Promise.allSettled(p.map(({streamResult:k})=>k.result)).then(k=>{u&&clearTimeout(u),D&&n?.signal&&n.signal.removeEventListener("abort",D);let x=[];for(let B of k)B.status==="fulfilled"&&x.push(B.value);if(n?.minSuccess!==void 0&&x.length<n.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${x.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess})`);return x}),q=E.then(k=>o(k));return E.catch(()=>{}),q.catch(()=>{}),{stream:T,results:E,merge:q,getDroppedCount:S,abort:()=>{l.abort(),D&&n?.signal&&n.signal.removeEventListener("abort",D);for(let{streamResult:k}of p)k.abort();}}},async runRace(e,t,o){X();let n={type:"race",handlers:e,extract:o?.extract,timeout:o?.timeout,minSuccess:o?.minSuccess,signal:o?.signal};return An(n,t,"__imperative_race")},async runReflect(e,t,o,n){X();let a={type:"reflect",handler:e,evaluator:t,maxIterations:n?.maxIterations,parseEvaluation:n?.parseEvaluation,buildRetryInput:n?.buildRetryInput,extract:n?.extract,onExhausted:n?.onExhausted,onIteration:n?.onIteration,signal:n?.signal,timeout:n?.timeout,threshold:n?.threshold},l=await Nt(a,o,"__imperative_reflect"),u=Oe?[...Oe]:[],p=n?.maxIterations??2,h=u.length>0&&!u[u.length-1].passed&&u.length>=p;return {result:l,iterations:u.length,history:u,exhausted:h}},async runDebate(e,t,o,n){return X(),qt({handlers:e,evaluator:t,maxRounds:n?.maxRounds,extract:n?.extract,parseJudgement:n?.parseJudgement,signal:n?.signal,timeout:n?.timeout},o,"__imperative_debate")},async runGoal(e,t,o,n){return X(),Gt({nodes:e,when:o,satisfaction:n?.satisfaction,maxSteps:n?.maxSteps,extract:n?.extract,timeout:n?.timeout,signal:n?.signal,selectionStrategy:n?.selectionStrategy,relaxation:n?.relaxation,onStep:n?.onStep,onStall:n?.onStall,checkpoint:n?.checkpoint},t,"__imperative_goal")},async resumeGoal(e,t){if(X(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Gt(t,{},e.patternId,e)},async resumeSequential(e,t){if(X(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return tn(t,e.currentInput,e.patternId,e)},async resumeSupervisor(e,t,o){if(X(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let n=o?.input??e.currentInput;return nn(t,n,e.patternId,e)},async resumeReflect(e,t,o){if(X(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let n=o?.input??e.effectiveInput;return Nt(t,n,e.patternId,e)},async resumeDebate(e,t){if(X(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return qt(t,e.currentInput,e.patternId,e)},async resumeDag(e,t,o){if(X(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let n=o?.input??e.input;return rn(t,n,e.patternId,e)},async replay(e,t,o){if(X(),!we)throw new Error("[Directive MultiAgent] No checkpoint store configured");let n=await we.load(e);if(!n)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let p=JSON.parse(n.systemExport);if(!p||typeof p!="object")throw new Error("Parsed checkpoint state is not an object");let h=new Set(["__proto__","constructor","prototype"]);for(let S of Object.keys(p))if(h.has(S))throw new Error(`Checkpoint state contains blocked key: ${S}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(p.type))throw new Error(`Unknown checkpoint pattern type: ${p.type}`);if(p.version!==1)throw new Error(`Unsupported checkpoint version: ${p.version}`);a=p;}catch(p){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${p instanceof Error?p.message:String(p)}`)}let l=ot(a),u=o?.input??("currentInput"in a?a.currentInput:"");switch(P&&P.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:l}),a.type){case "sequential":return tn(t,u,a.patternId,a);case "supervisor":return nn(t,u,a.patternId,a);case "reflect":return Nt(t,u,a.patternId,a);case "debate":return qt(t,u,a.patternId,a);case "dag":return rn(t,u,a.patternId,a);case "goal":return Gt(t,a.facts,a.patternId,a)}},resumeBreakpoint(e,t){X(),t&&ct.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.resolved,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),resolved:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,t){X(),t&&bt.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.cancelled,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),cancelled:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let t of Object.keys(W)){let o=ie(t),n=We(o);e.push(...n.pending);}return e},getLastReflectionHistory(){return Oe?[...Oe]:null},destroy(){Xt||(Cn.reset(),$t.clear(),lt.clear(),It.clear(),jt.clear(),Xt=true,K.destroy());}};return Me(),Cn}export{mo as $,Vr as A,Yr as B,Xr as C,Zr as D,Qr as E,eo as F,to as G,no as H,ro as I,Hn as J,xt as K,Lr as L,mn as M,Ee as N,ot as O,xr as P,Cr as Q,Er as R,hn as S,ao as T,io as U,uo as V,lo as W,co as X,po as Y,fo as Z,go as _,cn as a,ho as aa,jr as b,yo as ba,Ht as c,ko as ca,Ut as d,To as da,qn as e,So as ea,St as f,xo as fa,Ue as g,Ao as ga,gt as h,Co as ha,Je as i,Eo as ia,dn as j,Do as ja,mt as k,Un as ka,pn as l,Oo as la,ht as m,Po as ma,We as n,Mo as na,ze as o,_o as oa,Ce as p,jo as pa,Jt as q,Io as qa,Gr as r,Zo as ra,At as s,Gn as t,Fn as u,Ct as v,Ke as w,fn as x,Bn as y,Kr as z};//# sourceMappingURL=chunk-4VP67W7L.js.map
67
- //# sourceMappingURL=chunk-4VP67W7L.js.map
66
+ Original task: ${t}`);}if(k.length===0)throw new Error("[Directive MultiAgent] Debate aborted before any round completed");let w=p?p(M):M;return {winnerId:B,result:w,rounds:k}}catch(w){throw b=w instanceof Error?w:new Error(String(w)),w}finally{S&&clearTimeout(S),D&&e.signal&&e.signal.removeEventListener("abort",D),o&&J("onPatternComplete",{patternId:L,patternType:"debate",durationMs:Date.now()-H,timestamp:Date.now(),error:b});}}let or=new Set(["__proto__","constructor","prototype","toString","valueOf","hasOwnProperty"]);function pt(e,t){for(let o of Object.keys(t))or.has(o)||(e[o]=t[o]);}function sr(e,t){let o=Object.create(null);for(let[h,T]of Object.entries(t))for(let S of T.produces)o[S]||(o[S]=[]),o[S].push(h);let n=Object.keys(t),a=Object.create(null),l=Object.create(null);for(let h of n)a[h]=0,l[h]=[];for(let[h,T]of Object.entries(t))for(let S of T.requires??[]){let D=o[S];if(D)for(let E of D)E!==h&&(l[E].push(h),a[h]=(a[h]??0)+1);}let u=[];for(let h of n)a[h]===0&&u.push(h);let p=0;for(;u.length>0;){let h=u.shift();p++;for(let T of l[h]??[])a[T]--,a[T]===0&&u.push(T);}if(p!==n.length)throw new Error(`[Directive MultiAgent] goal pattern "${e}": cycle detected in produces/requires graph. Visited ${p}/${n.length} nodes.`)}function ar(e,t){let o=Object.create(null);for(let[n,a]of Object.entries(t))for(let l of a.produces)o[l]||(o[l]=[]),o[l].push(n);for(let[n,a]of Object.entries(o))a.length>1&&console.warn(`[Directive MultiAgent] goal pattern "${e}": fact key "${n}" is produced by multiple nodes: ${a.join(", ")}. Last writer wins.`);}function be(e,...t){if(e)try{return e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}async function ir(e,...t){if(e)try{return await e(...t)}catch(o){console.error("[Directive MultiAgent] goal: user callback threw:",o);return}}function on(e,t,o){let n=t.slice(-3),a=n.length>0?n.reduce((p,h)=>p+h.satisfactionDelta,0)/n.length:0,l=null;a>0&&e<1&&(l=Math.ceil((1-e)/a));let u=false;if(t.length>=6){let p=t.slice(-3),h=t.slice(-6,-3),T=p.reduce((D,E)=>D+E.satisfactionDelta,0)/3,S=h.reduce((D,E)=>D+E.satisfactionDelta,0)/3;u=T<S*.5;}return {satisfaction:e,progressRate:a,estimatedStepsRemaining:l,decelerating:u}}function yt(e){return e==null||!Number.isFinite(e)?0:Math.max(0,Math.min(1,e))}async function Gt(e,t,o,n){let{nodes:a,when:l,satisfaction:u,maxSteps:p=50,extract:h,selectionStrategy:T,relaxation:S,onStep:D,onStall:E}=e,q=Object.create(null);for(let[Q,ne]of Object.entries(a))q[Q]={...ne};if(Object.keys(q).length===0)throw new Error("[Directive MultiAgent] goal requires at least one node");let x=o??"__goal";for(let[Q,ne]of Object.entries(q))if(!W[ne.handler]&&!Y[ne.handler])throw new Error(`[Directive MultiAgent] goal node "${Q}" references unregistered handler "${ne.handler}"`);sr(x,q),ar(x,q);for(let[Q,ne]of Object.entries(q))ne.extractOutput||console.warn(`[Directive MultiAgent] goal node "${Q}": no extractOutput defined. Output will be auto-parsed from agent response. Define extractOutput for reliable fact extraction.`);let B=e.signal,M,N,G=e.timeout??3e5;if(G&&!B){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),B=Q.signal;}else if(G&&B){let Q=new AbortController;M=setTimeout(()=>Q.abort(),G),N=()=>Q.abort(),B.addEventListener("abort",N,{once:true}),B=Q.signal;}let A=Date.now();if(P){let Q=Object.values(q).map(ne=>ne.handler);P.record({type:"pattern_start",timestamp:A,snapshotId:null,patternId:x,patternType:"goal",handlers:Q,taskIds:Q.filter(ne=>Y[ne]!=null)});}J("onPatternStart",{patternId:x,patternType:"goal",input:typeof t=="string"?t:JSON.stringify(t),timestamp:A});let m=Object.create(null);n?pt(m,n.facts):typeof t=="string"?m.input=t:pt(m,t);let v=n?[...n.executionOrder]:[],L=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.nodeOutputs))L[Q]={output:ne.output,totalTokens:ne.totalTokens};let H=n?[...n.stepMetrics]:[],j=n?[...n.relaxations]:[],b=new Set(n?.completedNodes??[]),w=new Map(n?Object.entries(n.failedNodes).map(([Q,ne])=>[Q,ne]):[]),C=new Map(n?Object.entries(n.nodeInputHashes):[]),U=Object.create(null);if(n)for(let[Q,ne]of Object.entries(n.agentMetrics))U[Q]={runs:ne.runs,avgSatisfactionDelta:ne.runs>0?ne.totalDelta/ne.runs:0,tokens:ne.tokens,totalDelta:ne.totalDelta};let $=n?.stallSteps??0,ue=n?.appliedRelaxationTiers??0,te=n?.lastSatisfaction??0,re,tt=false,pe=n?.step??0,De=e.checkpoint,dr=De?.everyN??5,En=De?.store??we,pr=De?.labelPrefix??"goal",Dn,fr=3;try{for(let ae=pe;ae<p;ae++){if(be(l,m)===!0){tt=!0;let V=Date.now()-A,z=Object.values(L).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!0,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j}}if(B?.aborted){let V=Date.now()-A,z=Object.values(L).reduce((oe,fe)=>oe+fe.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:z,durationMs:V,stepMetrics:H,relaxations:j,error:"Aborted or timed out"}}let nt=[];for(let[V,z]of Object.entries(q)){if((w.get(V)??0)>=fr)continue;let oe=z.requires??[];if(oe.every(le=>m[le]!=null)){if(b.has(V)){if(!z.allowRerun)continue;let le=JSON.stringify(oe.map(ye=>m[ye]));if(C.get(V)===le)continue}nt.push(V);}}let He=nt;if(T&&nt.length>0){let V=u?be(u,m)??0:be(l,m)===!0?1:0,z=yt(V),oe=on(z,H,ae),fe=Object.create(null);for(let[ye,se]of Object.entries(U))fe[ye]={runs:se.runs,avgSatisfactionDelta:se.runs>0?se.totalDelta/se.runs:0,tokens:se.tokens};let le=T.select(nt,fe,oe);He=le&&le.length>0?le:nt;}if(He.sort((V,z)=>(q[z].priority??0)-(q[V].priority??0)),be(D,ae,{...m},He),He.length===0){$++;let V=!1;if(S)for(let z=ue;z<S.length;z++){let oe=S[z],fe=oe.afterStallSteps??3;if($>=fe){let le=oe.strategy;switch(le.type){case "allow_rerun":for(let ye of le.nodes)b.delete(ye),C.delete(ye);break;case "alternative_nodes":for(let ye of le.nodes){let se=`__relaxation_${z}_${ye.handler}`;q[se]={...ye};}break;case "inject_facts":pt(m,le.facts);break;case "accept_partial":{let ye=Date.now()-A,se=Object.values(L).reduce((ge,_e)=>ge+_e.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:se,durationMs:ye,stepMetrics:H,relaxations:j,error:`Accepted partial result via relaxation tier "${oe.label}"`}}case "custom":{let ye=be(u,m)??0,se={step:ae,facts:{...m},metrics:on(yt(ye),H,ae),completedNodes:new Set(b),failedNodes:new Map(w)};await ir(le.apply,se);break}}j.push({step:ae,tierIndex:z,label:oe.label,strategy:le.type}),ue=z+1,$=0,V=!0;break}}if(!V){let z=be(u,m)??0,oe=on(yt(z),H,ae);if(be(E,ae,oe),!S||ue>=S.length){let fe=Date.now()-A,le=Object.values(L).reduce((ye,se)=>ye+se.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:ae,totalTokens:le,durationMs:fe,stepMetrics:H,relaxations:j,error:"Goal stalled: no ready nodes and no remaining relaxation tiers"}}}continue}$=0;let gr=Date.now(),mr=u?be(u,m)??0:be(l,m)===!0?1:0,hr=yt(mr),On=0,ft=[],br=He.map(async V=>{let z=q[V],oe=z.requires??[],fe=JSON.stringify(oe.map(se=>m[se]));C.set(V,fe);let le,ye=be(z.buildInput,m);if(ye!=null)le=ye;else {let se=Object.create(null);for(let ge of oe)m[ge]!=null&&(se[ge]=m[ge]);Object.keys(se).length>0?le=JSON.stringify(se):m.input!=null?le=String(m.input):le=JSON.stringify(m);}try{let se=await de(z.handler,le,{signal:B??void 0,patternId:x});if(L[V]=se,v.push(V),b.add(V),w.delete(V),z.extractOutput){let ge=be(z.extractOutput,se);ge&&(pt(m,ge),ft.push(...Object.keys(ge)));}else {let ge=se.output;if(ge&&typeof ge=="object")pt(m,ge),ft.push(...Object.keys(ge));else if(typeof ge=="string")try{let _e=JSON.parse(ge);if(_e&&typeof _e=="object"&&!Array.isArray(_e))pt(m,_e),ft.push(...Object.keys(_e));else for(let Pn of z.produces)m[Pn]=ge,ft.push(Pn);}catch{for(let _e of z.produces)m[_e]=ge,ft.push(_e);}}return On+=se.totalTokens,{nodeId:V,success:!0}}catch(se){let ge=(w.get(V)??0)+1;return w.set(V,ge),{nodeId:V,success:!1,error:se}}});await Promise.allSettled(br);let yr=u?be(u,m)??0:be(l,m)===!0?1:0,Ft=yt(yr),Lt=Ft-hr;if(H.push({step:ae,durationMs:Date.now()-gr,nodesRun:[...He],factsProduced:ft,satisfaction:Ft,satisfactionDelta:Lt,tokensConsumed:On}),P)for(let V of He){let z=q[V];P.record({type:"goal_step",timestamp:Date.now(),snapshotId:null,agentId:z.handler,step:ae,nodeId:V,satisfaction:Ft,satisfactionDelta:Lt});}for(let V of He){let z=q[V];U[z.handler]||(U[z.handler]={runs:0,avgSatisfactionDelta:0,tokens:0,totalDelta:0});let oe=U[z.handler];oe.runs++,oe.totalDelta+=Lt,oe.tokens+=L[V]?.totalTokens??0;}if(te=Ft,Lt<=0?$++:$=0,De&&En&&ae>pe&&(ae-pe)%dr===0){let V={type:"goal",version:1,id:Ke(),createdAt:new Date().toISOString(),label:`${pr}:step-${ae}`,patternId:x,stepsTotal:p,step:ae+1,facts:structuredClone(m),completedNodes:[...b],failedNodes:Object.fromEntries(w),nodeInputHashes:Object.fromEntries(C),nodeOutputs:Object.fromEntries(Object.entries(L).map(([oe,fe])=>[oe,{output:fe.output,totalTokens:fe.totalTokens}])),executionOrder:[...v],stepMetrics:[...H],relaxations:[...j],appliedRelaxationTiers:ue,stallSteps:$,lastSatisfaction:te,agentMetrics:Object.fromEntries(Object.entries(U).map(([oe,fe])=>[oe,{runs:fe.runs,totalDelta:fe.totalDelta,tokens:fe.tokens}]))},z=await dt(V,En,De);z&&(Dn=z);}}let Q=Date.now()-A,ne=Object.values(L).reduce((ae,nt)=>ae+nt.totalTokens,0);return {achieved:!1,result:be(h,m)??m,facts:{...m},executionOrder:v,nodeResults:L,steps:p,totalTokens:ne,durationMs:Q,stepMetrics:H,relaxations:j,error:`Max steps (${p}) exhausted without achieving goal`}}catch(Q){throw re=Q instanceof Error?Q:new Error(String(Q)),Q}finally{if(M!=null&&clearTimeout(M),N&&e.signal&&e.signal.removeEventListener("abort",N),P){let Q=Object.values(L).reduce((ne,ae)=>ne+ae.totalTokens,0);P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:x,patternType:"goal",durationMs:Date.now()-A,achieved:tt,stepMetrics:H,relaxations:j,totalTokens:Q,...re?{error:re.message}:{}});}J("onPatternComplete",{patternId:x,patternType:"goal",durationMs:Date.now()-A,timestamp:Date.now(),error:re});}}function ur(e){if(!Z)return [];let t=[],o=new Set;if(o.add(e),Z.equivalencyGroups){for(let n of Object.values(Z.equivalencyGroups))if(n.includes(e))for(let a of n)!o.has(a)&&W[a]&&(t.push(a),o.add(a));}if(Z.useCapabilities!==false){let n=W[e];if(n?.capabilities&&n.capabilities.length>0)for(let[a,l]of Object.entries(W)){if(o.has(a))continue;let u=l.capabilities??[];n.capabilities.every(p=>u.includes(p))&&(t.push(a),o.add(a));}}if(Ae){let n=Z.healthThreshold??30;return t.filter(a=>Ae.getHealthScore(a)>n)}return t}function lr(e){if(e.length===0)return null;if(!Z||!Ae)return e[0]??null;if(Z.selectionStrategy==="round-robin"&&Ne){let n=[...e].sort().join(","),a=Ne.get(n)??0,l=e[a%e.length];return Ne.set(n,a+1),l}let t=e[0],o=Ae.getHealthScore(t);for(let n=1;n<e.length;n++){let a=Ae.getHealthScore(e[n]);a>o&&(t=e[n],o=a);}return t}function cr(e){switch(e.type){case "parallel":return e.handlers;case "sequential":return e.handlers;case "supervisor":return [e.supervisor,...e.workers];case "dag":return Object.values(e.nodes).map(t=>t.handler);case "reflect":return [e.handler,e.evaluator];case "race":return e.handlers;case "debate":return [...e.handlers,e.evaluator];case "goal":return Object.values(e.nodes).map(t=>t.handler);default:return []}}let Cn={system:K,get facts(){return K.facts},get timeline(){return P},get healthMonitor(){return Ae},get derived(){return Object.freeze({...ut})},onDerivedChange(e){return It.add(e),()=>{It.delete(e);}},get scratchpad(){return Zt},runAgent:de,runAgentStream:en,async runPattern(e,t){X();let o=d$1[e];if(!o){let l=Object.keys(d$1).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Unknown pattern "${e}". Available patterns: ${l}`)}let n=Date.now();if(P){let l=cr(o);P.record({type:"pattern_start",timestamp:n,snapshotId:null,patternId:e,patternType:o.type,handlers:l,taskIds:l.filter(u=>Y[u]!=null)});}let a;try{switch(o.type){case "parallel":return await rr(o,t,e);case "sequential":return await tn(o,t,e);case "supervisor":return await nn(o,t,e);case "dag":return await rn(o,t,e);case "reflect":return await Nt(o,t,e);case "race":return (await An(o,t,e)).result;case "debate":return (await qt(o,t,e)).result;case "goal":return (await Gt(o,t,e)).result;default:throw new Error(`[Directive MultiAgent] Unknown pattern type: ${o.type}`)}}catch(l){throw a=l instanceof Error?l:new Error(String(l)),l}finally{P&&P.record({type:"pattern_complete",timestamp:Date.now(),snapshotId:null,patternId:e,patternType:o.type,durationMs:Date.now()-n,...a?{error:a.message}:{}});}},async runParallel(e,t,o,n){X();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));try{let p=e.map((S,D)=>de(S,a[D],{signal:l.signal}).catch(E=>{if(n?.minSuccess!==void 0)return null;throw E})),h=await Promise.all(p),T=h.filter(S=>S!==null);if(n?.minSuccess!==void 0&&T.length<n.minSuccess){let S=h.length-T.length;throw new Error(`[Directive MultiAgent] runParallel: Only ${T.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess}, failed: ${S})`)}return o(T)}finally{u&&clearTimeout(u);}},async runSequential(e,t,o){X();let n=[],a=t;for(let l=0;l<e.length;l++){let u=e[l],p=await de(u,a);n.push(p),l<e.length-1&&(o?.transform?a=o.transform(p.output,u,l):a=typeof p.output=="string"?p.output:safeStringify(p.output));}return n},async handoff(e,t,o,n){if(X(),!W[e]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff source agent "${e}" not found. Registered: ${u}`)}if(!W[t]){let u=Object.keys(W).join(", ")||"(none)";throw new Error(`[Directive MultiAgent] Handoff target agent "${t}" not found. Registered: ${u}`)}{let u=await et("pre_handoff",e,W[e].agent.name,o,void 0,{handoff:{fromAgent:e,toAgent:t}});if(u.skip)return {output:void 0,messages:[],toolCalls:[],totalTokens:0};o=u.input;}let a={id:`handoff-${++_t}`,fromAgent:e,toAgent:t,input:o,context:n,requestedAt:Date.now()};Pe.push(a);try{f?.(a);}catch(u){ee&&console.debug("[Directive MultiAgent] onHandoff threw:",u);}J("onHandoff",a),P&&P.record({type:"handoff_start",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t});let l=W[t].memory??_;if(l&&n)try{let u=Object.entries(n).map(([p,h])=>`${p}: ${safeStringify(h)}`).join(", ");l.addMessages([{role:"system",content:`[Handoff from ${e}] Context: ${u}`}]);}catch(u){ee&&console.debug("[Directive MultiAgent] Handoff addMessages failed:",u);}try{let u=await de(t,o),p={request:a,result:u,completedAt:Date.now()};Zn(p);try{g$1?.(p);}catch(T){ee&&console.debug("[Directive MultiAgent] onHandoffComplete threw:",T);}J("onHandoffComplete",p),P&&P.record({type:"handoff_complete",timestamp:Date.now(),snapshotId:null,fromAgent:e,toAgent:t,durationMs:p.completedAt-a.requestedAt});let h=Pe.indexOf(a);return h>=0&&Pe.splice(h,1),u}catch(u){let p=Pe.indexOf(a);throw p>=0&&Pe.splice(p,1),u}},approve(e){X();let t=it.get(e);if(t){it.delete(e);let o=ie(t);K.batch(()=>{let n=gt(o),a=200,l=[...n.approved,e];Je(o,{...n,pending:n.pending.filter(u=>u.id!==e),approved:l.length>a?l.slice(-a):l});});return}ee&&console.debug(`[Directive MultiAgent] approve() ignored: no pending request "${e}"`);},reject(e,t){X();let o=it.get(e);if(o){it.delete(e);let n=ie(o);K.batch(()=>{let a=gt(n);t&&ee&&console.debug(`[Directive MultiAgent] Request ${e} rejected: ${t}`);let l={id:e,reason:t,rejectedAt:Date.now()},u=200,p=[...a.rejected,l];Je(n,{...a,pending:a.pending.filter(h=>h.id!==e),rejected:p.length>u?p.slice(-u):p});});return}ee&&console.debug(`[Directive MultiAgent] reject() ignored: no pending request "${e}"`);},pause(){X(),qe="paused",ee&&console.debug("[Directive MultiAgent] Orchestrator paused");},resume(){X(),qe==="paused"&&(qe="idle",ee&&console.debug("[Directive MultiAgent] Orchestrator resumed"));},getAgentState(e){let t=ve[e];return t?{...t}:void 0},getAllAgentStates(){return Object.fromEntries(Object.entries(ve).map(([e,t])=>[e,{...t}]))},getPendingHandoffs(){return [...Pe]},get totalTokens(){return Xe},waitForIdle(e){let t=()=>Mt===0&&Object.values(ve).every(o=>o.status==="idle"||o.status==="completed"||o.status==="error");return t()?Promise.resolve():new Promise((o,n)=>{let a=null,l=()=>{jt.delete(u),a&&clearTimeout(a);},u=()=>{t()&&(l(),o());};jt.add(u),e!==void 0&&(a=setTimeout(()=>{l(),n(new Error(`[Directive MultiAgent] waitForIdle timed out after ${e}ms`));},e));})},run(e,t,o){return de(e,t,o)},runStream(e,t,o){return en(e,t,o)},registerAgent(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Agent ID "${e}" is reserved and cannot be used`);if(W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is already registered. Unregister first.`);if(Y[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as a task`);let o=t.constraints?Jt(t.constraints):{},n=Object.create(null);if(t.resolvers)for(let[l,u]of Object.entries(t.resolvers))n[l]={requirement:u.requirement,key:u.key,resolve:async(p,h)=>{let T=Ce(h.facts),D={facts:{...h.facts,...T},runAgent:async(E,q,k)=>r(E,q,k),signal:h.signal};return u.resolve(p,D)}};let a=createModule(e,{schema:i,init:l=>{Ue(l,{status:"idle",currentAgent:t.agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(l,{pending:[],approved:[],rejected:[]}),mt(l,[]),ht(l,[]),ze(l,Ct());},constraints:o,resolvers:Object.keys(n).length>0?n:void 0});K.registerModule(e,a),W[e]=t,Ge.set(e,new Ee(t.maxConcurrent??1)),ve[e]={status:"idle",runCount:0,totalTokens:0},ee&&console.debug(`[Directive MultiAgent] Registered agent "${e}" (${t.agent.name})`),Me();},unregisterAgent(e){if(X(),!W[e])throw new Error(`[Directive MultiAgent] Agent "${e}" is not registered`);if(ve[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister agent "${e}" while it is running`);for(let[a,l]of Object.entries(d$1)){let u;switch(l.type){case "supervisor":u=[l.supervisor,...l.workers];break;case "dag":u=Object.values(l.nodes).map(p=>p.handler);break;case "reflect":u=[l.handler,l.evaluator];break;case "parallel":case "sequential":case "race":u=l.handlers;break;case "debate":u=[...l.handlers,l.evaluator];break;default:u=[];}u.includes(e)&&console.warn(`[Directive MultiAgent] Warning: Pattern "${a}" references unregistered agent "${e}"`);}let o=Ge.get(e);o&&(o.drain(),Ge.delete(e));let n=ie(e);n&&K.batch(()=>{Ue(n,{status:"idle",currentAgent:null,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(n,{pending:[],approved:[],rejected:[]}),mt(n,[]),ht(n,[]),ze(n,Ct());}),delete W[e],delete ve[e],ee&&console.debug(`[Directive MultiAgent] Unregistered agent "${e}"`),Me();},getAgentIds(){return Object.keys(W)},registerTask(e,t){if(X(),Ot.has(e))throw new Error(`[Directive MultiAgent] Task ID "${e}" is reserved and cannot be used`);if(!e||typeof e!="string"||e.trim()!==e||e.length===0)throw new Error("[Directive MultiAgent] Task ID must be a non-empty trimmed string");if(W[e])throw new Error(`[Directive MultiAgent] ID "${e}" is already registered as an agent`);if(Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is already registered`);if(t.timeout!==void 0&&(!Number.isFinite(t.timeout)||t.timeout<=0))throw new Error(`[Directive MultiAgent] Task "${e}" timeout must be a finite number > 0`);if(t.maxConcurrent!==void 0&&(!Number.isFinite(t.maxConcurrent)||t.maxConcurrent<1||!Number.isInteger(t.maxConcurrent)))throw new Error(`[Directive MultiAgent] Task "${e}" maxConcurrent must be a finite integer >= 1`);if(t.retry){let{attempts:o,delayMs:n}=t.retry;if(!Number.isFinite(o)||o<1)throw new Error(`[Directive MultiAgent] Task "${e}" retry attempts must be a finite number >= 1`);if(n!==void 0&&(!Number.isFinite(n)||n<0))throw new Error(`[Directive MultiAgent] Task "${e}" retry delayMs must be a finite number >= 0`)}Y[e]=t,xe[e]={status:"idle"},$e.set(e,new Ee(t.maxConcurrent??1)),ee&&console.debug(`[Directive MultiAgent] Registered task "${e}" (${t.label??e})`);},unregisterTask(e){if(X(),!Y[e])throw new Error(`[Directive MultiAgent] Task "${e}" is not registered`);if(xe[e]?.status==="running")throw new Error(`[Directive MultiAgent] Cannot unregister task "${e}" while it is running`);let o=$e.get(e);o&&(o.drain(),$e.delete(e)),delete Y[e],delete xe[e],ee&&console.debug(`[Directive MultiAgent] Unregistered task "${e}"`);},getTaskIds(){return Object.keys(Y)},getTaskRegistry(){let e=Object.create(null);for(let[t,o]of Object.entries(Y))e[t]={label:o.label,description:o.description};return e},getTaskState(e){let t=xe[e];return t?Object.freeze(structuredClone(t)):void 0},getAllTaskStates(){let e=Object.create(null);for(let[t,o]of Object.entries(xe))e[t]=Object.freeze(structuredClone(o));return e},getNodeIds(){return [...Object.keys(W),...Object.keys(Y)]},reset(){X();for(let t of Object.keys(W)){let o=W[t]?.maxConcurrent??1;ve[t]={status:"idle",runCount:0,totalTokens:0};let n=Ge.get(t);n&&n.drain(),Ge.set(t,new Ee(o));let a=ie(t);K.batch(()=>{Ue(a,{status:"idle",currentAgent:W[t].agent.name,input:null,output:null,error:null,tokenUsage:0,turnCount:0,startedAt:null,completedAt:null}),Je(a,{pending:[],approved:[],rejected:[]}),mt(a,[]),ht(a,[]),ze(a,Ct());});}for(let t of Object.keys(Y)){xe[t]={status:"idle"};let o=$e.get(t);o&&o.drain(),$e.set(t,new Ee(Y[t].maxConcurrent??1));}ct.clear(),bt.clear(),it.clear(),Pe.length=0,Ze.length=0,_t=0,Xe=0,qe="idle",Mt=0,Qe();let e=ie("__coord");K.batch(()=>{setBridgeFact(e,"__globalTokens",0),setBridgeFact(e,"__status","idle"),setBridgeFact(e,"__handoffs",[]),setBridgeFact(e,"__handoffResults",[]),setBridgeFact(e,"__budgetWarningFired",false),Ie&&setBridgeFact(e,h,{...Ie.init});}),Ae&&Ae.reset(),Oe=null;for(let t of Object.keys(ut))delete ut[t];Me();},async checkpoint(e){X();for(let[o,n]of Object.entries(ve))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while agent "${o}" is running`);for(let[o,n]of Object.entries(xe))if(n.status==="running")throw new Error(`[Directive MultiAgent] Cannot checkpoint while task "${o}" is running`);if(!K.history?.export)throw new Error("[Directive MultiAgent] Checkpointing requires history. Set `debug: true` in orchestrator options.");let t={version:1,id:Ke(),createdAt:new Date().toISOString(),label:e?.label,systemExport:K.history.export(),timelineExport:P?.export()??null,localState:{type:"multi",globalTokenCount:Xe,globalStatus:qe,agentStates:Object.fromEntries(Object.entries(ve).map(([o,n])=>[o,structuredClone(n)])),handoffCounter:_t,pendingHandoffs:[...Pe],handoffResults:[...Ze],roundRobinCounters:Ne?Object.fromEntries(Ne):null,taskStates:Object.fromEntries(Object.entries(xe).map(([o,n])=>[o,{lastOutput:n.lastOutput!=null?String(n.lastOutput):void 0,lastError:n.lastError}]))},memoryExport:_?_.export?.()??null:null,orchestratorType:"multi"};return we&&await we.save(t),t},restore(e,t){if(X(),!fn(e))throw new Error("[Directive MultiAgent] Invalid checkpoint data");if(e.orchestratorType!=="multi")throw new Error(`[Directive MultiAgent] Expected multi-agent checkpoint, got "${e.orchestratorType}"`);if(!K.history?.import)throw new Error("[Directive MultiAgent] Restoring a checkpoint requires history. Set `debug: true` in orchestrator options.");K.history.import(e.systemExport),t?.restoreTimeline!==false&&e.timelineExport&&P&&P.import(e.timelineExport),e.memoryExport&&_&&_.import&&_.import(e.memoryExport);let o=e.localState;Xe=o.globalTokenCount,qe=o.globalStatus,_t=o.handoffCounter,Pe.length=0,Pe.push(...o.pendingHandoffs),Ze.length=0,Ze.push(...o.handoffResults);for(let[n,a]of Object.entries(o.agentStates))ve[n]&&(ve[n]={...a});if(o.roundRobinCounters&&Ne){Ne.clear();for(let[n,a]of Object.entries(o.roundRobinCounters))Ne.set(n,a);}for(let[n,a]of Object.entries(W)){let l=Ge.get(n);l&&l.drain(),Ge.set(n,new Ee(a.maxConcurrent??1));}if(o.taskStates){for(let[n,a]of Object.entries(o.taskStates)){if(!Y[n])throw new Error(`[Directive MultiAgent] Checkpoint references task "${n}" which is not registered. Task run functions cannot be serialized \u2014 re-provide the task registration.`);xe[n]={status:"idle",lastOutput:a.lastOutput,lastError:a.lastError};}for(let[n,a]of Object.entries(Y)){let l=$e.get(n);l&&l.drain(),$e.set(n,new Ee(a.maxConcurrent??1));}}Me();},runParallelStream(e,t,o,n){X();let a=Array.isArray(t)?t:e.map(()=>t);if(a.length!==e.length)throw new Error(`[Directive MultiAgent] Input count (${a.length}) must match agent count (${e.length})`);let l=new AbortController,u;n?.timeout&&(u=setTimeout(()=>l.abort(),n.timeout));let p=e.map((k,x)=>{let B=en(k,a[x],{signal:l.signal});return {agentId:k,streamResult:B}}),h=p.map(({agentId:k,streamResult:x})=>({agentId:k,stream:x.stream})),{stream:T,getDroppedCount:S}=Hn(h),D;n?.signal&&(D=()=>l.abort(),n.signal.addEventListener("abort",D,{once:true}));let E=Promise.allSettled(p.map(({streamResult:k})=>k.result)).then(k=>{u&&clearTimeout(u),D&&n?.signal&&n.signal.removeEventListener("abort",D);let x=[];for(let B of k)B.status==="fulfilled"&&x.push(B.value);if(n?.minSuccess!==void 0&&x.length<n.minSuccess)throw new Error(`[Directive MultiAgent] runParallelStream: Only ${x.length}/${e.length} agents succeeded (minimum required: ${n.minSuccess})`);return x}),q=E.then(k=>o(k));return E.catch(()=>{}),q.catch(()=>{}),{stream:T,results:E,merge:q,getDroppedCount:S,abort:()=>{l.abort(),D&&n?.signal&&n.signal.removeEventListener("abort",D);for(let{streamResult:k}of p)k.abort();}}},async runRace(e,t,o){X();let n={type:"race",handlers:e,extract:o?.extract,timeout:o?.timeout,minSuccess:o?.minSuccess,signal:o?.signal};return An(n,t,"__imperative_race")},async runReflect(e,t,o,n){X();let a={type:"reflect",handler:e,evaluator:t,maxIterations:n?.maxIterations,parseEvaluation:n?.parseEvaluation,buildRetryInput:n?.buildRetryInput,extract:n?.extract,onExhausted:n?.onExhausted,onIteration:n?.onIteration,signal:n?.signal,timeout:n?.timeout,threshold:n?.threshold},l=await Nt(a,o,"__imperative_reflect"),u=Oe?[...Oe]:[],p=n?.maxIterations??2,h=u.length>0&&!u[u.length-1].passed&&u.length>=p;return {result:l,iterations:u.length,history:u,exhausted:h}},async runDebate(e,t,o,n){return X(),qt({handlers:e,evaluator:t,maxRounds:n?.maxRounds,extract:n?.extract,parseJudgement:n?.parseJudgement,signal:n?.signal,timeout:n?.timeout},o,"__imperative_debate")},async runGoal(e,t,o,n){return X(),Gt({nodes:e,when:o,satisfaction:n?.satisfaction,maxSteps:n?.maxSteps,extract:n?.extract,timeout:n?.timeout,signal:n?.signal,selectionStrategy:n?.selectionStrategy,relaxation:n?.relaxation,onStep:n?.onStep,onStall:n?.onStall,checkpoint:n?.checkpoint},t,"__imperative_goal")},async resumeGoal(e,t){if(X(),!e||e.version!==1||e.type!=="goal")throw new Error("[Directive MultiAgent] Invalid goal checkpoint state");return Gt(t,{},e.patternId,e)},async resumeSequential(e,t){if(X(),!e||e.version!==1||e.type!=="sequential")throw new Error("[Directive MultiAgent] Invalid sequential checkpoint state");return tn(t,e.currentInput,e.patternId,e)},async resumeSupervisor(e,t,o){if(X(),!e||e.version!==1||e.type!=="supervisor")throw new Error("[Directive MultiAgent] Invalid supervisor checkpoint state");let n=o?.input??e.currentInput;return nn(t,n,e.patternId,e)},async resumeReflect(e,t,o){if(X(),!e||e.version!==1||e.type!=="reflect")throw new Error("[Directive MultiAgent] Invalid reflect checkpoint state");let n=o?.input??e.effectiveInput;return Nt(t,n,e.patternId,e)},async resumeDebate(e,t){if(X(),!e||e.version!==1||e.type!=="debate")throw new Error("[Directive MultiAgent] Invalid debate checkpoint state");return qt(t,e.currentInput,e.patternId,e)},async resumeDag(e,t,o){if(X(),!e||e.version!==1||e.type!=="dag")throw new Error("[Directive MultiAgent] Invalid DAG checkpoint state");let n=o?.input??e.input;return rn(t,n,e.patternId,e)},async replay(e,t,o){if(X(),!we)throw new Error("[Directive MultiAgent] No checkpoint store configured");let n=await we.load(e);if(!n)throw new Error(`[Directive MultiAgent] Checkpoint not found: ${e}`);let a;try{let p=JSON.parse(n.systemExport);if(!p||typeof p!="object")throw new Error("Parsed checkpoint state is not an object");let h=new Set(["__proto__","constructor","prototype"]);for(let S of Object.keys(p))if(h.has(S))throw new Error(`Checkpoint state contains blocked key: ${S}`);if(!new Set(["sequential","supervisor","reflect","debate","dag","goal"]).has(p.type))throw new Error(`Unknown checkpoint pattern type: ${p.type}`);if(p.version!==1)throw new Error(`Unsupported checkpoint version: ${p.version}`);a=p;}catch(p){throw new Error(`[Directive MultiAgent] Invalid checkpoint state: ${p instanceof Error?p.message:String(p)}`)}let l=ot(a),u=o?.input??("currentInput"in a?a.currentInput:"");switch(P&&P.record({type:"checkpoint_restore",timestamp:Date.now(),snapshotId:null,checkpointId:e,patternType:a.type,step:l}),a.type){case "sequential":return tn(t,u,a.patternId,a);case "supervisor":return nn(t,u,a.patternId,a);case "reflect":return Nt(t,u,a.patternId,a);case "debate":return qt(t,u,a.patternId,a);case "dag":return rn(t,u,a.patternId,a);case "goal":return Gt(t,a.facts,a.patternId,a)}},resumeBreakpoint(e,t){X(),t&&ct.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.resolved,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),resolved:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] resumeBreakpoint() ignored: no pending breakpoint "${e}"`);},cancelBreakpoint(e,t){X(),t&&bt.set(e,t);for(let o of Object.keys(W)){let n=ie(o);if(We(n).pending.some(l=>l.id===e)){K.batch(()=>{let l=We(n),u=[...l.cancelled,e];ze(n,{...l,pending:l.pending.filter(p=>p.id!==e),cancelled:u.length>At?u.slice(-At):u});});return}}ee&&console.debug(`[Directive MultiAgent] cancelBreakpoint() ignored: no pending breakpoint "${e}"`);},getPendingBreakpoints(){let e=[];for(let t of Object.keys(W)){let o=ie(t),n=We(o);e.push(...n.pending);}return e},getLastReflectionHistory(){return Oe?[...Oe]:null},destroy(){Xt||(Cn.reset(),$t.clear(),lt.clear(),It.clear(),jt.clear(),Xt=true,K.destroy());}};return Me(),Cn}export{mo as $,Vr as A,Yr as B,Xr as C,Zr as D,Qr as E,eo as F,to as G,no as H,ro as I,Hn as J,xt as K,Lr as L,mn as M,Ee as N,ot as O,xr as P,Cr as Q,Er as R,hn as S,ao as T,io as U,uo as V,lo as W,co as X,po as Y,fo as Z,go as _,cn as a,ho as aa,jr as b,yo as ba,Ht as c,ko as ca,Ut as d,To as da,qn as e,So as ea,St as f,xo as fa,Ue as g,Ao as ga,gt as h,Co as ha,Je as i,Eo as ia,dn as j,Do as ja,mt as k,Un as ka,pn as l,Oo as la,ht as m,Po as ma,We as n,Mo as na,ze as o,_o as oa,Ce as p,jo as pa,Jt as q,Io as qa,Gr as r,Zo as ra,At as s,Gn as t,Fn as u,Ct as v,Ke as w,fn as x,Bn as y,Kr as z};//# sourceMappingURL=chunk-CMH5TJGN.js.map
67
+ //# sourceMappingURL=chunk-CMH5TJGN.js.map