@cognipeer/agent-sdk 0.7.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/utilTokens.ts","../src/adapters/langchain.ts","../src/structuredOutput/types.ts","../src/structuredOutput/nativeStrategy.ts","../src/tool.ts","../src/structuredOutput/toolStrategy.ts","../src/structuredOutput/resolver.ts","../src/model.ts","../src/prompts.ts","../src/types.ts","../src/nodes/resolver.ts","../src/utils/usage.ts","../src/utils/tracing.ts","../src/nodes/agentCore.ts","../src/utils/content.ts","../src/utils/traceSections.ts","../src/smart/runtimeConfig.ts","../src/smart/toolResponses.ts","../src/nodes/tools.ts","../src/nodes/toolLimitFinalize.ts","../src/nodes/reflect.ts","../src/smart/reasoning.ts","../src/guardrails/engine.ts","../src/utils/stateSnapshot.ts","../src/utils/toolApprovals.ts","../src/utils/userQuestions.ts","../src/humanLoop.ts","../src/agent.ts","../src/utils/syntheticMessages.ts","../src/structuredOutput/manager.ts","../src/nodes/agent.ts","../src/nodes/contextSummarize.ts","../src/smart/contextPolicy.ts","../src/index.ts","../src/contextTools.ts","../src/graph/decisions.ts","../src/smart/memory.ts","../src/smart/skills/types.ts","../src/smart/skills/registry.ts","../src/smart/skills/skillTools.ts","../src/smart/index.ts","../src/smart/eval.ts","../src/guardrails/checks.ts","../src/guardrails/index.ts","../src/providers/types.ts","../src/providers/base.ts","../src/providers/utils/sse.ts","../src/providers/utils/reasoning.ts","../src/providers/openai.ts","../src/providers/anthropic.ts","../src/providers/azure.ts","../src/providers/openaiCompatible.ts","../src/providers/utils/sigv4.ts","../src/providers/bedrock.ts","../src/providers/vertex.ts","../src/providers/adapter.ts","../src/providers/index.ts"],"names":["extractMessageText","createRequire","z","wrapped","path","clone","zodToJsonSchema","GuardrailPhase","getNestedValue","fs","nanoid","crypto","status","Buffer","extractText","durationMs","ZodError","executionId","responsePolicy","outputBytes","tool","randomUUID","entry","result","ctx","setTokenCounter","systemMessage","state","AjvModule","createHash","createHmac","content","safeJsonParse","parts","converted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAgBO,SAAS,oBAAoB,IAAA,EAAsB;AACxD,EAAA,IAAI,CAAC,MAAM,OAAO,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA,IAAK,EAAC,EAAG,MAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,GAAS,aAAA;AAEjC,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,UAAA,GAAa,CAAA,GAAI,gBAAgB,GAAG,CAAA;AACvD;AASO,SAAS,gBAAgB,OAAA,EAAqC;AACnE,EAAA,kBAAA,GAAqB,OAAO,OAAA,KAAY,UAAA,GAAa,OAAA,GAAU,mBAAA;AACjE;AAEO,SAAS,eAAA,GAAgC;AAC9C,EAAA,OAAO,kBAAA;AACT;AAGO,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,OAAO,kBAAA,CAAmB,QAAQ,EAAE,CAAA;AACtC;AAYA,SAASA,oBAAmB,CAAA,EAAgB;AAC1C,EAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AACf,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AACvB,EAAA,IAAI,CAAA,CAAE,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAE,IAAI,CAAA;AAG7B,EAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,OAAO,CAAA;AAAA,EACtB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AACnC,IAAA,KAAA,MAAW,CAAA,IAAK,EAAE,OAAA,EAAS;AACzB,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,WAAA,IAC9B,CAAA,EAAG,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA,WAAA,IAC1B,CAAA,EAAG,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,EAAE,OAAO,CAAA;AAAA,WAAA,IAChC,CAAA,EAAG,IAAA,KAAS,UAAA,IAAc,CAAA,EAAG,KAAA,EAAO;AAE3C,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AACvB,QAAA,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,CAAA,CAAE,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,MAC5E,CAAA,MAAA,IAAW,CAAA,IAAK,IAAA,IAAQ,OAAO,MAAM,QAAA,EAAU;AAC7C,QAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,WAAW,CAAA,CAAE,OAAA,IAAW,QAAQ,OAAO,CAAA,CAAE,YAAY,QAAA,EAAU;AAC7D,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EACtC;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,UAAU,CAAA,EAAG;AAC/B,IAAA,KAAA,MAAW,EAAA,IAAM,EAAE,UAAA,EAAY;AAC7B,MAAA,IAAI,IAAI,QAAA,EAAU,IAAA,QAAY,IAAA,CAAK,EAAA,CAAG,SAAS,IAAI,CAAA;AACnD,MAAA,IAAI,EAAA,EAAI,UAAU,SAAA,EAAW;AAC3B,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,OAAO,EAAA,CAAG,QAAA,CAAS,SAAA,KAAc,QAAA,GAC7B,EAAA,CAAG,QAAA,CAAS,SAAA,GACZ,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,SAAS;AAAA,SAC1C;AAAA,MACF;AAEA,MAAA,IAAI,EAAA,EAAI,QAAQ,CAAC,EAAA,EAAI,UAAU,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AACvD,MAAA,IAAI,EAAA,EAAI,IAAA,IAAQ,CAAC,EAAA,EAAI,UAAU,SAAA,EAAW;AACxC,QAAA,KAAA,CAAM,IAAA,CAAK,OAAO,EAAA,CAAG,IAAA,KAAS,QAAA,GAAW,EAAA,CAAG,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,IAAI,CAAC,CAAA;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,iBAAA,EAAmB,UAAU,CAAA,EAAG;AAClD,IAAA,KAAA,MAAW,EAAA,IAAM,CAAA,CAAE,iBAAA,CAAkB,UAAA,EAAY;AAC/C,MAAA,IAAI,IAAI,QAAA,EAAU,IAAA,QAAY,IAAA,CAAK,EAAA,CAAG,SAAS,IAAI,CAAA;AACnD,MAAA,IAAI,EAAA,EAAI,UAAU,SAAA,EAAW;AAC3B,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,OAAO,EAAA,CAAG,QAAA,CAAS,SAAA,KAAc,QAAA,GAC7B,EAAA,CAAG,QAAA,CAAS,SAAA,GACZ,IAAA,CAAK,SAAA,CAAU,EAAA,CAAG,QAAA,CAAS,SAAS;AAAA,SAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAYO,SAAS,oBAAoB,QAAA,EAAyB;AAC3D,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,QAAQ,KAAK,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,CAAA;AAC9D,EAAA,MAAM,UAAU,QAAA,CAAS,GAAA,CAAIA,mBAAkB,CAAA,CAAE,KAAK,IAAI,CAAA;AAE1D,EAAA,OAAO,iBAAA,CAAkB,OAAO,CAAA,GAAI,QAAA,CAAS,MAAA,GAAS,CAAA;AACxD;AAtIA,IAyBI,kBAAA;AAzBJ,IAAA,eAAA,GAAA,KAAA,CAAA;AAAA,EAAA,yBAAA,GAAA;AAyBA,IAAI,kBAAA,GAAmC,mBAAA;AAAA,EAAA;AAAA,CAAA,CAAA;AClBvC,IAAM,UAAA,GAAa,uBAAA;AACnB,IAAI,iBAAA;AACJ,IAAI,yBAAA,GAA4B,KAAA;AAEhC,IAAI,SAAA,GAAiD,IAAA;AACrD,IAAI;AACF,EAAA,SAAA,GAAYC,sBAAA,CAAc,2PAAe,CAAA;AAC3C,CAAA,CAAA,MAAQ;AACN,EAAA,SAAA,GAAY,IAAA;AACd;AAEA,SAAS,YAAY,IAAA,EAAmC;AACtD,EAAA,IAAI,OAAO,KAAK,MAAA,KAAW,UAAA,SAAmB,CAAC,KAAA,KAAe,IAAA,CAAK,MAAA,CAAQ,KAAK,CAAA;AAChF,EAAA,IAAI,OAAO,KAAK,IAAA,KAAS,UAAA,SAAmB,CAAC,KAAA,KAAe,IAAA,CAAK,IAAA,CAAM,KAAK,CAAA;AAC5E,EAAA,IAAI,OAAQ,KAAa,IAAA,KAAS,UAAA,SAAmB,CAAC,KAAA,KAAgB,IAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AAC7F,EAAA,IAAI,OAAQ,KAAa,GAAA,KAAQ,UAAA,SAAmB,CAAC,KAAA,KAAgB,IAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAC3F,EAAA,IAAI,OAAQ,SAAqC,UAAA,EAAY;AAC3D,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,IAAA,EAAM,IAAA,IAAQ,WAAW,CAAA,iBAAA,CAAmB,CAAA;AACtE;AAEA,SAAS,wBAAA,GAA8F;AACrG,EAAA,IAAI,yBAAA,SAAkC,iBAAA,IAAqB,IAAA;AAC3D,EAAA,yBAAA,GAA4B,IAAA;AAC5B,EAAA,iBAAA,GAAoB,IAAA;AACpB,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAChC,IAAA,MAAM,UAAU,OAAO,GAAA,EAAK,IAAA,KAAS,UAAA,GAAa,IAAI,IAAA,GAAO,KAAA,CAAA;AAC7D,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,iBAAA,GAAoB,OAAA;AAAA,IACtB;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,iBAAA,GAAoB,IAAA;AAAA,EACtB;AACA,EAAA,OAAO,iBAAA,IAAqB,IAAA;AAC9B;AAEA,SAAS,aAAa,SAAA,EAAgB;AACpC,EAAA,IAAI,CAAC,SAAA,EAAW,OAAOC,KAAA,CAAE,GAAA,EAAI;AAC7B,EAAA,IAAI,SAAA,YAAqBA,KAAA,CAAE,OAAA,EAAS,OAAO,SAAA;AAC3C,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,iBAAiB,KAAA,EAA+B;AAC9D,EAAA,MAAM,UAAU,wBAAA,EAAyB;AACzC,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAK,IAAA,CAAa,QAAA,EAAU,OAAQ,IAAA,CAAa,QAAA;AAEjD,IAAA,MAAM,QAAA,GAAW,YAAY,IAAI,CAAA;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,OAAA,CAAQ,OAAO,KAAA,KAAe,QAAA,CAAS,KAAK,CAAA,EAAG;AAAA,QAC5D,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,MAAA,EAAQ,YAAA,CAAc,IAAA,CAAa,MAAM;AAAA,OAC1C,CAAA;AACD,MAAC,KAAa,QAAA,GAAW,MAAA;AACzB,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AACH;AAEO,SAAS,mBAA4D,KAAA,EAAmB;AAC7F,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAc;AAC9B,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,IAAK,IAAA,CAAa,QAAA,KAAa,OAAA,EAAS,OAAO,IAAA;AAC/C,IAAA,IAAI,OAAO,IAAA,KAAS,UAAA,IAAc,CAAC,KAAK,IAAA,EAAM;AAC5C,MAAA,MAAMC,WAAU,gBAAA,CAAiB;AAAA,QAC/B,IAAA,EAAM,gBAAA;AAAA,QACN,WAAA,EAAa,MAAA;AAAA,QACb,MAAA,EAAQD,MAAE,GAAA,EAAI;AAAA,QACd,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAACC,SAAgB,QAAA,GAAW,WAAA;AAC5B,MAACA,SAAgB,IAAA,GAAO,IAAA;AACxB,MAAA,OAAOA,QAAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAS,IAAA,EAAM,WAAW,IAAA,IAAoB,IAAA,EAAM,QAAQ,IAAA,IAAmB,MAAA;AACjG,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,IAAe,IAAA,EAAM,SAAA,EAAW,WAAA;AACzD,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA,IAAU,MAAM,SAAA,EAAW,MAAA,IAAUD,MAAE,GAAA,EAAI;AAC/D,IAAA,MAAM,QAAA,GAAyB,CAAC,KAAA,KAAe;AAC7C,MAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,YAAY,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAC/D,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,YAAY,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AAC3D,MAAA,IAAI,OAAO,IAAA,CAAK,KAAA,KAAU,YAAY,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAC7D,MAAA,IAAI,OAAO,IAAA,CAAK,GAAA,KAAQ,YAAY,OAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AACzD,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,YAAY,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AAC3D,MAAA,IAAI,OAAO,IAAA,KAAS,UAAA,EAAY,OAAO,KAAK,KAAK,CAAA;AACjD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,iBAAA,CAAmB,CAAA;AAAA,IAC3D,CAAA;AAEA,IAAA,MAAM,UAAU,gBAAA,CAAiB;AAAA,MAC/B,IAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAC,QAAgB,QAAA,GAAW,WAAA;AAC5B,IAAC,QAAgB,IAAA,GAAO,IAAA;AACxB,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,SAAS,gBAAA,CAAiB;AAAA,EACxB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKkB;AAChB,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,KAAe,QAAA,CAAS,KAAK,CAAA;AACnD,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,MAAA;AAAA,IACL,IAAA,EAAM;AAAA,GACR;AACF;;;ACxEO,SAAS,cAAA,CAAe,KAAcE,KAAAA,EAAoC;AAC/E,EAAA,IAAI,OAAA,GAAe,GAAA;AACnB,EAAA,KAAA,MAAW,OAAOA,KAAAA,EAAM;AACtB,IAAA,IAAI,OAAA,IAAW,IAAA,IAAQ,OAAO,OAAA,KAAY,UAAU,OAAO,MAAA;AAC3D,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,OAAA;AACT;AAIO,SAAS,cAAA,CAAe,OAAsB,UAAA,EAA4C;AAC/F,EAAA,MAAM,WAAA,GAA4C,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC7E,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAAA,IAC9B,QAAA,EAAW,KAAA,CAAc,QAAA,IAAY,KAAA,CAAM,IAAA;AAAA,IAC3C,QAAA,EAAW,MAAc,QAAA,IAAY,SAAA;AAAA,IACrC,SAAS,KAAA,CAAM;AAAA,GACjB,CAAE,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,kBAAA;AAAA,IACN,SAAS,CAAA,0BAAA,EAA6B,WAAA,CAAY,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,EAAE,OAAO,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,IAClG,WAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC7EO,IAAM,2BAAN,MAAmE;AAAA,EAAnE,WAAA,GAAA;AACL,IAAA,IAAA,CAAS,IAAA,GAAO,QAAA;AAAA,EAAA;AAAA,EAER,kBAAA,CAAmB,UAA+B,OAAA,EAA0B;AAClF,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAC7B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAW,OAAA,CACd,KAAA,CAAM,CAAC,CAAA,CACP,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,QAAQ,KAAA,EAAO,GAAG,EAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA;AAEnE,IAAA,IAAI,OAAA,GAAmB,QAAA;AACvB,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,CAAC,OAAA,IAAW,OAAO,YAAY,QAAA,IAAY,EAAE,WAAY,OAAA,CAAA,EAAsC;AACjG,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,OAAA,GAAW,QAAoC,OAAO,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,uBAAuB,MAAA,EAAkD;AAC/E,IAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAM,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GAAW,OAAO,IAAA,GAAO,IAAA;AAC5D,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,GAAG,CAAA;AACpD,IAAA,IAAI,CAAC,YAAY,OAAO,QAAA,KAAa,YAAY,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACxE,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,cAAA,GAAiB,EAAE,GAAI,QAAA,EAAiC;AAC9D,IAAA,IAAI,cAAA,CAAe,SAAS,QAAA,EAAU;AACpC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,MAAA,CAAO,WAAA,IAAe,cAAA,CAAe,WAAA,KAAgB,MAAA,EAAW;AAClE,MAAA,cAAA,CAAe,cAAc,MAAA,CAAO,WAAA;AAAA,IACtC;AAEA,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,cAAA,CAAe,KAAA,KAAU,MAAA,EAAW;AACtD,MAAA,cAAA,CAAe,QAAQ,MAAA,CAAO,KAAA;AAAA,IAChC;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA,EAEQ,4BAA4B,MAAA,EAAkD;AACpF,IAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAmB;AAChC,MAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,IAAA;AAE9C,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,QAAA,OAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,MACvB;AAEA,MAAA,MAAMC,MAAAA,GAA6B,EAAE,GAAG,IAAA,EAAK;AAE7C,MAAA,IAAIA,MAAAA,CAAM,UAAA,IAAc,OAAOA,MAAAA,CAAM,eAAe,QAAA,EAAU;AAC5D,QAAA,MAAM,uBAA4C,EAAC;AACnD,QAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQA,MAAAA,CAAM,UAAU,CAAA,EAAG;AAC3D,UAAA,oBAAA,CAAqB,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,CAAA;AAAA,QACzC;AACA,QAAAA,OAAM,UAAA,GAAa,oBAAA;AACnB,QAAAA,MAAAA,CAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,oBAAoB,CAAA;AACjD,QAAA,IAAIA,MAAAA,CAAM,yBAAyB,MAAA,EAAW;AAC5C,UAAAA,OAAM,oBAAA,GAAuB,KAAA;AAAA,QAC/B;AAAA,MACF;AAEA,MAAA,IAAIA,OAAM,KAAA,EAAO;AACf,QAAAA,MAAAA,CAAM,KAAA,GAAQ,KAAA,CAAMA,MAAAA,CAAM,KAAK,CAAA;AAAA,MACjC;AAEA,MAAA,IAAIA,MAAAA,CAAM,WAAA,IAAe,OAAOA,MAAAA,CAAM,gBAAgB,QAAA,EAAU;AAC9D,QAAA,MAAM,wBAA6C,EAAC;AACpD,QAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQA,MAAAA,CAAM,WAAW,CAAA,EAAG;AAC5D,UAAA,qBAAA,CAAsB,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,CAAA;AAAA,QAC1C;AACA,QAAAA,OAAM,WAAA,GAAc,qBAAA;AAAA,MACtB;AAEA,MAAA,IAAIA,MAAAA,CAAM,KAAA,IAAS,OAAOA,MAAAA,CAAM,UAAU,QAAA,EAAU;AAClD,QAAA,MAAM,iBAAsC,EAAC;AAC7C,QAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQA,MAAAA,CAAM,KAAK,CAAA,EAAG;AACtD,UAAA,cAAA,CAAe,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,CAAA;AAAA,QACnC;AACA,QAAAA,OAAM,KAAA,GAAQ,cAAA;AAAA,MAChB;AAEA,MAAA,KAAA,MAAW,YAAA,IAAgB,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,EAAG;AACtD,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQA,MAAAA,CAAM,YAAY,CAAC,CAAA,EAAG;AACtC,UAAAA,OAAM,YAAY,CAAA,GAAIA,OAAM,YAAY,CAAA,CAAE,IAAI,KAAK,CAAA;AAAA,QACrD;AAAA,MACF;AAEA,MAAA,OAAOA,MAAAA;AAAA,IACT,CAAA;AAEA,IAAA,OAAO,MAAM,MAAM,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,CAAa,MAAA,EAAwB,IAAA,GAAO,qBAAA,EAA4C;AAItF,IAAA,MAAM,MAAA,GAASC,gCAAgB,MAAA,EAAQ;AAAA,MACrC,IAAA;AAAA,MACA,gBAAA,EAAkB,IAAA;AAAA,MAClB,YAAA,EAAc,eAAA;AAAA,MACd,YAAA,EAAc,iBAAA;AAAA,MACd,gBAAA,EAAkB;AAAA,KACnB,CAAA;AACD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,2BAAA,CAA4B,MAA6B,CAAA;AACjF,IAAA,OAAO,IAAA,CAAK,uBAAuB,UAAU,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAA,CAAoB,QAAwB,IAAA,EAAoC;AAC9E,IAAA,MAAM,aAAa,IAAA,IAAQ,qBAAA;AAC3B,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,UAAU,CAAA;AAEvD,IAAA,OAAO,WAAW,SAAS,CAAA;AAE3B,IAAA,OAAO;AAAA,MACL,eAAA,EAAiB;AAAA,QACf,IAAA,EAAM,aAAA;AAAA,QACN,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,UAAA;AAAA,UACN,MAAA,EAAQ,IAAA;AAAA,UACR,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAA,CAAiB,SAAiB,MAAA,EAAsE;AACtG,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC9B,MAAA,MAAM,SAAA,GAAa,MAAA,CAAe,KAAA,CAAM,GAAG,CAAA;AAC3C,MAAA,OAAO,EAAE,MAAM,SAAA,EAAU;AAAA,IAC3B,SAAS,CAAA,EAAQ;AACf,MAAA,IAAI,GAAG,MAAA,EAAQ;AACb,QAAA,OAAO,EAAE,KAAA,EAAO,cAAA,CAAe,CAAA,EAAkB,OAAO,CAAA,EAAE;AAAA,MAC5D;AACA,MAAA,OAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,aAAA;AAAA,UACN,OAAA,EAAS,CAAA,0CAAA,EAA6C,CAAA,EAAG,OAAO,CAAA,CAAA;AAAA,UAChE,UAAA,EAAY;AAAA;AACd,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAA,CAAsB,OAAsB,eAAA,EAAkC;AAC5E,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CACvB,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AACxC,MAAA,MAAM,QAAA,GAAW,cAAA,CAAe,eAAA,EAAiB,KAAA,CAAM,IAAI,CAAA;AAC3D,MAAA,OAAO,CAAA,GAAA,EAAM,OAAO,CAAA,GAAA,EAAM,KAAA,CAAM,OAAO,CAAA,YAAA,EAAe,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA,CAAA;AAAA,IAChF,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,IAAA,OAAO;AAAA,MACL,oDAAA;AAAA,MACA,WAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AACF;;;AC5KO,SAAS,UAAA,CAAW;AAAA,EACvB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAA,EAakB;AACd,EAAA,MAAM,OAAA,GAAuB,OAAO,KAAA,KAAe,IAAA,CAAK,KAAK,CAAA;AAE7D,EAAA,MAAM,UAAA,GAA4B;AAAA,IAC9B,IAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA;AAAA,IAEA,MAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,OAAA;AAAA,IACL,IAAA,EAAM;AAAA,GACV;AAEA,EAAA,IAAI,OAAO,kBAAkB,SAAA,EAAW;AACpC,IAAC,WAAmB,aAAA,GAAgB,aAAA;AAAA,EACxC;AACA,EAAA,IAAI,mBAAmB,MAAA,EAAW;AAC9B,IAAC,WAAmB,cAAA,GAAiB,cAAA;AAAA,EACzC;AACA,EAAA,IAAI,qBAAqB,MAAA,EAAW;AAChC,IAAC,WAAmB,gBAAA,GAAmB,gBAAA;AAAA,EAC3C;AACA,EAAA,IAAI,wBAAwB,MAAA,EAAW;AACnC,IAAC,WAAmB,mBAAA,GAAsB,mBAAA;AAAA,EAC9C;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAC,WAAmB,KAAA,GAAQ,KAAA;AAAA,EAChC;AACA,EAAA,IAAI,UAAU,MAAA,EAAW;AACrB,IAAC,WAAmB,KAAA,GAAQ,KAAA;AAAA,EAChC;AAEA,EAAC,UAAA,CAAmB,QAAA,GAAY,UAAA,CAAmB,QAAA,IAAY,OAAA;AAC/D,EAAC,WAAmB,MAAA,GAAS,IAAA;AAE7B,EAAA,OAAO,UAAA;AACX;;;AC/EO,IAAM,oBAAN,MAA4D;AAAA,EAA5D,WAAA,GAAA;AACL,IAAA,IAAA,CAAS,IAAA,GAAO,YAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB,mBAAsB,MAAA,EAAqC;AACzD,IAAA,OAAO,UAAA,CAAW;AAAA,MAChB,IAAA,EAAM,UAAA;AAAA,MACN,WAAA,EACE,gJAAA;AAAA,MACF,MAAA;AAAA,MACA,IAAA,EAAM,OAAO,IAAA,KAAc;AACzB,QAAA,IAAI;AACF,UAAA,MAAM,YAAa,MAAA,CAAe,KAAA,GAAS,MAAA,CAAe,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AACxE,UAAA,OAAO,EAAE,uBAAA,EAAyB,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,QAC1D,SAAS,CAAA,EAAQ;AAEf,UAAA,MAAM,QAAA,GAAW,CAAA;AACjB,UAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,YAAA,MAAM,OAAA,GAAU,eAAe,QAAQ,CAAA;AACvC,YAAA,OAAO;AAAA,cACL,KAAA,EAAO,0BAAA;AAAA,cACP,SAAS,OAAA,CAAQ,OAAA;AAAA,cACjB,aAAa,OAAA,CAAQ;AAAA,aACvB;AAAA,UACF;AACA,UAAA,OAAO,EAAE,KAAA,EAAO,0BAAA,EAA4B,OAAA,EAAS,GAAG,OAAA,EAAQ;AAAA,QAClE;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAA,CAAmB,SAAiB,MAAA,EAAsE;AACxG,IAAA,IAAI,QAAA,GAA0B,IAAA;AAG9B,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,8BAA8B,CAAA;AAC3D,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,CAAC,CAAA,EAAG;AACvB,MAAA,QAAA,GAAW,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,IAC5B,CAAA,MAAO;AAEL,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACpC,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACtC,MAAA,MAAM,aAAa,CAAC,QAAA,EAAU,UAAU,CAAA,CAAE,OAAO,CAAC,CAAA,KAAM,CAAA,IAAK,CAAC,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACpF,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,QAAA,GAAW,QAAQ,KAAA,CAAM,UAAA,CAAW,CAAC,CAAC,EAAE,IAAA,EAAK;AAAA,MAC/C;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,QAAA,IAAY,OAAO,CAAA;AAC1C,MAAA,MAAM,SAAA,GAAa,MAAA,CAAe,KAAA,CAAM,GAAG,CAAA;AAC3C,MAAA,OAAO,EAAE,MAAM,SAAA,EAAU;AAAA,IAC3B,SAAS,CAAA,EAAQ;AACf,MAAA,IAAI,GAAG,MAAA,EAAQ;AACb,QAAA,OAAO,EAAE,KAAA,EAAO,cAAA,CAAe,CAAA,EAAkB,OAAO,CAAA,EAAE;AAAA,MAC5D;AACA,MAAA,OAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,aAAA;AAAA,UACN,OAAA,EAAS,CAAA,6CAAA,EAAgD,CAAA,EAAG,OAAO,CAAA,CAAA;AAAA,UACnE,UAAA,EAAY;AAAA;AACd,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAA,CAAsB,OAAsB,eAAA,EAAkC;AAC5E,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CACvB,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AACxC,MAAA,MAAM,QAAA,GAAW,cAAA,CAAe,eAAA,EAAiB,KAAA,CAAM,IAAI,CAAA;AAC3D,MAAA,OAAO,CAAA,GAAA,EAAM,OAAO,CAAA,GAAA,EAAM,KAAA,CAAM,OAAO,CAAA,YAAA,EAAe,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA,CAAA;AAAA,IAChF,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAEZ,IAAA,OAAO;AAAA,MACL,wDAAA;AAAA,MACA,WAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AACF;;;ACvFO,SAAS,gBAAgB,KAAA,EAAsC;AACpE,EAAA,MAAM,YAAA,GAAe,qBAAqB,KAAK,CAAA;AAE/C,EAAA,IAAI,YAAA,CAAa,qBAAqB,QAAA,EAAU;AAC9C,IAAA,OAAO,IAAI,wBAAA,EAAyB;AAAA,EACtC;AAEA,EAAA,OAAO,IAAI,iBAAA,EAAkB;AAC/B;AAQO,SAAS,qBAAqB,KAAA,EAA+B;AAElE,EAAA,IAAI,KAAA,EAAO,YAAA,IAAgB,OAAO,KAAA,CAAM,iBAAiB,QAAA,EAAU;AACjE,IAAA,OAAO,KAAA,CAAM,YAAA;AAAA,EACf;AAGA,EAAA,MAAM,QAAA,GAAW,eAAe,KAAK,CAAA;AACrC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA,gBAAA,EAAkB,8BAAA,CAA+B,QAAQ,CAAA,GAAI,QAAA,GAAW,YAAA;AAAA,MACxE,iBAAA,EAAmB,0BAA0B,QAAQ,CAAA;AAAA,MACrD,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAGA,EAAA,OAAO,EAAE,kBAAkB,YAAA,EAAa;AAC1C;AAMA,SAAS,eAAe,KAAA,EAAgC;AACtD,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAGhD,EAAA,IAAI,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,SAAiB,KAAA,CAAM,QAAA;AAGrD,EAAA,MAAM,UAAU,KAAA,CAAM,GAAA;AACtB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,0BAA0B,OAAO,CAAA;AAAA,EAC1C;AAGA,EAAA,MAAM,SAAA,GAAoB,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,KAAA,IAAS,EAAA;AAC5D,EAAA,IAAI,UAAU,UAAA,CAAW,MAAM,CAAA,IAAK,SAAA,CAAU,WAAW,IAAI,CAAA,IAAK,SAAA,CAAU,UAAA,CAAW,IAAI,CAAA,IAAK,SAAA,CAAU,UAAA,CAAW,IAAI,GAAG,OAAO,QAAA;AACnI,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,WAAA;AAC3C,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,QAAA;AAC3C,EAAA,IAAI,SAAA,CAAU,WAAW,SAAS,CAAA,IAAK,UAAU,UAAA,CAAW,YAAY,GAAG,OAAO,SAAA;AAElF,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,0BAA0B,OAAA,EAAkC;AACnE,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,WAAA,EAAa,IAAA,IAAQ,EAAA;AAC/C,EAAA,IAAI,SAAA,CAAU,SAAS,YAAY,CAAA,IAAK,UAAU,QAAA,CAAS,iBAAiB,GAAG,OAAO,QAAA;AACtF,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,eAAe,CAAA,EAAG,OAAO,WAAA;AAChD,EAAA,IAAI,SAAA,CAAU,SAAS,wBAAwB,CAAA,IAAK,UAAU,QAAA,CAAS,cAAc,GAAG,OAAO,QAAA;AAC/F,EAAA,IAAI,SAAA,CAAU,SAAS,aAAa,CAAA,IAAK,UAAU,QAAA,CAAS,aAAa,GAAG,OAAO,SAAA;AACnF,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,UAAU,CAAA,EAAG,OAAO,MAAA;AAC3C,EAAA,IAAI,SAAA,CAAU,QAAA,CAAS,eAAe,CAAA,EAAG,OAAO,SAAA;AAGhD,EAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,QAAA,KAAa,aAAa,OAAA,CAAQ,QAAA,KAAa,OAAA,CAAQ,QAAA;AACtF,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,QAAA;AACvC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,WAAA;AAC1C,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,QAAA;AAAA,EACzC;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,+BAA+B,QAAA,EAA2B;AACjE,EAAA,OAAO,CAAC,QAAA,EAAU,QAAA,EAAU,QAAQ,SAAS,CAAA,CAAE,SAAS,QAAQ,CAAA;AAClE;AAEA,SAAS,0BAA0B,QAAA,EAA2B;AAC5D,EAAA,OAAO,CAAC,QAAQ,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AACrC;;;AClEO,SAAS,aAAa,CAAA,EAAyB;AACpD,EAAA,OAAO,CAAC,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,IAAY,OAAO,EAAE,MAAA,KAAW,UAAA;AAC7D;AAEO,SAAS,SAAA,CAAU,KAAA,EAAmB,KAAA,EAAc,OAAA,EAAoD;AAC7G,EAAA,IAAI,OAAO,SAAA,EAAW,OAAO,KAAA,CAAM,SAAA,CAAU,OAAO,OAAO,CAAA;AAC3D,EAAA,OAAO,KAAA;AACT;AAOO,SAAS,mBAAmB,OAAA,EAA6B;AAC9D,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAG3E,EAAA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAsB;AAC9C,IAAA,IAAI,OAAA,IAAW,MAAM,OAAO,OAAA;AAC5B,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAc;AAChC,QAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,IAAA;AAC9C,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,CAAA,EAAE;AAC/E,QAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,UAAA,MAAM,MAAO,IAAA,CAAa,SAAA;AAC1B,UAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,EAAE,GAAA,EAAK,GAAA,EAAI,EAAE;AACjF,UAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,YAAA,IAAI,SAAS,GAAA,EAAK,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,WAAW,GAAA,EAAI;AAC7D,YAAA,IAAI,YAAY,GAAA,EAAK;AACnB,cAAA,MAAM,KAAA,GAAS,IAAY,UAAA,IAAc,YAAA;AACzC,cAAA,MAAM,OAAA,GAAU,CAAA,KAAA,EAAQ,KAAK,CAAA,QAAA,EAAY,IAAY,MAAM,CAAA,CAAA;AAC3D,cAAA,MAAM,SAAU,GAAA,CAAY,MAAA;AAC5B,cAAA,OAAO,EAAE,MAAM,WAAA,EAAa,SAAA,EAAW,EAAE,GAAA,EAAK,OAAA,EAAS,QAAO,EAAE;AAAA,YAClE;AAAA,UACF;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAA4B;AACxC,IAAA,IAAK,CAAA,CAAU,QAAA,IAAa,CAAA,CAAU,eAAA,EAAiB,OAAO,CAAA;AAC9D,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,iBAAiB,CAAA,CAAE,OAAO,CAAA,EAAG,IAAA,EAAM,EAAE,IAAA,EAAM,UAAA,EAAa,EAAU,UAAA,EAAY,YAAA,EAAe,EAAU,YAAA,EAAa;AAAA,EACtJ,CAAA;AAEA,EAAA,MAAM,OAAA,GAAyB;AAAA,IAC7B,MAAA,EAAQ,OAAO,QAAA,EAA6B,OAAA,KAA2H;AACrK,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AACpC,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,MAAA,CAAO,YAAY,OAAO,CAAA;AACzD,MAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,MAAM,OAAA,GAAW,QAAA,CAAiB,OAAA,IAAY,QAAA,CAAiB,IAAA,IAAQ,EAAA;AACvE,QAAA,OAAO;AAAA,UACL,IAAA,EAAO,SAAiB,IAAA,IAAQ,WAAA;AAAA,UAC9B,OAAA;AAAA,UACA,YAAa,QAAA,CAAiB,UAAA;AAAA,UAC9B,KAAA,EAAQ,SAAiB,KAAA,IACnB,QAAA,CAAiB,kBACjB,QAAA,CAAiB,iBAAA,EAAmB,WAAA,IACpC,QAAA,CAAiB,iBAAA,EAAmB,UAAA;AAAA,UAC1C,gBAAiB,QAAA,CAAiB,cAAA;AAAA,UAClC,mBAAoB,QAAA,CAAiB,iBAAA;AAAA,UACrC,GAAG;AAAA,SACP;AAAA,MACF;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA,EAAE;AAAA,IAC9D,CAAA;AAAA,IACA,MAAA,EAAQ,iBAAiB,QAAA,EAA6B,OAAA,EAA8F;AAClJ,MAAA,IAAI,OAAO,OAAA,CAAQ,MAAA,KAAW,UAAA,EAAY;AAC1C,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AACpC,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA;AACvD,MAAA,MAAM,SAAS,OAAQ,YAAA,EAAmC,IAAA,KAAS,UAAA,GAAa,MAAM,YAAA,GAAe,YAAA;AACrG,MAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,EAAc,OAAA,KAAuD;AAC/E,MAAA,MAAM,OAAA,GAAU,iBAAiB,KAAK,CAAA;AACtC,MAAA,IAAI,OAAO,OAAA,CAAQ,SAAA,KAAc,UAAA,EAAY;AAC3C,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AAChD,QAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,OAAO,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AACtC,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,EAAE,KAAA,EAAO,SAAS,GAAI,OAAA,IAAW,EAAC,EAAI,CAAA;AACjE,QAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,MACjC;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAW,OAAA,CAAQ,SAAA,IAAa,QAAQ,QAAA,IAAY,OAAA,CAAQ,YAAY,OAAA,CAAQ,IAAA;AAAA,IAChF,GAAA,EAAK;AAAA,GACP;AAGA,EAAA,OAAA,CAAQ,YAAA,GAAe,qBAAqB,OAAO,CAAA;AAEnD,EAAA,OAAO,OAAA;AACT;;;AC/IA,IAAM,wBAAA,GAA2B,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qEAAA,CAAA;AAiBjC,SAAS,mBAAmB,cAAA,EAAyB;AACnD,EAAA,MAAM,UAAA,GAAa,cAAA,EAAgB,IAAA,EAAK,IAAK,wBAAA;AAC7C,EAAA,IAAI,UAAA,CAAW,UAAA,CAAW,YAAY,CAAA,EAAG;AACvC,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAA;AAAA,EAAe,UAAU;AAAA,WAAA,CAAA;AAClC;AAEO,SAAS,iBAAA,CACd,KAAA,EACA,QAAA,EACA,IAAA,GAAe,SACf,cAAA,EACA;AACA,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,EAAK;AACjC,EAAA,MAAM,WAAA,GAAc,eAAe,IAAI,CAAA,CAAA;AACvC,EAAA,MAAM,eAAe,OAAO,QAAA,KAAa,QAAA,GACrC,QAAA,GACA,WACA,MAAA,GACA,KAAA;AACJ,EAAA,MAAM,aAAA,GAAgB,YAAA,KAAiB,KAAA,GACnC,kBAAA,CAAmB,cAAc,CAAA,GACjC,EAAA;AACJ,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,sEAAA;AAAA,IACA,qBAAA;AAAA,IACA,8DAAA;AAAA,IACA,iEAAA;AAAA,IACA,qEAAA;AAAA,IACA,qEAAA;AAAA,IACA,4EAAA;AAAA,IACA,iFAAA;AAAA,IACA,qXAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA,GAAe,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA,GAAK;AAAA,GACzD,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AACd;;;ACZO,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACL,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,gBAAA,UAAA,CAAA,GAAW,UAAA;AAFD,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;;AC5CL,SAAS,kBAAA,GAAqB;AACnC,EAAA,OAAO,OAAO,KAAA,KAA2C;AACvD,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,GAAI,KAAA,CAAM,WAAW,EAAC;AACnE,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,QAAA;AAAA,MACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MAC/B,aAAA,EAAe,MAAM,aAAA,IAAiB,CAAA;AAAA,MACtC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MACnC,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,MACnC,mBAAA,EAAqB,KAAA,CAAM,mBAAA,IAAuB,EAAC;AAAA,MAC/C,gBAAA,EAAkB,KAAA,CAAM,gBAAA,IAAoB,EAAC;AAAA,MAC7C,oBAAA,EAAsB,KAAA,CAAM,oBAAA,IAAwB,EAAC;AAAA,MACrD,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,MACpB,WAAA,EAAa,MAAM,WAAA,IAAe;AAAA,KACpC;AAAA,EACF,CAAA;AACF;;;ACKO,SAAS,eAAe,GAAA,EAA0D;AACvF,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,aAAA,EAAe,IAAI,YAAA,EAAc,GAAA,CAAI,YAAA,EAAc,GAAA,CAAI,mBAAmB,CAAA;AACjG,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,iBAAA,EAAmB,IAAI,aAAA,EAAe,GAAA,CAAI,gBAAA,EAAkB,GAAA,CAAI,uBAAuB,CAAA;AAElH,EAAA,MAAM,KAAA,GAAQ,GAAA;AAAA,IACZ,GAAA,CAAI,YAAA;AAAA,IACJ,GAAA,CAAI,WAAA;AAAA,IAAA,CACH,OAAO,WAAW,QAAA,GAAW,MAAA,GAAS,MAAM,OAAO,UAAA,KAAe,WAAW,UAAA,GAAa,CAAA;AAAA,GAC7F;AAKA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,qBAAA,IAAyB,GAAA,CAAI,mBAAA,IACrD,GAAA,CAAI,mBAAA,IAAuB,GAAA,CAAI,iBAAA,IAC/B,GAAA,CAAI,oBAAA,IAAwB,GAAA,CAAI,sBAChC,EAAC;AACN,EAAA,MAAM,oBAAA,GAAuB,GAAA,CAAI,yBAAA,IAA6B,GAAA,CAAI,uBAAA,IAC7D,GAAA,CAAI,oBAAA,IAAwB,GAAA,CAAI,kBAAA,IAChC,GAAA,CAAI,qBAAA,IAAyB,GAAA,CAAI,uBACjC,EAAC;AAEN,EAAA,MAAM,YAAA,GAAe,GAAA;AAAA,IACnB,gBAAA,CAAiB,aAAA;AAAA,IACjB,gBAAA,CAAiB,YAAA;AAAA,IACjB,gBAAA,CAAiB,MAAA;AAAA,IACjB,gBAAA,CAAiB,UAAA;AAAA,IACjB,gBAAA,CAAiB,SAAA;AAAA,IACjB,gBAAA,CAAiB,iBAAA;AAAA,IACjB,GAAA,CAAI,mBAAA;AAAA,IACJ,GAAA,CAAI,iBAAA;AAAA,IACJ,GAAA,CAAI,oBAAA;AAAA,IACJ,GAAA,CAAI,kBAAA;AAAA,IACJ,GAAA,CAAI,uBAAA;AAAA,IACJ,GAAA,CAAI;AAAA,GACN;AAEA,EAAA,MAAM,UAAA,GAA8B;AAAA,IAClC,aAAA,EAAe,KAAK,MAAM,CAAA;AAAA,IAC1B,iBAAA,EAAmB,KAAK,UAAU,CAAA;AAAA,IAClC,cAAc,IAAA,CAAK,KAAA,IAAA,CAAU,MAAA,IAAU,CAAA,KAAM,cAAc,CAAA,CAAE,CAAA;AAAA,IAC7D,qBAAA,EAAuB;AAAA,MACrB,aAAA,EAAe,KAAK,YAAY,CAAA;AAAA,MAChC,YAAA,EAAc,KAAK,GAAA,CAAI,gBAAA,CAAiB,cAAc,gBAAA,CAAiB,WAAA,EAAa,gBAAA,CAAiB,KAAK,CAAC;AAAA,KAC7G;AAAA,IACA,yBAAA,EAA2B;AAAA,MACzB,kBAAkB,IAAA,CAAK,GAAA,CAAI,qBAAqB,gBAAA,EAAkB,oBAAA,CAAqB,eAAe,CAAC,CAAA;AAAA,MACvG,cAAc,IAAA,CAAK,GAAA,CAAI,qBAAqB,YAAA,EAAc,oBAAA,CAAqB,WAAW,CAAC,CAAA;AAAA,MAC3F,0BAAA,EAA4B,IAAA;AAAA,QAC1B,GAAA,CAAI,oBAAA,CAAqB,0BAAA,EAA4B,oBAAA,CAAqB,wBAAwB;AAAA,OACpG;AAAA,MACA,0BAAA,EAA4B,IAAA;AAAA,QAC1B,GAAA,CAAI,oBAAA,CAAqB,0BAAA,EAA4B,oBAAA,CAAqB,wBAAwB;AAAA;AACpG,KACF;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,OAAO,IAAA,EAAiC;AAC/C,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AACpB,IAAA,IAAI,KAAK,IAAA,EAAM;AACf,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,CAAC,GAAG,OAAO,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,MAAA;AACT;AACA,SAAS,KAAK,CAAA,EAAgB;AAAE,EAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAAG,EAAA,OAAO,OAAO,QAAA,CAAS,CAAC,CAAA,IAAK,CAAA,IAAK,IAAI,CAAA,GAAI,CAAA;AAAG;ACxElG,IAAM,qBAAA,GAAwB,8DAAA;AAEvB,SAAS,SAASH,KAAAA,EAAgC;AACvD,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAAA,KAAAA,EAAK;AAC9B;AASO,SAAS,WAAW,OAAA,EAAyC;AAClE,EAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,OAAA,EAAQ;AAAA,EAC5C;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,SAAS,OAAO,OAAA,EAAS,OAAA,KAAY,UAAA,GAAa,QAAQ,OAAA,GAAU,MAAA;AAAA,IACpE,WAAW,OAAO,OAAA,EAAS,SAAA,KAAc,UAAA,GAAa,QAAQ,SAAA,GAAY;AAAA,GAC5E;AACF;AAIO,SAAS,aAAA,CAAc,OAA2B,MAAA,EAAkC;AACzF,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAM,SAAS,KAAA,IAAS,EAAA;AACxB,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAO;AAAA,EACrC;AACA,EAAA,MAAM,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,EAAK,GAAI,MAAA;AAClF,EAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,QAAQ,MAAA,EAAO;AAClD;AAEO,SAAS,QAAA,CAAS,KAAa,OAAA,EAAmD;AACvF,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAQ;AACtC;AAOO,SAAS,QAAA,CAAS,UAAkB,OAAA,EAAmD;AAC5F,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAQ;AAC3C;AACA,SAAS,kBAAA,CAAmB,UAAA,EAAqB,eAAA,GAAkB,IAAA,EAAM;AACvE,EAAA,MAAM,IAAA,GAAO,QAAQ,GAAA,EAAI;AACzB,EAAA,MAAM,IAAA,GAAO,UAAA,IAAc,UAAA,CAAW,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAAI,UAAA,GAAaA,qBAAA,CAAK,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AAC7F,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAAoC;AAC1D,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,MAAA;AAC1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,OAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA;AAAA,EACxC;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW;AAC3D,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACA,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,IAAc,KAAA,CAAM,WAAW,CAAA,EAAG;AACrD,IAAA,IAAI;AACF,MAAA,OAAO,cAAA,CAAgB,OAAyB,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAA,GAAa,eAAe,IAAI,CAAA;AACtC,MAAA,IAAI,YAAY,OAAO,UAAA;AAAA,IACzB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAGA,IAAM,cAAA,GAAiB;AAAA,EACrB,KAAA,EAAO;AAAA,IACL,OAAA;AAAA,IAAS,eAAA;AAAA,IAAiB,cAAA;AAAA,IAAgB,cAAA;AAAA,IAC1C,qBAAA;AAAA,IAAuB,gBAAA;AAAA,IAAkB,iBAAA;AAAA,IACzC,oBAAA;AAAA,IAAsB,WAAA;AAAA,IAAa,UAAA;AAAA,IAAY,UAAA;AAAA,IAAY,IAAA;AAAA,IAC3D,QAAA;AAAA,IAAU,YAAA;AAAA,IAAc,SAAA;AAAA,IAAW,UAAA;AAAA,IAAY;AAAA,GACjD;AAAA,EACA,QAAA,EAAU;AAAA,IACR,UAAA;AAAA,IAAY,kBAAA;AAAA,IAAoB,iBAAA;AAAA,IAAmB,iBAAA;AAAA,IACnD,wBAAA;AAAA,IAA0B,mBAAA;AAAA,IAAqB;AAAA;AAEnD,CAAA;AAGA,SAASI,eAAAA,CAAe,KAAUJ,KAAAA,EAAmB;AACnD,EAAA,IAAI,CAAC,GAAA,IAAO,OAAOA,KAAAA,KAAS,UAAU,OAAO,MAAA;AAC7C,EAAA,OAAOA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ,OAAA,GAAU,GAAG,CAAA,EAAG,GAAG,CAAA;AACrE;AAGA,SAAS,eAAA,CAAgB,OAAY,KAAA,EAAqC;AACxE,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAGnB,EAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQI,eAAAA,CAAe,KAAA,EAAOJ,KAAI,CAAA;AACxC,IAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,IAAA,IAAI,KAAK,OAAO,GAAA;AAAA,EAClB;AAGA,EAAA,MAAM,UAAU,KAAA,EAAO,GAAA;AACvB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,KAAA,GAAQI,eAAAA,CAAe,OAAA,EAASJ,KAAI,CAAA;AAC1C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAGA,EAAA,MAAM,WAAA,GAAc,KAAA,EAAO,MAAA,IAAU,KAAA,EAAO,OAAO,KAAA,EAAO,OAAA;AAC1D,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,KAAA,MAAWA,SAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,KAAA,GAAQI,eAAAA,CAAe,WAAA,EAAaJ,KAAI,CAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAGA,EAAA,MAAM,eAAA,GAAkB,OAAO,WAAA,EAAa,IAAA;AAC5C,EAAA,IAAI,eAAA,IAAmB,CAAC,CAAC,QAAA,EAAU,UAAU,CAAA,CAAE,QAAA,CAAS,eAAe,CAAA,EAAG;AACxE,IAAA,OAAO,eAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAa,KAAA,EAAgC;AAC3D,EAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,KAAK,CAAA;AACpD;AAEO,SAAS,gBAAgB,KAAA,EAAgC;AAC9D,EAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,QAAQ,CAAA;AACvD;AAEA,SAAS,uBAAuB,WAAA,EAAyC;AACvE,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,GAAG,OAAO,MAAA;AAGxC,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,gBAAA;AAAA,IAAkB,oBAAA;AAAA,IAAsB,yBAAA;AAAA,IACxC,6BAAA;AAAA,IAA+B,sBAAA;AAAA,IAAwB,OAAA;AAAA,IAAS;AAAA,GAClE;AAGA,EAAA,KAAA,IAAS,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAChD,IAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,KAAA,MAAWA,SAAQ,YAAA,EAAc;AAC/B,MAAA,MAAM,KAAA,GAAQI,eAAAA,CAAe,OAAA,EAASJ,KAAI,CAAA;AAC1C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,0BAA0B,WAAA,EAAyC;AAC1E,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,GAAG,OAAO,MAAA;AAGxC,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,mBAAA;AAAA,IAAqB,4BAAA;AAAA,IAA8B,yBAAA;AAAA,IAA2B;AAAA,GAChF;AAGA,EAAA,KAAA,IAAS,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAChD,IAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,KAAA,MAAWA,SAAQ,YAAA,EAAc;AAC/B,MAAA,MAAM,KAAA,GAAQI,eAAAA,CAAe,OAAA,EAASJ,KAAI,CAAA;AAC1C,MAAA,MAAM,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,OAAO,GAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,oBAAA,GAAuB;AAAA,EAE3B,OAAA,EAAS;AACX,CAAA;AAEA,SAAS,UAAU,CAAA,EAAW;AAC5B,EAAA,IAAI,CAACK,mBAAA,CAAG,UAAA,CAAW,CAAC,CAAA,EAAG;AACrB,IAAAA,mBAAA,CAAG,SAAA,CAAU,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACrC;AACF;AAEA,SAAS,aAAa,MAAA,EAAuD;AAC3E,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,MAAA,EAAQ,OAAA,IAAW,oBAAA,CAAqB,OAAA;AACxD,EAAA,MAAM,IAAA,GAAoB,MAAA,EAAQ,IAAA,KAAS,WAAA,GAAc,WAAA,GAAc,SAAA;AAEvE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,EACjC,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,MAAA,OAAA,CAAQ,IAAA,CAAK,kEAAkE,GAAG,CAAA;AAAA,IACpF;AACA,IAAA,IAAA,GAAO,WAAA,CAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAY,IAAA,EAA2C;AAC9D,EAAA,MAAM,SAAA,GAAY,IAAA,IAAQ,EAAE,IAAA,EAAM,MAAA,EAAO;AACzC,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,SAAA,CAAU,IAAA,EAAM,KAAK,CAAA;AACxD,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ;AAAA,IACjC;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,UAAU,OAAO,SAAA,CAAU,OAAA,KAAY,UAAA,GAAa,UAAU,OAAA,GAAU,MAAA;AAC9E,MAAA,MAAM,YAAY,OAAO,SAAA,CAAU,SAAA,KAAc,UAAA,GAAa,UAAU,SAAA,GAAY,MAAA;AACpF,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,SAAA,EAAU;AAAA,IAC9C;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,CAAU,MAAA,KAAW,WAAW,SAAA,CAAU,MAAA,CAAO,MAAK,GAAI,EAAA;AAChF,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,MAC9D;AACA,MAAA,MAAM,GAAA,GAAM,OAAO,SAAA,CAAU,GAAA,KAAQ,YAAY,SAAA,CAAU,GAAA,CAAI,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GAC3E,SAAA,CAAU,GAAA,CAAI,MAAK,GACnB,qBAAA;AACJ,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,MAAA,EAAO;AAAA,IAC1C;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GAAM,OAAO,SAAA,CAAU,GAAA,KAAQ,WAAW,SAAA,CAAU,GAAA,CAAI,MAAK,GAAI,EAAA;AACvE,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,MACtD;AACA,MAAA,MAAM,UAAU,SAAA,CAAU,OAAA,GAAU,EAAE,GAAG,SAAA,CAAU,SAAQ,GAAI,MAAA;AAC/D,MAAA,OAAO,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,SAAQ,GAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAI;AAAA,IACxE;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,QAAA,GAAW,OAAO,SAAA,CAAU,QAAA,KAAa,WAAW,SAAA,CAAU,QAAA,CAAS,MAAK,GAAI,EAAA;AACtF,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,MAC3D;AACA,MAAA,MAAM,UAAU,SAAA,CAAU,OAAA,GAAU,EAAE,GAAG,SAAA,CAAU,SAAQ,GAAI,MAAA;AAC/D,MAAA,OAAO,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,SAAQ,GAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAS;AAAA,IAClF;AAAA,IACA,SAAS;AACP,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,QAAA,OAAA,CAAQ,IAAA,CAAK,yDAAyD,SAAS,CAAA;AAAA,MACjF;AACA,MAAA,OAAO,WAAA,CAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,IACrC;AAAA;AAEJ;AAEA,SAAS,aAAa,OAAA,EAAiD;AACrE,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AACpC,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,CAAQ,WAAA,IAAe,KAAK,OAAA,EAAQ;AAAA,IACnE,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,IAC1B,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,KAAK,GAAA,EAAI;AAAA,IAC5C,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,KAAK,GAAA,EAAI;AAAA,IACvC,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,IACjD;AACE,MAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA;AAE9B;AAEA,SAAS,oBAAoB,OAAA,EAA0D;AACrF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,QAAQ,cAAA,CAAe,OAAA;AAAA,IAChC,OAAA,EAAS,QAAQ,cAAA,CAAe,OAAA;AAAA,IAChC,IAAA,EAAM,aAAa,OAAO;AAAA,GAC5B;AACF;AAEA,eAAe,gBAAA,CACb,GAAA,EACA,OAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,QAAA,GAAW,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAA;AAG5C,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,QAAA,OAAA,CAAQ,KAAA,CAAM,4BAAA,EAA8B,GAAA,EAAK,GAAA,EAAK,QAAQ,CAAA;AAAA,MAChE;AAEA,MAAA,MAAM,IAAI,MAAM,QAAQ,CAAA;AAAA,IAC1B;AAAA,EACF,SAAS,GAAA,EAAK;AAEZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,MAAM,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,eAAe,yBAAA,CACb,OAAA,EACA,OAAA,EACA,OAAA,EAMe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,MAAA,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,2CAA2C,MAAM,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,eAAe,kBAAA,CACb,OAAA,EACA,OAAA,EACA,SAAA,EACA,KAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAC,WAAW,SAAS,CAAA,OAAA,CAAA;AAC7D,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,6CAA6C,MAAM,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,eAAe,uBAAA,CACb,OAAA,EACA,OAAA,EACA,OAAA,EAQe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,GAAA,GAAM,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,IAAA,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,EAAE,GAAI,OAAA,IAAW,EAAC,EAAG;AAC1C,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,EAAY,KAAM,cAAc,CAAA,EAAG;AAClF,IAAA,YAAA,CAAa,cAAc,CAAA,GAAI,kBAAA;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,yCAAyC,MAAM,CAAA;AAAA,IAC/D;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAKA,SAAS,cAAc,GAAA,EAAqB;AAC1C,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,GAAG,EAAE,OAAA,EAAQ;AAEjC,EAAA,OAAO,GAAG,EAAE,CAAA,MAAA,CAAA;AACd;AAGA,SAAS,iBAAiB,MAAA,EAAwB;AAChD,EAAA,IAAI,MAAA,KAAW,SAAS,OAAO,CAAA;AAC/B,EAAA,IAAI,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,WAAA,EAAa,OAAO,CAAA;AAC3D,EAAA,OAAO,CAAA;AACT;AAGA,SAAS,eAAe,IAAA,EAAsB;AAC5C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,CAAA;AAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,CAAA;AAAA;AAAA,IACT,KAAK,iBAAA;AACH,MAAA,OAAO,CAAA;AAAA;AAAA,IACT;AACE,MAAA,OAAO,CAAA;AAAA;AAEb;AAIA,SAAS,UAAA,CAAW,KAAa,GAAA,EAA8C;AAC7E,EAAA,OAAO,GAAA,IAAO,OAAO,EAAE,GAAA,EAAK,OAAO,EAAE,WAAA,EAAa,GAAA,EAAI,EAAE,GAAI,IAAA;AAC9D;AAEA,SAAS,OAAA,CAAQ,KAAa,GAAA,EAA8C;AAC1E,EAAA,OAAO,OAAO,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,EAAE,GAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,CAAO,GAAG,CAAA,IAAI,GAAI,IAAA;AACzF;AAEA,SAAS,UAAA,CAAW,KAAa,GAAA,EAA8C;AAC7E,EAAA,OAAO,GAAA,IAAO,IAAA,IAAQ,CAAC,MAAA,CAAO,MAAM,GAAG,CAAA,GAAI,EAAE,GAAA,EAAK,KAAA,EAAO,EAAE,WAAA,EAAa,GAAA,IAAM,GAAI,IAAA;AACpF;AAGA,SAAS,gBAAgB,KAAA,EAAkD;AACzE,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA;AAC/C,EAAA,MAAM,UAAU,KAAA,CAAM,UAAA,IAAc,OAChC,CAAA,EAAG,IAAI,KAAK,IAAI,IAAA,CAAK,MAAM,SAAS,CAAA,CAAE,SAAQ,GAAI,KAAA,CAAM,UAAU,CAAA,CAAE,OAAA,EAAS,CAAA,MAAA,CAAA,GAC7E,SAAA;AAEJ,EAAA,MAAM,KAAA,GAAwB;AAAA,IAC5B,UAAA,CAAW,sBAAA,EAAwB,KAAA,CAAM,IAAI,CAAA;AAAA,IAC7C,UAAA,CAAW,uBAAA,EAAyB,KAAA,CAAM,KAAK,CAAA;AAAA,IAC/C,OAAA,CAAQ,0BAAA,EAA4B,KAAA,CAAM,QAAQ,CAAA;AAAA,IAClD,UAAA,CAAW,uBAAA,EAAyB,KAAA,CAAM,KAAA,EAAO,KAAK,CAAA;AAAA,IACtD,UAAA,CAAW,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,IACpD,UAAA,CAAW,sBAAA,EAAwB,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,IACpD,UAAA,CAAW,iBAAA,EAAmB,KAAA,CAAM,KAAK,CAAA;AAAA,IACzC,UAAA,CAAW,oBAAA,EAAsB,KAAA,CAAM,QAAQ,CAAA;AAAA,IAC/C,UAAA,CAAW,0BAA0B,KAAA,CAAM,WAAA,GAAc,KAAK,SAAA,CAAU,KAAA,CAAM,WAAW,CAAA,GAAI,MAAS,CAAA;AAAA,IACtG,OAAA,CAAQ,wBAAA,EAA0B,KAAA,CAAM,WAAW,CAAA;AAAA,IACnD,OAAA,CAAQ,yBAAA,EAA2B,KAAA,CAAM,YAAY,CAAA;AAAA,IACrD,OAAA,CAAQ,wBAAA,EAA0B,KAAA,CAAM,WAAW,CAAA;AAAA,IACnD,OAAA,CAAQ,+BAAA,EAAiC,KAAA,CAAM,iBAAiB,CAAA;AAAA,IAChE,OAAA,CAAQ,yBAAA,EAA2B,KAAA,CAAM,YAAY,CAAA;AAAA,IACrD,OAAA,CAAQ,0BAAA,EAA4B,KAAA,CAAM,aAAa,CAAA;AAAA,IACvD,UAAA,CAAW,6BAAA,EAA+B,KAAA,CAAM,eAAe,CAAA;AAAA,IAC/D,UAAA,CAAW,oBAAA,EAAsB,KAAA,CAAM,OAAO,CAAA;AAAA,IAC9C,UAAA,CAAW,oBAAA,EAAsB,KAAA,CAAM,EAAE;AAAA,GAC3C,CAAE,OAAO,OAAO,CAAA;AAGhB,EAAA,IAAI,MAAM,IAAA,EAAM,QAAA,IAAY,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC1D,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,GAAA,EAAK,oBAAA,EAAsB,OAAO,EAAE,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,IAAK,CAAA;AAAA,IACvG,CAAA,CAAA,MAAQ;AAAA,IAAuC;AAAA,EACjD;AAEA,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,YAAA,EAAc,MAAM,YAAA,IAAgB,EAAA;AAAA,IACpC,IAAA,EAAM,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,IAAA;AAAA,IAC3B,IAAA,EAAM,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AAAA,IAC/B,iBAAA,EAAmB,SAAA;AAAA,IACnB,eAAA,EAAiB,OAAA;AAAA,IACjB,UAAA,EAAY,KAAA;AAAA,IACZ,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,gBAAA,CAAiB,KAAA,CAAM,MAAM,CAAA;AAAA,MACnC,GAAI,KAAA,CAAM,MAAA,KAAW,OAAA,IAAW,KAAA,CAAM,KAAA,EAAO,OAAA,GAAU,EAAE,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,OAAA,KAAY;AAAC;AAC7F,GACF;AAGA,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,IAAA,CAAK,SAAS,CAAC;AAAA,MACb,YAAA,EAAc,SAAA;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,EAAE,KAAK,mBAAA,EAAqB,KAAA,EAAO,EAAE,WAAA,EAAa,KAAA,CAAM,KAAA,CAAM,OAAA,EAAQ,EAAE;AAAA,QACxE,GAAI,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAC,EAAE,GAAA,EAAK,sBAAA,EAAwB,KAAA,EAAO,EAAE,aAAa,KAAA,CAAM,KAAA,CAAM,OAAM,EAAG,IAAI;AAAC;AAC1G,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,mBAAmB,OAAA,EAAoD;AACrF,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,eAAA,EAAgB;AACnD,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,cAAA,EAAe;AACxD,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,OAAA,CAAQ,SAAS,CAAA;AACjD,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,OAAO,CAAA,GAAI,SAAA;AAGnE,EAAA,MAAM,aAAA,GAAgC;AAAA,IACpC,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,EAAE,aAAa,OAAA,CAAQ,KAAA,EAAO,IAAA,IAAQ,iBAAA,EAAkB,EAAE;AAAA,IACxF,UAAA,CAAW,iBAAA,EAAmB,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACpD,UAAA,CAAW,sBAAA,EAAwB,OAAA,CAAQ,SAAS,CAAA;AAAA,IACpD,UAAA,CAAW,qBAAA,EAAuB,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAClD,UAAA,CAAW,uBAAA,EAAyB,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAAA,IACxD,UAAA,CAAW,0BAAA,EAA4B,OAAA,CAAQ,KAAA,EAAO,QAAQ;AAAA,GAChE,CAAE,OAAO,OAAO,CAAA;AAGhB,EAAA,MAAM,SAAA,GAA4B;AAAA,IAChC,UAAA,CAAW,0BAAA,EAA4B,OAAA,CAAQ,MAAM,CAAA;AAAA,IACrD,UAAA,CAAW,+BAAA,EAAiC,OAAA,CAAQ,UAAU,CAAA;AAAA,IAC9D,OAAA,CAAQ,sCAAA,EAAwC,OAAA,CAAQ,OAAA,CAAQ,gBAAgB,CAAA;AAAA,IAChF,OAAA,CAAQ,uCAAA,EAAyC,OAAA,CAAQ,OAAA,CAAQ,iBAAiB,CAAA;AAAA,IAClF,OAAA,CAAQ,6CAAA,EAA+C,OAAA,CAAQ,OAAA,CAAQ,sBAAsB,CAAA;AAAA,IAC7F,OAAA,CAAQ,kCAAA,EAAoC,OAAA,CAAQ,OAAA,CAAQ,YAAY,CAAA;AAAA,IACxE,OAAA,CAAQ,mCAAA,EAAqC,OAAA,CAAQ,OAAA,CAAQ,aAAa,CAAA;AAAA,IAC1E,OAAA,CAAQ,+BAAA,EAAiC,OAAA,CAAQ,MAAA,CAAO,MAAM;AAAA,GAChE,CAAE,OAAO,OAAO,CAAA;AAGhB,EAAA,IAAI,OAAA,CAAQ,QAAQ,WAAA,EAAa;AAC/B,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,WAAW,CAAA,EAAG;AACtE,MAAA,SAAA,CAAU,IAAA,CAAK,EAAE,GAAA,EAAK,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAA,EAAI,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA;AAAA,IACpG;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAoC;AAAA,IACxC,OAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,YAAA,EAAc,EAAA;AAAA,IACd,IAAA,EAAM,CAAA,eAAA,EAAkB,OAAA,CAAQ,KAAA,EAAO,QAAQ,OAAO,CAAA,CAAA;AAAA,IACtD,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,iBAAA,EAAmB,SAAA;AAAA,IACnB,eAAA,EAAiB,OAAA;AAAA,IACjB,UAAA,EAAY,SAAA;AAAA,IACZ,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA;AAAA,MACrC,GAAI,QAAQ,MAAA,KAAW,OAAA,IAAW,QAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,GACtD,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAO,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,OAAO,EAAE,IAAA,CAAK,IAAI,CAAA,EAAE,GAC3D;AAAC;AACP,GACF;AAGA,EAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC7B,IAAA,QAAA,CAAS,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAC7C,cAAc,GAAA,CAAI,SAAA,GAAY,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA,GAAI,SAAA;AAAA,MAC7D,IAAA,EAAM,WAAA;AAAA,MACN,UAAA,EAAY;AAAA,QACV,EAAE,KAAK,mBAAA,EAAqB,KAAA,EAAO,EAAE,WAAA,EAAa,GAAA,CAAI,SAAQ,EAAE;AAAA,QAChE,GAAI,GAAA,CAAI,KAAA,GAAQ,CAAC,EAAE,GAAA,EAAK,sBAAA,EAAwB,KAAA,EAAO,EAAE,aAAa,GAAA,CAAI,KAAA,EAAM,EAAG,IAAI,EAAC;AAAA,QACxF,GAAI,GAAA,CAAI,IAAA,GAAO,CAAC,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,EAAE,aAAa,GAAA,CAAI,IAAA,EAAK,EAAG,IAAI;AAAC;AAClF,KACF,CAAE,CAAA;AAAA,EACJ;AAGA,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC/C,IAAA,MAAM,OAAO,eAAA,CAAgB;AAAA,MAC3B,GAAG,KAAA;AAAA,MACH,OAAA,EAAS,MAAM,OAAA,IAAW,OAAA;AAAA,MAC1B,MAAA,EAAQ,KAAA,CAAM,MAAA,IAAU,cAAA,EAAe;AAAA,MACvC,YAAA,EAAc,MAAM,YAAA,IAAgB;AAAA,KACrC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,eAAe,CAAC;AAAA,MACd,QAAA,EAAU,EAAE,UAAA,EAAY,aAAA,EAAc;AAAA,MACtC,YAAY,CAAC;AAAA,QACX,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,qBAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACX;AAAA,QACA,KAAA,EAAO,CAAC,QAAA,EAAU,GAAG,UAAU;AAAA,OAChC;AAAA,KACF;AAAA,GACH;AACF;AAKA,eAAe,cAAA,CACb,QAAA,EACA,OAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,CAAW,KAAA,KAAU,aAAa,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAC7F,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AAEA,EAAA,MAAM,YAAA,GAAuC;AAAA,IAC3C,cAAA,EAAgB,kBAAA;AAAA,IAChB,GAAI,WAAW;AAAC,GAClB;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,QAAA,EAAU;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC7B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,MACrC,CAAA,CAAA,MAAQ;AAAA,MAAe;AACvB,MAAA,MAAM,UAAA,GAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAG,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACjG,MAAA,MAAM,WAAA,GAAc,eAAe,CAAA,GAAA,EAAM,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAA;AACxE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA,EAAG,WAAW,CAAA,CAAE,CAAA;AAAA,IAC/C;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AACzE,MAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,MAAM,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAEA,SAAS,kBAAA,GAA0C;AACjD,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,CAAA;AAAA,IACjB,gBAAA,EAAkB,CAAA;AAAA,IAClB,iBAAA,EAAmB,CAAA;AAAA,IACnB,sBAAA,EAAwB,CAAA;AAAA,IACxB,YAAA,EAAc,CAAA;AAAA,IACd,aAAA,EAAe,CAAA;AAAA,IACf,aAAa;AAAC,GAChB;AACF;AAEA,SAAS,iBAAA,GAA4B;AACnC,EAAA,OAAO,CAAA,KAAA,EAAQC,aAAA,CAAO,EAAE,CAAC,CAAA,CAAA;AAC3B;AAEA,SAAS,gBAAgB,QAAA,EAA0B;AACjD,EAAA,OAAO,CAAA,IAAA,EAAO,MAAA,CAAO,QAAQ,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,EAAIA,aAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAC9D;AAGO,SAAS,eAAA,GAA0B;AACxC,EAAA,OAAOC,uBAAA,CAAO,WAAA,CAAY,EAAE,CAAA,CAAE,SAAS,KAAK,CAAA;AAC9C;AAGO,SAAS,cAAA,GAAyB;AACvC,EAAA,OAAOA,uBAAA,CAAO,WAAA,CAAY,CAAC,CAAA,CAAE,SAAS,KAAK,CAAA;AAC7C;AAEA,SAAS,kBAAkB,IAAA,EAAsB;AAC/C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,oBAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT;AACE,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,CAAC,IAAA,KAAS,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA;AAElF;AAEA,SAAS,oBAAA,CAAqB,SAAiB,QAAA,EAA+D;AAC5G,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,MAAA;AAC/C,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,MAAM,aAAiC,EAAC;AACxC,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAK,CAAE,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAK,GAAI,mBAAA,CAAoB,OAAA,CAAQ,IAAI,CAAA;AACxG,IAAA,MAAM,SAAA,GAAA,CAAa,WAAA,CAAY,GAAA,CAAI,SAAS,KAAK,CAAA,IAAK,CAAA;AACtD,IAAA,WAAA,CAAY,GAAA,CAAI,WAAW,SAAS,CAAA;AACpC,IAAA,MAAM,aAAa,SAAA,GAAY,CAAA,GAAI,GAAG,SAAS,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,GAAM,SAAA;AAEnE,IAAA,IAAI,EAAA,GAAK,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,EAAA,EAAI;AACP,MAAA,EAAA,GAAK,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,IACrE;AACA,IAAA,OAAA,IAAW,CAAA;AAEX,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,GAAG,OAAA;AAAA,MACH,EAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACY,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,oBAAoB,IAAA,EAAwC;AACnE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,aAAA;AACH,MAAA,OAAO,aAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT,KAAK,SAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;AAEA,SAAS,iBAAA,CAAkB,MAAc,KAAA,EAAuB;AAC9D,EAAA,MAAM,aAAa,IAAA,EAAM,IAAA,GAAO,MAAA,GAAS,IAAA,CAAK,MAAK,GAAI,SAAA;AACvD,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA,QAAA,CAAA;AACxE,EAAA,OAAO,QAAQ,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,GAAK,IAAA;AAC3C;AAEA,SAAS,gBAAgB,KAAA,EAAoB;AAC3C,EAAA,MAAM,SAAA,GAAY,qBAAqB,KAAK,CAAA;AAC5C,EAAA,IAAI,SAAA,IAAa,MAAM,OAAO,EAAA;AAC9B,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,EAAU,OAAO,SAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,UACJ,GAAA,CAAI,CAAC,SAAS,eAAA,CAAgB,IAAI,CAAC,CAAA,CACnC,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,IAAQ,KAAK,IAAA,EAAK,CAAE,SAAS,CAAC,CAAA,CAC/C,KAAK,IAAI,CAAA;AAAA,EACd;AACA,EAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,IAAA,IAAI,OAAQ,UAAkB,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACtF,MAAA,OAAQ,SAAA,CAAkB,IAAA;AAAA,IAC5B;AACA,IAAA,IAAI,OAAQ,SAAA,CAAkB,OAAA,KAAY,QAAA,EAAU;AAClD,MAAA,OAAQ,SAAA,CAAkB,OAAA;AAAA,IAC5B;AACA,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,OAAO,SAAS,CAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,OAAO,OAAO,SAAS,CAAA;AACzB;AAEA,SAAS,mBAAmB,IAAA,EAAgB;AAC1C,EAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,MAAA;AACzB,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,mCAAmC,OAAA,EAAsC;AAChF,EAAA,MAAM,WAAmC,EAAC;AAC1C,EAAA,IAAI,CAAC,SAAS,OAAO,QAAA;AAErB,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAAc;AAC7B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,QAAA,GAAW,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,IAAA,IAAQ,MAAM,QAAA,EAAU,IAAA,IAAQ,IAAA,EAAM,aAAA,EAAe,IAAA,IAAQ,MAAA;AAClG,IAAA,MAAM,OAAA,GAAU,IAAA,EAAM,SAAA,IAAa,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,KAAA,IAAS,IAAA,EAAM,QAAA,EAAU,SAAA,IAAa,IAAA,EAAM,aAAA,EAAe,SAAA;AAClH,IAAA,MAAM,UAAA,GAAa,mBAAmB,OAAO,CAAA;AAC7C,IAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,UAAA,IAAc,OAAA,IAAW,EAAE,CAAA;AACzE,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,cAAc,QAAQ,CAAA,CAAA;AAAA,MAC7B,IAAA,EAAM,QAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,OAAA,CAAQ,SAAS,UAAU,CAAA,GAAI,QAAQ,UAAA,GAAa,MAAA;AAC9E,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAc,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,6BAA6B,WAAA,EAAqD;AACzF,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,WAAW,KAAK,WAAA,CAAY,MAAA,KAAW,GAAG,OAAO,MAAA;AACpE,EAAA,MAAM,WAA+B,EAAC;AACtC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;AAE3C,EAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AACjC,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,YAAA,GAAe,mCAAmC,OAAO,CAAA;AAC/D,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,YAAY,CAAA;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,OAAO,OAAA,EAAS,IAAA,KAAS,QAAA,GAAW,QAAQ,IAAA,GAAO,WAAA;AAChE,IAAA,MAAM,IAAA,GAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,IAAI,KAAK,CAAA,IAAK,CAAA;AAC3C,IAAA,UAAA,CAAW,GAAA,CAAI,MAAM,IAAI,CAAA;AAEzB,IAAA,IAAI,OAAA,GAAU,eAAA,CAAgB,OAAA,EAAS,OAAA,IAAW,EAAE,CAAA;AACpD,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,IAAA,GAAO,MAAA,EAAQ;AACtC,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,QAAA,OAAA,GAAU,aAAA;AAAA,MACZ,WAAW,OAAO,OAAA,EAAS,YAAY,WAAA,IAAe,OAAA,EAAS,YAAY,IAAA,EAAM;AAC/E,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,GAAU,eAAA,CAAgB,oBAAA,CAAqB,OAAA,EAAS,OAAO,CAAC,CAAA;AAChE,QAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,IAAA,GAAO,MAAA,EAAQ;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,iBAAA,CAAkB,IAAA,EAAM,IAAI,CAAA;AAAA,MACnC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU,OAAO,OAAA,EAAS,IAAA,KAAS,WAAW,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAK,GAAI;AAAA,KACxE,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,QAAA,GAAW,MAAA;AAC1C;AAEO,SAAS,mBAAmB,IAAA,EAA0D;AAC3F,EAAA,MAAM,GAAA,GAAM,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACrC,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,EAAS,OAAO,MAAA;AAEzB,EAAA,MAAM,YAAY,iBAAA,EAAkB;AACpC,EAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,EAAA,MAAM,aAAa,cAAA,EAAe;AAClC,EAAA,MAAM,OAAA,GAA+B;AAAA,IACnC,SAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,EAAU,KAAK,OAAA,EAAS,QAAA;AAAA,IACxB,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,IACpB,cAAA,EAAgB,GAAA;AAAA,IAChB,QAAQ,EAAC;AAAA,IACT,SAAS,kBAAA,EAAmB;AAAA,IAC5B,MAAA,EAAQ,aAAA;AAAA,IACR,QAAQ,EAAC;AAAA,IACT,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC5B,IAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,OAAA;AACzB,IAAA,SAAA,CAAU,OAAO,CAAA;AACjB,IAAA,MAAM,UAAA,GAAaP,qBAAA,CAAK,IAAA,CAAK,OAAA,EAAS,SAAS,CAAA;AAC/C,IAAA,SAAA,CAAU,UAAU,CAAA;AACpB,IAAA,OAAA,CAAQ,WAAA,GAAc,OAAA;AACtB,IAAA,OAAA,CAAQ,cAAA,GAAiB,UAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,OAAA;AACT;AAMA,eAAsB,qBAAA,CACpB,SACA,YAAA,EACe;AACf,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,WAAA,EAAa;AACjD,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAE5B,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AAGpC,EAAA,MAAM,YAAY,YAAA,GAAe;AAAA,IAC/B,IAAA,EAAM,aAAa,IAAA,IAAQ,eAAA;AAAA,IAC3B,SAAS,YAAA,CAAa,OAAA;AAAA,IACtB,KAAA,EAAO,YAAA,CAAa,YAAA,CAAa,KAAK,CAAA,IAAK,eAAA;AAAA,IAC3C,QAAA,EAAU,eAAA,CAAgB,YAAA,CAAa,KAAK;AAAA,GAC9C,GAAI,MAAA;AAEJ,EAAA,OAAA,CAAQ,SAAA,GAAY,SAAA;AAEpB,EAAA,MAAM,cAAA,GAAiB,oBAAoB,OAAO,CAAA;AAClD,EAAA,MAAM,eAAe,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,WAAA,EAAY;AAE7D,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,SAAA,EAAW,YAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,SAAS,MAAA,EAAQ;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,KAAS,WAAA,GAC1B,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA,EAAG,GACzC,IAAA,CAAK,OAAA;AAET,MAAA,MAAM,yBAAA,CAA0B,IAAA,CAAK,GAAA,EAAK,OAAA,EAAS,OAAO,CAAA;AAC1D,MAAA,OAAA,CAAQ,cAAA,GAAiB,IAAA;AAAA,IAC3B,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,eAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAED,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,QAAA,OAAA,CAAQ,IAAA,CAAK,yEAAyE,OAAO,CAAA;AAAA,MAC/F;AAAA,IACF;AAAA,EACF,WAAW,IAAA,CAAK,IAAA,KAAS,YAAY,OAAO,IAAA,CAAK,YAAY,UAAA,EAAY;AAEvE,IAAA,OAAA,CAAQ,cAAA,GAAiB,IAAA;AAAA,EAC3B,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAE/B,IAAA,OAAA,CAAQ,cAAA,GAAiB,IAAA;AAAA,EAC3B;AACF;AAEO,SAAS,gBAAA,CACd,SACA,KAAA,EA0B8B;AAC9B,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAGrB,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA;AACzC,EAAA,MAAM,EAAA,GAAK,gBAAgB,QAAQ,CAAA;AACnC,EAAA,MAAM,eAAe,KAAA,CAAM,SAAA,IAAA,iBAAa,IAAI,IAAA,IAAO,WAAA,EAAY;AAC/D,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,SAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,EAAO,IAAA,EAAK,CAAE,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK,GAAI,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAChG,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA;AAE5C,EAAA,MAAM,aAAa,KAAA,CAAM,UAAA,KAAe,SAAY,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA,GAAI,MAAA;AAC/E,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,cAAc,GAAG,CAAA,IAAK,eAAe,MAAA,EAAW;AAChE,IAAA,OAAA,CAAQ,QAAQ,eAAA,IAAmB,UAAA;AAAA,EACrC;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,WAAA,KAAgB,SAAY,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAClF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,eAAe,GAAG,CAAA,IAAK,gBAAgB,MAAA,EAAW;AAClE,IAAA,OAAA,CAAQ,QAAQ,gBAAA,IAAoB,WAAA;AAAA,EACtC;AAEA,EAAA,MAAM,eAAe,KAAA,CAAM,YAAA,KAAiB,SAAY,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,GAAI,MAAA;AACrF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,gBAAgB,GAAG,CAAA,IAAK,iBAAiB,MAAA,EAAW;AACpE,IAAA,OAAA,CAAQ,QAAQ,iBAAA,IAAqB,YAAA;AAAA,EACvC;AAEA,EAAA,MAAM,oBAAoB,KAAA,CAAM,iBAAA,KAAsB,SAAY,MAAA,CAAO,KAAA,CAAM,iBAAiB,CAAA,GAAI,MAAA;AACpG,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,qBAAqB,GAAG,CAAA,IAAK,sBAAsB,MAAA,EAAW;AAC9E,IAAA,OAAA,CAAQ,QAAQ,sBAAA,IAA0B,iBAAA;AAAA,EAC5C;AAEA,EAAA,MAAM,cAAc,KAAA,CAAM,WAAA,KAAgB,SAAY,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAClF,EAAA,MAAM,eAAe,KAAA,CAAM,YAAA,KAAiB,SAAY,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,GAAI,MAAA;AACrF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,gBAAgB,GAAG,CAAA,IAAK,iBAAiB,MAAA,EAAW;AACpE,IAAA,OAAA,CAAQ,QAAQ,YAAA,IAAgB,YAAA;AAAA,EAClC;AAEA,EAAA,MAAM,gBAAgB,KAAA,CAAM,aAAA,KAAkB,SAAY,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA,GAAI,MAAA;AACxF,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,iBAAiB,GAAG,CAAA,IAAK,kBAAkB,MAAA,EAAW;AACtE,IAAA,OAAA,CAAQ,QAAQ,aAAA,IAAiB,aAAA;AAAA,EACnC;AAEA,EAAA,OAAA,CAAQ,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,GAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,IAAK,CAAA,IAAK,CAAA;AAE3F,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,OAAA,CAAQ,eAAe,OAAA,EAAS;AAElC,IAAA,IAAI,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/C,MAAA,QAAA,GAAW,oBAAA,CAAqB,EAAA,EAAI,KAAA,CAAM,QAAQ,CAAA;AAAA,IACpD,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,GAAY,4BAAA,CAA6B,KAAA,CAAM,WAAW,CAAA;AAChE,MAAA,QAAA,GAAW,oBAAA,CAAqB,IAAI,SAAS,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,KAAA,IAAS,sBAAA,CAAuB,MAAM,WAAW,CAAA;AAC7E,EAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,QAAA,IAAY,yBAAA,CAA0B,MAAM,WAAW,CAAA;AAGtF,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,KAAS,SAAA;AAIhC,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,IAAgB,OAAA,CAAQ,0BAA0B,OAAA,CAAQ,UAAA;AAErF,EAAA,MAAM,MAAA,GAA2B;AAAA,IAC/B,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,MAAA;AAAA,IACA,YAAA;AAAA,IACA,EAAA;AAAA,IACA,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,KAAA,EAAO,UAAA;AAAA,IACP,QAAA;AAAA,IACA,SAAA,EAAW,YAAA;AAAA,IACX,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAI,QAAA,GAAW;AAAA,MACb,aAAa,WAAA,IAAe,CAAA;AAAA,MAC5B,cAAc,YAAA,IAAgB,CAAA;AAAA,MAC9B,aAAa,WAAA,IAAe,CAAA;AAAA,MAC5B,mBAAmB,iBAAA,IAAqB;AAAA,KAC1C,GAAI;AAAA,MACF,GAAI,WAAA,KAAgB,MAAA,IAAa,EAAE,WAAA,EAAY;AAAA,MAC/C,GAAI,YAAA,KAAiB,MAAA,IAAa,EAAE,YAAA,EAAa;AAAA,MACjD,GAAI,WAAA,KAAgB,MAAA,IAAa,EAAE,WAAA,EAAY;AAAA,MAC/C,GAAI,iBAAA,KAAsB,MAAA,IAAa,EAAE,iBAAA;AAAkB,KAC7D;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA,EAAO,aAAA;AAAA,IACP,QAAA,EAAU,gBAAA;AAAA,IACV,aAAa,OAAA,CAAQ,cAAA,CAAe,UAAU,oBAAA,CAAqB,KAAA,CAAM,WAAW,CAAA,GAAI,MAAA;AAAA,IACxF,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,KAAA,EAAO,MAAM,KAAA,KAAU,MAAA,KAAW,UAAU,EAAE,OAAA,EAAS,eAAA,EAAgB,GAAI,MAAA,CAAA,IAAc,MAAA;AAAA,IACzF,IAAA,EAAM,QAAA,GAAW,EAAE,QAAA,EAAS,GAAI,MAAA;AAAA,IAChC,OAAO,KAAA,CAAM;AAAA,GACf;AAEA,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,EAAE,SAAS,eAAA,EAAgB;AAC5D,IAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,MAClB,OAAA,EAAS,EAAA;AAAA,MACT,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,MAAM,CAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AACpC,EAAA,IAAI,KAAK,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,YAAY,UAAA,EAAY;AAChE,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAChD,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAClC,MAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAA6B,IAAA,KAAS,UAAA,EAAY;AACtE,QAAC,MAAA,CAA6B,IAAA,CAAK,KAAA,CAAA,EAAW,CAAC,KAAA,KAAmB;AAChE,UAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,YAAA,OAAA,CAAQ,IAAA,CAAK,sCAAsC,KAAK,CAAA;AAAA,UAC1D;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,QAAA,OAAA,CAAQ,IAAA,CAAK,oCAAoC,GAAG,CAAA;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,WAAA,IAAe,QAAQ,cAAA,EAAgB;AACzE,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,SAAS,MAAA,EAAQ;AACrD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,KAAS,WAAA,GAC1B,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA,EAAG,GACzC,IAAA,CAAK,OAAA;AAGT,MAAA,kBAAA,CAAmB,IAAA,CAAK,KAAK,OAAA,EAAS,OAAA,CAAQ,WAAW,MAAM,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AAC9E,QAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,QAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AACxE,UAAA,OAAA,CAAQ,IAAA,CAAK,6CAA6C,MAAM,CAAA;AAAA,QAClE;AACA,QAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,UAClB,SAAS,MAAA,CAAO,EAAA;AAAA,UAChB,OAAA,EAAS,MAAA;AAAA,UACT,IAAA,EAAM,MAAA;AAAA,UACN,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,oBAAA,CAAqB,OAAA,EAA0C,MAAA,GAIjF,EAAC,EAA0C;AAC7C,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,SAAS,EAAE,WAAA,EAAY;AACnD,EAAA,MAAM,UAAA,GAAa,YAAY,OAAA,CAAQ,SAAA;AACvC,EAAA,MAAM,eAAe,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,WAAA,EAAY;AAG7D,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAA4C;AAClE,IAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAQ,IAAA,IAAQ,eAAA;AAAA,MACtB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA,IAAK,eAAA;AAAA,MACtC,QAAA,EAAU,eAAA,CAAgB,OAAA,CAAQ,KAAK;AAAA,KACzC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,MAAA,CAAO,YAAY,CAAA;AAEpD,EAAA,IAAI,OAAO,KAAA,EAAO;AAChB,IAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,MAClB,OAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,eAAA;AAAA,MACjC,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA;AAAA,MACpB,IAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,cAAA,GAAiB,oBAAoB,OAAO,CAAA;AAClD,EAAA,MAAM,aAAA,GAAoC,OAAO,MAAA,GAC7C,MAAA,CAAO,SACP,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,GACtB,OAAA,GACA,SAAA;AAEN,EAAA,MAAM,YAAA,GAAe,CAACQ,OAAAA,MAAkD;AAAA,IACtE,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,SAAA,EAAW,YAAA;AAAA,IACX,OAAA,EAAS,UAAA;AAAA,IACT,UAAA;AAAA,IACA,KAAA,EAAO,aAAa,OAAA,CAAQ,SAAA;AAAA,IAC5B,MAAA,EAAQ,cAAA;AAAA,IACR,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,MAAA,EAAAA,OAAAA;AAAA,IACA,QAAQ,OAAA,CAAQ;AAAA,GAClB,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,aAAa,aAAa,CAAA;AACjD,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,MAAM,IAAA,GAAO,QAAQ,cAAA,CAAe,IAAA;AACpC,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,WAAA;AAExD,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AAExB,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,mBAAmB,cAAc,CAAA;AACrD,MAAA,MAAM,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,SAAS,WAAW,CAAA;AAAA,IAC/D,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAAA,EACF,WAAW,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,SAAS,MAAA,EAAQ;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,KAAS,WAAA,GAC1B,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA,EAAG,GACzC,IAAA,CAAK,OAAA;AAET,MAAA,IAAI,eAAA,IAAmB,QAAQ,cAAA,EAAgB;AAE7C,QAAA,MAAM,uBAAA,CAAwB,IAAA,CAAK,GAAA,EAAK,OAAA,EAAS;AAAA,UAC/C,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,OAAA,EAAS,UAAA;AAAA,UACT,UAAA;AAAA,UACA,MAAA,EAAQ,aAAA;AAAA,UACR,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,QAAQ,OAAA,CAAQ;AAAA,SACjB,CAAA;AAAA,MACH,CAAA,MAAO;AAEL,QAAA,MAAM,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,OAAA,EAAS,cAAc,CAAA;AAAA,MAC1D;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAE/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,MAAM,CAAA;AAC3F,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,MAAM,CAAA;AAC1E,EAAA,IAAI,MAAA,GAA6B,MAAA,CAAO,MAAA,KAAW,gBAAA,GAAmB,OAAA,GAAU,SAAA,CAAA;AAChF,EAAA,IAAI,MAAA,KAAW,SAAA,KAAc,UAAA,IAAc,aAAA,CAAA,EAAgB;AACzD,IAAA,MAAA,GAAS,SAAA;AAAA,EACX;AAEA,EAAA,IAAI,YAAA,GAAe,aAAa,MAAM,CAAA;AAEtC,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,OAAA,CAAQ,cAAA,EAAgB;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAWR,qBAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,gBAAgB,oBAAoB,CAAA;AACvE,MAAA,MAAMK,mBAAA,CAAG,QAAA,CAAS,SAAA,CAAU,QAAA,EAAU,IAAA,CAAK,UAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,EAAG,MAAM,CAAA;AAAA,IACrF,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,IAAI,WAAW,SAAA,EAAW;AACxB,QAAA,MAAA,GAAS,SAAA;AACT,QAAA,YAAA,GAAe,aAAa,MAAM,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,cAAc,UAAA,EAAY;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,YAAY,CAAC,CAAA;AACtD,MAAA,MAAM,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,IAC7B,SAAS,GAAA,EAAK;AACZ,MAAA,UAAA,GAAa,IAAA;AACb,MAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,MAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,QAClB,OAAA,EAAS,MAAA;AAAA,QACT,OAAA;AAAA,QACA,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,IAAI,WAAW,SAAA,EAAW;AACxB,QAAA,MAAA,GAAS,SAAA;AACT,QAAA,YAAA,GAAe,aAAa,MAAM,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,IAAA,MAAM,qBAAA,GAAwB,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,MAAM,CAAA;AAChG,IAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,MAAM,CAAA;AAC1E,IAAA,IAAI,cAAA,GAAqC,wBAAwB,OAAA,GAAU,SAAA;AAC3E,IAAA,IAAI,cAAA,KAAmB,aAAa,aAAA,EAAe;AACjD,MAAA,cAAA,GAAiB,SAAA;AAAA,IACnB;AACA,IAAA,IAAI,mBAAmB,MAAA,EAAQ;AAC7B,MAAA,MAAA,GAAS,cAAA;AACT,MAAA,YAAA,GAAe,aAAa,MAAM,CAAA;AAAA,IACpC;AAAA,EACF;AAEA,EAAA,OAAO,YAAA;AACT;AAIO,SAAS,qBAAqB,KAAA,EAAiB;AACpD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,uBAAY,OAAA,EAAQ;AAC1B,IAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA;AAAA,MACA,CAAC,MAAM,GAAA,KAAQ;AACb,QAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,SAAmB,CAAA,UAAA,EAAa,GAAA,CAAI,QAAQ,WAAW,CAAA,CAAA,CAAA;AAC1E,QAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,EAAU,OAAO,IAAI,QAAA,EAAS;AACjD,QAAA,IAAI,GAAA,YAAe,OAAO,OAAO,EAAE,SAAS,GAAA,CAAI,OAAA,EAAS,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM;AAC1E,QAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,UAAA,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,YAAA;AAC3B,UAAA,KAAA,CAAM,IAAI,GAAG,CAAA;AAAA,QACf;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AAAA,IACzD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,kBAAA;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,qBAAqB,KAAA,EAAoB;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACjC,IAAA,OAAOI,aAAAA,CAAO,UAAA,CAAW,IAAA,IAAQ,EAAA,EAAI,MAAM,CAAA;AAAA,EAC7C,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AACF,MAAA,OAAOA,cAAO,UAAA,CAAW,MAAA,CAAO,KAAA,IAAS,EAAE,GAAG,MAAM,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACF;;;ACj8CO,SAAS,oBAAoB,IAAA,EAAyB;AAC3D,EAAA,OAAO,OAAO,KAAA,KAAoD;AAChE,IAAA,MAAM,OAAA,GAAe,MAAM,KAAA,IAAS;AAAA,MAClC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAA,EAAQ,IAAA,CAAK,KAAA,IAAiB,EAAC;AAAA,MAC/B,YAAa,IAAA,CAAa,UAAA;AAAA,MAE1B,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,QAAQ,IAAA,CAAK,MAAA;AAAA,MAEb,cAAe,IAAA,CAAa,YAAA;AAAA,MAC5B,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,MAAM,KAAA,GAA8C,OAAA,CAAQ,KAAA,IAAiB,EAAC;AAC9E,IAAA,MAAM,0BAAA,GAA6B,OAAA;AAAA,MACjC,OAAA,CAAQ,cAAA,IACJ,OAAA,CAAQ,KAAA,EAAe,YAAA,EAAc;AAAA,KAC3C;AACA,IAAA,MAAM,cAAA,GAAkB,OAAA,CAAQ,KAAA,EAAQ,SAAA,GACnC,QAAQ,KAAA,CAAO,SAAA;AAAA,MACd,KAAA;AAAA,MACA,0BAAA,GAA6B,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI;AAAA,QAElD,OAAA,CAAQ,KAAA;AAEZ,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AACzC,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,IAAQ,OAAA;AAC/C,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,IAAW,IAAA,CAAK,OAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACtE,IAAA,MAAM,aAAA,GAAgB,eAAA,GAAkB,oBAAA,CAAqB,KAAA,CAAM,QAAQ,CAAA,GAAI,MAAA;AAC/E,IAAA,MAAM,WAAA,GAAc,aAAA,KAAkB,MAAA,GAAY,oBAAA,CAAqB,aAAa,CAAA,GAAI,MAAA;AAIxF,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAiD;AACxE,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,UAAA,IAAc,CAAA,EAAG,iBAAA,EAAmB,UAAA;AACnD,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,SAAU,EAAC;AACjC,MAAA,OAAO,GAAA,CACJ,GAAA,CAAI,CAAC,EAAA,MAAa,EAAE,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,QAAA,EAAU,IAAA,IAAQ,EAAA,EAAI,MAAK,CAAE,CAAA,CACvE,MAAA,CAAO,CAAC,CAAA,KAAW,OAAO,CAAA,CAAE,EAAA,KAAO,QAAA,IAAY,CAAA,CAAE,EAAA,CAAG,MAAA,GAAS,CAAC,CAAA;AAAA,IACnE,CAAA;AAEA,IAAA,MAAM,2BAAA,GAA8B,CAAC,KAAA,KAAwB;AAC3D,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,CAAA,GAAI,EAAC;AAGlD,MAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AACzC,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,IAAI,CAAA,EAAG,SAAS,WAAA,EAAa;AAC3B,UAAA,KAAA,MAAW,EAAA,IAAM,eAAA,CAAgB,CAAC,CAAA,EAAG;AACnC,YAAA,IAAI,EAAA,CAAG,EAAA,EAAI,gBAAA,CAAiB,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM;AACtC,QAAA,IAAI,CAAA,EAAG,SAAS,MAAA,EAAQ;AACtB,UAAA,MAAM,aAAa,CAAA,CAAE,YAAA;AACrB,UAAA,IAAI,CAAC,UAAA,IAAc,CAAC,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA,EAAG;AAEpD,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAID,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,QAAA,MAAM,CAAA,GAAI,aAAa,CAAC,CAAA;AACxB,QAAA,IAAI,CAAA,EAAG,SAAS,WAAA,EAAa;AAE7B,QAAA,MAAM,QAAA,GAAW,gBAAgB,CAAC,CAAA;AAClC,QAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAK3B,QAAA,MAAM,IAAA,GAAO,YAAA,CAAa,CAAA,GAAI,CAAC,CAAA;AAG/B,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,CAAC,CAAA,EAAG,EAAA;AAC7B,QAAA,MAAM,kBAAA,GAAqB,CAAC,EAAE,IAAA,IAAQ,KAAK,IAAA,KAAS,MAAA,IAAU,KAAK,YAAA,KAAiB,OAAA,CAAA;AACpF,QAAA,IAAI,kBAAA,EAAoB;AAGxB,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACzC,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM,GAAG,IAAA,IAAQ,cAAA;AAAA,UACjB,cAAc,EAAA,CAAG,EAAA;AAAA,UACjB,OAAA,EAAS;AAAA,SACX,CAAE,CAAA;AACF,QAAA,YAAA,CAAa,MAAA,CAAO,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,GAAG,YAAY,CAAA;AAG7C,QAAA,CAAA,IAAK,YAAA,CAAa,MAAA;AAAA,MACpB;AACA,MAAA,OAAO,YAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAAC,cAAA,KAA0B;AAClD,MAAA,IAAI;AACF,QAAA,MAAM,OAAc,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,GAAI,iBAAiB,EAAC;AACtE,QAAA,MAAM,aAAuB,EAAC;AAC9B,QAAA,MAAM,iBAAwE,EAAC;AAE/E,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,UAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,UAAA,IAAI,CAAA,EAAG,SAAS,WAAA,EAAa;AAC3B,YAAA,KAAA,MAAW,EAAA,IAAM,eAAA,CAAgB,CAAC,CAAA,EAAG;AACnC,cAAA,UAAA,CAAW,IAAA,CAAK,GAAG,EAAE,CAAA;AACrB,cAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AACvB,cAAA,IAAI,EAAE,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,KAAW,IAAA,CAAK,YAAA,KAAiB,EAAA,CAAG,EAAA,IAAM,IAAA,CAAK,YAAA,KAAiB,CAAA,EAAG,YAAA,CAAA,CAAA,EAAgB;AAC7G,gBAAA,cAAA,CAAe,IAAA,CAAK,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA,EAAG,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AAAA,cAC9D;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MAEF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,OAAA,GAAW,MAAM,GAAA,EAAa,SAAA;AACpC,IAAA,MAAM,QAAA,GAAY,MAAM,GAAA,EAAa,UAAA;AACrC,IAAA,MAAM,gBAAA,GAAmB,OAAA,CAAS,KAAA,CAAM,GAAA,EAAa,WAAW,CAAA;AAChE,IAAA,MAAM,iBAAA,GAAqB,MAAM,GAAA,EAAa,mBAAA;AAC9C,IAAA,MAAM,WAAA,GAAe,MAAM,GAAA,EAAa,aAAA;AAGxC,IAAA,MAAM,iBAAkB,OAAA,CAAgB,cAAA;AAKxC,IAAA,MAAM,gBAAA,GAAoB,MAAM,GAAA,EAAa,WAAA;AAC7C,IAAA,MAAM,mBAAA,GAAsB,gBAAA,GAAmB,EAAE,SAAA,EAAW,kBAAiB,GAAI,MAAA;AAEjF,IAAA,MAAMC,YAAAA,GAAc,CAAC,KAAA,KAAe;AAClC,MAAA,IAAI,KAAA,IAAS,MAAM,OAAO,EAAA;AAC1B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,MAAA,IAAI,OAAO,KAAA,EAAO,OAAA,KAAY,QAAA,SAAiB,KAAA,CAAM,OAAA;AACrD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,EAAG;AACjC,QAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAY,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,CAAA,EAAG,QAAQ,CAAA,EAAG,OAAA,IAAW,EAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,MACzG;AACA,MAAA,IAAI,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,SAAiB,KAAA,CAAM,IAAA;AAClD,MAAA,IAAI,OAAO,KAAA,EAAO,KAAA,EAAO,YAAY,QAAA,EAAU,OAAO,MAAM,KAAA,CAAM,OAAA;AAClE,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AAEA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACN,MAAA,MAAM,qBAAqB,2BAAA,CAA4B,CAAC,GAAI,KAAA,CAAM,QAAkB,CAAC,CAAA;AACrF,MAAA,gBAAA,CAAiB,kBAAkB,CAAA;AACnC,MAAA,IAAI,gBAAA,IAAoB,OAAQ,cAAA,CAAuB,MAAA,KAAW,UAAA,EAAY;AAC5E,QAAA,IAAI,YAAA,GAAe,EAAA;AACnB,QAAA,IAAI,eAAA;AACJ,QAAA,MAAM,aAAA,GAAgB,EAAE,MAAA,EAAQ,WAAA,EAAa,mBAAmB,GAAG,cAAA,EAAgB,GAAG,mBAAA,EAAoB;AAC1G,QAAA,WAAA,MAAiB,KAAA,IAAU,cAAA,CAAuB,MAAA,CAAO,kBAAA,EAAoB,aAAa,CAAA,EAAG;AAC3F,UAAA,IAAK,iBAAA,IAAqB,iBAAA,CAAkB,uBAAA,IAA4B,WAAA,EAAa,OAAA,EAAS;AAC5F,YAAA;AAAA,UACF;AACA,UAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAa,MAAc,IAAA,EAAM;AAC7D,YAAA,eAAA,GAAkB,KAAA;AAAA,UACpB;AACA,UAAA,MAAM,IAAA,GAAOA,aAAY,KAAK,CAAA;AAC9B,UAAA,IAAI,IAAA,EAAM;AACR,YAAA,YAAA,IAAgB,IAAA;AAChB,YAAA,QAAA,GAAW,EAAE,MAAM,CAAA;AACnB,YAAA,OAAA,GAAU,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAA;AAAA,UACpC;AAAA,QACF;AACA,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,QAAA,GAAW,EAAE,GAAG,eAAA,EAAgB;AAChC,UAAA,IAAI,QAAA,CAAS,OAAA,IAAW,IAAA,IAAQ,QAAA,CAAS,YAAY,EAAA,EAAI;AACvD,YAAA,QAAA,CAAS,OAAA,GAAU,YAAA;AAAA,UACrB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,QAAA,GAAW,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,QACxD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,kBAAA,EAAoB,EAAE,MAAA,EAAQ,WAAA,EAAa,iBAAA,EAAmB,GAAG,cAAA,EAAgB,GAAG,mBAAA,EAAqB,CAAA;AAAA,MAClJ;AAAA,IACE,SAAS,GAAA,EAAU;AACjB,MAAA,MAAMC,WAAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO,iBAAA;AAAA,QACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,QACnF,MAAA,EAAQ,OAAA;AAAA,QACR,UAAA,EAAAA,WAAAA;AAAA,QACA,YAAA,EAAc,WAAA;AAAA,QACd,KAAA,EAAO,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACjE,QAAA,EAAU,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACvE,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,IAAW,OAAO,GAAG,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAAA,QACjE,aAAa,KAAA,CAAM;AAAA,OACpB,CAAA;AACD,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,MAAM,oBAAA,GAAkC;AAAA,MACtC,GAAG,KAAA,CAAM,QAAA;AAAA,MACT;AAAA,KACF;AAGA,IAAA,MAAM,WAAY,QAAA,EAAkB,KAAA,IAC9B,UAAkB,cAAA,IAClB,QAAA,EAAkB,mBAAmB,WAAA,IACrC,QAAA,EAAkB,iBAAA,EAAmB,UAAA,IACrC,UAAkB,iBAAA,EAAmB,KAAA,IACrC,UAAkB,iBAAA,EAAmB,cAAA,IACrC,UAAkB,iBAAA,EAAmB,aAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,eAAe,QAAQ,CAAA;AAC1C,IAAA,MAAM,YAAY,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,IAAA,CAAa,KAAK,CAAA,IAAK,eAAA;AACjF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAEhC,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACxE,IAAA,MAAM,eAAA,GAAkB,iBAAA,GAAoB,oBAAA,CAAqB,QAAQ,CAAA,GAAI,MAAA;AAC7E,IAAA,MAAM,aAAA,GAAgB,eAAA,KAAoB,MAAA,GAAY,oBAAA,CAAqB,eAAe,CAAA,GAAI,MAAA;AAE9F,IAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,MAC7B,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,oBAAA;AAAA,MACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACnF,UAAA;AAAA,MACA,aAAa,UAAA,EAAY,aAAA;AAAA,MACzB,cAAc,UAAA,EAAY,iBAAA;AAAA,MAC1B,aAAa,UAAA,EAAY,YAAA;AAAA,MACzB,iBAAA,EAAmB,YAAY,qBAAA,EAAuB,aAAA;AAAA,MACtD,YAAA,EAAc,WAAA;AAAA,MACd,aAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,MACvE,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,UAAA,GAAa,MAAM,KAAA,IAAS,EAAE,YAAY,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAC/D,MAAA,MAAM,EAAA,GAAK,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAClE,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAA;AAC5C,MAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACzC,MAAA,MAAM,cAAA,GAAiB,WAAW,qBAAA,EAAuB,aAAA;AACzD,MAAA,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,cAAA,EAAgB,CAAA;AAC7G,MAAA,MAAM,WAAW,UAAA,CAAW,aAAA;AAC5B,MAAA,MAAM,YAAY,UAAA,CAAW,iBAAA;AAC7B,MAAA,MAAM,WAAW,UAAA,CAAW,YAAA;AAC5B,MAAA,MAAM,GAAA,GAAM,SAAA;AACZ,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,aAAa,CAAA,EAAE;AACtF,MAAA,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,QACvB,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAU,MAAA,CAAO,SAAS,CAAA,IAAK,CAAA,CAAA;AAAA,QAC3C,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,WAAA,EAAa,GAAA,CAAI,WAAA,IAAe,MAAA,CAAO,cAAc,CAAA,IAAK,CAAA;AAAA,OAC5D;AACA,MAAC,MAAc,KAAA,GAAQ,UAAA;AAAA,IACzB;AAEA,IAAA,OAAO,EAAE,QAAA,EAAU,oBAAA,EAAsB,KAAA,EAAQ,MAAc,KAAA,EAAM;AAAA,EACvE,CAAA;AACF;;;AC3QO,SAAS,gBAAgB,OAAA,EAA+C;AAC7E,EAAA,IAAI;AACF,IAAA,IAAI,OAAA,IAAW,MAAM,OAAO,EAAA;AAC5B,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,QAAA,IAAI,CAAC,CAAA,IAAK,OAAO,MAAM,QAAA,EAAU,OAAO,OAAO,CAAC,CAAA;AAChD,QAAA,IAAK,EAAU,IAAA,KAAS,MAAA,SAAe,MAAA,CAAQ,CAAA,CAAU,QAAQ,EAAE,CAAA;AACnE,QAAA,IAAK,CAAA,CAAU,SAAS,WAAA,EAAa;AACnC,UAAA,MAAM,MAAO,CAAA,CAAU,SAAA;AACvB,UAAA,MAAM,GAAA,GAAM,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,GAAA,EAAK,GAAA;AACjD,UAAA,MAAM,MAAA,GAAS,OAAO,GAAA,KAAQ,QAAA,GAAW,SAAY,GAAA,EAAK,MAAA;AAC1D,UAAA,OAAO,CAAA,OAAA,EAAU,OAAO,SAAS,CAAA,EAAG,SAAS,CAAA,QAAA,EAAW,MAAM,KAAK,EAAE,CAAA,CAAA,CAAA;AAAA,QACvE;AAEA,QAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,MACzB,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AAAA,IACd;AAEA,IAAA,OAAO,IAAA,CAAK,UAAU,OAAO,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB;AACF;AAGO,SAAS,sBAAsB,QAAA,EAAuD;AAC3F,EAAA,OAAO,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,gBAAgB,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC1D;AAGO,SAAS,aAAA,CAAc,KAAA,EAAgB,MAAA,GAAS,KAAA,EAAe;AACpE,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,EAAA;AAC1B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,UAAU,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,GAAI,KAAA,CAAS,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EAC5E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AACF;AAGO,SAAS,mBAAmB,OAAA,EAAsB;AACvD,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AACrB,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,IAAA,KAAe,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,IAAW,EAAG,CAAA,CACxF,KAAK,EAAE,CAAA;AAAA,EACZ;AACA,EAAA,OAAO,EAAA;AACT;;;AC7CA,SAAS,QAAA,CAAS,IAAA,EAAc,GAAA,GAAM,GAAA,EAAa;AACjD,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,OAAO,IAAA,CAAK,SAAS,GAAA,GAAM,CAAA,EAAG,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,MAAA,CAAA,GAAM,IAAA;AACxD;AA+BO,SAAS,oBAAoB,MAAA,EAAqB;AACvD,EAAA,IAAI,MAAA,IAAU,MAAM,OAAO,EAAA;AAC3B,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,SAAiB,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAC7D,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,MAAM,OAAA,GAAU,OACb,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,CAAA,EAAG,QAAQ,CAAC,CAAA,EAAA,EAAK,SAAS,aAAA,CAAc,IAAI,CAAC,CAAC,CAAA,CAAE,CAAA,CACrE,IAAA,CAAK,IAAI,CAAA;AACZ,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI;AAAA,SAAA,EAAS,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,MAAA,CAAA,GAAW,EAAA;AACxE,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,MAAM,GAAG,IAAA,EAAK;AAAA,EACpC;AACA,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAS,MAAA,CAAe,KAAK,CAAA,EAAG;AACxC,MAAA,OAAO,mBAAA,CAAqB,OAAe,KAAK,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAC,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,MAAM,CAAC,CAAA;AAChC;AAEO,SAAS,iBAAiB,MAAA,EAAgD;AAC/E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA,GAAI,MAAA,CAAO,KAAA,GAAQ,MAAA;AAC9F,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,KAAK,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,MAAA;AAC1D,EAAA,OAAO,OAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AACtC,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,MAAA,MAAM,aAAA,GAAiB,IAAA,CAAa,OAAA,IAAY,IAAA,CAAa,OAAA,IAAY,KAAa,WAAA,IAAgB,IAAA,CAAa,IAAA,IAAS,IAAA,CAAa,OAAA,IAAW,IAAA;AACpJ,MAAA,OAAO;AAAA,QACL,OAAO,OAAQ,IAAA,CAAa,KAAA,KAAU,QAAA,GAAY,KAAa,KAAA,GAAQ,MAAA;AAAA,QACvE,KAAK,OAAQ,IAAA,CAAa,GAAA,KAAQ,QAAA,GAAY,KAAa,GAAA,GAAM,MAAA;AAAA,QACjE,OAAA,EAAS,QAAA,CAAS,aAAA,CAAc,aAAa,CAAC;AAAA,OAChD;AAAA,IACF;AACA,IAAA,OAAO,EAAE,OAAA,EAAS,QAAA,CAAS,aAAA,CAAc,IAAI,CAAC,CAAA,EAAE;AAAA,EAClD,CAAC,CAAA;AACH;;;ACtEA,IAAM,sBAAA,GAAyB,CAAC,UAAA,EAAY,kBAAA,EAAoB,mBAAmB,CAAA;AAKnF,IAAM,aAAA,GAA+B;AAAA,EACnC,MAAA,EAAQ,EAAE,YAAA,EAAc,EAAA,EAAI,gBAAA,EAAkB,CAAA,EAAG,gBAAA,EAAkB,IAAA,EAAO,oBAAA,EAAsB,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,gBAAgB,CAAA,EAAE;AAAA,EACpI,aAAA,EAAe;AAAA,IACb,MAAA,EAAQ,IAAA;AAAA,IACR,SAAA,EAAW,IAAA;AAAA,IACX,oBAAA,EAAsB,IAAA;AAAA,IACtB,sBAAA,EAAwB,IAAA;AAAA,IACxB,6BAAA,EAA+B,IAAA;AAAA,IAC/B,WAAA,EAAa,aAAA;AAAA,IACb,cAAA,EAAgB,EAAA;AAAA,IAChB,YAAA,EAAc,IAAA;AAAA,IACd,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,QAAA;AAAA,IACR,eAAA,EAAiB,EAAA;AAAA,IACjB,kBAAA,EAAoB,mBAAA;AAAA,IACpB,MAAA,EAAQ;AAAA,MACN,mBAAA,EAAqB,GAAA;AAAA,MACrB,kBAAA,EAAoB,GAAA;AAAA,MACpB,wBAAA,EAA0B,IAAA;AAAA,MAC1B,yBAAA,EAA2B;AAAA;AAC7B,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,YAAA,EAAc,YAAA;AAAA,IACd,WAAA,EAAa;AAAA,GACf;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,WAAA,EAAa,gBAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,YAAA;AAAA,IACN,kBAAA,EAAoB,CAAA;AAAA,IACpB,aAAA,EAAe,CAAA;AAAA,IACf,gBAAA,EAAkB,CAAA;AAAA,IAClB,kBAAA,EAAoB,QAAA;AAAA,IACpB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,aAAA,EAAe;AAAA,IACb,oBAAA,EAAsB,IAAA;AAAA,IACtB,qBAAA,EAAuB,GAAA;AAAA,IACvB,aAAA,EAAe,mBAAA;AAAA,IACf,6BAA6B,EAAC;AAAA,IAC9B,aAAA,EAAe,CAAC,GAAG,sBAAsB,CAAA;AAAA,IACzC,gBAAA,EAAkB;AAAA;AAEtB,CAAA;AAEA,SAAS,aAAa,SAAA,EAQH;AACjB,EAAA,OAAO;AAAA,IACL,QAAQ,EAAE,GAAG,cAAc,MAAA,EAAQ,GAAG,UAAU,MAAA,EAAO;AAAA,IACvD,eAAe,EAAE,GAAG,cAAc,aAAA,EAAe,GAAG,UAAU,aAAA,EAAc;AAAA,IAC5E,OAAA,EAAS;AAAA,MACP,GAAG,aAAA,CAAc,OAAA;AAAA,MACjB,GAAG,SAAA,CAAU,OAAA;AAAA,MACb,MAAA,EAAQ,EAAE,GAAG,aAAA,CAAc,QAAQ,MAAA,EAAQ,GAAG,SAAA,CAAU,OAAA,EAAS,MAAA;AAAO,KAC1E;AAAA,IACA,UAAU,EAAE,GAAG,cAAc,QAAA,EAAU,GAAG,UAAU,QAAA,EAAS;AAAA,IAC7D,QAAQ,EAAE,GAAG,cAAc,MAAA,EAAQ,GAAG,UAAU,MAAA,EAAO;AAAA,IACvD,YAAY,EAAE,GAAG,cAAc,UAAA,EAAY,GAAG,UAAU,UAAA,EAAW;AAAA,IACnE,aAAA,EAAe;AAAA,MACb,GAAG,aAAA,CAAc,aAAA;AAAA,MACjB,GAAG,SAAA,CAAU,aAAA;AAAA,MACb,eAAe,SAAA,CAAU,aAAA,EAAe,aAAA,IAAiB,CAAC,GAAG,sBAAsB,CAAA;AAAA,MACnF,2BAAA,EAA6B,SAAA,CAAU,aAAA,EAAe,2BAAA,IAA+B;AAAC;AACxF,GACF;AACF;AAEO,IAAM,uBAAA,GAAwE;AAAA,EACnF,MAAM,YAAA,CAAa;AAAA,IACjB,QAAQ,EAAE,YAAA,EAAc,GAAG,gBAAA,EAAkB,CAAA,EAAG,kBAAkB,IAAA,EAAM;AAAA,IACxE,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,IAAA;AAAA,MACX,oBAAA,EAAsB,IAAA;AAAA,MACtB,sBAAA,EAAwB,GAAA;AAAA,MACxB,6BAAA,EAA+B;AAAA,KACjC;AAAA,IACA,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB,CAAA;AAAA,MACjB,kBAAA,EAAoB,iBAAA;AAAA,MACpB,MAAA,EAAQ,EAAE,mBAAA,EAAqB,IAAA,EAAM,oBAAoB,IAAA,EAAM,wBAAA,EAA0B,GAAA,EAAM,yBAAA,EAA2B,IAAA;AAAK,KACjI;AAAA,IACA,MAAA,EAAQ,EAAE,UAAA,EAAY,aAAA,EAAc;AAAA,IACpC,UAAA,EAAY,EAAE,IAAA,EAAM,KAAA,EAAO,kBAAA,EAAoB,CAAA,EAAG,aAAA,EAAe,CAAA,EAAG,gBAAA,EAAkB,CAAA,EAAG,kBAAA,EAAoB,SAAA,EAAU;AAAA,IACvH,aAAA,EAAe,EAAE,oBAAA,EAAsB,IAAA,EAAQ,uBAAuB,GAAA;AAAM,GAC7E,CAAA;AAAA,EAED,QAAA,EAAU,YAAA,CAAa,EAAE,CAAA;AAAA,EAEzB,MAAM,YAAA,CAAa;AAAA,IACjB,QAAQ,EAAE,YAAA,EAAc,IAAI,gBAAA,EAAkB,CAAA,EAAG,kBAAkB,GAAA,EAAO;AAAA,IAC1E,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,GAAA;AAAA,MACX,oBAAA,EAAsB,IAAA;AAAA,MACtB,sBAAA,EAAwB,IAAA;AAAA,MACxB,6BAAA,EAA+B;AAAA,KACjC;AAAA,IACA,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB,EAAA;AAAA,MACjB,MAAA,EAAQ,EAAE,mBAAA,EAAqB,IAAA,EAAM,oBAAoB,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAO,yBAAA,EAA2B,IAAA;AAAM,KACnI;AAAA,IACA,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAA,EAAY;AAAA,IAC7B,YAAY,EAAE,kBAAA,EAAoB,GAAG,aAAA,EAAe,EAAA,EAAI,kBAAkB,CAAA,EAAE;AAAA,IAC5E,aAAA,EAAe,EAAE,oBAAA,EAAsB,IAAA,EAAQ,uBAAuB,IAAA;AAAO,GAC9E,CAAA;AAAA,EAED,UAAU,YAAA,CAAa;AAAA,IACrB,QAAQ,EAAE,YAAA,EAAc,IAAI,gBAAA,EAAkB,EAAA,EAAI,kBAAkB,GAAA,EAAO;AAAA,IAC3E,aAAA,EAAe;AAAA,MACb,SAAA,EAAW,GAAA;AAAA,MACX,oBAAA,EAAsB,GAAA;AAAA,MACtB,sBAAA,EAAwB,IAAA;AAAA,MACxB,6BAAA,EAA+B;AAAA,KACjC;AAAA,IACA,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB,EAAA;AAAA,MACjB,MAAA,EAAQ,EAAE,mBAAA,EAAqB,GAAA,EAAM,oBAAoB,GAAA,EAAM,wBAAA,EAA0B,IAAA,EAAO,yBAAA,EAA2B,IAAA;AAAM,KACnI;AAAA,IACA,MAAA,EAAQ,EAAE,KAAA,EAAO,WAAA,EAAY;AAAA,IAC7B,UAAA,EAAY,EAAE,IAAA,EAAM,WAAA,EAAa,kBAAA,EAAoB,CAAA,EAAG,aAAA,EAAe,EAAA,EAAI,gBAAA,EAAkB,CAAA,EAAG,kBAAA,EAAoB,MAAA,EAAO;AAAA,IAC3H,aAAA,EAAe,EAAE,oBAAA,EAAsB,IAAA,EAAQ,uBAAuB,IAAA;AAAO,GAC9E;AACH;AAEA,SAAS,WAAA,CAAY,MAA6B,QAAA,EAA+C;AAC/F,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,QAAA,EAAU,YAAA,IAAgB,IAAA,CAAK,YAAA;AAAA,IAC7C,gBAAA,EAAkB,QAAA,EAAU,gBAAA,IAAoB,IAAA,CAAK,gBAAA;AAAA,IACrD,gBAAA,EAAkB,QAAA,EAAU,gBAAA,IAAoB,IAAA,CAAK,gBAAA;AAAA,IACrD,oBAAA,EAAsB,QAAA,EAAU,oBAAA,IAAwB,IAAA,CAAK,oBAAA,IAAwB,CAAA;AAAA,IACrF,UAAA,EAAY,QAAA,EAAU,UAAA,IAAc,IAAA,CAAK,UAAA,IAAc,CAAA;AAAA,IACvD,cAAA,EAAgB,QAAA,EAAU,cAAA,IAAkB,IAAA,CAAK,cAAA,IAAkB;AAAA,GACrE;AACF;AAEA,SAAS,kBAAA,CAAmB,MAAyB,cAAA,EAAuD;AAC1G,EAAA,IAAI,IAAA,CAAK,aAAA,EAAe,OAAA,EAAS,OAAO,KAAK,aAAA,CAAc,OAAA;AAC3D,EAAA,IAAI,cAAA,KAAmB,UAAU,OAAO,cAAA;AACxC,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,2BAA2B,IAAA,EAAmD;AAC5F,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,cAAA,KAAmB,IAAA,CAAK,gBAAgB,QAAA,GAAW,UAAA,CAAA;AAC/E,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,IAAA,EAAM,cAAc,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,wBAAwB,WAAW,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,IAAiB,EAAC;AAC7C,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,KAAgB,IAAA;AACzC,EAAA,MAAM,qBAAA,GAAwB,KAAK,aAAA,KAAkB,KAAA;AACrD,EAAA,MAAM,wBAAwB,OAAO,IAAA,CAAK,kBAAkB,QAAA,GAAW,IAAA,CAAK,gBAAgB,EAAC;AAC7F,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,EAAU,IAAA,IAAQ,aAAA,CAAc,UAAU,IAAA,KAAS,WAAA,GAAc,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,IAAA,CAAA;AACpH,EAAA,MAAM,WAAA,GAAe,IAAA,CAAK,MAAA,EAAQ,KAAA,IAAS,cAAc,MAAA,EAAQ,KAAA;AACjE,EAAA,MAAM,yBAAA,GAA4B,KAAK,OAAA,EAAS,kBAAA,IAC3C,cAAc,OAAA,EAAS,kBAAA,IACvB,OAAO,OAAA,CAAQ,kBAAA;AAEpB,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA,EAAQ,YAAY,WAAA,CAAY,MAAA,CAAO,QAAQ,aAAA,CAAc,MAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA;AAAA,IACjF,aAAA,EAAe;AAAA,MACb,GAAG,MAAA,CAAO,aAAA;AAAA,MACV,GAAI,aAAA,CAAc,aAAA,IAAiB,EAAC;AAAA,MACpC,GAAG,qBAAA;AAAA,MACH,MAAA,EAAQ,wBAAwB,KAAA,GAAS,qBAAA,CAAsB,UAAU,aAAA,CAAc,aAAA,EAAe,MAAA,IAAU,MAAA,CAAO,aAAA,CAAc,MAAA;AAAA,MACrI,SAAA,EAAW,qBAAA,CAAsB,SAAA,IAAa,IAAA,CAAK,MAAA,EAAQ,oBAAoB,aAAA,CAAc,aAAA,EAAe,SAAA,IAAa,MAAA,CAAO,aAAA,CAAc,SAAA;AAAA,MAC9I,oBAAA,EACE,qBAAA,CAAsB,oBAAA,IACnB,qBAAA,CAAsB,aACtB,IAAA,CAAK,MAAA,EAAQ,gBAAA,IACb,aAAA,CAAc,eAAe,oBAAA,IAC7B,aAAA,CAAc,aAAA,EAAe,SAAA,IAC7B,OAAO,aAAA,CAAc,oBAAA;AAAA,MAC1B,gBAAgB,qBAAA,CAAsB,cAAA,IAAkB,cAAc,aAAA,EAAe,cAAA,IAAkB,OAAO,aAAA,CAAc;AAAA,KAC9H;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAG,MAAA,CAAO,OAAA;AAAA,MACV,GAAI,aAAA,CAAc,OAAA,IAAW,EAAC;AAAA,MAC9B,GAAI,IAAA,CAAK,OAAA,IAAW,EAAC;AAAA,MACrB,MAAA,EAAQ;AAAA,QACN,GAAG,OAAO,OAAA,CAAQ,MAAA;AAAA,QAClB,GAAK,aAAA,CAAc,OAAA,EAAS,MAAA,IAAU,EAAC;AAAA,QACvC,GAAK,IAAA,CAAK,OAAA,EAAS,MAAA,IAAU;AAAC,OAChC;AAAA,MACA,kBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,GAAG,MAAA,CAAO,QAAA;AAAA,MACV,GAAI,aAAA,CAAc,QAAA,IAAY,EAAC;AAAA,MAC/B,GAAI,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,MACtB,IAAA,EAAM;AAAA,KACR;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,GAAG,MAAA,CAAO,MAAA;AAAA,MACV,GAAI,aAAA,CAAc,MAAA,IAAU,EAAC;AAAA,MAC7B,GAAI,IAAA,CAAK,MAAA,IAAU,EAAC;AAAA,MACpB,KAAA,EAAO;AAAA,KACT;AAAA,IACA,UAAA,EAAY;AAAA,MACV,GAAG,MAAA,CAAO,UAAA;AAAA,MACV,GAAI,aAAA,CAAc,UAAA,IAAc,EAAC;AAAA,MACjC,GAAI,IAAA,CAAK,UAAA,IAAc;AAAC,KAC1B;AAAA,IACA,aAAA,EAAe;AAAA,MACb,GAAG,MAAA,CAAO,aAAA;AAAA,MACV,GAAI,aAAA,CAAc,aAAA,IAAiB,EAAC;AAAA,MACpC,GAAI,IAAA,CAAK,aAAA,IAAiB,EAAC;AAAA,MAC3B,eAAe,IAAA,CAAK,aAAA,EAAe,aAAA,IAC9B,aAAA,CAAc,eAAe,aAAA,IAC7B,yBAAA;AAAA,MACL,2BAAA,EAA6B;AAAA,QAC3B,GAAG,OAAO,aAAA,CAAc,2BAAA;AAAA,QACxB,GAAK,aAAA,CAAc,aAAA,EAAe,2BAAA,IAA+B,EAAC;AAAA,QAClE,GAAK,IAAA,CAAK,aAAA,EAAe,2BAAA,IAA+B;AAAC,OAC3D;AAAA,MACA,aAAA,EAAe,KAAK,aAAA,EAAe,aAAA,IAAiB,cAAc,aAAA,EAAe,aAAA,IAAiB,OAAO,aAAA,CAAc;AAAA;AACzH,GACF;AACF;AAEO,SAAS,sBAAA,CAAuB,MAAyB,OAAA,EAAsF;AACpJ,EAAA,OAAO,OAAA,EAAS,KAAA,IAAS,0BAAA,CAA2B,IAAI,CAAA;AAC1D;;;ACnPA,eAAA,EAAA;AAQO,SAAS,gBAAgB,KAAA,EAAoB;AAClD,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,MAAA;AAC1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,CAAM,SAAS,GAAA,GAAM,CAAA,EAAG,MAAM,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA,GAAQ,KAAA;AAAA,EAC5D;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,UAAU,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,IAAI,CAAC,KAAA,KAAU,aAAA,CAAc,KAAK,EAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,KAAK,CAAA;AAC/F,IAAA,OAAO,gBAAgB,KAAA,CAAM,MAAM,CAAA,EAAA,EAAK,OAAO,GAAG,IAAA,EAAK;AAAA,EACzD;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,cAAc,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC3G,IAAA,OAAO,eAAe,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,OAAO,GAAG,IAAA,EAAK;AAAA,EACvD;AACA,EAAA,OAAO,cAAc,KAAK,CAAA;AAC5B;AAEO,SAAS,oBAAA,CACd,QAAA,EACA,MAAA,EACA,MAAA,EAC4B;AAC5B,EAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,cAAc,aAAa,CAAA;AAChE,EAAA,IAAI,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,UAAA;AAExC,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,kBAAkB,UAAU,CAAA;AAC/C,EAAA,IACE,UAAA,IAAc,OAAO,aAAA,CAAc,qBAAA,IAChC,WAAW,MAAA,IAAU,MAAA,CAAO,cAAc,oBAAA,EAC7C;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA;AACT;AAOO,SAAS,wBAAA,CACd,QAAA,EACA,MAAA,EACA,WAAA,EACA,MAAA,EAOA;AACA,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,kBAAkB,UAAU,CAAA;AAC/C,EAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA;AAEpE,EAAA,IAAI,mBAAmB,SAAA,EAAW;AAChC,IAAA,OAAO,EAAE,gBAAgB,OAAA,EAAS,UAAA,EAAY,WAAW,MAAA,EAAQ,UAAA,EAAY,WAAW,KAAA,EAAM;AAAA,EAChG;AAEA,EAAA,MAAM,GAAA,GAAM,OAAO,aAAA,CAAc,oBAAA;AACjC,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACpC,EAAA,MAAM,IAAA,GAAO;AAAA,eAAA,EAAoB,UAAA,CAAW,MAAA,GAAS,GAAG,CAAA,4DAAA,EAA+D,WAAW,CAAA,6BAAA,CAAA;AAClI,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,SAAS,IAAA,GAAO,IAAA;AAAA,IAChB,SAAA,EAAW,MAAA;AAAA,IACX,UAAA;AAAA,IACA,SAAA,EAAW;AAAA,GACb;AACF;AAOO,SAAS,6BAAA,CACd,UACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,cAAc,aAAa,CAAA;AAChE,EAAA,IAAI,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA,EAAG,OAAO,WAAA;AACxC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,2BAAA,CAA4B,QAAQ,CAAA;AACxE,EAAA,OAAO,MAAA,IAAU,OAAO,aAAA,CAAc,aAAA;AACxC;AAOO,SAAS,0BAA0B,IAAA,EAO/B;AACT,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,UAAU,UAAA,EAAY,WAAA,EAAa,iBAAgB,GAAI,IAAA;AAClF,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,OAAO,OAAO,SAAA,KAAc,QAAA,GAAW,SAAA,GAAY,cAAc,SAAS,CAAA;AAAA,EAC5E;AAEA,EAAA,MAAM,OAAA,GAAU,eAAA,IAAmB,eAAA,CAAgB,SAAS,CAAA;AAC5D,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,YAAY,QAAQ,CAAA,CAAA;AAAA,IACpB,UAAA,GAAa,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA,GAAK,IAAA;AAAA,IAC1C,WAAA,GAAc,CAAA,YAAA,EAAe,WAAW,CAAA,CAAA,GAAK;AAAA,GAC/C,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,eAAe,UAAA,IAAc,EAAA;AAE3C,EAAA,IAAI,WAAW,iBAAA,EAAmB;AAChC,IAAA,OAAO,6BAA6B,IAAI,CAAA;AAAA,SAAA,EAAe,OAAO;AAAA,wCAAA,EAA6C,KAAK,CAAA,4DAAA,CAAA;AAAA,EAClH;AAEA,EAAA,IAAI,WAAW,mBAAA,EAAqB;AAClC,IAAA,OAAO,2BAA2B,IAAI,CAAA;AAAA,SAAA,EAAe,OAAO;AAAA,wCAAA,EAA6C,KAAK,CAAA,4BAAA,CAAA;AAAA,EAChH;AAEA,EAAA,OAAO,0BAA0B,IAAI,CAAA;AAAA,wCAAA,EAA8C,KAAK,CAAA,gDAAA,CAAA;AAC1F;AAEO,SAAS,gBAAA,CACd,MACA,IAAA,EAC2D;AAC3D,EAAA,MAAM,SAAU,IAAA,CAAa,MAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,CAAO,UAAU,UAAA,EAAY;AACjD,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,EACjC;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAE;AAAA,EAC/C,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiBC,YAAA,EAAU;AAC7B,MAAA,MAAM,UAAU,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,GAAG,KAAA,CAAM,IAAA,CAAK,KAAK,GAAG,CAAA,IAAK,MAAM,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAC5G,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAA,EAAQ;AAAA,IAC9B;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,EACtF;AACF;;;AC3IA,SAAS,6BAA6B,KAAA,EAA+B;AACnE,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAI,OAAO,IAAA;AAClE,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,GAAG,OAAO,IAAA;AACrC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACpC,EAAA,OAAO,UAAA,IAAc,IAAI,UAAA,GAAa,IAAA;AACxC;AAEA,SAAS,6BAAA,CAA8B,aAAwC,QAAA,EAA0B;AACvG,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,GAAG,OAAO,CAAA;AACxC,EAAA,OAAO,WAAA,CAAY,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,EAAO,QAAA,KAAa,QAAA,KAAa,KAAA,EAAO,MAAA,KAAW,SAAA,IAAa,KAAA,EAAO,MAAA,KAAW,UAAU,CAAA,CAAE,MAAA;AACrI;AAEA,SAAS,kBAAkB,IAAA,EAA4D;AACrF,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,IAAA;AAE9C,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAA,EAAU,IAAA,IAAQ,IAAA,CAAK,aAAA,EAAe,IAAA;AAClF,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,IAAA;AAE1D,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,IAAA;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,QAAA,EAAU,SAAA,IAAa,IAAA,CAAK,aAAA,EAAe;AAAA,GACrG;AACF;AAEA,SAAS,mBAAA,CAAoB,MAAqB,QAAA,EAAuB;AACvE,EAAA,MAAM,SAAU,IAAA,CAAa,MAAA;AAC7B,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AAEpB,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAa,MAAA,CAAe,IAAA,EAAM;AACtD,IAAA,IAAI;AACF,MAAA,OAAO,qBAAsBV,+BAAAA,CAAwB,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AAAA,IAClF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,IAAI,UAAU,OAAO,MAAA,KAAW,YAAY,OAAQ,MAAA,CAAe,WAAW,UAAA,EAAY;AACxF,IAAA,IAAI;AACF,MAAA,OAAO,oBAAA,CAAsB,MAAA,CAAe,MAAA,EAAQ,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO,qBAAqB,MAAM,CAAA;AACpC;AAEA,SAAS,gBAAA,CAAiB,MAAiC,QAAA,EAAgD;AACzG,EAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,EAAA,MAAM,OAAA,GAA4B,EAAE,IAAA,EAAM,QAAA,EAAS;AACnD,EAAA,IAAI,OAAQ,KAAa,WAAA,KAAgB,QAAA,IAAa,KAAa,WAAA,CAAY,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAChG,IAAA,OAAA,CAAQ,cAAe,IAAA,CAAa,WAAA;AAAA,EACtC;AAEA,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,IAAA,EAAM,QAAQ,CAAA;AACtD,EAAA,IAAI,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,WAAA,GAAc,WAAA;AAErD,EAAA,MAAM,gBAAgB,OAAQ,IAAA,CAAa,aAAA,KAAkB,SAAA,GAAa,KAAa,aAAA,GAAgB,MAAA;AACvG,EAAA,IAAI,kBAAkB,MAAA,IAAc,IAAA,CAAa,mBAAmB,MAAA,IAAc,IAAA,CAAa,qBAAqB,MAAA,EAAW;AAC7H,IAAA,OAAA,CAAQ,QAAA,GAAW;AAAA,MACjB,QAAA,EAAU,aAAA;AAAA,MACV,QAAQ,OAAQ,IAAA,CAAa,cAAA,KAAmB,QAAA,GAAY,KAAa,cAAA,GAAiB,MAAA;AAAA,MAC1F,UAAW,IAAA,CAAa,gBAAA,KAAqB,SAAY,oBAAA,CAAsB,IAAA,CAAa,gBAAgB,CAAA,GAAI;AAAA,KAClH;AAAA,EACF;AAEA,EAAA,MAAM,QAAS,IAAA,CAAa,KAAA;AAC5B,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,OAAA,CAAQ,KAAA,GAAQ;AAAA,MACd,OAAA,EAAS,QAAQ,KAAK,CAAA;AAAA,MACtB,KAAA,EAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,KAAA,GAAQ,MAAA;AAAA,MAC7F,KAAA,EAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,KAAA,GAAQ,MAAA;AAAA,MAC7F,QAAA,EAAU,QAAQ,KAAA,IAAS,OAAO,UAAU,QAAA,IAAY,OAAO,KAAA,CAAM,KAAA,KAAU,UAAU;AAAA,KAC3F;AAAA,EACF;AAEA,EAAA,MAAM,QAAS,IAAA,CAAa,KAAA;AAC5B,EAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,IAAA,OAAA,CAAQ,KAAA,GAAQ;AAAA,MACd,YAAY,OAAO,KAAA,CAAM,UAAA,KAAe,QAAA,GAAW,MAAM,UAAA,GAAa,MAAA;AAAA,MACtE,WAAW,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,GAAW,MAAM,SAAA,GAAY,MAAA;AAAA,MACnE,yBAAyB,OAAO,KAAA,CAAM,uBAAA,KAA4B,QAAA,GAAW,MAAM,uBAAA,GAA0B,MAAA;AAAA,MAC7G,cAAA,EAAgB,OAAO,KAAA,CAAM,WAAA,KAAgB;AAAA,KAC/C;AAAA,EACF;AAEA,EAAA,IAAK,IAAA,CAAa,wBAAwB,MAAA,EAAW;AACnD,IAAA,OAAA,CAAQ,MAAA,GAAS,EAAE,mBAAA,EAAsB,IAAA,CAAa,mBAAA,EAAoB;AAAA,EAC5E;AAEA,EAAA,IAAI,OAAQ,IAAA,CAAa,QAAA,KAAa,QAAA,EAAU;AAC9C,IAAA,OAAA,CAAQ,SAAU,IAAA,CAAa,QAAA;AAAA,EACjC;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,uBAAuB,MAAA,EAYT;AACrB,EAAA,MAAM,aAAA,GAAgB,oBAAA,CAAqB,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAA;AAC5D,EAAA,MAAM,eAAA,GAAkB,oBAAA,CAAqB,MAAA,CAAO,MAAM,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,mBAAA,CAAoB,eAAe,CAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,iBAAiB,eAAe,CAAA;AAE9C,EAAA,OAAO;AAAA,IACL;AAAA,MACE,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO,CAAA,WAAA,EAAc,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,MACpC,MAAM,MAAA,CAAO,QAAA;AAAA,MACb,SAAA,EAAW,aAAA;AAAA,MACX,aAAa,MAAA,CAAO;AAAA,KACtB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO,CAAA,aAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA,CAAA;AAAA,MACtC,MAAM,MAAA,CAAO,QAAA;AAAA,MACb,OAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,EAAQ,eAAA;AAAA,MACR,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,SAAA,EAAW;AAAA,QACT,IAAI,MAAA,CAAO,WAAA;AAAA,QACX,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,WAAW,MAAA,CAAO;AAAA,OACpB;AAAA,MACA,gBAAgB,MAAA,CAAO,cAAA;AAAA,MACvB,iBAAiB,MAAA,CAAO;AAAA;AAC1B,GACF;AACF;AAEO,SAAS,eAAA,CAAgB,cAAmD,IAAA,EAA0B;AAC3G,EAAA,OAAO,OAAO,KAAA,KAAoC;AAChD,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,IAAS;AAAA,MAC7B,MAAM,IAAA,EAAM,IAAA;AAAA,MACZ,OAAO,IAAA,EAAM,KAAA;AAAA,MACb,KAAA,EAAO,YAAA;AAAA,MACP,QAAQ,IAAA,EAAM,MAAA;AAAA,MACd,cAAc,IAAA,EAAM,YAAA;AAAA,MACpB,gBAAgB,IAAA,EAAM,cAAA;AAAA,MACtB,aAAa,IAAA,EAAM,WAAA;AAAA,MACnB,cAAe,IAAA,EAAc;AAAA,KAC/B;AACA,IAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,IAAS,IAA0B,OAAc,CAAA;AACzF,IAAA,MAAM,cAAmD,OAAA,CAAQ,KAAA;AACjE,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAA2B;AAClD,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa,UAAA,CAAW,GAAA,CAAK,IAAA,CAAa,MAAM,IAAI,CAAA;AAEvE,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,cAAe,OAAA,CAAQ,MAAA,EAAQ,YAAA,IAAgB,QAAA,CAAS,OAAO,YAAA,IAAgB,EAAA;AAAA,MAC/E,gBAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,OAAA,CAAQ,QAAQ,gBAAA,IAAoB,QAAA,CAAS,MAAA,CAAO,gBAAA,IAAoB,CAAY;AAAA,KACrH;AACA,IAAA,MAAM,WAAsB,EAAC;AAC7B,IAAA,MAAM,OAAA,GAAW,MAAM,GAAA,EAAa,SAAA;AACpC,IAAA,MAAM,UAAA,GAAc,MAAM,GAAA,EAAa,YAAA;AACvC,IAAA,MAAM,iBAAA,GAAqB,MAAM,GAAA,EAAa,mBAAA;AAC9C,IAAA,MAAM,WAAA,GAAe,MAAM,GAAA,EAAa,aAAA;AACxC,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AACzC,IAAA,MAAM,mBAA0C,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,gBAAgB,IAChF,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,CAAC,WAAW,EAAE,GAAG,KAAA,EAAM,CAAE,IACpD,EAAC;AACL,IAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,gBAAA,CAAiB,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,UAAA,EAAY,KAAK,CAAC,CAAC,CAAA;AAC1F,IAAA,MAAM,uBAA8C,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,oBAAoB,IACxF,KAAA,CAAM,oBAAA,CAAqB,GAAA,CAAI,CAAC,WAAW,EAAE,GAAG,KAAA,EAAM,CAAE,IACxD,EAAC;AACL,IAAA,IAAI,gBAAA,GAAmB,KAAA;AACvB,IAAA,IAAI,oBAAA,GAAuB,KAAA;AAE3B,IAAA,KAAA,MAAW,IAAA,IAAQ,UAAA,CAAW,MAAA,EAAO,EAAG;AACtC,MAAA,MAAM,OAAA,GAAe,IAAA;AACrB,MAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,OAAO,OAAA,CAAQ,cAAc,QAAA,EAAU;AAC9D,QAAA,OAAA,CAAQ,SAAA,CAAU,cAAc,KAAA,CAAM,WAAA;AACtC,QAAA,OAAA,CAAQ,SAAA,CAAU,sBAAsB,KAAA,CAAM,mBAAA;AAC9C,QAAA,OAAA,CAAQ,UAAU,gBAAA,GAAmB,gBAAA;AACrC,QAAA,OAAA,CAAQ,UAAU,oBAAA,GAAuB,oBAAA;AACzC,QAAA,OAAA,CAAQ,SAAA,CAAU,WAAW,KAAA,CAAM,QAAA;AACnC,QAAA,OAAA,CAAQ,UAAU,GAAA,GAAM,KAAA,CAAM,GAAA,KAAQ,KAAA,CAAM,MAAM,EAAC,CAAA;AACnD,QAAA,OAAA,CAAQ,UAAU,SAAA,GAAY,OAAA;AAE9B,QAAA,OAAA,CAAQ,UAAU,aAAA,GAAgB,OAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AACrD,IAAA,IAAI,SAAA,GAAY,MAAM,aAAA,IAAiB,CAAA;AACvC,IAAA,MAAM,SAAA,GAA6D,MAAM,OAAA,CAAQ,IAAA,EAAM,UAAU,CAAA,GAC7F,IAAA,CAAK,WACF,GAAA,CAAI,CAAC,aAAkB,iBAAA,CAAkB,QAAQ,CAAC,CAAA,CAClD,MAAA,CAAO,CAAC,QAAA,KAAoH,QAAA,KAAa,IAAI,CAAA,GAChJ,EAAC;AACL,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,EAAC;AAC1C,IAAA,MAAM,mBAAA,GAAsB,KAAA,CAAM,mBAAA,IAAuB,EAAC;AAC1D,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,eAAe,SAAS,CAAA;AAC7D,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,SAAS,CAAA;AAKzC,IAAA,MAAM,YAAA,GAA4B,OAAA,CAAQ,GAAA,CAAI,MAAM,EAAE,CAAA;AAOtD,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,aAAa,OAAA,EAAS,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,SAAA,EAAU;AACtE,MAAA,IAAI,iBAAA,IAAqB,kBAAkB,uBAAA,EAAyB,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,WAAA,EAAY;AAClH,MAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAU;AAAA,IAC/C,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,OAAA,EAAiB,QAAA,EAAkB,UAAA,KAAwB;AAClF,MAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,MAAA,GAAA,CAAI,eAAA,GAAkB,OAAA;AACtB,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,GAAA,CAAI,iBAAA,GAAoB,EAAE,QAAA,EAAU,UAAA,EAAY,OAAA,EAAQ;AAAA,MAC1D;AACA,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,YAAA,KAAiB,YAAA,EAAc;AACnD,QAAA,GAAA,CAAI,iBAAA,GAAoB,IAAA;AAAA,MAC1B;AACA,MAAA,KAAA,CAAM,GAAA,GAAM,GAAA;AAAA,IACd,CAAA;AAKA,IAAA,MAAM,MAAA,GAAS,OACb,EAAA,EACA,IAAA,GAAkB,QAAA,KACe;AAvQvC,MAAA,IAAA,EAAA;AAwQM,MAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAiB,IAAA,CAAK,KAAK,GAAG,CAAA;AAC5C,MAAA,MAAM,cAAc,WAAA,EAAY;AAChC,MAAA,IAAI,YAAY,SAAA,EAAW;AACzB,QAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,QAAC,GAAA,CAAY,WAAA,GAAc,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAQ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAE;AAC7G,QAAA,OAAA,GAAU,EAAE,MAAM,WAAA,EAAa,KAAA,EAAO,SAAS,MAAA,EAAQ,WAAA,CAAY,QAAQ,CAAA;AAC3E,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,EAAE,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAO,EAAG,CAAA;AAC7F,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,MAC3B;AAEA,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA,gBAAA,EAAmB,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,YAAA,EAAc,EAAA,CAAG,EAAA,IAAM,GAAG,EAAA,CAAG,IAAI,YAAY,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AACxH,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,OAAO,OAAA,EAAS,IAAA,EAAM,GAAG,IAAA,EAAM,EAAA,EAAI,GAAG,EAAA,EAAI,IAAA,EAAM,GAAG,IAAA,EAAM,KAAA,EAAO,EAAE,OAAA,EAAS,gBAAA,IAAoB,CAAA;AAC9H,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,MAC3B;AAEA,MAAA,IAAI,OAAY,EAAA,CAAG,IAAA;AACnB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,IAAI;AAAE,UAAA,IAAA,GAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAAwB;AAAA,MACjE;AAEA,MAAA,MAAM,UAAA,GAAa,GAAG,EAAA,IAAM,CAAA,EAAG,GAAG,IAAI,CAAA,CAAA,EAAI,YAAY,CAAC,CAAA,CAAA;AACvD,MAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,IAAA,EAAM,IAAI,CAAA;AACjD,MAAA,IAAI,CAAC,aAAA,CAAc,EAAA,IAAM,QAAA,CAAS,aAAA,CAAc,qBAAqB,QAAA,EAAU;AAC7E,QAAA,MAAM,eAAe,CAAA,oCAAA,EAAuC,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,cAAc,OAAO,CAAA,CAAA;AAC7F,QAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,cAAc,UAAA,EAAY,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AACrF,QAAA,eAAA,CAAgB,YAAA,EAAc,EAAA,CAAG,IAAA,EAAM,UAAU,CAAA;AACjD,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,MAAM,EAAA,CAAG,IAAA,EAAM,EAAA,EAAI,EAAA,CAAG,IAAI,IAAA,EAAM,KAAA,EAAO,EAAE,OAAA,EAAS,YAAA,IAAgB,CAAA;AACjH,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,MAC3B;AACA,MAAA,IAAI,cAAc,EAAA,EAAI;AACpB,QAAA,IAAA,GAAO,aAAA,CAAc,KAAA;AAAA,MACvB;AAEA,MAAA,MAAM,QAAA,GAAY,IAAA,CAAa,IAAA,IAAQ,EAAA,CAAG,IAAA;AAC1C,MAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,EAAM,QAAQ,CAAA;AACnD,MAAA,MAAM,YAAA,GAAgB,KAAa,SAAA,IAAa,OAAQ,KAAa,SAAA,KAAc,QAAA,GAC9E,KAAa,SAAA,GACd,IAAA;AAEJ,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,YAAA,CAAa,gBAAA,GAAmB,gBAAA;AAChC,QAAA,YAAA,CAAa,oBAAA,GAAuB,oBAAA;AACpC,QAAA,YAAA,CAAa,GAAA,GAAM,KAAA,CAAM,GAAA,KAAQ,KAAA,CAAM,MAAM,EAAC,CAAA;AAC9C,QAAA,YAAA,CAAa,mBAAA,GAAsB,UAAA;AACnC,QAAA,OAAO,YAAA,CAAa,kBAAA;AAAA,MACtB;AAEA,MAAA,MAAM,mBAAA,GAAsB,4BAAA,CAA8B,IAAA,CAAa,mBAAmB,CAAA;AAC1F,MAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,QAAA,MAAM,iBAAA,GAAoB,6BAAA,CAA8B,WAAA,EAAa,QAAQ,CAAA;AAC7E,QAAA,IAAI,qBAAqB,mBAAA,EAAqB;AAC5C,UAAA,MAAM,YAAA,GAAe,CAAA,8CAAA,EAAiD,QAAQ,CAAA,EAAA,EAAK,mBAAmB,CAAA,KAAA,CAAA;AACtG,UAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,cAAc,UAAA,EAAY,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AACrF,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,CAAA;AAClF,UAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,YAC7B,IAAA,EAAM,WAAA;AAAA,YACN,KAAA,EAAO,kBAAkB,QAAQ,CAAA,CAAA;AAAA,YACjC,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,YACrD,MAAA,EAAQ,SAAA;AAAA,YACR,WAAA;AAAA,YACA,iBAAiB,EAAA,CAAG,EAAA;AAAA,YACpB,UAAU,sBAAA,CAAuB;AAAA,cAC/B,IAAA;AAAA,cACA,aAAa,EAAA,CAAG,EAAA;AAAA,cAChB,MAAA,EAAQ,YAAA;AAAA,cACR,MAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,YAAA;AAAA,cACT,WAAA;AAAA,cACA;AAAA,aACD;AAAA,WACF,CAAA;AACD,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,QAC3B;AAAA,MACF;AAEA,MAAA,IAAI,aAAA,GAAgB,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAA;AAClD,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAS,IAAA,CAAa,aAAa,CAAA;AACzD,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,aAAA,GAAgB;AAAA,YACd,IAAII,aAAAA,EAAO;AAAA,YACX,UAAA;AAAA,YACA,QAAA,EAAW,IAAA,CAAa,IAAA,IAAQ,EAAA,CAAG,IAAA;AAAA,YACnC,IAAA;AAAA,YACA,MAAA,EAAQ,SAAA;AAAA,YACR,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,YACpC,QAAA,EAAW,IAAA,CAAa,cAAA,IAAmB,IAAA,CAAa,gBAAA,GACpD,EAAE,MAAA,EAAS,IAAA,CAAa,cAAA,EAAgB,QAAA,EAAW,IAAA,CAAa,gBAAA,EAAiB,GACjF;AAAA,WACN;AACA,UAAA,gBAAA,CAAiB,KAAK,aAAa,CAAA;AACnC,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAC7C,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,WAAW,EAAA,EAAI,aAAA,CAAc,EAAA,EAAI,QAAA,EAAU,cAAc,QAAA,EAAU,UAAA,EAAY,aAAA,CAAc,UAAA,EAAY,MAAM,CAAA;AAAA,QAC5J,CAAA,MAAA,IAAW,CAAC,aAAA,CAAc,IAAA,EAAM;AAC9B,UAAA,aAAA,CAAc,IAAA,GAAO,IAAA;AAAA,QACvB;AAEA,QAAA,IAAI,aAAA,CAAc,WAAW,SAAA,EAAW;AACtC,UAAA,gBAAA,GAAmB,IAAA;AACnB,UAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,UAAA,GAAA,CAAI,kBAAA,GAAqB;AAAA,YACvB,YAAY,aAAA,CAAc,EAAA;AAAA,YAC1B,YAAY,aAAA,CAAc,UAAA;AAAA,YAC1B,UAAU,aAAA,CAAc,QAAA;AAAA,YACxB,aAAa,aAAA,CAAc;AAAA,WAC7B;AACA,UAAA,GAAA,CAAI,aAAA,GAAgB,OAAA;AACpB,UAAA,OAAO,EAAE,MAAA,EAAQ,mBAAA,EAAqB,QAAA,EAAU,aAAA,EAAc;AAAA,QAChE;AAEA,QAAA,IAAI,aAAA,CAAc,WAAW,UAAA,EAAY;AACvC,UAAA,MAAM,gBAAA,GAAmB,cAAc,OAAA,IAAW,iCAAA;AAClD,UAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,CAAA,oBAAA,EAAuB,gBAAgB,CAAA,CAAA,EAAI,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AAClH,UAAA,aAAA,CAAc,QAAA,GAAW,EAAE,GAAI,aAAA,CAAc,YAAY,EAAC,EAAI,YAAY,UAAA,EAAW;AACrF,UAAA,aAAA,CAAc,MAAA,GAAS,UAAA;AACvB,UAAA,aAAA,CAAc,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClD,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAC7C,UAAA,WAAA,CAAY,IAAA,CAAK,EAAE,WAAA,EAAaA,aAAAA,EAAO,EAAG,QAAA,EAAW,IAAA,CAAa,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,CAAA,UAAA,EAAa,gBAAgB,CAAA,CAAA,EAAI,WAAW,IAAA,EAAM,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAG,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,MAAA,EAAQ,UAAA,EAAY,CAAA;AACtN,UAAA,OAAA,GAAU,EAAE,MAAM,eAAA,EAAiB,MAAA,EAAQ,YAAY,EAAA,EAAI,aAAA,CAAc,IAAI,QAAA,EAAU,aAAA,CAAc,UAAU,UAAA,EAAY,aAAA,CAAc,YAAY,OAAA,EAAS,aAAA,CAAc,SAAS,SAAA,EAAW,aAAA,CAAc,WAAW,CAAA;AACzN,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,aAAA,EAAc;AAAA,QACvD;AAEA,QAAA,IAAI,aAAA,CAAc,MAAA,KAAW,UAAA,IAAc,aAAA,CAAc,iBAAiB,MAAA,EAAW;AACnF,UAAA,IAAA,GAAO,aAAA,CAAc,YAAA;AACrB,UAAA,OAAA,GAAU,EAAE,MAAM,eAAA,EAAiB,MAAA,EAAQ,YAAY,EAAA,EAAI,aAAA,CAAc,IAAI,QAAA,EAAU,aAAA,CAAc,UAAU,UAAA,EAAY,aAAA,CAAc,YAAY,SAAA,EAAW,aAAA,CAAc,WAAW,OAAA,EAAS,aAAA,CAAc,SAAS,CAAA;AAAA,QAC3N;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,aAAA,GAAgB,qBAAqB,IAAI,CAAA;AAC/C,MAAA,MAAM,aAAa,YAAA,EAAc,cAAA,CAAe,OAAA,GAAU,oBAAA,CAAqB,aAAa,CAAA,GAAI,MAAA;AAGhG,MAAA,MAAM,WAAY,IAAA,CAAa,KAAA;AAC/B,MAAA,MAAM,YAAA,GAAe,QAAA,KAAa,IAAA,IAAS,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA;AAC3E,MAAA,MAAM,aAA+C,YAAA,IAAgB,OAAO,QAAA,KAAa,QAAA,GAAW,SAAS,KAAA,GAAQ,MAAA;AACrH,MAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAuB;AACzC,QAAA,IAAI;AACF,UAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC5E,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACpE,UAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAK,EAAE,IAAA,EAAK;AACrC,UAAA,OAAO,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,UAAU,CAAC,CAAA,GAAI,GAAA,GAAM,UAAA,CAAW,MAAM,CAAC,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,QACtF,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,OAAO,KAAK,CAAA;AAAA,QACrB;AAAA,MACF,CAAA;AACA,MAAA,MAAM,QAAA,GAAW,YAAA,GAAe,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,UAAA,GAAa,UAAA,CAAW,IAAI,CAAA,GAAI,UAAA,CAAW,IAAI,CAAC,CAAA,CAAA,GAAK,MAAA;AACpG,MAAA,MAAM,SAAA,GAAa,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,aAAa,EAAC;AACzD,MAAA,IAAI,SAAA,GAAiB,MAAA;AACrB,MAAA,IAAI,YAAY,MAAA,CAAO,SAAA,CAAU,eAAe,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA,EAAG;AACzE,QAAA,MAAM,KAAA,GAAQ,UAAU,QAAQ,CAAA;AAChC,QAAA,MAAM,MAAM,YAAA,IAAgB,OAAO,QAAA,KAAa,QAAA,GAAW,SAAS,KAAA,GAAQ,MAAA;AAC5E,QAAA,IAAI,CAAC,OAAQ,KAAA,EAAO,SAAA,IAAa,KAAK,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA,IAAa,GAAA,EAAM;AACrE,UAAA,SAAA,GAAY,KAAA,EAAO,KAAA;AAAA,QACrB;AAAA,MACF;AAGA,MAAA,MAAM,WAAY,IAAA,CAAa,KAAA;AAC/B,MAAA,MAAM,gBAAgB,EAAA,GAAA,KAAA,CAAM,GAAA,EAAY,mBAAA,KAAlB,EAAA,CAAkB,sBAAwB,EAAC,CAAA;AACjE,MAAA,IAAI,UAAU,uBAAA,IAA2B,YAAA,CAAa,QAAQ,CAAA,IAAK,SAAS,uBAAA,EAAyB;AACnG,QAAA,MAAM,aAAa,CAAA,KAAA,EAAQ,QAAQ,CAAA,4BAAA,EAA+B,YAAA,CAAa,QAAQ,CAAC,CAAA,qBAAA,CAAA;AACxF,QAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,cAAc,UAAA,EAAY,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AACnF,QAAA,eAAA,CAAgB,UAAA,EAAY,UAAU,UAAU,CAAA;AAChD,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,MAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,MAAM,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,IAAc,CAAA;AAChH,QAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,UAC7B,IAAA,EAAM,WAAA;AAAA,UACN,KAAA,EAAO,gBAAgB,QAAQ,CAAA,CAAA;AAAA,UAC/B,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,UACrD,MAAA,EAAQ,OAAA;AAAA,UACR,YAAA,EAAc,UAAA;AAAA,UACd,WAAA;AAAA,UACA,eAAA,EAAiB,UAAA;AAAA,UACjB,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,EAAW;AAAA,UAC7B,UAAU,sBAAA,CAAuB;AAAA,YAC/B,IAAA;AAAA,YACA,WAAA,EAAa,UAAA;AAAA,YACb,MAAA,EAAQ,EAAE,OAAA,EAAS,UAAA,EAAW;AAAA,YAC9B,MAAA,EAAQ,OAAA;AAAA,YACR,OAAA,EAAS,UAAA;AAAA,YACT,WAAA;AAAA,YACA;AAAA,WACD;AAAA,SACF,CAAA;AACD,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,QAAQ,OAAA,EAAQ;AAAA,MAC3B;AAEA,MAAA,IAAI;AACF,QAAA,IAAI,cAAc,KAAA,CAAA,EAAW;AAE3B,UAAA,MAAMO,eAAcP,aAAAA,EAAO;AAC3B,UAAA,MAAMQ,eAAAA,GAAiB,wBAAA,CAAyB,QAAA,EAAU,SAAA,EAAWD,cAAa,QAAQ,CAAA;AAC1F,UAAA,WAAA,CAAY,IAAA,CAAK;AAAA,YACf,WAAA,EAAAA,YAAAA;AAAA,YACA,QAAA;AAAA,YACA,IAAA;AAAA,YACA,MAAA,EAAQ,SAAA;AAAA,YACR,SAAA,EAAW,SAAA;AAAA,YACX,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,YAClC,cAAc,EAAA,CAAG,EAAA;AAAA,YACjB,UAAA,EAAY,KAAA;AAAA,YACZ,oBAAoBC,eAAAA,CAAe,UAAA;AAAA,YACnC,gBAAgBA,eAAAA,CAAe,cAAA;AAAA,YAC/B,eAAA,EAAiB,WAAA;AAAA,YACjB,SAAA,EAAW,IAAA;AAAA,YACX,MAAA,EAAQ;AAAA,WACT,CAAA;AACD,UAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAASA,eAAAA,CAAe,OAAA,EAAS,cAAc,EAAA,CAAG,EAAA,IAAM,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,SAAS,IAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AACvH,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAW,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,IAAI,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,GAAG,CAAA;AACpH,UAAA,MAAM,kBAAA,GAAqB,qBAAqB,SAAS,CAAA;AACzD,UAAA,MAAMC,eAAc,YAAA,EAAc,cAAA,CAAe,OAAA,GAAU,oBAAA,CAAqB,kBAAkB,CAAA,GAAI,KAAA,CAAA;AACtG,UAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,YAC7B,IAAA,EAAM,WAAA;AAAA,YACN,KAAA,EAAO,oBAAoB,QAAQ,CAAA,CAAA;AAAA,YACnC,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,YACrD,UAAA,EAAY,CAAA;AAAA,YACZ,YAAA,EAAc,UAAA;AAAA,YACd,aAAA,EAAeA,YAAAA;AAAA,YACf,WAAA;AAAA,YACA,eAAA,EAAiBF,YAAAA;AAAA,YACjB,UAAU,sBAAA,CAAuB;AAAA,cAC/B,IAAA;AAAA,cACA,gBAAgBC,eAAAA,CAAe,cAAA;AAAA,cAC/B,UAAA,EAAY,CAAA;AAAA,cACZ,WAAA,EAAAD,YAAAA;AAAA,cACA,SAAA,EAAW,IAAA;AAAA,cACX,MAAA,EAAQ,kBAAA;AAAA,cACR,eAAA,EAAiB,WAAA;AAAA,cACjB,MAAA,EAAQ,QAAA;AAAA,cACR,SAASC,eAAAA,CAAe,OAAA;AAAA,cACxB,WAAA;AAAA,cACA;AAAA,aACD,CAAA;AAAA,YACD,KAAA,EAAO;AAAA,cACL,gBAAgBA,eAAAA,CAAe,cAAA;AAAA,cAC/B,eAAA,EAAiB,WAAA;AAAA,cACjB,oBAAoBA,eAAAA,CAAe,UAAA;AAAA,cACnC,WAAWA,eAAAA,CAAe,SAAA;AAAA,cAC1B,SAAA,EAAW;AAAA;AACb,WACD,CAAA;AACD,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,OAAO,EAAE,QAAQ,SAAA,EAAU;AAAA,QAC7B;AACA,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,CAAA;AAChF,QAAA,UAAA,GAAa,EAAE,OAAO,OAAA,EAAS,OAAA,EAAS,gBAAgB,EAAA,CAAG,IAAI,IAAI,CAAA;AACnE,QAAA,MAAM,OAAA,GAAU,IAAA;AAChB,QAAA,MAAM,WAAA,GAAc,EAAE,iBAAA,EAAmB,MAAA,EAAQ,WAAA,EAAY;AAC7D,QAAA,MAAM,aAAa,YAA0B;AAC3C,UAAA,IAAI,OAAO,QAAQ,IAAA,KAAS,UAAA,SAAmB,OAAA,CAAQ,IAAA,CAAK,MAAM,WAAW,CAAA;AAC7E,UAAA,IAAI,OAAO,QAAQ,MAAA,KAAW,UAAA,SAAmB,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AACjF,UAAA,IAAI,OAAO,QAAQ,IAAA,KAAS,UAAA,SAAmB,OAAA,CAAQ,IAAA,CAAK,MAAM,WAAW,CAAA;AAC7E,UAAA,IAAI,OAAO,QAAQ,KAAA,KAAU,UAAA,SAAmB,OAAA,CAAQ,KAAA,CAAM,MAAM,WAAW,CAAA;AAC/E,UAAA,IAAI,OAAO,QAAQ,GAAA,KAAQ,UAAA,SAAmB,OAAA,CAAQ,GAAA,CAAI,MAAM,WAAW,CAAA;AAC3E,UAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,QACzC,CAAA;AAEA,QAAA,IAAI,MAAA;AACJ,QAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,QAAA,EAAU,UAAU,KAAK,CAAC,CAAA;AAChE,QAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,QAAA,EAAU,SAAS,KAAK,GAAG,CAAA;AAChE,QAAA,IAAI,OAAA,GAAU,CAAA;AAId,QAAA,OAAO,IAAA,EAAM;AACX,UAAA,IAAI;AACF,YAAA,MAAA,GAAS,MAAM,UAAA,EAAW;AAC1B,YAAA,YAAA,CAAa,QAAQ,CAAA,GAAI,CAAA;AACzB,YAAA;AAAA,UACF,SAAS,QAAA,EAAU;AACjB,YAAA,OAAA,IAAW,CAAA;AACX,YAAA,MAAM,cAAc,QAAA,EAAU,WAAA,GAC1B,SAAS,WAAA,CAAY,QAAA,EAAU,OAAO,CAAA,GACtC,IAAA;AACJ,YAAA,IAAI,OAAA,GAAU,UAAA,IAAc,CAAC,WAAA,EAAa;AACxC,cAAA,YAAA,CAAa,QAAQ,CAAA,GAAA,CAAK,YAAA,CAAa,QAAQ,KAAK,CAAA,IAAK,CAAA;AACzD,cAAA,MAAM,QAAA;AAAA,YACR;AACA,YAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,EAAG,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAA,GAAU,CAAC,CAAC,CAAC,CAAA;AAAA,UAC9E;AAAA,QACF;AAEA,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,SAAA,CAAU,QAAQ,IAAI,EAAE,KAAA,EAAO,QAAQ,SAAA,EAAW,IAAA,CAAK,KAAI,EAAE;AAAA,QAC/D;AAEA,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,QAAA,MAAM,cAAcR,aAAAA,EAAO;AAO3B,QAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,MAAM,OAAA,CAAS,MAAA,CAAe,mBAAmB,CAAA,EAAG;AAC9F,UAAA,MAAM,QAAS,MAAA,CAAe,mBAAA;AAC9B,UAAA,OAAQ,MAAA,CAAe,mBAAA;AACvB,UAAA,MAAM,cAAA,GAAsB,MAAM,KAAA,IAAS,OAAA;AAC3C,UAAA,MAAM,YAAA,GAAuB,cAAA,EAAgB,KAAA,IAAmB,EAAC;AACjE,UAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,YAAA,CAAa,IAAI,CAACU,KAAAA,KAASA,KAAAA,EAAM,IAAI,CAAC,CAAA;AAC9D,UAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,CAAO,CAACA,KAAAA,KAASA,KAAAA,IAASA,KAAAA,CAAa,IAAA,IAAQ,CAAC,OAAA,CAAQ,GAAA,CAAKA,KAAAA,CAAa,IAAI,CAAC,CAAA;AACvG,UAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,cAAA,EAAgB;AAC1C,YAAA,KAAA,CAAM,KAAA,GAAQ,EAAE,GAAG,cAAA,EAAgB,KAAA,EAAO,CAAC,GAAG,YAAA,EAAc,GAAG,SAAS,CAAA,EAAE;AAAA,UAC5E;AAAA,QACF;AAEA,QAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,SAAA,IAAa,MAAA,CAAO,UAAU,OAAA,EAAS;AACxF,UAAA,WAAA,CAAY,IAAA,CAAK,EAAE,WAAA,EAAa,QAAA,EAAU,MAAM,MAAA,EAAQ,YAAA,EAAc,WAAW,MAAA,EAAQ,SAAA,EAAA,qBAAe,IAAA,EAAK,EAAE,aAAY,EAAG,YAAA,EAAc,GAAG,EAAA,EAAI,MAAA,EAAQ,WAAW,CAAA;AACtK,UAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,cAAc,EAAA,CAAG,EAAA,IAAM,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,SAAS,IAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AACrG,UAAA,KAAA,CAAM,KAAA,GAAQ,OAAO,SAAA,CAAU,OAAA;AAC/B,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,CAAA;AAClF,UAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAW,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,YAAY,CAAA;AACjH,UAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,YAAA,aAAA,CAAc,MAAA,GAAS,UAAA;AACvB,YAAA,aAAA,CAAc,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClD,YAAA,aAAA,CAAc,WAAA,GAAc,WAAA;AAC5B,YAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAAA,UAC/C;AACA,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,aAAA,EAAc;AAAA,QACtD;AAEA,QAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAa,OAAe,sBAAA,EAAwB;AAClF,UAAA,IAAI,YAAA,EAAc,GAAA,IAAO,OAAO,YAAA,CAAa,QAAQ,QAAA,EAAU;AAC7D,YAAA,KAAA,CAAM,MAAM,YAAA,CAAa,GAAA;AAAA,UAC3B;AAEA,UAAA,MAAM,kBAAkB,gBAAA,CAAiB,IAAA;AAAA,YAAK,CAAC,UAC7C,KAAA,CAAM,UAAA,KAAgB,OAAe,UAAA,IAAc,KAAA,CAAM,OAAQ,MAAA,CAAe;AAAA,WAClF;AAEA,UAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAQ,CAAA,+DAAA,CAAiE,CAAA;AAAA,UACnG;AAEA,UAAA,gBAAA,GAAmB,IAAA;AACnB,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,mBAAA;AAAA,YACR,QAAA,EAAU;AAAA,WACZ;AAAA,QACF;AAEA,QAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAa,OAAe,sBAAA,EAAwB;AAClF,UAAA,IAAI,YAAA,EAAc,GAAA,IAAO,OAAO,YAAA,CAAa,QAAQ,QAAA,EAAU;AAC7D,YAAA,KAAA,CAAM,MAAM,YAAA,CAAa,GAAA;AAAA,UAC3B;AAEA,UAAA,MAAM,kBAAkB,oBAAA,CAAqB,IAAA;AAAA,YAAK,CAAC,UACjD,KAAA,CAAM,UAAA,KAAgB,OAAe,UAAA,IAAc,KAAA,CAAM,OAAQ,MAAA,CAAe;AAAA,WAClF;AAEA,UAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,QAAQ,CAAA,sEAAA,CAAwE,CAAA;AAAA,UAC1G;AAEA,UAAA,oBAAA,GAAuB,IAAA;AACvB,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,wBAAA;AAAA,YACR,YAAA,EAAc;AAAA,WAChB;AAAA,QACF;AAEA,QAAA,IAAI,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,uBAAA,EAAyB;AAC1E,UAAA,IAAI,CAAC,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,MAAM,EAAC;AAC7B,UAAA,KAAA,CAAM,GAAA,CAAI,2BAA2B,MAAA,CAAO,IAAA;AAC5C,UAAA,KAAA,CAAM,IAAI,gCAAA,GAAmC,IAAA;AAAA,QAC/C;AAEA,QAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,QAAA,EAAU,MAAA,EAAQ,aAAa,QAAQ,CAAA;AACvF,QAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAEzC,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,WAAA;AAAA,UACA,QAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA,EAAW,MAAA;AAAA,UACX,SAAA;AAAA,UACA,cAAc,EAAA,CAAG,EAAA;AAAA,UACjB,UAAA,EAAY,KAAA;AAAA,UACZ,oBAAoB,cAAA,CAAe,UAAA;AAAA,UACnC,gBAAgB,cAAA,CAAe,cAAA;AAAA,UAC/B,eAAA,EAAiB,WAAA;AAAA,UACjB,OAAA,EAAS,KAAA,CAAA;AAAA,UACT,SAAA,EAAW,KAAA,CAAA;AAAA,UACX,MAAA,EAAQ;AAAA,SACT,CAAA;AAED,QAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,cAAA,CAAe,OAAA,EAAS,cAAc,EAAA,CAAG,EAAA,IAAM,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,SAAS,IAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AACvH,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAW,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,YAAY,CAAA;AAC9G,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,CAAA,KAAA,EAAQ,EAAA,CAAG,IAAI,CAAA,UAAA,CAAA,EAAc,MAAA,EAAQ,EAAE,UAAA,EAAW,EAAG,CAAA;AAE7F,QAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,UAAA,aAAA,CAAc,MAAA,GAAS,UAAA;AACvB,UAAA,aAAA,CAAc,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClD,UAAA,aAAA,CAAc,WAAA,GAAc,WAAA;AAC5B,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,aAAa,CAAA;AAAA,QAC/C;AAEA,QAAA,MAAM,eAAA,GAAkB,qBAAqB,MAAM,CAAA;AACnD,QAAA,MAAM,cAAc,YAAA,EAAc,cAAA,CAAe,OAAA,GAAU,oBAAA,CAAqB,eAAe,CAAA,GAAI,KAAA,CAAA;AACnG,QAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,UAC7B,IAAA,EAAM,WAAA;AAAA,UACN,KAAA,EAAO,oBAAoB,QAAQ,CAAA,CAAA;AAAA,UACnC,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,UACrD,UAAA;AAAA,UACA,YAAA,EAAc,UAAA;AAAA,UACd,aAAA,EAAe,WAAA;AAAA,UACf,WAAA;AAAA,UACA,eAAA,EAAiB,WAAA;AAAA,UACjB,UAAU,sBAAA,CAAuB;AAAA,YAC/B,IAAA,EAAM,aAAA;AAAA,YACN,gBAAgB,cAAA,CAAe,cAAA;AAAA,YAC/B,UAAA;AAAA,YACA,WAAA;AAAA,YACA,MAAA,EAAQ,eAAA;AAAA,YACR,eAAA,EAAiB,WAAA;AAAA,YACjB,MAAA,EAAQ,SAAA;AAAA,YACR,SAAS,cAAA,CAAe,OAAA;AAAA,YACxB,WAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,UACD,KAAA,EAAO;AAAA,YACL,gBAAgB,cAAA,CAAe,cAAA;AAAA,YAC/B,eAAA,EAAiB,WAAA;AAAA,YACjB,oBAAoB,cAAA,CAAe,UAAA;AAAA,YACnC,WAAW,cAAA,CAAe;AAAA;AAC5B,SACD,CAAA;AACD,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,aAAA,EAAc;AAAA,MACtD,SAAS,KAAA,EAAY;AACnB,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,QAAA,MAAM,cAAcV,aAAAA,EAAO;AAC3B,QAAA,MAAM,OAAA,GAAU,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAC9C,QAAA,WAAA,CAAY,IAAA,CAAK,EAAE,WAAA,EAAa,QAAA,EAAU,MAAM,MAAA,EAAQ,CAAA,sBAAA,EAAyB,OAAO,CAAA,CAAA,EAAI,SAAA,EAAW,IAAA,EAAM,4BAAW,IAAI,IAAA,IAAO,WAAA,EAAY,EAAG,cAAc,EAAA,CAAG,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAS,CAAA;AACxL,QAAA,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA,sBAAA,EAAyB,OAAO,IAAI,YAAA,EAAc,EAAA,CAAG,MAAM,CAAA,EAAG,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,SAAS,IAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AACnI,QAAA,eAAA,CAAgB,OAAA,EAAS,UAAU,UAAU,CAAA;AAC7C,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,SAAS,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,EAAA,CAAG,IAAI,IAAA,EAAM,KAAA,EAAO,EAAE,OAAA,IAAW,CAAA;AACpG,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,CAAA,KAAA,EAAQ,EAAA,CAAG,IAAI,CAAA,OAAA,CAAA,EAAW,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAA,IAAW,CAAA;AAC9F,QAAA,MAAM,WAAA,GAAc,EAAE,OAAA,EAAS,KAAA,EAAO,OAAO,KAAA,EAAM;AACnD,QAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,UAC7B,IAAA,EAAM,WAAA;AAAA,UACN,KAAA,EAAO,gBAAgB,QAAQ,CAAA,CAAA;AAAA,UAC/B,OAAO,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,UACrD,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA;AAAA,UACA,YAAA,EAAc,UAAA;AAAA,UACd,eAAe,YAAA,EAAc,cAAA,CAAe,OAAA,GAAU,oBAAA,CAAqB,WAAW,CAAA,GAAI,MAAA;AAAA,UAC1F,WAAA;AAAA,UACA,eAAA,EAAiB,WAAA;AAAA,UACjB,KAAA,EAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAO,KAAA,EAAM;AAAA,UACtC,UAAU,sBAAA,CAAuB;AAAA,YAC/B,IAAA,EAAM,aAAA;AAAA,YACN,UAAA;AAAA,YACA,WAAA;AAAA,YACA,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ,OAAA;AAAA,YACR,OAAA,EAAS,yBAAyB,OAAO,CAAA,CAAA;AAAA,YACzC,WAAA;AAAA,YACA;AAAA,WACD;AAAA,SACF,CAAA;AACD,QAAA,SAAA,IAAa,CAAA;AACb,QAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,aAAA,EAAc;AAAA,MACpD;AAAA,IACF,CAAA;AAKA,IAAA,MAAM,kBAA4B,EAAC;AACnC,IAAA,MAAM,kBAA4B,EAAC;AACnC,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,EAAA,EAAI,GAAA,KAAQ;AAC3B,MAAA,MAAM,CAAA,GAAI,UAAA,CAAW,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA;AAChC,MAAA,IAAI,CAAA,IAAM,CAAA,CAAU,aAAA,EAAe,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,WACtD,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,MAAM,wBAAwB,MAAM;AAClC,MAAA,MAAM,cAAc,WAAA,EAAY;AAChC,MAAA,IAAI,YAAY,SAAA,EAAW;AACzB,QAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,QAAC,GAAA,CAAY,WAAA,GAAc,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAQ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAE;AAC7G,QAAA,OAAA,GAAU,EAAE,MAAM,WAAA,EAAa,KAAA,EAAO,SAAS,MAAA,EAAQ,WAAA,CAAY,QAAQ,CAAA;AAC3E,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,EAAE,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAO,EAAG,CAAA;AAC7F,QAAA,UAAA,GAAa,IAAA;AACb,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAIA,IAAA,KAAA,MAAW,OAAO,eAAA,EAAiB;AACjC,MAAA,IAAI,gBAAA,IAAoB,wBAAwB,UAAA,EAAY;AAC5D,MAAA,IAAI,uBAAsB,EAAG;AAC7B,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG,YAAA,CAAa,GAAG,CAAC,CAAA;AAC3D,MAAA,IAAI,MAAA,CAAO,WAAW,mBAAA,EAAqB;AACzC,QAAA,gBAAA,GAAmB,IAAA;AACnB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,WAAW,wBAAA,EAA0B;AAC9C,QAAA,oBAAA,GAAuB,IAAA;AACvB,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAA,IAAwB,CAAC,UAAA,IAAc,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC3F,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,MAAA,CAAO,gBAAA,EAAkB,eAAA,CAAgB,MAAM,CAAC,CAAA;AACzF,MAAA,IAAI,MAAA,GAAS,CAAA;AACb,MAAA,MAAM,cAAiC,EAAC;AACxC,MAAA,MAAM,UAA2B,EAAC;AAClC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;AACpC,QAAA,OAAA,CAAQ,MAAM,YAAY;AACxB,UAAA,OAAO,IAAA,EAAM;AACX,YAAA,IAAI,WAAA,CAAY,GAAA,IAAO,UAAA,IAAc,gBAAA,IAAoB,oBAAA,EAAsB;AAC/E,YAAA,MAAM,CAAA,GAAI,MAAA,EAAA;AACV,YAAA,IAAI,CAAA,IAAK,gBAAgB,MAAA,EAAQ;AACjC,YAAA,IAAI,uBAAsB,EAAG;AAC7B,YAAA,MAAM,GAAA,GAAM,gBAAgB,CAAC,CAAA;AAC7B,YAAA,IAAI;AACF,cAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG,YAAA,CAAa,GAAG,CAAC,CAAA;AAC3D,cAAA,IAAI,MAAA,CAAO,WAAW,mBAAA,EAAqB;AACzC,gBAAA,gBAAA,GAAmB,IAAA;AACnB,gBAAA;AAAA,cACF;AACA,cAAA,IAAI,MAAA,CAAO,WAAW,wBAAA,EAA0B;AAC9C,gBAAA,oBAAA,GAAuB,IAAA;AACvB,gBAAA;AAAA,cACF;AAAA,YACF,SAAS,GAAA,EAAK;AACZ,cAAA,WAAA,CAAY,GAAA,GAAM,GAAA;AAClB,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF,IAAI,CAAA;AAAA,MACN;AACA,MAAA,MAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AACzB,MAAA,IAAI,WAAA,CAAY,GAAA,EAAK,MAAM,WAAA,CAAY,GAAA;AAAA,IACzC;AAIA,IAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,MAAA,IAAI,KAAK,MAAA,GAAS,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,IAC5C;AAEA,IAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,MAAA,OAAA,GAAU,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAW,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AAC1F,MAAA,MAAM,WAAA,GAAc,iBAAiB,UAAA,CAAW,GAAA,CAAI,GAAG,IAAI,CAAA,EAAG,GAAG,IAAI,CAAA;AACrE,MAAA,MAAM,WAAA,GAAc,CAAA,qCAAA,EAAwC,EAAA,CAAG,IAAI,CAAA,CAAA;AACnE,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,WAAA;AAAA,QACN,KAAA,EAAO,CAAA,eAAA,EAAkB,EAAA,CAAG,IAAI,CAAA,CAAA;AAAA,QAChC,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAM,EAAA,CAAG,IAAA,EAAM,MAAM,MAAA,EAAO;AAAA,QACpD,MAAA,EAAQ,SAAA;AAAA,QACR,WAAA;AAAA,QACA,iBAAiB,EAAA,CAAG,EAAA;AAAA,QACpB,UAAU,sBAAA,CAAuB;AAAA,UAC/B,MAAM,EAAA,CAAG,IAAA;AAAA,UACT,aAAa,EAAA,CAAG,EAAA;AAAA,UAChB,MAAA,EAAQ,WAAA;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,WAAA;AAAA,UACT,WAAA;AAAA,UACA,UAAU,EAAA,CAAG;AAAA,SACd;AAAA,OACF,CAAA;AACD,MAAA,QAAA,CAAS,KAAK,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAS,WAAA,EAAa,cAAc,EAAA,CAAG,EAAA,IAAM,GAAG,EAAA,CAAG,IAAI,IAAI,QAAA,CAAS,MAAM,IAAI,IAAA,EAAM,EAAA,CAAG,MAAM,CAAA;AAC3H,MAAA,SAAA,IAAa,CAAA;AAAA,IACf;AAEA,IAAA,IAAI,CAAC,gBAAA,IAAoB,KAAA,CAAM,GAAA,EAAK,kBAAA,EAAoB;AACtD,MAAA,MAAM,GAAA,GAAM,EAAE,GAAG,KAAA,CAAM,GAAA,EAAI;AAC3B,MAAA,OAAO,GAAA,CAAI,kBAAA;AACX,MAAA,IAAI,CAAC,iBAAiB,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,MAAA,KAAW,UAAU,CAAA,EAAG;AAClE,QAAA,OAAO,GAAA,CAAI,aAAA;AAAA,MACb;AACA,MAAA,KAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,GAAS,IAAI,GAAA,GAAM,MAAA;AAAA,IAClD;AAMA,IAAA,MAAM,wBAAwB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AACpE,IAAA,IAAI,qBAAA,IAAyB,KAAA,CAAM,GAAA,EAAK,wBAAA,EAA0B;AAChE,MAAA,MAAM,GAAA,GAAM,EAAE,GAAG,KAAA,CAAM,GAAA,EAAI;AAC3B,MAAA,OAAO,GAAA,CAAI,wBAAA;AACX,MAAA,KAAA,CAAM,MAAM,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,GAAS,IAAI,GAAA,GAAM,MAAA;AAAA,IAClD;AAEA,IAAA,OAAO;AAAA,MACL,UAAU,CAAC,GAAG,KAAA,CAAM,QAAA,EAAU,GAAG,QAAQ,CAAA;AAAA,MACzC,aAAA,EAAe,SAAA;AAAA,MACf,WAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAW,KAAA,CAAM,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKjB,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF;;;AC72BO,SAAS,4BAA4B,KAAA,EAA0B;AACpE,EAAA,OAAO,OAAO,KAAA,KAAoD;AAClE,IAAA,MAAM,MAAA,GAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,iKAAA,EAAkK;AAC1M,IAAA,MAAM,GAAA,GAAM,EAAE,GAAI,KAAA,CAAM,OAAO,EAAC,EAAI,2BAA2B,IAAA,EAAK;AACpE,IAAA,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,QAAA,EAAU,MAAM,GAAG,GAAA,EAAI;AAAA,EACpD,CAAA;AACF;ACQA,IAAM,sBAAA,GAAyB,kBAAA;AAC/B,IAAM,mBAAA,GAAsB,sBAAA;AAE5B,IAAM,sBAAA,GACN,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uEAAA,EAKyE,aAAa,CAAA,kBAAA,CAAA;AAEtF,SAAS,WAAA,CAAY,MAAc,QAAA,EAA0B;AAC3D,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,QAAA,EAAU,OAAO,IAAA;AACpC,EAAA,OAAO,KAAK,KAAA,CAAM,CAAA,EAAG,WAAW,CAAC,CAAA,CAAE,SAAQ,GAAI,QAAA;AACjD;AAEA,SAAS,yBAAyB,KAAA,EAAuD;AACvF,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACnD,IAAA,MAAM,CAAA,GAAS,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAA,EAAG,SAAS,MAAA,EAAQ;AACtB,MAAA,IAAI,CAAA,CAAE,YAAA,EAAc,GAAA,CAAI,IAAA,CAAK,EAAE,YAAY,CAAA;AAC3C,MAAA,IAAI,CAAA,CAAE,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA,IAC/B,CAAA,MAAA,IAAW,CAAA,EAAG,IAAA,KAAS,WAAA,EAAa;AAElC,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,KAAK,KAAA,EAAM;AACtB;AAEA,SAAS,2BAA2B,QAAA,EAAwB;AAC1D,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,GAAG,IAAA,KAAS,MAAA,IAAU,CAAA,EAAG,IAAA,KAAS,mBAAA,CAAoB,CAAA;AACxF;AAOA,SAAS,iBAAiB,KAAA,EAA8D;AACtF,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,IAAI,MAAgB,EAAC;AACrB,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACnD,IAAA,MAAM,CAAA,GAAS,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAA,EAAG,SAAS,MAAA,EAAQ;AACtB,MAAA,IAAI,CAAA,CAAE,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,EAAE,IAAI,CAAA;AAC3B,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ,CAAA,MAAA,IAAW,CAAA,EAAG,IAAA,KAAS,WAAA,EAAa;AAClC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AACf,QAAA,GAAA,GAAM,EAAC;AACP,QAAA,OAAA,GAAU,KAAA;AACV,QAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,OAAA,IAAW,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,KAAK,GAAG,CAAA;AAC1C,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,CAAO,CAAC,CAAA,IAAK,EAAC,EAAG,QAAA,EAAU,MAAA,CAAO,CAAC,CAAA,IAAK,EAAC,EAAE;AAC/D;AAEO,SAAS,mBAAA,CACd,OAAA,EACA,KAAA,EACA,gBAAA,EACS;AACT,EAAA,IAAI,OAAA,KAAY,OAAO,OAAO,KAAA;AAC9B,EAAA,IAAI,OAAA,KAAY,cAAc,OAAO,IAAA;AACrC,EAAA,IAAI,OAAA,KAAY,cAAc,OAAO,gBAAA;AAGrC,EAAA,IAAI,OAAA,KAAY,2BAA2B,OAAO,gBAAA;AAClD,EAAA,IAAI,YAAY,WAAA,EAAa;AAK3B,IAAA,MAAM,EAAE,OAAA,EAAS,QAAA,EAAS,GAAI,iBAAiB,KAAK,CAAA;AACpD,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAClC,IAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,OAAO,CAAA;AACzB,IAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,QAAQ,CAAA;AAC1B,IAAA,KAAA,MAAW,CAAA,IAAK,GAAG,IAAI,CAAC,EAAE,GAAA,CAAI,CAAC,GAAG,OAAO,IAAA;AACzC,IAAA,KAAA,MAAW,CAAA,IAAK,GAAG,IAAI,CAAC,EAAE,GAAA,CAAI,CAAC,GAAG,OAAO,IAAA;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,oBAAA,CAAqB,MAAyB,QAAA,EAAoC;AAChG,EAAA,OAAO,eAAe,WAAA,CACpB,KAAA,EACA,OAAA,EAC8B;AAC9B,IAAA,IAAI,CAAC,QAAA,CAAS,OAAA,EAAS,OAAO,EAAC;AAE/B,IAAA,MAAM,OAAA,GAAW,MAAc,KAAA,IAAS;AAAA,MACtC,OAAQ,IAAA,CAAa,KAAA;AAAA,MACrB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK;AAAA,KAChB;AACA,IAAA,MAAM,QAAa,OAAA,CAAQ,KAAA;AAC3B,IAAA,IAAI,CAAC,KAAA,EAAO,MAAA,IAAU,CAAC,KAAA,EAAO,MAAA,SAAe,EAAC;AAE9C,IAAA,MAAM,OAAA,GAAW,MAAM,GAAA,EAAa,SAAA;AACpC,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AAEzC,IAAA,MAAM,WAAW,QAAA,CAAS,QAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,MAAM,aAAA,IAAiB,CAAA;AACvC,IAAA,MAAM,UAAU,EAAE,KAAA,EAAO,MAAM,OAAA,EAAS,OAAA,EAAS,kBAAkB,IAAA,EAAK;AACxE,IAAA,MAAM,aAAA,GAAA,CAAiB,SAAS,cAAA,IAAkB,sBAAA,EAAwB,QAAQ,iBAAA,EAAmB,MAAA,CAAO,QAAQ,CAAC,CAAA;AACrH,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,WAAA,GACxB,MAAA,CAAO,SAAS,WAAA,CAAY,EAAE,GAAG,OAAA,EAAS,aAAA,EAAe,QAAA,EAAU,CAAA,IAAK,aAAa,CAAA,GACrF,aAAA;AAIJ,IAAA,MAAM,eAAe,0BAAA,CAA2B,CAAC,GAAI,KAAA,CAAM,QAAkB,CAAC,CAAA;AAC9E,IAAA,MAAM,UAAA,GAAkB;AAAA,MACtB,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,mBAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AACA,IAAA,MAAM,eAAA,GACJ,QAAA,CAAS,IAAA,KAAS,WAAA,GAAc,CAAC,GAAG,YAAA,EAAc,UAAU,CAAA,GAC1D,yBAAA,CAA0B,YAAA,EAAc,UAAU,CAAA;AAEtD,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,CAAO,eAAA,EAAiB;AAAA;AAAA,QAE7C,WAAA,EAAa,MAAA;AAAA,QACb,UAAA,EAAY,MAAA;AAAA;AAAA;AAAA,QAGZ,YAAY,QAAA,CAAS,SAAA;AAAA,QACrB,WAAW,QAAA,CAAS;AAAA,OACrB,CAAA;AAAA,IACH,SAAS,GAAA,EAAU;AACjB,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO,kBAAA;AAAA,QACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,IAAQ,OAAA,EAAS,IAAA,EAAM,YAAA,EAAa;AAAA,QACxE,MAAA,EAAQ,OAAA;AAAA,QACR,OAAO,EAAE,OAAA,EAAS,KAAK,OAAA,IAAW,MAAA,CAAO,GAAG,CAAA;AAAE,OAC/C,CAAA;AACD,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,IAAA,MAAM,OAAA,GAAU,YAAY,QAAQ,CAAA;AACpC,IAAA,MAAM,IAAA,GAAO,YAAY,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,IAAQ,QAAQ,CAAA;AAC/D,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AAInB,IAAA,MAAM,QAAA,GAAA,CAAY,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,WAAA,CAAY,SAAS,CAAC,CAAA,EAAG,IAAA,IAAQ,EAAA,EAAI,IAAA,EAAK;AACtF,IAAA,IAAI,YAAY,eAAA,CAAgB,QAAA,EAAU,IAAI,CAAA,SAAU,EAAC;AAEzD,IAAA,MAAM,QAAA,GAAY,UAAkB,cAAA,IAC9B,QAAA,EAAkB,mBAAmB,KAAA,IACrC,QAAA,EAAkB,KAAA,IAClB,QAAA,EAAkB,iBAAA,EAAmB,KAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,eAAe,QAAQ,CAAA;AACrC,IAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAM,GAAI,yBAAyB,KAAK,CAAA;AACrD,IAAA,MAAM,IAAA,GAAQ,MAAM,aAAA,IAAiB,CAAA;AACrC,IAAA,MAAM,MAAA,GAA2B;AAAA,MAC/B,IAAI,YAAA,EAAa;AAAA,MACjB,IAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,UAAA;AAAA,MACA,kBAAA,EAAoB,MAAM,QAAA,CAAS,MAAA;AAAA,MACnC,OAAA;AAAA,MACA,OAAO,KAAA,GAAQ;AAAA,QACb,aAAa,KAAA,CAAM,aAAA;AAAA,QACnB,cAAc,KAAA,CAAM,iBAAA;AAAA,QACpB,iBAAA,EAAmB,MAAM,qBAAA,EAAuB,aAAA;AAAA,QAChD,aAAa,KAAA,CAAM,YAAA;AAAA,QACnB,eAAA,EAAiB,MAAM,yBAAA,EAA2B;AAAA,OACpD,GAAI,MAAA;AAAA,MACJ,WAAA,EAAa,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM;AAAA,KACtC;AAEA,IAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,MAC7B,IAAA,EAAM,YAAA;AAAA,MACN,KAAA,EAAO,mBAAmB,IAAI,CAAA,CAAA;AAAA,MAC9B,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,IAAQ,OAAA,EAAS,IAAA,EAAM,YAAA,EAAa;AAAA,MACxE,MAAA,EAAQ,SAAA;AAAA,MACR,UAAA;AAAA,MACA,WAAA,EAAa,OAAO,KAAA,EAAO,WAAA;AAAA,MAC3B,YAAA,EAAc,OAAO,KAAA,EAAO,YAAA;AAAA,MAC5B,iBAAA,EAAmB,OAAO,KAAA,EAAO,iBAAA;AAAA,MACjC,WAAA,EAAa,OAAO,KAAA,EAAO,WAAA;AAAA,MAC3B,KAAA,EAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA;AAAM,KACjC,CAAA;AAED,IAAA,IAAI,SAAS,UAAA,EAAY;AACvB,MAAA,IAAI;AACF,QAAA,OAAA,GAAU;AAAA,UACR,IAAA,EAAM,YAAA;AAAA,UACN,IAAI,MAAA,CAAO,EAAA;AAAA,UACX,IAAA;AAAA,UACA,IAAA;AAAA,UACA,OAAA;AAAA,UACA,UAAA;AAAA,UACA,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,aAAa,MAAA,CAAO;AAAA,SACrB,CAAA;AAAA,MACH,SAAS,CAAA,EAAG;AAAA,MAEZ;AAAA,IACF;AAGA,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,YAAA,CAAa,QAAQ,OAAO,CAAA;AAAA,MACvC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAQA,IAAA,MAAM,eAAe,0BAAA,CAA2B,CAAC,GAAI,KAAA,CAAM,QAAkB,CAAC,CAAA;AAC9E,IAAA,MAAM,cAAc,CAAC,GAAI,MAAM,WAAA,IAAe,IAAK,MAAM,CAAA;AAIzD,IAAA,MAAM,IAAA,GAAO,YAAY,KAAA,CAAM,CAAC,KAAK,GAAA,CAAI,CAAA,EAAG,QAAA,CAAS,QAAQ,CAAC,CAAA;AAC9D,IAAA,MAAM,iBAAiB,YAAA,CAAa,MAAA;AAAA,MAClC,CAAC,CAAA,KAAW,EAAE,GAAG,IAAA,KAAS,QAAA,IAAY,GAAG,IAAA,KAAS,sBAAA;AAAA,KACpD;AACA,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,cAAA,CAAe,IAAA,CAAK;AAAA,QAClB,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,sBAAA;AAAA,QACN,SAAS,CAAA,uBAAA,EAA0B,CAAA,CAAE,IAAI,CAAA,IAAA,EAAO,EAAE,SAAS,CAAA;AAAA,EAAM,EAAE,IAAI;AAAA,mBAAA,CAAA;AAAA,QACvE,QAAA,EAAU,EAAE,YAAA,EAAc,CAAA,CAAE,EAAA,EAAI,gBAAgB,CAAA,CAAE,IAAA,EAAM,iBAAA,EAAmB,CAAA,CAAE,OAAA;AAAQ,OACtF,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,KAAA,GAA6B,EAAE,QAAA,EAAU,cAAA,EAAgB,WAAA,EAAY;AAG3E,IAAA,IAAI,QAAA,CAAS,WAAW,QAAA,EAAU;AAChC,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,GAAA,EAAK,mBAAmB,IAAI,CAAA,CAAA;AAAA,QAC5B,KAAA,EAAO,IAAA;AAAA,QACP,UAAA,EAAY,IAAA;AAAA,QACZ,UAAA,EAAY,GAAA;AAAA,QACZ,IAAA,EAAM,CAAC,YAAY;AAAA,OACrB;AACA,MAAA,KAAA,CAAM,cAAc,CAAC,GAAI,MAAM,WAAA,IAAe,IAAK,IAAW,CAAA;AAAA,IAChE,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,MAAA,IAAU,MAAM,IAAA,EAAM;AACnD,MAAA,KAAA,CAAM,OAAO,EAAE,GAAG,KAAA,CAAM,IAAA,EAAM,gBAAgB,IAAA,EAAK;AAAA,IACrD;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACF;AAEA,SAAS,YAAY,KAAA,EAAoB;AACvC,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,EAAA;AAC1B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,KAAA,EAAO,OAAA,KAAY,QAAA,SAAiB,KAAA,CAAM,OAAA;AACrD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA,EAAG;AACjC,IAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAY,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,CAAA,EAAG,QAAQ,CAAA,EAAG,OAAA,IAAW,EAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EACzG;AACA,EAAA,IAAI,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,SAAiB,KAAA,CAAM,IAAA;AAClD,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,yBAAA,CAA0B,MAAa,UAAA,EAA2B;AAGzE,EAAA,MAAM,iBAAiB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,EAAG,SAAS,QAAQ,CAAA;AAC9D,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA;AAC1B,EAAA,OAAO;AAAA,IACL,GAAG,cAAA;AAAA,IACH,GAAG,IAAA;AAAA,IACH,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,mBAAA,EAAqB,SAAS,UAAA;AAAW,GACjE;AACF;AAEA,SAAS,YAAA,GAAuB;AAC9B,EAAA,IAAI;AACF,IAAA,OAAOW,iBAAA,EAAW;AAAA,EACpB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAK,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,KAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAAA,EAChF;AACF;AAIA,SAAS,eAAA,CAAgB,GAAW,CAAA,EAAoB;AACtD,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAc,CAAA,CAAE,WAAA,GAAc,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CAAE,IAAA,EAAK;AACtE,EAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,EAAA,MAAM,EAAA,GAAK,KAAK,CAAC,CAAA;AACjB,EAAA,IAAI,EAAA,KAAO,IAAI,OAAO,IAAA;AACtB,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,EAAA,CAAG,MAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,EAAA,CAAG,MAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACrD,EAAA,IAAI,QAAQ,IAAA,KAAS,CAAA,IAAK,OAAA,CAAQ,IAAA,KAAS,GAAG,OAAO,KAAA;AACrD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS,IAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,EAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,GAAO,OAAA,CAAQ,IAAA,GAAO,KAAA;AAC5C,EAAA,OAAO,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,KAAA,IAAS,GAAA;AACvC;;;ACnSA,IAAM,cAAA,GAGD;AAAA,EACH,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,EAAE,MAAA,EAAQ,SAAA,EAAU;AAAA,IAC5B,YAAY,EAAE,SAAA,EAAW,KAAK,QAAA,EAAU,GAAA,EAAK,SAAS,KAAA;AAAM,GAC9D;AAAA,EACA,GAAA,EAAK;AAAA,IACH,MAAA,EAAQ,EAAE,MAAA,EAAQ,KAAA,EAAM;AAAA,IACxB,YAAY,EAAE,SAAA,EAAW,KAAK,QAAA,EAAU,GAAA,EAAK,SAAS,WAAA;AAAY,GACpE;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,EAAE,MAAA,EAAQ,QAAA,EAAS;AAAA,IAC3B,YAAY,EAAE,SAAA,EAAW,KAAK,QAAA,EAAU,IAAA,EAAM,SAAS,yBAAA;AAA0B,GACnF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,EAAE,MAAA,EAAQ,MAAA,EAAO;AAAA,IACzB,YAAY,EAAE,SAAA,EAAW,KAAK,QAAA,EAAU,GAAA,EAAM,SAAS,yBAAA;AAA0B;AAErF,CAAA;AAEA,IAAM,YAAA,GAAiC,CAAC,SAAA,EAAW,KAAA,EAAO,UAAU,MAAM,CAAA;AAC1E,IAAM,iBAAsC,CAAC,KAAA,EAAO,YAAA,EAAc,YAAA,EAAc,aAAa,yBAAyB,CAAA;AACtH,IAAM,aAAA,GAAgB,CAAC,SAAA,EAAW,KAAA,EAAO,UAAU,MAAM,CAAA;AAMlD,SAAS,wBAAwB,KAAA,EAA0C;AAChF,EAAA,IAAI,CAAC,KAAA,EAAO;AACZ,EAAA,IAAI,KAAA,CAAM,UAAU,MAAA,IAAa,CAAC,aAAa,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EAAG;AACpE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,EACpG;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,IAAA,IAAI,CAAA,CAAE,WAAW,MAAA,IAAa,CAAC,cAAc,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,EAAG;AAC/D,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,OAAA,EAAU,CAAA,CAAE,MAAM,CAAA,EAAA,CAAI,CAAA;AAAA,IAC1G;AACA,IAAA,IAAI,CAAA,CAAE,YAAA,KAAiB,MAAA,KAAc,CAAC,MAAA,CAAO,QAAA,CAAS,CAAA,CAAE,YAAY,CAAA,IAAK,CAAA,CAAE,YAAA,GAAe,CAAA,CAAA,EAAI;AAC5F,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iEAAA,EAAoE,CAAA,CAAE,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,IACvG;AAAA,EACF;AACA,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,MAAM,IAAI,KAAA,CAAM,UAAA;AAChB,IAAA,IAAI,CAAA,CAAE,YAAY,MAAA,IAAa,CAAC,eAAe,QAAA,CAAS,CAAA,CAAE,OAAO,CAAA,EAAG;AAClE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4CAAA,EAA+C,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,OAAA,EAAU,CAAA,CAAE,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,IACjH;AACA,IAAA,IAAI,CAAA,CAAE,SAAA,KAAc,MAAA,KAAc,CAAC,MAAA,CAAO,QAAA,CAAS,CAAA,CAAE,SAAS,CAAA,IAAK,CAAA,CAAE,SAAA,GAAY,CAAA,CAAA,EAAI;AACnF,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kEAAA,EAAqE,CAAA,CAAE,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,IACrG;AACA,IAAA,IAAI,CAAA,CAAE,WAAA,KAAgB,MAAA,KAAc,CAAC,MAAA,CAAO,QAAA,CAAS,CAAA,CAAE,WAAW,CAAA,IAAK,CAAA,CAAE,WAAA,GAAc,CAAA,CAAA,EAAI;AACzF,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mDAAA,EAAsD,CAAA,CAAE,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IACxF;AACA,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,IAAa,CAAC,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,EAAG;AAC5E,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sEAAA,EAAyE,CAAA,CAAE,MAAM,CAAA,EAAA,CAAI,CAAA;AAAA,IACvG;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,KAAA,EAAmE;AAClG,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,OAAA,KAAY,OAAO,OAAO,MAAA;AAC9C,EAAA,uBAAA,CAAwB,KAAK,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,KAAY,KAAA,CAAM,MAAA,KAAW,UAAa,KAAA,CAAM,UAAA,KAAe,MAAA,IAAa,KAAA,CAAM,KAAA,KAAU,MAAA,CAAA;AAClH,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,EAAA,MAAM,KAAA,GAAwB,MAAM,KAAA,IAAS,QAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,eAAe,KAAK,CAAA;AAGpC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,KAAA,CAAM,WAAW,KAAA,EAAO;AAC1B,IAAA,MAAA,GAAS,MAAA;AAAA,EACX,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,EAAE,GAAG,OAAA,CAAQ,MAAA,EAAQ,GAAI,KAAA,CAAM,MAAA,IAAU,EAAC,EAAG;AAAA,EACxD;AAGA,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,CAAM,UAAA,EAAY,QAAQ,UAAU,CAAA;AAEzE,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,QAAQ,UAAA,EAAW;AACpD;AAEA,SAAS,iBAAA,CACP,OACA,MAAA,EAC0B;AAC1B,EAAA,IAAI,UAAU,KAAA,EAAO;AACnB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS,KAAA;AAAA,MACT,IAAA,EAAM,WAAA;AAAA,MACN,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,KAAA;AAAA,MACX,UAAA,EAAY,IAAA;AAAA,MACZ,WAAA,EAAa,CAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,SAAS,EAAC;AACtB,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,IAAW,IAAA;AAC/B,EAAA,MAAM,OAAA,GAA6B,GAAA,CAAI,OAAA,IAAW,MAAA,CAAO,OAAA;AACzD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,WAAW,OAAA,KAAY,KAAA;AAAA,IAChC,OAAA,EAAS,UAAU,OAAA,GAAU,KAAA;AAAA,IAC7B,IAAA,EAAM,IAAI,IAAA,IAAQ,WAAA;AAAA,IAClB,SAAA,EAAW,GAAA,CAAI,SAAA,IAAa,MAAA,CAAO,SAAA;AAAA,IACnC,QAAA,EAAU,GAAA,CAAI,QAAA,IAAY,MAAA,CAAO,QAAA;AAAA,IACjC,QAAA,EAAU,IAAI,QAAA,IAAY,CAAA;AAAA,IAC1B,SAAA,EAAW,IAAI,SAAA,IAAa,KAAA;AAAA,IAC5B,gBAAgB,GAAA,CAAI,cAAA;AAAA,IACpB,UAAA,EAAY,IAAI,UAAA,IAAc,IAAA;AAAA,IAC9B,SAAA,EAAW,OAAO,GAAA,CAAI,SAAA,KAAc,YAAY,GAAA,CAAI,SAAA,IAAa,CAAA,GAAI,GAAA,CAAI,SAAA,GAAY,MAAA;AAAA,IACrF,WAAA,EAAa,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,GAAA,CAAI,WAAA,IAAe,CAAC,CAAC,CAAA;AAAA,IACzD,MAAA,EAAQ,IAAI,MAAA,IAAU,MAAA;AAAA,IACtB,eAAe,GAAA,CAAI,aAAA;AAAA,IACnB,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,cAAc,GAAA,CAAI;AAAA,GACpB;AACF;AC5IA,SAAS,YAAe,KAAA,EAA6B;AACnD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AACzC;AAEA,SAAS,aACP,MAAA,EACkB;AAClB,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,QAAA,CAAS,OAAO,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AACrE,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,QAAA,EAAU,OAAO,KAAA,CAAM,QAAA;AAAA,IACvB,aAAA,EAAe,MAAA;AAAA,IACf,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,SAAS,MAAA,CAAO;AAAA,GAClB;AACF;AAEA,SAAS,oBAAA,CACP,QACA,WAAA,EACsB;AACtB,EAAA,IAAI,aAAa,OAAO,WAAA;AACxB,EAAA,OAAO,SAAS,OAAA,GAAU,OAAA;AAC5B;AAEA,eAAsB,mBACpB,MAAA,EAC2B;AAC3B,EAAA,MAAM,YAAiC,EAAC;AACxC,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,UAAU,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,cACxD,WAAA,CAAY,SAAA,CAAU,SAAS,CAAA,CAAE,QAAA,CAAS,OAAO,KAAK;AAAA,GACxD;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,SAAA,EAAU;AAAA,EAC/B;AAEA,EAAA,MAAM,OAAA,GAAU,aAAa,MAAM,CAAA;AAEnC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,KAAA,MAAW,IAAA,IAAQ,WAAA,CAAY,SAAA,CAAU,KAAK,CAAA,EAAG;AAC/C,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAAA,MACtC,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,GAAS;AAAA,UACP,MAAA,EAAQ,KAAA;AAAA,UACR,QAAQ,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,OAAO,eAAe,CAAA;AAAA,UAC1E,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,EAAK;AAAA,UACxB,WAAA,EAAa;AAAA,SACf;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,KAAW,KAAA;AAClC,MAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,MAAA,EAAQ,MAAA,EAAQ,WAAW,CAAA;AAEpE,MAAA,IAAI,MAAA,IAAU,gBAAgB,OAAA,EAAS;AACrC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAA8B;AAAA,QAClC,aAAa,SAAA,CAAU,EAAA,IAAM,IAAA,CAAK,EAAA,IAAMX,cAAO,CAAC,CAAA;AAAA,QAChD,gBAAgB,SAAA,CAAU,KAAA;AAAA,QAC1B,QAAQ,IAAA,CAAK,EAAA;AAAA,QACb,WAAW,IAAA,CAAK,KAAA;AAAA,QAChB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAQ,MAAA,EAAQ,MAAA;AAAA,QAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,QACjB;AAAA,OACF;AAEA,MAAA,IAAI,uBAAuB,QAAA,CAAS,WAAA;AACpC,MAAA,IAAI,OAAO,SAAA,CAAU,WAAA,KAAgB,UAAA,EAAY;AAC/C,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,WAAA,CAAY,UAAU,OAAO,CAAA;AAC9D,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,oBAAA,GAAuB,QAAA;AACvB,YAAA,QAAA,CAAS,WAAA,GAAc,QAAA;AAAA,UACzB;AAAA,QACF,SAAS,GAAA,EAAK;AACZ,UAAA,oBAAA,GAAuB,OAAA;AACvB,UAAA,QAAA,CAAS,WAAA,GAAc,OAAA;AACvB,UAAA,QAAA,CAAS,OAAA,GAAU;AAAA,YACjB,GAAI,QAAA,CAAS,OAAA,IAAW,EAAC;AAAA,YACzB,kBAAkB,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,OAAO,eAAe;AAAA,WACtF;AACA,UAAA,IAAI,CAAC,SAAS,MAAA,EAAQ;AACpB,YAAA,QAAA,CAAS,MAAA,GAAS,+CAAA;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAEvB,MAAA,MAAA,CAAO,IAAA,GAAO;AAAA,QACZ,IAAA,EAAM,WAAA;AAAA,QACN,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,gBAAgB,QAAA,CAAS,cAAA;AAAA,QACzB,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,WAAA,EAAa,oBAAA;AAAA,QACb,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,SAAS,QAAA,CAAS;AAAA,OACnB,CAAA;AAED,MAAA,IAAI,oBAAA,KAAyB,OAAA,IAAW,SAAA,CAAU,eAAA,KAAoB,KAAA,EAAO;AAC3E,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAK,SAAA,CAAU,KAAA,CAAM,CAAC,QAAA,KAAa,QAAA,CAAS,gBAAgB,OAAO,CAAA;AACzE,EAAA,OAAO,EAAE,IAAI,SAAA,EAAU;AACzB;AAaO,SAAS,gBAAgB,OAAA,EAAwD;AACtF,EAAA,MAAM,YAAY,OAAA,CAAQ,SAAA,EAAW,MAAA,GACjC,OAAA,CAAQ,YACR,CAAA,SAAA,gBAAA,UAAA,gBAAgD;AAEpD,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,SAAA;AAAA,IACA,OAAO,OAAA,CAAQ,MAAA;AAAA,IACf,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,UAAU,OAAA,CAAQ;AAAA,GACpB;AACF;;;ACrKA,IAAM,mBAAA,uBAA0B,GAAA,CAAI;AAAA,EAClC,WAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,KAAA,GAAQ,CAAI,KAAA,KAAgB;AAChC,EAAA,IAAI,OAAQ,UAAA,CAAmB,eAAA,KAAoB,UAAA,EAAY;AAC7D,IAAA,OAAQ,UAAA,CAAmB,gBAAgB,KAAK,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AACzC,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,GAAA,KAA+D;AAC/E,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,GAAG,EAAE,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,CAAC,mBAAA,CAAoB,GAAA,CAAI,GAAG,CAAC,CAAA;AACnF,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACjC,EAAA,OAAO,MAAA,CAAO,YAAY,OAAO,CAAA;AACnC,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAA+B;AAC3D,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,IAAI,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,SAAc,IAAA,EAAM,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AACxG,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,KAAA,EAAO,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,GAAQ;AAAA,GAC7C;AACF,CAAA;AAEO,SAAS,eAAA,CAAgB,OAAmB,OAAA,EAA0C;AAC3F,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,GAAG,MAAK,GAAI,KAAA;AAChC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,KAAK,OAAA,EAAS,GAAA;AAAA,IACd,MAAA,EAAQ,KAAK,QAAA,IAAY;AAAA,GAC3B;AAEA,EAAA,MAAM,YAAY,KAAA,CAAM;AAAA,IACtB,GAAG,IAAA;AAAA,IACH,GAAA,EAAK,SAAS,GAAG;AAAA,GAClB,CAAA;AAED,EAAA,IAAI,SAAA,CAAU,GAAA,IAAO,UAAA,IAAc,SAAA,CAAU,GAAA,EAAK;AAChD,IAAA,OAAQ,UAAU,GAAA,CAA4B,QAAA;AAAA,EAChD;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,aAAa,OAAA,EAAS,kBAAA,KAAuB,KAAA,GAAQ,oBAAA,CAAqB,KAAK,CAAA,GAAI,MAAA;AAAA,IACnF;AAAA,GACF;AACF;AAEO,SAAS,eAAA,CAAgB,UAAyB,cAAA,EAAqD;AAC5G,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA;AACjC,EAAA,MAAM,cAAc,cAAA,EAAgB,GAAA;AACpC,EAAA,MAAM,YAAY,cAAA,EAAgB,QAAA,KAAa,KAAA,GAC3C,QAAA,CAAS,WAAW,CAAA,GACpB;AAAA,IACE,GAAI,IAAA,CAAK,GAAA,IAAO,EAAC;AAAA,IACjB,GAAG,SAAS,WAAW;AAAA,GACzB;AAEJ,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,GAAI,aAAa,EAAC;AAAA,IAClB,sBAAA,EAAwB;AAAA,GAC1B;AAEA,EAAA,MAAM,QAAA,GAAuB;AAAA,IAC3B,GAAG,IAAA;AAAA,IACH;AAAA,GACF;AAEA,EAAA,IAAI,gBAAgB,KAAA,EAAO;AACzB,IAAA,QAAA,CAAS,QAAQ,cAAA,CAAe,KAAA;AAAA,EAClC;AAEA,EAAA,OAAO,QAAA;AACT;;;ACnFA,IAAM,iBAAiB,CAAC,SAAA,KACtB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,CAAC,WAAW,EAAE,GAAG,KAAA,EAAM,CAAE,IAAI,EAAC;AAElE,SAAS,wBAAA,CAAyB,OAAmB,UAAA,EAAgD;AAC1G,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,CAAM,gBAAgB,CAAA;AACvD,EAAA,MAAM,UAAA,GAAa,SAAA,CAAU,SAAA,CAAU,CAACY,MAAAA,KAAUA,MAAAA,CAAM,EAAA,KAAO,UAAA,CAAW,EAAA,IAAMA,MAAAA,CAAM,UAAA,KAAe,UAAA,CAAW,EAAE,CAAA;AAClH,EAAA,IAAI,eAAe,EAAA,EAAI;AACrB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,UAAA,CAAW,EAAE,CAAA,CAAE,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,SAAA,CAAU,UAAU,CAAA,EAAE;AACzC,EAAA,IAAI,KAAA,CAAM,WAAW,UAAA,EAAY;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,KAAA,CAAM,EAAE,CAAA,mBAAA,CAAqB,CAAA;AAAA,EAChE;AAEA,EAAA,KAAA,CAAM,MAAA,GAAS,UAAA,CAAW,QAAA,GAAW,UAAA,GAAa,UAAA;AAClD,EAAA,KAAA,CAAM,eAAe,UAAA,CAAW,QAAA,GAAY,UAAA,CAAW,YAAA,IAAgB,MAAM,IAAA,GAAQ,MAAA;AACrF,EAAA,KAAA,CAAM,YAAY,UAAA,CAAW,SAAA;AAC7B,EAAA,KAAA,CAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,EAAA,KAAA,CAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAEzC,EAAA,SAAA,CAAU,UAAU,CAAA,GAAI,KAAA;AAExB,EAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,EAAA,OAAO,GAAA,CAAI,kBAAA;AACX,EAAA,GAAA,CAAI,aAAA,GAAgB,OAAA;AACpB,EAAA,GAAA,CAAI,qBAAqB,EAAE,EAAA,EAAI,MAAM,EAAA,EAAI,MAAA,EAAQ,MAAM,MAAA,EAAO;AAE9D,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,gBAAA,EAAkB,SAAA;AAAA,IAClB;AAAA,GACF;AACF;;;AC3BA,IAAM,iBAAiB,CAAC,SAAA,KACtB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,CAAC,WAAW,EAAE,GAAG,KAAA,EAAM,CAAE,IAAI,EAAC;AAEzE,SAAS,eAAA,CACP,KAAA,EACA,OAAA,EACA,SAAA,EACuB;AACvB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,WAAW,EAAC;AAAA,EACrB;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAM,aAAA,KAAkB,KAAA;AAC9C,EAAA,MAAM,MAA6B,EAAC;AACpC,EAAA,MAAM,QAAA,GAAW,WAAW,EAAC;AAE7B,EAAA,KAAA,MAAW,QAAA,IAAY,MAAM,SAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,KAAa,KAAA;AACvC,IAAA,MAAM,MAAM,QAAA,CAAS,QAAA;AACrB,IAAA,MAAM,SAAS,QAAA,CAAS,GAAG,KAAK,QAAA,CAAS,QAAA,CAAS,UAAU,EAAE,CAAA;AAE9D,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,GAAG,CAAA,EAAA,CAAI,CAAA;AAAA,MACnE;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,OAAO,CAAA,KAAM,QAAQ,IAAI,EAAC;AACpG,IAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,QAAA,KAAa,WAAW,MAAA,CAAO,QAAA,CAAS,MAAK,GAAI,EAAA;AAChF,IAAA,MAAM,QAAQ,OAAO,MAAA,CAAO,KAAA,KAAU,QAAA,GAAW,OAAO,KAAA,GAAQ,MAAA;AAEhE,IAAA,IAAI,QAAA,IAAY,CAAC,aAAA,EAAe;AAC9B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,6DAA6D,GAAG,CAAA,qCAAA;AAAA,OAClE;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,CAAC,QAAA,EAAU;AACpC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,GAAG,CAAA,wDAAA,CAA0D,CAAA;AAAA,MAC5F;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,CAAC,SAAS,WAAA,EAAa;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,GAAG,CAAA,gDAAA,CAAkD,CAAA;AAAA,IACpF;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,IAAK,QAAA,CAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACvF,MAAA,MAAM,gBAAgB,IAAI,GAAA;AAAA,QACxB,QAAA,CAAS,QAAQ,GAAA,CAAI,CAAC,WAAW,MAAA,CAAO,KAAA,IAAS,OAAO,KAAK;AAAA,OAC/D;AACA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AAC7B,UAAA,IAAI,CAAC,aAAA,EAAe;AAClB,YAAA,MAAM,IAAI,KAAA;AAAA,cACR,CAAA,OAAA,EAAU,KAAK,CAAA,kDAAA,EAAqD,GAAG,CAAA,EAAA;AAAA,aACzE;AAAA,UACF;AAAA,QAEF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,EAAE,MAAA,EAAQ,GAAI,WAAW,EAAE,QAAA,EAAS,GAAI,IAAK,GAAI,KAAA,GAAQ,EAAE,KAAA,EAAM,GAAI,EAAC,EAAG;AAAA,EACtF;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,wBAAA,CAAyB,KAAA,EAA4B,OAAA,EAAgC,SAAA,EAAoB,KAAA,EAAwB;AACxI,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,MAAA,EAAQ,WAAA;AAAA,MACR,SAAS,KAAA,IAAS;AAAA,KACnB,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,MAAA,EAAQ,UAAA;AAAA,IACR,OAAA,EAAS,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa;AACzC,MAAA,MAAM,MAAM,QAAA,CAAS,QAAA;AACrB,MAAA,MAAM,GAAA,GAAM,QAAQ,GAAG,CAAA;AACvB,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,GAAA;AAAA,QACV,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,MAAA,EAAQ,GAAA,EAAK,MAAA,IAAU,EAAC;AAAA,QACxB,UAAU,GAAA,EAAK,QAAA;AAAA,QACf,OAAO,GAAA,EAAK;AAAA,OACd;AAAA,IACF,CAAC,CAAA;AAAA,IACD,GAAI,KAAA,GAAQ,EAAE,aAAA,EAAe,KAAA,KAAU;AAAC,GAC1C;AACA,EAAA,OAAO,IAAA,CAAK,UAAU,OAAO,CAAA;AAC/B;AAEO,SAAS,wBAAA,CACd,OACA,UAAA,EACY;AACZ,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,KAAA,CAAM,oBAAoB,CAAA;AACzD,EAAA,MAAM,aAAa,OAAA,CAAQ,SAAA;AAAA,IACzB,CAACA,WAAUA,MAAAA,CAAM,EAAA,KAAO,WAAW,EAAA,IAAMA,MAAAA,CAAM,eAAe,UAAA,CAAW;AAAA,GAC3E;AACA,EAAA,IAAI,eAAe,EAAA,EAAI;AACrB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2C,UAAA,CAAW,EAAE,CAAA,CAAE,CAAA;AAAA,EAC5E;AAEA,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,OAAA,CAAQ,UAAU,CAAA,EAAE;AACvC,EAAA,IAAI,KAAA,CAAM,WAAW,UAAA,IAAc,KAAA,CAAM,WAAW,UAAA,IAAc,KAAA,CAAM,WAAW,WAAA,EAAa;AAC9F,IAAA,MAAM,IAAI,MAAM,CAAA,cAAA,EAAiB,KAAA,CAAM,EAAE,CAAA,2BAAA,EAA8B,KAAA,CAAM,MAAM,CAAA,EAAA,CAAI,CAAA;AAAA,EACzF;AAEA,EAAA,MAAM,SAAA,GAAY,WAAW,SAAA,KAAc,IAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,KAAA,EAAO,UAAA,CAAW,SAAS,SAAS,CAAA;AAEtE,EAAA,KAAA,CAAM,MAAA,GAAS,YAAY,WAAA,GAAc,UAAA;AACzC,EAAA,KAAA,CAAM,OAAA,GAAU,SAAA;AAChB,EAAA,KAAA,CAAM,YAAY,SAAA,IAAa,MAAA;AAC/B,EAAA,KAAA,CAAM,aAAa,UAAA,CAAW,UAAA;AAC9B,EAAA,KAAA,CAAM,QAAQ,UAAA,CAAW,KAAA;AACzB,EAAA,KAAA,CAAM,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAE1C,EAAA,OAAA,CAAQ,UAAU,CAAA,GAAI,KAAA;AAEtB,EAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,EAAA,OAAO,GAAA,CAAI,sBAAA;AAKX,EAAA,IAAI,GAAA,CAAI,kBAAkB,OAAA,EAAS;AACjC,IAAA,OAAO,GAAA,CAAI,aAAA;AAAA,EACb;AACA,EAAA,GAAA,CAAI,yBAAyB,EAAE,EAAA,EAAI,MAAM,EAAA,EAAI,MAAA,EAAQ,MAAM,MAAA,EAAO;AAElE,EAAA,MAAM,WAAA,GAAuB;AAAA,IAC3B,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,mBAAA;AAAA,IACN,cAAc,KAAA,CAAM,UAAA;AAAA,IACpB,SAAS,wBAAA,CAAyB,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW,WAAW,KAAK;AAAA,GACjF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,oBAAA,EAAsB,OAAA;AAAA,IACtB,UAAU,CAAC,GAAI,MAAM,QAAA,IAAY,IAAK,WAAW,CAAA;AAAA,IACjD;AAAA,GACF;AACF;AC9IA,IAAM,iCAAA,GACJ,8hBAAA;AAOF,IAAM,+BAAA,GACJ,2dAAA;AAMF,SAAS,iBAAA,GAAoB;AAC3B,EAAA,OAAOpB,MACJ,MAAA,CAAO;AAAA,IACN,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,4BAA4B,CAAA;AAAA,IAC9D,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,QAAA,CAAS,iDAAiD,CAAA;AAAA,IAC7D,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACjC,SAASA,KAAAA,CACN,MAAA,GACA,QAAA,EAAS,CACT,SAAS,oEAAoE;AAAA,GACjF,EACA,MAAA,EAAO;AACZ;AAEA,SAAS,oBAAoB,aAAA,EAAwB;AACnD,EAAA,MAAM,eAAe,iBAAA,EAAkB;AACvC,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,iCAAiC,CAAA;AAAA,IACtE,MAAA,EAAQA,KAAAA,CACL,MAAA,EAAO,CACP,GAAA,CAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,QAAA,CAAS,4EAA4E,CAAA;AAAA,IACxF,aAAaA,KAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,2CAA2C,CAAA;AAAA,IACxF,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACjC,UAAUA,KAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,eAAe;AAAA,GAC3D;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAOA,MACJ,MAAA,CAAO;AAAA,MACN,GAAG,SAAA;AAAA,MACH,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,QAAA;AAAS,KACxD,EACA,MAAA,EAAO;AAAA,EACZ;AAEA,EAAA,OAAOA,MACJ,MAAA,CAAO;AAAA,IACN,GAAG,SAAA;AAAA,IACH,OAAA,EAASA,KAAAA,CACN,KAAA,CAAM,YAAY,CAAA,CAClB,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,EAAE,CAAA,CACN,QAAA,CAAS,yDAAyD;AAAA,GACtE,EACA,MAAA,EAAO;AACZ;AAEO,SAAS,yBAAA,CACd,UACA,MAAA,EACA;AACA,EAAA,MAAM,aAAA,GAAgB,OAAO,aAAA,KAAkB,KAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,cAAA,KACrB,aAAA,GAAgB,iCAAA,GAAoC,+BAAA,CAAA;AAC1D,EAAA,MAAM,cAAA,GAAiB,oBAAoB,aAAa,CAAA;AAExD,EAAA,MAAM,UAAU,UAAA,CAAW;AAAA,IACzB,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA;AAAA,IACA,MAAA,EAAQA,MACL,MAAA,CAAO;AAAA,MACN,SAAA,EAAWA,KAAAA,CACR,KAAA,CAAM,cAAc,CAAA,CACpB,GAAA,CAAI,CAAC,CAAA,CACL,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,CAAS,iDAAiD;AAAA,KAC9D,EACA,MAAA,EAAO;AAAA,IACV,IAAA,EAAM,OAAO,EAAE,SAAA,EAAU,KAAM;AAC7B,MAAA,MAAM,GAAA,GAAQ,OAAA,CAAgB,SAAA,KAAhB,OAAA,CAAgB,YAAc,EAAC,CAAA;AAC7C,MAAA,MAAM,UAAU,GAAA,CAAI,SAAA;AACpB,MAAA,IAAI,CAAC,GAAA,CAAI,GAAA,EAAK,GAAA,CAAI,MAAM,EAAC;AACzB,MAAA,MAAM,MAAM,GAAA,CAAI,GAAA;AAChB,MAAA,MAAM,aAAa,GAAA,CAAI,mBAAA,IAAuB,CAAA,SAAA,EAAYQ,aAAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AACnE,MAAA,IAAI,CAAC,GAAA,CAAI,oBAAA,EAAsB,GAAA,CAAI,uBAAuB,EAAC;AAC3D,MAAA,MAAM,cAAc,GAAA,CAAI,oBAAA;AAExB,MAAA,MAAM,KAAA,GAA6B;AAAA,QACjC,IAAIA,aAAAA,EAAO;AAAA,QACX,UAAA;AAAA,QACA,QAAA,EAAU,mBAAA;AAAA,QACV,SAAA;AAAA,QACA,MAAA,EAAQ,SAAA;AAAA,QACR,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACpC;AAAA,OACF;AACA,MAAA,WAAA,CAAY,KAAK,KAAK,CAAA;AAEtB,MAAA,GAAA,CAAI,sBAAA,GAAyB;AAAA,QAC3B,IAAI,KAAA,CAAM,EAAA;AAAA,QACV,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,aAAa,KAAA,CAAM;AAAA,OACrB;AACA,MAAA,GAAA,CAAI,aAAA,GAAgB,OAAA;AAEpB,MAAA,OAAA,GAAU;AAAA,QACR,IAAA,EAAM,eAAA;AAAA,QACN,MAAA,EAAQ,SAAA;AAAA,QACR,IAAI,KAAA,CAAM,EAAA;AAAA,QACV,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB;AAAA,OACD,CAAA;AAED,MAAA,gBAAA,CAAiB,IAAI,cAAA,EAAgB;AAAA,QACnC,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO,UAAA;AAAA,QACP,OAAO,EAAE,KAAA,EAAO,SAAS,IAAA,EAAM,mBAAA,EAAqB,MAAM,kBAAA,EAAmB;AAAA,QAC7E,MAAA,EAAQ,SAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAM,UAAA;AAAA,YACN,KAAA,EAAO,kBAAA;AAAA,YACP,IAAA,EAAM;AAAA,cACJ,IAAI,KAAA,CAAM,EAAA;AAAA,cACV,YAAY,KAAA,CAAM,UAAA;AAAA,cAClB,WAAW,KAAA,CAAM,SAAA;AAAA,cACjB;AAAA;AACF;AACF;AACF,OACD,CAAA;AAED,MAAA,OAAO;AAAA,QACL,sBAAA,EAAwB,IAAA;AAAA,QACxB,IAAI,KAAA,CAAM,EAAA;AAAA,QACV,YAAY,KAAA,CAAM;AAAA,OACpB;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAC,QAAgB,SAAA,GAAY,QAAA;AAC7B,EAAC,QAAgB,QAAA,GAAW,mBAAA;AAC5B,EAAA,OAAO,OAAA;AACT;;;AC3JA,eAAA,EAAA;;;ACbO,SAAS,0BAA0B,OAAA,EAAuB;AAC/D,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU,OAAA,CAAQ,SAAS,mBAAA,EAAqB;AACnE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,IAAA,KAAS,WAAA,IAAe,MAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrE,IAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,QAAA,KAAkB;AAChD,MAAA,MAAM,QAAA,GAAW,QAAA,EAAU,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,IAAA;AACvD,MAAA,OAAO,QAAA,KAAa,mBAAA;AAAA,IACtB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;;;ACIO,IAAM,0BAAN,MAAiC;AAAA,EAKtC,WAAA,CACE,MAAA,EACA,QAAA,EACA,MAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAA,GAA6C;AAC3C,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,YAAA,EAAc,OAAO,MAAA;AAChD,IAAA,OAAQ,IAAA,CAAK,QAAA,CAA+B,kBAAA,CAAmB,IAAA,CAAK,MAAM,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAA,GAAqD;AACnD,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AAC5C,IAAA,OAAQ,IAAA,CAAK,QAAA,CAAsC,mBAAA,CAAoB,IAAA,CAAK,MAAM,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAA,GAAgC;AAC9B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,QAAA,EAAU;AACnC,MAAA,OAAO;AAAA,QACL,uCAAA;AAAA,QACA,8DAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,IAAI,CAAA;AAAA,IACb;AAGA,IAAA,OAAO;AAAA,MACL,uCAAA;AAAA,MACA,gEAAA;AAAA,MACA,6HAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,aAAA,EAA2D;AAC3E,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,QAAA,EAAU;AACnC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,uCAAA;AAAA,UACA,uDAAA;AAAA,UACA,kDAAA;AAAA,UACA,gBAAgB,mDAAA,GAAsD;AAAA,SACxE,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI;AAAA,OAC7B;AAAA,IACF;AAGA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACP,uCAAA;AAAA,QACA,uFAAA;AAAA,QACA,iDAAA;AAAA,QACA,0CAAA;AAAA,QACA,gBAAgB,+GAAA,GAAkH;AAAA,OACpI,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI;AAAA,KAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAA,CAAuB,OAA8B,gBAAA,EAA+D;AAClH,IAAA,IAAI,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA,EAAG;AACrD,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,CACvB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,GAAA,EAAM,EAAE,IAAI,CAAA,GAAA,EAAM,EAAE,OAAO,CAAA,YAAA,EAAe,KAAK,SAAA,CAAU,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAA,CAClF,IAAA,CAAK,IAAI,CAAA;AAEZ,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,WAClC,mDAAA,GACA,yEAAA;AAEJ,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,wDAAA;AAAA,UACA,WAAA;AAAA,UACA,EAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,IAAI;AAAA,OACb;AAAA,IACF;AAGA,IAAA,OAAO,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,IAAA,EAA0C;AAC5D,IAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,IAAA,EAAiB,UAAU,CAAA,EAAE;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,OAAA,EAA4C;AAC3D,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,QAAA,EAAU;AACnC,MAAA,MAAMa,UAAU,IAAA,CAAK,QAAA,CAAsC,aAAA,CAAc,OAAA,EAAS,KAAK,MAAM,CAAA;AAC7F,MAAA,IAAI,UAAUA,OAAAA,EAAQ;AACpB,QAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAMA,OAAAA,CAAO,IAAA,EAAM,UAAU,CAAA,EAAE;AAAA,MACzD;AACA,MAAA,OAAO,EAAE,SAAS,KAAA,EAAO,KAAA,EAAOA,QAAO,KAAA,EAAO,QAAA,EAAU,CAAA,EAAG,UAAA,EAAY,OAAA,EAAQ;AAAA,IACjF;AAGA,IAAA,MAAM,SAAU,IAAA,CAAK,QAAA,CAA+B,eAAA,CAAgB,OAAA,EAAS,KAAK,MAAM,CAAA;AACxF,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAM,MAAA,CAAO,IAAA,EAAM,UAAU,CAAA,EAAE;AAAA,IACzD;AACA,IAAA,OAAO,EAAE,SAAS,KAAA,EAAO,KAAA,EAAO,OAAO,KAAA,EAAO,QAAA,EAAU,CAAA,EAAG,UAAA,EAAY,OAAA,EAAQ;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CAAe,UAAkB,UAAA,EAAgD;AAC/E,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,mEAAA;AAAA,QACT;AAAA,OACF;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,CAAiB,SAAA,EAAkC,QAAA,EAAkB,UAAA,EAAgD;AACnH,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO;AAAA,QACL,GAAG,SAAA;AAAA,QACH,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,EAAS,CAAA,+BAAA,EAAkC,QAAQ,CAAA,WAAA,EAAc,UAAU,OAAO,CAAA;AAAA,OACpF;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;;;AF/KA,SAAS,wBAAwB,QAAA,EAAkC;AACjE,EAAA,KAAA,IAAS,QAAQ,QAAA,CAAS,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AAC5D,IAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG,IAAA,KAAS,WAAA,EAAa;AACzC,MAAA,OAAO,SAAS,KAAK,CAAA;AAAA,IACvB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gCAAgC,IAAA,EAAwC;AAC/E,EAAA,MAAM,gBAAiB,IAAA,CAAa,aAAA;AACpC,EAAA,IAAI,CAAC,aAAA,IAAiB,OAAO,kBAAkB,QAAA,IAAY,aAAA,CAAc,WAAW,KAAA,EAAO;AACzF,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OACE,cAAc,oBAAA,IACX,aAAA,CAAc,SAAA,IACd,IAAA,CAAK,QAAQ,gBAAA,IACb,GAAA;AAEP;AAUA,SAAS,yBAAA,CAA0B,OAAmB,SAAA,EAAuC;AAC3F,EAAA,MAAM,oBAAoB,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,MAAA,CAAO,CAAC,OAAA,KAAiB;AACvE,IAAA,IAAI,yBAAA,CAA0B,OAAO,CAAA,EAAG,OAAO,KAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,KAAa,OAAA,CAAQ,SAAS,iBAAA,IAAqB,OAAA,CAAQ,IAAA,KAAS,gBAAA,CAAA,EAAmB,OAAO,KAAA;AACnH,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,MAAM,UAAA,GAAa,oBAAoB,gBAAgB,CAAA;AACvD,EAAA,IAAI,UAAA,IAAc,WAAW,OAAO,MAAA;AAIpC,EAAA,IAAK,KAAA,CAAM,GAAA,EAAa,wBAAA,EAA0B,OAAO,MAAA;AAIzD,EAAA,MAAM,eAAA,GAAA,CAAmB,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,IAAA;AAAA,IAAK,CAAC,CAAA,KACnD,CAAA,CAAE,IAAA,KAAS,UACR,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,KACpB,EAAE,OAAA,KAAY,YAAA,IAAgB,CAAA,CAAE,OAAA,CAAQ,WAAW,0BAA0B,CAAA;AAAA,GACnF;AACA,EAAA,IAAI,eAAA,IAAmB,UAAA,IAAc,SAAA,GAAY,IAAA,EAAM,OAAO,MAAA;AAE9D,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,wBAAwB,KAAA,EAA+B;AAC9D,EAAA,IAAI,CAAE,KAAA,CAAM,GAAA,EAAa,oBAAA,EAAsB;AAC7C,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAU,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACvC,EAAA,OAAO,OAAA,CAAQ,oBAAA;AAEf,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,KAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,IAAI,OAAA,GAAU;AAAA,GACnD;AACF;AAEO,SAAS,YAA+B,IAAA,EAAoF;AACjI,EAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,EAAA,MAAM,SAAA,GAAY,oBAAoB,IAAI,CAAA;AAE1C,EAAA,MAAM,YAAY,CAAC,GAAK,IAAA,CAAK,KAAA,IAAiB,EAAG,CAAA;AAIjD,EAAA,MAAM,iBAA0D,MAAM;AACpE,IAAA,MAAM,GAAA,GAAO,KAAa,cAAA,EAAgB,OAAA;AAC1C,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,IAAI,QAAQ,IAAA,EAAM,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,eAAe,IAAA,EAAK;AAC9D,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,aAAA,EAAe,IAAI,aAAA,KAAkB,KAAA;AAAA,MACrC,gBAAgB,GAAA,CAAI;AAAA,KACtB;AAAA,EACF,CAAA,GAAG;AACH,EAAA,MAAM,iBAAA,GAAoB,OAAQ,IAAA,CAAa,cAAA,EAAgB,YAAY,QAAA,GACtE,IAAA,CAAa,cAAA,EAAgB,OAAA,EAAS,UAAA,GACvC,MAAA;AAIJ,EAAA,MAAM,eAAA,GAAuB,aAAA,GACzB,EAAE,oBAAA,EAAsB,MAAA,EAAW,GAAA,EAAK,MAAA,EAAW,SAAA,EAAW,MAAA,EAAW,mBAAA,EAAqB,MAAA,EAAU,GACxG,MAAA;AACJ,EAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,IAAA,SAAA,CAAU,IAAA,CAAK,yBAAA,CAA0B,eAAA,EAAiB,aAAa,CAAC,CAAA;AAAA,EAC1E;AAGA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,GACnB,IAAI,uBAAA,CAAiC,IAAA,CAAK,YAAA,EAAc,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAC,CAAA,GACnF,MAAA;AAEJ,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,iBAAA,GAAoB,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA;AACzD,IAAA,MAAM,YAAA,GAAe,UAAU,eAAA,EAAgB;AAE/C,IAAA,IAAI,YAAA,IAAgB,iBAAA,CAAkB,gBAAA,KAAqB,QAAA,EAAU;AACnE,MAAA,SAAA,CAAU,KAAK,YAAY,CAAA;AAAA,IAC7B;AAAA,EACF;AACA,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,SAAA,EAAW,IAAI,CAAA;AACjD,EAAA,MAAM,YAAA,GAAe,4BAAgC,CAAA;AAIrD,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAkB,IAAA,CAAa,SAAS,CAAA;AAClE,EAAA,MAAM,WAAA,GAAc,mBAAmB,UAAA,CAAW,OAAA,GAC9C,qBAAqB,IAAA,EAAa,iBAAA,CAAkB,UAAU,CAAA,GAC9D,MAAA;AAIJ,EAAA,MAAM,sBAAA,GAAyB,CAC7B,IAAA,EACA,IAAA,KACqB;AACrB,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,EAAA;AAAA,MACpB,WAAW,CAAC,GAAG,KAAK,SAAA,EAAW,GAAG,KAAK,SAAS;AAAA,KAClD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAsC;AAClE,IAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,IAAA,MAAM,QAAA,GAAY,IAAI,gBAAA,IAAmD;AAAA,MACvE,iBAAA,EAAmB,EAAA;AAAA,MACnB,kBAAA,EAAoB;AAAA,KACtB;AACA,IAAA,GAAA,CAAI,gBAAA,GAAmB,QAAA;AACvB,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAsB;AAChD,IAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,EAAO,UAAA;AACrC,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,GAChC,eAAA,GACA,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAC7B,IAAA,CAAK,UAAA,GACL,EAAC;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,OAAA,GAA8B;AAAA,IAClC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,KAAA,EAAO,SAAA;AAAA,IACP,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,YAAA,EAAc,MAAA;AAAA,IACd,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAA,EAAa,MAAA;AAAA,IACb,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,cAAA,EAAgB,WAAW,iBAAA,EAAkB;AAAA,IAC7C,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,cAAA,EAAgB,aAAA,GAAgB,EAAE,OAAA,EAAS,eAAc,GAAI;AAAA,GAC/D;AACA,EAAA,MAAM,sBAAA,GAAyB,gCAAgC,IAAI,CAAA;AAEnE,EAAA,eAAe,OAAA,CACb,OAAA,EACA,MAAA,EACA,IAAA,EACqB;AACrB,IAAA,IAAI,KAAA,GAAQ,MAAM,QAAA,CAAS,OAAO,CAAA;AAClC,IAAA,IAAI,KAAA,CAAM,KAAK,QAAA,EAAU;AACvB,MAAA,MAAM,OAAA,GAAU,EAAE,GAAG,KAAA,CAAM,GAAA,EAAI;AAC/B,MAAA,OAAO,OAAA,CAAQ,QAAA;AACf,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA,EAAU;AAAA,IACjF;AACA,IAAA,IAAI,WAAA,GAA8B,IAAA;AAClC,IAAA,IAAI,KAAA,CAAM,KAAK,aAAA,EAAe;AAC5B,MAAA,MAAM,OAAA,GAAU,EAAE,GAAG,KAAA,CAAM,GAAA,EAAI;AAC/B,MAAA,IAAI,OAAA,CAAQ,kBAAkB,OAAA,EAAS;AACrC,QAAA,WAAA,GAAc,OAAA;AAAA,MAChB;AACA,MAAA,OAAO,OAAA,CAAQ,aAAA;AACf,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,MAAA,EAAU;AAAA,IACjF;AAEA,IAAA,IAAI,2BAA2B,MAAA,EAAW;AACxC,MAAA,KAAA,GAAQ,wBAAwB,KAAK,CAAA;AAAA,IACvC;AAMA,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAM,MAAW,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACxC,MAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,QAAA,GAAA,CAAI,cAAc,iBAAA,CAAkB,MAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,OAAO,GAAA,CAAI,WAAA;AAAA,MACb;AACA,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,MAAA,EAAU;AAAA,IACzE;AACA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,GAAI,IAAA,CAAK,MAAA,IAAU,EAAC;AAAA,MACpB,GAAK,MAAA,EAAQ,MAAA,IAAU;AAAC,KAC1B;AAEA,IAAA,MAAM,YAAA,GAAgB,YAAA,EAAc,YAAA,KAAiB,MAAA,GAAa,KAAK,YAAA,EAAc,YAAA;AACrF,IAAA,MAAM,cAAA,GAAiB,iBAAiB,QAAA,GAAW,GAAA,GAAM,KAAK,GAAA,CAAI,YAAA,GAAe,CAAA,GAAI,EAAA,EAAI,EAAE,CAAA;AAC3F,IAAA,MAAM,cAAA,GAAiB,KAAK,GAAA,EAAI;AAGhC,IAAA,MAAM,iBAAiB,YAAA,EAAc,cAAA,IAAkB,aAAa,cAAA,GAAiB,CAAA,GAAI,aAAa,cAAA,GAAiB,MAAA;AACvH,IAAA,MAAM,uBAAuB,YAAA,EAAc,oBAAA,IAAwB,aAAa,oBAAA,GAAuB,CAAA,GAAI,aAAa,oBAAA,GAAuB,MAAA;AAC/I,IAAA,MAAM,aAAa,YAAA,EAAc,UAAA,IAAc,aAAa,UAAA,GAAa,CAAA,GAAI,aAAa,UAAA,GAAa,MAAA;AACvG,IAAA,MAAM,gBAAiB,IAAA,CAAa,aAAA;AACpC,IAAA,MAAM,sBAAsB,MAAgE;AAC1F,MAAA,IAAI,cAAA,IAAkB,IAAA,CAAK,GAAA,EAAI,GAAI,iBAAiB,cAAA,EAAgB;AAClE,QAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,CAAA,gBAAA,EAAmB,cAAc,CAAA,YAAA,CAAA,EAAe;AAAA,MACnF;AACA,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,MAAM,MAAA,GAAU,MAAc,KAAA,EAAO,MAAA;AACrC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,IAAI,SAAA,GAAY,CAAA;AAChB,UAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,CAAO,MAAM,GAAG,SAAA,IAAa,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,IAAK,CAAA;AACzE,UAAA,IAAI,YAAY,oBAAA,EAAsB;AACpC,YAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,CAAA,sBAAA,EAAyB,oBAAoB,CAAA,UAAA,CAAA,EAAa;AAAA,UAC7F;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,QAAA,MAAM,UAAA,GAAc,MAAc,KAAA,EAAO,UAAA;AACzC,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,IAAI,IAAA,GAAO,CAAA;AACX,UAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,YAAA,IAAA,IAAQ,aAAA,CAAc;AAAA,cACpB,WAAW,CAAA,CAAE,SAAA;AAAA,cACb,WAAA,EAAa,MAAA,CAAO,CAAA,CAAE,KAAA,EAAO,aAAa,CAAA,IAAK,CAAA;AAAA,cAC/C,YAAA,EAAc,MAAA,CAAO,CAAA,CAAE,KAAA,EAAO,iBAAiB,CAAA,IAAK,CAAA;AAAA,cACpD,mBAAmB,MAAA,CAAO,CAAA,CAAE,KAAA,EAAO,qBAAA,EAAuB,aAAa,CAAA,IAAK,CAAA;AAAA,cAC5E,iBAAiB,MAAA,CAAO,CAAA,CAAE,KAAA,EAAO,yBAAA,EAA2B,gBAAgB,CAAA,IAAK;AAAA,aAClF,CAAA,IAAK,CAAA;AAAA,UACR;AACA,UAAA,IAAI,OAAO,UAAA,EAAY;AACrB,YAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,CAAA,aAAA,EAAgB,UAAU,CAAA,qBAAA,EAAwB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,EAAI;AAAA,UACxG;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,EAAE,UAAU,KAAA,EAAM;AAAA,IAC3B,CAAA;AACA,IAAA,IAAI,UAAA,GAAa,CAAA;AAGjB,IAAA,IAAI,kBAAA,GAAqB,CAAA;AACzB,IAAA,MAAM,gBAAgB,MAAA,EAAQ,aAAA;AAC9B,IAAA,MAAM,mBAAmB,MAAA,EAAQ,gBAAA;AACjC,IAAA,IAAI,WAAA,GAA6B,IAAA;AAEjC,IAAA,MAAM,UAAA,GAAc,MAAM,GAAA,EAAa,YAAA;AAEvC,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAM,GAAA,GAAW,KAAA,CAAM,GAAA,IAAO,EAAC;AAC/B,MAAA,MAAM,QAAQ,GAAA,CAAI,mBAAA;AAClB,MAAA,MAAM,SAAS,GAAA,CAAI,aAAA;AACnB,MAAA,MAAM,WAAW,GAAA,CAAI,UAAA;AACrB,MAAA,IAAI,QAAQ,OAAA,EAAS,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,SAAA,EAAU;AACjE,MAAA,IAAI,KAAA,IAAS,MAAM,uBAAA,EAAyB,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAQ,WAAA,EAAY;AAC1F,MAAA,IAAI,QAAA,IAAY,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA,SAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAU;AACnF,MAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAU;AAAA,IAC/C,CAAA;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAkB;AAC3C,MAAA,MAAM,SAAS,WAAA,EAAY;AAC3B,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,EAAW,OAAO,KAAA;AAC9B,MAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,MAAA,GAAA,CAAI,WAAA,GAAc,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,EAAE;AACtF,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,MAAA,IAAA,GAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAO,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAC1D,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,MAAA,EAAQ,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO,EAAG,CAAA;AAC/E,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAkB;AAC/C,MAAA,IAAI,OAAO,aAAA,KAAkB,UAAA,EAAY,OAAO,KAAA;AAChD,MAAA,IAAI,MAAA,GAAS,KAAA;AACb,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,cAAc,KAAK,CAAA;AAAA,MAC9B,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,IAAA,CAAK,6CAA6C,GAAG,CAAA;AAC7D,QAAA,MAAA,GAAS,KAAA;AAAA,MACX;AACA,MAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,MAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,MAAA,GAAA,CAAI,QAAA,GAAW;AAAA,QACb,KAAA;AAAA,QACA,SAAA,EAAW,UAAA;AAAA,QACX,MAAA,EAAQ,gBAAA;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACpC;AACA,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,MAAA,WAAA,GAAc,KAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAKA,IAAA,IACE,WAAA,IACA,iBAAA,EAAmB,UAAA,CAAW,OAAA,IAC9B,iBAAA,CAAkB,UAAA,CAAW,OAAA,KAAY,yBAAA,IACzC,WAAA,KAAgB,IAAA,IAChB,CAAC,KAAA,CAAM,GAAA,EAAK,kBAAA,IACZ,CAAC,KAAA,CAAM,GAAA,EAAK,sBAAA,IACZ,CAAE,KAAA,CAAM,QAAA,CAAmB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,EAAG,IAAA,KAAS,WAAW,CAAA,EAC9D;AACA,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,KAAA,EAAc,yBAAyB,CAAA;AACvE,QAAA,IAAI,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1C,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAG,KAAA,EAAM;AAC7B,UAAA,kBAAA,EAAA;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,OAAO,aAAa,cAAA,EAAgB;AAClC,MAAA,UAAA,EAAA;AAGA,MAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,IAAA,GAAO,EAAE,IAAA,EAAM,UAAA,EAAY,aAAA,EAAe,MAAA,CAAO,QAAQ,CAAA;AACzD,QAAA,MAAM,GAAA,GAAM,EAAE,GAAI,KAAA,CAAM,OAAO,EAAC,EAAI,eAAA,EAAiB,MAAA,CAAO,MAAA,EAAO;AACnE,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,YAAA,GAAe,MAAM,GAAA,EAAK,cAAA;AAChC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,SAAA,GAAY,iBAAiB,YAAA,EAAc;AAAA,UAC/C,IAAA,EAAM,iBAAA;AAAA,UACN,KAAA,EAAO,aAAa,UAAU,CAAA,CAAA;AAAA,UAC9B,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,IAAQ,OAAA,EAAS,IAAA,EAAM,cAAA,EAAe;AAAA,UAC1E,cAAc,YAAA,CAAa;AAAA,SAC5B,CAAA;AAED,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,YAAA,CAAa,yBAAyB,SAAA,CAAU,MAAA;AAAA,QAClD;AAAA,MACF;AAEA,MAAA,IAAI,iBAAA,CAAkB,MAAM,CAAA,EAAG;AAE/B,MAAA,MAAM,gBAAgB,WAAA,KAAgB,OAAA;AACtC,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,IAAI,iBAAA,CAAkB,mBAAmB,CAAA,EAAG;AAC5C,QAAA,IAAI,qBAAA,CAAsB,mBAAmB,CAAA,EAAG;AAEhD,QAAA,MAAM,aAAA,GAAgB,mBAAmB,KAAK,CAAA;AAC9C,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,KAAA,GAAQ,qBAAqB,KAAK,CAAA;AACxC,UAAA,IAAI,KAAA,CAAM,iBAAA,KAAsB,KAAA,CAAM,QAAA,CAAS,MAAA,EAAQ;AACrD,YAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,CAAmB;AAAA,cACvC,UAAA,EAAY,aAAA;AAAA,cACZ,KAAA,EAAA,SAAA;AAAA,cACA,KAAA;AAAA,cACA,OAAA,EAAS,MAAM,KAAA,IAAS,OAAA;AAAA,cACxB,OAAA,EAAS,IAAA;AAAA,cACT;AAAA,aACD,CAAA;AACD,YAAA,KAAA,CAAM,iBAAA,GAAoB,MAAM,QAAA,CAAS,MAAA;AACzC,YAAA,KAAA,CAAM,eAAA,GAAkB,sBAAA,CAAuB,KAAA,CAAM,eAAA,EAAiB,OAAO,CAAA;AAC7E,YAAA,MAAM,QAAA,GAAW,QAAQ,SAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAa,QAAA,CAAS,gBAAgB,OAAO,CAAA;AACtF,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,MAAM,YAAA,GAAoB;AAAA,gBACxB,IAAA,EAAM,WAAA;AAAA,gBACN,IAAA,EAAM,WAAA;AAAA,gBACN,OAAA,EAAS,SAAS,MAAA,IAAU,sCAAA;AAAA,gBAC5B,QAAA,EAAU;AAAA,kBACR,SAAA,EAAW;AAAA,oBACT,KAAA,EAAA,SAAA;AAAA,oBACA,WAAW,OAAA,CAAQ;AAAA;AACrB;AACF,eACF;AACA,cAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,CAAC,GAAG,KAAA,CAAM,QAAA,EAAU,YAAY,CAAA,EAAE;AAChE,cAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,cAAC,IAAY,kBAAA,GAAqB;AAAA,gBAChC,KAAA,EAAA,SAAA;AAAA,gBACA,QAAA,EAAU;AAAA,eACZ;AACA,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAKA,QAAA,IAAI,2BAA2B,MAAA,EAAW;AACxC,UAAA,MAAM,OAAA,GAAU,yBAAA,CAA0B,KAAA,EAAO,sBAAsB,CAAA;AACvE,UAAA,IAAI,YAAY,SAAA,EAAW;AACzB,YAAA,MAAM,GAAA,GAAM,EAAE,GAAI,KAAA,CAAM,OAAO,EAAC,EAAI,sBAAsB,IAAA,EAAK;AAC/D,YAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,YAAA;AAAA,UACF;AAAA,QACF;AAGE,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,kBAAkB,CAAA;AAC1D,QAAA,IAAI,iBAAA,CAAkB,cAAc,CAAA,EAAG;AACvC,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,QAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,2BAA2B,CAAA;AAEvE,QAAA,IAAI,qBAAA,CAAsB,aAAa,CAAA,EAAG;AAExC,QAAA,MAAM,cAAA,GAAiB,mBAAmB,KAAK,CAAA;AAC/C,QAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,UAAA,MAAM,KAAA,GAAQ,qBAAqB,KAAK,CAAA;AACxC,UAAA,IAAI,KAAA,CAAM,kBAAA,KAAuB,KAAA,CAAM,QAAA,CAAS,MAAA,EAAQ;AACtD,YAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,CAAmB;AAAA,cACvC,UAAA,EAAY,cAAA;AAAA,cACZ,KAAA,EAAA,UAAA;AAAA,cACA,KAAA;AAAA,cACA,OAAA,EAAS,MAAM,KAAA,IAAS,OAAA;AAAA,cACxB,OAAA,EAAS,IAAA;AAAA,cACT;AAAA,aACD,CAAA;AACD,YAAA,KAAA,CAAM,kBAAA,GAAqB,MAAM,QAAA,CAAS,MAAA;AAC1C,YAAA,KAAA,CAAM,eAAA,GAAkB,sBAAA,CAAuB,KAAA,CAAM,eAAA,EAAiB,OAAO,CAAA;AAC7E,YAAA,MAAM,QAAA,GAAW,QAAQ,SAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAa,QAAA,CAAS,gBAAgB,OAAO,CAAA;AACtF,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,MAAM,eAAA,GAAkB,CAAC,GAAG,KAAA,CAAM,QAAQ,CAAA;AAC1C,cAAA,MAAM,QAAA,GAAW,gBAAgB,GAAA,EAAI;AACrC,cAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,gBACnB,IAAA,EAAM,WAAA;AAAA,gBACN,IAAA,EAAM,WAAA;AAAA,gBACN,OAAA,EAAS,SAAS,MAAA,IAAU,uCAAA;AAAA,gBAC5B,QAAA,EAAU;AAAA,kBACR,SAAA,EAAW;AAAA,oBACT,KAAA,EAAA,UAAA;AAAA,oBACA,WAAW,OAAA,CAAQ,SAAA;AAAA,oBACnB;AAAA;AACF;AACF,eACM,CAAA;AACR,cAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,eAAA,EAAgB;AAC9C,cAAA,MAAM,GAAA,GAAO,KAAA,CAAM,GAAA,GAAM,KAAA,CAAM,OAAO,EAAC;AACvC,cAAC,IAAY,kBAAA,GAAqB;AAAA,gBAChC,KAAA,EAAA,UAAA;AAAA,gBACA,QAAA,EAAU,QAAA;AAAA,gBACV;AAAA,eACF;AACA,cAAA;AAAA,YACF,CAAA,MAAA,IAAW,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACvC,cAAA,MAAM,OAAO,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AACrD,cAAA,IAAI,IAAA,EAAM;AACR,gBAAA,IAAA,CAAK,QAAA,GAAW;AAAA,kBACd,GAAI,IAAA,CAAK,QAAA,IAAY,EAAC;AAAA,kBACtB,SAAA,EAAW;AAAA,oBACT,KAAA,EAAA,UAAA;AAAA,oBACA,WAAW,OAAA,CAAQ;AAAA;AACrB,iBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,WAAA,GAAc,IAAA;AAAA,MAChB;AAEA,MAAA,MAAM,UAAe,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAC7D,MAAA,MAAM,SAAA,GAAmB,MAAM,OAAA,CAAQ,OAAA,EAAS,UAAU,CAAA,GAAI,OAAA,CAAQ,aAAa,EAAC;AACpF,MAAA,MAAM,aAAA,GAAgB,MAAM,aAAA,IAAiB,CAAA;AAG7C,MAAA,IAAI,KAAA,CAAM,KAAK,yBAAA,EAA2B;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,aAAA,IAAiB,YAAA,IAAgB,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACzD,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,YAAA,CAAa,KAAK,CAAA,EAAG;AAEnD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,QAAA,IACE,SAAA,IACA,CAAE,KAAA,CAAc,GAAA,EAAK,oCACrB,CAAE,KAAA,CAAc,KAAK,+BAAA,EACrB;AAMA,UAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAA,KAAS,QAAA,EAAU;AACxC,YAAA,MAAM,aAAA,GAAgB,mBAAmB,OAAO,CAAA;AAChD,YAAA,IAAI,aAAA,EAAe;AACjB,cAAA,MAAM,MAAA,GAAS,SAAA,CAAU,gBAAA,CAAiB,aAAa,CAAA;AACvD,cAAA,IAAI,OAAO,OAAA,EAAS;AAClB,gBAAA,MAAMC,IAAAA,GAAM;AAAA,kBACV,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC;AAAA,kBAClB,gCAAA,EAAkC,IAAA;AAAA,kBAClC,0BAA0B,MAAA,CAAO;AAAA,iBACnC;AACA,gBAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAAA,IAAAA,EAAI;AAAA,cAC1B;AAAA,YACF;AAGA,YAAA;AAAA,UACF;AAKA,UAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,iBAAA,CAAkB,KAAK,CAAA;AAC/C,UAAA,MAAM,GAAA,GAAM,EAAE,GAAI,KAAA,CAAM,OAAO,EAAC,EAAI,iCAAiC,IAAA,EAAK;AAC1E,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,CAAC,GAAG,KAAA,CAAM,QAAA,EAAU,KAAY,CAAA,EAAG,GAAA,EAAI;AACrE,UAAA;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAGA,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,iBAAiB,CAAA;AACzD,MAAA,IAAI,iBAAA,CAAkB,cAAc,CAAA,EAAG;AACvC,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,MAAA,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,kBAAkB,CAAA;AAC1D,MAAA,IAAI,KAAA,CAAM,KAAK,kBAAA,EAAoB;AACnC,MAAA,IAAI,KAAA,CAAM,KAAK,sBAAA,EAAwB;AACvC,MAAA,IAAI,qBAAA,CAAsB,aAAa,CAAA,EAAG;AAC1C,MAAA,IAAI,KAAA,CAAM,KAAK,gCAAA,EAAkC;AAKjD,MAAA,IAAI,WAAA,IAAe,iBAAA,EAAmB,UAAA,CAAW,OAAA,EAAS;AACxD,QAAA,MAAM,OAAA,GAAU,kBAAkB,UAAA,CAAW,OAAA;AAC7C,QAAA,MAAM,OAAO,iBAAA,CAAkB,UAAA;AAK/B,QAAA,MAAM,WAAa,KAAA,CAAc,WAAA,EAAa,EAAA,CAAG,EAAE,GAAG,IAAA,IAAQ,CAAA,QAAA;AAC9D,QAAA,MAAM,WAAA,GAAc,MAAM,aAAA,IAAiB,CAAA;AAC3C,QAAA,MAAM,iBAAiB,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA,IAAY,sBAAsB,IAAA,CAAK,SAAA;AACxF,QAAA,MAAM,SAAA,GAAY,eAAe,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,IAAA,CAAK,WAAA,CAAA;AAC9E,QAAA,MAAM,UAAA,GAAa,YAAY,IAAA,CAAK,WAAA;AAGpC,QAAA,MAAM,cAAA,GAAiB,KAAK,aAAA,GACxB,CAAC,CAAC,IAAA,CAAK,aAAA,CAAc,EAAE,KAAA,EAAqB,IAAA,EAAM,aAAa,OAAA,EAAS,OAAA,EAAS,kBAAkB,IAAA,EAAM,IACzG,mBAAA,CAAoB,OAAA,EAAS,OAAc,IAAI,CAAA;AACnD,QAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,UAAA,IAAc,cAAA,EAAgB;AACpD,UAAA,IAAI;AACF,YAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,KAAA,EAAc,OAAO,CAAA;AACrD,YAAA,IAAI,SAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1C,cAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAG,KAAA,EAAM;AAC7B,cAAA,kBAAA,EAAA;AAAA,YACF;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAOA,IAAA,IAAI,SAAA,IAAa,CAAE,KAAA,CAAc,GAAA,EAAK,gCAAA,EAAkC;AACtE,MAAA,MAAM,eAAoB,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAClE,MAAA,IAAI,YAAA,EAAc,SAAS,WAAA,EAAa;AACtC,QAAA,MAAM,aAAA,GAAgB,mBAAmB,YAAY,CAAA;AACrD,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,MAAM,MAAA,GAAS,SAAA,CAAU,gBAAA,CAAiB,aAAa,CAAA;AACvD,UAAA,IAAI,OAAO,OAAA,EAAS;AAClB,YAAA,MAAM,GAAA,GAAM;AAAA,cACV,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC;AAAA,cAClB,gCAAA,EAAkC,IAAA;AAAA,cAClC,0BAA0B,MAAA,CAAO;AAAA,aACnC;AACA,YAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IACE,SAAA,IACA,UAAU,QAAA,CAAS,IAAA,KAAS,gBAC5B,CAAE,KAAA,CAAc,KAAK,gCAAA,EACrB;AACA,MAAA,MAAM,qBAAqB,SAAA,CAAU,UAAA;AACrC,MAAA,KAAA,IAAS,SAAA,GAAY,CAAA,EAAG,SAAA,GAAY,kBAAA,EAAoB,SAAA,EAAA,EAAa;AACnE,QAAA,IAAK,KAAA,CAAc,KAAK,gCAAA,EAAkC;AAE1D,QAAA,MAAM,OAAY,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAC1D,QAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,CAAQ,IAAA,EAAM,UAAU,CAAA,IAAK,IAAA,CAAK,WAAW,MAAA,GAAS,CAAA;AAErF,QAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,UAAA,MAAM,aAAA,GAAgB,cAAc,kBAAA,GAAqB,CAAA;AACzD,UAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,iBAAA,CAAkB,aAAa,CAAA;AACvD,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,CAAC,GAAG,KAAA,CAAM,QAAA,EAAU,KAAY,CAAA,EAAE;AAAA,QAClE;AAEA,QAAA,IAAI;AACF,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAChD,UAAA,MAAM,YAAiB,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAC/D,UAAA,MAAM,cAAA,GAAwB,MAAM,OAAA,CAAQ,SAAA,EAAW,UAAU,CAAA,GAAI,SAAA,CAAU,aAAa,EAAC;AAC7F,UAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,YAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAI,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG;AAAA,UAClD;AAAA,QACF,SAAS,GAAA,EAAc;AACrB,UAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,UAAA,IAAA,GAAO,EAAE,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA,yCAAA,EAA4C,MAAM,IAAI,CAAA;AACxF,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAK,KAAA,CAAc,GAAA,EAAK,oBAAA,IAAwB,CAAE,MAAc,aAAA,EAAe;AAC7E,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAOA,IAAA,MAAM,gBAAgB,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAC9D,IAAA,IAAI,aAAA,EAAe,IAAA,KAAS,MAAA,IAAU,CAAC,WAAA,EAAa;AAClD,MAAA,MAAM,cAAA,GACJ,MAAM,GAAA,EAAK,kBAAA,IACX,MAAM,GAAA,EAAK,sBAAA,IACX,MAAM,GAAA,EAAK,WAAA,IACX,MAAM,GAAA,EAAK,gCAAA,IACX,MAAM,GAAA,EAAK,yBAAA,IACX,MAAM,GAAA,EAAK,oBAAA,IACX,MAAM,GAAA,EAAK,eAAA;AACb,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SAEF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,WAAA,IAAe,OAAO,kBAAkB,UAAA,IAAc,aAAA,CAAc,KAAK,CAAA,EAAG;AAC/E,MAAA,qBAAA,CAAsB,YAAY,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,KAAA,EAAmB,MAAA,KAA+D;AAI3G,IAAA,MAAM,mBAAoB,IAAA,CAAa,YAAA;AACvC,IAAA,IAAI,gBAAA,EAAkB;AAEpB,MAAA,MAAM,EAAE,eAAA,EAAAC,gBAAAA,EAAgB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,eAAA,EAAA,EAAA,kBAAA,CAAA,CAAA;AAClC,MAAAA,iBAAgB,gBAAgB,CAAA;AAAA,IAClC;AACA,IAAA,MAAM,gBAAgB,MAAA,EAAQ,OAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,iBAAA,GACZ,CAAC,KAAA,KAA2B;AAC1B,MAAA,IAAI,KAAA,IAAU,KAAA,CAAc,IAAA,KAAS,eAAA,EAAiB;AACpD,QAAA,IAAI;AAAE,UAAA,iBAAA,CAAkB,KAAY,CAAA;AAAA,QAAG,SAAS,GAAA,EAAK;AAAE,UAAA,OAAA,CAAQ,IAAA,CAAK,wDAAwD,GAAG,CAAA;AAAA,QAAG;AAAA,MACpI;AACA,MAAA,aAAA,GAAgB,KAAK,CAAA;AAAA,IACvB,CAAA,GACA,aAAA;AACJ,IAAA,MAAM,aAAa,MAAA,EAAQ,UAAA;AAC3B,IAAA,MAAM,WAAW,MAAA,EAAQ,QAAA;AACzB,IAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,KAAW,IAAA;AACzC,IAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAuB;AAAE,MAAA,IAAI;AAAE,QAAA,OAAA,GAAU,CAAC,CAAA;AAAA,MAAG,SAAS,GAAA,EAAK;AAAE,QAAA,OAAA,CAAQ,IAAA,CAAK,uCAAuC,GAAG,CAAA;AAAA,MAAG;AAAA,IAAE,CAAA;AACvI,IAAA,MAAM,YAAA,GAAe,CAAC,QAAA,KAAmF;AACvG,MAAA,IAAI;AAAE,QAAA,UAAA,GAAa,QAAQ,CAAA;AAAA,MAAG,SAAS,GAAA,EAAK;AAAE,QAAA,OAAA,CAAQ,IAAA,CAAK,0CAA0C,GAAG,CAAA;AAAA,MAAG;AAC3G,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,GAAG,UAAU,CAAA;AAAA,IACxC,CAAA;AACA,IAAA,MAAM,YAAA,GAAe,mBAAmB,IAAI,CAAA;AAE5C,IAAA,MAAM,GAAA,GAA2B;AAAA,MAC/B,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC;AAAA,MAClB,SAAA,EAAW,OAAA;AAAA,MACX,YAAA,EAAc,YAAA;AAAA,MACd,UAAA,EAAY,QAAA;AAAA,MACZ,WAAA,EAAa;AAAA,KACf;AACA,IAAA,IAAI,YAAA,MAAkB,cAAA,GAAiB,YAAA;AACvC,IAAA,IAAI,MAAA,EAAQ,iBAAA,EAAmB,GAAA,CAAI,mBAAA,GAAsB,MAAA,CAAO,iBAAA;AAChE,IAAA,IAAK,MAAA,EAAQ,iBAAA,EAA+C,OAAA,KAAY,MAAA,EAAW;AACjF,MAAA,GAAA,CAAI,gBAAgB,MAAA,EAAQ,iBAAA;AAAA,IAC9B;AACA,IAAA,IAAI,MAAA,EAAQ,SAAA,IAAa,MAAA,CAAO,SAAA,GAAY,CAAA,EAAG;AAC7C,MAAA,GAAA,CAAI,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,SAAA;AAAA,IACvC;AAEA,IAAA,MAAM,0BAA8C,MAAA,EAAQ,MAAA,GACxD,EAAE,GAAG,SAAS,MAAA,EAAQ,EAAE,GAAI,OAAA,CAAQ,UAAU,EAAC,EAAI,GAAG,MAAA,CAAO,MAAA,IAAS,GACtE,OAAA;AAEJ,IAAA,MAAM,OAAA,GAAsB;AAAA,MAC1B,QAAA,EAAU,KAAA,CAAM,QAAA,IAAY,EAAC;AAAA,MAC7B,aAAA,EAAe,MAAM,aAAA,IAAiB,CAAA;AAAA,MACtC,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa,EAAC;AAAA,MAC/B,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,MACnC,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,GAAA;AAAA,MACA,gBAAA,EAAkB,KAAA,CAAM,gBAAA,IAAoB,EAAC;AAAA,MAC7C,oBAAA,EAAsB,KAAA,CAAM,oBAAA,IAAwB,EAAC;AAAA,MACrD,KAAA,EAAO,MAAM,KAAA,IAAS,uBAAA;AAAA,MACtB,KAAA,EAAO,MAAM,KAAA,IAAS,EAAE,YAAY,EAAC,EAAG,MAAA,EAAQ,EAAC;AAAE,KACrD;AAEA,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,qBAAA,CAAsB,cAAc,uBAAuB,CAAA;AACjE,MAAA,GAAA,GAAM,MAAM,OAAA,CAAQ,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAAA,IAC3C,SAAS,GAAA,EAAU;AACjB,MAAA,MAAM,qBAAqB,YAAA,EAAc;AAAA,QACvC,YAAA,EAAc,OAAA;AAAA,QACd,MAAA,EAAQ,OAAA;AAAA,QACR,OAAO,EAAE,OAAA,EAAS,KAAK,OAAA,EAAS,KAAA,EAAO,KAAK,KAAA;AAAM,OACnD,CAAA;AACD,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,MAAM,EAAE,eAAA,EAAAA,gBAAAA,EAAgB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,eAAA,EAAA,EAAA,kBAAA,CAAA,CAAA;AAClC,QAAAA,iBAAgB,MAAS,CAAA;AAAA,MAC3B;AACA,MAAA,MAAM,GAAA;AAAA,IACR,CAAA,SAAE;AAGA,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,EAAE,eAAA,EAAAA,gBAAAA,EAAgB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,eAAA,EAAA,EAAA,kBAAA,CAAA,CAAA;AAClC,UAAAA,iBAAgB,KAAA,CAAS,CAAA;AAAA,QAC3B,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,qBAAqB,YAAA,EAAc;AAAA,MACvC,YAAA,EAAc,IAAI,KAAA,IAAS,OAAA;AAAA,MAC3B,MAAA,EAAQ;AAAA,KACT,CAAA;AASD,IAAA,MAAM,4BAAA,GAA+B,CAAC,CAAE,GAAA,CAAY,GAAA,EAAK,oBAAA;AACzD,IAAA,MAAM,iBAAA,GAAoB,4BAAA,GACtB,MAAA,GACA,uBAAA,CAAwB,IAAI,QAAQ,CAAA;AACxC,IAAA,MAAM,uBAAA,GAA0B,CAAC,4BAAA,IAC5B,iBAAA,IACA,0BAA0B,iBAAiB,CAAA;AAChD,IAAA,MAAM,OAAA,GAAW,4BAAA,IAAgC,uBAAA,GAC7C,EAAA,GACA,mBAAmB,iBAAiB,CAAA;AAExC,IAAA,IAAI,MAAA,GAA8B,MAAA;AAClC,IAAA,IAAI,WAAA,GAAiD,MAAA;AAErD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAK,GAAA,CAAY,KAAK,wBAAA,EAA0B;AAE9C,QAAA,MAAA,GAAU,IAAY,GAAA,CAAI,wBAAA;AAAA,MAC5B,WAAW,OAAA,EAAS;AAElB,QAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,gBAAA,CAAiB,OAAO,CAAA;AACzD,QAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,UAAA,MAAA,GAAS,cAAA,CAAe,IAAA;AAAA,QAC1B,CAAA,MAAO;AACL,UAAA,WAAA,GAAc,cAAA,CAAe,KAAA;AAAA,QAC/B;AAAA,MACF,CAAA,MAAA,IAAW,CAAC,4BAAA,EAA8B;AAExC,QAAA,MAAM,QAAA,GAAW,SAAA,CAAU,cAAA,CAAe,CAAC,CAAA;AAC3C,QAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,UAAA,WAAA,GAAc,QAAA,CAAS,KAAA;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAKA,IAAA,IAAI,CAAC,4BAAA,IAAgC,CAAC,uBAAA,EAAyB;AAC7D,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,CAAA;AACrC,MAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,QAAA,QAAA,GAAW,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,MAAM,CAAA;AAC3C,QAAA,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA,EAAS,OAAA,EAAS,MAAM,CAAA;AAAA,MACvD;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR,WAAA;AAAA,MACA,QAAA,EAAU,EAAE,KAAA,EAAQ,GAAA,CAAY,KAAA,EAAM;AAAA,MACtC,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,KAAA,EAAO;AAAA,KACT;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,CAAC,KAAA,EAAmB,OAAA,KAA8B,eAAA,CAAgB,OAAO,OAAO,CAAA;AAEtG,EAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAyB,MAAA,EAAuB,cAAA,KAA4C;AACrH,IAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,QAAA,EAAU,cAAc,CAAA;AAC9D,IAAA,OAAO,WAAA,CAAY,eAAe,MAAM,CAAA;AAAA,EAC1C,CAAA;AAEA,EAAA,MAAM,sBAAsB,CAAC,KAAA,EAAmB,UAAA,KAC9C,wBAAA,CAAyB,OAAO,UAAU,CAAA;AAE5C,EAAA,MAAM,sBAAsB,CAAC,KAAA,EAAmB,UAAA,KAC9C,wBAAA,CAAyB,OAAO,UAAU,CAAA;AAE5C,EAAA,MAAM,QAAA,GAAmC;AAAA,IACvC,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU,aAAA;AAAA,IACV,MAAA,EAAQ,WAAA;AAAA,IACR,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAQ,CAAC,EAAE,QAAA,EAAU,WAAA,EAAa,kBAAiB,KAA6E;AAC9H,MAAA,MAAM,MAAA,GAASvB,KAAAA,CAAE,MAAA,CAAO,EAAE,KAAA,EAAOA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,gBAAA,IAAoB,2BAA2B,CAAA,EAAG,CAAA;AACvG,MAAA,MAAM,gBAAqB,UAAA,CAAW;AAAA,QACpC,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,WAAA,IAAe,CAAA,uBAAA,EAA0B,IAAA,CAAK,QAAQ,OAAO,CAAA,CAAA;AAAA,QAC1E,MAAA;AAAA,QACA,IAAA,EAAM,OAAO,EAAE,KAAA,EAAM,KAAM;AAGzB,UAAA,MAAM,MAAW,aAAA,CAAc,SAAA;AAC/B,UAAA,MAAM,SAAA,GAAiB,GAAA,CAAI,GAAA,IAAO,EAAC;AACnC,UAAA,MAAM,cAAA,GAAwB,MAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,CAAI,WAAW,EAAC;AAC5E,UAAA,MAAM,gBAAqB,GAAA,CAAI,aAAA;AAG/B,UAAA,MAAM,aAAA,GAAgB,aAAA,EAAe,KAAA,IAAU,IAAA,CAAa,eAAA;AAC5D,UAAA,MAAM,gBAAA,GAAmB,eAAe,UAAA,IAAc;AAAA,YACpD,IAAA,EAAM,YAAA;AAAA,YACN,kBAAA,EAAoB,CAAA;AAAA,YACpB,aAAA,EAAe,CAAA;AAAA,YACf,kBAAA,EAAoB;AAAA,WACtB;AACA,UAAA,MAAM,YAAA,GAAe,MAAA,CAAO,SAAA,CAAU,iBAAiB,CAAA,IAAK,CAAA;AAC5D,UAAA,IAAI,gBAAA,CAAiB,SAAS,KAAA,EAAO;AACnC,YAAA,OAAO,EAAE,OAAO,wCAAA,EAAyC;AAAA,UAC3D;AACA,UAAA,IAAI,YAAA,IAAgB,iBAAiB,kBAAA,EAAoB;AACvD,YAAA,OAAO;AAAA,cACL,KAAA,EAAO,CAAA,gCAAA,EAAmC,gBAAA,CAAiB,kBAAkB,CAAA,wBAAA;AAAA,aAC/E;AAAA,UACF;AACA,UAAA,SAAA,CAAU,oBAAA,GAAA,CAAwB,SAAA,CAAU,oBAAA,IAAwB,CAAA,IAAK,CAAA;AACzE,UAAA,IAAI,SAAA,CAAU,oBAAA,GAAuB,gBAAA,CAAiB,aAAA,EAAe;AACnE,YAAA,OAAO;AAAA,cACL,KAAA,EAAO,CAAA,6BAAA,EAAgC,gBAAA,CAAiB,aAAa,CAAA,EAAA;AAAA,aACvE;AAAA,UACF;AAGA,UAAA,IAAI,aAAA;AACJ,UAAA,QAAQ,iBAAiB,kBAAA;AAAoB,YAC3C,KAAK,MAAA;AACH,cAAA,aAAA,GAAgB,CAAC,GAAG,cAAA,EAAgB,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,OAAc,CAAA;AAC3E,cAAA;AAAA,YACF,KAAK,QAAA,EAAU;AAEb,cAAA,MAAM,YAAA,GAAe,cAAA,CAAe,CAAC,CAAA,EAAG,IAAA,KAAS,QAAA,GAAW,CAAC,cAAA,CAAe,CAAC,CAAC,CAAA,GAAI,EAAC;AACnF,cAAA,MAAM,QAAA,GAAW,CAAC,GAAG,cAAc,CAAA,CAAE,OAAA,EAAQ,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,EAAG,IAAA,KAAS,MAAM,CAAA;AAC7E,cAAA,aAAA,GAAgB;AAAA,gBACd,GAAG,YAAA;AAAA,gBACH,GAAI,QAAA,GAAW,CAAC,QAAQ,IAAI,EAAC;AAAA,gBAC7B,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA;AAAM,eACjC;AACA,cAAA;AAAA,YACF;AAAA,YACA,KAAK,SAAA;AAAA,YACL;AACE,cAAA,aAAA,GAAgB,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAc,CAAA;AAAA;AAG5D,UAAA,MAAM,QAAA,GAAW,EAAE,iBAAA,EAAmB,YAAA,GAAe,CAAA,EAAE;AACvD,UAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,MAAA,CAAO,EAAE,QAAA,EAAU,aAAA,EAAe,GAAA,EAAK,QAAA,EAAiB,CAAA;AACnF,UAAA,OAAO;AAAA,YACL,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,QAAQ,GAAA,CAAI,MAAA;AAAA,YACZ,OAAA,EAAS,IAAI,KAAA,EAAO,SAAA,GAAY,IAAI,KAAA,CAAM,SAAA,CAAU,SAAS,CAAC;AAAA,WAChE;AAAA,QACF;AAAA,OACD,CAAA;AAID,MAAA,aAAA,CAAc,YAAY,EAAC;AAC3B,MAAA,OAAO,aAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAW,CAAC,EAAE,QAAA,EAAU,WAAA,EAAa,QAAO,KAAgG;AAC1I,MAAA,MAAM,SAAA,GAAY,QAAA,IAAY,CAAA,WAAA,EAAc,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAA;AACnE,MAAA,MAAM,OAAA,GAAU,MAAA,IAAUA,KAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,oBAAoB,CAAA,EAAG,CAAA;AACxF,MAAA,UAAA,CAAW;AAAA,QACT,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,WAAA,IAAe,CAAA,yBAAA,EAA4B,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAA;AAAA,QAC/E,MAAA,EAAQ,OAAA;AAAA,QACR,MAAM,OAAO,KAAA,MAAgB,EAAE,SAAA,EAAW,EAAE,SAAQ,EAAE;AAAA,OACvD,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,WAAA,EAAa,WAAA,IAAe,EAAA,EAAI,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAS;AAAA,IACnH,CAAA;AAAA,IACA,SAAA,EAAW;AAAA,GACb;AAEA,EAAA,IAAI,KAAK,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG;AACjD,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK;AAC1C,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,MAAA,IAAUA,KAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,oBAAoB,GAAG,CAAA;AAC7F,MAAA,OAAO,UAAA,CAAW;AAAA,QACZ,MAAM,CAAA,CAAE,QAAA;AAAA,QACR,WAAA,EAAa,EAAE,WAAA,IAAe,CAAA,WAAA,EAAc,EAAE,MAAA,CAAO,SAAA,CAAU,QAAQ,OAAO,CAAA,CAAA;AAAA,QAC9E,MAAA;AAAA,QACA,IAAA,EAAM,OAAO,KAAA,MAAgB,EAAE,SAAA,EAAW,EAAE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,SAAA,EAAU,EAAE;AAAA,OAC3E,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,QAAQ,CAAC,GAAG,OAAA,CAAQ,KAAA,EAAO,GAAG,YAAY,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,QAAA;AACT;;;AG78BO,SAAS,gBAAgB,IAAA,EAAyB;AACvD,EAAA,OAAO,OAAO,KAAA,KAAoD;AAEhE,IAAA,MAAM,OAAA,GAAU,MAAM,KAAA,IAAS;AAAA,MAC7B,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAA,EAAQ,IAAA,CAAK,KAAA,IAAiB,EAAC;AAAA,MAC/B,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAe,IAAA,CAAa;AAAA,KAC9B;AACA,IAAA,MAAM,KAAA,GAA8C,OAAA,CAAQ,KAAA,IAAiB,EAAC;AAC9E,IAAA,MAAM,cAAA,GAAkB,QAAQ,KAAA,EAAQ,SAAA,GACnC,QAAQ,KAAA,CAAO,SAAA,CAAU,KAAK,CAAA,GAC/B,OAAA,CAAQ,KAAA;AAEZ,IAAA,MAAM,oBAAA,GAAuB,QAAQ,YAAA,GACjC;AAAA,MACE,uCAAA;AAAA,MACA,gEAAA;AAAA,MACA,6HAAA;AAAA,MACA;AAAA,KACF,CAAE,IAAA,CAAK,IAAI,CAAA,GACX,EAAA;AAEJ,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,iBAAA;AAAA,QACP,CAAC,QAAQ,YAAA,EAAc,oBAAoB,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,QACtE,QAAQ,WAAA,KAAgB,IAAA;AAAA,QACxB,QAAQ,IAAA,IAAQ,OAAA;AAAA,QAChB,OAAA,CAAQ;AAAA;AACV,KACF;AACA,IAAA,MAAM,QAAA,GAAW,CAAC,SAAA,EAAW,GAAG,MAAM,QAAQ,CAAA;AAE9C,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AACzC,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,IAAQ,IAAA,CAAK,IAAA,IAAQ,OAAA;AAC/C,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,IAAW,IAAA,CAAK,OAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAW,GAAG,MAAM,QAAQ,CAAA;AACpD,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACtE,IAAA,MAAM,aAAA,GAAgB,eAAA,GAAkB,oBAAA,CAAqB,cAAc,CAAA,GAAI,MAAA;AAC/E,IAAA,MAAM,WAAA,GAAc,aAAA,KAAkB,MAAA,GAAY,oBAAA,CAAqB,aAAa,CAAA,GAAI,MAAA;AAExF,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,cAAA,CAAe,MAAA,CAAO,cAAc,CAAA;AAAA,IACvD,SAAS,GAAA,EAAU;AACjB,MAAA,MAAMa,WAAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO,iBAAA;AAAA,QACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,QACnF,MAAA,EAAQ,OAAA;AAAA,QACR,UAAA,EAAAA,WAAAA;AAAA,QACA,YAAA,EAAc,WAAA;AAAA,QACd,KAAA,EAAO,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACjE,QAAA,EAAU,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAAA,QACvE,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,IAAW,OAAO,GAAG,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAAA,QACjE,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,MAAM,oBAAA,GAAkC;AAAA,MACtC,GAAG,QAAA;AAAA,MACH;AAAA,KACF;AAGA,IAAA,MAAM,WAAY,QAAA,EAAkB,KAAA,IAC9B,UAAkB,cAAA,IAClB,QAAA,EAAkB,mBAAmB,WAAA,IACrC,QAAA,EAAkB,iBAAA,EAAmB,UAAA,IACrC,UAAkB,iBAAA,EAAmB,KAAA,IACrC,UAAkB,iBAAA,EAAmB,cAAA,IACrC,UAAkB,iBAAA,EAAmB,aAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,eAAe,QAAQ,CAAA;AAC1C,IAAA,MAAM,YAAY,YAAA,CAAc,OAAA,CAAgB,KAAA,IAAU,IAAA,CAAa,KAAK,CAAA,IAAK,eAAA;AACjF,IAAA,MAAM,YAAA,GAAe,eAAA,CAAiB,OAAA,CAAgB,KAAA,IAAU,KAAa,KAAK,CAAA;AAClF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAChC,IAAA,MAAM,iBAAA,GAAoB,CAAC,CAAC,YAAA,IAAgB,aAAa,cAAA,CAAe,OAAA;AACxE,IAAA,MAAM,eAAA,GAAkB,iBAAA,GAAoB,oBAAA,CAAqB,QAAQ,CAAA,GAAI,MAAA;AAC7E,IAAA,MAAM,aAAA,GAAgB,eAAA,KAAoB,MAAA,GAAY,oBAAA,CAAqB,eAAe,CAAA,GAAI,MAAA;AAE9F,IAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,MAC7B,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO,oBAAA;AAAA,MACP,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,MAAM,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,YAAA,EAAa;AAAA,MACnF,UAAA;AAAA,MACA,aAAa,UAAA,EAAY,aAAA;AAAA,MACzB,cAAc,UAAA,EAAY,iBAAA;AAAA,MAC1B,aAAa,UAAA,EAAY,YAAA;AAAA,MACzB,iBAAA,EAAmB,YAAY,qBAAA,EAAuB,aAAA;AAAA,MACtD,YAAA,EAAc,WAAA;AAAA,MACd,aAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACd,CAAA;AACD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,UAAA,GAAa,MAAM,KAAA,IAAS,EAAE,YAAY,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAC/D,MAAA,MAAM,EAAA,GAAK,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAClE,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAA;AAC5C,MAAA,MAAM,SAAA,GAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC7C,MAAA,MAAM,cAAA,GAAiB,WAAW,qBAAA,CAAsB,aAAA;AACpD,MAAA,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,EAAE,EAAA,EAAI,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,cAAA,EAAgB,CAAA;AAE7G,MAAA,MAAM,WAAW,UAAA,CAAW,aAAA;AAC5B,MAAA,MAAM,YAAY,UAAA,CAAW,iBAAA;AAC7B,MAAA,MAAM,WAAW,UAAA,CAAW,YAAA;AAChC,MAAA,MAAM,GAAA,GAAM,SAAA;AACR,MAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,IAAK,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,aAAa,CAAA,EAAE;AACtF,MAAA,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,QACvB,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAU,MAAA,CAAO,SAAS,CAAA,IAAK,CAAA,CAAA;AAAA,QAC3C,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAA,CAAA;AAAA,QACxC,WAAA,EAAa,GAAA,CAAI,WAAA,IAAe,MAAA,CAAO,cAAc,CAAA,IAAK,CAAA;AAAA,OAC5D;AAEA,MAAC,MAAc,KAAA,GAAQ,UAAA;AAAA,IACzB;AAEA,IAAA,OAAO,EAAE,QAAA,EAAU,oBAAA,EAAsB,KAAA,EAAQ,MAAc,KAAA,EAAM;AAAA,EACvE,CAAA;AACF;;;AC3HA,eAAA,EAAA;;;ACTA,eAAA,EAAA;AAGA,SAAS,kBAAA,CAAmB,UAAyB,eAAA,EAAwC;AAC3F,EAAA,IAAI,eAAA,IAAmB,CAAA,EAAG,OAAO,EAAC;AAClC,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,EAAS,UAAU,KAAA,KAAU,CAAA,IAAK,OAAA,CAAQ,IAAA,KAAS,QAAQ,CAAA;AACjG,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,QAAA,CAAS,MAAM,CAAC,CAAA,GAAI,CAAC,GAAG,QAAQ,CAAA;AAGvE,EAAA,MAAM,cAAA,GAAiB,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,CAAE,MAAA;AAO7D,EAAA,MAAM,sBAAsB,cAAA,GAAiB,eAAA;AAE7C,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,MAAM,YAA2B,EAAC;AAElC,EAAA,KAAA,IAAS,QAAQ,IAAA,CAAK,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACxD,IAAA,MAAM,OAAA,GAAU,KAAK,KAAK,CAAA;AAC1B,IAAA,SAAA,CAAU,QAAQ,OAAO,CAAA;AAEzB,IAAA,MAAM,iBAAiB,mBAAA,GACnB,OAAA,CAAQ,IAAA,KAAS,WAAA,GACjB,QAAQ,IAAA,KAAS,MAAA;AAErB,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,SAAA,IAAa,CAAA;AACb,MAAA,IAAI,aAAa,eAAA,EAAiB;AAAA,IACpC;AAAA,EACF;AAIA,EAAA,IAAI,mBAAA,IAAuB,UAAU,MAAA,GAAS,CAAA,IAAK,UAAU,CAAC,CAAA,CAAE,SAAS,MAAA,EAAQ;AAC/E,IAAA,MAAM,eAAe,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AACvD,IAAA,IAAI,YAAA,IAAgB,CAAC,SAAA,CAAU,QAAA,CAAS,YAAY,CAAA,EAAG;AACrD,MAAA,SAAA,CAAU,QAAQ,YAAY,CAAA;AAAA,IAChC;AAAA,EACF;AAEA,EAAA,OAAO,CAAC,GAAG,YAAA,EAAc,GAAG,SAAS,CAAA;AACvC;AAEO,SAAS,wBAAwB,OAAA,EAAgD;AACtF,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,CAAC,kBAAkB,CAAA;AACjC,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,YAAA,CAAa,IAAI,CAAC,IAAA,KAAS,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,EAAE,CAAC,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AACnC,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AACrC,IAAA,KAAA,CAAM,KAAK,iBAAiB,CAAA;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,OAAA,CAAQ,cAAA,CAAe,GAAA,CAAI,CAAC,QAAA,KAAa,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,CAAC,CAAA;AAAA,EACzE;AAGA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,kBAAkB,KAAA,EAAyC;AAClE,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,EAAA;AACzC,EAAA,OAAO;AAAA,IACL,mBAAA;AAAA,IACA,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,CAAE;AAAA,GACvD,CAAE,KAAK,IAAI,CAAA;AACb;AAEA,SAAS,aAAA,CAAc,UAAyB,gBAAA,EAAyC;AACvF,EAAA,IAAI,OAAA,GAAU,CAAC,GAAG,QAAQ,CAAA;AAE1B,EAAA,OAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,UAAA,GAAa,kBAAkB,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAC/E,IAAA,IAAI,UAAA,IAAc,kBAAkB,OAAO,OAAA;AAG3C,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,SAAA,CAAU,CAAC,OAAA,EAAS,KAAA,KAAU,EAAE,KAAA,KAAU,CAAA,IAAK,OAAA,CAAQ,IAAA,KAAS,QAAA,CAAS,CAAA;AACxG,IAAA,IAAI,iBAAiB,CAAA,EAAG;AAExB,IAAA,MAAM,MAAA,GAAS,QAAQ,cAAc,CAAA;AAMrC,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,IAAK,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACnG,MAAA,MAAM,cAAc,IAAI,GAAA;AAAA,QACtB,MAAA,CAAO,WAAW,GAAA,CAAI,CAAC,OAAY,EAAA,CAAG,EAAE,CAAA,CAAE,MAAA,CAAO,OAAO;AAAA,OAC1D;AAEA,MAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ;AACnC,QAAA,IAAI,GAAA,KAAQ,gBAAgB,OAAO,KAAA;AACnC,QAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,YAAA,IAAgB,YAAY,GAAA,CAAI,CAAA,CAAE,YAAY,CAAA,EAAG,OAAO,KAAA;AACnF,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,MAAA,EAAQ;AAGjC,MAAA,MAAM,aAAa,MAAA,CAAO,YAAA;AAC1B,MAAA,IAAI,SAAA,GAAY,EAAA;AAChB,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,KAAA,IAAS,CAAA,GAAI,cAAA,GAAiB,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC5C,UAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnB,UAAA,IAAI,EAAE,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,UAAU,CAAA,IAAK,CAAA,CAAE,UAAA,CAAW,KAAK,CAAC,EAAA,KAAY,EAAA,CAAG,EAAA,KAAO,UAAU,CAAA,EAAG;AACjH,YAAA,SAAA,GAAY,CAAA;AACZ,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,aAAa,CAAA,EAAG;AAElB,QAAA,MAAM,MAAA,GAAS,QAAQ,SAAS,CAAA;AAChC,QAAA,MAAM,oBAAoB,IAAI,GAAA;AAAA,UAAA,CAC3B,MAAA,CAAO,UAAA,IAAc,EAAC,EAAG,GAAA,CAAI,CAAC,EAAA,KAAY,EAAA,CAAG,EAAE,CAAA,CAAE,MAAA,CAAO,OAAO;AAAA,SAClE;AACA,QAAA,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ;AACnC,UAAA,IAAI,GAAA,KAAQ,WAAW,OAAO,KAAA;AAC9B,UAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,YAAA,IAAgB,kBAAkB,GAAA,CAAI,CAAA,CAAE,YAAY,CAAA,EAAG,OAAO,KAAA;AACzF,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH,CAAA,MAAO;AAEL,QAAA,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,MAClC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAC,CAAA;AAAA,IAClC;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,kBAAA,CAAmB,OAAmB,MAAA,EAAiD;AACrG,EAAA,MAAM,WAAA,GAAe,KAAA,CAAM,QAAA,IAAY,EAAC;AACxC,EAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,KAAA,EAAO;AACnC,IAAA,OAAO,aAAA,CAAc,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,cAAA,GAAiB,kBAAA,CAAmB,WAAA,EAAa,MAAA,CAAO,QAAQ,eAAe,CAAA;AACrF,EAAA,MAAM,gBAAgB,KAAA,CAAM,cAAA,GAAiB,KAAA,CAAM,cAAA,CAAe,SAAS,CAAC,CAAA;AAC5E,EAAA,MAAM,WAAA,GAAc,wBAAwB,aAAa,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,CAAM,WAAW,CAAA;AACtD,EAAA,MAAMW,cAAAA,GAAgB,eAAe,CAAC,CAAA,EAAG,SAAS,QAAA,GAAW,cAAA,CAAe,CAAC,CAAA,GAAI,MAAA;AACjF,EAAA,MAAM,IAAA,GAAOA,cAAAA,GAAgB,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,GAAI,cAAA;AACvD,EAAA,MAAM,2BAA0C,EAAC;AAEjD,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,wBAAA,CAAyB,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,iBAAA,EAAmB,OAAA,EAAS,aAAa,CAAA;AAAA,EACjG;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,wBAAA,CAAyB,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAM,gBAAA,EAAkB,OAAA,EAAS,YAAY,CAAA;AAAA,EAC/F;AAEA,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,GAAIA,cAAAA,GAAgB,CAACA,cAAa,IAAI,EAAC;AAAA,IACvC,GAAG,wBAAA;AAAA,IACH,GAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,cAAA,GAAiB,IAAA,CAAK,OAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,KAAS,UAAU,OAAA,CAAQ,IAAA,KAAS,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,CAAA,GAAI;AAAA,GAC/I;AAEA,EAAA,OAAO,aAAA,CAAc,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA;AAChE;;;ADpJA,IAAM,gBAAgB,CAAC,OAAA,MAAqB,EAAE,IAAA,EAAM,UAAU,OAAA,EAAQ,CAAA;AACtE,IAAM,eAAe,CAAC,OAAA,MAAqB,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAQ,CAAA;AAOnE,SAAS,wBAAwB,QAAA,EAAwC;AACrE,EAAA,MAAM,YAA2B,EAAC;AAClC,EAAA,MAAM,kBAAA,uBAAyB,GAAA,EAAY;AAE3C,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACtB,IAAA,IAAI,CAAA,CAAE,SAAS,WAAA,EAAa;AAExB,MAAA,IAAI,CAAC,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,UAAA,CAAW,WAAW,CAAA,EAAG;AAC5C,QAAA,kBAAA,CAAmB,KAAA,EAAM;AAAA,MAC7B,CAAA,MAAO;AAEH,QAAA,CAAA,CAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,EAAA,KAAY;AAC9B,UAAA,IAAI,EAAA,CAAG,EAAA,EAAI,kBAAA,CAAmB,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,QAC3C,CAAC,CAAA;AAAA,MACL;AACA,MAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IACpB,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,aAAa,CAAA,CAAE,YAAA;AAErB,MAAA,IAAI,UAAA,IAAc,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA,EAAG;AAClD,QAAA,kBAAA,CAAmB,OAAO,UAAU,CAAA;AACpC,QAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MACpB;AAAA,IAEJ,CAAA,MAAO;AAEH,MAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,IACpB;AAAA,EACJ;AAEA,EAAA,OAAO,SAAA;AACX;AAGA,SAAS,kBAAkB,IAAA,EAA6B;AACpD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AACzD,EAAA,IAAI,SAAS,CAAC,CAAA,SAAU,MAAA,CAAO,CAAC,EAAE,IAAA,EAAK;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAChC,EAAA,IAAI,KAAA,IAAS,CAAA,IAAK,GAAA,GAAM,KAAA,EAAO;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAA,GAAM,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,0BAAA,CAA2B,OAAY,YAAA,EAAyC;AACrF,EAAA,MAAM,OAAA,GAA6B;AAAA,IAC/B,cAAc,KAAA,CAAM,OAAA,CAAQ,OAAO,YAAY,CAAA,GACzC,MAAM,YAAA,CACC,MAAA,CAAO,CAAC,IAAA,KAAc,QAAQ,OAAO,IAAA,KAAS,QAAQ,CAAA,CACtD,GAAA,CAAI,CAAC,IAAA,MAAe;AAAA,MACjB,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,GAAA,IAAO,SAAS,CAAA;AAAA,MACjC,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA;AAAA,MAC9B,YAAY,OAAO,IAAA,CAAK,UAAA,KAAe,QAAA,GAAW,KAAK,UAAA,GAAa,GAAA;AAAA,MACpE,QAAQ,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,GAAI;AAAA,KAChD,CAAE,IACR,EAAC;AAAA,IACP,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,YAAY,CAAA,GAAI,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAc,MAAA,CAAO,IAAI,CAAC,IAAI,EAAC;AAAA,IAC1G,cAAA,EAAgB,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,cAAc,CAAA,GAAI,KAAA,CAAM,cAAA,CAAe,GAAA,CAAI,CAAC,QAAA,KAAkB,MAAA,CAAO,QAAQ,CAAC,IAAI,EAAC;AAAA,IACxH,oBAAoB,KAAA,CAAM,OAAA,CAAQ,OAAO,kBAAA,IAAsB,KAAA,EAAO,kBAAkB,CAAA,GAAA,CACjF,KAAA,CAAM,sBAAsB,KAAA,CAAM,kBAAA,EAAoB,IAAI,CAAC,IAAA,KAAc,OAAO,IAAI,CAAC,IACtF,EAAC;AAAA,IACP,YAAY,OAAO,KAAA,EAAO,UAAA,KAAe,QAAA,GAAW,MAAM,UAAA,GAAa;AAAA,GAC3E;AAEA,EAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,KAAW,CAAA,IAAK,YAAA,EAAc;AACnD,IAAA,MAAM,iBAAiB,YAAA,CAClB,KAAA,CAAM,IAAI,CAAA,CACV,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CACzB,MAAA,CAAO,OAAO,CAAA,CACd,KAAA,CAAM,GAAG,CAAC,CAAA;AACf,IAAA,OAAA,CAAQ,YAAA,GAAe,cAAA,CAAe,GAAA,CAAI,CAAC,MAAM,KAAA,MAAW;AAAA,MACxD,GAAA,EAAK,CAAA,KAAA,EAAQ,KAAA,GAAQ,CAAC,CAAA,CAAA;AAAA,MACtB,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY;AAAA,KAChB,CAAE,CAAA;AAAA,EACN;AAEA,EAAA,OAAO,OAAA;AACX;AAEA,SAAS,wBAAwB,KAAA,EAAuB;AACpD,EAAA,OAAO,KAAA,CACF,IAAA,EAAK,CACL,WAAA,EAAY,CACZ,OAAA,CAAQ,aAAA,EAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA,IACpB,MAAA;AACX;AAEA,SAAS,sBAAsB,QAAA,EAA4D;AACvF,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAuD;AAEzE,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,OAAA,KAAY,QAAA,GACrC,OAAA,CAAQ,OAAA,GACR,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GACzB,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAc,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,OAAA,IAAW,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAC/F,EAAA;AACV,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAC3E,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,MAAA,IAAI,CAAC,gBAAgB,IAAA,CAAK,IAAI,KAAK,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAExD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,EAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AAChF,MAAA,MAAM,KAAA,GAAQ,SAAS,CAAC,CAAA;AACxB,MAAA,MAAM,UAAU,QAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CAC3B,GAAA,CAAI,CAAC,OAAA,KAAY;AACd,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACnC,QAAA,IAAI,OAAA,IAAW,GAAG,OAAO,IAAA;AACzB,QAAA,OAAO;AAAA,UACH,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAO,EAAE,IAAA,EAAK;AAAA,UACpC,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,GAAU,CAAC,EAAE,IAAA;AAAK,SAC3C;AAAA,MACJ,CAAC,EACA,MAAA,CAAO,CAAC,UAAmD,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA;AACnF,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAE1B,MAAA,MAAM,aAAa,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAA,KAAU,CAAC,QAAQ,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,KAAK,EAAE,QAAA,CAAS,KAAA,CAAM,IAAI,WAAA,EAAa,CAAC,CAAA,EAAG,KAAA;AACxH,MAAA,MAAM,SAAA,GAAY,CAAC,uBAAA,CAAwB,KAAK,GAAG,UAAA,GAAa,uBAAA,CAAwB,UAAU,CAAA,GAAI,MAAS,CAAA,CAC1G,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEb,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AACzB,QAAA,MAAM,kBAAA,GAAqB,uBAAA,CAAwB,KAAA,CAAM,GAAG,CAAA;AAC5D,QAAA,MAAM,OAAA,GAAU,SAAA,GAAY,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,GAAK,CAAA,EAAG,uBAAA,CAAwB,KAAK,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA;AAC1H,QAAA,KAAA,CAAM,IAAI,OAAA,EAAS;AAAA,UACf,GAAA,EAAK,OAAA;AAAA,UACL,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,UAAA,EAAY,IAAA;AAAA,UACZ,MAAA,EAAQ;AAAA,SACX,CAAA;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,CAAA;AAC7B;AAEA,SAAS,4BAA4B,OAAA,EAA0C;AAC3E,EAAA,OAAO,OAAO,OAAA,KAAY,QAAA,KAElB,YAAY,YAAA,IACT,OAAA,CAAQ,WAAW,0BAA0B,CAAA,IAC7C,QAAQ,UAAA,CAAW,wBAAwB,KAC3C,OAAA,CAAQ,UAAA,CAAW,0BAA0B,CAAA,IAC7C,OAAA,CAAQ,WAAW,uBAAuB,CAAA,CAAA;AAEzD;AAEA,SAAS,oBAAA,CAAqB,KAAA,EAAmB,UAAA,EAAqB,QAAA,EAAmB;AACrF,EAAA,MAAM,OAAA,GAAU;AAAA,IACZ,GAAI,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,IAC1B,GAAI,KAAA,CAAM,mBAAA,IAAuB;AAAC,GACtC;AAEA,EAAA,IAAI,UAAA,EAAY;AACZ,IAAA,KAAA,IAAS,QAAQ,OAAA,CAAQ,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACzD,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAK,CAAA;AAC3B,MAAA,IAAI,KAAA,EAAO,iBAAiB,UAAA,EAAY;AACpC,QAAA,OAAO,KAAA;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACX,IAAA,OAAO,MAAA;AAAA,EACX;AAEA,EAAA,KAAA,IAAS,QAAQ,OAAA,CAAQ,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AACzD,IAAA,MAAM,KAAA,GAAQ,QAAQ,KAAK,CAAA;AAC3B,IAAA,IAAI,KAAA,EAAO,aAAa,QAAA,EAAU;AAC9B,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,gBAAA,CACL,SACA,eAAA,EACiB;AACjB,EAAA,IAAI,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA;AAEzC,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,GAAA,EAAK,IAAI,CAAC,CAAC,CAAA;AAC3E,EAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAChC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,QAAA,IAAA,CAAa,IAAA,CAAK,cAAc,CAAA,MAAO,QAAA,CAAS,cAAc,CAAA,CAAA,EAAI;AACnE,MAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AAAA,IAC7B;AAAA,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,GAAG,OAAA;AAAA,IACH,YAAA,EAAc,CAAC,GAAG,MAAA,CAAO,QAAQ;AAAA,GACrC;AACJ;AAEA,SAAS,iBAAA,CAAkB,UAAyC,OAAA,EAAmD;AACnH,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAA,CAAK,QAAA,EAAU,YAAA,IAAgB,EAAC,EAAG,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AACnF,EAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,OAAA,CAAQ,YAAA,CAAa,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,OAAA,CAAQ,kBAAkB,CAAA;AACvD,EAAA,MAAM,mBAAmB,CAAC,GAAG,YAAY,CAAA,CAAE,KAAK,CAAC,GAAA,KAAQ,CAAC,YAAA,CAAa,IAAI,GAAG,CAAA,IAAK,CAAC,WAAA,CAAY,GAAA,CAAI,GAAG,CAAC,CAAA;AACxG,EAAA,MAAM,mBAAA,GAAsB,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,CAAC,SAAS,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA;AAE1F,EAAA,IAAI,gBAAA,EAAkB;AAClB,IAAA,KAAA,CAAM,KAAK,4EAA4E,CAAA;AAAA,EAC3F;AACA,EAAA,IAAI,mBAAA,EAAqB;AACrB,IAAA,KAAA,CAAM,KAAK,6DAA6D,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ,CAAC,gBAAA,IAAoB,CAAC,mBAAA;AAAA,IAC9B,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEA,SAAS,uBAAA,CAAwB,QAAA,EAAyC,OAAA,EAA4B,SAAA,EAAqD;AACvJ,EAAA,IAAI,CAAC,UAAU,OAAO,OAAA;AACtB,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,OAAA,CAAQ,YAAY,CAAA;AAC1C,EAAA,IAAI,UAAU,gBAAA,EAAkB;AAC5B,IAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AAC9D,IAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,YAAA,EAAc;AACtC,MAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,IAAK,CAAC,OAAA,CAAQ,kBAAA,CAAmB,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AAC/E,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,MACvB;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,mBAAA,GAC1B,SAAA,CAAU,OAAO,CAAC,IAAA,KAAS,CAAC,OAAA,CAAQ,kBAAA,CAAmB,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,GACzE,SAAA;AACN,EAAA,OAAO,EAAE,GAAG,OAAA,EAAS,YAAA,EAAc,aAAA,EAAc;AACrD;AAcO,SAAS,2BAA2B,IAAA,EAAyB;AAClE,EAAA,OAAO,OAAO,KAAA,KAAoD;AAC5D,IAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,EAAM,KAAA,CAAM,KAAY,CAAA;AAChE,IAAA,MAAM,SAAS,QAAA,CAAS,aAAA;AACxB,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,EAAQ,OAAO,EAAC;AAKhC,IAAA,MAAM,KAAA,GAAS,KAAA,CAAM,KAAA,EAAe,KAAA,IAAU,IAAA,CAAa,KAAA;AAC3D,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,EAAC;AAGpC,IAAA,MAAM,OAAA,GAAW,MAAM,GAAA,EAAa,SAAA;AACpC,IAAA,MAAM,YAAA,GAAgB,MAAM,GAAA,EAAa,cAAA;AAIzC,IAAA,MAAM,uBAAuB,QAAA,CAAS,MAAA;AAAA,MAClC,CAAC,CAAA,KAAM;AACH,QAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,EAAQ,OAAO,KAAA;AAC9B,QAAA,IAAI,2BAAA,CAA4B,CAAA,CAAE,OAAO,CAAA,EAAG,OAAO,KAAA;AACnD,QAAA,IAAI,yBAAA,CAA0B,CAAC,CAAA,EAAG,OAAO,KAAA;AACzC,QAAA,MAAM,MAAA,GAAS,6BAAA,CAA8B,CAAA,CAAE,IAAA,IAAQ,IAAI,QAAQ,CAAA;AACnE,QAAA,IAAI,MAAA,KAAW,aAAa,OAAO,KAAA;AACnC,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,KACJ;AACA,IAAA,IAAI,oBAAA,CAAqB,WAAW,CAAA,EAAG;AAGnC,MAAA,OAAO,EAAC;AAAA,IACZ;AAGA,IAAA,MAAM,gBAAA,GAAmB,oBAAoB,QAAQ,CAAA;AAQrD,IAAA,MAAM,yBAAyB,MAAA,CAAO,sBAAA;AAEtC,IAAA,MAAM,iCAAiC,sBAAA,GAAyB,GAAA;AAGhE,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,IAAI,iBAAA,GAAoB,CAAA;AAGxB,IAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,MAAA,IAAI,yBAAA,CAA0B,CAAC,CAAA,IAAK,yBAAA,CAA0B,CAAC,CAAA,EAAG;AAC9D,QAAA;AAAA,MACJ;AACA,MAAA,IAAI,OAAA,GAAU,EAAA;AACd,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,YAAoB,CAAA,CAAE,OAAA;AAAA,WAAA,IACtC,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AAC/B,QAAA,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,IAAQ,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAC7E;AAKA,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,2BAAA,CAA4B,OAAO,CAAA,EAAG;AAC3D,QAAA,MAAM,eAAe,oBAAA,CAAqB,KAAA,EAAO,CAAA,CAAE,YAAA,EAAc,EAAE,IAAI,CAAA;AACvE,QAAA,IAAI,YAAA,EAAc;AACd,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,SAAA,IAAa,YAAA,CAAa,MAAA;AACxD,UAAA,OAAA,GAAU,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,QAC/E;AAGA,MACJ;AAGA,MAAA,MAAM,gBAAA,GAAmB,GAAA;AACzB,MAAA,IAAI,OAAA,CAAQ,SAAS,gBAAA,EAAkB;AACnC,QAAA,OAAA,GAAU,OAAA,CAAQ,SAAA,CAAU,CAAA,EAAG,gBAAgB,CAAA,GAAI,iBAAA;AAAA,MACvD;AAEA,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,aAAa,CAAA,CAAA;AACpC,MAAA,IAAI,CAAA,CAAE,IAAA,EAAM,MAAA,IAAU,CAAA,EAAA,EAAK,EAAE,IAAI,CAAA,CAAA,CAAA;AAEjC,MAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AACzC,MAAA,MAAM,aAAA,GAAgB,kBAAkB,WAAW,CAAA;AAEnD,MAAA,IAAI,iBAAA,GAAoB,gBAAgB,8BAAA,EAAgC;AAGpE,QAAA,YAAA,CAAa,QAAQ,oDAAoD,CAAA;AACzE,QAAA;AAAA,MACJ;AAEA,MAAA,YAAA,CAAa,QAAQ,WAAW,CAAA;AAChC,MAAA,iBAAA,IAAqB,aAAA;AAAA,IACzB;AAEA,IAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AACjD,IAAA,MAAM,cAAA,GAAiB,sBAAsB,oBAAoB,CAAA;AAE7D,IAAA,MAAM,kBAAkB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,SAAS,KAAK,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAA,GAC7E,MAAM,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,GAC1C,EAAA;AACN,IAAA,MAAM,4BAA4B,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,cAAc,KAAK,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,CAAA,GACjG,MAAM,cAAA,CAAe,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA,GACpD,MAAA;AAEN,IAAA,MAAM,aAAA,GAAgB,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAA,EAiBA,OAAO,6BAA6B,CAAA;AAAA,gBAAA,EAChD,OAAO,WAAW,CAAA;;AAAA;AAAA,EAGlC,mBAAmB,QAAQ;;AAAA;AAAA,EAG3B,yBAAA,GAA4B,IAAA,CAAK,SAAA,CAAU,yBAAyB,IAAI,QAAQ;;AAAA;AAAA,EAGhF,gBAAgB;;AAAA;AAAA,EAGhB,eAAe,MAAA,GAAS,CAAA,GAAI,eAAe,GAAA,CAAI,CAAC,SAAS,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA,CAAE,EAAE,IAAA,CAAK,IAAI,IAAI,QAAQ,CAAA,CAAA;AAExG,IAAA,MAAM,QAAA,GAAW,OAAO,cAAA,IAAkB,aAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,SACd,OAAA,CAAQ,6BAAA,EAA+B,gBAAgB,CAAA,CACvD,OAAA,CAAQ,gCAAA,EAAkC,eAAA,IAAmB,EAAE,CAAA;AAEpE,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,cAAc,wGAAwG,CAAA;AAAA,MACtH,aAAa,UAAU;AAAA,KAC3B;AAGJ,IAAA,MAAM,mBAAA,GAAsB,iBAAA,CAAkB,aAAA,CAAc,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAE1F,IAAA,IAAI,WAAA,GAAc,sBAAA;AAClB,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,oBAAA,GAAuB,CAAA;AAC3B,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,kBAAA;AACJ,IAAA,IAAI,iBAAA;AACJ,IAAA,IAAI,iBAAA;AAEJ,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AACvB,IAAA,IAAI;AACI,MAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,CAAM,WAAW,UAAA,EAAY;AAC9C,QAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,MACzD;AACA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA;AACzD,MAAA,UAAA,GAAa,IAAA,CAAK,KAAI,GAAI,SAAA;AAC1B,MAAA,WAAA,GAAc,OAAO,QAAA,CAAS,OAAA,KAAY,QAAA,GACpC,QAAA,CAAS,OAAA,GACT,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,GAC1B,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GACtD,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA;AACzC,MAAA,oBAAA,GAAuB,kBAAkB,WAAW,CAAA;AAE5C,MAAA,MAAM,QAAA,GAAW,kBAAkB,WAAW,CAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,KAAA,CAAA;AACjD,MAAA,iBAAA,GAAoB,0BAAA,CAA2B,QAAQ,WAAW,CAAA;AAClE,MAAA,iBAAA,GAAoB,gBAAA,CAAiB,mBAAmB,cAAc,CAAA;AACtE,MAAA,SAAA,GAAY,MAAA,CAAO,cAAA,GACb,iBAAA,CAAkB,yBAAA,EAA2B,iBAAiB,CAAA,GAC9D,EAAE,MAAA,EAAQ,IAAA,EAAM,kBAAkB,KAAA,EAAO,mBAAA,EAAqB,KAAA,EAAO,KAAA,EAAO,EAAC,EAAE;AACrF,MAAA,IAAI,SAAA,IAAa,CAAC,SAAA,CAAU,MAAA,EAAQ;AAChC,QAAA,iBAAA,GAAoB,uBAAA,CAAwB,yBAAA,EAA2B,iBAAA,EAAmB,SAAS,CAAA;AACnG,QAAA,SAAA,GAAY,EAAE,GAAG,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC7C;AACA,MAAA,WAAA,GAAc,wBAAwB,iBAAiB,CAAA;AAG/D,MAAA,MAAM,QAAA,GAAY,QAAA,EAAkB,KAAA,IAC9B,QAAA,EAAkB,iBAAA,EAAmB,eACrC,QAAA,EAAkB,iBAAA,EAAmB,UAAA,IACrC,QAAA,EAAkB,iBAAA,EAAmB,KAAA;AAC3C,MAAA,MAAM,UAAA,GAAa,eAAe,QAAQ,CAAA;AAC1C,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,iBAAA,GAAoB,UAAA,CAAW,aAAA;AAC/B,QAAA,kBAAA,GAAqB,UAAA,CAAW,iBAAA;AAChC,QAAA,iBAAA,GAAoB,UAAA,CAAW,YAAA;AAC/B,QAAA,iBAAA,GAAoB,WAAW,qBAAA,EAAuB,aAAA;AAAA,MACxD;AAAA,IACJ,SAAS,GAAA,EAAU;AACf,MAAA,UAAA,GAAa,IAAA,CAAK,KAAI,GAAI,SAAA;AAClB,MAAA,iBAAA,GAAoB,2BAA2B,MAAA,EAAW,eAAA,IAAmB,iBAAiB,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAC3G,MAAA,iBAAA,GAAoB,gBAAA,CAAiB,mBAAmB,cAAc,CAAA;AACtE,MAAA,SAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,qBAAqB,KAAA,EAAO,KAAA,EAAO,CAAC,qCAAqC,CAAA,EAAE;AAChI,MAAA,WAAA,GAAc,wBAAwB,iBAAiB,CAAA;AAG/D,MAAA,MAAM,UAAA,GAAiC;AAAA,QACrC,IAAA,EAAM,eAAA;AAAA,QACI,OAAA,EAAS,WAAA;AAAA,QACT,oBAAoB,oBAAA,CAAqB,MAAA;AAAA,QACnD,WAAA,EAAa,mBAAA;AAAA,QACH,YAAA,EAAc,kBAAkB,WAAW,CAAA;AAAA,QACrD,UAAA;AAAA,QACA,iBAAiB,eAAA,IAAmB,MAAA;AAAA,QACpC,gBAAA;AAAA,QACU,eAAA,EAAiB,gBAAA;AAAA,QACjB,iBAAA;AAAA,QACA;AAAA,OACZ;AACA,MAAA,OAAA,GAAU,UAAU,CAAA;AAGpB,MAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,QAC7B,IAAA,EAAM,eAAA;AAAA,QACN,KAAA,EAAO,8BAAA;AAAA,QACP,OAAO,EAAE,KAAA,EAAO,UAAU,IAAA,EAAM,YAAA,EAAc,MAAM,eAAA,EAAgB;AAAA,QACpE,MAAA,EAAQ,OAAA;AAAA,QACR,UAAA;AAAA,QACA,WAAA,EAAa,mBAAA;AAAA,QACH,YAAA,EAAc,kBAAkB,WAAW,CAAA;AAAA,QACrD,KAAA,EAAO,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,IAAW,OAAO,GAAG,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAAA,QACjE,WAAA,EAAa,qBAAqB,aAAa;AAAA,OAChD,CAAA;AAAA,IAEL;AAIA,IAAA,MAAM,wBAAA,uBAA+B,GAAA,EAAoB;AACzD,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAA,KAAQ;AACzB,MAAA,IAAI,CAAA,CAAE,SAAS,WAAA,IAAe,CAAA,CAAE,cAAc,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,UAAU,CAAA,EAAG;AACvE,QAAA,CAAA,CAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,EAAA,KAAY;AAC9B,UAAA,IAAI,GAAG,EAAA,EAAI;AACP,YAAA,wBAAA,CAAyB,GAAA,CAAI,EAAA,CAAG,EAAA,EAAI,GAAG,CAAA;AAAA,UAC3C;AAAA,QACJ,CAAC,CAAA;AAAA,MACL;AAAA,IACJ,CAAC,CAAA;AAOD,IAAA,MAAM,oBAAA,uBAA2B,GAAA,EAAY;AAC7C,IAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,MAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,UAAU,CAAA,IAAK,CAAA,CAAE,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAClF,QAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,CAAA,CAAE,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,KAAY,EAAA,CAAG,EAAE,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACpF,QAAA,MAAM,oBAAoB,oBAAA,CAAqB,MAAA;AAAA,UAC3C,CAAC,EAAA,KAAO,CAAC,eAAA,CAAgB,GAAA,CAAI,GAAG,YAAY;AAAA,SAChD;AACA,QAAA,IAAI,iBAAA,CAAkB,SAAS,CAAA,EAAG;AAC9B,UAAA,KAAA,MAAW,EAAA,IAAM,EAAE,UAAA,EAAY;AAC3B,YAAA,IAAI,EAAA,CAAG,EAAA,EAAI,oBAAA,CAAqB,GAAA,CAAI,GAAG,EAAE,CAAA;AAAA,UAC7C;AAAA,QACJ;AACA,QAAA;AAAA,MACJ;AAAA,IACJ;AAMA,IAAA,MAAM,qBAAwD,CAAC,GAAI,KAAA,CAAM,mBAAA,IAAuB,EAAG,CAAA;AACnG,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,kBAAA,CAAmB,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,EAAO,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACjG,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM;AACpC,MAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ;AACnB,QAAA,IAAI,yBAAA,CAA0B,CAAC,CAAA,EAAG;AAC9B,UAAA,OAAO,CAAA;AAAA,QACX;AACA,QAAA,MAAM,aAAa,CAAA,CAAE,YAAA;AAErB,QAAA,IAAI,CAAC,UAAA,IAAc,CAAC,wBAAA,CAAyB,GAAA,CAAI,UAAU,CAAA,EAAG;AAC1D,UAAA,OAAO,IAAA;AAAA,QACX;AAEA,QAAA,IAAI,2BAAA,CAA4B,CAAA,CAAE,OAAO,CAAA,EAAG,OAAO,CAAA;AACnD,QAAA,IAAI,UAAA,IAAc,oBAAA,CAAqB,GAAA,CAAI,UAAU,GAAG,OAAO,CAAA;AAE/D,QAAA,MAAM,QAAA,GAAW,EAAE,IAAA,IAAQ,EAAA;AAC3B,QAAA,MAAM,MAAA,GAAS,6BAAA,CAA8B,QAAA,EAAU,QAAQ,CAAA;AAC/D,QAAA,IAAI,MAAA,KAAW,aAAa,OAAO,CAAA;AAEnC,QAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,KAAA,EAAO,UAAA,EAAY,QAAQ,CAAA;AACrE,QAAA,MAAM,SAAA,GAAY,YAAA,EAAc,SAAA,IAAa,YAAA,EAAc,UAAU,CAAA,CAAE,OAAA;AACvE,QAAA,MAAM,cAAc,YAAA,EAAc,WAAA;AAClC,QAAA,MAAM,eAAA,GAAkB,YAAA,EAAc,OAAA,IAAW,eAAA,CAAgB,SAAS,CAAA;AAE1E,QAAA,IAAA,CAAK,MAAA,KAAW,mBAAA,IAAuB,MAAA,KAAW,MAAA,KAAW,YAAA,IAAgB,eAAe,CAAC,WAAA,CAAY,GAAA,CAAI,WAAW,CAAA,EAAG;AACvH,UAAA,kBAAA,CAAmB,IAAA,CAAK;AAAA,YACpB,GAAG,YAAA;AAAA,YACH,UAAA,EAAY,IAAA;AAAA,YACZ,eAAA,EAAiB,MAAA;AAAA,YACjB,SAAA,EAAW,WAAA;AAAA,YACX,OAAA,EAAS;AAAA,WACZ,CAAA;AACD,UAAA,WAAA,CAAY,IAAI,WAAW,CAAA;AAAA,QAC/B;AAEA,QAAA,OAAO;AAAA,UACH,GAAG,CAAA;AAAA,UACH,SAAS,yBAAA,CAA0B;AAAA,YAC/B,MAAA;AAAA,YACA,SAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA,WACH;AAAA,SACL;AAAA,MACJ;AACA,MAAA,OAAO,CAAA;AAAA,IACX,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAkC,MAAM,IAAI,CAAA;AAGvD,IAAA,MAAM,qBAAqB,WAAA,CAAY,MAAA;AAAA,MACnC,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,UACX,2BAAA,CAA4B,CAAA,CAAE,OAAO,CAAA,IACrC,CAAC,SAAS,IAAA,CAAK,CAAC,SAAS,IAAA,CAAK,YAAA,KAAiB,EAAE,YAAA,IAAgB,2BAAA,CAA4B,IAAA,CAAK,OAAO,CAAC;AAAA,KACrH;AACA,IAAA,IAAI,kBAAA,CAAmB,WAAW,CAAA,EAAG;AAGjC,MAAA,OAAO,EAAC;AAAA,IACZ;AAGA,IAAA,MAAM,iBAAA,GAAoB,wBAAwB,WAAW,CAAA;AAI7D,IAAA,MAAM,iBAAA,GAAoB,CAAA,aAAA,EAAgB,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAGpD,IAAA,MAAM,oBAAA,GAAoC;AAAA,MACtC,IAAA,EAAM,WAAA;AAAA;AAAA,MACN,OAAA,EAAS,gFAAA;AAAA,MACT,UAAA,EAAY;AAAA,QACR;AAAA,UACI,EAAA,EAAI,iBAAA;AAAA,UACJ,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACN,IAAA,EAAM,mBAAA;AAAA,YACN,SAAA,EAAW;AAAA;AACf;AACJ;AACJ,KACJ;AAGA,IAAA,MAAM,mBAAA,GAAmC;AAAA,MACrC,IAAA,EAAM,MAAA;AAAA,MACN,YAAA,EAAc,iBAAA;AAAA,MACd,IAAA,EAAM,mBAAA;AAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACb;AAEI,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,GAAI,CAAC,GAAG,KAAA,CAAM,SAAA,EAAW,WAAW,CAAA,GAAI,CAAC,WAAW,CAAA;AACnG,IAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,MAAM,cAAc,CAAA,GACnD,CAAC,GAAG,KAAA,CAAM,cAAA,EAAgB,EAAE,GAAI,iBAAA,IAAqB,0BAAA,CAA2B,QAAW,WAAW,CAAA,EAAI,WAAW,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,aAAY,EAAG,IAC1J,CAAC,EAAE,GAAI,iBAAA,IAAqB,0BAAA,CAA2B,QAAW,WAAW,CAAA,EAAI,WAAW,SAAA,EAAA,iBAAW,IAAI,MAAK,EAAE,WAAA,IAAe,CAAA;AAG3I,IAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,iBAAA,EAAmB,sBAAsB,mBAAmB,CAAA;AACtF,IAAA,MAAM,eAAA,GAAkB,oBAAoB,aAAa,CAAA;AAGzD,IAAA,MAAM,kBAAA,GAAyC;AAAA,MAC7C,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,WAAA;AAAA,MACT,oBAAoB,oBAAA,CAAqB,MAAA;AAAA,MACzC,aAAa,iBAAA,IAAqB,mBAAA;AAAA,MAClC,cAAc,kBAAA,IAAsB,oBAAA;AAAA,MACpC,iBAAA;AAAA,MACA,WAAA,EAAa,iBAAA,IAAA,CAAuB,iBAAA,IAAqB,mBAAA,KAAwB,kBAAA,IAAsB,oBAAA,CAAA;AAAA,MACvG,UAAA;AAAA,MACA,iBAAiB,eAAA,IAAmB,MAAA;AAAA,MACpC,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAe,oBAAA,CAAqB,MAAA;AAAA;AAAA,MAC9B,iBAAA;AAAA,MACA;AAAA,KACR;AACA,IAAA,OAAA,GAAU,kBAAkB,CAAA;AAG5B,IAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,MAC7B,IAAA,EAAM,eAAA;AAAA,MACN,KAAA,EAAO,uBAAA;AAAA,MACP,OAAO,EAAE,KAAA,EAAO,UAAU,IAAA,EAAM,YAAA,EAAc,MAAM,eAAA,EAAgB;AAAA,MACpE,MAAA,EAAQ,SAAA;AAAA,MACR,UAAA;AAAA,MACA,aAAa,iBAAA,IAAqB,mBAAA;AAAA,MAClC,cAAc,kBAAA,IAAsB,oBAAA;AAAA,MACpC,iBAAA;AAAA,MACA,WAAA,EAAa,iBAAA;AAAA,MACb,aAAa,oBAAA,CAAqB;AAAA,QAChC,GAAG,aAAA;AAAA,QACH,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,WAAA,EAAa,MAAM,sBAAA;AAAuB,OACzE,CAAA;AAAA,MACD,KAAA,EAAO;AAAA,QACL,oBAAoB,oBAAA,CAAqB,MAAA;AAAA,QACzC,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,aAAa,gBAAA,GAAmB,eAAA;AAAA,QAChC,qBAAA,EAAuB,iBAAiB,MAAA,IAAU,CAAA;AAAA,QAClD,gBAAgB,iBAAA,KAAsB,MAAA;AAAA,QACtC,iBAAA;AAAA,QACQ;AAAA;AACV,KACD,CAAA;AAED,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,aAAA;AAAA,MACF,SAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA,EAAqB;AAAA,KACjC;AAAA,EACF,CAAA;AACF;;;AEnsBA,eAAA,EAAA;AACA,eAAA,EAAA;ACIA,IAAM,8BAAA,GAAiC;AAAA,EACrC,6BAAA;AAAA,EACA,+BAAA;AAAA,EACA,4BAAA;AAAA,EACA,4BAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,gBAAA,GAAmBxB,MAAE,IAAA,CAAK,CAAC,eAAe,aAAA,EAAe,WAAA,EAAa,SAAS,CAAC,CAAA;AAEtF,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA,EACnC,EAAA,EAAIA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,CAAS,+BAA+B,CAAA;AAAA,EACpE,MAAMA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACjC,OAAOA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,aAAaA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACxC,OAAOA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,cAAcA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACzC,MAAA,EAAQ,gBAAA;AAAA,EACR,UAAUA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AAChC,CAAC,CAAA;AAED,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EACpC,EAAA,EAAIA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,CAAS,4BAA4B,CAAA;AAAA,EACjE,MAAMA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACjC,OAAOA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,aAAaA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACxC,OAAOA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EAClC,cAAcA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,EAAE,QAAA,EAAS;AAAA,EACzC,MAAA,EAAQ,iBAAiB,QAAA,EAAS;AAAA,EAClC,UAAUA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AAChC,CAAC,CAAA;AAED,SAAS,iBAAA,CAAkB,MAAW,QAAA,EAAgB;AACpD,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,EAAA,IAAM,QAAA,EAAU,EAAA;AAChC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,SAAS,IAAA,CAAK,WAAA,IAAe,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,KAAA,IAAS,QAAA,EAAU,WAAA,IAAe,QAAQ,EAAE,CAAA,CAAA;AACpI,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,IAAA,IAAQ,UAAU,KAAA,IAAS,QAAA,EAAU,IAAA,IAAQ,CAAA,KAAA,EAAQ,EAAE,CAAA,CAAA;AACxF,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA,IAAS,QAAA,EAAU,WAAA,IAAe,QAAA,EAAU,IAAA,IAAQ,QAAA,EAAU,KAAA,IAAS,QAAQ,EAAE,CAAA,CAAA;AAE3I,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,GAAG,IAAA;AAAA,IACH,EAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,QAAA,EAAU,KAAA,IAAS,OAAA;AAAA,IACxC,cAAc,IAAA,CAAK,YAAA,IAAgB,UAAU,YAAA,IAAgB,WAAA,IAAe,iBAAiB,EAAE,CAAA,CAAA;AAAA,IAC/F,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,QAAA,EAAU,MAAA;AAAA,IACjC,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,QAAA,EAAU;AAAA,GACvC;AACF;AAEA,SAAS,sBAAA,CAAuB,UAAiB,oBAAA,EAA+B;AAC9E,EAAA,MAAM,MAAM,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,EAAE,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,GAAG,CAAA;AAC7B,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,GAAA,CAAI,MAAA,EAAQ;AACjC,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,0BAAA,EAA2B;AAAA,EACxD;AAEA,EAAA,IAAI,oBAAA,EAAsB;AACxB,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAO,EAAG,CAAC,CAAA,EAAG,KAAA,KAAU,KAAA,GAAQ,CAAC,CAAA;AACnF,IAAA,MAAM,YAAA,GAAe,IAAI,KAAA,CAAM,CAAC,IAAI,KAAA,KAAU,EAAA,KAAO,WAAA,CAAY,KAAK,CAAC,CAAA;AACvE,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,mEAAA,EAAoE;AAAA,IACjG;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,aAAa,CAAA,CAAE,MAAA;AACjF,EAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,kDAAA,EAAmD;AAAA,EAChF;AAEA,EAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AACpB;AAEA,SAAS,wBAAwB,QAAA,EAAiB;AAChD,EAAA,MAAM,cAAA,GAAiB,SAAS,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,WAAW,CAAA,CAAE,MAAA;AAC9E,EAAA,OAAO,QAAA,CAAS,MAAA,KAAW,CAAA,GAAI,CAAA,GAAI,MAAA,CAAA,CAAQ,iBAAiB,QAAA,CAAS,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AACzF;AAEA,SAAS,sBAAsB,QAAA,EAAiB;AAC9C,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA,CACJ,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAG,KAAK,EAAE,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,IAAA,IAAQ,KAAK,WAAA,IAAe,CAAA,KAAA,EAAQ,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA,EAAA,EAAK,KAAK,MAAM,CAAA,CAAA,CAAG,CAAA,CAChH,IAAA,CAAK,IAAI,CAAA;AACd;AAEA,SAAS,uBAAuB,OAAA,EAA0B;AACxD,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,QAAA,IAAI,OAAQ,IAAA,CAA4B,IAAA,KAAS,QAAA,EAAU;AACzD,UAAA,OAAQ,IAAA,CAA0B,IAAA;AAAA,QACpC;AAEA,QAAA,IAAI,OAAQ,IAAA,CAA+B,OAAA,KAAY,QAAA,EAAU;AAC/D,UAAA,OAAQ,IAAA,CAA6B,OAAA;AAAA,QACvC;AAAA,MACF;AAEA,MAAA,OAAO,EAAA;AAAA,IACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,EACd;AAEA,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,gCAAA,CACd,UACA,WAAA,EACA;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY;AAChC,IAAA,IAAI,OAAA,EAAS,SAAS,QAAA,EAAU;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,sBAAA,CAAuB,OAAA,EAAS,OAAO,CAAA;AACvD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,iBAAA,GAAoB,+BAA+B,IAAA,CAAK,CAAC,YAAY,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC,CAAA;AAChG,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,GAAI,IAAA;AAAA,EACvD,CAAC,CAAA;AACH;AAEO,SAAS,qBAAqB,QAAA,EAAgC;AACnE,EAAA,MAAM,aAAa,UAAA,CAAW;AAAA,IAC5B,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EACE,8vBAAA;AAAA,IACF,MAAA,EAAQA,MAAE,MAAA,CAAO;AAAA,MACf,WAAWA,KAAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,MAC7C,eAAA,EAAiBA,MAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,MAClD,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,KAAA,CAAM,CAAC,mBAAA,EAAqB,oBAAoB,CAAC,CAAC,CAAA,CAAE,QAAA;AAAS,KAClF,CAAA;AAAA,IACD,MAAM,OAAO,EAAE,SAAA,EAAW,eAAA,EAAiB,UAAS,KAAM;AACxD,MAAA,MAAM,eAAgB,UAAA,CAAmB,SAAA;AACzC,MAAA,MAAM,UAAU,YAAA,EAAc,SAAA;AAC9B,MAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAgB;AACrC,QAAA,MAAM,OAAA,GAAU,SAAS,WAAA,IAAe,CAAA;AACxC,QAAA,MAAM,cAAA,GAAiB,SAAS,cAAA,IAAkB,CAAA;AAClD,QAAA,MAAM,QAAA,GAAW;AAAA,UACf,MAAA,EAAQ,kBAAA;AAAA,UACR,SAAA;AAAA,UACA,OAAA;AAAA,UACA,cAAA;AAAA,UACA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAK,MAAA,GAAS;AAAA,SAC7C;AACA,QAAA,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,IAAA,EAAM,GAAG,UAAU,CAAA;AAEvD,QAAA,MAAM,YAAA,GAAe,cAAc,GAAA,EAAK,cAAA;AACxC,QAAA,gBAAA,CAAiB,YAAA,EAAc;AAAA,UAC7B,IAAA,EAAM,MAAA;AAAA,UACN,KAAA,EAAO,QAAQ,SAAS,CAAA,CAAA;AAAA,UACxB,OAAO,EAAE,KAAA,EAAO,SAAS,IAAA,EAAM,kBAAA,EAAoB,MAAM,SAAA,EAAU;AAAA,UACnE,QAAA,EAAU;AAAA,YACR;AAAA,cACE,IAAA,EAAM,SAAA;AAAA,cACN,KAAA,EAAO,WAAA;AAAA,cACP,OAAA,EAAS,sBAAsB,IAAI;AAAA,aACrC;AAAA,YACA;AAAA,cACE,IAAA,EAAM,UAAA;AAAA,cACN,KAAA,EAAO,eAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR,WACF;AAAA,UACA,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH,CAAA;AAEA,MAAA,MAAM,cAAA,GAAiB,SAAS,WAAA,IAAe,CAAA;AAC/C,MAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,IAAY,EAAC;AACnC,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAI,OAAO,eAAA,KAAoB,QAAA,IAAY,eAAA,KAAoB,cAAA,EAAgB;AAC7E,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,OAAA;AAAA,UACR,SAAA;AAAA,UACA,KAAA,EAAO,wDAAA;AAAA,UACP,OAAA,EAAS,cAAA;AAAA,UACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,SAC7C;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC5B,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,OAAA;AAAA,UACR,SAAA;AAAA,UACA,KAAA,EAAO,uDAAA;AAAA,UACP,OAAA,EAAS,cAAA;AAAA,UACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,SAC7C;AAAA,MACF;AAEA,MAAA,IAAI,cAAc,OAAA,EAAS;AACzB,QAAA,MAAM,SAASA,KAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,UAAU,QAAQ,CAAA;AAC9D,QAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,SAAA;AAAA,YACA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,OAAA,IAAW,6BAAA;AAAA,YAC1C,OAAA,EAAS,cAAA;AAAA,YACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,WAC7C;AAAA,QACF;AACA,QAAA,MAAM,cAAA,GAAiB,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,KAAS,iBAAA,CAAkB,IAAI,CAAC,CAAA;AACxE,QAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,cAAA,EAAgB,IAAI,CAAA;AAC9D,QAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,SAAA;AAAA,YACA,OAAO,UAAA,CAAW,KAAA;AAAA,YAClB,OAAA,EAAS,cAAA;AAAA,YACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,WAC7C;AAAA,QACF;AACA,QAAA,QAAA,CAAS,QAAA,GAAW,cAAA;AAAA,MACtB,CAAA,MAAA,IAAW,cAAc,QAAA,EAAU;AACjC,QAAA,MAAM,SAASA,KAAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA,CAAE,UAAU,QAAQ,CAAA;AAC/D,QAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,SAAA;AAAA,YACA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,OAAA,IAAW,8BAAA;AAAA,YAC1C,OAAA,EAAS,cAAA;AAAA,YACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,WAC7C;AAAA,QACF;AACA,QAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,CAAS,WAAW,EAAC;AAC5E,QAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,SAAA;AAAA,YACA,KAAA,EAAO,8CAAA;AAAA,YACP,OAAA,EAAS,cAAA;AAAA,YACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,WAC7C;AAAA,QACF;AAEA,QAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,EAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AACrE,QAAA,MAAM,QAAA,uBAAe,GAAA,EAA0C;AAC/D,QAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,IAAA,EAAM;AAC9B,UAAA,IAAI,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACzB,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,OAAA;AAAA,cACR,SAAA;AAAA,cACA,KAAA,EAAO,6CAAA;AAAA,cACP,OAAA,EAAS,cAAA;AAAA,cACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,aAC7C;AAAA,UACF;AACA,UAAA,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAC1B,UAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AAC5B,YAAA,OAAO;AAAA,cACL,MAAA,EAAQ,OAAA;AAAA,cACR,SAAA;AAAA,cACA,KAAA,EAAO,CAAA,8BAAA,EAAiC,IAAA,CAAK,EAAE,CAAA,gCAAA,CAAA;AAAA,cAC/C,OAAA,EAAS,cAAA;AAAA,cACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,aAC7C;AAAA,UACF;AAAA,QACF;AAEA,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AAC3C,UAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAClC,UAAA,OAAO,KAAA,GAAQ,iBAAA,CAAkB,KAAA,EAAO,IAAI,CAAA,GAAI,IAAA;AAAA,QAClD,CAAC,CAAA;AACD,QAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,UAAA,EAAY,KAAK,CAAA;AAC3D,QAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,SAAA;AAAA,YACA,OAAO,UAAA,CAAW,KAAA;AAAA,YAClB,OAAA,EAAS,cAAA;AAAA,YACT,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,WAC7C;AAAA,QACF;AACA,QAAA,QAAA,CAAS,QAAA,GAAW,UAAA;AAAA,MACtB;AAEA,MAAA,QAAA,CAAS,cAAc,cAAA,GAAiB,CAAA;AACxC,MAAA,QAAA,CAAS,cAAA,GAAiB,uBAAA,CAAwB,QAAA,CAAS,QAAA,IAAY,EAAE,CAAA;AACzE,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,MAAA,EAAQ,IAAA;AAAA,QACR,SAAA;AAAA,QACA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,SAAS,MAAA,GAAS,MAAA;AAAA,QACnD,OAAA,EAAS,SAAS,WAAA,IAAe,CAAA;AAAA,QACjC,cAAA,EAAgB,SAAS,cAAA,IAAkB;AAAA,OAC7C;AACA,MAAA,aAAA,CAAc,QAAA,CAAS,QAAA,IAAY,EAAE,CAAA;AACrC,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,GACD,CAAA;AACD,EAAC,WAAmB,SAAA,GAAY,QAAA;AAChC,EAAA,OAAO,UAAA;AACT;AAEO,SAAS,0BAA0B,QAAA,EAAgC;AACxE,EAAA,MAAM,UAAU,UAAA,CAAW;AAAA,IACzB,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EACE,2kBAAA;AAAA,IACF,MAAA,EAAQA,KAAAA,CAAE,MAAA,CAAO,EAAE,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,CAAS,4CAA4C,CAAA,EAAG,CAAA;AAAA,IACnG,mBAAA,EAAqB,CAAA;AAAA,IACrB,IAAA,EAAM,OAAO,EAAE,WAAA,EAAY,KAAM;AAC/B,MAAA,IAAI,CAAC,gCAAA,CAAiC,QAAA,CAAS,QAAA,EAAU,WAAW,CAAA,EAAG;AACrE,QAAA,OAAO,+JAAA;AAAA,MACT;AAEA,MAAA,MAAM,mBAAmB,CAAC,CAAA,KAAW,GAAG,WAAA,KAAgB,WAAA,IAAe,GAAG,YAAA,KAAiB,WAAA;AAC3F,MAAA,IAAI,SAAA,GAAY,SAAS,WAAA,EAAa,IAAA,CAAK,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAC,CAAA;AACrE,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,SAAA,GAAY,SAAS,mBAAA,EAAqB,IAAA,CAAK,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAAA,MAC3E;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAO,SAAA,CAAU,aAAa,SAAA,CAAU,MAAA;AAAA,MAC1C;AACA,MAAA,OAAO,oDAAA;AAAA,IACT;AAAA,GACD,CAAA;AACD,EAAC,QAAgB,SAAA,GAAY,QAAA;AAC7B,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,kBAAA,CACd,UACA,IAAA,EACA;AACA,EAAA,MAAM,QAAQ,EAAC;AAEf,EAAA,IAAI,MAAM,eAAA,EAAiB;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,oBAAA,CAAqB,QAAQ,CAAC,CAAA;AAAA,EAC3C;AAEA,EAAA,IAAI,IAAA,EAAM,0BAA0B,IAAA,EAAM;AACxC,IAAA,KAAA,CAAM,IAAA,CAAK,yBAAA,CAA0B,QAAQ,CAAC,CAAA;AAAA,EAChD;AAKA,EAAA,OAAO,KAAA;AACT;;;AC/XA,eAAA,EAAA;AAKA,SAAS,kBAAA,CAAmB,KAAA,EAAmB,IAAA,EAAyB,oBAAA,EAAwC;AAC9G,EAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAK,KAAA,CAAM,KAAa,oBAAA,EAAsB;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,EAAM,KAAA,CAAM,KAAY,CAAA;AAChE,EAAA,IAAI,CAAC,QAAA,CAAS,aAAA,CAAc,MAAA,EAAQ;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,SAAS,aAAA,CAAc,oBAAA;AAEtC,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAA,CAAY,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,MAAA,CAAO,CAAC,OAAA,KAAiB,CAAC,yBAAA,CAA0B,OAAO,CAAC,CAAA;AACpG,IAAA,MAAM,UAAA,GAAa,oBAAoB,QAAQ,CAAA;AAC/C,IAAA,OAAO,UAAA,GAAa,MAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,uBAAA,CAAwB,MAAyB,oBAAA,EAA+B;AAC9F,EAAA,OAAO,SAAS,iBAAiB,KAAA,EAAmB;AAClD,IAAA,OAAO,kBAAA,CAAmB,KAAA,EAAO,IAAA,EAAM,oBAAoB,IAAI,kBAAA,GAAqB,OAAA;AAAA,EACtF,CAAA;AACF;AAEO,SAAS,oBAAA,CAAqB,MAAyB,oBAAA,EAA+B;AAC3F,EAAA,OAAO,SAAS,cAAc,KAAA,EAAmB;AAC/C,IAAA,MAAM,GAAA,GAAO,IAAA,CAAK,MAAA,EAAQ,YAAA,IAAgB,EAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,MAAM,aAAA,IAAiB,CAAA;AACrC,IAAA,IAAI,KAAA,IAAS,KAAK,OAAO,mBAAA;AACzB,IAAA,OAAO,kBAAA,CAAmB,KAAA,EAAO,IAAA,EAAM,oBAAoB,IAAI,kBAAA,GAAqB,OAAA;AAAA,EACtF,CAAA;AACF;;;ACjCA,SAAS,aAAA,CAAc,OAAoB,IAAA,EAA8B;AACvE,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,KAAA;AAAA,IACA,QAAA,EAAU,KAAK,QAAA,IAAY,KAAA;AAAA,IAC3B,eAAe,IAAA,CAAK,aAAA,IAAA,iBAAiB,IAAI,IAAA,IAAO,WAAA,EAAY;AAAA,IAC5D,YAAY,MAAA,CAAO,QAAA,CAAS,KAAK,UAAU,CAAA,GAAI,KAAK,UAAA,GAAa;AAAA,GACnE;AACF;AAEO,IAAM,sBAAN,MAAiD;AAAA,EAAjD,WAAA,GAAA;AACL,IAAA,IAAA,CAAiB,OAAA,uBAAwB,GAAA,EAAI;AAAA,EAAA;AAAA,EAE7C,MAAM,GAAA,CAAI,KAAA,EAAoB,OAAA,EAAgF;AAC5G,IAAA,MAAM,eAAA,GAAkB,SAAS,eAAA,KAAoB,IAAA;AACrD,IAAA,MAAM,MAAM,CAAC,GAAI,IAAA,CAAK,OAAA,CAAQ,IAAI,KAAK,CAAA,IAAK,EAAG,EAC5C,MAAA,CAAO,CAAC,SAAS,eAAA,IAAmB,CAAC,KAAK,QAAQ,CAAA,CAClD,IAAA,CAAK,CAAC,MAAM,KAAA,KAAU,IAAI,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAC,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,IAAA,CAAK,iBAAiB,CAAC,CAAA,CAAE,SAAS,CAAA;AACnH,IAAA,OAAO,OAAO,SAAS,KAAA,KAAU,QAAA,GAAW,IAAI,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,GAAI,GAAA;AAAA,EAC5E;AAAA,EAEA,MAAM,MAAA,CAAO,KAAA,EAAoB,KAAA,EAAoC;AACnE,IAAA,MAAM,QAAA,GAAW,CAAC,GAAI,IAAA,CAAK,QAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,EAAG,CAAA;AAEpD,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,KAAA,EAAO,IAAI,CAAA;AAC5C,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,GAAA,KAAQ,UAAA,CAAW,GAAA,IAAO,CAAC,KAAA,CAAM,QAAQ,CAAA;AAC1F,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,IAAI,KAAA,CAAM,KAAA,KAAU,UAAA,CAAW,KAAA,EAAO;AACpC,UAAA,KAAA,CAAM,QAAA,GAAW,IAAA;AACjB,UAAA,KAAA,CAAM,aAAA,GAAA,iBAAgB,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAC/C;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,GAAA,KAAQ,UAAA,CAAW,GAAA,IAAO,MAAM,KAAA,KAAU,UAAA,CAAW,KAAA,IAAS,CAAC,MAAM,QAAQ,CAAA;AAC1H,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,aAAa,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,UAAA,EAAY,WAAW,UAAU,CAAA;AACnE,QAAA,KAAA,CAAM,aAAa,UAAA,CAAW,UAAA;AAC9B,QAAA,KAAA,CAAM,MAAM,UAAA,CAAW,GAAA;AACvB,QAAA,KAAA,CAAM,OAAO,UAAA,CAAW,IAAA;AACxB,QAAA,KAAA,CAAM,gBAAgB,UAAA,CAAW,aAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,KAAK,UAAU,CAAA;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,QAAQ,CAAA;AAAA,EAClC;AAAA,EAEA,MAAM,YAAA,CAAa,KAAA,EAAoB,IAAA,EAA+B;AACpE,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,EAAC;AAC3C,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AAC3B,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,QAAA,IAAA,CAAK,aAAA,GAAgB,GAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,cAAA,CAAe,KAAA,EAAoB,KAAA,EAAe,OAAA,EAAqD;AAC3G,IAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,EAAY;AAC1C,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,EAAC,EAAG,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,KAAK,QAAQ,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,MAAA,CACZ,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,MAAM,WAAW,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA,EAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG,IAAA,CAAK,GAAG,CAAC,GAAG,WAAA,EAAY;AACxF,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,CAAS,eAAe,CAAA,GAAI,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAU,GAAA,IAAO,QAAA,CAAS,SAAS,KAAK,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA;AACtK,MAAA,OAAO,EAAE,MAAM,KAAA,EAAM;AAAA,IACvB,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CACjC,IAAA,CAAK,CAAC,IAAA,EAAM,KAAA,KAAU,KAAA,CAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,KAAA,CAAM,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,CAC9F,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA;AAC5B,IAAA,OAAO,OAAO,SAAS,KAAA,KAAU,QAAA,GAAW,OAAO,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,GAAI,MAAA;AAAA,EAC/E;AACF;AAEO,SAAS,mBAAmB,MAAA,EAA2D;AAC5F,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,OAAO,OAAO,MAAA,CAAO,KAAA;AAC9C,EAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,UAAA,EAAY,OAAO,IAAI,mBAAA,EAAoB;AAC1E,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,eAAA,CACpB,KAAA,EACA,MAAA,EACA,KAAA,EACuB;AACvB,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,KAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,CAAQ,eAAA;AAC7B,EAAA,MAAM,MAAA,GAA2B,OAAO,MAAA,CAAO,UAAA;AAE/C,EAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAE,OAAO,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,MAAA,KAAW,UAAA,IAAc,OAAO,KAAA,CAAM,mBAAmB,UAAA,EAAY;AACvE,IAAA,OAAO,MAAM,cAAA,CAAe,KAAA,EAAO,KAAA,EAAO,EAAE,OAAO,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,MAAM,SAAS,MAAM,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAC,GAAG,CAAA;AAClF,IAAA,MAAM,QAAA,GAAW,OAAO,KAAA,CAAM,cAAA,KAAmB,aAC7C,MAAM,KAAA,CAAM,cAAA,CAAe,KAAA,EAAO,KAAA,EAAO,EAAE,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAG,CAAA,GACrF,EAAC;AACL,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAwB;AAC5C,IAAA,KAAA,MAAW,QAAQ,CAAC,GAAG,QAAA,EAAU,GAAG,MAAM,CAAA,EAAG;AAC3C,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,GAAG,IAAI,IAAA,CAAK,KAAK,IAAI,IAAI,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,CAAC,GAAG,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,GAAG,KAAK,CAAA;AAAA,EAC7C;AAEA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,KAAA,EAAO,EAAE,OAAO,CAAA;AACnC;AAEA,eAAsB,yBAAA,CACpB,KAAA,EACA,MAAA,EACA,OAAA,EACA,UAAA,EACuB;AACvB,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAA,SAAgB,EAAC;AAEhC,EAAA,MAAM,KAAA,GAAsB,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IAC9D,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,UAAA;AAAA,IACA,UAAA,EAAY,KAAK,UAAA,IAAc,GAAA;AAAA,IAC/B,QAAA,EAAU,KAAA;AAAA,IACV,IAAA,EAAM,CAAC,cAAc;AAAA,GACvB,CAAE,CAAA;AAEF,EAAA,IAAI,OAAA,CAAQ,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG;AACzC,IAAA,MAAM,MAAM,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,QAAQ,kBAAkB,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,MAAM,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,eAAA,GAAkB,OAAA,CAAQ,YAAA,CAAa,QAAQ,CAAA;AAC/G;;;AC/FO,IAAM,oBAAA,GAAoC;AAAA,EAC/C,aAAA,EAAe,CAAA;AAAA,EACf,qBAAA,EAAuB,EAAA;AAAA,EACvB,kBAAA,EAAoB;AACtB;AAEO,IAAM,uBAAA,GAAuC;AAAA,EAClD,aAAA,EAAe,CAAA;AAAA,EACf,qBAAA,EAAuB,CAAA;AAAA,EACvB,kBAAA,EAAoB,EAAA;AAAA,EACpB,SAAA,EAAW;AACb;AAgBO,SAAS,sBAAA,GAA2C;AACzD,EAAA,OAAO,EAAE,eAAA,EAAiB,EAAC,EAAG,eAAA,EAAiB,EAAC,EAAE;AACpD;;;ACrEO,SAAS,gBAAgB,KAAA,EAIkD;AAChF,EAAA,MAAM,UAAU,CAAC,GAAG,MAAM,IAAA,EAAM,GAAG,MAAM,eAAe,CAAA;AACxD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,YAAA,GAAe,CAAC,GAAG,OAAA,EAAS,KAAA,CAAM,YAAY,CAAA,GAAI,CAAC,GAAG,OAAO,CAAA;AACnF,EAAA,OAAO,EAAE,oBAAA,EAAsB,OAAA,EAAS,iBAAA,EAAmB,OAAA,EAAQ;AACrE;AAMO,SAAS,gBAAA,CACd,GAAA,EACA,QAAA,EACA,MAAA,EACiB;AACjB,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AACpE,EAAA,MAAM,QAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,GAAA,CAAI,eAAA,CAAgB,MAAA,IAAU,MAAA,CAAO,kBAAA,EAAoB;AAC7D,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,IAAI,CAAA;AACrB,IAAA,GAAA,CAAI,eAAA,CAAgB,KAAK,IAAI,CAAA;AAC7B,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,YAAA,CACd,KACA,MAAA,EAC8C;AAC9C,EAAA,IAAI,GAAA,CAAI,eAAA,CAAgB,MAAA,IAAU,MAAA,CAAO,aAAA,EAAe;AACtD,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,QAAQ,CAAA,IAAA,EAAO,MAAA,CAAO,aAAa,CAAA,sBAAA,CAAA,EAAyB;AAAA,EAClF;AACA,EAAA,IAAI,GAAA,CAAI,eAAA,CAAgB,MAAA,IAAU,MAAA,CAAO,kBAAA,EAAoB;AAC3D,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,6BAAA,EAA8B;AAAA,EAC5D;AACA,EAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AACpB;AAGA,eAAsB,sBAAA,CACpB,MAAA,EACA,IAAA,GAAiD,EAAC,EAChC;AAClB,EAAA,MAAM,MAAe,EAAC;AACtB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,KAAA,CAAM,YAAA,KAAiB,OAAA,IAAW,IAAA,CAAK,cAAc,OAAA,EAAS;AAClE,IAAA,MAAM,YAAY,KAAA,CAAM,WAAA,GAAc,MAAM,KAAA,CAAM,aAAY,GAAI,IAAA;AAClE,IAAA,IAAI,SAAA,EAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,sBAAsB,MAAA,EAAyB;AAC7D,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAA,EAAA,EAAK,KAAA,CAAM,GAAG,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AACrE,EAAA,OAAO;AAAA,IACL,oBAAA;AAAA,IACA,+KAAA;AAAA,IACA,GAAG,KAAA;AAAA,IACH;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AAEO,SAAS,kBAAkB,KAAA,EAAyC;AACzE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,MAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,IAAI,CAAA;AAClB,IAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,EACf;AACA,EAAA,OAAO,GAAA;AACT;;;ACpFA,IAAM,kBAAA,GAAqB,EAAA;AAQ3B,IAAM,sBAAA,GACJ,sPAAA;AAIF,IAAM,4BAAA,GACJ,2HAAA;AAGF,SAAS,SAAA,CAAU,MAAqB,GAAA,EAAgC;AACtE,EAAA,OAAO,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,QAAQ,GAAG,CAAA;AACtD;AAEO,SAAS,oBAAoB,IAAA,EAAoC;AACtE,EAAA,MAAM,OAAO,UAAA,CAAW;AAAA,IACtB,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,sBAAA;AAAA,IACb,MAAA,EAAQA,MACL,MAAA,CAAO;AAAA,MACN,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,gCAAgC,CAAA;AAAA,MACrE,OAAOA,KAAAA,CACJ,MAAA,GACA,QAAA,EAAS,CACT,SAAS,yEAAoE;AAAA,KACjF,EACA,MAAA,EAAO;AAAA,IACV,IAAA,EAAM,OAAO,EAAE,QAAA,EAAU,OAAM,KAA4C;AACzE,MAAA,MAAM,EAAE,WAAA,EAAa,GAAA,EAAK,MAAA,KAAY,IAAA,CAAa,KAAA;AACnD,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAW,IAAA,CAAa,KAAA,EAAO,QAAQ,CAAA;AACrD,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,EAAE,KAAA,EAAO,CAAA,eAAA,EAAkB,QAAQ,CAAA,4CAAA,CAAA,EAA+C;AAAA,MAC3F;AACA,MAAA,IAAI,MAAM,WAAA,IAAe,CAAE,MAAM,KAAA,CAAM,aAAY,EAAI;AACrD,QAAA,OAAO,EAAE,KAAA,EAAO,CAAA,MAAA,EAAS,QAAQ,CAAA,oCAAA,CAAA,EAAuC;AAAA,MAC1E;AAEA,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,eAAA,CAAgB,QAAA,CAAS,QAAQ,CAAA;AACzD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AACtC,QAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACb,UAAA,OAAO;AAAA,YACL,KAAA,EAAO,CAAA,YAAA,EAAe,QAAQ,CAAA,EAAA,EAAK,MAAM,MAAM,CAAA,oCAAA;AAAA,WACjD;AAAA,QACF;AACA,QAAA,GAAA,CAAI,eAAA,CAAgB,KAAK,QAAQ,CAAA;AAAA,MACnC;AAEA,MAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,MAAA,KAAW,aAAa,MAAM,KAAA,CAAM,MAAA,EAAO,GAAI,KAAA,CAAM,MAAA;AACjF,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,aAAA,EAAc;AAGxC,MAAA,IAAI,KAAA,CAAM,MAAA,IAAU,MAAA,CAAO,qBAAA,EAAuB;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,SAAA,EAAU;AACpC,QAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,GAAA,EAAK,KAAA,EAAO,MAAM,CAAA;AACjD,QAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,gBAAA,IAAmB;AAC7C,QAAA,OAAO;AAAA,UACL,QAAA;AAAA,UACA,MAAA;AAAA,UACA,YAAA,EAAc,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA;AAAA,UACxC,YAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA;AAAA,UAEnC,mBAAA,EAAqB;AAAA,SACvB;AAAA,MACF;AAIA,MAAA,IAAI,eAAyB,EAAC;AAC9B,MAAA,IAAI,eAAgC,EAAC;AACrC,MAAA,IAAA,CAAK,CAAC,SAAS,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA,KAAM,KAAA,CAAM,gBAAA,EAAkB,MAAA,EAAQ;AACzE,QAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,iBAAiB,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,qBAAqB,CAAC,CAAA;AACjG,QAAA,YAAA,GAAe,gBAAA,CAAiB,GAAA,EAAK,KAAA,EAAO,MAAM,CAAA;AAClD,QAAA,IAAI,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,gBAAA,IAAmB;AACpD,QAAA,YAAA,GAAe,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MAC/C;AAEA,MAAA,MAAM,OAAA,GACJ,KAAA,IAAS,KAAA,CAAM,IAAA,GAAO,MAAA,IAAU,CAAA,IAAK,KAAA,CAAM,eAAA,GACvC,MAAM,KAAA,CAAM,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA,GACxC,KAAA;AAEN,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA,EAAc,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA;AAAA,QACxC,UAAA,EAAY,YAAA;AAAA,QACZ,WAAW,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,kBAAkB,EAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,MAAM,CAAA,CAAE,IAAA,EAAM,WAAA,EAAa,CAAA,CAAE,aAAY,CAAE,CAAA;AAAA,QACzG,IAAA,EAAM,0EAAA;AAAA,QACN,GAAI,aAAa,MAAA,GAAS,CAAA,GAAI,EAAE,mBAAA,EAAqB,YAAA,KAAiB;AAAC,OACzE;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAC,KAAa,KAAA,GAAQ,IAAA;AACtB,EAAC,KAAa,QAAA,GAAW,cAAA;AACzB,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,yBAAyB,IAAA,EAAoC;AAC3E,EAAA,MAAM,OAAO,UAAA,CAAW;AAAA,IACtB,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,4BAAA;AAAA,IACb,MAAA,EAAQA,MACL,MAAA,CAAO;AAAA,MACN,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,MAC1B,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,SAAS,oCAAoC;AAAA,KAC3F,EACA,MAAA,EAAO;AAAA,IACV,IAAA,EAAM,OAAO,EAAE,QAAA,EAAU,WAAU,KAAiD;AAClF,MAAA,MAAM,EAAE,WAAA,EAAa,GAAA,EAAK,MAAA,KAAY,IAAA,CAAa,KAAA;AACnD,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAW,IAAA,CAAa,KAAA,EAAO,QAAQ,CAAA;AACrD,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,EAAE,KAAA,EAAO,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAA,CAAA,EAAI;AAAA,MAChD;AACA,MAAA,IAAI,CAAC,GAAA,CAAI,eAAA,CAAgB,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC3C,QAAA,OAAO,EAAE,KAAA,EAAO,CAAA,iBAAA,EAAoB,QAAQ,CAAA,4BAAA,CAAA,EAA+B;AAAA,MAC7E;AAEA,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,OAAO,qBAAqB,CAAA;AAC9D,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AAC1C,MAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,GAAA,EAAK,KAAA,EAAO,MAAM,CAAA;AACjD,MAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,gBAAA,IAAmB;AAE7C,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,YAAY,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,QACnC,WAAW,MAAA,CAAO,MAAA;AAAA,QAClB,SAAA,EAAW,SAAA,CAAU,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,QACrC,GAAI,MAAM,MAAA,GAAS,CAAA,GAAI,EAAE,mBAAA,EAAqB,KAAA,KAAU;AAAC,OAC3D;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAC,KAAa,KAAA,GAAQ,IAAA;AACtB,EAAC,KAAa,QAAA,GAAW,cAAA;AACzB,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,iBAAiB,IAAA,EAAsC;AACrE,EAAA,OAAO,CAAC,mBAAA,CAAoB,IAAI,CAAA,EAAG,wBAAA,CAAyB,IAAI,CAAC,CAAA;AACnE;;;AChJO,SAAS,iBAAoC,IAAA,EAA8F;AAChJ,EAAA,MAAM,QAAA,GAAW,2BAA2B,IAAI,CAAA;AAChD,EAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,QAAA,CAAS,IAAA,KAAS,KAAA;AACnD,EAAA,MAAM,WAAA,GAAc,mBAAmB,QAAQ,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAyE;AAAA,IAC7E,GAAG,IAAA;AAAA,IACH,gBAAgB,QAAA,CAAS,cAAA;AAAA,IACzB,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,eAAe,QAAA,CAAS,aAAA;AAAA,IACxB,SAAS,QAAA,CAAS,OAAA;AAAA,IAClB,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB,QAAQ,EAAE,GAAG,QAAA,CAAS,MAAA,EAAQ,OAAO,WAAA,EAAY;AAAA,IACjD,eAAe,QAAA,CAAS,aAAA;AAAA,IACxB,WAAA,EAAa;AAAA,GACf;AAKA,EAAA,MAAM,SAAA,GAAc,IAAA,CAAK,KAAA,IAAiB,EAAC;AAC3C,EAAA,MAAM,eAAA,GAAuB,EAAE,WAAA,EAAa,MAAA,EAAW,mBAAA,EAAqB,MAAA,EAAW,QAAA,EAAU,MAAA,EAAW,WAAA,EAAa,CAAA,EAAG,cAAA,EAAgB,CAAA,EAAE;AAC9I,EAAA,MAAM,sBAAsB,kBAAA,CAAmB,eAAA,EAAiB,EAAE,eAAA,EAAiB,sBAAA,EAAwB,OAAO,CAAA;AAElH,EAAA,MAAM,iBAA0D,MAAM;AACpE,IAAA,MAAM,GAAA,GAAO,KAAa,cAAA,EAAgB,OAAA;AAC1C,IAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,IAAA,IAAI,QAAQ,IAAA,EAAM,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,eAAe,IAAA,EAAK;AAC9D,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,aAAA,EAAe,IAAI,aAAA,KAAkB,KAAA;AAAA,MACrC,gBAAgB,GAAA,CAAI;AAAA,KACtB;AAAA,EACF,CAAA,GAAG;AAEH,EAAA,MAAM,2BAAA,GAA8B,CAAC,GAAG,SAAA,EAAW,GAAG,mBAAmB,CAAA;AACzE,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,2BAAA,CAA4B,IAAA,CAAK,yBAAA,CAA0B,eAAA,EAAiB,aAAa,CAAC,CAAA;AAAA,EAC5F;AAIA,EAAA,MAAM,MAAA,GAAoB,IAAA,CAAa,MAAA,IAAkC,EAAC;AAC1E,EAAA,MAAM,WAAA,GAA6B,KAAa,WAAA,IAA2C,oBAAA;AAC3F,EAAA,MAAM,aAAA,GAAgB,OAAO,MAAA,GAAS,CAAA;AAMtC,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,YAAA,GAC1B,IAAI,uBAAA,CAAiC,IAAA,CAAK,YAAA,EAAc,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAC,CAAA,GACnF,MAAA;AACJ,EAAA,MAAM,oBAAoB,IAAA,CAAK,YAAA,GAAe,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA,GAAI,MAAA;AACjF,EAAA,MAAM,uBAAuB,gBAAA,IAAoB,iBAAA,EAAmB,qBAAqB,QAAA,GACrF,gBAAA,CAAiB,iBAAgB,GACjC,MAAA;AAQJ,EAAA,MAAM,qBAAqB,MAAqB;AAC9C,IAAA,MAAM,GAAA,GAAW,EAAE,WAAA,EAAa,MAAA,EAAW,mBAAA,EAAqB,MAAA,EAAW,QAAA,EAAU,MAAA,EAAW,WAAA,EAAa,CAAA,EAAG,cAAA,EAAgB,CAAA,EAAE;AAClI,IAAA,MAAM,WAAW,kBAAA,CAAmB,GAAA,EAAK,EAAE,eAAA,EAAiB,sBAAA,EAAwB,OAAO,CAAA;AAC3F,IAAA,MAAM,YAAA,GAAe,0BAA0B,GAAG,CAAA;AAClD,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,SAAA,EAAW,GAAG,QAAQ,CAAA;AAC3C,IAAA,IAAI,oBAAA,EAAsB,QAAA,CAAS,IAAA,CAAK,oBAAoB,CAAA;AAC5D,IAAA,IAAI,eAAe,QAAA,CAAS,IAAA,CAAK,yBAAA,CAA0B,GAAA,EAAK,aAAa,CAAC,CAAA;AAE9E,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,OAAA,GAAU,QAAA;AAChB,MAAA,MAAM,OAAA,GAAU,CAAC,GAAG,OAAA,EAAS,YAAY,CAAA;AACzC,MAAA,OAAO,EAAE,QAAA,EAAU,GAAA,EAAK,oBAAA,EAAsB,OAAA,EAAS,mBAAmB,OAAA,EAAQ;AAAA,IACpF;AAMA,IAAA,MAAM,OAAA,GAAyB,EAAE,QAAA,EAAU,GAAA,EAAK,sBAAsB,EAAC,EAAG,iBAAA,EAAmB,EAAC,EAAE;AAChG,IAAA,MAAM,mBAAmB,sBAAA,EAAuB;AAChD,IAAA,MAAM,cAAA,GAAiB,iBAAiB,EAAE,WAAA,EAAa,kBAAkB,MAAA,EAAQ,MAAA,EAAQ,aAAa,CAAA;AACtG,IAAA,MAAM,YAAA,GAAe,CAAC,GAAG,QAAA,EAAU,GAAG,cAAc,CAAA;AACpD,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,MAAM,WAAW,eAAA,CAAgB;AAAA,QAC/B,IAAA,EAAM,YAAA;AAAA,QACN,iBAAiB,gBAAA,CAAiB,eAAA;AAAA,QAClC;AAAA,OACD,CAAA;AACD,MAAA,OAAA,CAAQ,uBAAuB,QAAA,CAAS,oBAAA;AACxC,MAAA,OAAA,CAAQ,oBAAoB,QAAA,CAAS,iBAAA;AAAA,IACvC,CAAA;AACA,IAAA,gBAAA,CAAiB,gBAAA,GAAmB,OAAA;AACpC,IAAA,OAAA,CAAQ,gBAAA,GAAmB,gBAAA;AAC3B,IAAA,OAAA,EAAQ;AACR,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAIA,EAAA,MAAM,OAAO,WAAA,CAAqB,EAAE,GAAG,WAAA,EAAa,KAAA,EAAO,6BAA6B,CAAA;AACxF,EAAA,IAAA,CAAK,SAAA,CAAU,iBAAiB,QAAA,CAAS,cAAA;AACzC,EAAA,IAAA,CAAK,UAAU,KAAA,GAAQ,QAAA;AAEvB,EAAA,MAAM,oBAAA,GAAuB,QAAA,CAAS,aAAA,CAAc,MAAA,KAAW,KAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,oBAAA,GAAuB,0BAAA,CAA2B,WAAW,CAAA,GAAI,MAAA;AACpF,EAAA,MAAM,YAAA,GAAe,uBAAA,CAAwB,WAAA,EAAa,oBAAoB,CAAA;AAC9E,EAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,WAAA,EAAa,oBAAoB,CAAA;AAG1E,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,GACnB,IAAI,uBAAA,CAAiC,IAAA,CAAK,YAAA,EAAc,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAC,CAAA,GACnF,MAAA;AAEJ,EAAA,MAAM,oBAAA,GAAuB,SAAA,GACzB,SAAA,CAAU,qBAAA,EAAsB,GAChC,EAAA;AAEJ,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,QAAA,CAAS,cAAA,KAAmB,QAAA,CAAS,WAAA,GACjC,CAAA,iBAAA,EAAoB,QAAA,CAAS,cAAc,CAAA,CAAA,CAAA,GAC3C,CAAA,iBAAA,EAAoB,QAAA,CAAS,cAAc,CAAA,QAAA,EAAW,SAAS,WAAW,CAAA,EAAA,CAAA;AAAA,IAC9E,CAAA,gBAAA,EAAmB,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAA;AAAA,IAC1C,kBAAkB,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,iBAAA,EAAoB,QAAA,CAAS,SAAS,YAAY,CAAA,CAAA,CAAA;AAAA,IAC1F,oBAAoB,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,wBAAA,EAA2B,QAAA,CAAS,WAAW,kBAAkB,CAAA,CAAA,CAAA;AAAA,IAC7G,CAAA,sBAAA,EAAyB,QAAA,CAAS,OAAA,CAAQ,kBAAkB,CAAA,CAAA;AAAA,GAC9D,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,SAAS,iBAAiB,QAAA,EAAyB;AACjD,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,KAAS,MAAM,CAAA;AAChF,IAAA,OAAO,MAAA,GAAS,kBAAA,CAAmB,MAAM,CAAA,GAAI,EAAA;AAAA,EAC/C;AAEA,EAAA,eAAe,WAAW,KAAA,EAAwC;AAChE,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,KAAA,CAAM,QAAA,IAAY,EAAE,CAAA;AACnD,IAAA,MAAM,WAAA,GAAc,MAAM,eAAA,CAAgB,WAAA,EAAa,UAAU,KAAK,CAAA;AACtE,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAY;AAAA,EACjC;AAEA,EAAA,eAAe,qBAAqB,KAAA,EAAwC;AAC1E,IAAA,IAAI,CAAC,aAAa,OAAO,KAAA;AACzB,IAAA,IAAI,QAAA,CAAS,MAAA,CAAO,WAAA,KAAgB,QAAA,EAAU,OAAO,KAAA;AACrD,IAAA,MAAM,gBAAgB,KAAA,CAAM,cAAA,GAAiB,KAAA,CAAM,cAAA,CAAe,SAAS,CAAC,CAAA;AAC5E,IAAA,IAAI,CAAC,eAAe,OAAO,KAAA;AAC3B,IAAA,IAAI,SAAS,MAAA,CAAO,WAAA,KAAgB,oBAAoB,aAAA,CAAc,YAAA,CAAa,WAAW,CAAA,EAAG;AAC/F,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAM,WAAA,GAAc,MAAM,yBAAA,CAA0B,WAAA,EAAa,UAAU,aAAA,EAAe,IAAA,CAAK,IAAI,CAAA,EAAA,CAAI,KAAA,CAAM,YAAY,EAAC,EAAG,OAAO,CAAC,OAAA,KAAY,QAAQ,IAAA,KAAS,MAAM,CAAA,CAAE,MAAM,CAAC,CAAA;AACjL,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAY;AAAA,EACjC;AAEA,EAAA,SAAS,iBAAA,CAAkB,KAAU,KAAA,EAA+B;AAClE,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,GAAG,OAAO,KAAA;AACzC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,GAAA,CAAI,WAAA,IAAe,KAAA,CAAM,WAAA,IAAe,CAAA;AAAA,QACjD,OAAO,GAAA,CAAI,QAAA;AAAA,QACX,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACpC,cAAA,EAAgB,IAAI,cAAA,IAAkB;AAAA,OACxC;AAAA,MACA,WAAA,EAAa,GAAA,CAAI,WAAA,IAAe,KAAA,CAAM,WAAA,IAAe;AAAA,KACvD;AAAA,EACF;AAEA,EAAA,SAASwB,eAAc,UAAA,EAA0B;AAC/C,IAAA,MAAM,GAAA,GAAM,iBAAA;AAAA,MACV,CAAC,IAAA,CAAK,YAAA,EAAc,WAAA,EAAa,oBAAA,EAAsB,UAAU,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,MAC5F,eAAA;AAAA,MACA,KAAK,IAAA,IAAQ,OAAA;AAAA,MACb,IAAA,CAAK;AAAA,KACP;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,GAAA,EAAI;AAAA,EACxC;AAEA,EAAA,SAAS,gBAAA,CACP,YAAA,EACA,eAAA,EACA,OAAA,EACY;AACZ,IAAA,MAAM,iBAAA,GAAoB,iCAAiC,eAA+C,CAAA;AAC1G,IAAA,MAAM,SAAA,GAAY,iBAAA,GAAoB,OAAA,CAAQ,iBAAA,GAAoB,OAAA,CAAQ,oBAAA;AAC1E,IAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,KAAA,IAAS,IAAA,CAAK,SAAA;AAElD,IAAA,IAAI,cAAA,CAAe,UAAU,SAAA,EAAW;AACtC,MAAA,OAAO,YAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,YAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,GAAG,cAAA;AAAA,QACH,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AAEA,EAAA,SAAS,8BAA8B,QAAA,EAAiB;AACtD,IAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,EAAS,IAAA,KAAS,WAAW,CAAA;AAC7F,IAAA,IAAI,CAAC,eAAe,OAAO,KAAA;AAC3B,IAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,aAAA,CAAc,UAAU,CAAA,GAAI,aAAA,CAAc,aAAa,EAAC;AACxF,IAAA,OAAO,UAAU,MAAA,KAAW,CAAA;AAAA,EAC9B;AAGA,EAAA,eAAe,YAAA,CACb,YAAA,EACA,kBAAA,EACA,GAAA,EACyE;AACzE,IAAA,IAAI,CAAC,YAAY,OAAO,EAAE,OAAO,YAAA,EAAc,WAAA,EAAa,kBAAA,EAAoB,UAAA,EAAY,KAAA,EAAM;AAClG,IAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,YAAY,CAAA;AAC3C,IAAA,IAAI,CAAC,KAAA,IAAS,MAAA,CAAO,KAAK,KAAK,CAAA,CAAE,WAAW,CAAA,EAAG;AAC7C,MAAA,MAAMF,IAAAA,GAAM,EAAE,GAAI,YAAA,CAAa,OAAO,EAAC,EAAI,0BAA0B,IAAA,EAAK;AAC1E,MAAA,OAAO,EAAE,KAAA,EAAO,EAAE,GAAG,YAAA,EAAc,GAAA,EAAAA,IAAAA,EAAI,EAAiB,WAAA,EAAa,kBAAA,EAAoB,UAAA,EAAY,KAAA,EAAM;AAAA,IAC7G;AACA,IAAA,MAAM,MAAM,EAAE,GAAI,YAAA,CAAa,GAAA,IAAO,EAAC,EAAG;AAC1C,IAAA,OAAO,GAAA,CAAI,wBAAA;AACX,IAAA,MAAM,OAAA,GAAU,MAAM,oBAAA,CAAqB,iBAAA,CAAkB,GAAA,EAAK,EAAE,GAAG,YAAA,EAAc,GAAG,KAAA,EAAO,GAAA,EAAmB,CAAC,CAAA;AACnH,IAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,CAAC,GAAI,OAAA,CAAQ,QAAA,IAAY,kBAAmB,CAAA,EAAG,UAAA,EAAY,IAAA,EAAK;AAAA,EACxG;AAEA,EAAA,MAAM,QAAA,GAAwC;AAAA,IAC5C,MAAA,EAAQ,OAAO,KAAA,EAAmB,MAAA,KAA+D;AAG/F,MAAA,MAAM,UAAU,kBAAA,EAAmB;AACnC,MAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,MAAA,QAAA,CAAS,cAAc,KAAA,CAAM,WAAA;AAC7B,MAAA,QAAA,CAAS,sBAAsB,KAAA,CAAM,mBAAA;AACrC,MAAA,QAAA,CAAS,QAAA,GAAW,MAAM,IAAA,EAAM,KAAA;AAChC,MAAA,QAAA,CAAS,WAAA,GAAc,KAAA,CAAM,WAAA,IAAe,KAAA,CAAM,MAAM,OAAA,IAAW,CAAA;AACnE,MAAA,QAAA,CAAS,cAAA,GAAiB,KAAA,CAAM,IAAA,EAAM,cAAA,IAAkB,CAAA;AAExD,MAAA,MAAM,eAAA,GAAkB,CAACG,MAAAA,KAAsB,iBAAA,CAAkB,UAAUA,MAAK,CAAA;AAKhF,MAAA,MAAM,eAAA,GAAkB,aAAA,GACpB,MAAM,sBAAA,CAAuB,MAAA,EAAQ,EAAE,SAAA,EAAW,WAAA,CAAY,SAAA,EAAW,CAAA,GACzE,EAAC;AACL,MAAA,MAAM,aAAa,eAAA,CAAgB,MAAA,GAAS,CAAA,GAAI,qBAAA,CAAsB,eAAe,CAAA,GAAI,MAAA;AAGzF,MAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,KAAK,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,EAAG,IAAA,KAAS,QAAA;AACtF,MAAA,MAAM,eAAe,gBAAA,GAAmB,CAAC,GAAI,KAAA,CAAM,YAAY,EAAG,CAAA,GAAI,CAACD,eAAc,UAAU,CAAA,EAAG,GAAI,KAAA,CAAM,QAAA,IAAY,EAAG,CAAA;AAC3H,MAAA,IAAI,KAAA,GAAoB,gBAAA,CAAiB,MAAM,UAAA,CAAW,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,YAAA,EAA4B,CAAA,EAAG,YAAA,EAAc,OAAO,CAAA;AACpI,MAAA,IAAI,UAAA,GAAgD,IAAA;AACpD,MAAA,IAAI,WAAA,GAAc,CAAC,GAAG,YAAY,CAAA;AAClC,MAAA,MAAM,wBAAyB,MAAA,EAAQ,MAAA,EAAQ,YAAA,IAAgB,QAAA,CAAS,OAAO,YAAA,IAAgB,EAAA;AAC/F,MAAA,MAAM,iBAAiB,IAAA,CAAK,GAAA,CAAI,qBAAA,GAAwB,CAAA,GAAI,GAAG,EAAE,CAAA;AAEjE,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,EAAgB,CAAA,EAAA,EAAK;AACvC,QAAA,KAAA,GAAQ,gBAAA,CAAiB,EAAE,GAAG,KAAA,EAAO,UAAU,WAAA,EAAY,EAAiB,aAAa,OAAO,CAAA;AAEhG,QAAA,MAAM,IAAA,GAAO,oBAAA,GAAuB,YAAA,CAAa,KAAK,CAAA,GAAI,OAAA;AAC1D,QAAA,IAAI,IAAA,KAAS,sBAAsB,UAAA,EAAY;AAC7C,UAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,KAAA,EAAO,aAAa,QAAQ,CAAA;AAC9D,UAAA,KAAA,GAAQ,MAAA,CAAO,KAAA;AACf,UAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AACrB,UAAA,IAAI,OAAO,UAAA,EAAY;AAAA,QACzB;AAGA,QAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,KAAA,EAAO,QAAQ,CAAA;AACxD,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,aAAA,EAAc,EAAiB,MAAM,CAAA;AACzF,QAAA,UAAA,GAAa,GAAA;AAEb,QAAA,MAAM,mBAAmB,KAAA,CAAM,SAAA;AAC/B,QAAA,MAAM,wBAAwB,KAAA,CAAM,cAAA;AACpC,QAAA,MAAM,cAAc,KAAA,CAAM,IAAA;AAC1B,QAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,cAAc,MAAM,CAAA;AAChE,QAAA,WAAA,GAAc,CAAC,GAAG,WAAA,EAAa,GAAG,gBAAgB,CAAA;AAClD,QAAA,KAAA,GAAU,IAAI,KAAA,IAAwB,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,IAAI,QAAA,EAAS;AACzE,QAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,WAAA,EAAY;AAE1C,QAAA,IAAI,gBAAA,IAAoB,gBAAA,CAAiB,MAAA,GAAS,CAAA,KAAM,CAAC,MAAM,SAAA,IAAa,KAAA,CAAM,SAAA,CAAU,MAAA,KAAW,CAAA,CAAA,EAAI;AACzG,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,gBAAA,EAAiB;AAAA,QAClD;AACA,QAAA,IAAI,qBAAA,IAAyB,qBAAA,CAAsB,MAAA,GAAS,CAAA,KAAM,CAAC,MAAM,cAAA,IAAkB,KAAA,CAAM,cAAA,CAAe,MAAA,KAAW,CAAA,CAAA,EAAI;AAC7H,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,cAAA,EAAgB,qBAAA,EAAsB;AAAA,QAC5D;AACA,QAAA,IAAI,WAAA,IAAe,CAAC,KAAA,CAAM,IAAA,EAAM;AAC9B,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC;AACA,QAAA,KAAA,GAAQ,gBAAA,CAAiB,gBAAgB,MAAM,UAAA,CAAW,KAAK,CAAC,CAAA,EAAG,aAAa,OAAO,CAAA;AACvF,QAAA,QAAA,CAAS,cAAc,KAAA,CAAM,WAAA;AAC7B,QAAA,QAAA,CAAS,sBAAsB,KAAA,CAAM,mBAAA;AAGrC,QAAA,IAAK,KAAA,CAAc,GAAA,EAAK,oBAAA,IAAwB,UAAA,EAAY;AAC1D,UAAA,MAAM,MAAM,EAAE,GAAI,KAAA,CAAM,GAAA,IAAO,EAAC,EAAG;AACnC,UAAA,OAAO,GAAA,CAAI,oBAAA;AACX,UAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAA,EAAI;AACxB,UAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,KAAA,EAAO,aAAa,QAAQ,CAAA;AAC9D,UAAA,KAAA,GAAQ,MAAA,CAAO,KAAA;AACf,UAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AACrB,UAAA;AAAA,QACF;AAGA,QAAA,IAAK,KAAA,CAAc,KAAK,gCAAA,EAAkC;AAI1D,QAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,UAAA,EAAY,MAAA,IAAU,IAAA,EAAM;AAMrD,QAAA,IAAI,6BAAA,CAA8B,gBAAgB,CAAA,EAAG;AAGrD,QAAA,IAAI,oBAAA,EAAsB;AACxB,UAAA,MAAM,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC/B,UAAA,IAAI,KAAA,KAAU,sBAAsB,UAAA,EAAY;AAC9C,YAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,KAAA,EAAO,aAAa,QAAQ,CAAA;AAC9D,YAAA,KAAA,GAAQ,MAAA,CAAO,KAAA;AACf,YAAA,WAAA,GAAc,MAAA,CAAO,WAAA;AACrB,YAAA,IAAI,OAAO,UAAA,EAAY;AAAA,UACzB;AAAA,QACF;AAQA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,MAAM,CAAA;AAC3C,QAAA,UAAA,GAAa,GAAA;AAAA,MACf;AAGA,MAAA,IAAI,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG;AACjD,QAAA,IAAI,WAAW,KAAA,EAAO;AACpB,UAAA,UAAA,GAAa,EAAE,GAAG,UAAA,EAAY,KAAA,EAAO,EAAE,GAAG,UAAA,CAAW,KAAA,EAAO,SAAA,EAAW,KAAA,CAAM,SAAA,EAAW,cAAA,EAAgB,MAAM,cAAA,EAAgB,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,QAAA,EAAU,WAAA,EAAY,EAAE;AAAA,QAC1O,CAAA,MAAO;AACL,UAAA,UAAA,GAAa,EAAE,GAAG,UAAA,EAAY,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,KAAA,CAAM,SAAA,EAAW,cAAA,EAAgB,KAAA,CAAM,gBAAgB,WAAA,EAAa,KAAA,CAAM,WAAA,EAAa,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,aAAa,KAAA,CAAM,WAAA,EAAa,QAAA,EAAU,WAAA,EAAY,EAAE;AAAA,QAC/N;AAAA,MACF,CAAA,MAAA,IAAW,WAAW,KAAA,EAAO;AAC3B,QAAA,UAAA,GAAa,EAAE,GAAG,UAAA,EAAY,OAAO,EAAE,GAAG,WAAW,KAAA,EAAO,WAAA,EAAa,MAAM,WAAA,EAAa,IAAA,EAAM,MAAM,IAAA,EAAM,WAAA,EAAa,MAAM,WAAA,EAAa,QAAA,EAAU,aAAY,EAAE;AAAA,MACxK;AAEA,MAAA,OAAO,UAAA;AAAA,IACT,CAAA;AAAA,IACA,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,qBAAqB,IAAA,CAAK,mBAAA;AAAA,IAC1B,qBAAqB,IAAA,CAAK,mBAAA;AAAA,IAC1B,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,WAAW,IAAA,CAAK;AAAA,GAClB;AAEA,EAAA,OAAO,QAAA;AACT;;;AC9WA,SAAS,uBAAuB,MAAA,EAAkD;AAChF,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,MAAA;AAAA,MACP,cAAA,EAAgB,MAAA;AAAA,MAChB,WAAA,EAAa,MAAA,KAAW,QAAA,GAAW,UAAA,GAAa;AAAA,KAClD;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,WAAA,EAAa,MAAA,CAAO,WAAA,KAAgB,MAAA,CAAO,cAAA,KAAmB,WAAW,MAAA,CAAO,aAAA,EAAe,OAAA,IAAW,UAAA,GAAa,MAAA,CAAO,cAAA,CAAA;AAAA,IAC9H,eAAe,MAAA,CAAO;AAAA,GACxB;AACF;AAEA,SAAS,cAAc,KAAA,EAAmC;AACxD,EAAA,OAAA,CAAQ,KAAA,IAAS,IAAI,WAAA,EAAY;AACnC;AAEA,SAAS,KAAA,CAAM,WAAmB,WAAA,EAA6B;AAC7D,EAAA,IAAI,WAAA,IAAe,GAAG,OAAO,CAAA;AAC7B,EAAA,OAAO,MAAA,CAAA,CAAQ,SAAA,GAAY,WAAA,EAAa,OAAA,CAAQ,CAAC,CAAC,CAAA;AACpD;AAEA,SAAS,IAAI,MAAA,EAA0B;AACrC,EAAA,OAAO,OAAO,MAAA,CAAO,CAAC,KAAK,KAAA,KAAU,GAAA,GAAM,OAAO,CAAC,CAAA;AACrD;AAEA,SAAS,KAAK,MAAA,EAA0B;AACtC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAChC,EAAA,OAAO,MAAA,CAAA,CAAQ,IAAI,MAAM,CAAA,GAAI,OAAO,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AACxD;AAEA,SAAS,mBAAmB,KAAA,EAAoB;AAC9C,EAAA,IAAI,CAAC,KAAA,EAAO,MAAA,IAAU,OAAO,KAAA,CAAM,MAAA,KAAW,UAAU,OAAO,CAAA;AAC/D,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,MAAM,EAAE,MAAA,CAAO,CAAC,GAAA,EAAa,KAAA,KAAe,OAAO,MAAA,CAAO,KAAA,EAAO,KAAK,CAAA,IAAK,IAAI,CAAC,CAAA;AAC7G;AAEA,SAAS,kBACP,UAAA,EACA,QAAA,EACA,SACA,MAAA,EACA,KAAA,EACA,WACA,WAAA,EACgB;AAChB,EAAA,MAAM,iBAAA,GAAoB,cAAc,OAAO,CAAA;AAC/C,EAAA,MAAM,cAAA,GAAA,CAAkB,QAAA,CAAS,eAAA,IAAmB,EAAC,EAAG,MAAA,CAAO,CAAC,MAAA,KAAW,iBAAA,CAAkB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAC,CAAC,CAAA;AAC5H,EAAA,MAAM,gBAAgB,QAAA,CAAS,aAAA,IAAiB,EAAC,EAAG,MAAA,CAAO,CAAC,IAAA,KAAS;AACnE,IAAA,MAAM,cAAc,KAAA,EAAO,WAAA,EAAa,KAAK,CAAC,KAAA,KAAU,MAAM,GAAA,KAAQ,IAAA,CAAK,OAAO,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA,CAAE,QAAA,CAAS,cAAc,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAChJ,IAAA,MAAM,YAAA,GAAe,KAAA,EAAO,cAAA,EAAgB,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAA,IAAO,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA,CAAE,QAAA,CAAS,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAC,CAAC,CAAA;AAC1L,IAAA,OAAO,OAAA,CAAQ,eAAe,YAAA,IAAgB,iBAAA,CAAkB,SAAS,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAC,CAAA;AAAA,EACrG,CAAC,CAAA;AACD,EAAA,MAAM,eAAA,GAAA,CAAmB,QAAA,CAAS,gBAAA,IAAoB,IAAI,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,iBAAA,CAAkB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAC,CAAC,CAAA;AAC/H,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,MAAM,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,KAAA,KAAU,SAAS,CAAA;AAClG,EAAA,MAAM,gBAAA,GAAA,CAAoB,QAAA,CAAS,iBAAA,IAAqB,IAAI,MAAA,CAAO,CAAC,QAAA,KAAa,SAAA,CAAU,KAAK,CAAC,KAAA,KAAU,KAAA,CAAM,IAAA,KAAS,QAAQ,CAAC,CAAA;AACnI,EAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,CAAiB,MAAA,EAAQ,KAAK,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAC,CAAA;AAClF,EAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,YAAA,CAAa,MAAA,EAAA,CAAS,QAAA,CAAS,eAAA,EAAiB,MAAA,IAAU,CAAA,KAAM,QAAA,CAAS,aAAA,EAAe,UAAU,CAAA,CAAE,CAAA;AACzJ,EAAA,MAAM,uBAAuB,KAAA,CAAM,eAAA,CAAgB,QAAQ,QAAA,CAAS,gBAAA,EAAkB,UAAU,CAAC,CAAA;AACjG,EAAA,MAAM,kBAAkB,KAAA,CAAM,gBAAA,CAAiB,QAAQ,QAAA,CAAS,iBAAA,EAAmB,UAAU,CAAC,CAAA;AAC9F,EAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,MAAM,IAAA,KAAS,WAAA,IAAe,KAAA,CAAM,KAAA,KAAU,OAAO,CAAA;AACxG,EAAA,MAAM,YAAA,GAAe,mBAAA,GAAsB,MAAA,CAAA,CAAQ,iBAAA,CAAkB,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAI,CAAA;AACvG,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,MAAA,KAAW,CAAA,GAAI,CAAA,GAAI,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,SAAA,CAAU,MAAA,GAAS,IAAA,CAAK,IAAI,QAAA,CAAS,iBAAA,EAAmB,MAAA,IAAU,CAAA,EAAG,CAAC,CAAC,IAAI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAChL,EAAA,MAAM,OAAA,GAAU,cAAA,IAAkB,GAAA,IAAO,oBAAA,IAAwB,GAAA;AAEjE,EAAA,OAAO;AAAA,IACL,IAAI,QAAA,CAAS,EAAA;AAAA,IACb,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,OAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,iBAAiB,MAAA,CAAA,CAAA,CAAS,eAAA,GAAkB,iBAAiB,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,IAC1E,YAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAS,UAAA,CAAW,cAAA;AAAA,IACpB,cAAc,UAAA,CAAW,KAAA;AAAA,IACzB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,KAAA,EAAO,OAAA,GAAU,EAAC,GAAI;AAAA,MACpB,cAAA,GAAiB,MAAM,yBAAA,GAA4B,EAAA;AAAA,MACnD,oBAAA,GAAuB,MAAM,qCAAA,GAAwC,EAAA;AAAA,MACrE,eAAA,GAAkB,MAAM,4CAAA,GAA+C;AAAA,KACzE,CAAE,OAAO,OAAO;AAAA,GAClB;AACF;AAEA,SAAS,iBAAiB,WAAA,EAAmD;AAC3E,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,WAAA,CAAY,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,EAAQ,WAAA,CAAY,MAAM,CAAA;AACnG,EAAA,MAAM,cAAA,GAAiB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,cAAc,CAAC,CAAA;AAC9E,EAAA,MAAM,oBAAA,GAAuB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAC1F,EAAA,MAAM,eAAA,GAAkB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,eAAe,CAAC,CAAA;AAChF,EAAA,MAAM,YAAA,GAAe,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,YAAY,CAAC,CAAA;AAC1E,EAAA,MAAM,eAAA,GAAkB,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,eAAe,CAAC,CAAA;AAChF,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,SAAS,CAAC,CAAA;AACpE,EAAA,MAAM,WAAA,GAAc,IAAI,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,WAAA,IAAe,CAAC,CAAC,CAAA;AAC5E,EAAA,MAAM,aAAA,GAAgB,eAAA;AACtB,EAAA,MAAM,SAAA,GAAY,WAAA,IAAe,CAAA,GAAI,CAAA,GAAI,MAAA,CAAA,CAAQ,CAAA,IAAK,CAAA,GAAI,WAAA,GAAc,GAAA,CAAA,EAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC1F,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAA,CACX,IAAA,GAAO,WAAA,GACL,MAAO,eAAA,GACP,IAAA,GAAO,aAAA,GACP,GAAA,GAAO,YAAA,GACP,GAAA,GAAO,SAAA,EACV,OAAA,CAAQ,CAAC,CAAC,CAAA;AAEZ,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,eAAsB,yBAAyB,MAAA,EAAyD;AACtG,EAAA,MAAM,UAA+B,EAAC;AAEtC,EAAA,KAAA,MAAW,aAAA,IAAiB,OAAO,QAAA,EAAU;AAC3C,IAAA,MAAM,UAAA,GAAa,uBAAuB,aAAa,CAAA;AACvD,IAAA,MAAM,cAAgC,EAAC;AAEvC,IAAA,KAAA,MAAW,QAAA,IAAY,OAAO,KAAA,EAAO;AACnC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,gBAAgB,UAAU,CAAA;AACtE,MAAA,MAAM,SAA4B,EAAC;AACnC,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,MAAA,CAAO;AAAA,QAChC,QAAA,EAAU,CAAC,EAAE,IAAA,EAAM,QAAQ,OAAA,EAAS,QAAA,CAAS,QAAQ;AAAA,OACvD,EAAiB;AAAA,QACf,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACnB;AAAA,OACD,CAAA;AAED,MAAA,WAAA,CAAY,IAAA,CAAK,iBAAA;AAAA,QACf,UAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,CAAO,OAAA;AAAA,QACP,MAAA;AAAA,QACA,MAAA,CAAO,KAAA;AAAA,QACP,IAAA,CAAK,KAAI,GAAI,SAAA;AAAA,QACb,kBAAA,CAAmB,MAAA,CAAO,QAAA,EAAU,KAAK;AAAA,OAC1C,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,SAAS,UAAA,CAAW,cAAA;AAAA,MACpB,cAAc,UAAA,CAAW,KAAA;AAAA,MACzB,aAAa,UAAA,CAAW,WAAA;AAAA,MACxB,OAAA,EAAS,iBAAiB,WAAW,CAAA;AAAA,MACrC,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,OAAA;AACT;ACzKA,IAAM,GAAA,GAAOE,4BAAuE,OAAA,IAAYA,0BAAA;AAChG,IAAM,aAAa,IAAI,GAAA,CAAI,EAAE,SAAA,EAAW,MAAwB,CAAA;AAC/D,UAAA,CAAmB,KAAK,MAAA,GAAS,KAAA;AAElC,SAAS,YAAA,CAAa,SAA0B,KAAA,EAAwB;AACtE,EAAA,IAAI,OAAA,YAAmB,QAAQ,OAAO,OAAA;AACtC,EAAA,OAAO,IAAI,MAAA,CAAO,OAAA,EAAS,KAAA,IAAS,GAAG,CAAA;AACzC;AAEA,SAAS,WAAW,OAAA,EAAmC;AACrD,EAAA,OAAO,eAAA,CAAgB,OAAA,CAAQ,aAAA,EAAe,OAAA,IAAW,EAAE,CAAA;AAC7D;AAEA,SAAS,WAAW,OAAA,EAAmC;AACrD,EAAA,OAAO,qBAAA,CAAsB,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAO,CAAC,CAAA;AACzE;AAcO,SAAS,UAAU,OAAA,EAA0C;AAClE,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,OAAA,EAAS,QAAQ,KAAK,CAAA;AACzD,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AACrC,EAAA,MAAM,iBACJ,OAAA,CAAQ,cAAA,IAAkB,CAAA,0BAAA,EAA6B,KAAA,CAAM,UAAU,CAAA,CAAA;AACzE,EAAA,MAAM,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,OAAA;AACrD,EAAA,MAAM,YAAA,GAAe,QAAQ,YAAA,KAAiB,IAAA;AAE9C,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,kBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAA;AAClC,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,YAAA,GAAe,OAAA,GAAU,CAAC,OAAA;AACzC,MAAA,MAAM,WAAA,GAAc,UAAU,gBAAA,GAAmB,OAAA;AACjD,MAAA,OAAO;AAAA,QACL,MAAA;AAAA,QACA,MAAA,EAAQ,UAAU,cAAA,GAAiB,MAAA;AAAA,QACnC,WAAA;AAAA,QACA,OAAA,EAAS,OAAA,GAAU,EAAE,OAAA,EAAS,KAAA,CAAM,QAAA,EAAS,EAAG,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,GAAE,GAAI;AAAA,OACtF;AAAA,IACF;AAAA,GACF;AACF;AAYA,SAAS,iBACP,MAAA,EAC6D;AAC7D,EAAA,IAAK,QAAyB,IAAA,EAAM;AAClC,IAAA,MAAM,KAAA,GAAQ,MAAA;AACd,IAAA,OAAO,CAAC,KAAA,KAAmB;AACzB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAA,CAAU,KAAK,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,OAAO,MAAA,CAAO,OAAA;AAAA,QACd,MAAA,EAAQ,MAAA,CAAO,OAAA,GACX,MAAA,GACA,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO;AAAA,OACtD;AAAA,IACF,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAA8B,UAAA,CAAW,OAAA,CAAQ,MAAqB,CAAA;AAC5E,EAAA,OAAO,CAAC,KAAA,KAAmB;AACzB,IAAA,MAAM,KAAA,GAAQ,UAAU,KAAK,CAAA;AAC7B,IAAA,MAAM,MAAA,GAAU,SAAA,CAAU,MAAA,EAA6C,GAAA,CAAI,CAAC,GAAA,KAAQ;AAClF,MAAA,MAAMxB,KAAAA,GAAQ,cAAA,IAAkB,GAAA,IAAO,OAAO,GAAA,CAAI,YAAA,KAAiB,QAAA,IAAY,GAAA,CAAI,YAAA,CAAa,MAAA,GAAS,CAAA,GACrG,GAAA,CAAI,eACF,GAAA,CAAY,QAAA;AAClB,MAAA,OAAO,GAAGA,KAAAA,IAAQ,GAAG,CAAA,CAAA,EAAI,GAAA,CAAI,WAAW,SAAS,CAAA,CAAA;AAAA,IACnD,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,CAAC,CAAC,OAAO,MAAA,EAAO;AAAA,EAClC,CAAA;AACF;AAEO,SAAS,eAAe,OAAA,EAA+C;AAC5E,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AACrC,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,OAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA;AAEjD,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,wBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAA;AAClC,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,UAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AAAA,QACxB;AACA,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,KAAA;AAAA,UACR,WAAA;AAAA,UACA,MAAA,EAAQ,oCAAA;AAAA,UACR,OAAA,EAAS,EAAE,KAAA,EAAO,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA;AAAE,SACrE;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AAAA,MACxB;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA;AAAA,QACA,MAAA,EAAQ,wCAAA;AAAA,QACR,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA;AAAO,OACnC;AAAA,IACF;AAAA,GACF;AACF;AAWA,SAAS,mBAAA,CAAoB,MAAc,SAAA,EAA6C;AACtF,EAAA,IAAI,CAAC,SAAA,EAAW,MAAA,EAAQ,OAAO,KAAA;AAC/B,EAAA,OAAO,SAAA,CAAU,KAAK,CAAC,OAAA,KAAY,aAAa,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AACrE;AAEA,IAAM,WAAA,GAAc,0EAAA;AAEb,SAAS,gBAAA,CAAiB,OAAA,GAAoC,EAAC,EAAkB;AACtF,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AACrC,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,MAAA;AAE3C,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,yBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAO,CAAA,IAAK,EAAA;AAClC,MAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAE,QAAQ,IAAA,EAAK;AACjC,MAAA,IAAI,mBAAA,CAAoB,IAAA,EAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAChD,QAAA,OAAO,EAAE,QAAQ,IAAA,EAAK;AAAA,MACxB;AACA,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACrC,MAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAE,QAAQ,IAAA,EAAK;AACpC,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,WAAA;AAAA,QACA,MAAA,EAAQ,6CAAA;AAAA,QACR,SAAS,EAAE,OAAA,EAAS,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAE,OACzC;AAAA,IACF;AAAA,GACF;AACF;AAEA,IAAM,cAAA,GAAiBF,MAAE,MAAA,CAAO;AAAA,EAC9B,KAAA,EAAOA,KAAAA,CAAE,OAAA,EAAQ,CAAE,SAAS,wCAAwC,CAAA;AAAA,EACpE,WAAA,EAAaA,MAAE,IAAA,CAAK,CAAC,SAAS,MAAA,EAAQ,OAAO,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACzD,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,GAAA,EAAK,yCAAyC,EAClD,QAAA,EAAS;AAAA,EACZ,SAASA,KAAAA,CAAE,MAAA,CAAOA,MAAE,GAAA,EAAK,EAAE,QAAA;AAC7B,CAAC,CAAA;AAYD,SAAS,eAAe,OAAA,EAAmC;AACzD,EAAA,MAAM,MAAA,GAAS,WAAW,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,WAAW,OAAO,CAAA;AACrC,EAAA,OAAO,IAAA,CAAK,SAAA;AAAA,IACV;AAAA,MACE,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAA,EAAe,MAAA;AAAA,MACf,UAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,QAAQ,OAAA,EAAS,IAAA;AAAA,UACvB,OAAA,EAAS,QAAQ,OAAA,EAAS;AAAA;AAC5B;AACF,KACF;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,iBAAiB,OAAA,EAA0C;AACzE,EAAA,MAAM,cAAA,GAAiB,QAAQ,cAAA,IAAkB,cAAA;AACjD,EAAA,MAAM,mBAAA,GAAsB,QAAQ,mBAAA,IAAuB,OAAA;AAE3D,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,uBAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,OAAA,GAAU,eAAe,OAAO,CAAA;AACtC,MAAA,MAAM,YAAA,GACJ,QAAQ,YAAA,IACR,8PAAA;AAEF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO;AAAA,QACxC,QAAA,EAAU;AAAA,UACR,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,YAAA,EAAa;AAAA,UACxC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,OAAA;AAAQ;AACnC,OACD,CAAA;AAED,MAAA,IAAI,SAAS,MAAA,CAAO,MAAA;AACpB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,eAAe,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,QAC1D,CAAA,CAAA,MAAQ;AACN,UAAA,MAAA,GAAS,eAAe,KAAA,CAAM,EAAE,OAAO,KAAA,EAAO,MAAA,EAAQ,iDAAiD,CAAA;AAAA,QACzG;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,KAAgB,MAAA,CAAO,QAAQ,OAAA,GAAU,mBAAA,CAAA;AACpE,MAAA,OAAO;AAAA,QACL,QAAQ,MAAA,CAAO,KAAA;AAAA,QACf,WAAA;AAAA,QACA,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO;AAAA,OAClB;AAAA,IACF;AAAA,GACF;AACF;AA8BO,SAAS,mBAAmB,OAAA,EAA2C;AAC5E,EAAA,MAAM,mBAAA,GAAsB,QAAQ,kBAAA,IAAsB,OAAA;AAC1D,EAAA,OAAO;AAAA,IACL,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,KAAA,EAAO,QAAQ,KAAA,IAAS,2BAAA;AAAA,IACxB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,MAAM,SAAS,OAAA,EAAS;AACtB,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AAC9C,MAAA,IAAI,OAAO,YAAY,SAAA,EAAW;AAChC,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,OAAA;AAAA,UACR,WAAA,EAAa,UAAU,OAAA,GAAU;AAAA,SACnC;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,QAAQ,OAAA,CAAQ,KAAA;AAAA,QAChB,WAAA,EAAa,OAAA,CAAQ,WAAA,KAAgB,OAAA,CAAQ,QAAQ,OAAA,GAAU,mBAAA,CAAA;AAAA,QAC/D,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA,GACF;AACF;;;AC5QO,SAAS,oBAAA,CACd,SACA,OAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,UAAU,EAAE,OAAA,EAAS,GAAI,OAAA,EAAS,IAAA,IAAQ,EAAC,EAAI,CAAA;AAC5D,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,IAAI,OAAA,EAAS,WAAA;AAAA,IACb,KAAA,EAAO,OAAA,EAAS,cAAA,IAAkB,OAAA,EAAS,MAAM,KAAA,IAAS,iBAAA;AAAA,IAC1D,WAAA,EAAa,OAAA,EAAS,oBAAA,IAAwB,OAAA,EAAS,IAAA,EAAM,WAAA;AAAA,IAC7D,WAAW,OAAA,EAAS,MAAA;AAAA,IACpB,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,IACb,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AACH;AAMO,SAAS,mBAAA,CACd,QACA,OAAA,EACuB;AACvB,EAAA,MAAM,IAAA,GAAO,eAAe,EAAE,MAAA,EAAQ,GAAI,OAAA,EAAS,IAAA,IAAQ,EAAC,EAAI,CAAA;AAChE,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,IAAI,OAAA,EAAS,WAAA;AAAA,IACb,KAAA,EAAO,OAAA,EAAS,cAAA,IAAkB,OAAA,EAAS,MAAM,KAAA,IAAS,uBAAA;AAAA,IAC1D,WAAA,EAAa,OAAA,EAAS,oBAAA,IAAwB,OAAA,EAAS,IAAA,EAAM,WAAA;AAAA,IAC7D,WAAW,OAAA,EAAS,MAAA;AAAA,IACpB,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,IACb,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AACH;AAMO,SAAS,oBAAoB,OAAA,EAAuD;AACzF,EAAA,MAAM,WAAA,GAAc,EAAE,WAAA,EAAa,MAAA,EAAiB,GAAI,OAAA,EAAS,IAAA,IAAQ,EAAC,EAAG;AAC7E,EAAA,MAAM,IAAA,GAAO,iBAAiB,WAAW,CAAA;AACzC,EAAA,OAAO,eAAA,CAAgB;AAAA,IACrB,IAAI,OAAA,EAAS,WAAA;AAAA,IACb,KAAA,EAAO,OAAA,EAAS,cAAA,IAAkB,WAAA,CAAY,KAAA,IAAS,yBAAA;AAAA,IACvD,WAAA,EAAa,OAAA,EAAS,oBAAA,IAAwB,WAAA,CAAY,WAAA;AAAA,IAC1D,WAAW,OAAA,EAAS,MAAA;AAAA,IACpB,MAAA,EAAQ,CAAC,IAAI,CAAA;AAAA,IACb,iBAAiB,OAAA,EAAS,eAAA;AAAA,IAC1B,aAAa,OAAA,EAAS,WAAA;AAAA,IACtB,UAAU,OAAA,EAAS;AAAA,GACpB,CAAA;AACH;;;ACkBO,SAAS,UAAA,GAAyB;AACvC,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,CAAA;AAAA,IACb,YAAA,EAAc,CAAA;AAAA,IACd,WAAA,EAAa,CAAA;AAAA,IACb,iBAAA,EAAmB,CAAA;AAAA,IACnB,iBAAA,EAAmB,CAAA;AAAA,IACnB,kBAAA,EAAoB,CAAA;AAAA,IACpB,eAAA,EAAiB;AAAA,GACnB;AACF;AAiIO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EACvC,WAAA,CACE,OAAA,EACgB,QAAA,EACA,UAAA,EACA,YAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;;;ACzPA,IAAM,aAAA,GAAkG;AAAA,EACtG,UAAA,EAAY,CAAA;AAAA,EACZ,WAAA,EAAa,GAAA;AAAA,EACb,UAAA,EAAY;AACd,CAAA;AAEO,IAAe,eAAf,MAA4B;AAAA,EAA5B,WAAA,GAAA;AAEL,IAAA,IAAA,CAAU,WAAA,GAAmC,aAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAe7C,MAAgB,iBAAiB,OAAA,EAAqD;AACpF,IAAA,MAAM,SAAS,IAAA,CAAK,WAAA;AACpB,IAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,UAAA,IAAc,cAAc,UAAU,CAAA;AAC5E,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,WAAA,IAAe,cAAc,WAAW,CAAA;AAC7E,IAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,WAAW,MAAA,CAAO,UAAA,IAAc,cAAc,UAAU,CAAA;AAElF,IAAA,IAAI,QAAA;AACJ,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,UAAA,EAAY,OAAA,EAAA,EAAW;AACtD,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,EAAQ;AAC1B,MAAA,MAAM,WAAA,GAAc,IAAI,MAAA,KAAW,GAAA,IAAQ,IAAI,MAAA,IAAU,GAAA,IAAO,IAAI,MAAA,GAAS,GAAA;AAC7E,MAAA,IAAI,CAAC,aAAa,OAAO,GAAA;AAGzB,MAAA,MAAM,YAAY,MAAA,CAAO,WAAA;AACzB,MAAA,IAAI,SAAA,IAAa,CAAC,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAI,MAAA,EAAO,EAAG,OAAO,CAAA,EAAG,OAAO,GAAA;AAErE,MAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,QAAA,QAAA,GAAW,GAAA;AACX,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAChD,MAAA,IAAI,KAAA,GAAQ,KAAK,GAAA,CAAI,QAAA,EAAU,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAC,CAAA;AAC/D,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,QAAA,GAAW,OAAO,UAAU,CAAA;AAClC,QAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,QAAQ,GAAG,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,QAAA,GAAW,GAAI,CAAC,CAAA;AAAA,MAC1F;AAEA,MAAA,IAAI;AAAE,QAAA,MAAM,IAAI,IAAA,EAAK;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAAe;AAC/C,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,MAAM,UAAA,CAAW,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AACF;;;AClEA,gBAAuB,cAAA,CACrB,MACA,MAAA,EACyC;AACzC,EAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI,QAAQ,OAAA,EAAS;AACrB,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAGhD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAEvC,MAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,QAAA,MAAM,KAAA,GAAQ,cAAc,IAAI,CAAA;AAChC,QAAA,IAAI,OAAO,MAAM,KAAA;AAAA,MACnB;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,CAAO,MAAK,EAAG;AACjB,MAAA,MAAM,KAAA,GAAQ,cAAc,MAAM,CAAA;AAClC,MAAA,IAAI,OAAO,MAAM,KAAA;AAAA,IACnB;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAEA,SAAS,cAAc,KAAA,EAAgC;AACrD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,KAAA;AACJ,EAAA,MAAM,YAAsB,EAAC;AAE7B,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,EAAG;AACvC,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAE1B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,KAAA,GAAQ,EAAA;AAAA,IACV,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAC9B,MAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,CAAC,CAAA;AAC/B,MAAA,IAAI,MAAM,UAAA,CAAW,GAAG,GAAG,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,IAClD;AAEA,IAAA,QAAQ,KAAA;AAAO,MACb,KAAK,OAAA;AACH,QAAA,KAAA,GAAQ,KAAA;AACR,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AACpB,QAAA;AAAA,MACF,KAAK,IAAA;AACH,QAAA,EAAA,GAAK,KAAA;AACL,QAAA;AAAA,MACF,KAAK,OAAA,EAAS;AACZ,QAAA,MAAM,CAAA,GAAI,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AAC5B,QAAA,IAAI,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,GAAQ,CAAA;AACvB,QAAA;AAAA,MACF;AAAA;AACF,EACF;AAEA,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACnC,EAAA,OAAO,EAAE,OAAO,IAAA,EAAM,SAAA,CAAU,KAAK,IAAI,CAAA,EAAG,IAAI,KAAA,EAAM;AACxD;;;AChFO,IAAM,uBAAA,GAA2D;AAAA,EACtE,OAAA,EAAS,IAAA;AAAA,EACT,GAAA,EAAK,IAAA;AAAA,EACL,MAAA,EAAQ,IAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEO,IAAM,oBAAA,GAAwD;AAAA,EACnE,OAAA,EAAS,GAAA;AAAA,EACT,GAAA,EAAK,IAAA;AAAA,EACL,MAAA,EAAQ,IAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAGA,IAAM,uBAAA,GAA0B,IAAA;AAEhC,IAAM,uBAAA,GAA0B,IAAA;AAQzB,SAAS,oBAAA,CACd,IAAA,EACA,SAAA,EACA,IAAA,GAA4B,eAAA,EACtB;AACN,EAAA,IAAI,CAAC,SAAA,EAAW;AAChB,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,SAAA,CAAU,MAAM,CAAA;AAC/C,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,MAAM,MAA2B,EAAC;AAClC,IAAA,IAAI,MAAA,MAAY,MAAA,GAAS,MAAA;AACzB,IAAA,IAAI,SAAA,CAAU,eAAA,EAAiB,GAAA,CAAI,OAAA,GAAU,MAAA;AAC7C,IAAA,IAAI,UAAU,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,UAAU,cAAc,CAAA;AACzE,IAAA,IAAI,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,GAAS,CAAA,OAAQ,SAAA,GAAY,GAAA;AAAA,EACpD,CAAA,MAAO;AACL,IAAA,IAAI,MAAA,OAAa,gBAAA,GAAmB,MAAA;AACpC,IAAA,IAAI,UAAU,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,UAAU,cAAc,CAAA;AAAA,EAC5E;AACF;AAUO,SAAS,uBAAA,CACd,MACA,SAAA,EACM;AACN,EAAA,IAAI,CAAC,SAAA,EAAW;AAChB,EAAA,IAAI,MAAA,GAAS,aAAA,CAAc,SAAA,EAAW,uBAAuB,CAAA;AAC7D,EAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,EAAA,MAAM,aAAa,OAAO,IAAA,CAAK,UAAA,KAAe,QAAA,GAAW,KAAK,UAAA,GAAa,CAAA;AAC3E,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,uBAAA,EAAyB,SAAS,uBAAuB,CAAA;AACtF,EAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,IAAA,IAAA,CAAK,UAAA,GAAa,WAAA;AAAA,EACpB;AAEA,EAAA,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,IAAA,CAAK,UAAU,CAAA;AAE5C,EAAA,MAAM,QAAA,GAAgC,EAAE,IAAA,EAAM,SAAA,EAAW,eAAe,MAAA,EAAO;AAC/E,EAAA,IAAI,UAAU,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,UAAU,cAAc,CAAA;AAC9E,EAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAGhB,EAAA,mBAAA,CAAoB,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,OAAO,CAAC,CAAA;AAC7D;AAMO,SAAS,qBAAA,CACd,MACA,SAAA,EACM;AACN,EAAA,IAAI,CAAC,SAAA,EAAW;AAChB,EAAA,IAAI,MAAA,GAAS,aAAA,CAAc,SAAA,EAAW,uBAAuB,CAAA;AAC7D,EAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,EAAA,MAAM,SAAA,GAAa,IAAA,CAAK,eAAA,KAAL,IAAA,CAAK,kBAAoB,EAAC,CAAA;AAC7C,EAAA,MAAM,aAAa,OAAO,SAAA,CAAU,SAAA,KAAc,QAAA,GAAW,UAAU,SAAA,GAAY,CAAA;AACnF,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,uBAAA,EAAyB,SAAS,uBAAuB,CAAA;AACtF,EAAA,IAAI,aAAa,WAAA,EAAa;AAC5B,IAAA,SAAA,CAAU,SAAA,GAAY,WAAA;AAAA,EACxB;AACA,EAAA,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,SAAA,CAAU,SAAS,CAAA;AAEhD,EAAA,MAAM,KAAA,GAAS,IAAA,CAAK,4BAAA,KAAL,IAAA,CAAK,+BAAiC,EAAC,CAAA;AACtD,EAAA,MAAM,QAAA,GAAgC,EAAE,IAAA,EAAM,SAAA,EAAW,eAAe,MAAA,EAAO;AAC/E,EAAA,IAAI,UAAU,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU,UAAU,cAAc,CAAA;AAC9E,EAAA,KAAA,CAAM,QAAA,GAAW,QAAA;AAGjB,EAAA,mBAAA,CAAoB,SAAA,EAAW,CAAC,aAAA,EAAe,MAAM,CAAC,CAAA;AACxD;AAGO,SAAS,oBAAA,CACd,kBACA,SAAA,EACM;AACN,EAAA,IAAI,CAAC,SAAA,EAAW;AAChB,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,SAAA,EAAW,oBAAoB,CAAA;AAC5D,EAAA,IAAI,UAAU,IAAA,EAAM;AACpB,EAAA,MAAM,cAAA,GAAsC,EAAE,cAAA,EAAgB,MAAA,EAAO;AACrE,EAAA,IAAI,SAAA,CAAU,eAAA,EAAiB,cAAA,CAAe,eAAA,GAAkB,IAAA;AAChE,EAAA,IAAI,UAAU,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,cAAA,EAAgB,UAAU,cAAc,CAAA;AACpF,EAAA,gBAAA,CAAiB,cAAA,GAAiB,cAAA;AACpC;AAEA,SAAS,mBAAA,CAAoB,QAA6B,IAAA,EAAsB;AAC9E,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,CAAA,IAAK,MAAA,EAAQ,OAAO,MAAA,CAAO,CAAC,CAAA;AAAA,EAClC;AACF;AAEA,SAAS,WAAA,CAAY,QAAgB,SAAA,EAAuC;AAC1E,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,IAAY,SAAA,IAAa,GAAG,OAAO,MAAA;AAC5D,EAAA,MAAM,UAAU,SAAA,GAAY,uBAAA;AAC5B,EAAA,IAAI,OAAA,GAAU,IAAA,EAAM,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,CAAC,CAAC,CAAA;AACnE,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAO,CAAA;AACjC;AAEA,SAAS,gBAAgB,MAAA,EAAkE;AACzF,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,OAAA,GAA6B,CAAC,SAAA,EAAW,KAAA,EAAO,UAAU,MAAM,CAAA;AACtE,EAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,MAAA;AAC7C;AAEA,SAAS,aAAA,CACP,WACA,YAAA,EACoB;AACpB,EAAA,IAAI,OAAO,SAAA,CAAU,YAAA,KAAiB,QAAA,IAAY,SAAA,CAAU,eAAe,CAAA,EAAG;AAC5E,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,YAAY,CAAA;AAAA,EAC1C;AACA,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,SAAA,CAAU,MAAM,CAAA;AAC/C,EAAA,IAAI,UAAU,YAAA,CAAa,MAAM,CAAA,EAAG,OAAO,aAAa,MAAM,CAAA;AAC9D,EAAA,OAAO,MAAA;AACT;;;AC7IO,IAAM,cAAA,GAAN,cAA6B,YAAA,CAAa;AAAA,EAQ/C,YAAY,MAAA,EAA8B;AACxC,IAAA,KAAA,EAAM;AARR,IAAA,IAAA,CAAS,YAAA,GAA6B,QAAA;AASpC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAW,2BAAA,EAA6B,OAAA,CAAQ,OAAO,EAAE,CAAA;AAChF,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,QAAA;AAC3C,IAAA,IAAA,CAAK,cAAA,GAAiB;AAAA,MACpB,GAAG,MAAA,CAAO,cAAA;AAAA,MACV,GAAI,OAAO,YAAA,GAAe,EAAE,uBAAuB,MAAA,CAAO,YAAA,KAAiB;AAAC,KAC9E;AACA,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,WAAA,GAAc,EAAE,GAAG,IAAA,CAAK,WAAA,EAAa,GAAG,MAAA,CAAO,KAAA,EAAM;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAKU,gBAAgB,OAAA,EAAyC;AACjE,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,EAAW,OAAO,KAAA;AAC/B,IAAA,OAAO,gBAAA,CAAiB,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAY,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAM,SAAS,OAAA,EAAiE;AAC9E,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA,EAAG;AACjC,MAAA,OAAO,IAAA,CAAK,kBAAkB,OAAO,CAAA;AAAA,IACvC;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,KAAK,CAAA;AACjD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACnC,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,OAAO,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,OAAO,eAAe,OAAA,EAAoF;AACxG,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA,EAAG;AAIjC,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AACrD,MAAA,MAAM;AAAA,QACJ,IAAI,QAAA,CAAS,EAAA;AAAA,QACb,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,SAAS,OAAA,IAAW,MAAA;AAAA,UAC7B,WAAW,QAAA,CAAS,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,SAAS,SAAA,GAAY,MAAA;AAAA,UAChE,WAAW,QAAA,CAAS;AAAA,SACtB;AAAA,QACA,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,cAAc,QAAA,CAAS;AAAA,OACzB;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAChD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAEnC,IAAA,IAAI,CAAC,IAAI,IAAA,EAAM,MAAM,IAAI,aAAA,CAAc,6BAAA,EAA+B,KAAK,YAAY,CAAA;AAEvF,IAAA,IAAI,EAAA,GAAK,EAAA;AACT,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAA6D;AACzF,IAAA,IAAI,KAAA;AAEJ,IAAA,WAAA,MAAiB,KAAA,IAAS,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AAClD,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAE7B,MAAA,IAAI,KAAA;AACJ,MAAA,IAAI;AACF,QAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,MAC/B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAEA,MAAA,EAAA,GAAK,MAAM,EAAA,IAAM,EAAA;AACjB,MAAA,KAAA,GAAQ,MAAM,KAAA,IAAS,KAAA;AAEvB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA;AAGhC,MAAA,IAAI,MAAM,KAAA,EAAO;AACf,QAAA,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AAAA,MACvC;AAEA,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEX,QAAA,IAAI,KAAA,QAAa,EAAE,EAAA,EAAI,OAAO,KAAA,EAAO,IAAI,KAAA,EAAM;AAC/C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,EAAC;AAC/B,MAAA,MAAM,GAAA,GAA2B;AAAA,QAC/B,EAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAO,EAAC;AAAA,QACR,YAAA,EAAc,eAAA,CAAgB,MAAA,CAAO,aAAa;AAAA,OACpD;AAEA,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,GAAA,CAAI,KAAA,CAAM,UAAU,KAAA,CAAM,OAAA;AAAA,MAC5B;AAGA,MAAA,IAAI,MAAM,UAAA,EAAY;AACpB,QAAA,MAAM,WAAgC,EAAC;AACvC,QAAA,KAAA,MAAW,EAAA,IAAM,MAAM,UAAA,EAAY;AACjC,UAAA,MAAM,GAAA,GAAM,GAAG,KAAA,IAAS,CAAA;AACxB,UAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC7B,YAAA,eAAA,CAAgB,GAAA,CAAI,GAAA,EAAK,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,IAAM,EAAA,EAAI,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,EAAA,EAAI,CAAA;AAAA,UACvE;AACA,UAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA;AACnC,UAAA,IAAI,EAAA,CAAG,EAAA,EAAI,GAAA,CAAI,EAAA,GAAK,EAAA,CAAG,EAAA;AACvB,UAAA,IAAI,GAAG,QAAA,EAAU,IAAA,EAAM,GAAA,CAAI,IAAA,GAAO,GAAG,QAAA,CAAS,IAAA;AAC9C,UAAA,IAAI,GAAG,QAAA,EAAU,SAAA,EAAW,GAAA,CAAI,SAAA,IAAa,GAAG,QAAA,CAAS,SAAA;AACzD,UAAA,QAAA,CAAS,IAAA,CAAK,EAAE,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,IAAA,EAAM,GAAA,CAAI,IAAA,IAAQ,MAAA,EAAW,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,WAAW,CAAA;AAAA,QAC9F;AACA,QAAA,GAAA,CAAI,MAAM,SAAA,GAAY,QAAA;AAAA,MACxB;AAEA,MAAA,IAAI,KAAA,MAAW,KAAA,GAAQ,KAAA;AACvB,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAIU,gBAAA,CAAiB,SAAgC,MAAA,EAAsC;AAC/F,IAAA,MAAM,IAAA,GAA4B;AAAA,MAChC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,MAC7B,QAAA,EAAU,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAC,CAAA;AAAA,MAC7D;AAAA,KACF;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,cAAA,GAAiB,EAAE,aAAA,EAAe,IAAA,EAAK;AAAA,IAC9C;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,IAAA,EAAM,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC5D,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,IAAA,EAAM,IAAA,CAAK,aAAa,OAAA,CAAQ,SAAA;AACzD,IAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,IAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,OAAA,CAAQ,IAAA;AAEtC,IAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,MAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,YAAA,CAAa,CAAC,CAAC,CAAA;AAAA,IAC5D;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,IAAA,IAAQ,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACvD,MAAA,IAAI,OAAO,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AAC1C,QAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,UAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,WAAA,GAAc,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,CAAQ,UAAA,CAAW,IAAA,EAAK,EAAE;AAAA,MACrF;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,MAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,aAAA,EAAe;AACjD,QAAA,IAAA,CAAK,eAAA,GAAkB;AAAA,UACrB,IAAA,EAAM,aAAA;AAAA,UACN,WAAA,EAAa;AAAA,YACX,IAAA,EAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,IAAQ,UAAA;AAAA,YACrC,MAAA,EAAQ,QAAQ,cAAA,CAAe,MAAA;AAAA,YAC/B,MAAA,EAAQ;AAAA;AACV,SACF;AAAA,MACF,CAAA,MAAA,IAAW,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,aAAA,EAAe;AACxD,QAAA,IAAA,CAAK,eAAA,GAAkB,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,MAC/C;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,oBAAA,CAAqB,IAAA,EAAM,OAAA,CAAQ,SAAA,EAAW,eAAe,CAAA;AAE7D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAIA,MAAgB,kBAAkB,OAAA,EAAiE;AACjG,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,kBAAA,CAAmB,OAAO,CAAA;AAC5C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,cAAA,CAAe,IAAI,CAAA;AAC1C,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,OAAO,KAAK,sBAAA,CAAuB,IAAA,EAAM,OAAA,CAAQ,KAAA,IAAS,KAAK,YAAY,CAAA;AAAA,EAC7E;AAAA,EAEU,mBAAmB,OAAA,EAAqD;AAChF,IAAA,MAAM,IAAA,GAA4B;AAAA,MAChC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,MAC7B,KAAA,EAAO,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,gBAAA,CAAiB,CAAC,CAAC;AAAA,KAC7D;AAEA,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,IAAA,EAAM,IAAA,CAAK,oBAAoB,OAAA,CAAQ,SAAA;AAChE,IAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,IAAA;AAG/C,IAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AAEzB,MAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACrC,IAAA,EAAM,UAAA;AAAA,QACN,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,GAAI,CAAA,CAAE,MAAA,GAAS,EAAE,MAAA,EAAQ,IAAA,KAAS;AAAC,OACrC,CAAE,CAAA;AAAA,IACJ;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,IAAA,IAAQ,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACvD,MAAA,IAAI,OAAO,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AAC1C,QAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,UAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,cAAc,EAAE,IAAA,EAAM,YAAY,IAAA,EAAM,OAAA,CAAQ,WAAW,IAAA,EAAK;AAAA,MACvE;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,MAAA,IAAI,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,aAAA,EAAe;AACjD,QAAA,IAAA,CAAK,IAAA,GAAO;AAAA,UACV,MAAA,EAAQ;AAAA,YACN,IAAA,EAAM,aAAA;AAAA,YACN,IAAA,EAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,IAAQ,UAAA;AAAA,YACrC,MAAA,EAAQ,QAAQ,cAAA,CAAe,MAAA;AAAA,YAC/B,MAAA,EAAQ;AAAA;AACV,SACF;AAAA,MACF,CAAA,MAAA,IAAW,OAAA,CAAQ,cAAA,CAAe,IAAA,KAAS,aAAA,EAAe;AACxD,QAAA,IAAA,CAAK,OAAO,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,eAAc,EAAE;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,QAAQ,KAAK,CAAA;AAGpD,IAAA,oBAAA,CAAqB,IAAA,EAAM,OAAA,CAAQ,SAAA,EAAW,WAAW,CAAA;AAEzD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGU,iBAAiB,CAAA,EAAwC;AAEjE,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,UAAA,EAAY;AACrC,MAAA,MAAM,MAAA,GAAS,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,EAAE,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA;AACnF,MAAA,OAAO,EAAE,IAAA,EAAM,sBAAA,EAAwB,OAAA,EAAS,CAAA,CAAE,YAAY,MAAA,EAAO;AAAA,IACvE;AAKA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,WAAW,MAAA,EAAQ;AAKjD,MAAA,OAAO;AAAA,QACL,oBAAA,EAAsB,IAAA;AAAA,QACtB,MAAM,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,EAAE,OAAA,GAAU,EAAA;AAAA,QAClD,KAAA,EAAO,CAAA,CAAE,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UAC9B,IAAA,EAAM,eAAA;AAAA,UACN,SAAS,EAAA,CAAG,EAAA;AAAA,UACZ,MAAM,EAAA,CAAG,IAAA;AAAA,UACT,WAAW,EAAA,CAAG;AAAA,SAChB,CAAE;AAAA,OACJ;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,EAAE,IAAA,KAAS,QAAA,GAAW,WAAW,CAAA,CAAE,IAAA,KAAS,cAAc,WAAA,GAAc,MAAA;AACrF,IAAA,MAAM,QAAA,GAAW,IAAA,KAAS,WAAA,GAAc,aAAA,GAAgB,YAAA;AACxD,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,CAAA,CAAE,OAAA,EAAS,CAAA,EAAE;AAAA,IAChE;AACA,IAAA,MAAM,OAAA,GAAW,CAAA,CAAE,OAAA,CAA0B,GAAA,CAAI,CAAC,IAAA,KAAS;AACzD,MAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK;AACnE,MAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,QAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,KAAS,KAAA,GAAQ,GAAA,CAAI,GAAA,GAAM,CAAA,KAAA,EAAQ,GAAA,CAAI,SAAS,CAAA,QAAA,EAAW,GAAA,CAAI,IAAI,CAAA,CAAA;AACnF,QAAA,OAAO,EAAE,IAAA,EAAM,aAAA,EAAe,SAAA,EAAW,GAAA,EAAI;AAAA,MAC/C;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,EAAA,EAAG;AAAA,IACpC,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,MAAM,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,MAAgB,eAAe,IAAA,EAA8C;AAE3E,IAAA,IAAA,CAAK,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,KAAK,CAAA;AAC5C,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,UAAA,CAAA;AAC3B,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,cAAA,EAAgB,kBAAA;AAAA,MAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,MACpC,GAAG,IAAA,CAAK;AAAA,KACV;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA;AACpG,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,2BAAA,EAA8B,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,QACjD,IAAA,CAAK,YAAA;AAAA,QACL,GAAA,CAAI,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEU,sBAAA,CAAuB,MAAW,OAAA,EAAyC;AACnF,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,MAAM,YAAwB,EAAC;AAC/B,IAAA,MAAM,eAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,MAAA,IAAU,EAAC,EAAG;AACpC,MAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,QAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG;AAClC,UAAA,IAAI,CAAA,CAAE,IAAA,KAAS,aAAA,IAAiB,OAAO,CAAA,CAAE,SAAS,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA;AAAA,QACnF;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB;AACxC,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,EAAA,EAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,EAAA,IAAM,EAAA;AAAA,UAC/B,IAAA,EAAM,KAAK,IAAA,IAAQ,EAAA;AAAA,UACnB,SAAA,EAAW,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA,GAAW,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,SAAA,IAAa,EAAE;AAAA,SACrG,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa;AACpC,QAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG;AAClC,UAAA,IAAI,OAAO,CAAA,CAAE,IAAA,KAAS,UAAU,YAAA,CAAa,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,IAAK,OAAO,IAAA,CAAK,gBAAgB,QAAA,EAAU;AAClE,MAAA,SAAA,CAAU,IAAA,CAAK,KAAK,WAAW,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,qBAAA,EAAuB,gBAAA,IAAoB,CAAA;AACzE,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,WAAA,EAAa,MAAM,YAAA,IAAgB,CAAA;AAAA,MACnC,YAAA,EAAc,MAAM,aAAA,IAAiB,CAAA;AAAA,MACrC,aAAa,KAAA,CAAM,YAAA,IAAA,CAAiB,MAAM,YAAA,IAAgB,CAAA,KAAM,MAAM,aAAA,IAAiB,CAAA,CAAA;AAAA,MACvF,iBAAA,EAAmB,KAAA,CAAM,oBAAA,EAAsB,aAAA,IAAiB,CAAA;AAAA,MAChE,iBAAA,EAAmB,CAAA;AAAA,MACnB,kBAAA,EAAoB,CAAA;AAAA,MACpB;AAAA,KACF;AAEA,IAAA,MAAM,YAAA,GAAuD,UAAU,MAAA,GAAS,CAAA,GAC5E,eACA,IAAA,CAAK,MAAA,KAAW,eAAe,QAAA,GAAW,MAAA;AAE9C,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAK,EAAA,IAAM,EAAA;AAAA,MACf,KAAA,EAAO,KAAK,KAAA,IAAS,OAAA;AAAA,MACrB,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA;AAAA,MAC/B,SAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,YAAA;AAAA,MACA,SAAA,EAAW,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,EAAE,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,EAAK,IAAK,QAAU,GAAI,MAAA;AAAA,MAChG,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEU,gBAAgB,CAAA,EAAwC;AAChE,IAAA,MAAM,GAAA,GAA2B,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAEhD,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,MAAA,GAAA,CAAI,UAAU,CAAA,CAAE,OAAA;AAAA,IAClB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AACnC,MAAA,GAAA,CAAI,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAS;AACpC,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK;AACjE,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,IAAA,KAAS,KAAA,GAAQ,GAAA,CAAI,GAAA,GAAM,CAAA,KAAA,EAAQ,GAAA,CAAI,SAAS,CAAA,QAAA,EAAW,GAAA,CAAI,IAAI,CAAA,CAAA;AACnF,UAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,EAAE,KAAI,EAAE;AAAA,QACjD;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,WAAW,MAAA,EAAQ;AACjD,MAAA,GAAA,CAAI,UAAA,GAAa,CAAA,CAAE,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,QACxC,IAAI,EAAA,CAAG,EAAA;AAAA,QACP,IAAA,EAAM,UAAA;AAAA,QACN,UAAU,EAAE,IAAA,EAAM,GAAG,IAAA,EAAM,SAAA,EAAW,GAAG,SAAA;AAAU,OACrD,CAAE,CAAA;AAAA,IACJ;AAEA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,UAAA,EAAY;AACrC,MAAA,GAAA,CAAI,eAAe,CAAA,CAAE,UAAA;AAAA,IACvB;AAEA,IAAA,IAAI,CAAA,CAAE,IAAA,EAAM,GAAA,CAAI,IAAA,GAAO,CAAA,CAAE,IAAA;AAEzB,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEU,aAAa,CAAA,EAAwC;AAC7D,IAAA,MAAM,EAAA,GAA0B;AAAA,MAC9B,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,YAAY,CAAA,CAAE;AAAA,KAChB;AACA,IAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,MAAA,EAAA,CAAG,MAAA,GAAS,IAAA;AAAA,IACd;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,EAAA,EAAG;AAAA,EAC1C;AAAA,EAEA,MAAgB,QAAQ,IAAA,EAA8C;AACpE,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA;AAC3B,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,cAAA,EAAgB,kBAAA;AAAA,MAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,MACpC,GAAG,IAAA,CAAK;AAAA,KACV;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA;AAEpG,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,iBAAA,EAAoB,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,QACvC,IAAA,CAAK,YAAA;AAAA,QACL,GAAA,CAAI,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEU,cAAc,IAAA,EAAmC;AACzD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAA,EAAQ,OAAA,IAAW,EAAC;AAEpC,IAAA,MAAM,aAAyB,OAAA,CAAQ,UAAA,IAAc,EAAC,EAAG,GAAA,CAAI,CAAC,EAAA,MAAa;AAAA,MACzE,IAAI,EAAA,CAAG,EAAA;AAAA,MACP,IAAA,EAAM,EAAA,CAAG,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,MAC3B,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAA,IAAa;AAAA,KACvC,CAAE,CAAA;AAEF,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAK,EAAA,IAAM,EAAA;AAAA,MACf,KAAA,EAAO,KAAK,KAAA,IAAS,EAAA;AAAA,MACrB,OAAA,EAAS,QAAQ,OAAA,IAAW,IAAA;AAAA,MAC5B,SAAA;AAAA,MACA,KAAA,EAAO,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AAAA,MACnC,YAAA,EAAc,eAAA,CAAgB,MAAA,EAAQ,aAAa,CAAA;AAAA,MACnD,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEU,aAAa,KAAA,EAAwB;AAC7C,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,UAAA,EAAW;AAC9B,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,qBAAA,IAAyB,EAAC;AACtD,IAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,yBAAA,IAA6B,EAAC;AAC9D,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,MAAM,aAAA,IAAiB,CAAA;AAAA,MACpC,YAAA,EAAc,MAAM,iBAAA,IAAqB,CAAA;AAAA,MACzC,aAAa,KAAA,CAAM,YAAA,IAAA,CAAiB,MAAM,aAAA,IAAiB,CAAA,KAAM,MAAM,iBAAA,IAAqB,CAAA,CAAA;AAAA,MAC5F,iBAAA,EAAmB,cAAc,aAAA,IAAiB,CAAA;AAAA,MAClD,iBAAA,EAAmB,CAAA;AAAA,MACnB,kBAAA,EAAoB,CAAA;AAAA,MACpB,eAAA,EAAiB,kBAAkB,gBAAA,IAAoB;AAAA,KACzD;AAAA,EACF;AACF;AAKO,SAAS,iBAAiB,KAAA,EAAoC;AACnE,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,MAAM,CAAA,GAAI,MAAM,WAAA,EAAY;AAC5B,EAAA,OAAO,iBAAA,CAAkB,KAAK,CAAC,CAAA,IAAK,EAAE,UAAA,CAAW,IAAI,CAAA,IAAK,CAAA,CAAE,UAAA,CAAW,IAAI,KAAK,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,IAC5F,CAAA,CAAE,SAAS,OAAO,CAAA,IAAK,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AAC/C;AAKA,SAAS,qBAAqB,KAAA,EAAqB;AACjD,EAAA,MAAM,MAAa,EAAC;AACpB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,IAAQ,KAAK,oBAAA,EAAsB;AACrC,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,CAAC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AAAA,MACrF;AACA,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,EAAO,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,gBAAgB,MAAA,EAA2E;AAClG,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;;;ACjgBO,IAAM,iBAAA,GAAN,cAAgC,YAAA,CAAa;AAAA,EAWlD,YAAY,MAAA,EAAiC;AAC3C,IAAA,KAAA,EAAM;AAXR,IAAA,IAAA,CAAS,YAAA,GAA6B,WAAA;AAYpC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAW,2BAAA,EAA6B,OAAA,CAAQ,OAAO,EAAE,CAAA;AAChF,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,0BAAA;AAC3C,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,cAAA,IAAkB,EAAC;AAChD,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAO,gBAAA,IAAoB,YAAA;AACnD,IAAA,IAAA,CAAK,oBAAA,GAAuB,MAAA,CAAO,cAAA,EAAgB,OAAA,KAAY,IAAA;AAC/D,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,WAAA,GAAc,EAAE,GAAG,IAAA,CAAK,WAAA,EAAa,GAAG,MAAA,CAAO,KAAA,EAAM;AAAA,EAC9E;AAAA,EAEA,MAAM,SAAS,OAAA,EAAiE;AAC9E,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,KAAK,CAAA;AACjD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACnC,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,OAAO,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,OAAO,eAAe,OAAA,EAAoF;AACxG,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAChD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAEnC,IAAA,IAAI,CAAC,IAAI,IAAA,EAAM,MAAM,IAAI,aAAA,CAAc,6BAAA,EAA+B,KAAK,YAAY,CAAA;AAEvF,IAAA,IAAI,EAAA,GAAK,EAAA;AACT,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,IAAI,oBAAA,GAAuB,CAAA;AAC3B,IAAA,IAAI,wBAAA,GAA2B,CAAA;AAC/B,IAAA,MAAM,gBAAA,uBAAuB,GAAA,EAA6D;AAE1F,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAA4B;AAExD,IAAA,WAAA,MAAiB,KAAA,IAAS,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AAClD,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,MAC9B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,IAAA;AAEtC,MAAA,QAAQ,SAAA;AAAW,QACjB,KAAK,eAAA,EAAiB;AACpB,UAAA,MAAM,MAAM,IAAA,CAAK,OAAA;AACjB,UAAA,EAAA,GAAK,KAAK,EAAA,IAAM,EAAA;AAChB,UAAA,KAAA,GAAQ,KAAK,KAAA,IAAS,EAAA;AACtB,UAAA,IAAI,KAAK,KAAA,EAAO;AACd,YAAA,WAAA,GAAc,GAAA,CAAI,MAAM,YAAA,IAAgB,CAAA;AACxC,YAAA,oBAAA,GAAuB,GAAA,CAAI,MAAM,uBAAA,IAA2B,CAAA;AAC5D,YAAA,wBAAA,GAA2B,GAAA,CAAI,MAAM,2BAAA,IAA+B,CAAA;AAAA,UACtE;AACA,UAAA;AAAA,QACF;AAAA,QAEA,KAAK,qBAAA,EAAuB;AAC1B,UAAA,MAAM,GAAA,GAAM,KAAK,KAAA,IAAS,CAAA;AAC1B,UAAA,MAAM,QAAQ,IAAA,CAAK,aAAA;AACnB,UAAA,IAAI,KAAA,EAAO,SAAS,UAAA,EAAY;AAC9B,YAAA,gBAAA,CAAiB,IAAI,GAAA,EAAK;AAAA,cACxB,EAAA,EAAI,MAAM,EAAA,IAAM,EAAA;AAAA,cAChB,IAAA,EAAM,MAAM,IAAA,IAAQ,EAAA;AAAA,cACpB,SAAA,EAAW;AAAA,aACZ,CAAA;AAAA,UACH,CAAA,MAAA,IAAW,KAAA,EAAO,IAAA,KAAS,UAAA,EAAY;AACrC,YAAA,eAAA,CAAgB,GAAA,CAAI,GAAA,EAAK,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,KAAA,CAAM,QAAA,IAAY,EAAA,EAAI,SAAA,EAAW,KAAA,CAAM,SAAA,EAAW,CAAA;AAAA,UACvG,CAAA,MAAA,IAAW,KAAA,EAAO,IAAA,KAAS,mBAAA,EAAqB;AAC9C,YAAA,eAAA,CAAgB,GAAA,CAAI,KAAK,EAAE,IAAA,EAAM,qBAAqB,IAAA,EAAM,KAAA,CAAM,MAAM,CAAA;AAAA,UAC1E;AACA,UAAA;AAAA,QACF;AAAA,QAEA,KAAK,qBAAA,EAAuB;AAC1B,UAAA,MAAM,GAAA,GAAM,KAAK,KAAA,IAAS,CAAA;AAC1B,UAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAEnB,UAAA,IAAI,KAAA,EAAO,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,IAAA,EAAM;AAC9C,YAAA,MAAM;AAAA,cACJ,EAAA;AAAA,cACA,KAAA;AAAA,cACA,KAAA,EAAO,EAAE,OAAA,EAAS,KAAA,CAAM,IAAA;AAAK,aAC/B;AAAA,UACF,CAAA,MAAA,IAAW,KAAA,EAAO,IAAA,KAAS,gBAAA,IAAoB,MAAM,QAAA,EAAU;AAC7D,YAAA,MAAM,GAAA,GAAM,gBAAgB,GAAA,CAAI,GAAG,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,EAAA,EAAG;AACrE,YAAA,GAAA,CAAI,IAAA,GAAA,CAAQ,GAAA,CAAI,IAAA,IAAQ,EAAA,IAAM,KAAA,CAAM,QAAA;AACpC,YAAA,eAAA,CAAgB,GAAA,CAAI,KAAK,GAAG,CAAA;AAC5B,YAAA,MAAM;AAAA,cACJ,EAAA;AAAA,cACA,KAAA;AAAA,cACA,OAAO,EAAE,SAAA,EAAW,EAAE,OAAA,EAAS,KAAA,CAAM,UAAS;AAAE,aAClD;AAAA,UACF,CAAA,MAAA,IAAW,KAAA,EAAO,IAAA,KAAS,iBAAA,IAAqB,MAAM,SAAA,EAAW;AAC/D,YAAA,MAAM,GAAA,GAAM,gBAAgB,GAAA,CAAI,GAAG,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,EAAA,EAAG;AACrE,YAAA,GAAA,CAAI,SAAA,GAAA,CAAa,GAAA,CAAI,SAAA,IAAa,EAAA,IAAM,KAAA,CAAM,SAAA;AAC9C,YAAA,eAAA,CAAgB,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,UAC9B,CAAA,MAAA,IAAW,KAAA,EAAO,IAAA,KAAS,kBAAA,IAAsB,MAAM,YAAA,EAAc;AACnE,YAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,GAAA,CAAI,GAAG,CAAA;AACnC,YAAA,IAAI,EAAA,EAAI;AACN,cAAA,EAAA,CAAG,aAAa,KAAA,CAAM,YAAA;AACtB,cAAA,MAAM;AAAA,gBACJ,EAAA;AAAA,gBACA,KAAA;AAAA,gBACA,KAAA,EAAO;AAAA,kBACL,SAAA,EAAW,CAAC,EAAE,EAAA,EAAI,EAAA,CAAG,EAAA,EAAI,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,SAAA,EAAW,KAAA,CAAM,YAAA,EAAc;AAAA;AACzE,eACF;AAAA,YACF;AAAA,UACF;AACA,UAAA;AAAA,QACF;AAAA,QAEA,KAAK,oBAAA;AAEH,UAAA;AAAA,QAEF,KAAK,eAAA,EAAiB;AACpB,UAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,UAAA,IAAI,KAAK,KAAA,EAAO;AACd,YAAA,YAAA,GAAe,IAAA,CAAK,MAAM,aAAA,IAAiB,YAAA;AAAA,UAC7C;AACA,UAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,KAAA,EAAO,WAAW,CAAA;AAC9D,UAAA,MAAM,KAAA,GAAoB;AAAA,YACxB,WAAA;AAAA,YACA,YAAA;AAAA,YACA,aAAa,WAAA,GAAc,YAAA;AAAA,YAC3B,iBAAA,EAAmB,oBAAA;AAAA,YACnB,iBAAA,EAAmB,wBAAA;AAAA,YACnB,kBAAA,EAAoB,CAAA;AAAA,YACpB,eAAA,EAAiB;AAAA,WACnB;AACA,UAAA,MAAM,SAAS,CAAC,GAAG,eAAA,CAAgB,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,YAC3C,CAAC,CAAA,KAAO,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,EAAE,SAAA,IAAe,CAAA,CAAE,IAAA,KAAS,mBAAA,IAAuB,CAAA,CAAE;AAAA,WACxF;AACA,UAAA,MAAM;AAAA,YACJ,EAAA;AAAA,YACA,KAAA;AAAA,YACA,KAAA,EAAO,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,EAAE,WAAW,EAAE,MAAA,EAAO,EAAE,GAAI,EAAC;AAAA,YACxD,YAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA;AAAA,QACF;AAAA,QAEA,KAAK,cAAA;AACH,UAAA;AAAA,QAEF,KAAK,OAAA,EAAS;AACZ,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,mCAAA;AACtC,UAAA,MAAM,IAAI,aAAA,CAAc,MAAA,EAAQ,IAAA,CAAK,YAAY,CAAA;AAAA,QACnD;AAAA;AACF,IACF;AAAA,EACF;AAAA;AAAA,EAIQ,gBAAA,CAAiB,SAAgC,MAAA,EAAsC;AAE7F,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,KAAa,IAAA,CAAK,mBAAA,CAAoB,QAAQ,QAAQ,CAAA;AAEtE,IAAA,MAAM,IAAA,GAA4B;AAAA,MAChC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,MAC7B,QAAA,EAAU,SAAS,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAAA,MACxD,UAAA,EAAY,QAAQ,SAAA,IAAa,IAAA;AAAA,MACjC;AAAA,KACF;AAEA,IAAA,IAAI,MAAA,EAAQ;AAGV,MAAA,IAAI,KAAK,oBAAA,EAAsB;AAC7B,QAAA,IAAA,CAAK,MAAA,GAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,aAAA,EAAe,EAAE,IAAA,EAAM,WAAA,EAAY,EAAG,CAAA;AAAA,MACrF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,MAChB;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,IAAA,EAAM,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC5D,IAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,IAAA;AAC/C,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,cAAA,GAAiB,OAAA,CAAQ,IAAA;AAEhD,IAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAC,CAAA;AAG9D,MAAA,IAAI,IAAA,CAAK,oBAAA,IAAwB,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACjD,QAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAI,EAAE,GAAG,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG,aAAA,EAAe,EAAE,IAAA,EAAM,aAAY,EAAE;AAAA,MAC/F;AACA,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,IACf;AAEA,IAAA,IAAI,OAAA,CAAQ,cAAc,IAAA,EAAM;AAC9B,MAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAQ;AACjC,QAAA,IAAA,CAAK,WAAA,GAAc,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA,MACpC,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,KAAe,UAAA,EAAY;AAC5C,QAAA,IAAA,CAAK,WAAA,GAAc,EAAE,IAAA,EAAM,KAAA,EAAM;AAAA,MACnC,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,KAAe,MAAA,EAAQ,CAE1C,MAAO;AACL,QAAA,IAAA,CAAK,cAAc,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,CAAQ,WAAW,IAAA,EAAK;AAAA,MACnE;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,uBAAA,CAAwB,IAAA,EAAM,QAAQ,SAAS,CAAA;AAE/C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,oBAAoB,QAAA,EAAwF;AAClH,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,MAAM,OAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,IAAI,CAAA,CAAE,SAAS,QAAA,EAAU;AACvB,QAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,UAAA,WAAA,CAAY,IAAA,CAAK,EAAE,OAAO,CAAA;AAAA,QAC5B,CAAA,MAAO;AACL,UAAA,MAAM,OAAO,CAAA,CAAE,OAAA,CACZ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,CAC/B,IAAI,CAAC,CAAA,KAAO,EAAqC,IAAI,CAAA,CACrD,KAAK,IAAI,CAAA;AACZ,UAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAAA,QACjC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACb;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,WAAA,CAAY,MAAA,GAAS,IAAI,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA;AAAA,MAC5D,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAAA,EAEQ,mBAAmB,CAAA,EAAwC;AAEjE,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,UAAA,EAAY;AACrC,MAAA,MAAM,OAAA,GAAU,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,EAAE,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA;AACpF,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP;AAAA,YACE,IAAA,EAAM,aAAA;AAAA,YACN,aAAa,CAAA,CAAE,UAAA;AAAA,YACf;AAAA;AACF;AACF,OACF;AAAA,IACF;AAKA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,WAAW,MAAA,EAAQ;AACjD,MAAA,MAAM,UAAiB,EAAC;AACxB,MAAA,qBAAA,CAAsB,OAAA,EAAS,CAAA,CAAE,SAAA,EAAW,MAAM,CAAA;AAClD,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,IAAY,EAAE,OAAA,EAAS;AAC9C,QAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,CAAA,CAAE,SAAS,CAAA;AAAA,MAChD;AACA,MAAA,KAAA,MAAW,EAAA,IAAM,EAAE,SAAA,EAAW;AAC5B,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,IAAA,EAAM,UAAA;AAAA,UACN,IAAI,EAAA,CAAG,EAAA;AAAA,UACP,MAAM,EAAA,CAAG,IAAA;AAAA,UACT,KAAA,EAAO,aAAA,CAAc,EAAA,CAAG,SAAS;AAAA,SAClC,CAAA;AAAA,MACH;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAQ;AAAA,IACtC;AAGA,IAAA,IAAI,EAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,SAAA,EAAW,QAAQ,MAAA,EAAQ;AACzD,MAAA,MAAM,UAAiB,EAAC;AACxB,MAAA,qBAAA,CAAsB,OAAA,EAAS,CAAA,CAAE,SAAA,CAAU,MAAM,CAAA;AACjD,MAAA,MAAM,OAAO,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,EAAE,OAAA,GAAU,EAAA;AACzD,MAAA,IAAI,MAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAC7C,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAQ;AAAA,IACtC;AAGA,IAAA,MAAM,GAAA,GAA2B,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAEhD,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,MAAA,GAAA,CAAI,UAAU,CAAA,CAAE,OAAA;AAAA,IAClB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AACnC,MAAA,GAAA,CAAI,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAS;AACpC,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK;AACjE,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,UAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,OAAA;AAAA,cACN,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,YAAY,GAAA,CAAI,SAAA,EAAW,IAAA,EAAM,GAAA,CAAI,IAAA;AAAK,aACtE;AAAA,UACF;AACA,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,OAAA;AAAA,YACN,QAAQ,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,IAAI,GAAA;AAAI,WACtC;AAAA,QACF;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,gBAAgB,CAAA,EAAwC;AAC9D,IAAA,OAAO;AAAA,MACL,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,cAAc,CAAA,CAAE;AAAA,KAClB;AAAA,EACF;AAAA,EAEA,MAAc,QAAQ,IAAA,EAA8C;AAClE,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,YAAA,CAAA;AAC3B,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,cAAA,EAAgB,kBAAA;AAAA,MAChB,aAAa,IAAA,CAAK,MAAA;AAAA,MAClB,qBAAqB,IAAA,CAAK,gBAAA;AAAA,MAC1B,GAAG,IAAA,CAAK;AAAA,KACV;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA;AAEpG,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,oBAAA,EAAuB,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,QAC1C,IAAA,CAAK,YAAA;AAAA,QACL,GAAA,CAAI,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,cAAc,IAAA,EAAmC;AACvD,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,MAAM,YAAwB,EAAC;AAC/B,IAAA,MAAM,kBAAoC,EAAC;AAC3C,IAAA,MAAM,eAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG;AACtC,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,QAAA,SAAA,CAAU,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC3B,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AACpC,QAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,UACnB,IAAA,EAAM,UAAA;AAAA,UACN,IAAA,EAAM,MAAM,QAAA,IAAY,EAAA;AAAA,UACxB,WAAW,KAAA,CAAM;AAAA,SAClB,CAAA;AACD,QAAA,IAAI,KAAA,CAAM,QAAA,EAAU,YAAA,CAAa,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,MACtD,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,mBAAA,EAAqB;AAC7C,QAAA,eAAA,CAAgB,KAAK,EAAE,IAAA,EAAM,qBAAqB,IAAA,EAAM,KAAA,CAAM,MAAM,CAAA;AAAA,MACtE,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AACpC,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,IAAI,KAAA,CAAM,EAAA;AAAA,UACV,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,SAAA,EAAW,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,GAAW,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAK;AAAA,SACtF,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,WAAA,EAAa,MAAM,YAAA,IAAgB,CAAA;AAAA,MACnC,YAAA,EAAc,MAAM,aAAA,IAAiB,CAAA;AAAA,MACrC,WAAA,EAAA,CAAc,KAAA,CAAM,YAAA,IAAgB,CAAA,KAAM,MAAM,aAAA,IAAiB,CAAA,CAAA;AAAA,MACjE,iBAAA,EAAmB,MAAM,uBAAA,IAA2B,CAAA;AAAA,MACpD,iBAAA,EAAmB,MAAM,2BAAA,IAA+B,CAAA;AAAA,MACxD,kBAAA,EAAoB,CAAA;AAAA;AAAA;AAAA;AAAA,MAIpB,eAAA,EAAiB;AAAA,KACnB;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAK,EAAA,IAAM,EAAA;AAAA,MACf,KAAA,EAAO,KAAK,KAAA,IAAS,EAAA;AAAA,MACrB,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA;AAAA,MAC/B,SAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,YAAA,EAAc,sBAAA,CAAuB,IAAA,CAAK,WAAW,CAAA;AAAA,MACrD,SAAA,EAAW,eAAA,CAAgB,MAAA,GAAS,CAAA,GAChC,EAAE,MAAA,EAAQ,eAAA,EAAiB,OAAA,EAAS,YAAA,CAAa,KAAK,IAAI,CAAA,CAAE,IAAA,EAAK,IAAK,QAAU,GAChF,MAAA;AAAA,MACJ,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAIA,SAAS,uBAAuB,MAAA,EAA2E;AACzG,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,UAAA;AAAA,IACL,KAAK,eAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,SAAS,cAAc,GAAA,EAAkB;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAOA,SAAS,qBAAA,CAAsB,SAAgB,MAAA,EAA4C;AACzF,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACrB,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,SAAS,mBAAA,EAAqB;AAClC,MAAA,IAAI,CAAA,CAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAM,mBAAA,EAAqB,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,IACtE,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY;AAChC,MAAA,IAAI,EAAE,SAAA,EAAW;AACf,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,CAAA,CAAE,IAAA,IAAQ,EAAA,EAAI,SAAA,EAAW,CAAA,CAAE,SAAA,EAAW,CAAA;AAAA,MACnF;AAAA,IACF;AAAA,EACF;AACF;;;AC9cO,IAAM,aAAA,GAAN,cAA4B,cAAA,CAAe;AAAA,EAQhD,YAAY,MAAA,EAA6B;AAEvC,IAAA,KAAA,CAAM;AAAA,MACJ,QAAA,EAAU,QAAA;AAAA,MACV,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,YAAA,EAAc,MAAA,CAAO,YAAA,IAAgB,MAAA,CAAO,cAAA,IAAkB,QAAA;AAAA,MAC9D,gBAAgB,MAAA,CAAO;AAAA,KACxB,CAAA;AAdH,IAAA,IAAA,CAAkB,YAAA,GAA6B,OAAA;AAe7C,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAO,EAAE,CAAA;AACjD,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,IAAc,YAAA;AACvC,IAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAC7B,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,MAAA;AAAA,EAC5B;AAAA,EAEA,MAAyB,QAAQ,IAAA,EAA8C;AAE7E,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,KAAA;AAC/C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,aAAA,CAAc,0CAAA,EAA4C,IAAA,CAAK,YAAY,CAAA;AAAA,IACvF;AAEA,IAAA,MAAM,GAAA,GAAM,GAAG,IAAA,CAAK,QAAQ,uBAAuB,UAAU,CAAA,8BAAA,EAAiC,KAAK,UAAU,CAAA,CAAA;AAG7G,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,GAAG,kBAAiB,GAAI,IAAA;AAE/C,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,WAAW,IAAA,CAAK,WAAA;AAAA,QAChB,GAAG,IAAA,CAAK;AAAA,OACV;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,gBAAgB;AAAA,KACtC,CAAA;AAED,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,uBAAA,EAA0B,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,QAC7C,IAAA,CAAK,YAAA;AAAA,QACL,GAAA,CAAI,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAyB,eAAe,IAAA,EAA8C;AACpF,IAAA,IAAA,CAAK,KAAA,GAAQ,yBAAA,CAA0B,IAAA,CAAK,KAAK,CAAA;AACjD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,KAAA;AAC/C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,aAAA,CAAc,0CAAA,EAA4C,IAAA,CAAK,YAAY,CAAA;AAAA,IACvF;AAGA,IAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,8BAAA,EAAiC,KAAK,UAAU,CAAA,CAAA;AAC5E,IAAA,MAAM,OAAA,GAAU,KAAK,SAAA,CAAU,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,YAAY,CAAA;AAC7D,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,WAAW,IAAA,CAAK,WAAA;AAAA,QAChB,GAAG,IAAA,CAAK;AAAA,OACV;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,iCAAA,EAAoC,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,QACvD,IAAA,CAAK,YAAA;AAAA,QACL,GAAA,CAAI,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAGA,SAAS,0BAA0B,KAAA,EAAqB;AACtD,EAAA,MAAM,MAAa,EAAC;AACpB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,IAAQ,KAAK,oBAAA,EAAsB;AACrC,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,CAAC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AAAA,MACrF;AACA,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,EAAO,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;;;AC5GO,IAAM,wBAAA,GAAN,cAAuC,cAAA,CAAe;AAAA,EAG3D,YAAY,MAAA,EAAwC;AAClD,IAAA,KAAA,CAAM;AAAA,MACJ,QAAA,EAAU,QAAA;AAAA,MACV,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,gBAAgB,MAAA,CAAO;AAAA,KACxB,CAAA;AATH,IAAA,IAAA,CAAkB,YAAA,GAA6B,mBAAA;AAAA,EAU/C;AACF;ACOO,SAAS,YAAY,GAAA,EAA2C;AACrE,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,SAAA,GAAY,YAAY,GAAG,CAAA;AACjC,EAAA,MAAM,OAAA,GAAU,UAAU,GAAG,CAAA;AAE7B,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA;AAC9B,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,EAAA,MAAM,YAAA,GAAe,OAAO,QAAA,IAAY,GAAA;AACxC,EAAA,MAAM,oBAAA,GAAuB,eAAA,CAAgB,MAAA,CAAO,YAAY,CAAA;AAGhE,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,GAAG,GAAA,CAAI,OAAA;AAAA,IACP,IAAA;AAAA,IACA,YAAA,EAAc;AAAA,GAChB;AAEA,EAAA,IAAI,GAAA,CAAI,YAAY,YAAA,EAAc;AAChC,IAAA,OAAA,CAAQ,sBAAsB,CAAA,GAAI,GAAA,CAAI,WAAA,CAAY,YAAA;AAAA,EACpD;AAGA,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CACzC,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAa,CAAA,CAC1B,IAAA,EAAK;AACR,EAAA,MAAM,gBAAA,GAAmB,gBAAA,CACtB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAY,KAAM,CAAC,CAAE,CAAA,EAAG,IAAA,EAAM,CAAA,CAAE,CAAA,CAC9F,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAChB,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA;AAG/C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAGnC,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,GAAA,CAAI,MAAA;AAAA,IACJ,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAGX,EAAA,MAAM,eAAA,GAAkB,GAAG,SAAS,CAAA,CAAA,EAAI,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,OAAO,CAAA,aAAA,CAAA;AAGjE,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,kBAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAO,gBAAgB;AAAA,GACzB,CAAE,KAAK,IAAI,CAAA;AAGX,EAAA,MAAM,UAAA,GAAa,eAAA;AAAA,IACjB,IAAI,WAAA,CAAY,eAAA;AAAA,IAChB,SAAA;AAAA,IACA,GAAA,CAAI,MAAA;AAAA,IACJ,GAAA,CAAI;AAAA,GACN;AAGA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,UAAA,EAAY,YAAY,CAAA;AAGlD,EAAA,MAAM,aAAA,GAAgB,CAAA,4BAAA,EAA+B,GAAA,CAAI,WAAA,CAAY,WAAW,IAAI,eAAe,CAAA,gBAAA,EAAmB,aAAa,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA;AAE3J,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,GAAG,GAAA,CAAI,OAAA;AAAA,IACP,YAAA,EAAc,OAAA;AAAA,IACd,aAAA,EAAe;AAAA,GACjB;AAEA,EAAA,IAAI,GAAA,CAAI,YAAY,YAAA,EAAc;AAChC,IAAA,MAAA,CAAO,sBAAsB,CAAA,GAAI,GAAA,CAAI,WAAA,CAAY,YAAA;AAAA,EACnD;AAEA,EAAA,OAAO,MAAA;AACT;AAIA,SAAS,YAAY,CAAA,EAAiB;AACpC,EAAA,OAAO,CAAA,CAAE,aAAY,CAAE,OAAA,CAAQ,UAAU,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACzD;AAEA,SAAS,UAAU,CAAA,EAAiB;AAClC,EAAA,OAAO,CAAA,CAAE,aAAY,CAAE,OAAA,CAAQ,SAAS,EAAE,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA;AACpE;AAEA,SAAS,OAAO,IAAA,EAAsB;AACpC,EAAA,OAAO2B,iBAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,MAAM,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAC/D;AAEA,SAAS,IAAA,CAAK,KAAsB,IAAA,EAAsB;AACxD,EAAA,OAAOC,iBAAA,CAAW,UAAU,GAAG,CAAA,CAAE,OAAO,IAAA,EAAM,MAAM,EAAE,MAAA,EAAO;AAC/D;AAEA,SAAS,OAAA,CAAQ,KAAsB,IAAA,EAAsB;AAC3D,EAAA,OAAOA,iBAAA,CAAW,UAAU,GAAG,CAAA,CAAE,OAAO,IAAA,EAAM,MAAM,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACpE;AAEA,SAAS,eAAA,CAAgB,MAAA,EAAgB,SAAA,EAAmB,MAAA,EAAgB,OAAA,EAAyB;AACnG,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,CAAA,IAAA,EAAO,MAAM,IAAI,SAAS,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,EAAO,MAAM,CAAA;AAClC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,EAAS,OAAO,CAAA;AACtC,EAAA,OAAO,IAAA,CAAK,UAAU,cAAc,CAAA;AACtC;AAEA,SAAS,gBAAgB,MAAA,EAAiC;AACxD,EAAA,MAAM,SAAS,CAAC,GAAG,OAAO,OAAA,EAAS,EAAE,IAAA,CAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAC1E,EAAA,OAAO,OAAO,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA,EAAG,kBAAA,CAAmB,CAAC,CAAC,IAAI,kBAAA,CAAmB,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,GAAG,CAAA;AAC7F;;;ACvHO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAUhD,YAAY,MAAA,EAA+B;AACzC,IAAA,KAAA,EAAM;AAVR,IAAA,IAAA,CAAS,YAAA,GAA6B,SAAA;AAWpC,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,yCAAA;AAC3C,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,cAAA,IAAkB,EAAC;AAChD,IAAA,IAAA,CAAK,oBAAA,GAAuB,MAAA,CAAO,cAAA,EAAgB,OAAA,KAAY,IAAA;AAC/D,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,WAAA,GAAc,EAAE,GAAG,IAAA,CAAK,WAAA,EAAa,GAAG,MAAA,CAAO,KAAA,EAAM;AAE5E,IAAA,IAAA,CAAK,WAAA,GAAc;AAAA,MACjB,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,OAAA,CAAQ,IAAI,iBAAA,IAAqB,EAAA;AAAA,MACpE,eAAA,EAAiB,MAAA,CAAO,eAAA,IAAmB,OAAA,CAAQ,IAAI,qBAAA,IAAyB,EAAA;AAAA,MAChF,YAAA,EAAc,MAAA,CAAO,YAAA,IAAgB,OAAA,CAAQ,GAAA,CAAI;AAAA,KACnD;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,eAAe,CAAC,IAAA,CAAK,YAAY,eAAA,EAAiB;AACtE,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,uHAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,OAAA,EAAiE;AAC9E,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AACtC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC3C,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,SAAS,IAAI,CAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,eAAe,OAAA,EAAoF;AAIxG,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA;AAE5C,IAAA,MAAM;AAAA,MACJ,IAAI,QAAA,CAAS,EAAA;AAAA,MACb,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,SAAS,OAAA,IAAW,MAAA;AAAA,QAC7B,WAAW,QAAA,CAAS,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,SAAS,SAAA,GAAY;AAAA,OAClE;AAAA,MACA,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,cAAc,QAAA,CAAS;AAAA,KACzB;AAAA,EACF;AAAA;AAAA,EAIQ,kBAAkB,OAAA,EAAqD;AAC7E,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,KAAa,IAAA,CAAK,mBAAA,CAAoB,QAAQ,QAAQ,CAAA;AAEtE,IAAA,MAAM,IAAA,GAA4B;AAAA,MAChC,QAAA,EAAU,SAAS,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,gBAAA,CAAiB,CAAC,CAAC;AAAA,KACxD;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,MAAM,YAAA,GAAe,OAAO,GAAA,CAAI,CAAC,OAAO,EAAE,IAAA,EAAM,GAAE,CAAyB,CAAA;AAC3E,MAAA,IAAI,IAAA,CAAK,oBAAA,EAAsB,YAAA,CAAa,IAAA,CAAK,EAAE,YAAY,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,CAAA;AACpF,MAAA,IAAA,CAAK,MAAA,GAAS,YAAA;AAAA,IAChB;AAGA,IAAA,MAAM,kBAAuC,EAAC;AAC9C,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,IAAA,EAAM,eAAA,CAAgB,YAAY,OAAA,CAAQ,SAAA;AACnE,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,IAAA,EAAM,eAAA,CAAgB,cAAc,OAAA,CAAQ,WAAA;AACvE,IAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,eAAA,CAAgB,OAAO,OAAA,CAAQ,IAAA;AACzD,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,eAAA,CAAgB,aAAA,GAAgB,OAAA,CAAQ,IAAA;AAC1D,IAAA,IAAI,OAAO,IAAA,CAAK,eAAe,EAAE,MAAA,GAAS,CAAA,OAAQ,eAAA,GAAkB,eAAA;AAGpE,IAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,aAAA,CAAc,CAAC,CAAC,CAAA;AAC5D,MAAA,IAAI,IAAA,CAAK,oBAAA,IAAwB,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAEjD,QAAA,KAAA,CAAM,KAAK,EAAE,UAAA,EAAY,EAAE,IAAA,EAAM,SAAA,IAAa,CAAA;AAAA,MAChD;AACA,MAAA,IAAA,CAAK,UAAA,GAAa;AAAA,QAChB;AAAA,OACF;AAEA,MAAA,IAAI,OAAA,CAAQ,cAAc,IAAA,EAAM;AAC9B,QAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAQ;AACjC,UAAA,IAAA,CAAK,UAAA,CAAW,UAAA,GAAa,EAAE,IAAA,EAAM,EAAC,EAAE;AAAA,QAC1C,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,KAAe,UAAA,EAAY;AAC5C,UAAA,IAAA,CAAK,UAAA,CAAW,UAAA,GAAa,EAAE,GAAA,EAAK,EAAC,EAAE;AAAA,QACzC,CAAA,MAAA,IAAW,OAAO,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AACjD,UAAA,IAAA,CAAK,UAAA,CAAW,aAAa,EAAE,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,CAAQ,UAAA,CAAW,IAAA,EAAK,EAAE;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IACnC;AAIA,IAAA,qBAAA,CAAsB,IAAA,EAAM,QAAQ,SAAS,CAAA;AAE7C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,oBAAoB,QAAA,EAA8E;AACxG,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,OAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,IAAI,CAAA,CAAE,SAAS,QAAA,EAAU;AACvB,QAAA,MAAM,IAAA,GAAO,OAAO,CAAA,CAAE,OAAA,KAAY,WAC9B,CAAA,CAAE,OAAA,GACF,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,MAAO,CAAA,CAAqC,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC/G,QAAA,IAAI,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,MAC5B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACb;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAK;AAAA,EAClC;AAAA,EAEQ,iBAAiB,CAAA,EAAwC;AAE/D,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,UAAA,EAAY;AACrC,MAAA,MAAM,IAAA,GAAO,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,EAAE,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA;AACjF,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP;AAAA,YACE,UAAA,EAAY;AAAA,cACV,WAAW,CAAA,CAAE,UAAA;AAAA,cACb,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,CAAA;AAAA,cAClB,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,IACF;AAGA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,WAAW,MAAA,EAAQ;AACjD,MAAA,MAAMC,WAAiB,EAAC;AACxB,MAAA,sBAAA,CAAuBA,QAAAA,EAAS,CAAA,CAAE,SAAA,EAAW,MAAM,CAAA;AACnD,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,IAAY,EAAE,OAAA,EAAS;AAC9C,QAAAA,SAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,SAAS,CAAA;AAAA,MAClC;AACA,MAAA,KAAA,MAAW,EAAA,IAAM,EAAE,SAAA,EAAW;AAC5B,QAAAA,SAAQ,IAAA,CAAK;AAAA,UACX,OAAA,EAAS;AAAA,YACP,WAAW,EAAA,CAAG,EAAA;AAAA,YACd,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,KAAA,EAAOC,cAAAA,CAAc,EAAA,CAAG,SAAS;AAAA;AACnC,SACD,CAAA;AAAA,MACH;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAAD,QAAAA,EAAQ;AAAA,IACtC;AAGA,IAAA,MAAM,UAAiB,EAAC;AACxB,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,SAAS,CAAA;AAAA,IAClC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AACnC,MAAA,KAAA,MAAW,IAAA,IAAQ,EAAE,OAAA,EAAS;AAC5B,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,UAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAAA,QAClC,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAChC,UAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,UAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,YAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,cACX,KAAA,EAAO;AAAA,gBACL,MAAA,EAAQ,iBAAA,CAAkB,GAAA,CAAI,SAAS,CAAA;AAAA,gBACvC,MAAA,EAAQ,EAAE,KAAA,EAAO,GAAA,CAAI,IAAA;AAAK;AAC5B,aACD,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,SAAS,MAAA,GAAS,MAAA,GAAS,aAAa,OAAA,EAAQ;AAAA,EACnE;AAAA,EAEQ,cAAc,CAAA,EAAwC;AAC5D,IAAA,OAAO;AAAA,MACL,QAAA,EAAU;AAAA,QACR,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,aAAa,CAAA,CAAE,WAAA;AAAA,QACf,WAAA,EAAa,EAAE,IAAA,EAAM,CAAA,CAAE,UAAA;AAAW;AACpC,KACF;AAAA,EACF;AAAA,EAEA,MAAc,OAAA,CAAQ,OAAA,EAAiB,IAAA,EAAyC;AAC9E,IAAA,MAAM,IAAA,GAAO,CAAA,gBAAA,EAAmB,IAAA,CAAK,MAAM,CAAA,cAAA,CAAA;AAC3C,IAAA,MAAM,MAAM,CAAA,QAAA,EAAW,IAAI,CAAA,OAAA,EAAU,kBAAA,CAAmB,OAAO,CAAC,CAAA,SAAA,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAEnC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAM;AAE5C,MAAA,MAAM,UAAU,WAAA,CAAY;AAAA,QAC1B,MAAA,EAAQ,MAAA;AAAA,QACR,GAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,MAAA,EAAQ,kBAAA;AAAA,UACR,GAAG,IAAA,CAAK;AAAA,SACV;AAAA,QACA,IAAA,EAAM,OAAA;AAAA,QACN,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAA,EAAS,SAAA;AAAA,QACT,aAAa,IAAA,CAAK;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,QAAQ,OAAA,EAAS,IAAA,EAAM,SAAS,CAAA;AAAA,IAC9D,CAAC,CAAA;AAED,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,kBAAA,EAAqB,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,QACxC,IAAA,CAAK,YAAA;AAAA,QACL,GAAA,CAAI,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,IAAA,EAAK;AAAA,EAClB;AAAA,EAEQ,aAAA,CAAc,MAAW,OAAA,EAAyC;AACxE,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAQ,OAAA;AAC5B,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,MAAM,YAAwB,EAAC;AAC/B,IAAA,MAAM,kBAAoC,EAAC;AAC3C,IAAA,MAAM,eAAyB,EAAC;AAEhC,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,EAAQ,OAAA,IAAW,EAAC,EAAG;AACzC,MAAA,IAAI,MAAM,IAAA,EAAM;AACd,QAAA,SAAA,CAAU,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC3B,CAAA,MAAA,IAAW,MAAM,gBAAA,EAAkB;AACjC,QAAA,MAAM,KAAK,KAAA,CAAM,gBAAA;AACjB,QAAA,IAAI,GAAG,aAAA,EAAe;AACpB,UAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,YACnB,IAAA,EAAM,UAAA;AAAA,YACN,IAAA,EAAM,EAAA,CAAG,aAAA,CAAc,IAAA,IAAQ,EAAA;AAAA,YAC/B,SAAA,EAAW,GAAG,aAAA,CAAc;AAAA,WAC7B,CAAA;AACD,UAAA,IAAI,GAAG,aAAA,CAAc,IAAA,eAAmB,IAAA,CAAK,EAAA,CAAG,cAAc,IAAI,CAAA;AAAA,QACpE,CAAA,MAAA,IAAW,GAAG,eAAA,EAAiB;AAC7B,UAAA,eAAA,CAAgB,KAAK,EAAE,IAAA,EAAM,qBAAqB,IAAA,EAAM,EAAA,CAAG,iBAAiB,CAAA;AAAA,QAC9E;AAAA,MACF,CAAA,MAAA,IAAW,MAAM,OAAA,EAAS;AACxB,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,EAAA,EAAI,MAAM,OAAA,CAAQ,SAAA;AAAA,UAClB,IAAA,EAAM,MAAM,OAAA,CAAQ,IAAA;AAAA,UACpB,SAAA,EAAW,OAAO,KAAA,CAAM,OAAA,CAAQ,UAAU,QAAA,GACtC,KAAA,CAAM,OAAA,CAAQ,KAAA,GACd,KAAK,SAAA,CAAU,KAAA,CAAM,OAAA,CAAQ,KAAA,IAAS,EAAE;AAAA,SAC7C,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,EAAC;AAC7B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,WAAA,EAAa,MAAM,WAAA,IAAe,CAAA;AAAA,MAClC,YAAA,EAAc,MAAM,YAAA,IAAgB,CAAA;AAAA,MACpC,aAAa,KAAA,CAAM,WAAA,IAAA,CAAgB,MAAM,WAAA,IAAe,CAAA,KAAM,MAAM,YAAA,IAAgB,CAAA,CAAA;AAAA,MACpF,iBAAA,EAAmB,MAAM,wBAAA,IAA4B,CAAA;AAAA,MACrD,iBAAA,EAAmB,MAAM,yBAAA,IAA6B,CAAA;AAAA,MACtD,kBAAA,EAAoB,CAAA;AAAA;AAAA,MAEpB,eAAA,EAAiB;AAAA,KACnB;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,WAAW,SAAA,IAAa,EAAA;AAAA,MACnD,KAAA,EAAO,OAAA;AAAA,MACP,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA;AAAA,MAC/B,SAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,YAAA,EAAc,oBAAA,CAAqB,IAAA,CAAK,UAAU,CAAA;AAAA,MAClD,SAAA,EAAW,eAAA,CAAgB,MAAA,GAAS,CAAA,GAChC,EAAE,MAAA,EAAQ,eAAA,EAAiB,OAAA,EAAS,YAAA,CAAa,KAAK,IAAI,CAAA,CAAE,IAAA,EAAK,IAAK,QAAU,GAChF,MAAA;AAAA,MACJ,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AACF;AAMA,SAAS,sBAAA,CAAuB,SAAgB,MAAA,EAA4C;AAC1F,EAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACrB,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,SAAS,mBAAA,EAAqB;AAClC,MAAA,IAAI,CAAA,CAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,gBAAA,EAAkB,EAAE,eAAA,EAAiB,CAAA,CAAE,IAAA,EAAK,EAAG,CAAA;AAAA,IAC5E,CAAA,MAAA,IAAW,CAAA,CAAE,IAAA,KAAS,UAAA,EAAY;AAChC,MAAA,IAAI,EAAE,SAAA,EAAW;AACf,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,gBAAA,EAAkB,EAAE,aAAA,EAAe,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,EAAA,EAAI,SAAA,EAAW,CAAA,CAAE,SAAA,EAAU;AAAE,SACnF,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,MAAA,EAA2E;AACvG,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,UAAA;AAAA,IACL,KAAK,eAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,kBAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,SAAS,kBAAkB,SAAA,EAA2B;AACpD,EAAA,MAAM,GAAA,GAA8B;AAAA,IAClC,YAAA,EAAc,MAAA;AAAA,IACd,WAAA,EAAa,KAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AACA,EAAA,OAAO,GAAA,CAAI,SAAS,CAAA,IAAK,KAAA;AAC3B;AAEA,SAASC,eAAc,GAAA,EAAkB;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;;;AChWO,IAAM,cAAA,GAAN,cAA6B,YAAA,CAAa;AAAA,EAW/C,YAAY,MAAA,EAA8B;AACxC,IAAA,KAAA,EAAM;AAXR,IAAA,IAAA,CAAS,YAAA,GAA6B,QAAA;AAQtC,IAAA,IAAA,CAAQ,WAAA,GAAc,CAAA;AAIpB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,IAAY,aAAA;AACnC,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,kBAAA;AAC3C,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,cAAA,IAAkB,EAAC;AAEhD,IAAA,IAAI,OAAO,WAAA,EAAa;AACtB,MAAA,IAAA,CAAK,cAAc,MAAA,CAAO,WAAA;AAC1B,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA;AAAA,IAClC;AAEA,IAAA,IAAI,OAAO,kBAAA,EAAoB;AAC7B,MAAA,IAAA,CAAK,kBAAA,GACH,OAAO,MAAA,CAAO,kBAAA,KAAuB,QAAA,GACjC,KAAK,KAAA,CAAM,MAAA,CAAO,kBAAkB,CAAA,GACpC,MAAA,CAAO,kBAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,OAAA,EAAiE;AAC9E,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AACtC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,KAAK,CAAA;AACxC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAI,CAAA;AACxC,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,eAAe,OAAA,EAAoF;AACxG,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AACtC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AACzC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,IAAI,CAAA;AACvC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAI,CAAA;AAExC,IAAA,IAAI,CAAC,IAAI,IAAA,EAAM,MAAM,IAAI,aAAA,CAAc,6BAAA,EAA+B,KAAK,YAAY,CAAA;AAGvF,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AAEvD,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,mBAAmB,CAAA,EAAG;AAE7C,MAAA,WAAA,MAAiB,KAAA,IAAS,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AAClD,QAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC7B,QAAA,IAAI,KAAA;AACJ,QAAA,IAAI;AACF,UAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,QAC/B,CAAA,CAAA,MAAQ;AACN,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,OAAO,CAAA;AAAA,MAC5C;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,IAAA,CAAK,SAAA,EAAU;AAClC,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,IAAI,MAAA,GAAS,EAAA;AAEb,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,EAAM;AACX,UAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,UAAA,IAAI,IAAA,EAAM;AACV,UAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAGhD,UAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,UAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,UAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,YAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,EAAK,CAAE,QAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AAClF,YAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,GAAA,IAAO,YAAY,GAAA,EAAK;AACpD,YAAA,IAAI;AACF,cAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,cAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,OAAO,CAAA;AAAA,YAC5C,CAAA,CAAA,MAAQ;AAEN,cAAA,MAAA,GAAS,OAAO,IAAA,GAAO,MAAA;AACvB,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,EAAK,CAAE,QAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtF,QAAA,IAAI,SAAA,IAAa,SAAA,KAAc,GAAA,IAAO,SAAA,KAAc,GAAA,EAAK;AACvD,UAAA,IAAI;AACF,YAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAClC,YAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,OAAO,CAAA;AAAA,UAC5C,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF,CAAA,SAAE;AACA,QAAA,MAAA,CAAO,WAAA,EAAY;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIQ,QAAA,CAAS,SAAiB,MAAA,EAAyB;AACzD,IAAA,MAAM,IAAA,GAAO,CAAA,QAAA,EAAW,IAAA,CAAK,QAAQ,CAAA,6BAAA,CAAA;AACrC,IAAA,MAAM5B,KAAAA,GAAO,YAAY,IAAA,CAAK,SAAS,cAAc,IAAA,CAAK,QAAQ,6BAA6B,OAAO,CAAA,CAAA;AACtG,IAAA,MAAM,MAAA,GAAS,SAAS,+BAAA,GAAkC,iBAAA;AAC1D,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAIA,KAAI,IAAI,MAAM,CAAA,CAAA;AAAA,EAClC;AAAA,EAEQ,gBAAgB,OAAA,EAAqD;AAC3E,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,KAAa,IAAA,CAAK,aAAA,CAAc,QAAQ,QAAQ,CAAA;AAEhE,IAAA,MAAM,IAAA,GAA4B,EAAE,QAAA,EAAS;AAE7C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,iBAAA,GAAoB,EAAE,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA,EAAE;AAAA,IACvD;AAGA,IAAA,MAAM,mBAAwC,EAAC;AAC/C,IAAA,IAAI,OAAA,CAAQ,SAAA,IAAa,IAAA,EAAM,gBAAA,CAAiB,kBAAkB,OAAA,CAAQ,SAAA;AAC1E,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,IAAA,EAAM,gBAAA,CAAiB,cAAc,OAAA,CAAQ,WAAA;AACxE,IAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,IAAA,EAAM,gBAAA,CAAiB,OAAO,OAAA,CAAQ,IAAA;AAC1D,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,gBAAA,CAAiB,aAAA,GAAgB,OAAA,CAAQ,IAAA;AAE3D,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,MAAA,IAAI,QAAQ,cAAA,CAAe,IAAA,KAAS,iBAAiB,OAAA,CAAQ,cAAA,CAAe,SAAS,aAAA,EAAe;AAClG,QAAA,gBAAA,CAAiB,gBAAA,GAAmB,kBAAA;AACpC,QAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAQ;AACjC,UAAA,gBAAA,CAAiB,cAAA,GAAiB,QAAQ,cAAA,CAAe,MAAA;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAEA,IAAA,oBAAA,CAAqB,gBAAA,EAAkB,QAAQ,SAAS,CAAA;AAExD,IAAA,IAAI,OAAO,IAAA,CAAK,gBAAgB,EAAE,MAAA,GAAS,CAAA,OAAQ,gBAAA,GAAmB,gBAAA;AACtE,IAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,MAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,QACX;AAAA,UACE,oBAAA,EAAsB,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,YAAA,CAAa,CAAC,CAAC;AAAA;AACrE,OACF;AAEA,MAAA,IAAI,OAAA,CAAQ,cAAc,IAAA,EAAM;AAC9B,QAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,UAAA,KAAe,MAAA,GAAS,MAAA,GAC9B,OAAA,CAAQ,UAAA,KAAe,UAAA,GAAa,KAAA,GACpC,OAAA,CAAQ,UAAA,KAAe,MAAA,GAAS,MAAA,GAChC,MAAA;AACJ,QAAA,IAAA,CAAK,UAAA,GAAa,EAAE,qBAAA,EAAuB,EAAE,MAAK,EAAE;AAAA,MACtD;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,cAAc,QAAA,EAA6E;AACjG,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,MAAM,WAAkB,EAAC;AAEzB,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,IAAI,CAAA,CAAE,SAAS,QAAA,EAAU;AACvB,QAAA,MAAM,IAAA,GAAO,OAAO,CAAA,CAAE,OAAA,KAAY,WAC9B,CAAA,CAAE,OAAA,GACF,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,MAAO,CAAA,CAAqC,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC/G,QAAA,IAAI,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAC/B,QAAA;AAAA,MACF;AAEA,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAC,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,WAAA,CAAY,MAAA,GAAS,IAAI,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA;AAAA,MAC5D;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,gBAAgB,CAAA,EAAwC;AAE9D,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,UAAA,EAAY;AACrC,MAAA,MAAM,IAAA,GAAO,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,GAAW,EAAE,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAA;AACjF,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC5B,CAAA,CAAA,MAAQ;AACN,QAAA,QAAA,GAAW,EAAE,QAAQ,IAAA,EAAK;AAAA,MAC5B;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL;AAAA,YACE,gBAAA,EAAkB;AAAA,cAChB,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,UAAA;AAAA,cAClB;AAAA;AACF;AACF;AACF,OACF;AAAA,IACF;AAGA,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,WAAA,IAAe,CAAA,CAAE,WAAW,MAAA,EAAQ;AACjD,MAAA,MAAM6B,SAAe,EAAC;AACtB,MAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,IAAY,EAAE,OAAA,EAAS;AAC9C,QAAAA,OAAM,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,SAAS,CAAA;AAAA,MAChC;AACA,MAAA,KAAA,MAAW,EAAA,IAAM,EAAE,SAAA,EAAW;AAC5B,QAAAA,OAAM,IAAA,CAAK;AAAA,UACT,YAAA,EAAc;AAAA,YACZ,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,IAAA,EAAMD,cAAAA,CAAc,EAAA,CAAG,SAAS;AAAA;AAClC,SACD,CAAA;AAAA,MACH;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAAC,MAAAA,EAAM;AAAA,IAChC;AAGA,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,KAAS,WAAA,GAAc,OAAA,GAAU,MAAA;AAChD,IAAA,MAAM,QAAe,EAAC;AAEtB,IAAA,IAAI,OAAO,CAAA,CAAE,OAAA,KAAY,QAAA,EAAU;AACjC,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,CAAE,SAAS,CAAA;AAAA,IAChC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG;AACnC,MAAA,KAAA,MAAW,IAAA,IAAQ,EAAE,OAAA,EAAS;AAC5B,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,UAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAAA,QAChC,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAChC,UAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,UAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,YAAY,EAAE,QAAA,EAAU,IAAI,SAAA,EAAW,IAAA,EAAM,IAAI,IAAA;AAAK,aACvD,CAAA;AAAA,UACH,CAAA,MAAO;AACL,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,UAAU,EAAE,QAAA,EAAU,YAAA,EAAc,OAAA,EAAS,IAAI,GAAA;AAAI,aACtD,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,MAAM,KAAA,EAAM;AAAA,EACvB;AAAA,EAEQ,aAAa,CAAA,EAAwC;AAC3D,IAAA,OAAO;AAAA,MACL,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,YAAY,CAAA,CAAE;AAAA,KAChB;AAAA,EACF;AAAA,EAEA,MAAc,cAAA,GAAkC;AAE9C,IAAA,IAAI,KAAK,WAAA,IAAe,IAAA,CAAK,GAAA,EAAI,GAAI,KAAK,WAAA,EAAa;AACrD,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACd;AAGA,IAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,0BAAA,CAA2B,KAAK,kBAAkB,CAAA;AAC3E,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,OAAO,eAAe,CAAA;AACjD,MAAA,MAAM,KAAA,GAAQ,SAAS,gCAAA,EAAkC,EAAE,UAAU,MAAA,EAAQ,EAAE,IAAA,EAAK;AACpF,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AACnB,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA;AAChC,MAAA,OAAO,KAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,4GAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,2BAA2B,EAAA,EAA0C;AACjF,IAAA,MAAM,EAAE,UAAA,EAAW,GAAI,MAAM,OAAO,QAAQ,CAAA;AAE5C,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,EAAE,GAAA,EAAK,OAAA,EAAS,KAAK,KAAA,EAAM;AAC1C,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,KAAK,EAAA,CAAG,YAAA;AAAA,MACR,KAAA,EAAO,gDAAA;AAAA,MACP,GAAA,EAAK,qCAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,KAAK,GAAA,GAAM;AAAA,KACb;AAEA,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,MAChC,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC;AAAA,KAClC;AACA,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAEtC,IAAA,MAAM,IAAA,GAAO,WAAW,YAAY,CAAA;AACpC,IAAA,IAAA,CAAK,OAAO,YAAY,CAAA;AACxB,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,aAAa,WAAW,CAAA;AACvD,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAExC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,qCAAA,EAAuC;AAAA,MAClE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,mCAAA,EAAoC;AAAA,MAC/D,IAAA,EAAM,oEAAoE,GAAG,CAAA;AAAA,KAC9E,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACjD,MAAA,MAAM,IAAI,aAAA,CAAc,CAAA,mCAAA,EAAsC,IAAI,CAAA,CAAA,EAAI,KAAK,YAAY,CAAA;AAAA,IACzF;AAEA,IAAA,MAAM,SAAA,GAAa,MAAM,QAAA,CAAS,IAAA,EAAK;AACvC,IAAA,OAAO,SAAA,CAAU,YAAA;AAAA,EACnB;AAAA,EAEA,MAAc,OAAA,CAAQ,GAAA,EAAa,IAAA,EAA8C;AAC/E,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,cAAA,EAAe;AAExC,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AAAA,QAC9B,GAAG,IAAA,CAAK;AAAA,OACV;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,oBAAA,EAAuB,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,QAC1C,IAAA,CAAK,YAAA;AAAA,QACL,GAAA,CAAI,MAAA;AAAA,QACJ;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,aAAA,CAAc,MAAW,OAAA,EAAyC;AACxE,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,GAAa,CAAC,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,SAAA,EAAW,OAAA,EAAS,KAAA,IAAS,EAAC;AAE5C,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,MAAM,YAAwB,EAAC;AAC/B,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,IAAI,WAAA,GAAc,CAAA;AAElB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,KAAK,IAAA,EAAM;AAEb,QAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACzB,UAAA,YAAA,CAAa,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,QAC7B,CAAA,MAAO;AACL,UAAA,SAAA,CAAU,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,QAC1B;AAAA,MACF,CAAA,MAAA,IAAW,KAAK,YAAA,EAAc;AAC5B,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,EAAA,EAAI,QAAQ,WAAA,EAAa,CAAA,CAAA;AAAA,UACzB,IAAA,EAAM,KAAK,YAAA,CAAa,IAAA;AAAA,UACxB,WAAW,IAAA,CAAK,SAAA,CAAU,KAAK,YAAA,CAAa,IAAA,IAAQ,EAAE;AAAA,SACvD,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,IAAiB,EAAC;AACzC,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,WAAA,EAAa,UAAU,gBAAA,IAAoB,CAAA;AAAA,MAC3C,YAAA,EAAc,UAAU,oBAAA,IAAwB,CAAA;AAAA,MAChD,WAAA,EAAa,UAAU,eAAA,IAAmB,CAAA;AAAA,MAC1C,iBAAA,EAAmB,UAAU,uBAAA,IAA2B,CAAA;AAAA,MACxD,iBAAA,EAAmB,CAAA;AAAA,MACnB,kBAAA,EAAoB,CAAA;AAAA,MACpB,eAAA,EAAiB,UAAU,kBAAA,IAAsB;AAAA,KACnD;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,KAAK,UAAA,IAAc,EAAA;AAAA,MACvB,KAAA,EAAO,OAAA;AAAA,MACP,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA;AAAA,MAC/B,SAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,YAAA,EAAc,qBAAA,CAAsB,SAAA,EAAW,YAAY,CAAA;AAAA,MAC3D,SAAA,EAAW,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,EAAE,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,EAAK,IAAK,QAAU,GAAI,MAAA;AAAA,MAChG,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEQ,gBAAA,CAAiB,OAAY,OAAA,EAAsC;AACzE,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,UAAA,GAAa,CAAC,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,SAAA,EAAW,OAAA,EAAS,KAAA,IAAS,EAAC;AAC5C,IAAA,MAAM,QAAsC,EAAC;AAE7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACzB,UAAA,KAAA,CAAM,SAAA,GAAY,EAAE,OAAA,EAAA,CAAU,KAAA,CAAM,WAAW,OAAA,IAAW,EAAA,IAAM,KAAK,IAAA,EAAK;AAAA,QAC5E,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,OAAA,GAAA,CAAW,KAAA,CAAM,OAAA,IAAW,EAAA,IAAM,IAAA,CAAK,IAAA;AAAA,QAC/C;AAAA,MACF,CAAA,MAAA,IAAW,KAAK,YAAA,EAAc;AAC5B,QAAA,IAAI,CAAC,KAAA,CAAM,SAAA,EAAW,KAAA,CAAM,YAAY,EAAC;AACzC,QAAA,KAAA,CAAM,UAAU,IAAA,CAAK;AAAA,UACnB,EAAA,EAAI,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,UAClC,IAAA,EAAM,KAAK,YAAA,CAAa,IAAA;AAAA,UACxB,WAAW,IAAA,CAAK,SAAA,CAAU,KAAK,YAAA,CAAa,IAAA,IAAQ,EAAE;AAAA,SACvD,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,MAAM,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,aAAA;AAChB,MAAA,KAAA,GAAQ;AAAA,QACN,WAAA,EAAa,EAAE,gBAAA,IAAoB,CAAA;AAAA,QACnC,YAAA,EAAc,EAAE,oBAAA,IAAwB,CAAA;AAAA,QACxC,WAAA,EAAa,EAAE,eAAA,IAAmB,CAAA;AAAA,QAClC,iBAAA,EAAmB,EAAE,uBAAA,IAA2B,CAAA;AAAA,QAChD,iBAAA,EAAmB,CAAA;AAAA,QACnB,kBAAA,EAAoB,CAAA;AAAA,QACpB,eAAA,EAAiB,EAAE,kBAAA,IAAsB;AAAA,OAC3C;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,MAAM,UAAA,IAAc,EAAA;AAAA,MACxB,KAAA,EAAO,OAAA;AAAA,MACP,KAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA,EAAc,qBAAA,CAAsB,SAAA,EAAW,YAAY;AAAA,KAC7D;AAAA,EACF;AACF;AAIA,SAAS,sBAAsB,MAAA,EAA2E;AACxG,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,QAAA;AAAA,IACL,KAAK,YAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,SAAS,UAAU,GAAA,EAAqB;AACtC,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,WAAW,CAAA;AAC9C;AAEA,SAASD,eAAc,GAAA,EAAkB;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AC9cO,SAAS,kBAAA,CACd,UACA,OAAA,EACe;AACf,EAAA,IAAI,aAA4C,OAAA,EAAiB,OAAA;AAEjE,EAAA,MAAM,SAAA,GAAY,OAAA,EAAS,KAAA,IAAU,QAAA,CAAiB,gBAAgB,QAAA,CAAS,YAAA;AAE/E,EAAA,MAAM,OAAA,GAAyB;AAAA,IAC7B,SAAA;AAAA,IAEA,YAAA,EAAc,mBAAA,CAAoB,QAAA,CAAS,YAAY,CAAA;AAAA,IAEvD,MAAA,EAAQ,OACN,QAAA,EACA,cAAA,KAC6B;AAC7B,MAAA,MAAM,OAAA,GAAU,YAAA,CAAa,QAAA,EAAU,UAAA,EAAY,SAAS,cAAc,CAAA;AAC1E,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA;AAChD,MAAA,OAAO,kBAAkB,QAAQ,CAAA;AAAA,IACnC,CAAA;AAAA,IAEA,MAAA,EAAQ,iBACN,QAAA,EACA,cAAA,EAC+D;AAC/D,MAAA,MAAM,OAAA,GAAU,YAAA,CAAa,QAAA,EAAU,UAAA,EAAY,SAAS,cAAc,CAAA;AAC1E,MAAA,OAAA,CAAQ,MAAA,GAAS,IAAA;AAEjB,MAAA,IAAI,WAAA,GAAc,EAAA;AAClB,MAAA,IAAI,eAA2B,EAAC;AAChC,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI,eAAA;AACJ,MAAA,MAAM,eAAA,uBAAsB,GAAA,EAAsB;AAElD,MAAA,WAAA,MAAiB,KAAA,IAAS,QAAA,CAAS,cAAA,CAAe,OAAO,CAAA,EAAG;AAE1D,QAAA,IAAI,KAAA,CAAM,MAAM,OAAA,EAAS;AACvB,UAAA,WAAA,IAAe,MAAM,KAAA,CAAM,OAAA;AAC3B,UAAA,MAAM,MAAM,KAAA,CAAM,OAAA;AAAA,QACpB;AAGA,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ;AACzC,UAAA,eAAA,GAAkB,KAAA,CAAM,MAAM,SAAA,CAAU,MAAA;AAAA,QAC1C;AAGA,QAAA,IAAI,KAAA,CAAM,MAAM,SAAA,EAAW;AACzB,UAAA,KAAA,MAAW,EAAA,IAAM,KAAA,CAAM,KAAA,CAAM,SAAA,EAAW;AACtC,YAAA,IAAI,GAAG,EAAA,EAAI;AACT,cAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,EAAA,CAAG,EAAE,CAAA;AAC1C,cAAA,IAAI,QAAA,EAAU;AACZ,gBAAA,IAAI,EAAA,CAAG,SAAA,EAAW,QAAA,CAAS,SAAA,IAAa,EAAA,CAAG,SAAA;AAAA,cAC7C,CAAA,MAAO;AACL,gBAAA,eAAA,CAAgB,GAAA,CAAI,GAAG,EAAA,EAAI;AAAA,kBACzB,IAAI,EAAA,CAAG,EAAA;AAAA,kBACP,IAAA,EAAM,GAAG,IAAA,IAAQ,EAAA;AAAA,kBACjB,SAAA,EAAW,GAAG,SAAA,IAAa;AAAA,iBAC5B,CAAA;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,CAAM,KAAA,EAAO,SAAA,GAAY,KAAA,CAAM,KAAA;AAAA,MACrC;AAGA,MAAA,YAAA,GAAe,CAAC,GAAG,eAAA,CAAgB,MAAA,EAAQ,CAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,WAAA,EAAa,YAAA,EAAc,SAAS,CAAA;AACzE,MAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,QAAC,YAAA,CAAqB,SAAA,GAAY,EAAE,MAAA,EAAQ,eAAA,EAAgB;AAAA,MAC9D;AACA,MAAA,MAAM,YAAA;AAAA,IACR,CAAA;AAAA,IAEA,SAAA,EAAW,CAAC,KAAA,EAAc,YAAA,KAA2E;AACnG,MAAA,MAAM,MAAA,GAAS,cAAc,MAAA,IAAU,KAAA;AACvC,MAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,CAAC,MAAM,gBAAA,CAAiB,CAAA,EAAG,MAAM,CAAC,CAAA;AAE7D,MAAA,OAAO,mBAAmB,QAAA,EAAU,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,UAAiB,CAAA;AAAA,IAC9E;AAAA,GACF;AAEA,EAAA,OAAO,OAAA;AAIP,EAAA,SAAS,YAAA,CACP,QAAA,EACA,KAAA,EACA,IAAA,EACA,aAAA,EACuB;AACvB,IAAA,MAAM,GAAA,GAA6B;AAAA,MACjC,KAAA,EAAO,MAAM,KAAA,IAAS,SAAA;AAAA,MACtB,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,gBAAgB;AAAA,KACzC;AAEA,IAAA,IAAI,IAAA,EAAM,WAAA,IAAe,IAAA,EAAM,GAAA,CAAI,cAAc,IAAA,CAAK,WAAA;AACtD,IAAA,IAAI,IAAA,EAAM,SAAA,IAAa,IAAA,EAAM,GAAA,CAAI,YAAY,IAAA,CAAK,SAAA;AAClD,IAAA,IAAI,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,KAAA,GAAQ,KAAA;AAC/B,IAAA,IAAI,IAAA,EAAM,KAAA,EAAO,GAAA,CAAI,KAAA,GAAQ,IAAA,CAAK,KAAA;AAGlC,IAAA,MAAM,oBAAqB,aAAA,EAAuB,SAAA;AAClD,IAAA,MAAM,YAAA,GAAe,qBAAqB,IAAA,EAAM,SAAA;AAChD,IAAA,IAAI,YAAA,MAAkB,SAAA,GAAY,YAAA;AAGlC,IAAA,MAAM,EAAA,GAAM,aAAA,EAAuB,WAAA,IAAgB,aAAA,EAAuB,UAAA;AAC1E,IAAA,IAAI,EAAA,IAAM,OAAO,MAAA,EAAQ;AACvB,MAAA,GAAA,CAAI,UAAA,GAAa,EAAA;AAAA,IACnB;AAGA,IAAA,MAAM,KAAK,aAAA,EAAe,eAAA;AAC1B,IAAA,IAAI,EAAA,IAAM,OAAO,EAAA,KAAO,QAAA,IAAY,GAAG,IAAA,EAAM;AAC3C,MAAA,IAAI,EAAA,CAAG,IAAA,KAAS,aAAA,IAAiB,EAAA,CAAG,WAAA,EAAa;AAC/C,QAAA,GAAA,CAAI,cAAA,GAAiB;AAAA,UACnB,IAAA,EAAM,aAAA;AAAA,UACN,MAAA,EAAQ,GAAG,WAAA,CAAY,MAAA;AAAA,UACvB,IAAA,EAAM,GAAG,WAAA,CAAY;AAAA,SACvB;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,aAAA,EAAe;AACpC,QAAA,GAAA,CAAI,cAAA,GAAiB,EAAE,IAAA,EAAM,aAAA,EAAc;AAAA,MAC7C,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,MAAA,EAAQ;AAC7B,QAAA,GAAA,CAAI,cAAA,GAAiB,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA,MACtC;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,IAAI,cAAA,EAAgB;AACvB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,OAAA,IAAY,QAAgB,gBAAA,EAAkB;AAChD,QAAA,GAAA,CAAI,iBAAkB,OAAA,CAAgB,gBAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAIA,SAAS,iBAAiB,GAAA,EAAsC;AAC9D,EAAA,MAAM,OAAA,GAA0B;AAAA,IAC9B,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,OAAA,EAAS,cAAA,CAAe,GAAA,CAAI,OAAO;AAAA,GACrC;AAEA,EAAA,IAAI,GAAA,CAAI,IAAA,EAAM,OAAA,CAAQ,IAAA,GAAO,GAAA,CAAI,IAAA;AACjC,EAAA,IAAI,GAAA,CAAI,YAAA,EAAc,OAAA,CAAQ,UAAA,GAAa,GAAA,CAAI,YAAA;AAE/C,EAAA,IAAI,GAAA,CAAI,YAAY,MAAA,EAAQ;AAC1B,IAAA,OAAA,CAAQ,SAAA,GAAY,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,MAAa;AAAA,MACnD,IAAI,EAAA,CAAG,EAAA;AAAA,MACP,IAAA,EAAM,EAAA,CAAG,QAAA,EAAU,IAAA,IAAQ,GAAG,IAAA,IAAQ,EAAA;AAAA,MACtC,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAA,IAAa,GAAG,SAAA,IAAa;AAAA,KACvD,CAAE,CAAA;AAAA,EACJ;AAIA,EAAA,MAAM,YAAa,GAAA,CAAY,SAAA;AAC/B,EAAA,IAAI,SAAA,KAAc,SAAA,CAAU,MAAA,EAAQ,MAAA,IAAU,UAAU,OAAA,CAAA,EAAU;AAChE,IAAA,OAAA,CAAQ,SAAA,GAAY,SAAA;AAAA,EACtB;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAe,OAAA,EAAiE;AACvF,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,OAAO,GAAG,OAAO,MAAA,CAAO,WAAW,EAAE,CAAA;AAExD,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAsB;AACxC,IAAA,IAAI,KAAK,IAAA,KAAS,MAAA,IAAW,CAAC,IAAA,CAAK,IAAA,IAAQ,KAAK,IAAA,EAAO;AACrD,MAAA,OAAO,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,KAAK,IAAA,IAAQ,IAAA,CAAK,WAAW,EAAA,EAAG;AAAA,IAC/D;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,MAAA,MAAM,MAAO,IAAA,CAAa,SAAA;AAC1B,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,KAAK,GAAA,EAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AAC3D,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,OAAA;AAAA,UACN,MAAA,EAAQ,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,GAAA,CAAI,GAAA;AAAI,SACtE;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,EAAK,GAAA,EAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AACjC,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,4BAA4B,CAAA;AACxD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,OAAA;AAAA,YACN,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,KAAA,CAAM,CAAC,CAAA,EAAG,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA;AAAE,WAChE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAE;AAAA,EACjF,CAAC,CAAA;AACH;AAIA,SAAS,YAAY,GAAA,EAAmB;AACtC,EAAA,OAAO,GAAA,IAAO,QAAQ,OAAO,GAAA,KAAQ,YAAY,OAAO,GAAA,CAAI,SAAA,KAAc,UAAA,IAAc,MAAA,IAAU,GAAA;AACpG;AAEA,SAAS,oBAAA,CAAqB,IAAA,EAAW,UAAA,GAAa,KAAA,EAAgB;AACpE,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,UAAU,OAAO,KAAA;AAE9C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvB,IAAA,OAAO,KAAK,IAAA,CAAK,CAAC,SAAS,oBAAA,CAAqB,IAAA,EAAM,UAAU,CAAC,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IAAa,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA;AACjG,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAC,IAAA,CAAK,UAAA,IAAc,OAAO,IAAA,CAAK,UAAA,KAAe,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,UAAU,CAAA;AAChH,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,KAAU,MAAA;AAChC,EAAA,MAAM,eAAe,CAAC,OAAA,EAAS,SAAS,OAAO,CAAA,CAAE,KAAK,CAAC,GAAA,KAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,IAAK,KAAK,GAAG,CAAA,CAAE,SAAS,CAAC,CAAA;AAE/G,EAAA,IAAI,cAAc,CAAC,OAAA,IAAW,CAAC,aAAA,IAAiB,CAAC,QAAA,EAAU;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,IAAc,YAAA,IAAgB,CAAC,OAAA,EAAS;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,UAAqC,CAAA,EAAG;AAC7E,MAAA,IAAI,oBAAA,CAAqB,KAAA,EAAO,IAAI,CAAA,EAAG;AACrC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,KAAA,IAAS,oBAAA,CAAqB,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA,EAAG;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,EAAG;AAC7C,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,IAAK,oBAAA,CAAqB,IAAA,CAAK,GAAG,CAAA,EAAG,KAAK,CAAA,EAAG;AACtE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,aAAA,EAAe,OAAO,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAA,GAAO,KAAK,GAAG,CAAA;AACrB,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,IAA+B,CAAA,EAAG;AAClE,QAAA,IAAI,oBAAA,CAAqB,KAAA,EAAO,KAAK,CAAA,EAAG;AACtC,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,uBAAuB,MAAA,EAAsB;AACpD,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAA,CAAY,MAAM,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAC,qBAAqB,MAAM,CAAA;AACrC;AAMA,SAAS,mBAAA,CAAoB,MAAA,EAAa,MAAA,GAAS,KAAA,EAA4B;AAC7E,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,IAAI,QAAA,EAAU,EAAC,EAAG,oBAAA,EAAsB,KAAA,EAAM;AAAA,EACrF;AACA,EAAA,IAAI,WAAA,CAAY,MAAM,CAAA,EAAG;AACvB,IAAA,MAAME,UAAAA,GAAY5B,gCAAgB,MAAA,EAAQ;AAAA,MACxC,YAAA,EAAc,MAAA;AAAA,MACd,GAAI,MAAA,GAAS,EAAE,gBAAA,EAAkB,IAAA,KAAS;AAAC,KAC5C,CAAA;AACD,IAAA,OAAO4B,WAAU,SAAS,CAAA;AAE1B,IAAA,IAAI,CAACA,UAAAA,CAAU,IAAA,EAAMA,WAAU,IAAA,GAAO,QAAA;AACtC,IAAA,OAAOA,UAAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAA,GAAY,EAAE,GAAG,MAAA,EAAO;AAC9B,EAAA,OAAO,UAAU,SAAS,CAAA;AAE1B,EAAA,IAAI,CAAC,SAAA,CAAU,IAAA,IAAQ,SAAA,CAAU,UAAA,EAAY;AAC3C,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,GAAG,SAAA,EAAU;AAAA,EACxC;AACA,EAAA,OAAO,SAAA;AACT;AAOA,SAAS,sBAAsB,MAAA,EAAkD;AAC/E,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,UAAU,OAAO,MAAA;AAClD,EAAA,MAAM7B,MAAAA,GAAQ,EAAE,GAAG,MAAA,EAAO;AAE1B,EAAA,IAAI,OAAOA,MAAAA,CAAM,MAAA,KAAW,QAAA,EAAU;AACpC,IAAA,OAAOA,MAAAA,CAAM,MAAA;AAAA,EACf;AAEA,EAAA,IAAIA,MAAAA,CAAM,IAAA,KAAS,QAAA,IAAYA,MAAAA,CAAM,UAAA,EAAY;AAC/C,IAAA,IAAI,CAACA,MAAAA,CAAM,IAAA,EAAMA,OAAM,IAAA,GAAO,QAAA;AAC9B,IAAA,IAAIA,MAAAA,CAAM,UAAA,IAAc,OAAOA,MAAAA,CAAM,eAAe,QAAA,EAAU;AAC5D,MAAA,MAAM,aAAkC,EAAC;AACzC,MAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQA,MAAAA,CAAM,UAAU,CAAA,EAAG;AACrD,QAAA,UAAA,CAAW,CAAC,CAAA,GAAI,qBAAA,CAAsB,CAAwB,CAAA;AAAA,MAChE;AACA,MAAAA,OAAM,UAAA,GAAa,UAAA;AACnB,MAAAA,MAAAA,CAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAAA,MAAAA,CAAM,aAAa,EAAC;AACpB,MAAAA,MAAAA,CAAM,WAAW,EAAC;AAAA,IACpB;AACA,IAAAA,OAAM,oBAAA,GAAuB,KAAA;AAAA,EAC/B;AAEA,EAAA,IAAIA,OAAM,KAAA,EAAOA,OAAM,KAAA,GAAQ,qBAAA,CAAsBA,OAAM,KAAK,CAAA;AAChE,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA,EAAG;AAC7C,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQA,MAAAA,CAAM,GAAG,CAAC,CAAA,EAAG;AAC7B,MAAAA,MAAAA,CAAM,GAAG,CAAA,GAAIA,MAAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAW,qBAAA,CAAsB,CAAC,CAAC,CAAA;AAAA,IAClE;AAAA,EACF;AACA,EAAA,IAAIA,MAAAA,CAAM,WAAA,IAAe,OAAOA,MAAAA,CAAM,gBAAgB,QAAA,EAAU;AAC9D,IAAA,MAAM,KAA0B,EAAC;AACjC,IAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQA,MAAAA,CAAM,WAAW,CAAA,EAAG;AACtD,MAAA,EAAA,CAAG,CAAC,CAAA,GAAI,qBAAA,CAAsB,CAAwB,CAAA;AAAA,IACxD;AACA,IAAAA,OAAM,WAAA,GAAc,EAAA;AAAA,EACtB;AACA,EAAA,IAAIA,MAAAA,CAAM,KAAA,IAAS,OAAOA,MAAAA,CAAM,UAAU,QAAA,EAAU;AAClD,IAAA,MAAM,KAA0B,EAAC;AACjC,IAAA,KAAA,MAAW,CAAC,GAAG,CAAC,CAAA,IAAK,OAAO,OAAA,CAAQA,MAAAA,CAAM,KAAK,CAAA,EAAG;AAChD,MAAA,EAAA,CAAG,CAAC,CAAA,GAAI,qBAAA,CAAsB,CAAwB,CAAA;AAAA,IACxD;AACA,IAAAA,OAAM,KAAA,GAAQ,EAAA;AAAA,EAChB;AACA,EAAA,OAAOA,MAAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,MAAW,MAAA,EAAkC;AACrE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,YAAY,MAAA,IAAU,KAAA;AAE1B,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,UAAA,IAAc,IAAA,CAAK,QAAA,EAAU;AAE7C,IAAA,IAAA,GAAO,KAAK,QAAA,CAAS,IAAA;AACrB,IAAA,WAAA,GAAc,IAAA,CAAK,SAAS,WAAA,IAAe,EAAA;AAC3C,IAAA,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,UAAA,IAAc,EAAE,IAAA,EAAM,UAAU,UAAA,EAAY,EAAC,EAAG,oBAAA,EAAsB,KAAA,EAAM;AAAA,EACxG,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,KAAK,IAAA,IAAQ,SAAA;AACpB,IAAA,WAAA,GAAc,KAAK,WAAA,IAAe,EAAA;AAClC,IAAA,SAAA,GAAY,IAAA,CAAK,UAAU,IAAA,CAAK,UAAA;AAAA,EAClC;AAEA,EAAA,IAAI,SAAA,IAAa,CAAC,sBAAA,CAAuB,SAAS,CAAA,EAAG;AACnD,IAAA,SAAA,GAAY,KAAA;AAAA,EACd;AAEA,EAAA,UAAA,GAAa,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAErD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,UAAA,GAAa,sBAAsB,UAAU,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,UAAA,EAAY,GAAI,SAAA,GAAY,EAAE,MAAA,EAAQ,IAAA,EAAK,GAAI,EAAC,EAAG;AACjF;AAEA,SAAS,kBAAkB,QAAA,EAAmD;AAC5E,EAAA,MAAM,GAAA,GAAuB;AAAA,IAC3B,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS,SAAS,OAAA,IAAW,EAAA;AAAA,IAC7B,KAAA,EAAO;AAAA,MACL,aAAA,EAAe,SAAS,KAAA,CAAM,WAAA;AAAA,MAC9B,iBAAA,EAAmB,SAAS,KAAA,CAAM,YAAA;AAAA,MAClC,YAAA,EAAc,SAAS,KAAA,CAAM,WAAA;AAAA,MAC7B,qBAAA,EAAuB;AAAA,QACrB,aAAA,EAAe,SAAS,KAAA,CAAM;AAAA,OAChC;AAAA,MACA,yBAAA,EAA2B;AAAA,QACzB,gBAAA,EAAkB,SAAS,KAAA,CAAM;AAAA;AACnC,KACF;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,WAAA,EAAa;AAAA,QACX,aAAA,EAAe,SAAS,KAAA,CAAM,WAAA;AAAA,QAC9B,iBAAA,EAAmB,SAAS,KAAA,CAAM,YAAA;AAAA,QAClC,YAAA,EAAc,SAAS,KAAA,CAAM,WAAA;AAAA,QAC7B,aAAA,EAAe,SAAS,KAAA,CAAM,iBAAA;AAAA,QAC9B,kBAAA,EAAoB,SAAS,KAAA,CAAM;AAAA,OACrC;AAAA,MACA,eAAe,QAAA,CAAS,YAAA;AAAA,MACxB,YAAY,QAAA,CAAS;AAAA;AACvB,GACF;AAEA,EAAA,IAAI,QAAA,CAAS,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,GAAA,CAAI,UAAA,GAAa,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MAC/C,IAAI,EAAA,CAAG,EAAA;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,UAAU,EAAE,IAAA,EAAM,GAAG,IAAA,EAAM,SAAA,EAAW,GAAG,SAAA;AAAU,KACrD,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,IAAI,QAAA,CAAS,cAAc,QAAA,CAAS,SAAA,CAAU,QAAQ,MAAA,IAAU,QAAA,CAAS,UAAU,OAAA,CAAA,EAAU;AAC3F,IAAC,GAAA,CAAY,YAAY,QAAA,CAAS,SAAA;AAAA,EACpC;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAA,EAAiB,SAAA,EAAuB,KAAA,EAAqC;AACpG,EAAA,MAAM,GAAA,GAAuB;AAAA,IAC3B,IAAA,EAAM,WAAA;AAAA,IACN;AAAA,GACF;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,GAAA,CAAI,KAAA,GAAQ;AAAA,MACV,eAAe,KAAA,CAAM,WAAA;AAAA,MACrB,mBAAmB,KAAA,CAAM,YAAA;AAAA,MACzB,cAAc,KAAA,CAAM,WAAA;AAAA,MACpB,qBAAA,EAAuB;AAAA,QACrB,eAAe,KAAA,CAAM;AAAA,OACvB;AAAA,MACA,yBAAA,EAA2B;AAAA,QACzB,kBAAkB,KAAA,CAAM;AAAA;AAC1B,KACF;AACA,IAAA,GAAA,CAAI,iBAAA,GAAoB;AAAA,MACtB,WAAA,EAAa;AAAA,QACX,eAAe,KAAA,CAAM,WAAA;AAAA,QACrB,mBAAmB,KAAA,CAAM,YAAA;AAAA,QACzB,cAAc,KAAA,CAAM,WAAA;AAAA,QACpB,eAAe,KAAA,CAAM,iBAAA;AAAA,QACrB,oBAAoB,KAAA,CAAM;AAAA;AAC5B,KACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,GAAA,CAAI,UAAA,GAAa,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACtC,IAAI,EAAA,CAAG,EAAA;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,UAAU,EAAE,IAAA,EAAM,GAAG,IAAA,EAAM,SAAA,EAAW,GAAG,SAAA;AAAU,KACrD,CAAE,CAAA;AAAA,EACJ;AAEA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,oBAAoB,QAAA,EAA2C;AACtE,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,mBAAA;AACH,MAAA,OAAO;AAAA,QACL,gBAAA,EAAkB,QAAA;AAAA,QAClB,iBAAA,EAAmB,IAAA;AAAA,QACnB,SAAA,EAAW,IAAA;AAAA,QACX;AAAA,OACF;AAAA,IACF,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,gBAAA,EAAkB,YAAA;AAAA,QAClB,iBAAA,EAAmB,KAAA;AAAA,QACnB,SAAA,EAAW,IAAA;AAAA,QACX,QAAA,EAAU;AAAA,OACZ;AAAA,IACF,KAAK,SAAA;AACH,MAAA,OAAO;AAAA,QACL,gBAAA,EAAkB,YAAA;AAAA,QAClB,iBAAA,EAAmB,KAAA;AAAA,QACnB,SAAA,EAAW,KAAA;AAAA;AAAA,QACX,QAAA,EAAU;AAAA,OACZ;AAAA,IACF,KAAK,QAAA;AACH,MAAA,OAAO;AAAA,QACL,gBAAA,EAAkB,QAAA;AAAA,QAClB,iBAAA,EAAmB,KAAA;AAAA,QACnB,SAAA,EAAW,IAAA;AAAA,QACX,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AACE,MAAA,OAAO,EAAE,QAAA,EAAS;AAAA;AAExB;;;ACtdO,SAAS,eAAe,MAAA,EAAsC;AACnE,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,eAAe,MAAM,CAAA;AAAA,IAClC,KAAK,WAAA;AACH,MAAA,OAAO,IAAI,kBAAkB,MAAM,CAAA;AAAA,IACrC,KAAK,OAAA;AACH,MAAA,OAAO,IAAI,cAAc,MAAM,CAAA;AAAA,IACjC,KAAK,mBAAA;AACH,MAAA,OAAO,IAAI,yBAAyB,MAAM,CAAA;AAAA,IAC5C,KAAK,SAAA;AACH,MAAA,OAAO,IAAI,gBAAgB,MAAM,CAAA;AAAA,IACnC,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,eAAe,MAAM,CAAA;AAAA,IAClC;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAsB,MAAA,CAAe,QAAQ,CAAA,CAAE,CAAA;AAAA;AAErE","file":"index.cjs","sourcesContent":["/**\n * Token counter contract used across the SDK. The default is a\n * character-based heuristic; users can swap in a real tokenizer (tiktoken,\n * @anthropic-ai/tokenizer, …) via SmartAgentOptions.tokenCounter.\n */\nexport type TokenCounter = (text: string) => number;\n\n/**\n * Estimates token count from text using a character-based heuristic.\n *\n * Approximation:\n * - For Latin/ASCII text: ~4 characters per token (GPT-family models)\n * - For CJK/Unicode text: ~1.5 characters per token\n *\n * For production accuracy, pass a `tokenCounter` option backed by tiktoken.\n */\nexport function defaultTokenCounter(text: string): number {\n if (!text) return 0;\n // Count non-ASCII characters (CJK, Arabic, etc.) which use more tokens\n const nonAsciiCount = (text.match(/[^\\x00-\\x7F]/g) || []).length;\n const asciiCount = text.length - nonAsciiCount;\n // ASCII text: ~4 chars/token, non-ASCII: ~1.5 chars/token\n return Math.ceil(asciiCount / 4 + nonAsciiCount / 1.5);\n}\n\nlet activeTokenCounter: TokenCounter = defaultTokenCounter;\n\n/**\n * Installs a custom token counter used by every callable in this module\n * (countApproxTokens, countMessagesTokens). Pass `undefined` or\n * `defaultTokenCounter` to restore the heuristic.\n */\nexport function setTokenCounter(counter?: TokenCounter | null): void {\n activeTokenCounter = typeof counter === \"function\" ? counter : defaultTokenCounter;\n}\n\nexport function getTokenCounter(): TokenCounter {\n return activeTokenCounter;\n}\n\n/** Backwards-compatible alias that delegates to the active counter. */\nexport function countApproxTokens(text: string): number {\n return activeTokenCounter(text || \"\");\n}\n\n/**\n * Extracts all text from a message, including content AND tool_calls arguments.\n * \n * Standard `countApproxTokens` only counts `.content`, but assistant messages\n * with tool_calls often have `content: \"\"` while `tool_calls[].function.arguments`\n * can contain massive JSON strings. The actual LLM API counts both towards input tokens,\n * so we must include tool_calls to get an accurate estimate.\n * \n * Also accounts for per-message overhead (role, name, formatting tokens).\n */\nfunction extractMessageText(m: any): string {\n if (!m) return \"\";\n const parts: string[] = [];\n\n // 1. Role + name overhead (~4 tokens worth of text)\n parts.push(m.role || \"\");\n if (m.name) parts.push(m.name);\n\n // 2. Content field\n if (typeof m.content === \"string\") {\n parts.push(m.content);\n } else if (Array.isArray(m.content)) {\n for (const c of m.content) {\n if (typeof c === \"string\") parts.push(c);\n else if (c?.text) parts.push(c.text);\n else if (c?.content) parts.push(c.content);\n else if (c?.type === \"tool_use\" && c?.input) {\n // Anthropic/Bedrock native tool_use content blocks\n parts.push(c.name || \"\");\n parts.push(typeof c.input === \"string\" ? c.input : JSON.stringify(c.input));\n } else if (c != null && typeof c === \"object\") {\n parts.push(JSON.stringify(c));\n }\n }\n } else if (m.content != null && typeof m.content === \"object\") {\n parts.push(JSON.stringify(m.content));\n }\n\n // 3. Tool calls (assistant messages) — these are counted by the API but often missed\n if (Array.isArray(m.tool_calls)) {\n for (const tc of m.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n // LangChain normalized format (name + args at top level)\n if (tc?.name && !tc?.function?.name) parts.push(tc.name);\n if (tc?.args && !tc?.function?.arguments) {\n parts.push(typeof tc.args === \"string\" ? tc.args : JSON.stringify(tc.args));\n }\n }\n }\n\n // 4. additional_kwargs.tool_calls (LangChain Bedrock format)\n if (Array.isArray(m.additional_kwargs?.tool_calls)) {\n for (const tc of m.additional_kwargs.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n }\n }\n\n return parts.join(\"\\n\");\n}\n\n/**\n * Estimates the total token count for an array of messages.\n * \n * Unlike counting only `.content`, this includes:\n * - `tool_calls[].function.arguments` (can be massive JSON)\n * - `tool_calls[].function.name`\n * - `additional_kwargs.tool_calls` (LangChain/Bedrock)\n * - Per-message overhead (role, name, formatting)\n * - Anthropic tool_use content blocks\n */\nexport function countMessagesTokens(messages: any[]): number {\n if (!Array.isArray(messages) || messages.length === 0) return 0;\n const allText = messages.map(extractMessageText).join(\"\\n\");\n // Add ~4 tokens per message for framing overhead (role delimiters, etc.)\n return countApproxTokens(allText) + messages.length * 4;\n}\n","import { z } from \"zod\";\nimport { createRequire } from \"module\";\n\nimport type { ToolInterface } from \"../types.js\";\n\ntype ToolExecutor = (input: any) => Promise<any> | any;\n\nconst moduleName = \"@langchain/core/tools\";\nlet cachedToolFactory: ((impl: ToolExecutor, config: Record<string, any>) => any) | null | undefined;\nlet cachedHasAttemptedFactory = false;\n\nlet requireFn: ((specifier: string) => any) | null = null;\ntry {\n requireFn = createRequire(import.meta.url);\n} catch {\n requireFn = null;\n}\n\nfunction getExecutor(tool: ToolInterface): ToolExecutor {\n if (typeof tool.invoke === \"function\") return (input: any) => tool.invoke!(input);\n if (typeof tool.call === \"function\") return (input: any) => tool.call!(input);\n if (typeof (tool as any).func === \"function\") return (input: any) => (tool as any).func(input);\n if (typeof (tool as any).run === \"function\") return (input: any) => (tool as any).run(input);\n if (typeof (tool as unknown as ToolExecutor) === \"function\") {\n return tool as unknown as ToolExecutor;\n }\n throw new Error(`Tool ${tool?.name ?? \"<unnamed>\"} is not invokable`);\n}\n\nfunction loadLangchainToolFactory(): ((impl: ToolExecutor, config: Record<string, any>) => any) | null {\n if (cachedHasAttemptedFactory) return cachedToolFactory ?? null;\n cachedHasAttemptedFactory = true;\n cachedToolFactory = null;\n if (!requireFn) return null;\n try {\n const mod = requireFn(moduleName) as any;\n const factory = typeof mod?.tool === \"function\" ? mod.tool : undefined;\n if (typeof factory === \"function\") {\n cachedToolFactory = factory;\n }\n } catch {\n cachedToolFactory = null;\n }\n return cachedToolFactory ?? null;\n}\n\nfunction ensureSchema(candidate: any) {\n if (!candidate) return z.any();\n if (candidate instanceof z.ZodType) return candidate;\n return candidate;\n}\n\nexport function toLangchainTools(tools: ToolInterface[]): any[] {\n const factory = loadLangchainToolFactory();\n if (!factory) return tools;\n\n return tools.map((tool) => {\n if (!tool) return tool;\n if ((tool as any).__lcTool) return (tool as any).__lcTool;\n\n const executor = getExecutor(tool);\n try {\n const lcTool = factory(async (input: any) => executor(input), {\n name: tool.name,\n description: tool.description,\n schema: ensureSchema((tool as any).schema),\n });\n (tool as any).__lcTool = lcTool;\n return lcTool;\n } catch {\n return tool;\n }\n });\n}\n\nexport function fromLangchainTools<T extends ToolInterface = ToolInterface>(tools: any[]): T[] {\n return tools.map((tool: any) => {\n if (!tool) return tool;\n if ((tool as any).__source === \"smart\") return tool as T;\n if (typeof tool === \"function\" && !tool.name) {\n const wrapped = createSimpleTool({\n name: \"anonymous_tool\",\n description: undefined,\n schema: z.any(),\n executor: tool as ToolExecutor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n }\n\n const name = tool.name || (tool?.lc_kwargs?.name as string) || (tool?.config?.name as string) || \"tool\";\n const description = tool.description || tool?.lc_kwargs?.description;\n const schema = tool.schema || tool?.lc_kwargs?.schema || z.any();\n const executor: ToolExecutor = (input: any) => {\n if (typeof tool.invoke === \"function\") return tool.invoke(input);\n if (typeof tool.call === \"function\") return tool.call(input);\n if (typeof tool._call === \"function\") return tool._call(input);\n if (typeof tool.run === \"function\") return tool.run(input);\n if (typeof tool.func === \"function\") return tool.func(input);\n if (typeof tool === \"function\") return tool(input);\n throw new Error(`LangChain tool ${name} is not invokable`);\n };\n\n const wrapped = createSimpleTool({\n name,\n description,\n schema,\n executor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n });\n}\n\nfunction createSimpleTool({\n name,\n description,\n schema,\n executor,\n}: {\n name: string;\n description?: string;\n schema: any;\n executor: ToolExecutor;\n}): ToolInterface {\n const invoke = async (input: any) => executor(input);\n return {\n name,\n description,\n schema,\n invoke,\n call: invoke,\n run: invoke,\n func: invoke,\n };\n}\n","import type { ZodError } from \"zod\";\n\n// --- Model Capabilities ---\n\n/** Describes what a model/provider natively supports. */\nexport type ModelCapabilities = {\n /** How the model supports structured output:\n * - \"native\": model accepts response_format with json_schema (OpenAI, Gemini, etc.)\n * - \"tool_based\": structured output must be emulated via a response tool\n */\n structuredOutput?: \"native\" | \"tool_based\";\n /** Whether tools must be bound with strict=true for native structured output auto-parsing. */\n strictToolCalling?: boolean;\n /** Whether the model supports streaming */\n streaming?: boolean;\n /** Provider identifier (e.g. \"openai\", \"anthropic\", \"bedrock\", \"google\") */\n provider?: string;\n};\n\n// --- Structured Output Error ---\n\nexport type StructuredOutputFieldError = {\n path: string;\n expected: string;\n received: string;\n message: string;\n};\n\nexport type StructuredOutputError = {\n type: \"parse_error\" | \"validation_error\" | \"no_output\" | \"max_retries\";\n message: string;\n fieldErrors?: StructuredOutputFieldError[];\n rawContent?: string;\n};\n\n// --- Structured Output Result ---\n\nexport type StructuredOutputResult<T> =\n | { success: true; data: T; attempts: number }\n | { success: false; error: StructuredOutputError; attempts: number; rawContent?: string };\n\n// --- Strategy Interface ---\n\n/**\n * Encapsulates how structured output is achieved for a given model/provider.\n * NativeJsonSchemaStrategy uses response_format; ToolBasedStrategy uses a response tool.\n */\nexport interface StructuredOutputStrategy {\n readonly kind: \"native\" | \"tool_based\";\n\n /**\n * Build a correction prompt when validation fails.\n * The prompt tells the model exactly which fields were wrong.\n */\n buildCorrectionPrompt(error: ZodError<any>, previousAttempt: unknown): string;\n}\n\n// --- Manager Config ---\n\nexport type StructuredOutputManagerConfig = {\n maxRetries?: number;\n};\n\n// --- Helper: get nested value for error messages ---\n\nexport function getNestedValue(obj: unknown, path: (string | number)[]): unknown {\n let current: any = obj;\n for (const key of path) {\n if (current == null || typeof current !== \"object\") return undefined;\n current = current[key];\n }\n return current;\n}\n\n// --- Helper: format ZodError into StructuredOutputError ---\n\nexport function formatZodError(error: ZodError<any>, rawContent?: string): StructuredOutputError {\n const fieldErrors: StructuredOutputFieldError[] = error.issues.map((issue) => ({\n path: issue.path.join(\".\") || \"root\",\n expected: (issue as any).expected ?? issue.code,\n received: (issue as any).received ?? \"unknown\",\n message: issue.message,\n }));\n\n return {\n type: \"validation_error\",\n message: `Schema validation failed: ${fieldErrors.map((f) => `${f.path}: ${f.message}`).join(\"; \")}`,\n fieldErrors,\n rawContent,\n };\n}\n","import type { ZodError, ZodSchema } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport type { StructuredOutputStrategy, StructuredOutputError } from \"./types.js\";\nimport { formatZodError, getNestedValue } from \"./types.js\";\n\n/**\n * Native JSON Schema strategy for providers that support `response_format`.\n *\n * Works with OpenAI (gpt-4o+), Google Gemini, and similar providers\n * that accept `response_format: { type: \"json_schema\", json_schema: {...} }`.\n *\n * The model guarantees valid JSON output matching the schema — no tool needed.\n */\nexport class NativeJsonSchemaStrategy implements StructuredOutputStrategy {\n readonly kind = \"native\" as const;\n\n private resolveJsonPointer(document: Record<string, any>, pointer: string): unknown {\n if (!pointer.startsWith(\"#/\")) {\n return undefined;\n }\n\n const segments = pointer\n .slice(2)\n .split(\"/\")\n .map((segment) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n\n let current: unknown = document;\n for (const segment of segments) {\n if (!current || typeof current !== \"object\" || !(segment in (current as Record<string, unknown>))) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n }\n\n private unwrapRootObjectSchema(schema: Record<string, any>): Record<string, any> {\n if (schema.type === \"object\") {\n return schema;\n }\n\n const ref = typeof schema.$ref === \"string\" ? schema.$ref : null;\n if (!ref) {\n return schema;\n }\n\n const resolved = this.resolveJsonPointer(schema, ref);\n if (!resolved || typeof resolved !== \"object\" || Array.isArray(resolved)) {\n return schema;\n }\n\n const resolvedSchema = { ...(resolved as Record<string, any>) };\n if (resolvedSchema.type !== \"object\") {\n return schema;\n }\n\n if (schema.definitions && resolvedSchema.definitions === undefined) {\n resolvedSchema.definitions = schema.definitions;\n }\n\n if (schema.$defs && resolvedSchema.$defs === undefined) {\n resolvedSchema.$defs = schema.$defs;\n }\n\n return resolvedSchema;\n }\n\n private normalizeOpenAIStrictSchema(schema: Record<string, any>): Record<string, any> {\n const visit = (node: any): any => {\n if (!node || typeof node !== \"object\") return node;\n\n if (Array.isArray(node)) {\n return node.map(visit);\n }\n\n const clone: Record<string, any> = { ...node };\n\n if (clone.properties && typeof clone.properties === \"object\") {\n const normalizedProperties: Record<string, any> = {};\n for (const [key, value] of Object.entries(clone.properties)) {\n normalizedProperties[key] = visit(value);\n }\n clone.properties = normalizedProperties;\n clone.required = Object.keys(normalizedProperties);\n if (clone.additionalProperties === undefined) {\n clone.additionalProperties = false;\n }\n }\n\n if (clone.items) {\n clone.items = visit(clone.items);\n }\n\n if (clone.definitions && typeof clone.definitions === \"object\") {\n const normalizedDefinitions: Record<string, any> = {};\n for (const [key, value] of Object.entries(clone.definitions)) {\n normalizedDefinitions[key] = visit(value);\n }\n clone.definitions = normalizedDefinitions;\n }\n\n if (clone.$defs && typeof clone.$defs === \"object\") {\n const normalizedDefs: Record<string, any> = {};\n for (const [key, value] of Object.entries(clone.$defs)) {\n normalizedDefs[key] = visit(value);\n }\n clone.$defs = normalizedDefs;\n }\n\n for (const compositeKey of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n if (Array.isArray(clone[compositeKey])) {\n clone[compositeKey] = clone[compositeKey].map(visit);\n }\n }\n\n return clone;\n };\n\n return visit(schema);\n }\n\n /**\n * Convert a Zod schema to the JSON Schema object used in response_format.\n */\n toJsonSchema(schema: ZodSchema<any>, name = \"structured_response\"): Record<string, any> {\n // Use zod-to-json-schema's OpenAI strict mode so optional/defaulted fields are\n // normalized into OpenAI's stricter json_schema subset.\n // @ts-expect-error zodToJsonSchema type instantiation can be excessively deep with complex schemas\n const result = zodToJsonSchema(schema, {\n name,\n openaiStrictMode: true,\n nameStrategy: \"duplicate-ref\",\n $refStrategy: \"extract-to-root\",\n nullableStrategy: \"property\",\n });\n const normalized = this.normalizeOpenAIStrictSchema(result as Record<string, any>);\n return this.unwrapRootObjectSchema(normalized);\n }\n\n /**\n * Build response_format configuration for the model call.\n * Returns the object that should be spread into model invocation options.\n */\n buildResponseFormat(schema: ZodSchema<any>, name?: string): Record<string, any> {\n const schemaName = name || \"structured_response\";\n const jsonSchema = this.toJsonSchema(schema, schemaName);\n // Remove $schema and other meta keys that some providers don't accept\n delete jsonSchema[\"$schema\"];\n\n return {\n response_format: {\n type: \"json_schema\",\n json_schema: {\n name: schemaName,\n strict: true,\n schema: jsonSchema,\n },\n },\n };\n }\n\n /**\n * Parse and validate model response content.\n * With native support, content is guaranteed JSON — but we still validate with Zod\n * for type safety and field-level error reporting.\n */\n extractOutput<T>(content: string, schema: ZodSchema<T>): { data: T } | { error: StructuredOutputError } {\n try {\n const raw = JSON.parse(content);\n const validated = (schema as any).parse(raw);\n return { data: validated };\n } catch (e: any) {\n if (e?.issues) {\n return { error: formatZodError(e as ZodError<T>, content) };\n }\n return {\n error: {\n type: \"parse_error\",\n message: `Failed to parse native structured output: ${e?.message}`,\n rawContent: content,\n },\n };\n }\n }\n\n buildCorrectionPrompt(error: ZodError<any>, previousAttempt: unknown): string {\n const fieldIssues = error.issues\n .map((issue) => {\n const pathStr = issue.path.join(\".\") || \"root\";\n const received = getNestedValue(previousAttempt, issue.path);\n return `- \"${pathStr}\": ${issue.message} (received: ${JSON.stringify(received)})`;\n })\n .join(\"\\n\");\n\n return [\n \"Your previous JSON response had validation errors:\",\n fieldIssues,\n \"\",\n \"Please output corrected JSON matching the schema.\",\n ].join(\"\\n\");\n }\n}\n","import type { ZodSchema } from \"zod\";\n\nimport type { ToolInterface } from \"./types.js\";\n\nexport type SmartToolFn = (args: any) => Promise<any> | any;\n\nexport type ToolCachePolicy = {\n /** Cache scope. \"run\" persists for the current invoke only. */\n scope?: \"run\";\n /** Override the cache key (default: stable JSON of args). */\n keyFn?: (args: any) => string;\n /** Time-to-live for the cached value, in ms. Default: full invoke. */\n ttlMs?: number;\n};\n\nexport type ToolRetryPolicy = {\n /** Max retry attempts after the initial failure. Default: 0. */\n maxRetries?: number;\n /** Initial backoff in ms (doubled on each retry). Default: 250. */\n backoffMs?: number;\n /** Decide whether an error is worth retrying. Default: every error. */\n shouldRetry?: (err: unknown, attempt: number) => boolean;\n /**\n * Open a circuit-breaker after this many consecutive failures across the\n * invoke; once tripped the tool short-circuits with the breaker error\n * until the loop ends. Default: never trip.\n */\n circuitBreakerThreshold?: number;\n};\n\nexport function createTool({\n name,\n description,\n schema,\n func,\n needsApproval,\n approvalPrompt,\n approvalDefaults,\n maxExecutionsPerRun,\n cache,\n retry,\n}: {\n name: string;\n description?: string;\n schema: ZodSchema;\n func: SmartToolFn;\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n /** When set, identical args within the same invoke short-circuit to the cached result. */\n cache?: boolean | ToolCachePolicy;\n /** Per-tool retry + circuit-breaker policy. */\n retry?: ToolRetryPolicy;\n}): ToolInterface {\n const execute: SmartToolFn = async (input: any) => func(input);\n\n const toolRecord: ToolInterface = {\n name,\n description,\n schema,\n // Our runtime prefers invoke but fallback helpers keep compatibility with LC-style tools.\n invoke: execute,\n call: execute,\n run: execute,\n func: execute,\n } as ToolInterface;\n\n if (typeof needsApproval === \"boolean\") {\n (toolRecord as any).needsApproval = needsApproval;\n }\n if (approvalPrompt !== undefined) {\n (toolRecord as any).approvalPrompt = approvalPrompt;\n }\n if (approvalDefaults !== undefined) {\n (toolRecord as any).approvalDefaults = approvalDefaults;\n }\n if (maxExecutionsPerRun !== undefined) {\n (toolRecord as any).maxExecutionsPerRun = maxExecutionsPerRun;\n }\n if (cache !== undefined) {\n (toolRecord as any).cache = cache;\n }\n if (retry !== undefined) {\n (toolRecord as any).retry = retry;\n }\n\n (toolRecord as any).__source = (toolRecord as any).__source || \"smart\";\n (toolRecord as any).__impl = func;\n\n return toolRecord;\n}\n","import type { ZodError, ZodSchema } from \"zod\";\nimport type { StructuredOutputStrategy, StructuredOutputError } from \"./types.js\";\nimport { formatZodError, getNestedValue } from \"./types.js\";\nimport { createTool } from \"../tool.js\";\nimport type { ToolInterface } from \"../types.js\";\n\n/**\n * Tool-based structured output strategy.\n *\n * Injects a hidden `response` tool that the model must call with the final JSON.\n * This is the universal fallback that works with all providers.\n */\nexport class ToolBasedStrategy implements StructuredOutputStrategy {\n readonly kind = \"tool_based\" as const;\n\n /**\n * Create the `response` tool for a given Zod schema.\n * The tool validates input against the schema and returns a sentinel object\n * that the tools node picks up to finalize the structured output.\n */\n createResponseTool<T>(schema: ZodSchema<T>): ToolInterface {\n return createTool({\n name: \"response\",\n description:\n \"Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.\",\n schema: schema as any,\n func: async (data: any) => {\n try {\n const validated = (schema as any).parse ? (schema as any).parse(data) : data;\n return { __finalStructuredOutput: true, data: validated };\n } catch (e: any) {\n // Return structured error so the model can self-correct\n const zodError = e as ZodError<T>;\n if (zodError?.issues) {\n const soError = formatZodError(zodError);\n return {\n error: \"Schema validation failed\",\n details: soError.message,\n fieldErrors: soError.fieldErrors,\n };\n }\n return { error: \"Schema validation failed\", details: e?.message };\n }\n },\n });\n }\n\n /**\n * Try to extract structured output from raw assistant text content.\n * Used as a last resort when the model writes JSON directly instead of calling the tool.\n */\n extractFromText<T>(content: string, schema: ZodSchema<T>): { data: T } | { error: StructuredOutputError } {\n let jsonText: string | null = null;\n\n // Try fenced code block first\n const fenced = content.match(/```(?:json)?\\n([\\s\\S]*?)```/i);\n if (fenced && fenced[1]) {\n jsonText = fenced[1].trim();\n } else {\n // Find first { or [\n const braceIdx = content.indexOf(\"{\");\n const bracketIdx = content.indexOf(\"[\");\n const candidates = [braceIdx, bracketIdx].filter((i) => i >= 0).sort((a, b) => a - b);\n if (candidates.length > 0) {\n jsonText = content.slice(candidates[0]).trim();\n }\n }\n\n try {\n const raw = JSON.parse(jsonText ?? content);\n const validated = (schema as any).parse(raw);\n return { data: validated };\n } catch (e: any) {\n if (e?.issues) {\n return { error: formatZodError(e as ZodError<T>, content) };\n }\n return {\n error: {\n type: \"parse_error\",\n message: `Failed to parse JSON from assistant message: ${e?.message}`,\n rawContent: content,\n },\n };\n }\n }\n\n buildCorrectionPrompt(error: ZodError<any>, previousAttempt: unknown): string {\n const fieldIssues = error.issues\n .map((issue) => {\n const pathStr = issue.path.join(\".\") || \"root\";\n const received = getNestedValue(previousAttempt, issue.path);\n return `- \"${pathStr}\": ${issue.message} (received: ${JSON.stringify(received)})`;\n })\n .join(\"\\n\");\n\n return [\n \"Your previous structured output had validation errors:\",\n fieldIssues,\n \"\",\n \"Please call `response` again with corrected values matching the schema.\",\n ].join(\"\\n\");\n }\n}\n","import type { StructuredOutputStrategy, ModelCapabilities } from \"./types.js\";\nimport { NativeJsonSchemaStrategy } from \"./nativeStrategy.js\";\nimport { ToolBasedStrategy } from \"./toolStrategy.js\";\n\n/**\n * Resolve the most appropriate structured output strategy for a given model.\n *\n * If the model exposes capabilities (via adapter or direct provider),\n * we use native JSON Schema support when available. Otherwise we fall back\n * to the universal tool-based approach.\n *\n * When direct providers are added to the SDK, they should set\n * `model.capabilities.structuredOutput = \"native\"` for providers that support\n * response_format (OpenAI, Gemini, etc.).\n */\nexport function resolveStrategy(model: any): StructuredOutputStrategy {\n const capabilities = getModelCapabilities(model);\n\n if (capabilities.structuredOutput === \"native\") {\n return new NativeJsonSchemaStrategy();\n }\n\n return new ToolBasedStrategy();\n}\n\n/**\n * Extract capabilities from a model object.\n * Supports:\n * - model.capabilities (set by adapters or direct providers)\n * - Auto-detection from model class name / metadata\n */\nexport function getModelCapabilities(model: any): ModelCapabilities {\n // Explicit capabilities take precedence\n if (model?.capabilities && typeof model.capabilities === \"object\") {\n return model.capabilities as ModelCapabilities;\n }\n\n // Auto-detect from LangChain wrapper or model metadata\n const provider = detectProvider(model);\n if (provider) {\n return {\n provider,\n structuredOutput: supportsNativeStructuredOutput(provider) ? \"native\" : \"tool_based\",\n strictToolCalling: requiresStrictToolCalling(provider),\n streaming: true,\n };\n }\n\n // Default: tool-based (safe fallback)\n return { structuredOutput: \"tool_based\" };\n}\n\n/**\n * Try to detect the provider from model metadata.\n * Works with both fromLangchainModel wrappers and future direct providers.\n */\nfunction detectProvider(model: any): string | undefined {\n if (!model || typeof model !== \"object\") return undefined;\n\n // Check explicit provider field\n if (typeof model.provider === \"string\") return model.provider;\n\n // Check LangChain wrapped model\n const lcModel = model._lc;\n if (lcModel) {\n return detectProviderFromLCModel(lcModel);\n }\n\n // Check model name hints\n const modelName: string = model.modelName || model.model || \"\";\n if (modelName.startsWith(\"gpt-\") || modelName.startsWith(\"o1\") || modelName.startsWith(\"o3\") || modelName.startsWith(\"o4\")) return \"openai\";\n if (modelName.startsWith(\"claude\")) return \"anthropic\";\n if (modelName.startsWith(\"gemini\")) return \"google\";\n if (modelName.startsWith(\"amazon.\") || modelName.startsWith(\"anthropic.\")) return \"bedrock\";\n\n return undefined;\n}\n\nfunction detectProviderFromLCModel(lcModel: any): string | undefined {\n if (!lcModel) return undefined;\n\n const className = lcModel.constructor?.name || \"\";\n if (className.includes(\"ChatOpenAI\") || className.includes(\"AzureChatOpenAI\")) return \"openai\";\n if (className.includes(\"ChatAnthropic\")) return \"anthropic\";\n if (className.includes(\"ChatGoogleGenerativeAI\") || className.includes(\"ChatVertexAI\")) return \"google\";\n if (className.includes(\"ChatBedrock\") || className.includes(\"BedrockChat\")) return \"bedrock\";\n if (className.includes(\"ChatGroq\")) return \"groq\";\n if (className.includes(\"ChatMistralAI\")) return \"mistral\";\n\n // Check _llmType()\n const llmType = typeof lcModel._llmType === \"function\" ? lcModel._llmType() : lcModel._llmType;\n if (typeof llmType === \"string\") {\n if (llmType.includes(\"openai\")) return \"openai\";\n if (llmType.includes(\"anthropic\")) return \"anthropic\";\n if (llmType.includes(\"google\")) return \"google\";\n }\n\n return undefined;\n}\n\n/**\n * Providers that support native response_format with json_schema.\n * This list will grow as more providers adopt the standard.\n */\nfunction supportsNativeStructuredOutput(provider: string): boolean {\n return [\"openai\", \"google\", \"groq\", \"mistral\"].includes(provider);\n}\n\nfunction requiresStrictToolCalling(provider: string): boolean {\n return [\"openai\"].includes(provider);\n}\n","// Generic base chat model contract used internally by agent-sdk.\n// We intentionally keep this minimal and implementation-agnostic so that\n// different framework specific models (LangChain, OpenAI SDK, Anthropic, etc.)\n// can be adapted without adding hard dependencies.\n\nimport { toLangchainTools } from \"./adapters/langchain.js\";\nimport type { ModelCapabilities } from \"./structuredOutput/types.js\";\nimport { getModelCapabilities } from \"./structuredOutput/resolver.js\";\n\nexport interface BaseChatMessagePart {\n type?: string; // e.g. 'text'\n text?: string;\n content?: string; // provider specific\n [key: string]: any;\n}\n\nexport interface BaseChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | string;\n name?: string;\n content: string | BaseChatMessagePart[];\n // Tool call metadata (OpenAI style)\n tool_calls?: Array<{ id: string; type?: string; function?: { name: string; arguments: string } }>;\n tool_call_id?: string; // for tool response messages\n usage?: any; // optional provider usage shape\n response_metadata?: any; // optional provider wrapper metadata\n [key: string]: any; // allow extensions\n}\n\nexport interface BaseChatModel {\n // Invoke should accept an array of BaseChatMessage (system/user/assistant/tool)\n invoke(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage>;\n // Optional streaming method that yields incremental chunks or messages\n stream?(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): AsyncIterable<BaseChatMessage | BaseChatMessagePart | string>;\n // Optional tool binding hook. If not present the agent will emulate simple pass-through.\n bindTools? (tools: any[], options?: { strict?: boolean; [key: string]: any }): BaseChatModel;\n // Optional metadata helpers\n modelName?: string;\n // Provider capabilities (structured output support, streaming, etc.)\n capabilities?: ModelCapabilities;\n [key: string]: any; // allow arbitrary extensions\n}\n\nexport type SmartModel = BaseChatModel;\n\nexport function isSmartModel(m: any): m is SmartModel {\n return !!m && typeof m === 'object' && typeof m.invoke === 'function';\n}\n\nexport function withTools(model: SmartModel, tools: any[], options?: { strict?: boolean; [key: string]: any }) {\n if (model?.bindTools) return model.bindTools(tools, options);\n return model;\n}\n\n// --- Adapters ----------------------------------------------------------------\n\n// Duck-type adapter for LangChain ChatModel / Runnable style objects.\n// We DO NOT import LangChain here; instead we just check for common methods.\n// Usage: fromLangchainModel(new ChatOpenAI(...)) returns a BaseChatModel.\nexport function fromLangchainModel(lcModel: any): BaseChatModel {\n if (!lcModel) throw new Error('fromLangchainModel: model is undefined/null');\n\n /** Normalize multimodal content parts for LangChain message format. */\n const normalizeContent = (content: any): any => {\n if (content == null) return content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((part: any) => {\n if (!part || typeof part !== 'object') return part;\n if (part.type === 'text') return { type: 'text', text: String(part.text ?? '') };\n if (part.type === 'image_url') {\n const img = (part as any).image_url;\n if (typeof img === 'string') return { type: 'image_url', image_url: { url: img } };\n if (img && typeof img === 'object') {\n if ('url' in img) return { type: 'image_url', image_url: img };\n if ('base64' in img) {\n const media = (img as any).media_type || 'image/jpeg';\n const dataUrl = `data:${media};base64,${(img as any).base64}`;\n const detail = (img as any).detail;\n return { type: 'image_url', image_url: { url: dataUrl, detail } };\n }\n }\n return part;\n }\n return part;\n });\n }\n return content;\n };\n\n /** Convert a BaseChatMessage to a LangChain-compatible message object. */\n const toLC = (m: BaseChatMessage): any => {\n if ((m as any)._getType || (m as any).lc_serializable) return m as any;\n return { role: m.role, content: normalizeContent(m.content), name: m.name, tool_calls: (m as any).tool_calls, tool_call_id: (m as any).tool_call_id };\n };\n\n const adapted: BaseChatModel = {\n invoke: async (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage> => {\n const lcMessages = messages.map(toLC);\n const response = await lcModel.invoke(lcMessages, options);\n if (response && typeof response === 'object') {\n const content = (response as any).content ?? (response as any).text ?? '';\n return {\n role: (response as any).role || 'assistant',\n content,\n tool_calls: (response as any).tool_calls,\n usage: (response as any).usage\n ?? (response as any).usage_metadata\n ?? (response as any).response_metadata?.token_usage\n ?? (response as any).response_metadata?.tokenUsage,\n usage_metadata: (response as any).usage_metadata,\n response_metadata: (response as any).response_metadata,\n ...response,\n } as BaseChatMessage;\n }\n return { role: 'assistant', content: String(response ?? '') };\n },\n stream: async function* (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }) {\n if (typeof lcModel.stream !== 'function') return;\n const lcMessages = messages.map(toLC);\n const streamResult = lcModel.stream(lcMessages, options);\n const stream = typeof (streamResult as Promise<unknown>)?.then === \"function\" ? await streamResult : streamResult;\n for await (const chunk of stream) {\n yield chunk as any;\n }\n },\n bindTools: (tools: any[], options?: { strict?: boolean; [key: string]: any }) => {\n const lcReady = toLangchainTools(tools);\n if (typeof lcModel.bindTools === 'function') {\n const bound = lcModel.bindTools(lcReady, options);\n return fromLangchainModel(bound);\n }\n if (typeof lcModel.bind === 'function') {\n const bound = lcModel.bind({ tools: lcReady, ...(options || {}) });\n return fromLangchainModel(bound);\n }\n return adapted;\n },\n modelName: lcModel.modelName || lcModel._modelId || lcModel._llmType || lcModel.name,\n _lc: lcModel,\n };\n\n // Auto-detect capabilities from the LangChain model\n adapted.capabilities = getModelCapabilities(adapted);\n\n return adapted;\n}\n\n// Placeholder for future adapters (OpenAI SDK, Anthropic, etc.) can follow a similar pattern.\n\n","import type { PlanningMode } from \"./types.js\";\n\nconst DEFAULT_TODO_LIST_PROMPT = `Planning tools are available when they materially improve execution.\n\nRules:\n1) Use \"manage_todo_list\" for multi-step work, delegation, recovery after a failed attempt, or when the user explicitly asks for a plan.\n2) Do NOT create a plan for direct Q&A, simple recall from existing context, or a single straightforward tool lookup unless the user asks for one.\n3) If a task is multi-step and no valid plan exists yet, create one before substantial execution.\n4) Use operation=\"write\" only to create or fully replace the entire plan. After a plan exists, default to operation=\"update\" for progress, evidence, status, owner changes, blockers, or reprioritization.\n5) When using operation=\"update\", send only the changed items. Do not resend unchanged plan items unless the whole plan structure is being rewritten.\n6) Include expectedVersion from the latest successful plan state whenever you update an existing plan. If you do not know the latest version, read the plan first.\n7) Keep exactly ONE item \"in-progress\" at a time.\n8) Update the plan whenever a step starts, completes, becomes blocked, fails, or the approach changes. Do not finish a multi-step task with stale plan state.\n9) If tool results materially change the task state, sync the plan before the final answer.\n10) Reuse prior tool results already present in the conversation before calling tools again.\n11) If an update fails because of a version mismatch, read the latest plan and retry instead of blindly rewriting it.\n12) Repeating full operation=\"write\" calls for the same plan is a mistake unless the plan structure itself changed.\n13) Keep the plan internal unless the user explicitly asks to see it.`;\n\nfunction buildPlanningBlock(todoListPrompt?: string) {\n const promptBody = todoListPrompt?.trim() || DEFAULT_TODO_LIST_PROMPT;\n if (promptBody.startsWith(\"<planning>\")) {\n return promptBody;\n }\n return `<planning>\\n${promptBody}\\n</planning>`;\n}\n\nexport function buildSystemPrompt(\n extra?: string,\n planning?: boolean | PlanningMode,\n name: string = \"Agent\",\n todoListPrompt?: string,\n) {\n const extraTrimmed = extra?.trim();\n const agentHeader = `Agent Name: ${name}`;\n const planningMode = typeof planning === \"string\"\n ? planning\n : planning\n ? \"todo\"\n : \"off\";\n const planningBlock = planningMode !== \"off\"\n ? buildPlanningBlock(todoListPrompt)\n : \"\";\n return [\n agentHeader,\n \"You are an advanced AI agent that is concise, accurate, and helpful.\",\n \"Follow these rules:\",\n \"- Use tools only when they add value; avoid redundant calls.\",\n \"- Never fabricate tool results; if unavailable, say so briefly.\",\n \"- Prefer short, structured answers; use bullet points when helpful.\",\n \"- Keep privacy and safety: do not reveal secrets or sensitive data.\",\n \"- If inputs are ambiguous or missing, ask one concise clarifying question.\",\n \"- Reuse prior tool results already present in the conversation when sufficient.\",\n \"- Use recovery tools such as \\\"get_tool_response\\\" only when the visible transcript explicitly shows a reduced tool-response marker (for example ARCHIVED_TOOL_RESPONSE, STRUCTURED_TOOL_RESPONSE, SUMMARIZED_TOOL_RESPONSE, DROPPED_TOOL_RESPONSE, or a truncation note with an executionId). Never use a recovery tool to re-fetch a normal tool result already visible in context.\",\n planningBlock,\n extraTrimmed ? `Extra instructions: ${extraTrimmed}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n","// LangChain specific types are removed from core; we define lightweight internal shapes.\n// If the user uses LangChain, they can still pass LC message objects; we treat them opaquely.\nimport type { ZodSchema } from \"zod\";\n\n// Image and content part types for multimodal messages\nexport type ImageURL =\n | { url: string; detail?: 'auto' | 'low' | 'high' }\n | { base64: string; media_type?: string; detail?: 'auto' | 'low' | 'high' }\n | string;\n\nexport type ContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: ImageURL }\n | { type: string; [key: string]: any };\n\n// Generic tool interface minimal contract (duck-typed). If user passes a LangChain Tool it will satisfy this.\nexport interface ToolInterface<TInput = any, TOutput = any, TCallOptions = any> {\n name: string;\n description?: string;\n // Either invoke(arg) or call(arg)\n invoke?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n call?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n schema?: any; // optional JSON schema / zod inference\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n [key: string]: any;\n}\n\nexport type RunnableConfig = { [key: string]: any };\n\n// Base message (internal) – we accept either string content or array parts.\nexport type BaseMessage = {\n role: string; // 'user' | 'assistant' | 'system' | 'tool' | etc.\n name?: string;\n content: string | ContentPart[];\n tool_calls?: any;\n tool_call_id?: string;\n [key: string]: any;\n};\n\n// AI message is any message with role=assistant; keep alias for usageConverter generics\nexport type AIMessage = BaseMessage & { role: 'assistant' };\n\nexport type Message = BaseMessage; // maintain alias used elsewhere\n\nexport enum GuardrailPhase {\n Request = \"request\",\n Response = \"response\",\n}\n\nexport type GuardrailDisposition = \"block\" | \"warn\" | \"allow\";\n\nexport type GuardrailContext = {\n phase: GuardrailPhase;\n messages: Message[];\n latestMessage?: Message;\n state: SmartState;\n runtime?: AgentRuntimeConfig;\n options: SmartAgentOptions;\n};\n\nexport type GuardrailRuleResult = {\n passed: boolean;\n reason?: string;\n details?: Record<string, any>;\n disposition?: GuardrailDisposition;\n};\n\nexport type GuardrailRule = {\n id?: string;\n title?: string;\n description?: string;\n evaluate: (\n context: GuardrailContext\n ) => Promise<GuardrailRuleResult> | GuardrailRuleResult;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailIncident = {\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n phase: GuardrailPhase;\n reason?: string;\n details?: Record<string, any>;\n disposition: GuardrailDisposition;\n};\n\nexport type ConversationGuardrail = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo: GuardrailPhase[];\n rules: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: (\n incident: GuardrailIncident,\n context: GuardrailContext\n ) => Promise<GuardrailDisposition | void> | GuardrailDisposition | void;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailOutcome = {\n ok: boolean;\n incidents: GuardrailIncident[];\n};\n\n// Common limits for both Agent and SmartAgent\nexport type AgentLimits = {\n maxToolCalls?: number;\n // Maximum number of tools to execute in parallel per turn\n maxParallelTools?: number;\n // Approximate maximum context tokens the smart runtime should build for model calls\n maxContextTokens?: number;\n /**\n * Cap on cumulative model output tokens across the whole invoke. Once\n * exceeded the loop terminates after the current iteration with a\n * `metadata` event explaining the reason and emits `finalAnswer` so callers\n * can still recover the partial result.\n */\n maxTotalOutputTokens?: number;\n /**\n * Cap on cumulative cost in USD. Requires `costEstimator` on the agent\n * options to be a no-op-free check; otherwise this limit is ignored.\n */\n maxCostUsd?: number;\n /**\n * Cap on total wall-clock time for the invoke in milliseconds. Identical\n * semantics to `InvokeConfig.timeoutMs` but lives on the agent definition\n * so server-side defaults can be enforced without per-call wiring.\n */\n maxWallClockMs?: number;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentLimits = AgentLimits;\n\nexport type TraceSinkFileConfig = {\n type: \"file\";\n path?: string;\n};\n\nexport type TraceSinkCustomConfig = {\n type: \"custom\";\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n};\n\nexport type TraceSinkCognipeerConfig = {\n type: \"cognipeer\";\n apiKey: string;\n url?: string;\n};\n\nexport type TraceSinkHttpConfig = {\n type: \"http\";\n url: string;\n headers?: Record<string, string>;\n};\n\nexport type TraceSinkOtlpConfig = {\n type: \"otlp\";\n endpoint: string;\n headers?: Record<string, string>;\n};\n\nexport type TracingMode = \"batched\" | \"streaming\";\n\nexport type TraceSinkConfig =\n | TraceSinkFileConfig\n | TraceSinkCustomConfig\n | TraceSinkCognipeerConfig\n | TraceSinkHttpConfig\n | TraceSinkOtlpConfig;\n\nexport type TracingConfig = {\n enabled: boolean;\n mode?: TracingMode;\n logData?: boolean;\n sink?: TraceSinkConfig;\n threadId?: string;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentTracingConfig = TracingConfig;\n\n// --- Base Agent (simple, minimal) ---\nexport type AgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Optional override for the built-in todo list planning instructions.\n // Applied only when todo/planning guidance is enabled.\n todoListPrompt?: string;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n /**\n * Unified reasoning configuration. Controls both:\n * - Provider-native reasoning (OpenAI reasoning_effort, Anthropic thinking, Gemini thinkingConfig)\n * - Post-turn reflection (a short textual insight from the model after each tool turn)\n *\n * When omitted or `enabled=false` the agent behaves exactly as before.\n */\n reasoning?: ReasoningConfig;\n /**\n * Optional drop-in token counter. When provided, all internal token\n * estimates (summarization trigger, hard caps, context budget) use this\n * function instead of the built-in character heuristic. Recommended:\n * tiktoken / @anthropic-ai/tokenizer for production accuracy.\n */\n tokenCounter?: (text: string) => number;\n /**\n * Pluggable cost estimator: returns USD cost for a single model call's\n * usage. Used by the `maxCostUsd` budget limit. When omitted the SDK has\n * no built-in pricing table and the cost limit is a no-op.\n */\n costEstimator?: (args: {\n modelName?: string;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens?: number;\n reasoningTokens?: number;\n }) => number;\n /**\n * Human-in-the-loop hooks. When `askUser` is enabled, the agent gains a\n * built-in `ask_user_question` tool that pauses the run with structured\n * questions for the host application to answer.\n */\n humanInTheLoop?: HumanInTheLoopOptions;\n};\n\n// ─── Reasoning + Reflection ──────────────────────────────────────────────────\n// Unified naming:\n// - `reasoning.native` → provider-native reasoning pass-through\n// - `reasoning.reflection` → post-turn textual reflection step\n//\n// Top-level `enabled`/`level` act as a preset; explicit sub-keys always win.\n\nexport type ReasoningLevel = \"minimal\" | \"low\" | \"medium\" | \"high\";\n\nexport type ReflectionCadence = \"off\" | \"every_turn\" | \"after_tool\" | \"on_branch\" | \"initial_then_after_tool\";\n\n/** Context passed to reflection lifecycle hooks. */\nexport type ReflectionHookContext = {\n state: SmartState;\n /** The turn number (state.toolCallCount) at the time of the decision. */\n turn: number;\n trigger: ReflectionCadence;\n ranToolsThisTurn: boolean;\n};\n\nexport type ReflectionConfig = {\n enabled?: boolean;\n cadence?: ReflectionCadence;\n /**\n * - \"piggyback\" (default) — appends a short user-style \"reflect now\" message to the existing\n * transcript, reusing provider prompt cache. No tools. Returned text becomes a reflection record.\n * - \"separate\" — dedicated tool-free call with a compact prompt (cheaper, smaller cache hit).\n */\n mode?: \"piggyback\" | \"separate\";\n maxTokens?: number;\n maxChars?: number;\n keepLast?: number;\n /** When true reflection messages are compressible by the summarizer. Default false. */\n summarize?: boolean;\n promptTemplate?: string;\n /** When true emits `reflection` SmartAgent events. Default true. */\n emitEvents?: boolean;\n /**\n * Hard cap on the number of reflection calls within a single invoke. Once\n * the cap is hit subsequent qualifying turns no longer trigger reflection.\n * Default: unlimited.\n */\n maxPerRun?: number;\n /**\n * Minimum number of tool-bearing turns between reflections. Defaults to 1\n * (reflect on every qualifying turn). Set to 2 to reflect every other tool\n * turn, etc. Independent of `cadence`.\n */\n everyNTurns?: number;\n /**\n * Where to route the reflection text in addition to the reflection record:\n * - \"memory\" — store as a low-confidence agent-scoped `MemoryFact`.\n * - \"plan\" — append the note to the active plan's `lastReflection` field.\n * - \"none\" — record only (default).\n */\n feedTo?: \"memory\" | \"plan\" | \"none\";\n /**\n * Custom predicate that overrides the built-in cadence decision. Return true\n * to force a reflection on this turn, false to skip. `maxPerRun`/`everyNTurns`\n * throttles still apply on top of this.\n */\n shouldReflect?: (ctx: ReflectionHookContext) => boolean;\n /**\n * Build the reflection prompt body. Receives the resolved default prompt and\n * the char budget; return the prompt text to send. Overrides `promptTemplate`.\n */\n buildPrompt?: (ctx: ReflectionHookContext & { defaultPrompt: string; maxChars: number }) => string;\n /** Side-effect hook invoked after a reflection record is produced. */\n onReflection?: (record: ReflectionRecord, ctx: ReflectionHookContext) => void;\n};\n\nexport type NativeReasoningConfig = {\n effort?: \"minimal\" | \"low\" | \"medium\" | \"high\";\n budgetTokens?: number;\n includeThoughts?: boolean;\n providerExtras?: Record<string, any>;\n};\n\nexport type ReasoningConfig = {\n enabled?: boolean;\n level?: ReasoningLevel;\n /** Pass `false` to disable provider-native reasoning while keeping reflection. */\n native?: NativeReasoningConfig | false;\n /** Pass `false` to fully disable reflection. */\n reflection?: ReflectionConfig | false;\n};\n\nexport type BuiltInRuntimeProfile = \"fast\" | \"balanced\" | \"deep\" | \"research\";\nexport type RuntimeProfile = BuiltInRuntimeProfile | \"custom\";\n\nexport type SummarizationMode = \"incremental\" | \"full_rewrite\";\n\nexport type ContextPolicy = \"raw\" | \"summary_only\" | \"hybrid\";\n\nexport type ToolResponseRetentionPolicy = \"keep_full\" | \"keep_structured\" | \"summarize_archive\" | \"drop\";\n\nexport type ToolResponseClassification = \"critical\" | \"informative\" | \"verbose\";\n\nexport type PlanningMode = \"off\" | \"todo\" | \"planner_executor\" | \"reasoning_then_tools\";\n\nexport type ReplanPolicy = \"never\" | \"on_failure\" | \"on_conflict\" | \"every_n_steps\";\n\nexport type DelegationMode = \"off\" | \"role_based\" | \"automatic\";\n\nexport type ChildContextPolicy = \"minimal\" | \"scoped\" | \"full\";\n\nexport type MemoryProviderKind = \"inMemory\" | \"redis\" | \"postgres\" | \"mongo\" | \"s3\";\n\nexport type MemoryScope = \"session\" | \"user\" | \"workspace\" | \"tenant\";\n\nexport type MemoryWritePolicy = \"manual\" | \"auto_important\" | \"always\";\n\nexport type MemoryReadPolicy = \"recent_only\" | \"semantic\" | \"hybrid\";\n\nexport type MemoryFact = {\n key: string;\n value: string;\n sourceTurn: number;\n confidence: number;\n ttl?: number | null;\n obsolete?: boolean;\n lastUpdatedAt?: string;\n scope?: MemoryScope;\n tags?: string[];\n};\n\nexport interface MemoryStore {\n get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]>;\n upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void>;\n markObsolete(scope: MemoryScope, keys: string[]): Promise<void>;\n semanticSearch?(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]>;\n}\n\nexport type SummaryFactItem = {\n key: string;\n value: string;\n confidence?: number;\n source?: string;\n};\n\nexport type StructuredSummary = {\n stable_facts: SummaryFactItem[];\n active_goals: string[];\n open_questions: string[];\n discarded_obsolete: string[];\n rawSummary?: string;\n};\n\nexport type SummaryIntegrityCheck = {\n passed: boolean;\n criticalFactLoss: boolean;\n obsoleteFactRevived: boolean;\n notes: string[];\n};\n\nexport type PlanStepRecord = {\n id: number;\n step: string;\n owner: \"agent\" | \"user\" | \"tool\" | string;\n exitCriteria: string;\n evidence?: string;\n status: \"not-started\" | \"in-progress\" | \"completed\" | \"blocked\";\n title?: string;\n description?: string;\n};\n\nexport type SmartAgentSummarizationConfig = {\n enable?: boolean;\n maxTokens?: number;\n summaryTriggerTokens?: number;\n summaryPromptMaxTokens?: number;\n summaryCompressionRatioTarget?: number;\n summaryMode?: SummarizationMode;\n promptTemplate?: string;\n toolFreeCall?: boolean;\n integrityCheck?: boolean;\n};\n\nexport type SmartAgentBudgetConfig = {\n systemReserveTokens?: number;\n goalsReserveTokens?: number;\n recentTurnsReserveTokens?: number;\n toolResponseReserveTokens?: number;\n};\n\nexport type SmartAgentContextConfig = {\n policy?: ContextPolicy;\n lastTurnsToKeep?: number;\n toolResponsePolicy?: ToolResponseRetentionPolicy;\n budget?: SmartAgentBudgetConfig;\n};\n\nexport type SmartAgentPlanningConfig = {\n mode?: PlanningMode;\n replanPolicy?: ReplanPolicy;\n everyNSteps?: number;\n};\n\nexport type SmartAgentDelegationConfig = {\n mode?: DelegationMode;\n maxDelegationDepth?: number;\n maxChildCalls?: number;\n maxParallelChild?: number;\n childContextPolicy?: ChildContextPolicy;\n requireJsonOutputContract?: boolean;\n};\n\nexport type SmartAgentMemoryConfig = {\n provider?: MemoryProviderKind;\n store?: MemoryStore;\n scope?: MemoryScope;\n writePolicy?: MemoryWritePolicy;\n readPolicy?: MemoryReadPolicy;\n};\n\nexport type SmartAgentToolResponseConfig = {\n /**\n * Hard cap (in characters) applied at tool execution time to a single response.\n * Anything larger is truncated immediately with a get_tool_response retrieval hint\n * so a single oversized payload cannot blow up the next model call. Critical\n * tools are exempt from this cap.\n */\n maxToolResponseChars?: number;\n /** Hard cap (approx. tokens) for the same eager truncation rule. */\n maxToolResponseTokens?: number;\n /**\n * Retention policy applied to all non-critical tool responses by the summarizer\n * when it fires (context limit reached). Has no effect at execution time.\n * Defaults to context.toolResponsePolicy, or the active runtime profile default.\n */\n defaultPolicy?: ToolResponseRetentionPolicy;\n /**\n * Per-tool override of the summarizer retention policy. Wins over `defaultPolicy`.\n * Critical tools cannot be reduced regardless of override.\n */\n toolResponseRetentionByTool?: Record<string, ToolResponseRetentionPolicy>;\n /** Tool names whose responses are never reduced by the summarizer or hard cap. */\n criticalTools?: string[];\n /** Controls whether Zod-backed tool schemas fail fast or warn on invalid args. */\n schemaValidation?: \"strict\" | \"warn\";\n};\n\nexport type SmartAgentCustomProfileConfig = {\n extends?: BuiltInRuntimeProfile;\n limits?: AgentLimits;\n summarization?: SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n planning?: SmartAgentPlanningConfig;\n memory?: SmartAgentMemoryConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n};\n\nexport type ProfileConfig = {\n limits: Required<AgentLimits>;\n summarization: Required<SmartAgentSummarizationConfig>;\n context: Required<SmartAgentContextConfig> & { budget: Required<SmartAgentBudgetConfig> };\n planning: Required<SmartAgentPlanningConfig>;\n memory: Required<Omit<SmartAgentMemoryConfig, \"store\">> & { store?: MemoryStore };\n delegation: Required<SmartAgentDelegationConfig>;\n toolResponses: Required<SmartAgentToolResponseConfig>;\n};\n\nexport type ResolvedSmartAgentConfig = ProfileConfig & {\n runtimeProfile: RuntimeProfile;\n baseProfile: BuiltInRuntimeProfile;\n};\n\n// --- Smart Agent (batteries-included with planning & summarization) ---\nexport type SmartAgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n runtimeProfile?: RuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n // Toggle token-aware context summarization. Default: true. Set to false to disable.\n summarization?: boolean | SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n memory?: SmartAgentMemoryConfig;\n planning?: SmartAgentPlanningConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n // System prompt configuration\n systemPrompt?: string; // Plain string system prompt to append to defaults\n // Optional override for the built-in todo list planning instructions.\n // Applied only when planning mode injects todo guidance.\n todoListPrompt?: string;\n // Enable internal planning workflow (todo list tool + prompt hints)\n /** @deprecated Use planning.mode=\"todo\" */\n useTodoList?: boolean;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n /**\n * Unified reasoning configuration. Same shape as on `AgentOptions`. See `ReasoningConfig`.\n */\n reasoning?: ReasoningConfig;\n /** See AgentOptions.tokenCounter. */\n tokenCounter?: (text: string) => number;\n /** See AgentOptions.costEstimator. */\n costEstimator?: AgentOptions[\"costEstimator\"];\n /** See AgentOptions.humanInTheLoop. */\n humanInTheLoop?: HumanInTheLoopOptions;\n /**\n * Progressive capability disclosure. When provided, the agent exposes cheap\n * skill headers in its system prompt and binds a skill's tools on demand via\n * the built-in open_skill / bind_skill_tools tools. Keeps the bound-tool count\n * per step small. An empty array is a no-op.\n */\n skills?: import(\"./smart/skills/types.js\").Skill[];\n /** Caps/tiering for skill disclosure. Defaults to DEFAULT_SKILL_POLICY. */\n skillPolicy?: import(\"./smart/skills/types.js\").SkillPolicy;\n};\n\n// Runtime representation of an agent (used inside state.agent)\nexport type AgentRuntimeConfig = {\n name?: string;\n version?: string;\n model: any;\n tools: Array<ToolInterface<any, any, any>>;\n guardrails?: ConversationGuardrail[];\n systemPrompt?: string;\n todoListPrompt?: string;\n limits?: AgentLimits;\n useTodoList?: boolean;\n outputSchema?: ZodSchema<any>;\n // When using native structured output (response_format), this is set by StructuredOutputManager\n responseFormat?: Record<string, any>;\n tracing?: TracingConfig;\n runtimeProfile?: RuntimeProfile;\n smart?: ResolvedSmartAgentConfig;\n humanInTheLoop?: HumanInTheLoopRuntimeConfig;\n};\n\nexport type TraceMessageSection = {\n id?: string;\n kind: \"message\";\n label: string;\n role: string;\n content: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolCallSection = {\n id?: string;\n kind: \"tool_call\";\n label: string;\n tool: string;\n arguments?: any;\n toolDetails?: TraceToolDetails;\n};\n\nexport type TraceToolDetails = {\n name: string;\n description?: string;\n inputSchema?: any;\n approval?: {\n required?: boolean;\n prompt?: string;\n defaults?: any;\n };\n cache?: {\n enabled: boolean;\n scope?: string;\n ttlMs?: number;\n hasKeyFn?: boolean;\n };\n retry?: {\n maxRetries?: number;\n backoffMs?: number;\n circuitBreakerThreshold?: number;\n hasShouldRetry?: boolean;\n };\n limits?: {\n maxExecutionsPerRun?: number | null;\n };\n source?: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolResultItem = {\n title?: string;\n url?: string;\n snippet?: string;\n [key: string]: any;\n};\n\nexport type TraceToolResultSection = {\n id?: string;\n kind: \"tool_result\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n toolDetails?: TraceToolDetails;\n execution?: {\n id?: string;\n status?: \"success\" | \"error\" | \"skipped\" | \"cached\" | string;\n durationMs?: number;\n fromCache?: boolean;\n };\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type TraceToolResponseSection = {\n id?: string;\n kind: \"tool_response\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n toolDetails?: TraceToolDetails;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type TraceSummarySection = {\n id?: string;\n kind: \"summary\";\n label: string;\n content: string;\n};\n\nexport type TraceMetadataSection = {\n id?: string;\n kind: \"metadata\";\n label: string;\n data: Record<string, any>;\n};\n\nexport type TraceDataSection =\n | TraceMessageSection\n | TraceToolCallSection\n | TraceToolResultSection\n | TraceToolResponseSection\n | TraceSummarySection\n | TraceMetadataSection;\n\nexport type TraceEventRecord = {\n sessionId: string;\n id: string;\n type: string;\n label: string;\n sequence: number;\n timestamp: string;\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n actor?: { scope?: string; name?: string; role?: string; version?: string };\n status: \"success\" | \"error\" | \"skipped\" | \"retry\";\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolDetails?: TraceToolDetails;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n data?: { sections: TraceDataSection[] };\n debug?: Record<string, any>;\n};\n\nexport type TraceErrorRecord = {\n eventId: string;\n message: string;\n stack?: string;\n type?: string;\n timestamp?: string;\n};\n\nexport type TraceSessionSummary = {\n totalDurationMs: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n totalCachedInputTokens: number;\n totalBytesIn: number;\n totalBytesOut: number;\n eventCounts: Record<string, number>;\n};\n\nexport type TraceSessionStatus = \"in_progress\" | \"success\" | \"error\" | \"partial\";\n\nexport type TraceSinkSnapshot =\n | { type: \"file\"; path: string }\n | { type: \"custom\" }\n | { type: \"cognipeer\"; url: string }\n | { type: \"http\"; url: string }\n | { type: \"otlp\"; endpoint: string };\n\nexport type TraceSessionConfigSnapshot = {\n enabled: boolean;\n logData: boolean;\n sink: TraceSinkSnapshot;\n};\n\nexport type TraceSessionFile = {\n sessionId: string;\n traceId?: string;\n rootSpanId?: string;\n threadId?: string;\n startedAt: string;\n endedAt?: string;\n durationMs?: number;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config: TraceSessionConfigSnapshot;\n summary: TraceSessionSummary;\n events: TraceEventRecord[];\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n};\n\nexport type ResolvedTraceSink =\n | { type: \"file\"; baseDir: string }\n | { type: \"custom\"; onEvent?: (event: TraceEventRecord) => void | Promise<void>; onSession?: (session: TraceSessionFile) => void | Promise<void> }\n | { type: \"cognipeer\"; url: string; apiKey: string }\n | { type: \"http\"; url: string; headers?: Record<string, string> }\n | { type: \"otlp\"; endpoint: string; headers?: Record<string, string> };\n\nexport type ResolvedTraceConfig = {\n enabled: boolean;\n mode: TracingMode;\n logData: boolean;\n sink: ResolvedTraceSink;\n};\n\nexport type TraceSessionRuntime = {\n sessionId: string;\n startedAt: number;\n traceId?: string;\n rootSpanId?: string;\n currentIterationSpanId?: string;\n threadId?: string;\n sessionStarted?: boolean;\n agentInfo?: { name?: string; version?: string; model?: string; provider?: string };\n resolvedConfig: ResolvedTraceConfig;\n events: TraceEventRecord[];\n summary: TraceSessionSummary;\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n fileBaseDir?: string;\n fileSessionDir?: string;\n};\n\n// Handoff descriptor returned from childAgent.asHandoff(...)\nexport type HandoffDescriptor<TParsed = any> = {\n type: \"handoff\";\n toolName: string;\n description: string;\n // Optional zod schema for handoff arguments; fallback is { reason: string }\n schema?: ZodSchema<any>;\n target: SmartAgentInstance<TParsed> & { __runtime: AgentRuntimeConfig };\n};\n\n// Base Agent State (minimal)\nexport type AgentState = {\n messages: Message[];\n // Active agent runtime parameters (dynamically swapped on handoff)\n agent?: AgentRuntimeConfig;\n toolHistory?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n toolCache?: Record<string, any>;\n toolCallCount?: number;\n metadata?: Record<string, any>;\n ctx?: Record<string, any>;\n pendingApprovals?: PendingToolApproval[];\n pendingUserQuestions?: PendingUserQuestion[];\n // Usage tracking (per agent model call). Each agent turn that produces an AI response\n // appends an entry to usage.perRequest. totals aggregates by modelName.\n usage?: {\n perRequest: Array<{\n id: string; // unique id per request\n modelName: string; // resolved provider/model identifier\n usage: any; // raw provider usage object (unmodified)\n timestamp: string; // ISO time of capture\n turn: number; // 1-based index of agent turn producing this response\n cachedInput?: number; // cached / reused prompt tokens (provider specific)\n }>;\n totals: Record<string, { input: number; output: number; total: number; cachedInput: number }>;\n };\n guardrailResult?: GuardrailOutcome;\n};\n\n// Smart Agent State (extends base with planning & summarization)\nexport type SmartState = AgentState & {\n summaries?: string[];\n summaryRecords?: Array<StructuredSummary & { integrity?: SummaryIntegrityCheck; createdAt?: string }>;\n memoryFacts?: MemoryFact[];\n toolHistoryArchived?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n plan?: { version: number; steps: PlanStepRecord[]; lastUpdated?: string; adherenceScore?: number; lastReflection?: string } | null;\n planVersion?: number;\n /**\n * Post-turn reflection records produced by the reflection node. The SDK keeps the full\n * history here (even when only `keepLast` are re-injected into the prompt) so callers\n * can render them in a task/run timeline.\n */\n reflections?: ReflectionRecord[];\n};\n\nexport type ReflectionRecord = {\n id: string;\n turn: number;\n /** Plain-text reflection produced by the model. */\n text: string;\n createdAt: string;\n durationMs?: number;\n /** Index of the last message present when this reflection was taken. */\n anchorMessageIndex?: number;\n /** Trigger cadence that fired this reflection. */\n trigger?: ReflectionCadence;\n /** Token usage for this specific reflection call. */\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n cachedInputTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n };\n /** Optional tool call ids / names the reflection commented on (for UI linking). */\n toolCallIds?: string[];\n};\n\n// Event types for observability and future streaming support\nexport type ToolCallEvent = {\n type: \"tool_call\";\n phase: \"start\" | \"success\" | \"error\" | \"skipped\";\n name: string;\n id?: string;\n args?: any;\n result?: any;\n error?: { message: string } | undefined;\n durationMs?: number;\n};\n\nexport type PlanEvent = {\n type: \"plan\";\n source: \"manage_todo_list\" | \"system\";\n operation?: \"write\" | \"read\" | \"update\";\n todoList?: PlanStepRecord[];\n version?: number;\n adherenceScore?: number;\n};\n\nexport type SummarizationEvent = {\n type: \"summarization\";\n summary: string;\n /** Number of messages that were compressed/summarized */\n messagesCompressed?: number;\n /** Input tokens used for summarization prompt (from model response if available, otherwise estimated) */\n inputTokens?: number;\n /** Output tokens from summarization response (from model response if available, otherwise estimated) */\n outputTokens?: number;\n /** Cached input tokens from model response (prompt cache hit) */\n cachedInputTokens?: number;\n /** Total tokens (input + output) */\n totalTokens?: number;\n /** Duration of the summarization call in milliseconds */\n durationMs?: number;\n /** Previous summary content (if incremental summarization) */\n previousSummary?: string;\n /** Total token count before summarization */\n tokenCountBefore?: number;\n /** Total token count after summarization */\n tokenCountAfter?: number;\n /** @deprecated Use messagesCompressed instead */\n archivedCount?: number;\n structuredSummary?: StructuredSummary;\n integrity?: SummaryIntegrityCheck;\n};\n\nexport type EvalFamily = \"recall\" | \"state_continuity\" | \"summarization_fidelity\" | \"context_rollover\" | \"query_focused_summary\";\n\nexport type EvalCase = {\n id: string;\n family: EvalFamily;\n prompt: string;\n expectedPhrases?: string[];\n forbiddenPhrases?: string[];\n expectedFacts?: Array<{ key: string; value: string }>;\n expectedToolNames?: string[];\n};\n\nexport type EvalProfileDescriptor = {\n label: string;\n runtimeProfile: RuntimeProfile;\n baseProfile?: BuiltInRuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n};\n\nexport type EvalProfileTarget = RuntimeProfile | EvalProfileDescriptor;\n\nexport type EvalCaseResult = {\n id: string;\n family: EvalFamily;\n success: boolean;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens?: number;\n profile: RuntimeProfile;\n profileLabel?: string;\n baseProfile?: BuiltInRuntimeProfile;\n notes: string[];\n};\n\nexport type EvalHarnessMetrics = {\n taskSuccess: number;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens: number;\n score: number;\n};\n\nexport type EvalHarnessResult = {\n profile: RuntimeProfile;\n profileLabel: string;\n baseProfile?: BuiltInRuntimeProfile;\n metrics: EvalHarnessMetrics;\n cases: EvalCaseResult[];\n};\n\nexport type FinalAnswerEvent = {\n type: \"finalAnswer\";\n content: string;\n};\n\nexport type MetadataEvent = {\n type: \"metadata\";\n usage?: any;\n modelName?: string;\n limits?: SmartAgentLimits;\n [key: string]: any;\n};\n\nexport type ProgressEvent = {\n type: \"progress\";\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamEvent = {\n type: \"stream\";\n text: string;\n isFinal?: boolean;\n};\n\nexport type CancelledEvent = {\n type: \"cancelled\";\n stage?: string;\n reason?: string;\n};\n\nexport type HandoffEvent = {\n type: \"handoff\";\n from?: string;\n to?: string;\n toolName: string;\n};\n\nexport type ToolApprovalStatus = \"pending\" | \"approved\" | \"rejected\" | \"executed\";\n\nexport type PendingToolApproval = {\n id: string;\n toolCallId: string;\n toolName: string;\n args: any;\n status: ToolApprovalStatus;\n requestedAt: string;\n decidedAt?: string;\n decidedBy?: string;\n comment?: string;\n approvedArgs?: any;\n resolvedAt?: string;\n executionId?: string;\n metadata?: Record<string, any>;\n};\n\nexport type ToolApprovalResolution = {\n id: string;\n approved: boolean;\n approvedArgs?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type ToolApprovalEvent = {\n type: \"tool_approval\";\n status: \"pending\" | \"approved\" | \"rejected\";\n id: string;\n toolName: string;\n toolCallId?: string;\n args?: any;\n decidedBy?: string;\n comment?: string;\n};\n\n// ─── Ask-User (Human-in-the-Loop questions) ──────────────────────────────────\n// Lets the model pause the agent and surface a structured prompt back to the\n// host application. Mirrors the Claude Code \"AskUserQuestion\" UX: one or more\n// related questions with multi-choice options and (optionally) free-text.\n\nexport type UserQuestionOption = {\n /** Label shown to the user. */\n label: string;\n /** Value returned in the resolution. Defaults to `label` when omitted. */\n value?: string;\n /** Optional helper text rendered alongside the option. */\n description?: string;\n /** Optional code / ASCII preview rendered when the option is focused. */\n preview?: string;\n};\n\nexport type UserQuestionItem = {\n /** The full question text shown to the user. */\n question: string;\n /** Short label (chip / tag) displayed alongside the question. */\n header?: string;\n /** When true the user may pick multiple options. Default: false. */\n multiSelect?: boolean;\n /** Placeholder shown for the free-text input (when enabled globally). */\n placeholder?: string;\n /** Predefined options; omit for a pure free-text question. */\n options?: UserQuestionOption[];\n /** When true the user must answer this item. Default: true. */\n required?: boolean;\n};\n\nexport type UserQuestionStatus = \"pending\" | \"answered\" | \"cancelled\" | \"executed\";\n\nexport type UserQuestionAnswer = {\n /** Selected option values. Single-select questions report exactly one entry. */\n values: string[];\n /** Populated when the user typed a custom answer (only when free-text is enabled). */\n freeText?: string;\n /** Optional reviewer notes. */\n notes?: string;\n};\n\n/** Keyed by the question text (or `header`, if both questions share text). */\nexport type UserQuestionAnswerSet = Record<string, UserQuestionAnswer>;\n\nexport type PendingUserQuestion = {\n id: string;\n toolCallId: string;\n toolName: \"ask_user_question\";\n questions: UserQuestionItem[];\n status: UserQuestionStatus;\n requestedAt: string;\n answeredAt?: string;\n answeredBy?: string;\n answers?: UserQuestionAnswerSet;\n cancelled?: boolean;\n notes?: string;\n /** Snapshot of the global free-text flag at request time, for UI rendering. */\n allowFreeText?: boolean;\n metadata?: Record<string, any>;\n};\n\nexport type UserQuestionResolution = {\n id: string;\n answers?: UserQuestionAnswerSet;\n answeredBy?: string;\n notes?: string;\n /** When true the tool call is reported back as cancelled / unanswered. */\n cancelled?: boolean;\n};\n\nexport type UserQuestionEvent = {\n type: \"user_question\";\n status: \"pending\" | \"answered\" | \"cancelled\";\n id: string;\n toolCallId: string;\n questions?: UserQuestionItem[];\n answers?: UserQuestionAnswerSet;\n answeredBy?: string;\n allowFreeText?: boolean;\n};\n\n// Runtime configuration carried on AgentRuntimeConfig / ctx so the tool and\n// the resolver share a single source of truth.\nexport type HumanInTheLoopAskUserConfig = {\n enabled: boolean;\n allowFreeText: boolean;\n promptOverride?: string;\n};\n\nexport type HumanInTheLoopRuntimeConfig = {\n askUser?: HumanInTheLoopAskUserConfig;\n};\n\nexport type HumanInTheLoopOptions = {\n askUser?: boolean | {\n /** Allow the user to type a custom \"Other\" answer. Default: true. */\n allowFreeText?: boolean;\n /** Override the built-in tool description. */\n promptOverride?: string;\n /** Convenience: subscribe to user_question events without setting up onEvent. */\n onQuestion?: (event: UserQuestionEvent) => void;\n };\n};\n\nexport type GuardrailEvent = {\n type: \"guardrail\";\n phase: GuardrailPhase;\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n disposition: GuardrailDisposition;\n reason?: string;\n details?: Record<string, any>;\n};\n\nexport type SmartAgentEvent =\n | ToolCallEvent\n | ToolApprovalEvent\n | UserQuestionEvent\n | PlanEvent\n | SummarizationEvent\n | FinalAnswerEvent\n | MetadataEvent\n | HandoffEvent\n | GuardrailEvent\n | ProgressEvent\n | StreamEvent\n | CancelledEvent\n | ReflectionEvent;\n\nexport type ReflectionEvent = {\n type: \"reflection\";\n id: string;\n turn: number;\n text: string;\n trigger?: ReflectionCadence;\n durationMs?: number;\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n cachedInputTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n };\n toolCallIds?: string[];\n};\n\nexport type CancellationTokenLike = {\n readonly isCancellationRequested: boolean;\n onCancellationRequested?: (listener: () => void) => { dispose(): void } | void;\n};\n\nexport type AbortSignalLike = {\n readonly aborted: boolean;\n};\n\nexport type ProgressUpdate = {\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamChunk = {\n text: string;\n isFinal?: boolean;\n};\n\nexport type InvokeConfig = RunnableConfig & {\n // Optional per-call event hook (overrides SmartAgentOptions.onEvent if provided)\n onEvent?: (event: SmartAgentEvent) => void;\n // Optional per-call progress hook\n onProgress?: (progress: ProgressUpdate) => void;\n // Optional per-call streaming hook\n onStream?: (chunk: StreamChunk) => void;\n // Enable streaming if supported by model\n stream?: boolean;\n // Cancellation control\n cancellationToken?: CancellationTokenLike | AbortSignalLike;\n // Optional timeout for the full invoke (ms)\n timeoutMs?: number;\n // Optional per-call limits override\n limits?: Partial<AgentLimits>;\n // Invoked after each major stage; return true to checkpoint execution (state.ctx.__paused will be set).\n onStateChange?: (state: SmartState) => boolean;\n // Optional reason stored alongside checkpoint metadata.\n checkpointReason?: string;\n};\n\nexport type SnapshotRuntimeHint = {\n name?: string;\n version?: string;\n tools?: string[];\n};\n\nexport type SerializableSmartState = Omit<SmartState, \"agent\"> & { agent?: undefined };\n\nexport type AgentSnapshotMetadata = {\n createdAt: string;\n tag?: string;\n paused?: {\n stage?: string;\n iteration?: number;\n reason?: string;\n } | null;\n};\n\nexport type AgentSnapshot = {\n state: SerializableSmartState;\n runtimeHint?: SnapshotRuntimeHint;\n metadata: AgentSnapshotMetadata;\n};\n\nexport type SnapshotOptions = {\n tag?: string;\n includeRuntimeHint?: boolean;\n};\n\nexport type RestoreSnapshotOptions = {\n agent?: AgentRuntimeConfig;\n ctx?: Record<string, any>;\n mergeCtx?: boolean;\n};\n\n// Structured agent result returned by invoke\nexport type AgentInvokeResult<TOutput = unknown> = {\n content: string;\n // If outputSchema is set, this will contain the parsed and validated output.\n // TOutput will be inferred from the provided Zod schema.\n output?: TOutput;\n // If outputSchema is set and parsing/validation failed, this describes the error.\n // When output is defined, outputError is undefined and vice versa.\n outputError?: import(\"./structuredOutput/types.js\").StructuredOutputError;\n metadata: { usage?: any };\n messages: Message[];\n state?: SmartState;\n};\n\n// Base Agent instance (minimal)\nexport type AgentInstance<TOutput = unknown> = {\n invoke: (input: SmartState, config?: InvokeConfig) => Promise<AgentInvokeResult<TOutput>>;\n snapshot: (state: SmartState, options?: SnapshotOptions) => AgentSnapshot;\n resume: (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => Promise<AgentInvokeResult<TOutput>>;\n resolveToolApproval: (state: SmartState, resolution: ToolApprovalResolution) => SmartState;\n resolveUserQuestion: (state: SmartState, resolution: UserQuestionResolution) => SmartState;\n // Convert this agent into a tool usable by another agent. Accepts optional overrides.\n asTool: (opts: { toolName: string; description?: string; inputDescription?: string } ) => ToolInterface<any, any, any>;\n // Create a handoff descriptor so another agent can switch control to this one mid-conversation\n asHandoff: (opts: { toolName?: string; description?: string; schema?: ZodSchema<any>; }) => HandoffDescriptor<TOutput>;\n __runtime: AgentRuntimeConfig;\n};\n\n// Smart Agent instance (same as AgentInstance for now, but semantically separate)\nexport type SmartAgentInstance<TOutput = unknown> = AgentInstance<TOutput>;\n","import type { SmartState } from \"../types.js\";\n\n// Ensures required state fields exist and normalizes incoming messages\nexport function createResolverNode() {\n return async (state: SmartState): Promise<SmartState> => {\n const messages = Array.isArray(state.messages) ? state.messages : [];\n return {\n ...state,\n messages,\n summaries: state.summaries || [],\n toolCallCount: state.toolCallCount || 0,\n toolCache: state.toolCache || {},\n toolHistory: state.toolHistory || [],\n toolHistoryArchived: state.toolHistoryArchived || [],\n pendingApprovals: state.pendingApprovals || [],\n pendingUserQuestions: state.pendingUserQuestions || [],\n plan: state.plan || null,\n planVersion: state.planVersion || 0,\n } as SmartState;\n };\n}\n","// Normalizes provider-specific usage objects into a common shape.\n// Target shape:\n// {\n// prompt_tokens: number;\n// completion_tokens: number;\n// total_tokens: number;\n// prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n// completion_tokens_details: { reasoning_tokens: number; audio_tokens: number; accepted_prediction_tokens: number; rejected_prediction_tokens: number };\n// raw?: any; // original provider usage\n// }\n\nexport type NormalizedUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n completion_tokens_details: {\n reasoning_tokens: number;\n audio_tokens: number;\n accepted_prediction_tokens: number;\n rejected_prediction_tokens: number;\n };\n raw?: any;\n};\n\nexport function normalizeUsage(raw: any | undefined | null): NormalizedUsage | undefined {\n if (!raw) return undefined;\n // Canonical numeric fields from various provider key aliases.\n const prompt = num(raw.prompt_tokens, raw.input_tokens, raw.promptTokens, raw.total_prompt_tokens);\n const completion = num(raw.completion_tokens, raw.output_tokens, raw.completionTokens, raw.total_completion_tokens);\n // total might be explicitly provided or computed.\n const total = num(\n raw.total_tokens,\n raw.totalTokens,\n (typeof prompt === 'number' ? prompt : 0) + (typeof completion === 'number' ? completion : 0)\n );\n\n // Details: attempt to pull from common nested spots else zeros\n // OpenAI format: prompt_tokens_details / completion_tokens_details\n // LangChain format: input_token_details / output_token_details\n const promptDetailsSrc = raw.prompt_tokens_details || raw.promptTokensDetails\n || raw.input_token_details || raw.inputTokenDetails\n || raw.input_tokens_details || raw.inputTokensDetails\n || {};\n const completionDetailsSrc = raw.completion_tokens_details || raw.completionTokensDetails\n || raw.output_token_details || raw.outputTokenDetails\n || raw.output_tokens_details || raw.outputTokensDetails\n || {};\n\n const cachedTokens = num(\n promptDetailsSrc.cached_tokens,\n promptDetailsSrc.cachedTokens,\n promptDetailsSrc.cached,\n promptDetailsSrc.cache_read,\n promptDetailsSrc.cacheRead,\n promptDetailsSrc.cache_read_tokens,\n raw.cached_input_tokens,\n raw.cachedInputTokens,\n raw.cached_prompt_tokens,\n raw.cachedPromptTokens,\n raw.cache_read_input_tokens,\n raw.cacheReadInputTokens\n );\n\n const normalized: NormalizedUsage = {\n prompt_tokens: safe(prompt),\n completion_tokens: safe(completion),\n total_tokens: safe(total || (prompt || 0) + (completion || 0)),\n prompt_tokens_details: {\n cached_tokens: safe(cachedTokens),\n audio_tokens: safe(num(promptDetailsSrc.audio_tokens, promptDetailsSrc.audioTokens, promptDetailsSrc.audio)),\n },\n completion_tokens_details: {\n reasoning_tokens: safe(num(completionDetailsSrc.reasoning_tokens, completionDetailsSrc.reasoningTokens)),\n audio_tokens: safe(num(completionDetailsSrc.audio_tokens, completionDetailsSrc.audioTokens)),\n accepted_prediction_tokens: safe(\n num(completionDetailsSrc.accepted_prediction_tokens, completionDetailsSrc.acceptedPredictionTokens)\n ),\n rejected_prediction_tokens: safe(\n num(completionDetailsSrc.rejected_prediction_tokens, completionDetailsSrc.rejectedPredictionTokens)\n ),\n },\n raw,\n };\n return normalized;\n}\n\nfunction num(...vals: any[]): number | undefined {\n for (const v of vals) {\n if (v === 0) return 0;\n if (v == null) continue;\n const n = Number(v);\n if (!Number.isNaN(n)) return n;\n }\n return undefined;\n}\nfunction safe(v: any): number { const n = Number(v); return Number.isFinite(n) && n >= 0 ? n : 0; }\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Buffer } from \"node:buffer\";\nimport { nanoid } from \"nanoid\";\nimport crypto from \"node:crypto\";\nimport type {\n AgentRuntimeConfig,\n ResolvedTraceConfig,\n ResolvedTraceSink,\n SmartAgentOptions,\n SmartAgentTracingConfig,\n TraceDataSection,\n TraceEventRecord,\n TraceSessionConfigSnapshot,\n TraceSessionFile,\n TraceSessionRuntime,\n TraceSessionStatus,\n TraceSessionSummary,\n TraceSinkConfig,\n TraceSinkSnapshot,\n TraceToolCallSection,\n TracingMode,\n} from \"../types.js\";\n\nconst DEFAULT_COGNIPEER_URL = \"https://console.cognipeer.com/api/client/v1/tracing/sessions\";\n\nexport function fileSink(path?: string): TraceSinkConfig {\n return { type: \"file\", path };\n}\n\ntype CustomSinkArg =\n | ((event: TraceEventRecord) => void | Promise<void>)\n | {\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n };\n\nexport function customSink(handler: CustomSinkArg): TraceSinkConfig {\n if (typeof handler === \"function\") {\n return { type: \"custom\", onEvent: handler };\n }\n return {\n type: \"custom\",\n onEvent: typeof handler?.onEvent === \"function\" ? handler.onEvent : undefined,\n onSession: typeof handler?.onSession === \"function\" ? handler.onSession : undefined,\n };\n}\n\nexport function cognipeerSink(apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(url: string | undefined, apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(first: string | undefined, second?: string): TraceSinkConfig {\n if (second === undefined) {\n const apiKey = first ?? \"\";\n return { type: \"cognipeer\", apiKey };\n }\n const url = typeof first === \"string\" && first.trim().length > 0 ? first.trim() : undefined;\n return { type: \"cognipeer\", url, apiKey: second };\n}\n\nexport function httpSink(url: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"http\", url, headers };\n}\n\n/**\n * Create an OTLP/HTTP JSON sink that exports traces in OpenTelemetry format.\n * @param endpoint OTLP endpoint URL (e.g. \"https://console.cognipeer.com/api/client/v1/traces\")\n * @param headers Optional headers (e.g. { Authorization: \"Bearer ...\" })\n */\nexport function otlpSink(endpoint: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"otlp\", endpoint, headers };\n}\nfunction resolveLogsBaseDir(customPath?: string, ensureDirectory = true) {\n const root = process.cwd();\n const base = customPath && customPath.trim().length > 0 ? customPath : path.join(root, \"logs\");\n if (ensureDirectory) {\n ensureDir(base);\n }\n return base;\n}\n\nfunction coerceToString(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"function\" && value.length === 0) {\n try {\n return coerceToString((value as () => unknown)());\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n const normalized = coerceToString(item);\n if (normalized) return normalized;\n }\n return undefined;\n }\n return undefined;\n}\n\n// Metadata extraction paths - defined once for DRY principle\nconst METADATA_PATHS = {\n model: [\n \"model\", \"options.model\", \"params.model\", \"config.model\", \n \"configuration.model\", \"metadata.model\", \"lc_kwargs.model\",\n \"metadata.modelName\", \"modelName\", \"lc_alias\", \"model_id\", \"id\",\n \"_model\", \"_modelName\", \"__model\", \"_modelId\", \"_llmType\"\n ],\n provider: [\n \"provider\", \"options.provider\", \"params.provider\", \"config.provider\",\n \"configuration.provider\", \"metadata.provider\", \"lc_kwargs.provider\"\n ],\n};\n\n/** Safely extract nested object value using dot notation path */\nfunction getNestedValue(obj: any, path: string): any {\n if (!obj || typeof path !== \"string\") return undefined;\n return path.split(\".\").reduce((current, key) => current?.[key], obj);\n}\n\n/** Unified metadata extraction - eliminates code duplication between model/provider extraction */\nfunction extractMetadata(model: any, paths: string[]): string | undefined {\n if (!model) return undefined;\n \n // Direct extraction from model\n for (const path of paths) {\n const value = getNestedValue(model, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n \n // Try LangChain wrapper (_lc property)\n const maybeLc = model?._lc;\n if (maybeLc) {\n for (const path of paths) {\n const value = getNestedValue(maybeLc, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Try client/api/service properties\n const maybeClient = model?.client || model?.api || model?.service;\n if (maybeClient) {\n for (const path of paths) {\n const value = getNestedValue(maybeClient, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Constructor name as last resort (filter out generic types)\n const constructorName = model?.constructor?.name;\n if (constructorName && ![\"Object\", \"Function\"].includes(constructorName)) {\n return constructorName;\n }\n \n return undefined;\n}\n\nexport function getModelName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.model);\n}\n\nexport function getProviderName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.provider);\n}\n\nfunction inferModelFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific metadata paths for inference from history\n const messagePaths = [\n \"metadata.model\", \"metadata.modelName\", \"response_metadata.model\",\n \"response_metadata.modelName\", \"usage_metadata.model\", \"model\", \"modelName\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nfunction inferProviderFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific paths for provider inference\n const messagePaths = [\n \"metadata.provider\", \"response_metadata.provider\", \"usage_metadata.provider\", \"provider\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nconst DEFAULT_TRACE_CONFIG = {\n enabled: false,\n logData: true,\n} as const;\n\nfunction ensureDir(p: string) {\n if (!fs.existsSync(p)) {\n fs.mkdirSync(p, { recursive: true });\n }\n}\n\nfunction withDefaults(config?: SmartAgentTracingConfig): ResolvedTraceConfig {\n const enabled = Boolean(config?.enabled);\n const logData = config?.logData ?? DEFAULT_TRACE_CONFIG.logData;\n const mode: TracingMode = config?.mode === \"streaming\" ? \"streaming\" : \"batched\";\n\n let sink: ResolvedTraceSink;\n try {\n sink = resolveSink(config?.sink);\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Invalid tracing sink configuration. Falling back to file sink.\", err);\n }\n sink = resolveSink({ type: \"file\" });\n }\n\n return {\n enabled,\n logData,\n mode,\n sink,\n };\n}\n\nfunction resolveSink(sink?: TraceSinkConfig): ResolvedTraceSink {\n const candidate = sink ?? { type: \"file\" };\n switch (candidate.type) {\n case \"file\": {\n const baseDir = resolveLogsBaseDir(candidate.path, false);\n return { type: \"file\", baseDir };\n }\n case \"custom\": {\n const onEvent = typeof candidate.onEvent === \"function\" ? candidate.onEvent : undefined;\n const onSession = typeof candidate.onSession === \"function\" ? candidate.onSession : undefined;\n return { type: \"custom\", onEvent, onSession };\n }\n case \"cognipeer\": {\n const apiKey = typeof candidate.apiKey === \"string\" ? candidate.apiKey.trim() : \"\";\n if (!apiKey) {\n throw new Error(\"cognipeer sink requires a non-empty apiKey\");\n }\n const url = typeof candidate.url === \"string\" && candidate.url.trim().length > 0\n ? candidate.url.trim()\n : DEFAULT_COGNIPEER_URL;\n return { type: \"cognipeer\", url, apiKey };\n }\n case \"http\": {\n const url = typeof candidate.url === \"string\" ? candidate.url.trim() : \"\";\n if (!url) {\n throw new Error(\"http sink requires a non-empty url\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"http\", url, headers } : { type: \"http\", url };\n }\n case \"otlp\": {\n const endpoint = typeof candidate.endpoint === \"string\" ? candidate.endpoint.trim() : \"\";\n if (!endpoint) {\n throw new Error(\"otlp sink requires a non-empty endpoint\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"otlp\", endpoint, headers } : { type: \"otlp\", endpoint };\n }\n default: {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Unknown tracing sink type. Falling back to file sink.\", candidate);\n }\n return resolveSink({ type: \"file\" });\n }\n }\n}\n\nfunction snapshotSink(runtime: TraceSessionRuntime): TraceSinkSnapshot {\n const sink = runtime.resolvedConfig.sink;\n switch (sink.type) {\n case \"file\":\n return { type: \"file\", path: runtime.fileBaseDir || sink.baseDir };\n case \"custom\":\n return { type: \"custom\" };\n case \"cognipeer\":\n return { type: \"cognipeer\", url: sink.url };\n case \"http\":\n return { type: \"http\", url: sink.url };\n case \"otlp\":\n return { type: \"otlp\", endpoint: sink.endpoint };\n default:\n return { type: \"custom\" };\n }\n}\n\nfunction buildConfigSnapshot(runtime: TraceSessionRuntime): TraceSessionConfigSnapshot {\n return {\n enabled: runtime.resolvedConfig.enabled,\n logData: runtime.resolvedConfig.logData,\n sink: snapshotSink(runtime),\n };\n}\n\nasync function postTraceSession(\n url: string,\n headers: Record<string, string> | undefined,\n payload: TraceSessionFile\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n const errorMsg = `${statusLine}${bodyPreview}`;\n \n // DEBUG error logging\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Error posting to\", url, \":\", errorMsg);\n }\n \n throw new Error(errorMsg);\n }\n } catch (err) {\n // Rethrow with error info\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a streaming session start to the remote endpoint\n */\nasync function postStreamingSessionStart(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n startedAt: string;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config?: TraceSessionConfigSnapshot;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/start`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session start:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a single event to the streaming endpoint\n */\nasync function postStreamingEvent(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n sessionId: string,\n event: TraceEventRecord\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${sessionId}/events`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify({ event }),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post streaming event:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST session end to the streaming endpoint\n */\nasync function postStreamingSessionEnd(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n endedAt: string;\n durationMs: number;\n status: TraceSessionStatus;\n summary: TraceSessionSummary;\n errors: Array<{ eventId: string; message: string; stack?: string; type?: string; timestamp?: string }>;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/end`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session end:\", errMsg);\n }\n throw err;\n }\n}\n\n// ─── OTLP/HTTP JSON Export ──────────────────────────────────────────────────\n\n/** Nanosecond timestamp from ISO date string */\nfunction isoToUnixNano(iso: string): string {\n const ms = new Date(iso).getTime();\n // OTel uses fixed-point string nanoseconds (BigInt not needed for JSON)\n return `${ms}000000`;\n}\n\n/** Map agent/event status to OTel StatusCode: 0=UNSET, 1=OK, 2=ERROR */\nfunction toOtlpStatusCode(status: string): number {\n if (status === \"error\") return 2;\n if (status === \"success\" || status === \"completed\") return 1;\n return 0; // UNSET for in_progress, skipped, retry, etc.\n}\n\n/** Map event type to OTel SpanKind: 0 UNSPECIFIED, 1 INTERNAL, 2 SERVER, 3 CLIENT */\nfunction toOtlpSpanKind(type: string): number {\n switch (type) {\n case \"ai_call\":\n return 3; // CLIENT — outgoing LLM request\n case \"tool_call\":\n return 1; // INTERNAL\n case \"agent_iteration\":\n return 1; // INTERNAL\n default:\n return 1; // INTERNAL\n }\n}\n\ntype OtlpKeyValue = { key: string; value: { stringValue?: string; intValue?: string; doubleValue?: number; boolValue?: boolean } };\n\nfunction stringAttr(key: string, val: string | undefined): OtlpKeyValue | null {\n return val != null ? { key, value: { stringValue: val } } : null;\n}\n\nfunction intAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { intValue: String(val) } } : null;\n}\n\nfunction doubleAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { doubleValue: val } } : null;\n}\n\n/** Convert a single TraceEventRecord into an OTLP Span object. */\nfunction eventToOtlpSpan(event: TraceEventRecord): Record<string, unknown> {\n const startNano = isoToUnixNano(event.timestamp);\n const endNano = event.durationMs != null\n ? `${new Date(new Date(event.timestamp).getTime() + event.durationMs).getTime()}000000`\n : startNano;\n\n const attrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.event.type\", event.type),\n stringAttr(\"cognipeer.event.label\", event.label),\n intAttr(\"cognipeer.event.sequence\", event.sequence),\n stringAttr(\"cognipeer.actor.scope\", event.actor?.scope),\n stringAttr(\"cognipeer.actor.name\", event.actor?.name),\n stringAttr(\"cognipeer.actor.role\", event.actor?.role),\n stringAttr(\"cognipeer.model\", event.model),\n stringAttr(\"cognipeer.provider\", event.provider),\n stringAttr(\"cognipeer.tool.details\", event.toolDetails ? JSON.stringify(event.toolDetails) : undefined),\n intAttr(\"cognipeer.tokens.input\", event.inputTokens),\n intAttr(\"cognipeer.tokens.output\", event.outputTokens),\n intAttr(\"cognipeer.tokens.total\", event.totalTokens),\n intAttr(\"cognipeer.tokens.cached_input\", event.cachedInputTokens),\n intAttr(\"cognipeer.bytes.request\", event.requestBytes),\n intAttr(\"cognipeer.bytes.response\", event.responseBytes),\n stringAttr(\"cognipeer.tool.execution_id\", event.toolExecutionId),\n stringAttr(\"cognipeer.retry_of\", event.retryOf),\n stringAttr(\"cognipeer.event.id\", event.id),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Add sections as a JSON string attribute if present\n if (event.data?.sections && event.data.sections.length > 0) {\n try {\n attrs.push({ key: \"cognipeer.sections\", value: { stringValue: JSON.stringify(event.data.sections) } });\n } catch { /* skip on serialization failures */ }\n }\n\n const span: Record<string, unknown> = {\n traceId: event.traceId,\n spanId: event.spanId,\n parentSpanId: event.parentSpanId || \"\",\n name: event.label || event.type,\n kind: toOtlpSpanKind(event.type),\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: attrs,\n status: {\n code: toOtlpStatusCode(event.status),\n ...(event.status === \"error\" && event.error?.message ? { message: event.error.message } : {}),\n },\n };\n\n // Error events\n if (event.error) {\n span.events = [{\n timeUnixNano: startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: event.error.message } },\n ...(event.error.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: event.error.stack } }] : []),\n ],\n }];\n }\n\n return span;\n}\n\n/**\n * Convert a complete TraceSessionFile into an OTLP ExportTraceServiceRequest (JSON).\n * Produces a root span for the session and child spans for each event.\n */\nexport function traceSessionToOtlp(session: TraceSessionFile): Record<string, unknown> {\n const traceId = session.traceId || generateTraceId();\n const rootSpanId = session.rootSpanId || generateSpanId();\n const startNano = isoToUnixNano(session.startedAt);\n const endNano = session.endedAt ? isoToUnixNano(session.endedAt) : startNano;\n\n // Resource attributes\n const resourceAttrs: OtlpKeyValue[] = [\n { key: \"service.name\", value: { stringValue: session.agent?.name || \"cognipeer-agent\" } },\n stringAttr(\"service.version\", session.agent?.version),\n stringAttr(\"cognipeer.session.id\", session.sessionId),\n stringAttr(\"cognipeer.thread.id\", session.threadId),\n stringAttr(\"cognipeer.agent.model\", session.agent?.model),\n stringAttr(\"cognipeer.agent.provider\", session.agent?.provider),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Root span — represents the entire agent session\n const rootAttrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.session.status\", session.status),\n doubleAttr(\"cognipeer.session.duration_ms\", session.durationMs),\n intAttr(\"cognipeer.session.total_input_tokens\", session.summary.totalInputTokens),\n intAttr(\"cognipeer.session.total_output_tokens\", session.summary.totalOutputTokens),\n intAttr(\"cognipeer.session.total_cached_input_tokens\", session.summary.totalCachedInputTokens),\n intAttr(\"cognipeer.session.total_bytes_in\", session.summary.totalBytesIn),\n intAttr(\"cognipeer.session.total_bytes_out\", session.summary.totalBytesOut),\n intAttr(\"cognipeer.session.event_count\", session.events.length),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Include event count breakdown\n if (session.summary.eventCounts) {\n for (const [key, count] of Object.entries(session.summary.eventCounts)) {\n rootAttrs.push({ key: `cognipeer.session.event_count.${key}`, value: { intValue: String(count) } });\n }\n }\n\n const rootSpan: Record<string, unknown> = {\n traceId,\n spanId: rootSpanId,\n parentSpanId: \"\",\n name: `agent_session: ${session.agent?.name || \"agent\"}`,\n kind: 1, // INTERNAL\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: rootAttrs,\n status: {\n code: toOtlpStatusCode(session.status),\n ...(session.status === \"error\" && session.errors.length > 0\n ? { message: session.errors.map((e) => e.message).join(\"; \") }\n : {}),\n },\n };\n\n // Error events on root span\n if (session.errors.length > 0) {\n rootSpan.events = session.errors.map((err) => ({\n timeUnixNano: err.timestamp ? isoToUnixNano(err.timestamp) : startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: err.message } },\n ...(err.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: err.stack } }] : []),\n ...(err.type ? [{ key: \"exception.type\", value: { stringValue: err.type } }] : []),\n ],\n }));\n }\n\n // Child spans for each event — inherit traceId from session\n const childSpans = session.events.map((event) => {\n const span = eventToOtlpSpan({\n ...event,\n traceId: event.traceId || traceId,\n spanId: event.spanId || generateSpanId(),\n parentSpanId: event.parentSpanId || rootSpanId,\n });\n return span;\n });\n\n return {\n resourceSpans: [{\n resource: { attributes: resourceAttrs },\n scopeSpans: [{\n scope: {\n name: \"cognipeer-agent-sdk\",\n version: \"1.0.0\",\n },\n spans: [rootSpan, ...childSpans],\n }],\n }],\n };\n}\n\n/**\n * POST an OTLP ExportTraceServiceRequest (JSON) to the given endpoint.\n */\nasync function postOtlpTraces(\n endpoint: string,\n headers: Record<string, string> | undefined,\n payload: Record<string, unknown>\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"OTLP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders: Record<string, string> = {\n \"content-type\": \"application/json\",\n ...(headers || {}),\n };\n\n try {\n const response = await fetchFn(endpoint, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch { /* ignore */ }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] OTLP export failed:\", errMsg);\n }\n throw err;\n }\n}\n\nfunction createEmptySummary(): TraceSessionSummary {\n return {\n totalDurationMs: 0,\n totalInputTokens: 0,\n totalOutputTokens: 0,\n totalCachedInputTokens: 0,\n totalBytesIn: 0,\n totalBytesOut: 0,\n eventCounts: {},\n };\n}\n\nfunction generateSessionId(): string {\n return `sess_${nanoid(18)}`;\n}\n\nfunction generateEventId(sequence: number): string {\n return `evt_${String(sequence).padStart(4, \"0\")}_${nanoid(4)}`;\n}\n\n/** Generate a W3C-compatible trace ID (32 hex chars / 128-bit). */\nexport function generateTraceId(): string {\n return crypto.randomBytes(16).toString(\"hex\");\n}\n\n/** Generate an OTel span ID (16 hex chars / 64-bit). */\nexport function generateSpanId(): string {\n return crypto.randomBytes(8).toString(\"hex\");\n}\n\nfunction defaultEventLabel(type: string): string {\n switch (type) {\n case \"ai_call\":\n return \"Assistant Response\";\n case \"tool_call\":\n return \"Tool Execution\";\n case \"session\":\n return \"Session Event\";\n default:\n return type.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n\nfunction ensureUniqueSections(eventId: string, sections?: TraceDataSection[]): TraceDataSection[] | undefined {\n if (!sections || sections.length === 0) return undefined;\n const labelCounts = new Map<string, number>();\n const normalized: TraceDataSection[] = [];\n let counter = 1;\n\n for (const section of sections) {\n const baseLabel = section.label?.trim().length ? section.label.trim() : defaultSectionLabel(section.kind);\n const nextCount = (labelCounts.get(baseLabel) || 0) + 1;\n labelCounts.set(baseLabel, nextCount);\n const finalLabel = nextCount > 1 ? `${baseLabel} (${nextCount})` : baseLabel;\n\n let id = section.id?.trim();\n if (!id) {\n id = `${section.kind}-${eventId}-${String(counter).padStart(2, \"0\")}`;\n }\n counter += 1;\n\n normalized.push({\n ...section,\n id,\n label: finalLabel,\n } as TraceDataSection);\n }\n\n return normalized;\n}\n\nfunction defaultSectionLabel(kind: TraceDataSection[\"kind\"]): string {\n switch (kind) {\n case \"message\":\n return \"Message\";\n case \"tool_call\":\n return \"Tool Call\";\n case \"tool_result\":\n return \"Tool Result\";\n case \"tool_response\":\n return \"Tool Response\";\n case \"summary\":\n return \"Summary\";\n case \"metadata\":\n return \"Details\";\n default:\n return \"Section\";\n }\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalized = role?.trim().length ? role.trim() : \"message\";\n const base = `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nfunction toDisplayString(value: any): string {\n const sanitized = sanitizeTracePayload(value);\n if (sanitized == null) return \"\";\n if (typeof sanitized === \"string\") return sanitized;\n if (Array.isArray(sanitized)) {\n return sanitized\n .map((item) => toDisplayString(item))\n .filter((part) => part && part.trim().length > 0)\n .join(\"\\n\");\n }\n if (typeof sanitized === \"object\") {\n if (typeof (sanitized as any).text === \"string\" && Object.keys(sanitized).length === 1) {\n return (sanitized as any).text;\n }\n if (typeof (sanitized as any).content === \"string\") {\n return (sanitized as any).content;\n }\n try {\n return JSON.stringify(sanitized, null, 2);\n } catch {\n return String(sanitized);\n }\n }\n return String(sanitized);\n}\n\nfunction parseToolArguments(args: any): any {\n if (args == null) return undefined;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction collectToolCallSectionsFromMessage(message: any): TraceToolCallSection[] {\n const sections: TraceToolCallSection[] = [];\n if (!message) return sections;\n\n const addCall = (call: any) => {\n if (!call) return;\n const toolName = call?.name || call?.tool || call?.function?.name || call?.function_call?.name || \"tool\";\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseToolArguments(rawArgs);\n const argumentsPayload = sanitizeTracePayload(parsedArgs ?? rawArgs ?? {});\n sections.push({\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: argumentsPayload,\n });\n };\n\n const directCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : undefined;\n if (directCalls) {\n directCalls.forEach((call: any) => addCall(call));\n }\n\n return sections;\n}\n\nfunction convertMessageListToSections(messageList?: any[]): TraceDataSection[] | undefined {\n if (!Array.isArray(messageList) || messageList.length === 0) return undefined;\n const sections: TraceDataSection[] = [];\n const roleCounts = new Map<string, number>();\n\n for (const message of messageList) {\n if (!message) continue;\n\n const toolSections = collectToolCallSectionsFromMessage(message);\n if (toolSections.length > 0) {\n sections.push(...toolSections);\n continue;\n }\n\n const role = typeof message?.role === \"string\" ? message.role : \"assistant\";\n const next = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, next);\n\n let content = toDisplayString(message?.content ?? \"\");\n if (!content || !content.trim().length) {\n if (toolSections.length > 0) {\n content = \"[tool call]\";\n } else if (typeof message?.content === \"undefined\" || message?.content === null) {\n continue;\n } else {\n content = toDisplayString(sanitizeTracePayload(message?.content));\n if (!content || !content.trim().length) continue;\n }\n }\n\n sections.push({\n kind: \"message\",\n label: buildMessageLabel(role, next),\n role,\n content,\n metadata: typeof message?.name === \"string\" ? { name: message.name } : undefined,\n });\n }\n\n return sections.length > 0 ? sections : undefined;\n}\n\nexport function createTraceSession(opts: SmartAgentOptions): TraceSessionRuntime | undefined {\n const cfg = withDefaults(opts.tracing);\n if (!cfg.enabled) return undefined;\n\n const sessionId = generateSessionId();\n const traceId = generateTraceId();\n const rootSpanId = generateSpanId();\n const runtime: TraceSessionRuntime = {\n sessionId,\n traceId,\n rootSpanId,\n threadId: opts.tracing?.threadId,\n startedAt: Date.now(),\n resolvedConfig: cfg,\n events: [],\n summary: createEmptySummary(),\n status: \"in_progress\",\n errors: [],\n sessionStarted: false,\n };\n\n if (cfg.sink.type === \"file\") {\n const baseDir = cfg.sink.baseDir;\n ensureDir(baseDir);\n const sessionDir = path.join(baseDir, sessionId);\n ensureDir(sessionDir);\n runtime.fileBaseDir = baseDir;\n runtime.fileSessionDir = sessionDir;\n }\n\n return runtime;\n}\n\n/**\n * Start a streaming trace session. Should be called before recording events in streaming mode.\n * This sends the session start to the remote endpoint immediately.\n */\nexport async function startStreamingSession(\n session: TraceSessionRuntime | undefined,\n agentRuntime?: AgentRuntimeConfig\n): Promise<void> {\n if (!session) return;\n if (session.resolvedConfig.mode !== \"streaming\") return;\n if (session.sessionStarted) return;\n\n const sink = session.resolvedConfig.sink;\n \n // Build agent info\n const agentInfo = agentRuntime ? {\n name: agentRuntime.name || \"unknown-agent\",\n version: agentRuntime.version,\n model: getModelName(agentRuntime.model) || \"unknown-model\",\n provider: getProviderName(agentRuntime.model),\n } : undefined;\n \n session.agentInfo = agentInfo;\n \n const configSnapshot = buildConfigSnapshot(session);\n const startedAtIso = new Date(session.startedAt).toISOString();\n \n const payload = {\n sessionId: session.sessionId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n agent: agentInfo,\n config: configSnapshot,\n };\n\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n await postStreamingSessionStart(sink.url, headers, payload);\n session.sessionStarted = true;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"session_start\",\n message,\n type: \"sink\",\n timestamp: startedAtIso,\n });\n // Don't throw - allow session to continue in degraded mode\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to start streaming session, falling back to batched:\", message);\n }\n }\n } else if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n // For custom sinks in streaming mode, we mark as started and let events flow through\n session.sessionStarted = true;\n } else if (sink.type === \"file\") {\n // File sink in streaming mode - just mark as started, events will be written on finalize\n session.sessionStarted = true;\n }\n}\n\nexport function recordTraceEvent(\n session: TraceSessionRuntime | undefined,\n event: {\n type: string;\n label?: string;\n timestamp?: string;\n actor?: TraceEventRecord[\"actor\"];\n status?: TraceEventRecord[\"status\"];\n /** Explicit parent span ID. Falls back to session.currentIterationSpanId when omitted. */\n parentSpanId?: string;\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolDetails?: TraceEventRecord[\"toolDetails\"];\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n messageList?: any[];\n /** Pre-built sections to use instead of auto-converting messageList */\n sections?: TraceDataSection[];\n debug?: Record<string, any>;\n }\n): TraceEventRecord | undefined {\n if (!session) return undefined;\n\n\n const sequence = session.events.length + 1;\n const id = generateEventId(sequence);\n const timestampIso = event.timestamp || new Date().toISOString();\n const status = event.status ?? \"success\";\n const baseLabel = event.label?.trim().length ? event.label.trim() : defaultEventLabel(event.type);\n const eventLabel = `${baseLabel} #${sequence}`;\n\n const durationMs = event.durationMs !== undefined ? Number(event.durationMs) : undefined;\n if (!Number.isNaN(durationMs ?? NaN) && durationMs !== undefined) {\n session.summary.totalDurationMs += durationMs;\n }\n\n const inputTokens = event.inputTokens !== undefined ? Number(event.inputTokens) : undefined;\n if (!Number.isNaN(inputTokens ?? NaN) && inputTokens !== undefined) {\n session.summary.totalInputTokens += inputTokens;\n }\n\n const outputTokens = event.outputTokens !== undefined ? Number(event.outputTokens) : undefined;\n if (!Number.isNaN(outputTokens ?? NaN) && outputTokens !== undefined) {\n session.summary.totalOutputTokens += outputTokens;\n }\n\n const cachedInputTokens = event.cachedInputTokens !== undefined ? Number(event.cachedInputTokens) : undefined;\n if (!Number.isNaN(cachedInputTokens ?? NaN) && cachedInputTokens !== undefined) {\n session.summary.totalCachedInputTokens += cachedInputTokens;\n }\n\n const totalTokens = event.totalTokens !== undefined ? Number(event.totalTokens) : undefined;\n const requestBytes = event.requestBytes !== undefined ? Number(event.requestBytes) : undefined;\n if (!Number.isNaN(requestBytes ?? NaN) && requestBytes !== undefined) {\n session.summary.totalBytesIn += requestBytes;\n }\n\n const responseBytes = event.responseBytes !== undefined ? Number(event.responseBytes) : undefined;\n if (!Number.isNaN(responseBytes ?? NaN) && responseBytes !== undefined) {\n session.summary.totalBytesOut += responseBytes;\n }\n\n session.summary.eventCounts[event.type] = (session.summary.eventCounts[event.type] || 0) + 1;\n\n let sections: TraceDataSection[] | undefined;\n if (session.resolvedConfig.logData) {\n // Use pre-built sections if provided, otherwise auto-convert from messageList\n if (event.sections && event.sections.length > 0) {\n sections = ensureUniqueSections(id, event.sections);\n } else {\n const converted = convertMessageListToSections(event.messageList);\n sections = ensureUniqueSections(id, converted);\n }\n }\n\n const resolvedModel = event.model ?? inferModelFromMessages(event.messageList);\n const resolvedProvider = event.provider ?? inferProviderFromMessages(event.messageList);\n\n // For ai_call events, always include token fields (even if undefined/0) for consistency\n const isAiCall = event.type === \"ai_call\";\n\n // Span hierarchy: traceId from session, unique spanId per event,\n // parentSpanId from explicit param or current iteration span\n const spanId = generateSpanId();\n const parentSpanId = event.parentSpanId || session.currentIterationSpanId || session.rootSpanId;\n \n const record: TraceEventRecord = {\n sessionId: session.sessionId,\n traceId: session.traceId,\n spanId,\n parentSpanId,\n id,\n type: event.type,\n label: eventLabel,\n sequence,\n timestamp: timestampIso,\n actor: event.actor,\n status,\n durationMs,\n ...(isAiCall ? {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n totalTokens: totalTokens ?? 0,\n cachedInputTokens: cachedInputTokens ?? 0,\n } : {\n ...(inputTokens !== undefined && { inputTokens }),\n ...(outputTokens !== undefined && { outputTokens }),\n ...(totalTokens !== undefined && { totalTokens }),\n ...(cachedInputTokens !== undefined && { cachedInputTokens }),\n }),\n requestBytes,\n responseBytes,\n model: resolvedModel,\n provider: resolvedProvider,\n toolDetails: session.resolvedConfig.logData ? sanitizeTracePayload(event.toolDetails) : undefined,\n toolExecutionId: event.toolExecutionId,\n retryOf: event.retryOf,\n error: event.error ?? (status === \"error\" ? { message: \"Unknown error\" } : undefined) ?? undefined,\n data: sections ? { sections } : undefined,\n debug: event.debug,\n };\n\n if (status === \"error\") {\n const errorInfo = event.error ?? { message: \"Unknown error\" };\n session.errors.push({\n eventId: id,\n message: errorInfo.message,\n stack: errorInfo.stack,\n type: event.type,\n timestamp: timestampIso,\n });\n }\n\n session.events.push(record);\n const sink = session.resolvedConfig.sink;\n if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(record));\n const result = sink.onEvent(cloned);\n if (result && typeof (result as PromiseLike<void>).then === \"function\") {\n (result as PromiseLike<void>).then(undefined, (error: unknown) => {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent rejected\", error);\n }\n });\n }\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent failed\", err);\n }\n }\n }\n\n // In streaming mode, send event immediately to HTTP sinks\n if (session.resolvedConfig.mode === \"streaming\" && session.sessionStarted) {\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n // Fire and forget - don't block on event sending\n postStreamingEvent(sink.url, headers, session.sessionId, record).catch((err) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to send streaming event:\", errMsg);\n }\n session.errors.push({\n eventId: record.id,\n message: errMsg,\n type: \"sink\",\n timestamp: timestampIso,\n });\n });\n }\n }\n\n return record;\n}\n\nexport async function finalizeTraceSession(session: TraceSessionRuntime | undefined, params: {\n agentRuntime?: AgentRuntimeConfig;\n status?: TraceSessionStatus;\n error?: { message?: string; stack?: string } | null;\n} = {}): Promise<TraceSessionFile | undefined> {\n if (!session) return undefined;\n\n const endedAtMs = Date.now();\n const endedAtIso = new Date(endedAtMs).toISOString();\n const durationMs = endedAtMs - session.startedAt;\n const startedAtIso = new Date(session.startedAt).toISOString();\n\n // Build agent info with safe defaults - single source of truth\n const buildAgentInfo = (runtime: AgentRuntimeConfig | undefined) => {\n if (!runtime) return undefined;\n return {\n name: runtime.name || \"unknown-agent\",\n version: runtime.version,\n model: getModelName(runtime.model) || \"unknown-model\",\n provider: getProviderName(runtime.model),\n };\n };\n\n const agentInfo = buildAgentInfo(params.agentRuntime);\n\n if (params.error) {\n session.errors.push({\n eventId: \"session\",\n message: params.error.message || \"Unknown error\",\n stack: params.error.stack,\n type: \"session\",\n timestamp: endedAtIso,\n });\n }\n\n const configSnapshot = buildConfigSnapshot(session);\n const initialStatus: TraceSessionStatus = params.status\n ? params.status\n : session.errors.length > 0\n ? \"error\"\n : \"success\";\n\n const buildPayload = (status: TraceSessionStatus): TraceSessionFile => ({\n sessionId: session.sessionId,\n traceId: session.traceId,\n rootSpanId: session.rootSpanId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n endedAt: endedAtIso,\n durationMs,\n agent: agentInfo || session.agentInfo,\n config: configSnapshot,\n summary: session.summary,\n events: session.events,\n status,\n errors: session.errors,\n });\n\n const payloadForSink = buildPayload(initialStatus);\n let sinkFailed = false;\n const sink = session.resolvedConfig.sink;\n const isStreamingMode = session.resolvedConfig.mode === \"streaming\";\n\n if (sink.type === \"otlp\") {\n // OTLP/HTTP JSON export — convert session to ExportTraceServiceRequest and POST\n try {\n const otlpPayload = traceSessionToOtlp(payloadForSink);\n await postOtlpTraces(sink.endpoint, sink.headers, otlpPayload);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n } else if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n if (isStreamingMode && session.sessionStarted) {\n // In streaming mode, send session end instead of full session\n await postStreamingSessionEnd(sink.url, headers, {\n sessionId: session.sessionId,\n endedAt: endedAtIso,\n durationMs,\n status: initialStatus,\n summary: session.summary,\n errors: session.errors,\n });\n } else {\n // In batched mode (or if streaming never started), send full session\n await postTraceSession(sink.url, headers, payloadForSink);\n }\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n \n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n }\n\n const hadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hadSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let status: TraceSessionStatus = params.status ?? (hadNonSinkErrors ? \"error\" : \"success\");\n if (status === \"success\" && (sinkFailed || hadSinkErrors)) {\n status = \"partial\";\n }\n\n let finalPayload = buildPayload(status);\n\n if (sink.type === \"file\" && session.fileSessionDir) {\n try {\n const filePath = path.join(session.fileSessionDir, \"trace.session.json\");\n await fs.promises.writeFile(filePath, JSON.stringify(finalPayload, null, 2), \"utf8\");\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (sink.type === \"custom\" && typeof sink.onSession === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(finalPayload));\n await sink.onSession(cloned);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (!params.status) {\n const finalHadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hasSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let computedStatus: TraceSessionStatus = finalHadNonSinkErrors ? \"error\" : \"success\";\n if (computedStatus === \"success\" && hasSinkErrors) {\n computedStatus = \"partial\";\n }\n if (computedStatus !== status) {\n status = computedStatus;\n finalPayload = buildPayload(status);\n }\n }\n\n return finalPayload;\n}\n\nexport type { ResolvedTraceConfig };\n\nexport function sanitizeTracePayload(value: any): any {\n try {\n const cache = new WeakSet();\n const json = JSON.stringify(\n value,\n (_key, val) => {\n if (typeof val === \"function\") return `[Function ${val.name || \"anonymous\"}]`;\n if (typeof val === \"bigint\") return val.toString();\n if (val instanceof Error) return { message: val.message, stack: val.stack };\n if (val && typeof val === \"object\") {\n if (cache.has(val)) return \"[Circular]\";\n cache.add(val);\n }\n return val;\n },\n 2\n );\n return JSON.parse(json);\n } catch {\n try {\n return typeof value === \"string\" ? value : String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n\nexport function estimatePayloadBytes(value: any): number {\n try {\n const json = JSON.stringify(value);\n return Buffer.byteLength(json ?? \"\", \"utf8\");\n } catch {\n try {\n return Buffer.byteLength(String(value ?? \"\"), \"utf8\");\n } catch {\n return 0;\n }\n }\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\n// Minimal agent node: no system prompt injection. Invokes model with messages as-is.\nexport function createAgentCoreNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const runtime: any = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n guardrails: (opts as any).guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: (opts as any).outputSchema,\n tracing: opts.tracing,\n responseFormat: undefined,\n };\n\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const shouldUseStrictToolCalling = Boolean(\n runtime.responseFormat\n && (runtime.model as any)?.capabilities?.strictToolCalling\n );\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(\n tools,\n shouldUseStrictToolCalling ? { strict: true } : undefined,\n )\n : runtime.model;\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(state.messages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n // Bedrock (Claude) requires strict tool_use -> tool_result adjacency.\n // We both normalize (insert placeholder tool_result if missing) and log a compact dump.\n const extractToolUses = (m: any): Array<{ id: string; name?: string }> => {\n const tcs = m?.tool_calls || m?.additional_kwargs?.tool_calls;\n if (!Array.isArray(tcs)) return [];\n return tcs\n .map((tc: any) => ({ id: tc?.id, name: tc?.function?.name || tc?.name }))\n .filter((x: any) => typeof x.id === \"string\" && x.id.length > 0);\n };\n\n const normalizeBedrockToolPairing = (input: any[]): any[] => {\n const msgs = Array.isArray(input) ? [...input] : [];\n \n // Phase 1: Build a set of all valid tool_call IDs from assistant messages\n const validToolCallIds = new Set<string>();\n for (const m of msgs) {\n if (m?.role === 'assistant') {\n for (const tu of extractToolUses(m)) {\n if (tu.id) validToolCallIds.add(tu.id);\n }\n }\n }\n \n // Phase 2: Filter out orphan tool messages (those without a matching assistant tool_call)\n const filteredMsgs = msgs.filter((m) => {\n if (m?.role === 'tool') {\n const toolCallId = m.tool_call_id;\n if (!toolCallId || !validToolCallIds.has(toolCallId)) {\n // Orphan tool message - remove it\n return false;\n }\n }\n return true;\n });\n \n // Phase 3: Ensure tool messages immediately follow their corresponding assistant message\n // OpenAI requires: assistant(tool_calls) -> tool(tool_call_id) -> tool(tool_call_id) -> ...\n for (let i = 0; i < filteredMsgs.length; i++) {\n const m = filteredMsgs[i];\n if (m?.role !== \"assistant\") continue;\n\n const toolUses = extractToolUses(m);\n if (toolUses.length === 0) continue;\n\n // Bedrock expects exactly one \"next message\" containing the corresponding tool_result blocks.\n // In our message format we represent tool_result as role:'tool' messages with tool_call_id.\n // If the next message isn't a tool result for the first tool_use id, insert placeholders.\n const next = filteredMsgs[i + 1];\n\n // If next is a tool message for the first id, we assume pairing is okay and let downstream validate.\n const firstId = toolUses[0]?.id;\n const nextIsToolForFirst = !!(next && next.role === \"tool\" && next.tool_call_id === firstId);\n if (nextIsToolForFirst) continue;\n\n // Insert placeholder tool results for all tool uses on this assistant turn.\n const placeholders = toolUses.map((tu) => ({\n role: \"tool\",\n name: tu.name || \"unknown_tool\",\n tool_call_id: tu.id,\n content: \"SUMMARIZED/DEFERRED: tool result missing in transcript; inserted placeholder for tool_result adjacency.\",\n }));\n filteredMsgs.splice(i + 1, 0, ...placeholders);\n\n // Skip over inserted placeholders\n i += placeholders.length;\n }\n return filteredMsgs;\n };\n\n const debugToolPairing = (messagesToSend: any[]) => {\n try {\n const msgs: any[] = Array.isArray(messagesToSend) ? messagesToSend : [];\n const toolUseIds: string[] = [];\n const missingResults: Array<{ id: string; atIndex: number; tool?: string }> = [];\n\n for (let i = 0; i < msgs.length; i++) {\n const m = msgs[i];\n if (m?.role === \"assistant\") {\n for (const tu of extractToolUses(m)) {\n toolUseIds.push(tu.id);\n const next = msgs[i + 1];\n if (!(next && next.role === \"tool\" && (next.tool_call_id === tu.id || next.tool_call_id === m?.tool_call_id))) {\n missingResults.push({ id: tu.id, atIndex: i, tool: tu.name });\n }\n }\n }\n }\n\n } catch {\n // Debug tool pairing failed silently\n }\n };\n\n const onEvent = (state.ctx as any)?.__onEvent as ((e: any) => void) | undefined;\n const onStream = (state.ctx as any)?.__onStream as ((chunk: { text: string; isFinal?: boolean }) => void) | undefined;\n const streamingEnabled = Boolean((state.ctx as any)?.__streaming);\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n\n // Native structured output: pass response_format to model invocation if set\n const responseFormat = (runtime as any).responseFormat as Record<string, any> | undefined;\n\n // Unified reasoning pass-through: when the loop resolved a ReasoningConfig we\n // place the native shape on ctx.__reasoning. We forward it into invoke options\n // so native providers (OpenAI/Anthropic/Vertex) can map it to their own body.\n const reasoningForCall = (state.ctx as any)?.__reasoning;\n const reasoningInvokeOpts = reasoningForCall ? { reasoning: reasoningForCall } : undefined;\n\n const extractText = (chunk: any) => {\n if (chunk == null) return \"\";\n if (typeof chunk === \"string\") return chunk;\n if (typeof chunk?.content === \"string\") return chunk.content;\n if (Array.isArray(chunk?.content)) {\n return chunk.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n }\n if (typeof chunk?.text === \"string\") return chunk.text;\n if (typeof chunk?.delta?.content === \"string\") return chunk.delta.content;\n return \"\";\n };\n\n let response: any;\n try {\n const normalizedMessages = normalizeBedrockToolPairing([...(state.messages as any[])]);\n debugToolPairing(normalizedMessages);\n if (streamingEnabled && typeof (modelWithTools as any).stream === \"function\") {\n let streamedText = \"\";\n let streamedMessage: any | undefined;\n const streamOptions = { signal: abortSignal, cancellationToken, ...responseFormat, ...reasoningInvokeOpts };\n for await (const chunk of (modelWithTools as any).stream(normalizedMessages, streamOptions)) {\n if ((cancellationToken && cancellationToken.isCancellationRequested) || abortSignal?.aborted) {\n break;\n }\n if (chunk && typeof chunk === \"object\" && (chunk as any).role) {\n streamedMessage = chunk;\n }\n const text = extractText(chunk);\n if (text) {\n streamedText += text;\n onStream?.({ text });\n onEvent?.({ type: \"stream\", text });\n }\n }\n if (streamedMessage) {\n response = { ...streamedMessage };\n if (response.content == null || response.content === \"\") {\n response.content = streamedText;\n }\n } else {\n response = { role: \"assistant\", content: streamedText } as any;\n }\n } else {\n response = await modelWithTools.invoke(normalizedMessages, { signal: abortSignal, cancellationToken, ...responseFormat, ...reasoningInvokeOpts });\n }\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: state.messages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...state.messages,\n response as any,\n ];\n\n // Usage tracking (per-request, aggregated by model)\n const rawUsage = (response as any)?.usage\n || (response as any)?.usage_metadata\n || (response as any)?.response_metadata?.token_usage\n || (response as any)?.response_metadata?.tokenUsage // LangChain camelCase\n || (response as any)?.response_metadata?.usage\n || (response as any)?.response_metadata?.usage_metadata\n || (response as any)?.response_metadata?.usageMetadata;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const durationMs = Date.now() - start;\n\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes: responseBytes,\n model: modelName,\n provider: getProviderName((runtime as any).model || (opts as any).model),\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details?.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type { ContentPart } from \"../types.js\";\n\n// Convert content (string | parts[]) to a human-readable string for logging, token counting, or summarization.\nexport function contentToString(content: string | ContentPart[] | any): string {\n try {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((p) => {\n if (!p || typeof p !== \"object\") return String(p);\n if ((p as any).type === \"text\") return String((p as any).text ?? \"\");\n if ((p as any).type === \"image_url\") {\n const img = (p as any).image_url;\n const url = typeof img === \"string\" ? img : img?.url;\n const detail = typeof img === \"string\" ? undefined : img?.detail;\n return `[image:${url || \"unknown\"}${detail ? ` detail=${detail}` : \"\"}]`;\n }\n // generic fallback\n return JSON.stringify(p);\n })\n .join(\"\\n\");\n }\n // unknown object\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n}\n\n// Merge an array of messages' contents into a single string (used in token counting decisions)\nexport function mergeContentsToString(contents: Array<string | ContentPart[] | any>): string {\n return contents.map((c) => contentToString(c)).join(\"\\n\");\n}\n\n// Safely convert any value to string via JSON.stringify, with fallback.\nexport function safeStringify(value: unknown, pretty = false): string {\n if (value == null) return \"\";\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, pretty ? 2 : undefined) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\n// Extract text from a message object (handles string content, ContentPart arrays, etc.)\nexport function extractMessageText(message: any): string {\n if (!message) return \"\";\n const content = message.content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((part: any) => (typeof part === \"string\" ? part : part?.text ?? part?.content ?? \"\"))\n .join(\"\");\n }\n return \"\";\n}\n","import { sanitizeTracePayload } from \"./tracing.js\";\nimport { safeStringify } from \"./content.js\";\nimport type {\n TraceDataSection,\n TraceMessageSection,\n TraceSummarySection,\n TraceMetadataSection,\n TraceToolCallSection,\n TraceToolResultItem,\n TraceToolResponseSection,\n} from \"../types.js\";\n\nfunction truncate(text: string, max = 500): string {\n if (!text) return \"\";\n return text.length > max ? `${text.slice(0, max)}…` : text;\n}\n\nfunction parseJsonLike(value: any): any {\n if (Array.isArray(value)) {\n if (value.length === 1) {\n return parseJsonLike(value[0]);\n }\n return value.map((item) => parseJsonLike(item));\n }\n if (value && typeof value === \"object\") {\n if (typeof (value as any).text === \"string\" && Object.keys(value).length === 1) {\n try {\n return JSON.parse((value as any).text);\n } catch {\n return (value as any).text;\n }\n }\n return value;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n try {\n return JSON.parse(trimmed);\n } catch {\n return value;\n }\n }\n return value;\n}\n\nexport function summarizeToolOutput(output: any): string {\n if (output == null) return \"\";\n if (typeof output === \"string\") return truncate(output.trim());\n if (Array.isArray(output)) {\n const preview = output\n .slice(0, 3)\n .map((item, index) => `${index + 1}. ${truncate(safeStringify(item))}`)\n .join(\"\\n\");\n const suffix = output.length > 3 ? `\\n… (+${output.length - 3} more)` : \"\";\n return `${preview}${suffix}`.trim();\n }\n if (typeof output === \"object\") {\n if (Array.isArray((output as any).items)) {\n return summarizeToolOutput((output as any).items);\n }\n return truncate(safeStringify(output));\n }\n return truncate(String(output));\n}\n\nexport function extractToolItems(output: any): TraceToolResultItem[] | undefined {\n const source = Array.isArray(output) ? output : Array.isArray(output?.items) ? output.items : undefined;\n if (!Array.isArray(source) || source.length === 0) return undefined;\n return source.slice(0, 5).map((item) => {\n if (item && typeof item === \"object\") {\n const snippetSource = (item as any).content ?? (item as any).snippet ?? (item as any).description ?? (item as any).text ?? (item as any).summary ?? item;\n return {\n title: typeof (item as any).title === \"string\" ? (item as any).title : undefined,\n url: typeof (item as any).url === \"string\" ? (item as any).url : undefined,\n snippet: truncate(safeStringify(snippetSource)),\n } as TraceToolResultItem;\n }\n return { snippet: truncate(safeStringify(item)) } as TraceToolResultItem;\n });\n}\n\nfunction capitalize(word: string): string {\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n\nexport function formatMessageContent(content: any): string {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((item) => {\n if (typeof item === \"string\") return item;\n if (item && typeof item === \"object\") {\n if (typeof (item as any).text === \"string\") return (item as any).text;\n if (typeof (item as any).content === \"string\") return (item as any).content;\n try {\n return JSON.stringify(item);\n } catch {\n return String(item);\n }\n }\n try {\n return JSON.stringify(item);\n } catch {\n return String(item);\n }\n })\n .filter(Boolean)\n .join(\"\\n\");\n }\n if (typeof content === \"object\") {\n if (typeof (content as any).text === \"string\") return (content as any).text;\n if (typeof (content as any).content === \"string\") return (content as any).content;\n try {\n return JSON.stringify(content, null, 2);\n } catch {\n return String(content);\n }\n }\n return String(content);\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalizedRole = role || \"message\";\n const base = `${capitalize(normalizedRole)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nexport function buildPromptSections(messages: any[]): TraceDataSection[] {\n if (!Array.isArray(messages)) return [];\n const roleCounts = new Map<string, number>();\n const sections: TraceDataSection[] = [];\n\n for (const msg of messages) {\n const role = typeof msg?.role === \"string\" ? msg.role : \"system\";\n const nextCount = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, nextCount);\n const label = buildMessageLabel(role, nextCount);\n const content = formatMessageContent(msg?.content);\n\n sections.push({\n kind: \"message\",\n label,\n role,\n content,\n metadata: msg?.name ? { name: msg.name } : undefined,\n } as TraceMessageSection);\n }\n\n return sections;\n}\n\nfunction parseArguments(args: any): any {\n if (args == null) return args;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction toToolCallSection(call: any, index: number): TraceToolCallSection {\n const toolName = call?.name || call?.tool || call?.function?.name || `tool_${index + 1}`;\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseArguments(rawArgs);\n return {\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: sanitizeTracePayload(parsedArgs ?? rawArgs ?? {}),\n } as TraceToolCallSection;\n}\n\nexport function extractToolCalls(response: any): TraceToolCallSection[] {\n const calls: TraceToolCallSection[] = [];\n const candidateSets = [\n Array.isArray(response?.tool_calls) ? response.tool_calls : null,\n Array.isArray(response?.additional_kwargs?.tool_calls) ? response.additional_kwargs.tool_calls : null,\n ];\n\n for (const set of candidateSets) {\n if (Array.isArray(set)) {\n set.forEach((call, idx) => calls.push(toToolCallSection(call, idx)));\n }\n }\n\n const functionCall = response?.function_call || response?.additional_kwargs?.function_call;\n if (functionCall) {\n calls.push(toToolCallSection(functionCall, calls.length));\n }\n\n return calls;\n}\n\nexport function buildAssistantMessageSection(\n response: any,\n options?: { label?: string }\n): TraceMessageSection | null {\n const content = formatMessageContent(response?.content ?? response);\n if (!content) return null;\n return {\n kind: \"message\",\n label: options?.label ?? \"Assistant Message\",\n role: \"assistant\",\n content,\n metadata: response?.name ? { name: response.name } : undefined,\n } as TraceMessageSection;\n}\n\nexport function buildLastUserMessageSections(messages: any[]): TraceDataSection[] {\n if (!Array.isArray(messages)) return [];\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const msg = messages[i];\n if (msg?.role === \"user\") {\n return buildPromptSections([msg]);\n }\n }\n return [];\n}\n\nfunction findLastIndex<T>(arr: T[], predicate: (value: T, index: number, array: T[]) => boolean): number {\n for (let i = arr.length - 1; i >= 0; i -= 1) {\n if (predicate(arr[i], i, arr)) {\n return i;\n }\n }\n return -1;\n}\n\nfunction isAssistantToolCallMessage(message: any): boolean {\n if (!message) return false;\n return extractToolCalls(message).length > 0;\n}\n\nfunction buildToolResponseSectionFromMessage(message: any): TraceToolResponseSection | null {\n if (!message) return null;\n const toolName = message?.name || message?.metadata?.name || message?.tool || message?.tool_call_id || \"tool\";\n const parsed = parseJsonLike(message?.content ?? message);\n const sanitizedOutput = sanitizeTracePayload(parsed ?? (message?.content ?? message));\n const summarySource = sanitizedOutput ?? parsed ?? message?.content ?? message;\n const summary = summarizeToolOutput(summarySource);\n const items = extractToolItems(summarySource);\n const fallback = summary || formatMessageContent(message?.content ?? message);\n if (!fallback) return null;\n return {\n kind: \"tool_response\",\n label: `Tool Response: ${toolName}`,\n tool: toolName,\n summary: fallback,\n items,\n output: sanitizedOutput,\n } as TraceToolResponseSection;\n}\n\nfunction collectToolResponseSections(messages: any[], startIndex: number): TraceToolResponseSection[] {\n if (!Array.isArray(messages)) return [];\n const sections: TraceToolResponseSection[] = [];\n for (let i = startIndex + 1; i < messages.length; i += 1) {\n const msg = messages[i];\n if (!msg) continue;\n const role = msg.role;\n const hasToolName = typeof msg?.name === \"string\" && msg.name.length > 0;\n const hasToolId = typeof msg?.tool_call_id === \"string\" && msg.tool_call_id.length > 0;\n if (role === \"tool\" || hasToolName || hasToolId) {\n const section = buildToolResponseSectionFromMessage(msg);\n if (section) sections.push(section);\n }\n }\n return sections;\n}\n\nexport function buildToolCallTurnSections(messages: any[], response: any): TraceDataSection[] {\n const toolCalls = extractToolCalls(response);\n if (toolCalls.length === 0) return [];\n const sections: TraceDataSection[] = [];\n sections.push(...buildLastUserMessageSections(messages));\n sections.push(...toolCalls);\n return sections;\n}\n\nexport function buildFinalAgentSections(messages: any[], response: any): TraceDataSection[] {\n if (!Array.isArray(messages)) return [];\n const assistantToolIndex = findLastIndex(messages, (msg) => isAssistantToolCallMessage(msg));\n if (assistantToolIndex === -1) return [];\n const sections: TraceDataSection[] = [];\n sections.push(...buildLastUserMessageSections(messages));\n const assistantToolMessage = messages[assistantToolIndex];\n sections.push(...extractToolCalls(assistantToolMessage));\n sections.push(...collectToolResponseSections(messages, assistantToolIndex));\n const assistantMessage = buildAssistantMessageSection(response, { label: \"AI Message\" });\n if (assistantMessage) sections.push(assistantMessage);\n return sections;\n}\n\nexport function buildAssistantResponseSections(response: any): TraceDataSection[] {\n if (!response) return [];\n const sections: TraceDataSection[] = [];\n const assistantMessage = buildAssistantMessageSection(response);\n if (assistantMessage) {\n sections.push(assistantMessage);\n }\n sections.push(...extractToolCalls(response));\n\n return sections;\n}\n\n/**\n * Builds dedicated trace sections for a summarization event.\n *\n * This produces a structured representation with:\n * 1. A \"summary\" section containing the generated summary text.\n * 2. A \"metadata\" section with detailed summarization statistics\n * (tokens before/after, messages compressed, previous summary, etc.).\n * 3. Optionally, the summarization prompt messages for debugging.\n */\nexport function buildSummarizationSections(opts: {\n summaryText: string;\n previousSummary?: string;\n messagesCompressed: number;\n tokenCountBefore: number;\n tokenCountAfter: number;\n inputTokens?: number;\n outputTokens?: number;\n cachedInputTokens?: number;\n durationMs?: number;\n promptMessages?: any[];\n}): TraceDataSection[] {\n const sections: TraceDataSection[] = [];\n\n // 1. The generated summary as a dedicated \"summary\" section\n sections.push({\n kind: \"summary\",\n label: \"Context Summary\",\n content: opts.summaryText,\n } as TraceSummarySection);\n\n // 2. Summarization statistics as a \"metadata\" section\n const tokensSaved = opts.tokenCountBefore - opts.tokenCountAfter;\n const reductionPct = opts.tokenCountBefore > 0\n ? Math.round((tokensSaved / opts.tokenCountBefore) * 100)\n : 0;\n\n const metaData: Record<string, any> = {\n messagesCompressed: opts.messagesCompressed,\n tokenCountBefore: opts.tokenCountBefore,\n tokenCountAfter: opts.tokenCountAfter,\n tokensSaved,\n reductionPercent: reductionPct,\n };\n\n if (opts.inputTokens !== undefined) metaData.inputTokens = opts.inputTokens;\n if (opts.outputTokens !== undefined) metaData.outputTokens = opts.outputTokens;\n if (opts.cachedInputTokens !== undefined) metaData.cachedInputTokens = opts.cachedInputTokens;\n if (opts.durationMs !== undefined) metaData.durationMs = opts.durationMs;\n if (opts.previousSummary) metaData.previousSummaryLength = opts.previousSummary.length;\n\n sections.push({\n kind: \"metadata\",\n label: \"Summarization Stats\",\n data: metaData,\n } as TraceMetadataSection);\n\n // 3. Optionally include the prompt that was sent to the model\n if (Array.isArray(opts.promptMessages) && opts.promptMessages.length > 0) {\n for (const msg of opts.promptMessages) {\n const role = typeof msg?.role === \"string\" ? msg.role : \"system\";\n const content = formatMessageContent(msg?.content ?? \"\");\n if (content) {\n sections.push({\n kind: \"message\",\n label: `Summarization Prompt (${role})`,\n role,\n content,\n } as TraceMessageSection);\n }\n }\n }\n\n return sections;\n}\n","import type {\n AgentLimits,\n BuiltInRuntimeProfile,\n MemoryStore,\n ProfileConfig,\n ResolvedSmartAgentConfig,\n RuntimeProfile,\n SmartAgentOptions,\n} from \"../types.js\";\n\nconst DEFAULT_CRITICAL_TOOLS = [\"response\", \"manage_todo_list\", \"get_tool_response\"];\n\n// Shared defaults across all profiles — only overridden values need to be specified per profile.\n// These mirror the \"balanced\" profile and are scaled for modern frontier models\n// (Claude 4.x, GPT-4o, Gemini 2.x) where 100k+ context windows are standard.\nconst BASE_DEFAULTS: ProfileConfig = {\n limits: { maxToolCalls: 20, maxParallelTools: 5, maxContextTokens: 96000, maxTotalOutputTokens: 0, maxCostUsd: 0, maxWallClockMs: 0 },\n summarization: {\n enable: true,\n maxTokens: 96000,\n summaryTriggerTokens: 72000,\n summaryPromptMaxTokens: 12000,\n summaryCompressionRatioTarget: 0.45,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 16,\n toolResponsePolicy: \"summarize_archive\",\n budget: {\n systemReserveTokens: 2000,\n goalsReserveTokens: 2000,\n recentTurnsReserveTokens: 18000,\n toolResponseReserveTokens: 9000,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"session\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"role_based\",\n maxDelegationDepth: 2,\n maxChildCalls: 6,\n maxParallelChild: 3,\n childContextPolicy: \"scoped\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 32_000,\n maxToolResponseTokens: 8_000,\n defaultPolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n },\n};\n\nfunction buildProfile(overrides: Partial<{\n limits: Partial<ProfileConfig[\"limits\"]>;\n summarization: Partial<ProfileConfig[\"summarization\"]>;\n context: Partial<ProfileConfig[\"context\"]> & { budget?: Partial<ProfileConfig[\"context\"][\"budget\"]> };\n planning: Partial<ProfileConfig[\"planning\"]>;\n memory: Partial<ProfileConfig[\"memory\"]>;\n delegation: Partial<ProfileConfig[\"delegation\"]>;\n toolResponses: Partial<ProfileConfig[\"toolResponses\"]>;\n}>): ProfileConfig {\n return {\n limits: { ...BASE_DEFAULTS.limits, ...overrides.limits },\n summarization: { ...BASE_DEFAULTS.summarization, ...overrides.summarization },\n context: {\n ...BASE_DEFAULTS.context,\n ...overrides.context,\n budget: { ...BASE_DEFAULTS.context.budget, ...overrides.context?.budget },\n },\n planning: { ...BASE_DEFAULTS.planning, ...overrides.planning },\n memory: { ...BASE_DEFAULTS.memory, ...overrides.memory },\n delegation: { ...BASE_DEFAULTS.delegation, ...overrides.delegation },\n toolResponses: {\n ...BASE_DEFAULTS.toolResponses,\n ...overrides.toolResponses,\n criticalTools: overrides.toolResponses?.criticalTools ?? [...DEFAULT_CRITICAL_TOOLS],\n toolResponseRetentionByTool: overrides.toolResponses?.toolResponseRetentionByTool ?? {},\n },\n };\n}\n\nexport const DEFAULT_PROFILE_CONFIGS: Record<BuiltInRuntimeProfile, ProfileConfig> = {\n fast: buildProfile({\n limits: { maxToolCalls: 8, maxParallelTools: 3, maxContextTokens: 32000 },\n summarization: {\n maxTokens: 32000,\n summaryTriggerTokens: 24000,\n summaryPromptMaxTokens: 6000,\n summaryCompressionRatioTarget: 0.5,\n },\n context: {\n lastTurnsToKeep: 8,\n toolResponsePolicy: \"keep_structured\",\n budget: { systemReserveTokens: 1500, goalsReserveTokens: 1200, recentTurnsReserveTokens: 6000, toolResponseReserveTokens: 3500 },\n },\n memory: { readPolicy: \"recent_only\" },\n delegation: { mode: \"off\", maxDelegationDepth: 1, maxChildCalls: 2, maxParallelChild: 1, childContextPolicy: \"minimal\" },\n toolResponses: { maxToolResponseChars: 16_000, maxToolResponseTokens: 4_000 },\n }),\n\n balanced: buildProfile({}),\n\n deep: buildProfile({\n limits: { maxToolCalls: 40, maxParallelTools: 8, maxContextTokens: 200000 },\n summarization: {\n maxTokens: 200000,\n summaryTriggerTokens: 150000,\n summaryPromptMaxTokens: 16000,\n summaryCompressionRatioTarget: 0.4,\n },\n context: {\n lastTurnsToKeep: 30,\n budget: { systemReserveTokens: 2500, goalsReserveTokens: 2500, recentTurnsReserveTokens: 36000, toolResponseReserveTokens: 18000 },\n },\n memory: { scope: \"workspace\" },\n delegation: { maxDelegationDepth: 3, maxChildCalls: 10, maxParallelChild: 4 },\n toolResponses: { maxToolResponseChars: 64_000, maxToolResponseTokens: 16_000 },\n }),\n\n research: buildProfile({\n limits: { maxToolCalls: 80, maxParallelTools: 10, maxContextTokens: 400000 },\n summarization: {\n maxTokens: 400000,\n summaryTriggerTokens: 300000,\n summaryPromptMaxTokens: 24000,\n summaryCompressionRatioTarget: 0.35,\n },\n context: {\n lastTurnsToKeep: 60,\n budget: { systemReserveTokens: 3000, goalsReserveTokens: 3000, recentTurnsReserveTokens: 72000, toolResponseReserveTokens: 32000 },\n },\n memory: { scope: \"workspace\" },\n delegation: { mode: \"automatic\", maxDelegationDepth: 4, maxChildCalls: 16, maxParallelChild: 6, childContextPolicy: \"full\" },\n toolResponses: { maxToolResponseChars: 96_000, maxToolResponseTokens: 24_000 },\n }),\n};\n\nfunction mergeLimits(base: Required<AgentLimits>, override?: AgentLimits): Required<AgentLimits> {\n return {\n maxToolCalls: override?.maxToolCalls ?? base.maxToolCalls,\n maxParallelTools: override?.maxParallelTools ?? base.maxParallelTools,\n maxContextTokens: override?.maxContextTokens ?? base.maxContextTokens,\n maxTotalOutputTokens: override?.maxTotalOutputTokens ?? base.maxTotalOutputTokens ?? 0,\n maxCostUsd: override?.maxCostUsd ?? base.maxCostUsd ?? 0,\n maxWallClockMs: override?.maxWallClockMs ?? base.maxWallClockMs ?? 0,\n };\n}\n\nfunction resolveBaseProfile(opts: SmartAgentOptions, runtimeProfile: RuntimeProfile): BuiltInRuntimeProfile {\n if (opts.customProfile?.extends) return opts.customProfile.extends;\n if (runtimeProfile !== \"custom\") return runtimeProfile;\n return \"balanced\";\n}\n\nexport function normalizeSmartAgentOptions(opts: SmartAgentOptions): ResolvedSmartAgentConfig {\n const runtimeProfile = opts.runtimeProfile ?? (opts.customProfile ? \"custom\" : \"balanced\");\n const baseProfile = resolveBaseProfile(opts, runtimeProfile);\n const preset = DEFAULT_PROFILE_CONFIGS[baseProfile];\n const customProfile = opts.customProfile || {};\n const useTodoList = opts.useTodoList === true;\n const summarizationDisabled = opts.summarization === false;\n const summarizationOverride = typeof opts.summarization === \"object\" ? opts.summarization : {};\n const planningMode = opts.planning?.mode ?? customProfile.planning?.mode ?? (useTodoList ? \"todo\" : preset.planning.mode);\n const memoryStore = (opts.memory?.store ?? customProfile.memory?.store) as MemoryStore | undefined;\n const contextToolResponsePolicy = opts.context?.toolResponsePolicy\n ?? customProfile.context?.toolResponsePolicy\n ?? preset.context.toolResponsePolicy;\n\n return {\n runtimeProfile,\n baseProfile,\n limits: mergeLimits(mergeLimits(preset.limits, customProfile.limits), opts.limits),\n summarization: {\n ...preset.summarization,\n ...(customProfile.summarization || {}),\n ...summarizationOverride,\n enable: summarizationDisabled ? false : (summarizationOverride.enable ?? customProfile.summarization?.enable ?? preset.summarization.enable),\n maxTokens: summarizationOverride.maxTokens ?? opts.limits?.maxContextTokens ?? customProfile.summarization?.maxTokens ?? preset.summarization.maxTokens,\n summaryTriggerTokens:\n summarizationOverride.summaryTriggerTokens\n ?? summarizationOverride.maxTokens\n ?? opts.limits?.maxContextTokens\n ?? customProfile.summarization?.summaryTriggerTokens\n ?? customProfile.summarization?.maxTokens\n ?? preset.summarization.summaryTriggerTokens,\n promptTemplate: summarizationOverride.promptTemplate ?? customProfile.summarization?.promptTemplate ?? preset.summarization.promptTemplate,\n },\n context: {\n ...preset.context,\n ...(customProfile.context || {}),\n ...(opts.context || {}),\n budget: {\n ...preset.context.budget,\n ...((customProfile.context?.budget || {})),\n ...((opts.context?.budget || {})),\n },\n toolResponsePolicy: contextToolResponsePolicy,\n },\n planning: {\n ...preset.planning,\n ...(customProfile.planning || {}),\n ...(opts.planning || {}),\n mode: planningMode,\n },\n memory: {\n ...preset.memory,\n ...(customProfile.memory || {}),\n ...(opts.memory || {}),\n store: memoryStore,\n },\n delegation: {\n ...preset.delegation,\n ...(customProfile.delegation || {}),\n ...(opts.delegation || {}),\n },\n toolResponses: {\n ...preset.toolResponses,\n ...(customProfile.toolResponses || {}),\n ...(opts.toolResponses || {}),\n defaultPolicy: opts.toolResponses?.defaultPolicy\n ?? customProfile.toolResponses?.defaultPolicy\n ?? contextToolResponsePolicy,\n toolResponseRetentionByTool: {\n ...preset.toolResponses.toolResponseRetentionByTool,\n ...((customProfile.toolResponses?.toolResponseRetentionByTool || {})),\n ...((opts.toolResponses?.toolResponseRetentionByTool || {})),\n },\n criticalTools: opts.toolResponses?.criticalTools ?? customProfile.toolResponses?.criticalTools ?? preset.toolResponses.criticalTools,\n },\n };\n}\n\nexport function getResolvedSmartConfig(opts: SmartAgentOptions, runtime?: { smart?: ResolvedSmartAgentConfig | undefined }): ResolvedSmartAgentConfig {\n return runtime?.smart || normalizeSmartAgentOptions(opts);\n}","import { ZodError } from \"zod\";\nimport type {\n ResolvedSmartAgentConfig,\n ToolInterface,\n ToolResponseClassification,\n ToolResponseRetentionPolicy,\n} from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { safeStringify } from \"../utils/content.js\";\n\n/**\n * Compact textual preview of a value for archive/structured retention. Used by\n * the summarizer when an old tool response is reduced to a placeholder. Not\n * used at tool execution time.\n */\nexport function summarizeObject(value: any): string {\n if (value == null) return \"null\";\n if (typeof value === \"string\") {\n return value.length > 240 ? `${value.slice(0, 240)}...` : value;\n }\n if (Array.isArray(value)) {\n const preview = value.slice(0, 3).map((entry) => safeStringify(entry).slice(0, 120)).join(\" | \");\n return `array(length=${value.length}) ${preview}`.trim();\n }\n if (typeof value === \"object\") {\n const keys = Object.keys(value);\n const preview = keys.slice(0, 6).map((key) => `${key}=${safeStringify(value[key]).slice(0, 80)}`).join(\"; \");\n return `object(keys=${keys.length}) ${preview}`.trim();\n }\n return safeStringify(value);\n}\n\nexport function classifyToolResponse(\n toolName: string,\n output: unknown,\n config: ResolvedSmartAgentConfig,\n): ToolResponseClassification {\n const criticalTools = new Set(config.toolResponses.criticalTools);\n if (criticalTools.has(toolName)) return \"critical\";\n\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n if (\n tokenCount >= config.toolResponses.maxToolResponseTokens\n || serialized.length >= config.toolResponses.maxToolResponseChars\n ) {\n return \"verbose\";\n }\n return \"informative\";\n}\n\n/**\n * Eager pass executed at tool-call time. The full payload is always preserved in\n * `toolHistory`; we only intervene when a single response would blow up the\n * very next model call. Critical tools are never truncated.\n */\nexport function applyToolResponseHardCap(\n toolName: string,\n output: unknown,\n executionId: string,\n config: ResolvedSmartAgentConfig,\n): {\n classification: ToolResponseClassification;\n content: string;\n rawOutput: unknown;\n tokenCount: number;\n truncated: boolean;\n} {\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n const classification = classifyToolResponse(toolName, output, config);\n\n if (classification !== \"verbose\") {\n return { classification, content: serialized, rawOutput: output, tokenCount, truncated: false };\n }\n\n const cap = config.toolResponses.maxToolResponseChars;\n const head = serialized.slice(0, cap);\n const note = `\\n... [TRUNCATED ${serialized.length - cap} chars by hard cap. Use get_tool_response with executionId=\"${executionId}\" to fetch the full payload.]`;\n return {\n classification,\n content: head + note,\n rawOutput: output,\n tokenCount,\n truncated: true,\n };\n}\n\n/**\n * Resolves the retention policy applied by the summarizer when context limits\n * are reached. Critical tools are never reduced. Per-tool override beats the\n * default policy.\n */\nexport function resolveSummarizationRetention(\n toolName: string,\n config: ResolvedSmartAgentConfig,\n): ToolResponseRetentionPolicy {\n const criticalTools = new Set(config.toolResponses.criticalTools);\n if (criticalTools.has(toolName)) return \"keep_full\";\n const byTool = config.toolResponses.toolResponseRetentionByTool[toolName];\n return byTool || config.toolResponses.defaultPolicy;\n}\n\n/**\n * Renders the placeholder content used when the summarizer reduces an old tool\n * message according to the resolved retention policy. The full payload is still\n * fetchable via `get_tool_response` using the executionId/toolCallId reference.\n */\nexport function renderRetainedToolMessage(args: {\n policy: ToolResponseRetentionPolicy;\n rawOutput: unknown;\n toolName: string;\n toolCallId?: string;\n executionId?: string;\n prebuiltSummary?: string;\n}): string {\n const { policy, rawOutput, toolName, toolCallId, executionId, prebuiltSummary } = args;\n if (policy === \"keep_full\") {\n return typeof rawOutput === \"string\" ? rawOutput : safeStringify(rawOutput);\n }\n\n const summary = prebuiltSummary || summarizeObject(rawOutput);\n const refs = [\n `toolName=${toolName}`,\n toolCallId ? `toolCallId=${toolCallId}` : null,\n executionId ? `executionId=${executionId}` : null,\n ].filter(Boolean).join(\"; \");\n const refId = executionId || toolCallId || \"\";\n\n if (policy === \"keep_structured\") {\n return `STRUCTURED_TOOL_RESPONSE [${refs}]\\nPreview: ${summary}\\nUse get_tool_response with executionId \"${refId}\" to fetch the full payload when a specific field is needed.`;\n }\n\n if (policy === \"summarize_archive\") {\n return `ARCHIVED_TOOL_RESPONSE [${refs}]\\nSummary: ${summary}\\nUse get_tool_response with executionId \"${refId}\" to fetch the full payload.`;\n }\n\n return `DROPPED_TOOL_RESPONSE [${refs}]\\nUse get_tool_response with executionId \"${refId}\" only if you must recover the original payload.`;\n}\n\nexport function validateToolArgs(\n tool: ToolInterface<any, any, any>,\n args: unknown,\n): { ok: true; value: any } | { ok: false; message: string } {\n const schema = (tool as any).schema;\n if (!schema || typeof schema.parse !== \"function\") {\n return { ok: true, value: args };\n }\n\n try {\n return { ok: true, value: schema.parse(args) };\n } catch (error) {\n if (error instanceof ZodError) {\n const message = error.issues.map((issue) => `${issue.path.join(\".\") || \"root\"}: ${issue.message}`).join(\"; \");\n return { ok: false, message };\n }\n return { ok: false, message: error instanceof Error ? error.message : String(error) };\n }\n}\n","import type {\n SmartAgentEvent,\n SmartAgentOptions,\n SmartState,\n AgentRuntimeConfig,\n ToolInterface,\n Message,\n PendingToolApproval,\n PendingUserQuestion,\n TraceDataSection,\n TraceToolDetails,\n} from \"../types.js\";\nimport { nanoid } from \"nanoid\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes } from \"../utils/tracing.js\";\nimport { extractToolItems, summarizeToolOutput } from \"../utils/traceSections.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { applyToolResponseHardCap, validateToolArgs } from \"../smart/toolResponses.js\";\n\nfunction normalizeMaxExecutionsPerRun(value: unknown): number | null {\n if (value === null || value === undefined || value === \"\") return null;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return null;\n const normalized = Math.trunc(parsed);\n return normalized >= 0 ? normalized : null;\n}\n\nfunction countSuccessfulToolExecutions(toolHistory: SmartState[\"toolHistory\"], toolName: string): number {\n if (!Array.isArray(toolHistory)) return 0;\n return toolHistory.filter((entry) => entry?.toolName === toolName && (entry?.status === \"success\" || entry?.status === \"handoff\")).length;\n}\n\nfunction normalizeToolCall(call: any): { id?: string; name: string; args: any } | null {\n if (!call || typeof call !== \"object\") return null;\n\n const name = call.name ?? call.tool ?? call.function?.name ?? call.function_call?.name;\n if (typeof name !== \"string\" || name.length === 0) return null;\n\n return {\n id: call.id,\n name,\n args: call.args ?? call.arguments ?? call.input ?? call.function?.arguments ?? call.function_call?.arguments,\n };\n}\n\nfunction normalizeToolSchema(tool: ToolInterface, toolName: string): any {\n const schema = (tool as any).schema;\n if (!schema) return undefined;\n\n if (typeof schema === \"object\" && (schema as any)._def) {\n try {\n return sanitizeTracePayload((zodToJsonSchema as any)(schema, { name: toolName }));\n } catch {\n // Fall through to generic serialization.\n }\n }\n\n if (schema && typeof schema === \"object\" && typeof (schema as any).toJSON === \"function\") {\n try {\n return sanitizeTracePayload((schema as any).toJSON());\n } catch {\n // Fall through to generic serialization.\n }\n }\n\n return sanitizeTracePayload(schema);\n}\n\nfunction buildToolDetails(tool: ToolInterface | undefined, toolName: string): TraceToolDetails | undefined {\n if (!tool) return undefined;\n const details: TraceToolDetails = { name: toolName };\n if (typeof (tool as any).description === \"string\" && (tool as any).description.trim().length > 0) {\n details.description = (tool as any).description;\n }\n\n const inputSchema = normalizeToolSchema(tool, toolName);\n if (inputSchema !== undefined) details.inputSchema = inputSchema;\n\n const needsApproval = typeof (tool as any).needsApproval === \"boolean\" ? (tool as any).needsApproval : undefined;\n if (needsApproval !== undefined || (tool as any).approvalPrompt !== undefined || (tool as any).approvalDefaults !== undefined) {\n details.approval = {\n required: needsApproval,\n prompt: typeof (tool as any).approvalPrompt === \"string\" ? (tool as any).approvalPrompt : undefined,\n defaults: (tool as any).approvalDefaults !== undefined ? sanitizeTracePayload((tool as any).approvalDefaults) : undefined,\n };\n }\n\n const cache = (tool as any).cache;\n if (cache !== undefined) {\n details.cache = {\n enabled: Boolean(cache),\n scope: cache && typeof cache === \"object\" && typeof cache.scope === \"string\" ? cache.scope : undefined,\n ttlMs: cache && typeof cache === \"object\" && typeof cache.ttlMs === \"number\" ? cache.ttlMs : undefined,\n hasKeyFn: Boolean(cache && typeof cache === \"object\" && typeof cache.keyFn === \"function\"),\n };\n }\n\n const retry = (tool as any).retry;\n if (retry && typeof retry === \"object\") {\n details.retry = {\n maxRetries: typeof retry.maxRetries === \"number\" ? retry.maxRetries : undefined,\n backoffMs: typeof retry.backoffMs === \"number\" ? retry.backoffMs : undefined,\n circuitBreakerThreshold: typeof retry.circuitBreakerThreshold === \"number\" ? retry.circuitBreakerThreshold : undefined,\n hasShouldRetry: typeof retry.shouldRetry === \"function\",\n };\n }\n\n if ((tool as any).maxExecutionsPerRun !== undefined) {\n details.limits = { maxExecutionsPerRun: (tool as any).maxExecutionsPerRun };\n }\n\n if (typeof (tool as any).__source === \"string\") {\n details.source = (tool as any).__source;\n }\n\n return details;\n}\n\nfunction buildToolTraceSections(params: {\n args?: any;\n classification?: any;\n durationMs?: number;\n executionId?: string;\n output?: any;\n retentionPolicy?: any;\n status: \"success\" | \"error\" | \"skipped\" | \"cached\" | string;\n summary?: string;\n toolDetails?: TraceToolDetails;\n toolName: string;\n fromCache?: boolean;\n}): TraceDataSection[] {\n const sanitizedArgs = sanitizeTracePayload(params.args ?? {});\n const sanitizedOutput = sanitizeTracePayload(params.output);\n const summary = params.summary ?? summarizeToolOutput(sanitizedOutput);\n const items = extractToolItems(sanitizedOutput);\n\n return [\n {\n kind: \"tool_call\",\n label: `Tool Call: ${params.toolName}`,\n tool: params.toolName,\n arguments: sanitizedArgs,\n toolDetails: params.toolDetails,\n },\n {\n kind: \"tool_result\",\n label: `Tool Result: ${params.toolName}`,\n tool: params.toolName,\n summary,\n items,\n output: sanitizedOutput,\n toolDetails: params.toolDetails,\n execution: {\n id: params.executionId,\n status: params.status,\n durationMs: params.durationMs,\n fromCache: params.fromCache,\n },\n classification: params.classification,\n retentionPolicy: params.retentionPolicy,\n },\n ];\n}\n\nexport function createToolsNode(initialTools: Array<ToolInterface<any, any, any>>, opts?: SmartAgentOptions) {\n return async (state: SmartState): Promise<any> => {\n const runtime = state.agent || {\n name: opts?.name,\n model: opts?.model,\n tools: initialTools,\n limits: opts?.limits,\n systemPrompt: opts?.systemPrompt,\n todoListPrompt: opts?.todoListPrompt,\n useTodoList: opts?.useTodoList,\n outputSchema: (opts as any)?.outputSchema,\n } as AgentRuntimeConfig;\n const resolved = getResolvedSmartConfig(opts || ({} as SmartAgentOptions), runtime as any);\n const activeTools: Array<ToolInterface<any, any, any>> = runtime.tools as any;\n const toolByName = new Map<string, ToolInterface>();\n for (const tool of activeTools) toolByName.set((tool as any).name, tool);\n\n const limits = {\n maxToolCalls: (runtime.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number,\n maxParallelTools: Math.max(1, (runtime.limits?.maxParallelTools ?? resolved.limits.maxParallelTools ?? 1) as number),\n };\n const appended: Message[] = [];\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n const pendingApprovals: PendingToolApproval[] = Array.isArray(state.pendingApprovals)\n ? state.pendingApprovals.map((entry) => ({ ...entry }))\n : [];\n const pendingByCallId = new Map(pendingApprovals.map((entry) => [entry.toolCallId, entry]));\n const pendingUserQuestions: PendingUserQuestion[] = Array.isArray(state.pendingUserQuestions)\n ? state.pendingUserQuestions.map((entry) => ({ ...entry }))\n : [];\n let awaitingApproval = false;\n let awaitingUserQuestion = false;\n\n for (const tool of toolByName.values()) {\n const anyTool: any = tool as any;\n if (anyTool._stateRef && typeof anyTool._stateRef === \"object\") {\n anyTool._stateRef.toolHistory = state.toolHistory;\n anyTool._stateRef.toolHistoryArchived = state.toolHistoryArchived;\n anyTool._stateRef.pendingApprovals = pendingApprovals;\n anyTool._stateRef.pendingUserQuestions = pendingUserQuestions;\n anyTool._stateRef.messages = state.messages;\n anyTool._stateRef.ctx = state.ctx || (state.ctx = {});\n anyTool._stateRef.__onEvent = onEvent;\n // Expose parent runtime to delegation-aware tools (asTool sub-agents).\n anyTool._stateRef.parentRuntime = runtime;\n }\n }\n\n const last = state.messages[state.messages.length - 1] as any;\n let toolCount = state.toolCallCount || 0;\n const toolCalls: Array<{ id?: string; name: string; args: any }> = Array.isArray(last?.tool_calls)\n ? last.tool_calls\n .map((toolCall: any) => normalizeToolCall(toolCall))\n .filter((toolCall: { id?: string; name: string; args: any } | null): toolCall is { id?: string; name: string; args: any } => toolCall !== null)\n : [];\n const toolHistory = state.toolHistory || [];\n const toolHistoryArchived = state.toolHistoryArchived || [];\n const remaining = Math.max(0, limits.maxToolCalls - toolCount);\n const planned = toolCalls.slice(0, remaining);\n const skipped = toolCalls.slice(remaining);\n // Per-tool slot used to preserve append order across parallel execution.\n // Bedrock / Anthropic adapters expect tool_result blocks in the same order\n // as tool_use blocks in the assistant turn; we honor that by writing each\n // call's output messages to its planned index and flattening at the end.\n const orderedSlots: Message[][] = planned.map(() => []);\n\n type ToolExecutionResult =\n | { status: \"success\" | \"error\"; approval?: PendingToolApproval }\n | { status: \"awaiting_approval\" | \"rejected\"; approval: PendingToolApproval }\n | { status: \"awaiting_user_question\"; userQuestion: PendingUserQuestion };\n\n const isCancelled = () => {\n if (abortSignal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (cancellationToken && cancellationToken.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const markToolFailure = (message: string, toolName: string, toolCallId?: string) => {\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__lastToolError = message;\n if (toolCallId) {\n ctx.__toolSchemaError = { toolName, toolCallId, message };\n }\n if (resolved.planning.replanPolicy === \"on_failure\") {\n ctx.__planNeedsReplan = true;\n }\n state.ctx = ctx;\n };\n\n // Each runOne writes its tool/result messages to the provided slot. We\n // keep `appended` as the canonical accumulator but slots let parallel\n // execution preserve the deterministic planned order.\n const runOne = async (\n tc: { id?: string; name: string; args: any },\n slot: Message[] = appended,\n ): Promise<ToolExecutionResult> => {\n const push = (msg: Message) => slot.push(msg);\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n return { status: \"error\" };\n }\n\n const tool = toolByName.get(tc.name);\n if (!tool) {\n push({ role: \"tool\", content: `Tool not found: ${tc.name}`, tool_call_id: tc.id || `${tc.name}_unknown`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args: tc.args, error: { message: \"Tool not found\" } });\n toolCount += 1;\n return { status: \"error\" };\n }\n\n let args: any = tc.args;\n if (typeof args === \"string\") {\n try { args = JSON.parse(args); } catch { /* keep raw string */ }\n }\n\n const toolCallId = tc.id || `${tc.name}_${toolCount + 1}`;\n const validatedArgs = validateToolArgs(tool, args);\n if (!validatedArgs.ok && resolved.toolResponses.schemaValidation === \"strict\") {\n const errorMessage = `Tool argument validation failed for ${tc.name}: ${validatedArgs.message}`;\n push({ role: \"tool\", content: errorMessage, tool_call_id: toolCallId, name: tc.name });\n markToolFailure(errorMessage, tc.name, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args, error: { message: errorMessage } });\n toolCount += 1;\n return { status: \"error\" };\n }\n if (validatedArgs.ok) {\n args = validatedArgs.value;\n }\n\n const toolName = (tool as any).name || tc.name;\n const toolDetails = buildToolDetails(tool, toolName);\n const toolStateRef = (tool as any)._stateRef && typeof (tool as any)._stateRef === \"object\"\n ? (tool as any)._stateRef as Record<string, any>\n : null;\n\n if (toolStateRef) {\n toolStateRef.pendingApprovals = pendingApprovals;\n toolStateRef.pendingUserQuestions = pendingUserQuestions;\n toolStateRef.ctx = state.ctx || (state.ctx = {});\n toolStateRef.__currentToolCallId = toolCallId;\n delete toolStateRef.__awaitingApproval;\n }\n\n const maxExecutionsPerRun = normalizeMaxExecutionsPerRun((tool as any).maxExecutionsPerRun);\n if (maxExecutionsPerRun !== null) {\n const currentExecutions = countSuccessfulToolExecutions(toolHistory, toolName);\n if (currentExecutions >= maxExecutionsPerRun) {\n const limitMessage = `Skipped tool due to per-tool execution limit: ${toolName} (${maxExecutionsPerRun}/run)`;\n push({ role: \"tool\", content: limitMessage, tool_call_id: toolCallId, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: toolName, id: tc.id, args });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"skipped\",\n toolDetails,\n toolExecutionId: tc.id,\n sections: buildToolTraceSections({\n args,\n executionId: tc.id,\n output: limitMessage,\n status: \"skipped\",\n summary: limitMessage,\n toolDetails,\n toolName,\n }),\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n }\n\n let approvalEntry = pendingByCallId.get(toolCallId);\n const needsApproval = Boolean((tool as any).needsApproval);\n if (needsApproval) {\n if (!approvalEntry) {\n approvalEntry = {\n id: nanoid(),\n toolCallId,\n toolName: (tool as any).name || tc.name,\n args,\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n metadata: (tool as any).approvalPrompt || (tool as any).approvalDefaults\n ? { prompt: (tool as any).approvalPrompt, defaults: (tool as any).approvalDefaults }\n : undefined,\n };\n pendingApprovals.push(approvalEntry);\n pendingByCallId.set(toolCallId, approvalEntry);\n onEvent?.({ type: \"tool_approval\", status: \"pending\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, args });\n } else if (!approvalEntry.args) {\n approvalEntry.args = args;\n }\n\n if (approvalEntry.status === \"pending\") {\n awaitingApproval = true;\n const ctx = (state.ctx = state.ctx || {});\n ctx.__awaitingApproval = {\n approvalId: approvalEntry.id,\n toolCallId: approvalEntry.toolCallId,\n toolName: approvalEntry.toolName,\n requestedAt: approvalEntry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n return { status: \"awaiting_approval\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"rejected\") {\n const rejectionMessage = approvalEntry.comment || \"Tool call rejected by reviewer.\";\n push({ role: \"tool\", content: `Tool call rejected: ${rejectionMessage}`, tool_call_id: toolCallId, name: tc.name });\n approvalEntry.metadata = { ...(approvalEntry.metadata || {}), resolution: \"rejected\" };\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n pendingByCallId.set(toolCallId, approvalEntry);\n toolHistory.push({ executionId: nanoid(), toolName: (tool as any).name, args, output: `Rejected: ${rejectionMessage}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"rejected\" });\n onEvent?.({ type: \"tool_approval\", status: \"rejected\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, comment: approvalEntry.comment, decidedBy: approvalEntry.decidedBy });\n toolCount += 1;\n return { status: \"rejected\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"approved\" && approvalEntry.approvedArgs !== undefined) {\n args = approvalEntry.approvedArgs;\n onEvent?.({ type: \"tool_approval\", status: \"approved\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, decidedBy: approvalEntry.decidedBy, comment: approvalEntry.comment });\n }\n }\n\n const start = Date.now();\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n\n // ── Tool result cache (opt-in via `cache: true` on the tool) ──────────\n const cacheCfg = (tool as any).cache;\n const cacheEnabled = cacheCfg === true || (cacheCfg && typeof cacheCfg === \"object\");\n const cacheKeyFn: ((a: any) => string) | undefined = cacheEnabled && typeof cacheCfg === \"object\" ? cacheCfg.keyFn : undefined;\n const stableJson = (value: any): string => {\n try {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(stableJson).join(\",\")}]`;\n const keys = Object.keys(value).sort();\n return `{${keys.map((k) => JSON.stringify(k) + \":\" + stableJson(value[k])).join(\",\")}}`;\n } catch {\n return String(value);\n }\n };\n const cacheKey = cacheEnabled ? `${toolName}|${cacheKeyFn ? cacheKeyFn(args) : stableJson(args)}` : undefined;\n const toolCache = (state.toolCache = state.toolCache || {});\n let cachedHit: any = undefined;\n if (cacheKey && Object.prototype.hasOwnProperty.call(toolCache, cacheKey)) {\n const entry = toolCache[cacheKey];\n const ttl = cacheEnabled && typeof cacheCfg === \"object\" ? cacheCfg.ttlMs : undefined;\n if (!ttl || (entry?.timestamp && Date.now() - entry.timestamp <= ttl)) {\n cachedHit = entry?.value;\n }\n }\n\n // ── Circuit breaker (consecutive failure cap per tool) ────────────────\n const retryCfg = (tool as any).retry;\n const failureStats = (state.ctx as any).__toolFailureCounts ||= {} as Record<string, number>;\n if (retryCfg?.circuitBreakerThreshold && failureStats[toolName] >= retryCfg.circuitBreakerThreshold) {\n const breakerMsg = `Tool ${toolName} circuit breaker open after ${failureStats[toolName]} consecutive failures`;\n push({ role: \"tool\", content: breakerMsg, tool_call_id: toolCallId, name: tc.name });\n markToolFailure(breakerMsg, toolName, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: toolName, id: tc.id, args, error: { message: breakerMsg } });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n requestBytes: inputBytes,\n toolDetails,\n toolExecutionId: toolCallId,\n error: { message: breakerMsg },\n sections: buildToolTraceSections({\n args,\n executionId: toolCallId,\n output: { message: breakerMsg },\n status: \"error\",\n summary: breakerMsg,\n toolDetails,\n toolName,\n }),\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n\n try {\n if (cachedHit !== undefined) {\n // Short-circuit: serve from cache without re-invoking the tool.\n const executionId = nanoid();\n const responsePolicy = applyToolResponseHardCap(toolName, cachedHit, executionId, resolved);\n toolHistory.push({\n executionId,\n toolName,\n args,\n output: cachedHit,\n rawOutput: cachedHit,\n timestamp: new Date().toISOString(),\n tool_call_id: tc.id,\n summarized: false,\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n fromCache: true,\n status: \"success\",\n });\n push({ role: \"tool\", content: responsePolicy.content, tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: cachedHit, durationMs: 0 });\n const sanitizedCachedHit = sanitizeTracePayload(cachedHit);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedCachedHit) : undefined;\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs: 0,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolDetails,\n toolExecutionId: executionId,\n sections: buildToolTraceSections({\n args,\n classification: responsePolicy.classification,\n durationMs: 0,\n executionId,\n fromCache: true,\n output: sanitizedCachedHit,\n retentionPolicy: \"keep_full\",\n status: \"cached\",\n summary: responsePolicy.content,\n toolDetails,\n toolName,\n }),\n debug: {\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n originalTokenCount: responsePolicy.tokenCount,\n truncated: responsePolicy.truncated,\n fromCache: true,\n },\n });\n toolCount += 1;\n return { status: \"success\" };\n }\n onEvent?.({ type: \"tool_call\", phase: \"start\", name: toolName, id: tc.id, args });\n onProgress?.({ stage: \"tools\", message: `Running tool ${tc.name}` });\n const anyTool = tool as any;\n const callOptions = { cancellationToken, signal: abortSignal };\n const invokeOnce = async (): Promise<any> => {\n if (typeof anyTool.func === \"function\") return anyTool.func(args, callOptions);\n if (typeof anyTool.invoke === \"function\") return anyTool.invoke(args, callOptions);\n if (typeof anyTool.call === \"function\") return anyTool.call(args, callOptions);\n if (typeof anyTool._call === \"function\") return anyTool._call(args, callOptions);\n if (typeof anyTool.run === \"function\") return anyTool.run(args, callOptions);\n throw new Error(\"Tool is not invokable\");\n };\n\n let output: any;\n const maxRetries = Math.max(0, Number(retryCfg?.maxRetries) || 0);\n const backoffMs = Math.max(0, Number(retryCfg?.backoffMs) || 250);\n let attempt = 0;\n // First attempt + up to maxRetries retries with exponential backoff.\n // shouldRetry can short-circuit retries for non-transient errors.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n output = await invokeOnce();\n failureStats[toolName] = 0;\n break;\n } catch (retryErr) {\n attempt += 1;\n const shouldRetry = retryCfg?.shouldRetry\n ? retryCfg.shouldRetry(retryErr, attempt)\n : true;\n if (attempt > maxRetries || !shouldRetry) {\n failureStats[toolName] = (failureStats[toolName] || 0) + 1;\n throw retryErr;\n }\n await new Promise((r) => setTimeout(r, backoffMs * Math.pow(2, attempt - 1)));\n }\n }\n\n if (cacheKey) {\n toolCache[cacheKey] = { value: output, timestamp: Date.now() };\n }\n\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n\n // Progressive disclosure: a tool may inject additional runtime tools\n // (e.g. open_skill / bind_skill_tools) so later model turns in THIS same\n // loop can call them. Unlike __handoff this does not replace the agent or\n // return early — it appends to the live tool set and falls through to the\n // normal tool-result push (the marker is stripped before serialization).\n if (output && typeof output === \"object\" && Array.isArray((output as any).__runtimeToolsDelta)) {\n const delta = (output as any).__runtimeToolsDelta as Array<{ name?: string }>;\n delete (output as any).__runtimeToolsDelta;\n const currentRuntime: any = state.agent || runtime;\n const currentTools: any[] = (currentRuntime?.tools as any[]) ?? [];\n const present = new Set(currentTools.map((tool) => tool?.name));\n const additions = delta.filter((tool) => tool && (tool as any).name && !present.has((tool as any).name));\n if (additions.length > 0 && currentRuntime) {\n state.agent = { ...currentRuntime, tools: [...currentTools, ...additions] };\n }\n }\n\n if (output && typeof output === \"object\" && output.__handoff && output.__handoff.runtime) {\n toolHistory.push({ executionId, toolName, args, output: \"handoff:ok\", rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"handoff\" });\n push({ role: \"tool\", content: \"ok\", tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n state.agent = output.__handoff.runtime as AgentRuntimeConfig;\n onEvent?.({ type: \"handoff\", from: runtime.name, to: state.agent?.name, toolName });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: \"handoff\", durationMs });\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n }\n\n if (output && typeof output === \"object\" && (output as any).__awaitingToolApproval) {\n if (toolStateRef?.ctx && typeof toolStateRef.ctx === \"object\") {\n state.ctx = toolStateRef.ctx;\n }\n\n const pendingApproval = pendingApprovals.find((entry) =>\n entry.toolCallId === (output as any).toolCallId || entry.id === (output as any).approvalId\n );\n\n if (!pendingApproval) {\n throw new Error(`Tool ${toolName} requested approval but no pending approval entry was recorded.`);\n }\n\n awaitingApproval = true;\n return {\n status: \"awaiting_approval\",\n approval: pendingApproval\n };\n }\n\n if (output && typeof output === \"object\" && (output as any).__awaitingUserQuestion) {\n if (toolStateRef?.ctx && typeof toolStateRef.ctx === \"object\") {\n state.ctx = toolStateRef.ctx;\n }\n\n const pendingQuestion = pendingUserQuestions.find((entry) =>\n entry.toolCallId === (output as any).toolCallId || entry.id === (output as any).id\n );\n\n if (!pendingQuestion) {\n throw new Error(`Tool ${toolName} requested a user question but no pending question entry was recorded.`);\n }\n\n awaitingUserQuestion = true;\n return {\n status: \"awaiting_user_question\",\n userQuestion: pendingQuestion,\n };\n }\n\n if (output && typeof output === \"object\" && output.__finalStructuredOutput) {\n if (!state.ctx) state.ctx = {};\n state.ctx.__structuredOutputParsed = output.data;\n state.ctx.__finalizedDueToStructuredOutput = true;\n }\n\n const responsePolicy = applyToolResponseHardCap(toolName, output, executionId, resolved);\n const timestamp = new Date().toISOString();\n\n toolHistory.push({\n executionId,\n toolName,\n args,\n output,\n rawOutput: output,\n timestamp,\n tool_call_id: tc.id,\n summarized: false,\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n summary: undefined,\n archiveId: undefined,\n status: \"success\",\n });\n\n push({ role: \"tool\", content: responsePolicy.content, tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: output, durationMs });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} completed`, detail: { durationMs } });\n\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n\n const sanitizedOutput = sanitizeTracePayload(output);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedOutput) : undefined;\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolDetails,\n toolExecutionId: executionId,\n sections: buildToolTraceSections({\n args: sanitizedArgs,\n classification: responsePolicy.classification,\n durationMs,\n executionId,\n output: sanitizedOutput,\n retentionPolicy: \"keep_full\",\n status: \"success\",\n summary: responsePolicy.content,\n toolDetails,\n toolName,\n }),\n debug: {\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n originalTokenCount: responsePolicy.tokenCount,\n truncated: responsePolicy.truncated,\n },\n });\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n } catch (error: any) {\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n const message = error?.message || String(error);\n toolHistory.push({ executionId, toolName, args, output: `Error executing tool: ${message}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"error\" });\n push({ role: \"tool\", content: `Error executing tool: ${message}`, tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n markToolFailure(message, toolName, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: toolName, id: tc.id, args, error: { message } });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} failed`, detail: { error: message } });\n const errorOutput = { message, stack: error?.stack };\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n durationMs,\n requestBytes: inputBytes,\n responseBytes: traceSession?.resolvedConfig.logData ? estimatePayloadBytes(errorOutput) : undefined,\n toolDetails,\n toolExecutionId: executionId,\n error: { message, stack: error?.stack },\n sections: buildToolTraceSections({\n args: sanitizedArgs,\n durationMs,\n executionId,\n output: errorOutput,\n status: \"error\",\n summary: `Error executing tool: ${message}`,\n toolDetails,\n toolName,\n }),\n });\n toolCount += 1;\n return { status: \"error\", approval: approvalEntry };\n }\n };\n\n // Split into two index groups: tools that need human approval must run\n // sequentially (the first pending one short-circuits the turn), tools that\n // do not need approval can be fanned out up to `maxParallelTools`.\n const approvalIndices: number[] = [];\n const parallelIndices: number[] = [];\n planned.forEach((tc, idx) => {\n const t = toolByName.get(tc.name);\n if (t && (t as any).needsApproval) approvalIndices.push(idx);\n else parallelIndices.push(idx);\n });\n\n let shouldStop = false;\n const checkCancellationStop = () => {\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n shouldStop = true;\n return true;\n }\n return false;\n };\n\n // Approval-requiring tools: sequential so the first pending approval can\n // break the turn deterministically.\n for (const idx of approvalIndices) {\n if (awaitingApproval || awaitingUserQuestion || shouldStop) break;\n if (checkCancellationStop()) break;\n const result = await runOne(planned[idx], orderedSlots[idx]);\n if (result.status === \"awaiting_approval\") {\n awaitingApproval = true;\n break;\n }\n if (result.status === \"awaiting_user_question\") {\n awaitingUserQuestion = true;\n break;\n }\n }\n\n // Fan out non-approval tools with bounded concurrency.\n if (!awaitingApproval && !awaitingUserQuestion && !shouldStop && parallelIndices.length > 0) {\n const concurrency = Math.max(1, Math.min(limits.maxParallelTools, parallelIndices.length));\n let cursor = 0;\n const workerError: { err?: unknown } = {};\n const workers: Promise<void>[] = [];\n for (let w = 0; w < concurrency; w++) {\n workers.push((async () => {\n while (true) {\n if (workerError.err || shouldStop || awaitingApproval || awaitingUserQuestion) return;\n const i = cursor++;\n if (i >= parallelIndices.length) return;\n if (checkCancellationStop()) return;\n const idx = parallelIndices[i];\n try {\n const result = await runOne(planned[idx], orderedSlots[idx]);\n if (result.status === \"awaiting_approval\") {\n awaitingApproval = true;\n return;\n }\n if (result.status === \"awaiting_user_question\") {\n awaitingUserQuestion = true;\n return;\n }\n } catch (err) {\n workerError.err = err;\n return;\n }\n }\n })());\n }\n await Promise.all(workers);\n if (workerError.err) throw workerError.err;\n }\n\n // Flatten per-planned-index slots into the canonical appended order so\n // tool_result blocks line up with the assistant turn's tool_use order.\n for (const slot of orderedSlots) {\n if (slot.length > 0) appended.push(...slot);\n }\n\n for (const tc of skipped) {\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: tc.name, id: tc.id, args: tc.args });\n const toolDetails = buildToolDetails(toolByName.get(tc.name), tc.name);\n const skipMessage = `Skipped tool due to tool-call limit: ${tc.name}`;\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${tc.name}`,\n actor: { scope: \"tool\", name: tc.name, role: \"tool\" },\n status: \"skipped\",\n toolDetails,\n toolExecutionId: tc.id,\n sections: buildToolTraceSections({\n args: tc.args,\n executionId: tc.id,\n output: skipMessage,\n status: \"skipped\",\n summary: skipMessage,\n toolDetails,\n toolName: tc.name,\n }),\n });\n appended.push({ role: \"tool\", content: skipMessage, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n toolCount += 1;\n }\n\n if (!awaitingApproval && state.ctx?.__awaitingApproval) {\n const ctx = { ...state.ctx };\n delete ctx.__awaitingApproval;\n if (!pendingApprovals.some((entry) => entry.status !== \"executed\")) {\n delete ctx.__resumeStage;\n }\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n // New tool results invalidate any prior \"summarizer had nothing to\n // compress\" verdict — fresh raw payloads are now in scope. Without this,\n // a previously-exhausted summarization run would silently suppress\n // legitimate compaction on subsequent turns.\n const appendedHasToolResult = appended.some((m) => m.role === \"tool\");\n if (appendedHasToolResult && state.ctx?.__summarizationExhausted) {\n const ctx = { ...state.ctx };\n delete ctx.__summarizationExhausted;\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n return {\n messages: [...state.messages, ...appended],\n toolCallCount: toolCount,\n toolHistory,\n toolHistoryArchived,\n toolCache: state.toolCache,\n // Explicitly propagate ctx so callers using `{ ...state, ...delta }`\n // do not silently capture a stale ctx reference. Mutations to\n // __summarizationExhausted / __awaitingApproval / __awaitingUserQuestion /\n // __structuredOutputParsed are made on this object during execution.\n ctx: state.ctx,\n agent: state.agent,\n pendingApprovals,\n pendingUserQuestions,\n };\n };\n}\n","import type { SmartAgentOptions, SmartState } from \"../types.js\";\n\n// This node is reached when tool-call limit is hit. It appends a short instruction\n// telling the agent to produce an answer with the current information and avoid further tools.\n// Note: Using 'user' role since 'system' messages cannot appear in the middle of a conversation for OpenAI API.\nexport function createToolLimitFinalizeNode(_opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const notice = { role: 'user', content: \"[System Notice] Tool-call limit reached. Produce the best possible final answer using the available context and prior tool outputs. Do not call any more tools.\" } as any;\n const ctx = { ...(state.ctx || {}), __finalizedDueToToolLimit: true };\n return { messages: [...state.messages, notice], ctx };\n };\n}\n","// Reflection node — produces a short textual insight after a tool turn.\n//\n// Design goals:\n// - Piggyback on the existing transcript so the provider's prompt cache is\n// reused (no re-assembly of the whole context). We simply append a\n// `role:\"user\"` \"reflect now\" message and call the model with tool_choice:\"none\".\n// - The returned assistant text is **NOT** committed back as a real assistant\n// turn — it is captured in `state.reflections` and mirrored into the prompt\n// as a `role:\"system\"` \"agent_reflection\" message so the main model can see\n// the last few reflections without polluting the actual tool/assistant chain.\n// - Summarization respects `reflection.summarize`: when false (default) these\n// system messages are skipped by the summarizer and kept verbatim.\n\nimport type { SmartState, SmartAgentOptions, SmartAgentEvent, ReflectionRecord, ReflectionCadence } from \"../types.js\";\nimport type { ResolvedReflectionConfig } from \"../smart/reasoning.js\";\nimport { randomUUID } from \"node:crypto\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent } from \"../utils/tracing.js\";\n\nconst REFLECTION_SYSTEM_NAME = \"agent_reflection\";\nconst REFLECTION_ASK_NAME = \"agent_reflection_ask\";\n\nconst DEFAULT_REFLECT_PROMPT =\n`Reflect briefly — plain text, no JSON, no tool calls.\nStructure your note (1–2 sentences each):\n1) What the latest tool results actually tell us (facts, surprises).\n2) What is still missing or uncertain before we can finish the user's task.\n3) The single next step you plan to take, and why that step over alternatives.\nBe concrete. Do not repeat the task description. Do not apologize. Max ${\"${maxChars}\"} characters total.`;\n\nfunction trimToChars(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text;\n return text.slice(0, maxChars - 1).trimEnd() + \"…\";\n}\n\nfunction countToolCallsInLastTurn(state: SmartState): { ids: string[]; names: string[] } {\n const ids: string[] = [];\n const names: string[] = [];\n for (let i = state.messages.length - 1; i >= 0; i--) {\n const m: any = state.messages[i];\n if (m?.role === \"tool\") {\n if (m.tool_call_id) ids.push(m.tool_call_id);\n if (m.name) names.push(m.name);\n } else if (m?.role === \"assistant\") {\n // Reached the assistant turn that produced these tool results — stop.\n break;\n }\n }\n return { ids, names };\n}\n\nfunction stripReflectionAskMessages(messages: any[]): any[] {\n return messages.filter((m) => !(m?.role === \"user\" && m?.name === REFLECTION_ASK_NAME));\n}\n\n/**\n * Returns the tool-name sets for the two most recent tool-producing turns\n * (newest first). Used by the `on_branch` cadence to detect when the agent\n * switched the *kind* of tools it is using (a genuine branch in strategy).\n */\nfunction lastTwoToolTurns(state: SmartState): { current: string[]; previous: string[] } {\n const groups: string[][] = [];\n let cur: string[] = [];\n let sawTool = false;\n for (let i = state.messages.length - 1; i >= 0; i--) {\n const m: any = state.messages[i];\n if (m?.role === \"tool\") {\n if (m.name) cur.push(m.name);\n sawTool = true;\n } else if (m?.role === \"assistant\") {\n if (sawTool) {\n groups.push(cur);\n cur = [];\n sawTool = false;\n if (groups.length >= 2) break;\n }\n }\n }\n if (sawTool && cur.length) groups.push(cur);\n return { current: groups[0] ?? [], previous: groups[1] ?? [] };\n}\n\nexport function shouldRunReflection(\n cadence: ReflectionCadence,\n state: SmartState,\n ranToolsThisTurn: boolean,\n): boolean {\n if (cadence === \"off\") return false;\n if (cadence === \"every_turn\") return true;\n if (cadence === \"after_tool\") return ranToolsThisTurn;\n // The \"initial\" half of this cadence fires once before the loop (handled in\n // the agent core); inside the loop it behaves exactly like \"after_tool\".\n if (cadence === \"initial_then_after_tool\") return ranToolsThisTurn;\n if (cadence === \"on_branch\") {\n // Fire when this turn's tool-name set differs from the previous tool turn's\n // set — i.e. the agent changed which tools it is leaning on (a real branch),\n // not merely how many times it has called tools.\n if (!ranToolsThisTurn) return false;\n const { current, previous } = lastTwoToolTurns(state);\n if (previous.length === 0) return true; // first tool turn is itself a branch\n const a = new Set(current);\n const b = new Set(previous);\n for (const n of a) if (!b.has(n)) return true;\n for (const n of b) if (!a.has(n)) return true;\n return false;\n }\n return false;\n}\n\nexport function createReflectionNode(opts: SmartAgentOptions, resolved: ResolvedReflectionConfig) {\n return async function reflectNode(\n state: SmartState,\n trigger: ReflectionCadence,\n ): Promise<Partial<SmartState>> {\n if (!resolved.enabled) return {};\n\n const runtime = (state as any).agent || {\n model: (opts as any).model,\n name: opts.name,\n version: opts.version,\n };\n const model: any = runtime.model;\n if (!model?.invoke && !model?.stream) return {};\n\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n\n const maxChars = resolved.maxChars;\n const turnNow = state.toolCallCount ?? 0;\n const hookCtx = { state, turn: turnNow, trigger, ranToolsThisTurn: true };\n const defaultPrompt = (resolved.promptTemplate || DEFAULT_REFLECT_PROMPT).replace(/\\$\\{maxChars\\}/g, String(maxChars));\n const promptBody = resolved.buildPrompt\n ? String(resolved.buildPrompt({ ...hookCtx, defaultPrompt, maxChars }) ?? defaultPrompt)\n : defaultPrompt;\n\n // Piggyback: append ask as user message on top of the existing transcript.\n // This maximises the provider prompt-cache hit rate vs. building a new one.\n const baseMessages = stripReflectionAskMessages([...(state.messages as any[])]);\n const askMessage: any = {\n role: \"user\",\n name: REFLECTION_ASK_NAME,\n content: promptBody,\n };\n const messagesForCall =\n resolved.mode === \"piggyback\" ? [...baseMessages, askMessage]\n : buildSeparateCallMessages(baseMessages, promptBody);\n\n const start = Date.now();\n let response: any;\n try {\n response = await model.invoke(messagesForCall, {\n // tool_choice:\"none\" so the model won't try to call tools during reflection\n tool_choice: \"none\",\n toolChoice: \"none\",\n // Override max_tokens for the reflection call. BaseChatModel passes this through\n // to the adapter which forwards into the provider body.\n max_tokens: resolved.maxTokens,\n maxTokens: resolved.maxTokens,\n });\n } catch (err: any) {\n recordTraceEvent(traceSession, {\n type: \"reflection\" as any,\n label: \"Reflection error\",\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"reflection\" },\n status: \"error\",\n error: { message: err?.message || String(err) },\n });\n return {};\n }\n\n const durationMs = Date.now() - start;\n const rawText = extractText(response);\n const text = trimToChars(String(rawText ?? \"\").trim(), maxChars);\n if (!text) return {};\n\n // IMP-4: skip near-identical consecutive reflections so the prompt does not\n // accumulate restated insights that waste tokens and add no signal.\n const prevText = (state.reflections?.[state.reflections.length - 1]?.text || \"\").trim();\n if (prevText && isNearDuplicate(prevText, text)) return {};\n\n const rawUsage = (response as any)?.usage_metadata\n || (response as any)?.response_metadata?.usage\n || (response as any)?.usage\n || (response as any)?.additional_kwargs?.usage;\n const usage = normalizeUsage(rawUsage);\n const { ids, names } = countToolCallsInLastTurn(state);\n const turn = (state.toolCallCount ?? 0);\n const record: ReflectionRecord = {\n id: safeRandomId(),\n turn,\n text,\n createdAt: new Date().toISOString(),\n durationMs,\n anchorMessageIndex: state.messages.length,\n trigger,\n usage: usage ? {\n inputTokens: usage.prompt_tokens,\n outputTokens: usage.completion_tokens,\n cachedInputTokens: usage.prompt_tokens_details?.cached_tokens,\n totalTokens: usage.total_tokens,\n reasoningTokens: usage.completion_tokens_details?.reasoning_tokens,\n } : undefined,\n toolCallIds: ids.length > 0 ? ids : undefined,\n };\n\n recordTraceEvent(traceSession, {\n type: \"reflection\" as any,\n label: `Reflection turn ${turn}`,\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"reflection\" },\n status: \"success\",\n durationMs,\n inputTokens: record.usage?.inputTokens,\n outputTokens: record.usage?.outputTokens,\n cachedInputTokens: record.usage?.cachedInputTokens,\n totalTokens: record.usage?.totalTokens,\n debug: { text, toolNames: names },\n });\n\n if (resolved.emitEvents) {\n try {\n onEvent?.({\n type: \"reflection\",\n id: record.id,\n turn,\n text,\n trigger,\n durationMs,\n usage: record.usage,\n toolCallIds: record.toolCallIds,\n });\n } catch (e) {\n // onEvent failures must never break the loop\n }\n }\n\n // Side-effect hook (never allowed to break the loop).\n if (resolved.onReflection) {\n try {\n resolved.onReflection(record, hookCtx);\n } catch {\n // swallow\n }\n }\n\n // Rebuild the live message list. The reflection ask is a transient probe and\n // the model's reply is never committed as a real assistant turn — it lives in\n // `state.reflections`. Here we (1) drop any prior ask message and (2) mirror\n // the most recent reflections as compact `system` \"agent_reflection\" messages\n // so the main model can see them next turn without them joining the\n // tool_calls chain.\n const nextMessages = stripReflectionAskMessages([...(state.messages as any[])]);\n const reflections = [...(state.reflections || []), record];\n\n // Keep only last N reflections as live system messages; older ones stay in\n // `state.reflections` for persistence/UI but are pruned from the prompt.\n const kept = reflections.slice(-Math.max(1, resolved.keepLast));\n const prunedMessages = nextMessages.filter(\n (m: any) => !(m?.role === \"system\" && m?.name === REFLECTION_SYSTEM_NAME),\n );\n for (const r of kept) {\n prunedMessages.push({\n role: \"system\",\n name: REFLECTION_SYSTEM_NAME,\n content: `<agent_reflection turn=${r.turn} at=${r.createdAt}>\\n${r.text}\\n</agent_reflection>`,\n metadata: { reflectionId: r.id, reflectionTurn: r.turn, reflectionTrigger: r.trigger },\n });\n }\n\n const patch: Partial<SmartState> = { messages: prunedMessages, reflections };\n\n // R4: optionally route the reflection text into another store.\n if (resolved.feedTo === \"memory\") {\n const fact = {\n key: `reflection_turn_${turn}`,\n value: text,\n sourceTurn: turn,\n confidence: 0.3,\n tags: [\"reflection\"],\n };\n patch.memoryFacts = [...(state.memoryFacts || []), fact as any];\n } else if (resolved.feedTo === \"plan\" && state.plan) {\n patch.plan = { ...state.plan, lastReflection: text };\n }\n\n return patch;\n };\n}\n\nfunction extractText(chunk: any): string {\n if (chunk == null) return \"\";\n if (typeof chunk === \"string\") return chunk;\n if (typeof chunk?.content === \"string\") return chunk.content;\n if (Array.isArray(chunk?.content)) {\n return chunk.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n }\n if (typeof chunk?.text === \"string\") return chunk.text;\n return \"\";\n}\n\nfunction buildSeparateCallMessages(base: any[], promptBody: string): any[] {\n // Compact build: keep only the system prompt, last 2 user messages, and most recent\n // assistant+tool messages so the call is cheap but still grounded.\n const systemMessages = base.filter((m) => m?.role === \"system\");\n const tail = base.slice(-8);\n return [\n ...systemMessages,\n ...tail,\n { role: \"user\", name: REFLECTION_ASK_NAME, content: promptBody },\n ];\n}\n\nfunction safeRandomId(): string {\n try {\n return randomUUID();\n } catch {\n return `r_${Math.random().toString(36).slice(2, 10)}_${Date.now().toString(36)}`;\n }\n}\n\n/** Returns true when two reflection texts are effectively the same note —\n * either an exact normalized match or a very high word-overlap (Jaccard >= 0.9). */\nfunction isNearDuplicate(a: string, b: string): boolean {\n const norm = (s: string) => s.toLowerCase().replace(/\\s+/g, \" \").trim();\n const na = norm(a);\n const nb = norm(b);\n if (na === nb) return true;\n const tokensA = new Set(na.split(\" \").filter(Boolean));\n const tokensB = new Set(nb.split(\" \").filter(Boolean));\n if (tokensA.size === 0 || tokensB.size === 0) return false;\n let inter = 0;\n for (const t of tokensA) if (tokensB.has(t)) inter++;\n const union = tokensA.size + tokensB.size - inter;\n return union > 0 && inter / union >= 0.9;\n}\n\nexport { REFLECTION_SYSTEM_NAME, REFLECTION_ASK_NAME };\n","// Resolves the unified ReasoningConfig into concrete shapes consumed by the loop:\n// - native reasoning request config for the model adapter (per provider)\n// - reflection config (cadence / token budget / injection rules)\n//\n// Resolution is a pure function — defaults are applied based on `level` when\n// sub-fields are omitted. Any explicit sub-field wins.\n\nimport type {\n ReasoningConfig,\n ReasoningLevel,\n ReflectionConfig,\n ReflectionCadence,\n ReflectionHookContext,\n ReflectionRecord,\n NativeReasoningConfig,\n} from \"../types.js\";\n\nexport type ResolvedReflectionConfig = {\n enabled: boolean;\n cadence: ReflectionCadence;\n mode: \"piggyback\" | \"separate\";\n maxTokens: number;\n maxChars: number;\n keepLast: number;\n summarize: boolean;\n promptTemplate?: string;\n emitEvents: boolean;\n maxPerRun?: number;\n everyNTurns: number;\n feedTo: \"memory\" | \"plan\" | \"none\";\n shouldReflect?: (ctx: ReflectionHookContext) => boolean;\n buildPrompt?: (ctx: ReflectionHookContext & { defaultPrompt: string; maxChars: number }) => string;\n onReflection?: (record: ReflectionRecord, ctx: ReflectionHookContext) => void;\n};\n\nexport type ResolvedReasoning = {\n enabled: boolean;\n level: ReasoningLevel;\n native?: NativeReasoningConfig;\n reflection: ResolvedReflectionConfig;\n};\n\nconst LEVEL_DEFAULTS: Record<ReasoningLevel, {\n native: NativeReasoningConfig;\n reflection: Pick<ResolvedReflectionConfig, \"maxTokens\" | \"maxChars\" | \"cadence\">;\n}> = {\n minimal: {\n native: { effort: \"minimal\" },\n reflection: { maxTokens: 150, maxChars: 400, cadence: \"off\" },\n },\n low: {\n native: { effort: \"low\" },\n reflection: { maxTokens: 200, maxChars: 600, cadence: \"on_branch\" },\n },\n medium: {\n native: { effort: \"medium\" },\n reflection: { maxTokens: 350, maxChars: 1200, cadence: \"initial_then_after_tool\" },\n },\n high: {\n native: { effort: \"high\" },\n reflection: { maxTokens: 600, maxChars: 2000, cadence: \"initial_then_after_tool\" },\n },\n};\n\nconst VALID_LEVELS: ReasoningLevel[] = [\"minimal\", \"low\", \"medium\", \"high\"];\nconst VALID_CADENCES: ReflectionCadence[] = [\"off\", \"every_turn\", \"after_tool\", \"on_branch\", \"initial_then_after_tool\"];\nconst VALID_EFFORTS = [\"minimal\", \"low\", \"medium\", \"high\"];\n\n/**\n * Validates a user-supplied ReasoningConfig and throws a descriptive error for\n * obviously-wrong values. Pure; safe to call before resolveReasoning.\n */\nexport function validateReasoningConfig(input: ReasoningConfig | undefined): void {\n if (!input) return;\n if (input.level !== undefined && !VALID_LEVELS.includes(input.level)) {\n throw new Error(`reasoning.level must be one of ${VALID_LEVELS.join(\", \")} (got \"${input.level}\")`);\n }\n if (input.native) {\n const n = input.native;\n if (n.effort !== undefined && !VALID_EFFORTS.includes(n.effort)) {\n throw new Error(`reasoning.native.effort must be one of ${VALID_EFFORTS.join(\", \")} (got \"${n.effort}\")`);\n }\n if (n.budgetTokens !== undefined && (!Number.isFinite(n.budgetTokens) || n.budgetTokens < 0)) {\n throw new Error(`reasoning.native.budgetTokens must be a non-negative number (got ${n.budgetTokens})`);\n }\n }\n if (input.reflection) {\n const r = input.reflection;\n if (r.cadence !== undefined && !VALID_CADENCES.includes(r.cadence)) {\n throw new Error(`reasoning.reflection.cadence must be one of ${VALID_CADENCES.join(\", \")} (got \"${r.cadence}\")`);\n }\n if (r.maxPerRun !== undefined && (!Number.isFinite(r.maxPerRun) || r.maxPerRun < 0)) {\n throw new Error(`reasoning.reflection.maxPerRun must be a non-negative number (got ${r.maxPerRun})`);\n }\n if (r.everyNTurns !== undefined && (!Number.isFinite(r.everyNTurns) || r.everyNTurns < 1)) {\n throw new Error(`reasoning.reflection.everyNTurns must be >= 1 (got ${r.everyNTurns})`);\n }\n if (r.feedTo !== undefined && ![\"memory\", \"plan\", \"none\"].includes(r.feedTo)) {\n throw new Error(`reasoning.reflection.feedTo must be \"memory\", \"plan\", or \"none\" (got \"${r.feedTo}\")`);\n }\n }\n}\n\nexport function resolveReasoning(input: ReasoningConfig | undefined): ResolvedReasoning | undefined {\n if (!input || input.enabled === false) return undefined;\n validateReasoningConfig(input);\n const enabled = input.enabled ?? (input.native !== undefined || input.reflection !== undefined || input.level !== undefined);\n if (!enabled) return undefined;\n\n const level: ReasoningLevel = input.level ?? \"medium\";\n const presets = LEVEL_DEFAULTS[level];\n\n // --- native ---\n let native: NativeReasoningConfig | undefined;\n if (input.native === false) {\n native = undefined;\n } else {\n native = { ...presets.native, ...(input.native ?? {}) };\n }\n\n // --- reflection ---\n const reflection = resolveReflection(input.reflection, presets.reflection);\n\n return { enabled: true, level, native, reflection };\n}\n\nfunction resolveReflection(\n input: ReflectionConfig | false | undefined,\n preset: { maxTokens: number; maxChars: number; cadence: ReflectionCadence },\n): ResolvedReflectionConfig {\n if (input === false) {\n return {\n enabled: false,\n cadence: \"off\",\n mode: \"piggyback\",\n maxTokens: preset.maxTokens,\n maxChars: preset.maxChars,\n keepLast: 3,\n summarize: false,\n emitEvents: true,\n everyNTurns: 1,\n feedTo: \"none\",\n };\n }\n const cfg = input ?? {};\n const enabled = cfg.enabled ?? true;\n const cadence: ReflectionCadence = cfg.cadence ?? preset.cadence;\n return {\n enabled: enabled && cadence !== \"off\",\n cadence: enabled ? cadence : \"off\",\n mode: cfg.mode ?? \"piggyback\",\n maxTokens: cfg.maxTokens ?? preset.maxTokens,\n maxChars: cfg.maxChars ?? preset.maxChars,\n keepLast: cfg.keepLast ?? 3,\n summarize: cfg.summarize ?? false,\n promptTemplate: cfg.promptTemplate,\n emitEvents: cfg.emitEvents ?? true,\n maxPerRun: typeof cfg.maxPerRun === \"number\" && cfg.maxPerRun >= 0 ? cfg.maxPerRun : undefined,\n everyNTurns: Math.max(1, Math.trunc(cfg.everyNTurns ?? 1)),\n feedTo: cfg.feedTo ?? \"none\",\n shouldReflect: cfg.shouldReflect,\n buildPrompt: cfg.buildPrompt,\n onReflection: cfg.onReflection,\n };\n}\n","import { nanoid } from \"nanoid\";\nimport { GuardrailPhase } from \"../types.js\";\nimport type {\n ConversationGuardrail,\n GuardrailContext,\n GuardrailIncident,\n GuardrailOutcome,\n GuardrailRule,\n GuardrailDisposition,\n SmartState,\n SmartAgentOptions,\n AgentRuntimeConfig,\n SmartAgentEvent,\n} from \"../types.js\";\n\nexport type GuardrailEvaluationParams = {\n guardrails?: ConversationGuardrail[];\n phase: GuardrailPhase;\n state: SmartState;\n runtime: AgentRuntimeConfig;\n options: SmartAgentOptions;\n emit?: (event: SmartAgentEvent) => void;\n};\n\nfunction ensureArray<T>(value: T[] | undefined): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction buildContext(\n params: Omit<GuardrailEvaluationParams, \"guardrails\" | \"emit\">\n): GuardrailContext {\n const latest = params.state.messages[params.state.messages.length - 1];\n return {\n phase: params.phase,\n messages: params.state.messages,\n latestMessage: latest,\n state: params.state,\n runtime: params.runtime,\n options: params.options,\n };\n}\n\nfunction normalizeDisposition(\n passed: boolean,\n disposition?: GuardrailDisposition\n): GuardrailDisposition {\n if (disposition) return disposition;\n return passed ? \"allow\" : \"block\";\n}\n\nexport async function evaluateGuardrails(\n params: GuardrailEvaluationParams\n): Promise<GuardrailOutcome> {\n const incidents: GuardrailIncident[] = [];\n const guardrails = ensureArray(params.guardrails).filter((guardrail) =>\n ensureArray(guardrail.appliesTo).includes(params.phase)\n );\n\n if (guardrails.length === 0) {\n return { ok: true, incidents };\n }\n\n const context = buildContext(params);\n\n for (const guardrail of guardrails) {\n for (const rule of ensureArray(guardrail.rules)) {\n let result: Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n try {\n result = await rule.evaluate(context);\n } catch (err) {\n result = {\n passed: false,\n reason: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n details: { thrown: true },\n disposition: \"block\" as GuardrailDisposition,\n } as Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n }\n\n const passed = result?.passed !== false;\n const disposition = normalizeDisposition(passed, result?.disposition);\n\n if (passed && disposition === \"allow\") {\n continue;\n }\n\n const incident: GuardrailIncident = {\n guardrailId: guardrail.id ?? rule.id ?? nanoid(8),\n guardrailTitle: guardrail.title,\n ruleId: rule.id,\n ruleTitle: rule.title,\n phase: params.phase,\n reason: result?.reason,\n details: result?.details,\n disposition,\n };\n\n let effectiveDisposition = incident.disposition;\n if (typeof guardrail.onViolation === \"function\") {\n try {\n const override = await guardrail.onViolation(incident, context);\n if (override) {\n effectiveDisposition = override;\n incident.disposition = override;\n }\n } catch (err) {\n effectiveDisposition = \"block\";\n incident.disposition = \"block\";\n incident.details = {\n ...(incident.details || {}),\n onViolationError: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n };\n if (!incident.reason) {\n incident.reason = \"Guardrail onViolation handler threw an error.\";\n }\n }\n }\n\n incidents.push(incident);\n\n params.emit?.({\n type: \"guardrail\",\n phase: params.phase,\n guardrailId: incident.guardrailId,\n guardrailTitle: incident.guardrailTitle,\n ruleId: incident.ruleId,\n ruleTitle: incident.ruleTitle,\n disposition: effectiveDisposition,\n reason: incident.reason,\n details: incident.details,\n });\n\n if (effectiveDisposition === \"block\" && guardrail.haltOnViolation !== false) {\n break;\n }\n }\n }\n\n const ok = incidents.every((incident) => incident.disposition !== \"block\");\n return { ok, incidents };\n}\n\nexport type CreateGuardrailOptions = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo?: GuardrailPhase[];\n checks: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport function createGuardrail(options: CreateGuardrailOptions): ConversationGuardrail {\n const appliesTo = options.appliesTo?.length\n ? options.appliesTo\n : [GuardrailPhase.Request, GuardrailPhase.Response];\n\n return {\n id: options.id,\n title: options.title,\n description: options.description,\n appliesTo,\n rules: options.checks,\n haltOnViolation: options.haltOnViolation,\n onViolation: options.onViolation,\n metadata: options.metadata,\n };\n}\n","import { AgentRuntimeConfig, AgentSnapshot, RestoreSnapshotOptions, SmartState, SnapshotOptions } from \"../types.js\";\n\nconst DISALLOWED_CTX_KEYS = new Set([\n \"__onEvent\",\n \"__onProgress\",\n \"__onStream\",\n \"__traceSession\",\n \"__paused\",\n \"__cancellationToken\",\n \"__abortSignal\",\n]);\n\nconst clone = <T>(value: T): T => {\n if (typeof (globalThis as any).structuredClone === \"function\") {\n return (globalThis as any).structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n};\n\nconst cleanCtx = (ctx?: Record<string, any>): Record<string, any> | undefined => {\n if (!ctx) return undefined;\n const entries = Object.entries(ctx).filter(([key]) => !DISALLOWED_CTX_KEYS.has(key));\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n};\n\nconst runtimeHintFromAgent = (agent?: AgentRuntimeConfig) => {\n if (!agent) return undefined;\n const tools = Array.isArray(agent.tools) ? agent.tools.map((tool: any) => tool?.name).filter(Boolean) : undefined;\n return {\n name: agent.name,\n version: agent.version,\n tools: tools && tools.length > 0 ? tools : undefined,\n };\n};\n\nexport function captureSnapshot(state: SmartState, options?: SnapshotOptions): AgentSnapshot {\n const { agent, ctx, ...rest } = state;\n const metadata = {\n createdAt: new Date().toISOString(),\n tag: options?.tag,\n paused: ctx?.__paused ?? null,\n };\n\n const safeState = clone({\n ...rest,\n ctx: cleanCtx(ctx),\n });\n\n if (safeState.ctx && \"__paused\" in safeState.ctx) {\n delete (safeState.ctx as Record<string, any>).__paused;\n }\n\n return {\n state: safeState,\n runtimeHint: options?.includeRuntimeHint !== false ? runtimeHintFromAgent(agent) : undefined,\n metadata,\n };\n}\n\nexport function restoreSnapshot(snapshot: AgentSnapshot, restoreOptions?: RestoreSnapshotOptions): SmartState {\n const base = clone(snapshot.state) as SmartState;\n const incomingCtx = restoreOptions?.ctx;\n const mergedCtx = restoreOptions?.mergeCtx === false\n ? cleanCtx(incomingCtx)\n : {\n ...(base.ctx || {}),\n ...cleanCtx(incomingCtx),\n };\n\n const ctx = {\n ...(mergedCtx || {}),\n __restoredFromSnapshot: true,\n };\n\n const restored: SmartState = {\n ...base,\n ctx,\n };\n\n if (restoreOptions?.agent) {\n restored.agent = restoreOptions.agent;\n }\n\n return restored;\n}\n","import { SmartState, ToolApprovalResolution, PendingToolApproval } from \"../types.js\";\n\nconst cloneApprovals = (approvals: PendingToolApproval[] | undefined) =>\n Array.isArray(approvals) ? approvals.map((entry) => ({ ...entry })) : [];\n\nexport function resolveToolApprovalState(state: SmartState, resolution: ToolApprovalResolution): SmartState {\n const approvals = cloneApprovals(state.pendingApprovals);\n const matchIndex = approvals.findIndex((entry) => entry.id === resolution.id || entry.toolCallId === resolution.id);\n if (matchIndex === -1) {\n throw new Error(`Pending approval not found for id: ${resolution.id}`);\n }\n\n const entry = { ...approvals[matchIndex] };\n if (entry.status === \"executed\") {\n throw new Error(`Tool approval ${entry.id} already completed.`);\n }\n\n entry.status = resolution.approved ? \"approved\" : \"rejected\";\n entry.approvedArgs = resolution.approved ? (resolution.approvedArgs ?? entry.args) : undefined;\n entry.decidedBy = resolution.decidedBy;\n entry.comment = resolution.comment;\n entry.decidedAt = new Date().toISOString();\n\n approvals[matchIndex] = entry;\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingApproval;\n ctx.__resumeStage = \"tools\";\n ctx.__approvalResolved = { id: entry.id, status: entry.status };\n\n return {\n ...state,\n pendingApprovals: approvals,\n ctx,\n };\n}\n","import type {\n SmartState,\n Message,\n PendingUserQuestion,\n UserQuestionResolution,\n UserQuestionAnswerSet,\n} from \"../types.js\";\n\nconst cloneQuestions = (questions: PendingUserQuestion[] | undefined) =>\n Array.isArray(questions) ? questions.map((entry) => ({ ...entry })) : [];\n\nfunction validateAnswers(\n entry: PendingUserQuestion,\n answers: UserQuestionAnswerSet | undefined,\n cancelled: boolean,\n): UserQuestionAnswerSet {\n if (cancelled) {\n return answers || {};\n }\n\n const allowFreeText = entry.allowFreeText !== false;\n const out: UserQuestionAnswerSet = {};\n const provided = answers || {};\n\n for (const question of entry.questions) {\n const required = question.required !== false;\n const key = question.question;\n const answer = provided[key] ?? provided[question.header || \"\"];\n\n if (!answer) {\n if (required) {\n throw new Error(`Missing answer for required question: \"${key}\".`);\n }\n continue;\n }\n\n const values = Array.isArray(answer.values) ? answer.values.filter((v) => typeof v === \"string\") : [];\n const freeText = typeof answer.freeText === \"string\" ? answer.freeText.trim() : \"\";\n const notes = typeof answer.notes === \"string\" ? answer.notes : undefined;\n\n if (freeText && !allowFreeText) {\n throw new Error(\n `Free-text answers are disabled for this agent (question: \"${key}\"). Pick one of the provided options.`,\n );\n }\n\n if (values.length === 0 && !freeText) {\n if (required) {\n throw new Error(`Question \"${key}\" requires either a selected option or free-text answer.`);\n }\n continue;\n }\n\n if (values.length > 1 && !question.multiSelect) {\n throw new Error(`Question \"${key}\" is single-select but received multiple values.`);\n }\n\n if (Array.isArray(question.options) && question.options.length > 0 && values.length > 0) {\n const allowedValues = new Set(\n question.options.map((option) => option.value ?? option.label),\n );\n for (const value of values) {\n if (!allowedValues.has(value)) {\n if (!allowFreeText) {\n throw new Error(\n `Value \"${value}\" is not one of the allowed options for question \"${key}\".`,\n );\n }\n // With free-text enabled, treat unknown values as a custom answer.\n }\n }\n }\n\n out[key] = { values, ...(freeText ? { freeText } : {}), ...(notes ? { notes } : {}) };\n }\n\n return out;\n}\n\nfunction buildToolResponseContent(entry: PendingUserQuestion, answers: UserQuestionAnswerSet, cancelled: boolean, notes?: string): string {\n if (cancelled) {\n return JSON.stringify({\n status: \"cancelled\",\n message: notes || \"User dismissed the question without answering.\",\n });\n }\n\n // Flatten into a compact, model-friendly shape.\n const payload = {\n status: \"answered\",\n answers: entry.questions.map((question) => {\n const key = question.question;\n const ans = answers[key];\n return {\n question: key,\n header: question.header,\n values: ans?.values ?? [],\n freeText: ans?.freeText,\n notes: ans?.notes,\n };\n }),\n ...(notes ? { reviewerNotes: notes } : {}),\n };\n return JSON.stringify(payload);\n}\n\nexport function resolveUserQuestionState(\n state: SmartState,\n resolution: UserQuestionResolution,\n): SmartState {\n const pending = cloneQuestions(state.pendingUserQuestions);\n const matchIndex = pending.findIndex(\n (entry) => entry.id === resolution.id || entry.toolCallId === resolution.id,\n );\n if (matchIndex === -1) {\n throw new Error(`Pending user question not found for id: ${resolution.id}`);\n }\n\n const entry = { ...pending[matchIndex] };\n if (entry.status === \"answered\" || entry.status === \"executed\" || entry.status === \"cancelled\") {\n throw new Error(`User question ${entry.id} already resolved (status: ${entry.status}).`);\n }\n\n const cancelled = resolution.cancelled === true;\n const validated = validateAnswers(entry, resolution.answers, cancelled);\n\n entry.status = cancelled ? \"cancelled\" : \"answered\";\n entry.answers = validated;\n entry.cancelled = cancelled || undefined;\n entry.answeredBy = resolution.answeredBy;\n entry.notes = resolution.notes;\n entry.answeredAt = new Date().toISOString();\n\n pending[matchIndex] = entry;\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingUserQuestion;\n // The original tool call set `__resumeStage = \"tools\"` so the runtime would\n // re-enter the tools node on resume; for ask_user we already injected the\n // answer as a tool message, so the loop should run the agent (not the\n // tools node) first on the next invoke.\n if (ctx.__resumeStage === \"tools\") {\n delete ctx.__resumeStage;\n }\n ctx.__userQuestionResolved = { id: entry.id, status: entry.status };\n\n const toolMessage: Message = {\n role: \"tool\",\n name: \"ask_user_question\",\n tool_call_id: entry.toolCallId,\n content: buildToolResponseContent(entry, validated, cancelled, resolution.notes),\n };\n\n return {\n ...state,\n pendingUserQuestions: pending,\n messages: [...(state.messages || []), toolMessage],\n ctx,\n };\n}\n","import { z } from \"zod\";\nimport { nanoid } from \"nanoid\";\nimport { createTool } from \"./tool.js\";\nimport { recordTraceEvent } from \"./utils/tracing.js\";\nimport type {\n PendingUserQuestion,\n UserQuestionItem,\n HumanInTheLoopAskUserConfig,\n} from \"./types.js\";\n\nexport type AskUserStateRef = {\n pendingUserQuestions?: PendingUserQuestion[];\n ctx?: Record<string, any>;\n __onEvent?: (event: any) => void;\n __currentToolCallId?: string;\n};\n\nconst DEFAULT_DESCRIPTION_WITH_FREETEXT =\n \"Pause the agent and surface a structured prompt to the human user when you genuinely cannot proceed without their input. \" +\n \"Group up to 4 closely related questions into a single call. \" +\n \"Prefer concrete options the user can pick over open-ended free-text — list `options` whenever you can anticipate the choices. \" +\n \"The user may type a custom answer for any question. \" +\n \"Do not use this tool for things you can deduce from the conversation, the system prompt, or another tool. \" +\n \"After the user answers, their selections come back as the tool result.\";\n\nconst DEFAULT_DESCRIPTION_NO_FREETEXT =\n \"Pause the agent and surface a structured multi-choice prompt to the human user when you genuinely cannot proceed without their input. \" +\n \"Group up to 4 closely related questions into a single call. \" +\n \"Every question MUST include at least two `options` — free-text answers are disabled for this agent. \" +\n \"Do not use this tool for things you can deduce from the conversation, the system prompt, or another tool. \" +\n \"After the user picks, their selections come back as the tool result.\";\n\nfunction buildOptionSchema() {\n return z\n .object({\n label: z.string().min(1).describe(\"Display text the user sees\"),\n value: z\n .string()\n .min(1)\n .optional()\n .describe(\"Value returned in the answer; defaults to label\"),\n description: z.string().optional(),\n preview: z\n .string()\n .optional()\n .describe(\"Optional code / ASCII preview rendered when this option is focused\"),\n })\n .strict();\n}\n\nfunction buildQuestionSchema(allowFreeText: boolean) {\n const optionSchema = buildOptionSchema();\n const baseShape = {\n question: z.string().min(1).describe(\"Full question shown to the user\"),\n header: z\n .string()\n .max(40)\n .optional()\n .describe(\"Short chip / tag rendered next to the question (max ~12 chars recommended)\"),\n multiSelect: z.boolean().optional().describe(\"Allow multiple selections. Default: false\"),\n placeholder: z.string().optional(),\n required: z.boolean().optional().describe(\"Default: true\"),\n } as const;\n\n if (allowFreeText) {\n return z\n .object({\n ...baseShape,\n options: z.array(optionSchema).min(2).max(12).optional(),\n })\n .strict();\n }\n\n return z\n .object({\n ...baseShape,\n options: z\n .array(optionSchema)\n .min(2)\n .max(12)\n .describe(\"Required: free-text answers are disabled for this agent\"),\n })\n .strict();\n}\n\nexport function createAskUserQuestionTool(\n stateRef: AskUserStateRef,\n config: HumanInTheLoopAskUserConfig,\n) {\n const allowFreeText = config.allowFreeText !== false;\n const description = config.promptOverride\n ?? (allowFreeText ? DEFAULT_DESCRIPTION_WITH_FREETEXT : DEFAULT_DESCRIPTION_NO_FREETEXT);\n const questionSchema = buildQuestionSchema(allowFreeText);\n\n const askUser = createTool({\n name: \"ask_user_question\",\n description,\n schema: z\n .object({\n questions: z\n .array(questionSchema)\n .min(1)\n .max(4)\n .describe(\"1-4 related questions to ask in a single pause.\"),\n })\n .strict(),\n func: async ({ questions }) => {\n const ref = ((askUser as any)._stateRef ||= {}) as AskUserStateRef;\n const onEvent = ref.__onEvent;\n if (!ref.ctx) ref.ctx = {};\n const ctx = ref.ctx;\n const toolCallId = ref.__currentToolCallId || `ask_user_${nanoid(6)}`;\n if (!ref.pendingUserQuestions) ref.pendingUserQuestions = [];\n const pendingList = ref.pendingUserQuestions;\n\n const entry: PendingUserQuestion = {\n id: nanoid(),\n toolCallId,\n toolName: \"ask_user_question\",\n questions: questions as UserQuestionItem[],\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n allowFreeText,\n };\n pendingList.push(entry);\n\n ctx.__awaitingUserQuestion = {\n id: entry.id,\n toolCallId: entry.toolCallId,\n requestedAt: entry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n\n onEvent?.({\n type: \"user_question\",\n status: \"pending\",\n id: entry.id,\n toolCallId: entry.toolCallId,\n questions: entry.questions,\n allowFreeText,\n });\n\n recordTraceEvent(ctx.__traceSession, {\n type: \"user_question\",\n label: \"Ask User\",\n actor: { scope: \"agent\", name: \"ask_user_question\", role: \"user_interaction\" },\n status: \"success\",\n sections: [\n {\n kind: \"metadata\",\n label: \"Pending Question\",\n data: {\n id: entry.id,\n toolCallId: entry.toolCallId,\n questions: entry.questions,\n allowFreeText,\n },\n },\n ],\n });\n\n return {\n __awaitingUserQuestion: true,\n id: entry.id,\n toolCallId: entry.toolCallId,\n };\n },\n });\n\n (askUser as any)._stateRef = stateRef;\n (askUser as any).__source = \"human-in-the-loop\";\n return askUser;\n}\n","// A minimal agent builder: no system prompt, no summarization, with tool limit and optional structured output finalize.\nimport type { AgentInvokeResult, InvokeConfig, SmartAgentEvent, AgentOptions, AgentState, AgentInstance, AgentRuntimeConfig, HandoffDescriptor, GuardrailOutcome, AgentSnapshot, SnapshotOptions, RestoreSnapshotOptions, ToolApprovalResolution, UserQuestionResolution, HumanInTheLoopAskUserConfig } from \"./types.js\";\nimport { GuardrailPhase } from \"./types.js\";\nimport { z, ZodSchema } from \"zod\";\nimport { createResolverNode } from \"./nodes/resolver.js\";\nimport { createAgentCoreNode } from \"./nodes/agentCore.js\";\nimport { createToolsNode } from \"./nodes/tools.js\";\nimport { createToolLimitFinalizeNode } from \"./nodes/toolLimitFinalize.js\";\nimport { createReflectionNode, shouldRunReflection } from \"./nodes/reflect.js\";\nimport { resolveReasoning } from \"./smart/reasoning.js\";\nimport { createTool } from \"./tool.js\";\nimport { createTraceSession, finalizeTraceSession, startStreamingSession, recordTraceEvent } from \"./utils/tracing.js\";\nimport { evaluateGuardrails } from \"./guardrails/engine.js\";\nimport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nimport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nimport { resolveUserQuestionState } from \"./utils/userQuestions.js\";\nimport { createAskUserQuestionTool } from \"./humanLoop.js\";\nimport { countMessagesTokens } from \"./utils/utilTokens.js\";\nimport { isSyntheticSummaryMessage } from \"./utils/syntheticMessages.js\";\nimport { extractMessageText } from \"./utils/content.js\";\nimport { StructuredOutputManager } from \"./structuredOutput/manager.js\";\nimport { resolveStrategy, getModelCapabilities } from \"./structuredOutput/resolver.js\";\nimport type { StructuredOutputError } from \"./structuredOutput/types.js\";\n\nfunction getLastAssistantMessage(messages: any[]): any | undefined {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n if (messages[index]?.role === \"assistant\") {\n return messages[index];\n }\n }\n return undefined;\n}\n\nfunction getActiveSummarizationThreshold(opts: AgentOptions): number | undefined {\n const summarization = (opts as any).summarization;\n if (!summarization || typeof summarization !== \"object\" || summarization.enable === false) {\n return undefined;\n }\n\n return (\n summarization.summaryTriggerTokens\n || summarization.maxTokens\n || opts.limits?.maxContextTokens\n || 50000\n );\n}\n\n/**\n * Decision helper for summarization signaling. Returns \"trigger\" only when:\n * - the conversation (excluding synthetic/context-overhead system messages)\n * exceeds the configured threshold, AND\n * - the summarizer has not already given up (`__summarizationExhausted`), AND\n * - we are not bouncing right after a fresh summary pass (15% tolerance).\n * Returns \"skip\" in every other case so the loop continues without breaking.\n */\nfunction shouldSignalSummarization(state: AgentState, threshold: number): \"trigger\" | \"skip\" {\n const tokCountMessages = (state.messages || []).filter((message: any) => {\n if (isSyntheticSummaryMessage(message)) return false;\n if (message.role === 'system' && (message.name === 'context_summary' || message.name === 'memory_context')) return false;\n return true;\n });\n const tokenCount = countMessagesTokens(tokCountMessages);\n if (tokenCount <= threshold) return \"skip\";\n\n // SmartAgent already attempted and could not compress further; pressing\n // again would deadlock. Proceed with the clamped context instead.\n if ((state.ctx as any)?.__summarizationExhausted) return \"skip\";\n\n // Fresh summary in transcript + only marginally over budget: do not\n // re-summarize. Context overhead alone can keep us 0–15% above the trigger.\n const hasFreshSummary = (state.messages || []).some((m: any) =>\n m.role === 'tool'\n && typeof m.content === 'string'\n && (m.content === 'SUMMARIZED' || m.content.startsWith('SUMMARIZED_TOOL_RESPONSE'))\n );\n if (hasFreshSummary && tokenCount <= threshold * 1.15) return \"skip\";\n\n return \"trigger\";\n}\n\nfunction clearNeedsSummarization(state: AgentState): AgentState {\n if (!(state.ctx as any)?.__needsSummarization) {\n return state;\n }\n\n const nextCtx = { ...(state.ctx || {}) } as Record<string, unknown>;\n delete nextCtx.__needsSummarization;\n\n return {\n ...state,\n ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined,\n } as AgentState;\n}\n\nexport function createAgent<TOutput = unknown>(opts: AgentOptions & { outputSchema?: ZodSchema<TOutput> }): AgentInstance<TOutput> {\n const resolver = createResolverNode();\n const agentCore = createAgentCoreNode(opts);\n // Prepare tools list: base tools + structured output finalize if schema provided\n const toolsBase = [...((opts.tools as any) ?? [])];\n\n // Resolve human-in-the-loop config; when askUser is enabled we attach the\n // built-in ask_user_question tool to the agent's tool surface.\n const askUserConfig: HumanInTheLoopAskUserConfig | undefined = (() => {\n const raw = (opts as any).humanInTheLoop?.askUser;\n if (!raw) return undefined;\n if (raw === true) return { enabled: true, allowFreeText: true };\n return {\n enabled: true,\n allowFreeText: raw.allowFreeText !== false,\n promptOverride: raw.promptOverride,\n };\n })();\n const askUserOnQuestion = typeof (opts as any).humanInTheLoop?.askUser === \"object\"\n ? (opts as any).humanInTheLoop?.askUser?.onQuestion as ((event: any) => void) | undefined\n : undefined;\n // Shared per-agent stateRef for the ask_user tool. Each invoke replaces the\n // pendingUserQuestions array via the tools node, but the tool object itself\n // is reused — that's fine because it only reads from this ref at call time.\n const askUserStateRef: any = askUserConfig\n ? { pendingUserQuestions: undefined, ctx: undefined, __onEvent: undefined, __currentToolCallId: undefined }\n : undefined;\n if (askUserConfig && askUserStateRef) {\n toolsBase.push(createAskUserQuestionTool(askUserStateRef, askUserConfig));\n }\n\n // Structured output manager: resolves strategy (native vs tool-based) based on model capabilities\n const soManager = opts.outputSchema\n ? new StructuredOutputManager<TOutput>(opts.outputSchema, resolveStrategy(opts.model))\n : undefined;\n\n if (soManager) {\n const modelCapabilities = getModelCapabilities(opts.model);\n const responseTool = soManager.getResponseTool();\n // Hard guard: when model supports native structured output, never attach the fallback response tool.\n if (responseTool && modelCapabilities.structuredOutput !== \"native\") {\n toolsBase.push(responseTool);\n }\n }\n const toolsNode = createToolsNode(toolsBase, opts);\n const finalizeNode = createToolLimitFinalizeNode(opts);\n\n // Resolve unified reasoning config (provider-native + reflection). When omitted,\n // the loop behaves exactly as before: no reflection node and no reasoning extras.\n const resolvedReasoning = resolveReasoning((opts as any).reasoning);\n const reflectNode = resolvedReasoning?.reflection.enabled\n ? createReflectionNode(opts as any, resolvedReasoning.reflection)\n : undefined;\n\n type GuardrailStore = { lastRequestLength: number; lastResponseLength: number };\n\n const mergeGuardrailOutcomes = (\n prev: GuardrailOutcome | undefined,\n next: GuardrailOutcome\n ): GuardrailOutcome => {\n if (!prev) return next;\n return {\n ok: prev.ok && next.ok,\n incidents: [...prev.incidents, ...next.incidents],\n };\n };\n\n const ensureGuardrailStore = (state: AgentState): GuardrailStore => {\n const ctx = (state.ctx = state.ctx || {});\n const existing = (ctx.__guardrailStore as GuardrailStore | undefined) || {\n lastRequestLength: -1,\n lastResponseLength: -1,\n };\n ctx.__guardrailStore = existing;\n return existing;\n };\n\n const getGuardrailConfig = (state: AgentState) => {\n const agentGuardrails = state.agent?.guardrails;\n return Array.isArray(agentGuardrails)\n ? agentGuardrails\n : Array.isArray(opts.guardrails)\n ? opts.guardrails\n : [];\n };\n\n const runtime: AgentRuntimeConfig = {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: toolsBase,\n guardrails: opts.guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: opts.outputSchema as any,\n responseFormat: soManager?.getResponseFormat(),\n tracing: opts.tracing,\n humanInTheLoop: askUserConfig ? { askUser: askUserConfig } : undefined,\n };\n const summarizationThreshold = getActiveSummarizationThreshold(opts);\n\n async function runLoop(\n initial: AgentState,\n config: InvokeConfig | undefined,\n emit?: (event: SmartAgentEvent) => void\n ): Promise<AgentState> {\n let state = await resolver(initial);\n if (state.ctx?.__paused) {\n const nextCtx = { ...state.ctx };\n delete nextCtx.__paused;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n let resumeStage: \"tools\" | null = null;\n if (state.ctx?.__resumeStage) {\n const nextCtx = { ...state.ctx };\n if (nextCtx.__resumeStage === \"tools\") {\n resumeStage = \"tools\";\n }\n delete nextCtx.__resumeStage;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n\n if (summarizationThreshold === undefined) {\n state = clearNeedsSummarization(state);\n }\n\n // Forward resolved native reasoning into ctx so agentCore picks it up and\n // adapters map it to provider-specific body fields. We (re)apply this on\n // every invoke so a resumed run cannot inherit a stale `__reasoning` value\n // from a previous config — and we clear it when native reasoning is off.\n if (resolvedReasoning) {\n const ctx: any = { ...(state.ctx || {}) };\n if (resolvedReasoning.native) {\n ctx.__reasoning = resolvedReasoning.native;\n } else {\n delete ctx.__reasoning;\n }\n state = { ...state, ctx: Object.keys(ctx).length > 0 ? ctx : undefined } as AgentState;\n }\n const mergedLimits = {\n ...(opts.limits || {}),\n ...((config?.limits || {}) as any),\n } as AgentOptions[\"limits\"];\n\n const maxToolCalls = (mergedLimits?.maxToolCalls === undefined) ? 50 : mergedLimits?.maxToolCalls;\n const iterationLimit = maxToolCalls === Infinity ? 100 : Math.max(maxToolCalls * 3 + 10, 40);\n const wallClockStart = Date.now();\n // Treat 0 / undefined as \"disabled\" so resolved-profile placeholders do not\n // accidentally throttle the loop.\n const maxWallClockMs = mergedLimits?.maxWallClockMs && mergedLimits.maxWallClockMs > 0 ? mergedLimits.maxWallClockMs : undefined;\n const maxTotalOutputTokens = mergedLimits?.maxTotalOutputTokens && mergedLimits.maxTotalOutputTokens > 0 ? mergedLimits.maxTotalOutputTokens : undefined;\n const maxCostUsd = mergedLimits?.maxCostUsd && mergedLimits.maxCostUsd > 0 ? mergedLimits.maxCostUsd : undefined;\n const costEstimator = (opts as any).costEstimator as ((args: { modelName?: string; inputTokens: number; outputTokens: number; cachedInputTokens?: number; reasoningTokens?: number }) => number) | undefined;\n const checkBudgetBreached = (): { breached: false } | { breached: true; reason: string } => {\n if (maxWallClockMs && Date.now() - wallClockStart > maxWallClockMs) {\n return { breached: true, reason: `maxWallClockMs (${maxWallClockMs}ms) exceeded` };\n }\n if (maxTotalOutputTokens) {\n const totals = (state as any).usage?.totals as Record<string, { output: number }> | undefined;\n if (totals) {\n let outputSum = 0;\n for (const v of Object.values(totals)) outputSum += Number(v?.output) || 0;\n if (outputSum > maxTotalOutputTokens) {\n return { breached: true, reason: `maxTotalOutputTokens (${maxTotalOutputTokens}) exceeded` };\n }\n }\n }\n if (maxCostUsd && costEstimator) {\n const perRequest = (state as any).usage?.perRequest as Array<{ modelName: string; usage: any }> | undefined;\n if (perRequest) {\n let cost = 0;\n for (const r of perRequest) {\n cost += costEstimator({\n modelName: r.modelName,\n inputTokens: Number(r.usage?.prompt_tokens) || 0,\n outputTokens: Number(r.usage?.completion_tokens) || 0,\n cachedInputTokens: Number(r.usage?.prompt_tokens_details?.cached_tokens) || 0,\n reasoningTokens: Number(r.usage?.completion_tokens_details?.reasoning_tokens) || 0,\n }) || 0;\n }\n if (cost > maxCostUsd) {\n return { breached: true, reason: `maxCostUsd ($${maxCostUsd}) exceeded (actual: $${cost.toFixed(4)})` };\n }\n }\n }\n return { breached: false };\n };\n let iterations = 0;\n // Run-scoped reflection counter. `state.reflections` accumulates across the\n // whole (possibly resumed) conversation, so it cannot back `maxPerRun`.\n let reflectionsThisRun = 0;\n const onStateChange = config?.onStateChange;\n const checkpointReason = config?.checkpointReason;\n let pausedStage: string | null = null;\n\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n\n const isCancelled = () => {\n const ctx: any = state.ctx || {};\n const token = ctx.__cancellationToken as any;\n const signal = ctx.__abortSignal as AbortSignal | undefined;\n const deadline = ctx.__deadline as number | undefined;\n if (signal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (token && token.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n if (deadline && Date.now() > deadline) return { cancelled: true, reason: \"timeout\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const cancelIfRequested = (stage: string) => {\n const result = isCancelled();\n if (!result.cancelled) return false;\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__cancelled = { stage, reason: result.reason, timestamp: new Date().toISOString() };\n state = { ...state, ctx } as AgentState;\n emit?.({ type: \"cancelled\", stage, reason: result.reason });\n onProgress?.({ stage, message: \"Cancelled\", detail: { reason: result.reason } });\n return true;\n };\n\n const checkpointIfRequested = (stage: string) => {\n if (typeof onStateChange !== \"function\") return false;\n let result = false;\n try {\n result = onStateChange(state);\n } catch (err) {\n console.warn('[agent-sdk] onStateChange callback error:', err);\n result = false;\n }\n if (!result) return false;\n const ctx = { ...(state.ctx || {}) };\n ctx.__paused = {\n stage,\n iteration: iterations,\n reason: checkpointReason,\n timestamp: new Date().toISOString(),\n };\n state = { ...state, ctx } as AgentState;\n pausedStage = stage;\n return true;\n };\n\n // R1: \"initial_then_after_tool\" cadence reflects once up-front (a planning\n // note) before the first model call, then behaves like \"after_tool\" inside\n // the loop. Only fire on a fresh run (no assistant turn yet, not resuming).\n if (\n reflectNode &&\n resolvedReasoning?.reflection.enabled &&\n resolvedReasoning.reflection.cadence === \"initial_then_after_tool\" &&\n resumeStage === null &&\n !state.ctx?.__awaitingApproval &&\n !state.ctx?.__awaitingUserQuestion &&\n !(state.messages as any[]).some((m) => m?.role === \"assistant\")\n ) {\n try {\n const patch = await reflectNode(state as any, \"initial_then_after_tool\");\n if (patch && Object.keys(patch).length > 0) {\n state = { ...state, ...patch } as AgentState;\n reflectionsThisRun++;\n }\n } catch {\n // never fail the run due to reflection errors\n }\n }\n\n while (iterations < iterationLimit) {\n iterations++;\n // Enforce budget limits before each iteration so we never spend extra\n // tokens after the cap has been hit.\n const budget = checkBudgetBreached();\n if (budget.breached) {\n emit?.({ type: \"metadata\", limitBreached: budget.reason });\n const ctx = { ...(state.ctx || {}), __limitBreached: budget.reason } as any;\n state = { ...state, ctx } as AgentState;\n break;\n }\n\n // Open an iteration span as parent for all ai_call / tool_call events in this turn\n const traceSession = state.ctx?.__traceSession as import(\"./types.js\").TraceSessionRuntime | undefined;\n if (traceSession) {\n const iterEvent = recordTraceEvent(traceSession, {\n type: \"agent_iteration\",\n label: `Iteration ${iterations}`,\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"orchestrator\" },\n parentSpanId: traceSession.rootSpanId,\n });\n // Override the spanId for the iteration event so children reference it\n if (iterEvent) {\n traceSession.currentIterationSpanId = iterEvent.spanId;\n }\n }\n\n if (cancelIfRequested(\"loop\")) break;\n\n const skippingAgent = resumeStage === \"tools\";\n if (!skippingAgent) {\n if (cancelIfRequested(\"before_guardrails\")) break;\n if (checkpointIfRequested(\"before_guardrails\")) break;\n\n const preGuardrails = getGuardrailConfig(state);\n if (preGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastRequestLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: preGuardrails,\n phase: GuardrailPhase.Request,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastRequestLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const guardMessage: any = {\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Request blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Request,\n incidents: outcome.incidents,\n },\n },\n };\n state = { ...state, messages: [...state.messages, guardMessage] } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Request,\n incident: blocking,\n };\n break;\n }\n }\n }\n\n // Defer to a single decision helper for context summarization. The\n // helper returns \"trigger\" only when the context truly exceeds the\n // budget and re-running the summarizer can plausibly shrink it.\n if (summarizationThreshold !== undefined) {\n const verdict = shouldSignalSummarization(state, summarizationThreshold);\n if (verdict === \"trigger\") {\n const ctx = { ...(state.ctx || {}), __needsSummarization: true };\n state = { ...state, ctx } as AgentState;\n break;\n }\n }\n\n // Agent step\n onProgress?.({ stage: \"agent\", message: \"Invoking model\" });\n if (cancelIfRequested(\"before_agent\")) break;\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n onProgress?.({ stage: \"agent\", message: \"Model response received\" });\n\n if (checkpointIfRequested(\"after_agent\")) break;\n\n const postGuardrails = getGuardrailConfig(state);\n if (postGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastResponseLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: postGuardrails,\n phase: GuardrailPhase.Response,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastResponseLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const updatedMessages = [...state.messages];\n const replaced = updatedMessages.pop();\n updatedMessages.push({\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Response blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n replaced,\n },\n },\n } as any);\n state = { ...state, messages: updatedMessages } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Response,\n incident: blocking,\n replaced,\n };\n break;\n } else if (outcome.incidents.length > 0) {\n const last = state.messages[state.messages.length - 1] as any;\n if (last) {\n last.metadata = {\n ...(last.metadata || {}),\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n },\n };\n }\n }\n }\n }\n } else {\n resumeStage = null;\n }\n\n const lastMsg: any = state.messages[state.messages.length - 1];\n const toolCalls: any[] = Array.isArray(lastMsg?.tool_calls) ? lastMsg.tool_calls : [];\n const toolCallCount = state.toolCallCount || 0;\n\n // Tool limit finalize gate\n if (state.ctx?.__finalizedDueToToolLimit) {\n break;\n }\n if (toolCallCount >= maxToolCalls && toolCalls.length > 0) {\n state = { ...state, ...(await finalizeNode(state)) } as AgentState;\n // One more assistant turn will occur, but without more tools ideally\n continue;\n }\n\n if (toolCalls.length === 0) {\n if (\n soManager &&\n !(state as any).ctx?.__finalizedDueToStructuredOutput &&\n !(state as any).ctx?.__structuredOutputForceFinalize\n ) {\n // Native strategy: the provider API (e.g. OpenAI `response_format:\n // json_schema` with strict=true) guarantees the text content is valid\n // JSON matching the schema. Parse and finalize in a single call — no\n // nudges, no retries. If parsing fails we surface the error to the\n // caller rather than burning extra round-trips trying to \"fix\" it.\n if (soManager.strategy.kind === \"native\") {\n const assistantText = extractMessageText(lastMsg);\n if (assistantText) {\n const parsed = soManager.parseFromContent(assistantText);\n if (parsed.success) {\n const ctx = {\n ...(state.ctx || {}),\n __finalizedDueToStructuredOutput: true,\n __structuredOutputParsed: parsed.data,\n };\n state = { ...state, ctx } as AgentState;\n }\n }\n // Exit unconditionally for native: either we finalized or the\n // caller will receive the parse error via result.outputError.\n break;\n }\n\n // Tool-based strategy: model skipped calling `response` and emitted\n // plain text instead. Inject a one-time nudge so the loop can re-ask\n // it to call the tool.\n const nudge = soManager.buildNudgeMessage(false);\n const ctx = { ...(state.ctx || {}), __structuredOutputForceFinalize: true };\n state = { ...state, messages: [...state.messages, nudge as any], ctx } as AgentState;\n continue;\n }\n break;\n }\n\n // Run tools\n onProgress?.({ stage: \"tools\", message: \"Running tools\" });\n if (cancelIfRequested(\"before_tools\")) break;\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n onProgress?.({ stage: \"tools\", message: \"Tools finished\" });\n if (state.ctx?.__awaitingApproval) break;\n if (state.ctx?.__awaitingUserQuestion) break;\n if (checkpointIfRequested(\"after_tools\")) break;\n if (state.ctx?.__finalizedDueToStructuredOutput) break;\n\n // Post-tool reflection (piggyback). Runs only when reasoning.reflection is\n // enabled and cadence matches. Errors are swallowed inside the node so the\n // main loop is never disturbed.\n if (reflectNode && resolvedReasoning?.reflection.enabled) {\n const cadence = resolvedReasoning.reflection.cadence;\n const refl = resolvedReasoning.reflection;\n // Single source of truth for throttling:\n // - maxPerRun caps reflections within THIS invoke (run-scoped counter).\n // - everyNTurns is enforced once, here, against the last reflection's turn.\n // - shouldRunReflection only decides cadence-shape (after_tool/on_branch/…).\n const lastTurn = ((state as any).reflections?.at(-1)?.turn ?? -Infinity) as number;\n const currentTurn = state.toolCallCount || 0;\n const budgetExceeded = typeof refl.maxPerRun === \"number\" && reflectionsThisRun >= refl.maxPerRun;\n const sinceLast = currentTurn - (Number.isFinite(lastTurn) ? lastTurn : -refl.everyNTurns);\n const cadenceGap = sinceLast < refl.everyNTurns;\n // R2: a custom shouldReflect predicate overrides the built-in cadence\n // decision (throttles still apply on top).\n const cadenceWantsIt = refl.shouldReflect\n ? !!refl.shouldReflect({ state: state as any, turn: currentTurn, trigger: cadence, ranToolsThisTurn: true })\n : shouldRunReflection(cadence, state as any, true);\n if (!budgetExceeded && !cadenceGap && cadenceWantsIt) {\n try {\n const patch = await reflectNode(state as any, cadence);\n if (patch && Object.keys(patch).length > 0) {\n state = { ...state, ...patch } as AgentState;\n reflectionsThisRun++;\n }\n } catch {\n // never fail the run due to reflection errors\n }\n }\n }\n }\n\n // Best-effort structured-output finalization when the loop exited without\n // a parsed output. For native strategy we only attempt a one-shot parse of\n // the last assistant message — no extra model calls. Retries are reserved\n // for the tool-based strategy, where the model can stubbornly skip calling\n // `response` and we need to nudge it.\n if (soManager && !(state as any).ctx?.__finalizedDueToStructuredOutput) {\n const lastForParse: any = state.messages[state.messages.length - 1];\n if (lastForParse?.role === \"assistant\") {\n const assistantText = extractMessageText(lastForParse);\n if (assistantText) {\n const parsed = soManager.parseFromContent(assistantText);\n if (parsed.success) {\n const ctx = {\n ...(state.ctx || {}),\n __finalizedDueToStructuredOutput: true,\n __structuredOutputParsed: parsed.data,\n };\n state = { ...state, ctx } as AgentState;\n }\n }\n }\n }\n\n if (\n soManager &&\n soManager.strategy.kind === \"tool_based\" &&\n !(state as any).ctx?.__finalizedDueToStructuredOutput\n ) {\n const maxPostLoopRetries = soManager.maxRetries;\n for (let postRetry = 0; postRetry < maxPostLoopRetries; postRetry++) {\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n const last: any = state.messages[state.messages.length - 1];\n const lastHasToolCalls = Array.isArray(last?.tool_calls) && last.tool_calls.length > 0;\n\n if (!lastHasToolCalls) {\n const isLastAttempt = postRetry === maxPostLoopRetries - 1;\n const nudge = soManager.buildNudgeMessage(isLastAttempt);\n state = { ...state, messages: [...state.messages, nudge as any] } as AgentState;\n }\n\n try {\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n const lastAfter: any = state.messages[state.messages.length - 1];\n const toolCallsAfter: any[] = Array.isArray(lastAfter?.tool_calls) ? lastAfter.tool_calls : [];\n if (toolCallsAfter.length > 0) {\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n emit?.({ type: \"metadata\", error: `Structured output force-finalize failed: ${errMsg}` });\n throw err;\n }\n }\n }\n\n if ((state as any).ctx?.__needsSummarization && !(opts as any)?.summarization) {\n throw new Error(\n \"Agent context exceeded the available budget before a final assistant response could be generated. Reduce tool response size or use createSmartAgent with summarization enabled.\"\n );\n }\n\n // Safety: detect abnormal loop exit where the last message is a tool response\n // but no valid exit condition is active (approval, cancellation, checkpoint,\n // structured-output finalize, summarization signal).\n // This catches edge cases like exhausted iteration budget or silent model errors\n // that would otherwise leak raw tool output to the caller.\n const lastAfterLoop = state.messages[state.messages.length - 1] as any;\n if (lastAfterLoop?.role === 'tool' && !pausedStage) {\n const isExpectedExit =\n state.ctx?.__awaitingApproval ||\n state.ctx?.__awaitingUserQuestion ||\n state.ctx?.__cancelled ||\n state.ctx?.__finalizedDueToStructuredOutput ||\n state.ctx?.__finalizedDueToToolLimit ||\n state.ctx?.__needsSummarization ||\n state.ctx?.__limitBreached;\n if (!isExpectedExit) {\n throw new Error(\n \"Agent loop terminated with a pending tool response but no subsequent model invocation. \" +\n \"This usually indicates a model provider error or exhausted iteration budget.\"\n );\n }\n }\n\n if (!pausedStage && typeof onStateChange === \"function\" && onStateChange(state)) {\n checkpointIfRequested(\"after_loop\");\n }\n\n return state;\n }\n\n const invokeAgent = async (input: AgentState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // Install custom token counter for the duration of this invoke. The\n // setter is process-wide but we restore it in `finally` below so nested\n // / concurrent invokes do not poison one another's counter.\n const userTokenCounter = (opts as any).tokenCounter as ((text: string) => number) | undefined;\n if (userTokenCounter) {\n // Lazy import to avoid circular deps when this module is preloaded.\n const { setTokenCounter } = await import(\"./utils/utilTokens.js\");\n setTokenCounter(userTokenCounter);\n }\n const callerOnEvent = config?.onEvent;\n const onEvent = askUserOnQuestion\n ? (event: SmartAgentEvent) => {\n if (event && (event as any).type === \"user_question\") {\n try { askUserOnQuestion(event as any); } catch (err) { console.warn('[agent-sdk] humanInTheLoop.askUser.onQuestion error:', err); }\n }\n callerOnEvent?.(event);\n }\n : callerOnEvent;\n const onProgress = config?.onProgress;\n const onStream = config?.onStream;\n const streamEnabled = config?.stream === true;\n const emit = (e: SmartAgentEvent) => { try { onEvent?.(e); } catch (err) { console.warn('[agent-sdk] onEvent callback error:', err); } };\n const emitProgress = (progress: { stage?: string; message?: string; percent?: number; detail?: any }) => {\n try { onProgress?.(progress); } catch (err) { console.warn('[agent-sdk] onProgress callback error:', err); }\n emit({ type: \"progress\", ...progress });\n };\n const traceSession = createTraceSession(opts);\n\n const ctx: Record<string, any> = {\n ...(input.ctx || {}),\n __onEvent: onEvent,\n __onProgress: emitProgress,\n __onStream: onStream,\n __streaming: streamEnabled,\n };\n if (traceSession) ctx.__traceSession = traceSession;\n if (config?.cancellationToken) ctx.__cancellationToken = config.cancellationToken;\n if ((config?.cancellationToken as AbortSignal | undefined)?.aborted !== undefined) {\n ctx.__abortSignal = config?.cancellationToken as AbortSignal;\n }\n if (config?.timeoutMs && config.timeoutMs > 0) {\n ctx.__deadline = Date.now() + config.timeoutMs;\n }\n\n const runtimeWithInvokeLimits: AgentRuntimeConfig = config?.limits\n ? { ...runtime, limits: { ...(runtime.limits || {}), ...config.limits } }\n : runtime;\n\n const initial: AgentState = {\n messages: input.messages || [],\n toolCallCount: input.toolCallCount || 0,\n toolCache: input.toolCache || {},\n toolHistory: input.toolHistory || [],\n metadata: input.metadata,\n ctx,\n pendingApprovals: input.pendingApprovals || [],\n pendingUserQuestions: input.pendingUserQuestions || [],\n agent: input.agent || runtimeWithInvokeLimits,\n usage: input.usage || { perRequest: [], totals: {} },\n };\n\n let res: AgentState;\n try {\n await startStreamingSession(traceSession, runtimeWithInvokeLimits);\n res = await runLoop(initial, config, emit);\n } catch (err: any) {\n await finalizeTraceSession(traceSession, {\n agentRuntime: runtime,\n status: \"error\",\n error: { message: err?.message, stack: err?.stack },\n });\n if (userTokenCounter) {\n const { setTokenCounter } = await import(\"./utils/utilTokens.js\");\n setTokenCounter(undefined);\n }\n throw err;\n } finally {\n // Restore default token counter as soon as the loop ends so subsequent\n // unrelated invokes do not inherit it.\n if (userTokenCounter) {\n try {\n const { setTokenCounter } = await import(\"./utils/utilTokens.js\");\n setTokenCounter(undefined);\n } catch {\n // ignore\n }\n }\n }\n\n await finalizeTraceSession(traceSession, {\n agentRuntime: res.agent || runtime,\n status: \"success\",\n });\n\n // The base loop can exit purely to signal SmartAgent that the conversation\n // needs summarization before the model can be invoked again. In that case the\n // last assistant message in state can be a synthetic summarize_context call\n // produced by the previous summarization pass — it is internal runtime\n // metadata, not a real terminal answer. Treat this as \"no final answer yet\"\n // and let the SmartAgent driver loop continue without leaking the synthetic\n // marker as visible assistant content / finalAnswer event.\n const isTransientSummarizationExit = !!(res as any).ctx?.__needsSummarization;\n const finalAssistantMsg = isTransientSummarizationExit\n ? undefined\n : getLastAssistantMessage(res.messages);\n const finalIsSyntheticSummary = !isTransientSummarizationExit\n && finalAssistantMsg\n && isSyntheticSummaryMessage(finalAssistantMsg);\n const content = (isTransientSummarizationExit || finalIsSyntheticSummary)\n ? \"\"\n : extractMessageText(finalAssistantMsg);\n\n let parsed: TOutput | undefined = undefined;\n let outputError: StructuredOutputError | undefined = undefined;\n\n if (soManager) {\n if ((res as any).ctx?.__structuredOutputParsed) {\n // Primary path: tool-based finalization succeeded\n parsed = (res as any).ctx.__structuredOutputParsed as TOutput;\n } else if (content) {\n // Fallback: try to parse structured output from assistant message content\n const fallbackResult = soManager.parseFromContent(content);\n if (fallbackResult.success) {\n parsed = fallbackResult.data;\n } else {\n outputError = fallbackResult.error;\n }\n } else if (!isTransientSummarizationExit) {\n // No content at all — report no_output error\n const noResult = soManager.noOutputResult(1);\n if (!noResult.success) {\n outputError = noResult.error;\n }\n }\n }\n\n // Only emit a final answer event when the loop actually produced one.\n // Suppress when we exited transiently for summarization (SmartAgent will\n // retry) or when the only candidate is the synthetic summary marker.\n if (!isTransientSummarizationExit && !finalIsSyntheticSummary) {\n emit({ type: \"finalAnswer\", content });\n if (streamEnabled && content) {\n onStream?.({ text: content, isFinal: true });\n emit({ type: \"stream\", text: content, isFinal: true });\n }\n }\n\n return {\n content,\n output: parsed as TOutput | undefined,\n outputError,\n metadata: { usage: (res as any).usage },\n messages: res.messages,\n state: res as AgentState,\n };\n };\n\n const snapshotState = (state: AgentState, options?: SnapshotOptions) => captureSnapshot(state, options);\n\n const resumeAgent = async (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => {\n const restoredState = restoreSnapshot(snapshot, restoreOptions);\n return invokeAgent(restoredState, config);\n };\n\n const resolveToolApproval = (state: AgentState, resolution: ToolApprovalResolution) =>\n resolveToolApprovalState(state, resolution);\n\n const resolveUserQuestion = (state: AgentState, resolution: UserQuestionResolution) =>\n resolveUserQuestionState(state, resolution);\n\n const instance: AgentInstance<TOutput> = {\n invoke: invokeAgent,\n snapshot: snapshotState,\n resume: resumeAgent,\n resolveToolApproval,\n resolveUserQuestion,\n asTool: ({ toolName, description, inputDescription }: { toolName: string; description?: string; inputDescription?: string }) => {\n const schema = z.object({ input: z.string().describe(inputDescription || \"Input for delegated agent\") });\n const delegatedTool: any = createTool({\n name: toolName,\n description: description || `Delegate task to agent ${opts.name || 'Agent'}`,\n schema,\n func: async ({ input }) => {\n // Read parent runtime delegation policy + current depth from the\n // injected _stateRef. The toolsNode wires this on every call.\n const ref: any = delegatedTool._stateRef;\n const parentCtx: any = ref.ctx || {};\n const parentMessages: any[] = Array.isArray(ref.messages) ? ref.messages : [];\n const parentRuntime: any = ref.parentRuntime;\n // The parent runtime is whichever agent is currently executing.\n // Pull its resolved delegation policy if available (SmartAgent only).\n const resolvedSmart = parentRuntime?.smart || (opts as any).__resolvedSmart;\n const delegationPolicy = resolvedSmart?.delegation || {\n mode: \"role_based\",\n maxDelegationDepth: 2,\n maxChildCalls: 4,\n childContextPolicy: \"scoped\",\n };\n const currentDepth = Number(parentCtx.__delegationDepth) || 0;\n if (delegationPolicy.mode === \"off\") {\n return { error: \"Delegation disabled by runtime policy.\" };\n }\n if (currentDepth >= delegationPolicy.maxDelegationDepth) {\n return {\n error: `Delegation depth limit reached (${delegationPolicy.maxDelegationDepth}). Refusing nested call.`,\n };\n }\n parentCtx.__delegatedCallCount = (parentCtx.__delegatedCallCount || 0) + 1;\n if (parentCtx.__delegatedCallCount > delegationPolicy.maxChildCalls) {\n return {\n error: `Child-call budget exhausted (${delegationPolicy.maxChildCalls}).`,\n };\n }\n\n // Apply childContextPolicy when seeding the child agent.\n let childMessages: any[];\n switch (delegationPolicy.childContextPolicy) {\n case \"full\":\n childMessages = [...parentMessages, { role: \"user\", content: input } as any];\n break;\n case \"scoped\": {\n // Last assistant message + last user task + the explicit delegation input.\n const systemPrefix = parentMessages[0]?.role === \"system\" ? [parentMessages[0]] : [];\n const lastUser = [...parentMessages].reverse().find((m) => m?.role === \"user\");\n childMessages = [\n ...systemPrefix,\n ...(lastUser ? [lastUser] : []),\n { role: \"user\", content: input } as any,\n ];\n break;\n }\n case \"minimal\":\n default:\n childMessages = [{ role: \"user\", content: input } as any];\n }\n\n const childCtx = { __delegationDepth: currentDepth + 1 };\n const res = await instance.invoke({ messages: childMessages, ctx: childCtx } as any);\n return {\n content: res.content,\n output: res.output,\n summary: res.state?.summaries?.[res.state.summaries.length - 1],\n };\n }\n });\n // Eagerly initialize _stateRef so the parent's toolsNode (which only\n // writes into existing _stateRef objects) can deposit `parentRuntime`,\n // `ctx`, and `messages` before the delegation tool runs.\n delegatedTool._stateRef = {};\n return delegatedTool;\n },\n asHandoff: ({ toolName, description, schema }: { toolName?: string; description?: string; schema?: ZodSchema<any>; }): HandoffDescriptor => {\n const finalName = toolName || `handoff_to_${runtime.name || 'agent'}`;\n const zschema = schema || z.object({ reason: z.string().describe('Reason for handoff') });\n createTool({\n name: finalName,\n description: description || `Handoff control to agent ${runtime.name || 'Agent'}`,\n schema: zschema,\n func: async (_args: any) => ({ __handoff: { runtime } })\n });\n return { type: 'handoff', toolName: finalName, description: description || '', schema: zschema, target: instance } as any;\n },\n __runtime: runtime,\n };\n\n if (opts.handoffs && Array.isArray(opts.handoffs)) {\n const handoffTools = opts.handoffs.map(h => {\n const schema = h.schema || z.object({ reason: z.string().describe('Reason for handoff') });\n return createTool({\n name: h.toolName,\n description: h.description || `Handoff to ${h.target.__runtime.name || 'agent'}`,\n schema,\n func: async (_args: any) => ({ __handoff: { runtime: h.target.__runtime } })\n });\n });\n runtime.tools = [...runtime.tools, ...handoffTools];\n }\n\n return instance;\n}\n","/**\n * Detects synthetic summarization messages injected by the contextSummarize node.\n * Shared across agent.ts, decisions.ts, and contextSummarize.ts to avoid duplication.\n */\nexport function isSyntheticSummaryMessage(message: any): boolean {\n if (!message) return false;\n if (message.role === 'tool' && message.name === 'summarize_context') {\n return true;\n }\n\n if (message.role === 'assistant' && Array.isArray(message.tool_calls)) {\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n }\n\n return false;\n}\n","import type { ZodSchema } from \"zod\";\nimport type {\n StructuredOutputStrategy,\n StructuredOutputResult,\n StructuredOutputError,\n StructuredOutputManagerConfig,\n} from \"./types.js\";\n// formatZodError available from ./types.js for strategy implementations\nimport type { ToolBasedStrategy } from \"./toolStrategy.js\";\nimport type { NativeJsonSchemaStrategy } from \"./nativeStrategy.js\";\nimport type { ToolInterface } from \"../types.js\";\n\n/**\n * Centralized manager for structured output across both base Agent and SmartAgent.\n *\n * Responsibilities:\n * - Prepare tools or response_format depending on the resolved strategy\n * - Build system prompt hints tailored to the strategy\n * - Build nudge/correction prompts for retries\n * - Parse final output from tool result or assistant content\n * - Report structured errors (never silently swallow)\n */\nexport class StructuredOutputManager<T> {\n readonly strategy: StructuredOutputStrategy;\n readonly schema: ZodSchema<T>;\n readonly maxRetries: number;\n\n constructor(\n schema: ZodSchema<T>,\n strategy: StructuredOutputStrategy,\n config?: StructuredOutputManagerConfig,\n ) {\n this.schema = schema;\n this.strategy = strategy;\n this.maxRetries = config?.maxRetries ?? 2;\n }\n\n // --- Setup Phase ---\n\n /**\n * Get the `response` tool for tool-based strategy.\n * Returns undefined for native strategy (no tool needed).\n */\n getResponseTool(): ToolInterface | undefined {\n if (this.strategy.kind !== \"tool_based\") return undefined;\n return (this.strategy as ToolBasedStrategy).createResponseTool(this.schema);\n }\n\n /**\n * Get response_format config for native strategy.\n * Returns undefined for tool-based strategy.\n */\n getResponseFormat(): Record<string, any> | undefined {\n if (this.strategy.kind !== \"native\") return undefined;\n return (this.strategy as NativeJsonSchemaStrategy).buildResponseFormat(this.schema);\n }\n\n /**\n * Build the system prompt hint that tells the model how to produce structured output.\n */\n buildSystemPromptHint(): string {\n if (this.strategy.kind === \"native\") {\n return [\n \"A structured output schema is active.\",\n \"Your response MUST be valid JSON matching the output schema.\",\n \"Do NOT wrap the JSON in code fences or add any text before/after it.\",\n ].join(\"\\n\");\n }\n\n // tool_based\n return [\n \"A structured output schema is active.\",\n \"Do NOT output the final JSON directly as an assistant message.\",\n \"When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).\",\n \"Call it exactly once then STOP producing further assistant messages.\",\n ].join(\"\\n\");\n }\n\n /**\n * Build a nudge message for when the model didn't produce structured output.\n * Used by the agent loop when it needs to retry.\n */\n buildNudgeMessage(isLastAttempt: boolean): { role: string; content: string } {\n if (this.strategy.kind === \"native\") {\n return {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST respond with valid JSON matching the schema.\",\n \"Do NOT include any text outside the JSON object.\",\n isLastAttempt ? \"This is your FINAL attempt. Produce the JSON NOW.\" : \"\",\n ].filter(Boolean).join(\"\\n\"),\n };\n }\n\n // tool_based\n return {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST now call tool `response` with the final JSON object that matches the schema.\",\n \"Do not write the JSON in the assistant message.\",\n \"Call `response` exactly once, then stop.\",\n isLastAttempt ? \"Do NOT call any other tools. Produce the response NOW based on whatever information you have gathered so far.\" : \"\",\n ].filter(Boolean).join(\"\\n\"),\n };\n }\n\n /**\n * Build a correction message when schema validation failed.\n */\n buildCorrectionMessage(error: StructuredOutputError, _previousAttempt?: unknown): { role: string; content: string } {\n if (error.fieldErrors && error.fieldErrors.length > 0) {\n const fieldIssues = error.fieldErrors\n .map((f) => `- \"${f.path}\": ${f.message} (received: ${JSON.stringify(f.received)})`)\n .join(\"\\n\");\n\n const action = this.strategy.kind === \"native\"\n ? \"Please output corrected JSON matching the schema.\"\n : \"Please call `response` again with corrected values matching the schema.\";\n\n return {\n role: \"system\",\n content: [\n \"Your previous structured output had validation errors:\",\n fieldIssues,\n \"\",\n action,\n ].join(\"\\n\"),\n };\n }\n\n // Generic correction\n return this.buildNudgeMessage(false);\n }\n\n // --- Parse Phase ---\n\n /**\n * Try to parse structured output from the tool-based finalization result.\n * Called when __structuredOutputParsed is available in ctx.\n */\n parseFromToolResult(data: unknown): StructuredOutputResult<T> {\n return { success: true, data: data as T, attempts: 1 };\n }\n\n /**\n * Try to parse structured output from assistant message content.\n * For native strategy: content should be valid JSON.\n * For tool-based strategy: last-resort fallback extraction from text.\n */\n parseFromContent(content: string): StructuredOutputResult<T> {\n if (this.strategy.kind === \"native\") {\n const result = (this.strategy as NativeJsonSchemaStrategy).extractOutput(content, this.schema);\n if (\"data\" in result) {\n return { success: true, data: result.data, attempts: 1 };\n }\n return { success: false, error: result.error, attempts: 1, rawContent: content };\n }\n\n // tool_based fallback\n const result = (this.strategy as ToolBasedStrategy).extractFromText(content, this.schema);\n if (\"data\" in result) {\n return { success: true, data: result.data, attempts: 1 };\n }\n return { success: false, error: result.error, attempts: 1, rawContent: content };\n }\n\n /**\n * Create a \"no output\" error result.\n */\n noOutputResult(attempts: number, rawContent?: string): StructuredOutputResult<T> {\n return {\n success: false,\n error: {\n type: \"no_output\",\n message: \"Model did not produce structured output after all retry attempts.\",\n rawContent,\n },\n attempts,\n rawContent,\n };\n }\n\n /**\n * Create a \"max retries\" error result.\n */\n maxRetriesResult(lastError: StructuredOutputError, attempts: number, rawContent?: string): StructuredOutputResult<T> {\n return {\n success: false,\n error: {\n ...lastError,\n type: \"max_retries\",\n message: `Structured output failed after ${attempts} attempts: ${lastError.message}`,\n },\n attempts,\n rawContent,\n };\n }\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\nexport function createAgentNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n // Prefer dynamic runtime config from state.agent, fallback to initial opts\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n systemPrompt: opts.systemPrompt,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: opts.useTodoList,\n outputSchema: (opts as any).outputSchema,\n };\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n // 3) Prepend a single, fresh system prompt for this turn only\n const structuredOutputHint = runtime.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const systemMsg = {\n role: 'system',\n content: buildSystemPrompt(\n [runtime.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n runtime.useTodoList === true,\n runtime.name || \"Agent\",\n runtime.todoListPrompt,\n )\n } as any;\n const messages = [systemMsg, ...state.messages];\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const promptMessages = [systemMsg, ...state.messages];\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(promptMessages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n let response: any;\n try {\n response = await modelWithTools.invoke(promptMessages);\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: promptMessages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...messages,\n response as any,\n ];\n\n // ---- Usage tracking (per-request) ----\n const rawUsage = (response as any)?.usage\n || (response as any)?.usage_metadata\n || (response as any)?.response_metadata?.token_usage\n || (response as any)?.response_metadata?.tokenUsage\n || (response as any)?.response_metadata?.usage\n || (response as any)?.response_metadata?.usage_metadata\n || (response as any)?.response_metadata?.usageMetadata;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const providerName = getProviderName((runtime as any).model || (opts as any).model);\n const durationMs = Date.now() - start;\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes,\n model: modelName,\n provider: providerName,\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n // Normalize token counts to aggregate totals\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n // Attach back so next nodes see updated state\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","// Lightweight message helpers to avoid hard dependency on LangChain\nimport type {\n SmartAgentOptions,\n SmartState,\n BaseMessage,\n SmartAgentEvent,\n StructuredSummary,\n SummarizationEvent,\n SummaryIntegrityCheck,\n} from \"../types.js\";\nimport { countApproxTokens, countMessagesTokens } from \"../utils/utilTokens.js\";\nimport { isSyntheticSummaryMessage } from \"../utils/syntheticMessages.js\";\nimport { recordTraceEvent, sanitizeTracePayload } from \"../utils/tracing.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { renderStructuredSummary } from \"../smart/contextPolicy.js\";\nimport { renderRetainedToolMessage, resolveSummarizationRetention, summarizeObject } from \"../smart/toolResponses.js\";\n\n// Helper for lightweight message construction\nconst systemMessage = (content: string) => ({ role: 'system', content });\nconst humanMessage = (content: string) => ({ role: 'user', content });\n\n/**\n * Validates message sequence to ensure OpenAI API compatibility.\n * Every tool message must follow an assistant message with a matching tool_call.\n * This prevents \"messages with role 'tool' must be a response to a preceeding message with 'tool_calls'\" errors.\n */\nfunction validateMessageSequence(messages: BaseMessage[]): BaseMessage[] {\n const validated: BaseMessage[] = [];\n const pendingToolCallIds = new Set<string>();\n \n for (const m of messages) {\n if (m.role === 'assistant') {\n // Clear any pending tool calls when we see a new assistant message without tool_calls\n if (!m.tool_calls || m.tool_calls.length === 0) {\n pendingToolCallIds.clear();\n } else {\n // Register new tool calls\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) pendingToolCallIds.add(tc.id);\n });\n }\n validated.push(m);\n } else if (m.role === 'tool') {\n const toolCallId = m.tool_call_id;\n // Only include tool messages that have a pending (expected) tool_call_id\n if (toolCallId && pendingToolCallIds.has(toolCallId)) {\n pendingToolCallIds.delete(toolCallId);\n validated.push(m);\n }\n // Otherwise, this is an orphan tool message - skip it\n } else {\n // user, system messages - always include\n validated.push(m);\n }\n }\n \n return validated;\n}\n\n/** Extracts a JSON object from text, handling markdown code fences or raw JSON. */\nfunction extractJsonObject(text: string): string | null {\n const fenced = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (fenced?.[1]) return fenced[1].trim();\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start >= 0 && end > start) {\n return text.slice(start, end + 1);\n }\n return null;\n}\n\nfunction normalizeStructuredSummary(input: any, fallbackText: string): StructuredSummary {\n const summary: StructuredSummary = {\n stable_facts: Array.isArray(input?.stable_facts)\n ? input.stable_facts\n .filter((fact: any) => fact && typeof fact === \"object\")\n .map((fact: any) => ({\n key: String(fact.key || \"unknown\"),\n value: String(fact.value || \"\"),\n confidence: typeof fact.confidence === \"number\" ? fact.confidence : 0.7,\n source: fact.source ? String(fact.source) : undefined,\n }))\n : [],\n active_goals: Array.isArray(input?.active_goals) ? input.active_goals.map((goal: any) => String(goal)) : [],\n open_questions: Array.isArray(input?.open_questions) ? input.open_questions.map((question: any) => String(question)) : [],\n discarded_obsolete: Array.isArray(input?.discarded_obsolete || input?.obsolete_discarded)\n ? (input.discarded_obsolete || input.obsolete_discarded).map((item: any) => String(item))\n : [],\n rawSummary: typeof input?.rawSummary === \"string\" ? input.rawSummary : fallbackText,\n };\n\n if (summary.stable_facts.length === 0 && fallbackText) {\n const importantLines = fallbackText\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .slice(0, 8);\n summary.stable_facts = importantLines.map((line, index) => ({\n key: `fact_${index + 1}`,\n value: line,\n confidence: 0.5,\n }));\n }\n\n return summary;\n}\n\nfunction normalizeFactKeySegment(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n || \"item\";\n}\n\nfunction extractCanonicalFacts(messages: BaseMessage[]): StructuredSummary[\"stable_facts\"] {\n const facts = new Map<string, StructuredSummary[\"stable_facts\"][number]>();\n\n for (const message of messages) {\n const content = typeof message.content === \"string\"\n ? message.content\n : Array.isArray(message.content)\n ? message.content.map((part: any) => part?.text ?? part?.content ?? String(part ?? \"\")).join(\"\\n\")\n : \"\";\n if (!content) continue;\n\n const lines = content.split(\"\\n\").map((line) => line.trim()).filter(Boolean);\n for (const line of lines) {\n if (!/^[A-Z0-9_]+\\|/.test(line) || !line.includes(\"=\")) continue;\n\n const segments = line.split(\"|\").map((segment) => segment.trim()).filter(Boolean);\n const label = segments[0];\n const entries = segments.slice(1)\n .map((segment) => {\n const eqIndex = segment.indexOf(\"=\");\n if (eqIndex <= 0) return null;\n return {\n key: segment.slice(0, eqIndex).trim(),\n value: segment.slice(eqIndex + 1).trim(),\n };\n })\n .filter((entry): entry is { key: string; value: string } => Boolean(entry?.key));\n if (entries.length === 0) continue;\n\n const identifier = entries.find((entry) => [\"code\", \"id\", \"project\", \"name\", \"key\"].includes(entry.key.toLowerCase()))?.value;\n const keyPrefix = [normalizeFactKeySegment(label), identifier ? normalizeFactKeySegment(identifier) : undefined]\n .filter(Boolean)\n .join(\".\");\n\n for (const entry of entries) {\n const normalizedEntryKey = normalizeFactKeySegment(entry.key);\n const factKey = keyPrefix ? `${keyPrefix}.${normalizedEntryKey}` : `${normalizeFactKeySegment(label)}.${normalizedEntryKey}`;\n facts.set(factKey, {\n key: factKey,\n value: entry.value,\n confidence: 0.98,\n source: \"canonical_tool_output\",\n });\n }\n }\n }\n\n return [...facts.values()];\n}\n\nfunction isSummarizedToolPlaceholder(content: BaseMessage[\"content\"]): boolean {\n return typeof content === \"string\"\n && (\n content === \"SUMMARIZED\"\n || content.startsWith(\"SUMMARIZED_TOOL_RESPONSE\")\n || content.startsWith(\"ARCHIVED_TOOL_RESPONSE\")\n || content.startsWith(\"STRUCTURED_TOOL_RESPONSE\")\n || content.startsWith(\"DROPPED_TOOL_RESPONSE\")\n );\n}\n\nfunction findToolHistoryEntry(state: SmartState, toolCallId?: string, toolName?: string) {\n const entries = [\n ...(state.toolHistory || []),\n ...(state.toolHistoryArchived || []),\n ];\n\n if (toolCallId) {\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index];\n if (entry?.tool_call_id === toolCallId) {\n return entry;\n }\n }\n }\n\n if (!toolName) {\n return undefined;\n }\n\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index];\n if (entry?.toolName === toolName) {\n return entry;\n }\n }\n\n return undefined;\n}\n\nfunction mergeStableFacts(\n summary: StructuredSummary,\n additionalFacts: StructuredSummary[\"stable_facts\"],\n): StructuredSummary {\n if (additionalFacts.length === 0) return summary;\n\n const merged = new Map(summary.stable_facts.map((fact) => [fact.key, fact]));\n for (const fact of additionalFacts) {\n const existing = merged.get(fact.key);\n if (!existing || (fact.confidence || 0) >= (existing.confidence || 0)) {\n merged.set(fact.key, fact);\n }\n }\n\n return {\n ...summary,\n stable_facts: [...merged.values()],\n };\n}\n\nfunction runIntegrityCheck(previous: StructuredSummary | undefined, current: StructuredSummary): SummaryIntegrityCheck {\n const notes: string[] = [];\n const previousKeys = new Set((previous?.stable_facts || []).map((fact) => fact.key));\n const currentKeys = new Set(current.stable_facts.map((fact) => fact.key));\n const obsoleteKeys = new Set(current.discarded_obsolete);\n const criticalFactLoss = [...previousKeys].some((key) => !obsoleteKeys.has(key) && !currentKeys.has(key));\n const obsoleteFactRevived = current.stable_facts.some((fact) => obsoleteKeys.has(fact.key));\n\n if (criticalFactLoss) {\n notes.push(\"Missing previously retained facts; merged forward during integrity repair.\");\n }\n if (obsoleteFactRevived) {\n notes.push(\"Obsolete facts reappeared; removed during integrity repair.\");\n }\n\n return {\n passed: !criticalFactLoss && !obsoleteFactRevived,\n criticalFactLoss,\n obsoleteFactRevived,\n notes,\n };\n}\n\nfunction repairStructuredSummary(previous: StructuredSummary | undefined, current: StructuredSummary, integrity: SummaryIntegrityCheck): StructuredSummary {\n if (!previous) return current;\n const nextFacts = [...current.stable_facts];\n if (integrity.criticalFactLoss) {\n const existingKeys = new Set(nextFacts.map((fact) => fact.key));\n for (const fact of previous.stable_facts) {\n if (!existingKeys.has(fact.key) && !current.discarded_obsolete.includes(fact.key)) {\n nextFacts.push(fact);\n }\n }\n }\n const filteredFacts = integrity.obsoleteFactRevived\n ? nextFacts.filter((fact) => !current.discarded_obsolete.includes(fact.key))\n : nextFacts;\n return { ...current, stable_facts: filteredFacts };\n}\n\n/**\n * Creates the summarization node.\n * \n * Logic:\n * 1. Check if summarization is enabled.\n * 2. Convert current conversation history into a text suitable for summarization.\n * 3. Invoke the model to generate a summary of the conversation.\n * 4. Rewrite the message history:\n * - All tool messages (role='tool') have their content replaced with \"SUMMARIZED\".\n * - A new assistant message calling 'summarize_context' is appended.\n * - A new tool message with the summary content is appended.\n */\nexport function createContextSummarizeNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n const config = resolved.summarization;\n if (!config.enable) return {};\n\n // Prefer the live runtime model (state.agent.model) so handoffs and\n // per-invoke model overrides also reach the summarizer. Falls back to the\n // factory-time model when no runtime is attached.\n const model = (state.agent as any)?.model || (opts as any).model;\n const messages = state.messages || [];\n\n // Get onEvent and traceSession from state context\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n\n // Check if there are any tool messages that can be compressed.\n // Critical tools and per-tool overrides set to keep_full are skipped.\n const compressableMessages = messages.filter(\n (m) => {\n if (m.role !== 'tool') return false;\n if (isSummarizedToolPlaceholder(m.content)) return false;\n if (isSyntheticSummaryMessage(m)) return false;\n const policy = resolveSummarizationRetention(m.name || '', resolved);\n if (policy === 'keep_full') return false;\n return true;\n },\n );\n if (compressableMessages.length === 0) {\n // Nothing to compress. If we summarize, we only ADD tokens (summary).\n // Abort to prevent infinite loops or growing context.\n return {};\n }\n\n // Calculate token count before summarization\n const tokenCountBefore = countMessagesTokens(messages);\n\n // 1. Generate Summary\n // We convert current messages to a simple text format for the model to summarize.\n // IMPORTANT: We must truncate the conversation to fit within summaryPromptMaxTokens\n // to avoid \"input too large\" errors from the model.\n \n // Build conversation text from RECENT messages, respecting token budget\n const summaryPromptMaxTokens = config.summaryPromptMaxTokens;\n // Reserve ~500 tokens for the system prompt and instructions\n const availableTokensForConversation = summaryPromptMaxTokens - 500;\n \n // Build messages from newest to oldest, stopping when we hit the budget\n const messageTexts: string[] = [];\n let accumulatedTokens = 0;\n \n // Process messages from end to start (most recent first)\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (isSyntheticSummaryMessage(m) || isSyntheticSummaryMessage(m)) {\n continue;\n }\n let content = \"\";\n if (typeof m.content === \"string\") content = m.content;\n else if (Array.isArray(m.content)) {\n content = m.content.map((c: any) => c.text || JSON.stringify(c)).join(\" \");\n }\n\n // If this is a tool message that was already summarized in a previous pass,\n // try to recover the original output from toolHistory so the summarizer\n // can produce a meaningful summary instead of summarizing placeholders.\n if (m.role === 'tool' && isSummarizedToolPlaceholder(content)) {\n const historyEntry = findToolHistoryEntry(state, m.tool_call_id, m.name);\n if (historyEntry) {\n const original = historyEntry.rawOutput ?? historyEntry.output;\n content = typeof original === 'string' ? original : JSON.stringify(original);\n } else {\n // No history entry found — use the summary hint from the placeholder\n // (already present in content), which is better than nothing.\n }\n }\n \n // Truncate individual message content if it's too large (e.g., huge tool outputs)\n const maxContentLength = 2000; // ~500 tokens per message max\n if (content.length > maxContentLength) {\n content = content.substring(0, maxContentLength) + \"... [TRUNCATED]\";\n }\n \n let prefix = `${m.role.toUpperCase()}`;\n if (m.name) prefix += ` (${m.name})`;\n \n const messageText = `${prefix}: ${content}`;\n const messageTokens = countApproxTokens(messageText);\n \n if (accumulatedTokens + messageTokens > availableTokensForConversation) {\n // We've hit our budget, stop adding more messages\n // Add a note that earlier messages were omitted\n messageTexts.unshift(\"[Earlier conversation history omitted for brevity]\");\n break;\n }\n \n messageTexts.unshift(messageText);\n accumulatedTokens += messageTokens;\n }\n \n const conversationText = messageTexts.join(\"\\n\\n\");\n const canonicalFacts = extractCanonicalFacts(compressableMessages);\n\n const previousSummary = Array.isArray(state.summaries) && state.summaries.length > 0\n ? state.summaries[state.summaries.length - 1]\n : \"\";\n const previousStructuredSummary = Array.isArray(state.summaryRecords) && state.summaryRecords.length > 0\n ? state.summaryRecords[state.summaryRecords.length - 1]\n : undefined;\n\n const defaultPrompt = `Summarize the conversation into strict JSON.\n\nReturn exactly one JSON object with this schema:\n{\n \"stable_facts\": [{ \"key\": string, \"value\": string, \"confidence\": number }],\n \"active_goals\": [string],\n \"open_questions\": [string],\n \"discarded_obsolete\": [string],\n \"rawSummary\": string\n}\n\nRules:\n- Keep stable_facts only for facts that future turns must remember.\n- Put invalidated or superseded fact keys in discarded_obsolete.\n- Preserve active_goals still relevant to the user.\n- Preserve unresolved questions.\n- Do not include prose outside JSON.\n- Target compression ratio: ${config.summaryCompressionRatioTarget}.\n- Summary mode: ${config.summaryMode}.\n\nPrevious summary text:\n${previousSummary || \"(none)\"}\n\nPrevious structured summary:\n${previousStructuredSummary ? JSON.stringify(previousStructuredSummary) : \"(none)\"}\n\nConversation:\n${conversationText}\n\nCanonical facts extracted from tool outputs:\n${canonicalFacts.length > 0 ? canonicalFacts.map((fact) => `- ${fact.key}: ${fact.value}`).join(\"\\n\") : \"(none)\"}`;\n\n const template = config.promptTemplate || defaultPrompt;\n const promptBody = template\n .replace(/\\{\\{\\s*conversation\\s*\\}\\}/g, conversationText)\n .replace(/\\{\\{\\s*previousSummary\\s*\\}\\}/g, previousSummary || \"\");\n\n const summaryPrompt = [\n systemMessage(\"You are a helpful assistant that summarizes conversation history efficiently. Return strict JSON only.\"),\n humanMessage(promptBody)\n ];\n\n // Estimate input tokens for the summarization prompt (fallback if model doesn't provide usage)\n const inputTokensEstimate = countApproxTokens(summaryPrompt.map(m => m.content).join(\"\\n\"));\n\n let summaryText = \"Summary unavailable.\";\n let structuredSummary: StructuredSummary | undefined;\n let integrity: SummaryIntegrityCheck | undefined;\n let outputTokensEstimate = 0;\n let durationMs = 0;\n let inputTokensActual: number | undefined;\n let outputTokensActual: number | undefined;\n let cachedInputTokens: number | undefined;\n let totalTokensActual: number | undefined;\n \n const startTime = Date.now();\n try {\n if (!model || typeof model.invoke !== \"function\") {\n throw new Error(\"Summarization model is unavailable.\");\n }\n const response = await model.invoke(summaryPrompt);\n durationMs = Date.now() - startTime;\n summaryText = typeof response.content === \"string\" \n ? response.content \n : Array.isArray(response.content) \n ? response.content.map((c: any) => c.text || \"\").join(\"\")\n : JSON.stringify(response.content);\n outputTokensEstimate = countApproxTokens(summaryText);\n\n const jsonText = extractJsonObject(summaryText);\n const parsed = jsonText ? JSON.parse(jsonText) : undefined;\n structuredSummary = normalizeStructuredSummary(parsed, summaryText);\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = config.integrityCheck\n ? runIntegrityCheck(previousStructuredSummary, structuredSummary)\n : { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [] };\n if (integrity && !integrity.passed) {\n structuredSummary = repairStructuredSummary(previousStructuredSummary, structuredSummary, integrity);\n integrity = { ...integrity, passed: true };\n }\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Extract actual token usage from model response if available\n const rawUsage = (response as any)?.usage \n || (response as any)?.response_metadata?.token_usage \n || (response as any)?.response_metadata?.tokenUsage\n || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n if (normalized) {\n inputTokensActual = normalized.prompt_tokens;\n outputTokensActual = normalized.completion_tokens;\n totalTokensActual = normalized.total_tokens;\n cachedInputTokens = normalized.prompt_tokens_details?.cached_tokens;\n }\n } catch (err: any) {\n durationMs = Date.now() - startTime;\n structuredSummary = normalizeStructuredSummary(undefined, previousSummary || conversationText.slice(0, 800));\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [\"Fallback summary generated locally.\"] };\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Emit error event for onEvent\n const errorEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter: tokenCountBefore,\n structuredSummary,\n integrity,\n };\n onEvent?.(errorEvent);\n \n // Record trace event for error\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization Failed\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"error\",\n durationMs,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: sanitizeTracePayload(summaryPrompt),\n });\n // Continue with local fallback summary to avoid losing the compaction step.\n }\n\n // 2. Build a map of tool_call_id -> assistant message index\n // This ensures we only keep tool messages that have a matching assistant with tool_calls\n const toolCallIdToAssistantIdx = new Map<string, number>();\n messages.forEach((m, idx) => {\n if (m.role === 'assistant' && m.tool_calls && Array.isArray(m.tool_calls)) {\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) {\n toolCallIdToAssistantIdx.set(tc.id, idx);\n }\n });\n }\n });\n\n // 2b. Identify tool_call_ids from the LAST assistant turn so we can protect\n // their tool responses from being summarized. The agent needs to see its most\n // recent tool outputs to reason correctly. We only apply this protection when\n // there are OTHER older compressable messages — otherwise (e.g. first turn)\n // we allow normal summarization to proceed.\n const protectedToolCallIds = new Set<string>();\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role === 'assistant' && Array.isArray(m.tool_calls) && m.tool_calls.length > 0) {\n const thisToolCallIds = new Set(m.tool_calls.map((tc: any) => tc.id).filter(Boolean));\n const otherCompressable = compressableMessages.filter(\n (cm) => !thisToolCallIds.has(cm.tool_call_id)\n );\n if (otherCompressable.length > 0) {\n for (const tc of m.tool_calls) {\n if (tc.id) protectedToolCallIds.add(tc.id);\n }\n }\n break;\n }\n }\n\n // 3. Rewrite tool messages per resolved retention policy.\n // Orphan tool messages (no matching assistant tool_call) are removed.\n // The last assistant turn's tool responses are always protected so the agent\n // can reason about its latest tool outputs.\n const archivedExecutions: SmartState[\"toolHistoryArchived\"] = [...(state.toolHistoryArchived || [])];\n const archivedIds = new Set(archivedExecutions.map((entry) => entry?.executionId).filter(Boolean));\n const newMessages = messages.map((m) => {\n if (m.role === 'tool') {\n if (isSyntheticSummaryMessage(m)) {\n return m;\n }\n const toolCallId = m.tool_call_id;\n\n if (!toolCallId || !toolCallIdToAssistantIdx.has(toolCallId)) {\n return null;\n }\n\n if (isSummarizedToolPlaceholder(m.content)) return m;\n if (toolCallId && protectedToolCallIds.has(toolCallId)) return m;\n\n const toolName = m.name || '';\n const policy = resolveSummarizationRetention(toolName, resolved);\n if (policy === 'keep_full') return m;\n\n const historyEntry = findToolHistoryEntry(state, toolCallId, toolName);\n const rawOutput = historyEntry?.rawOutput ?? historyEntry?.output ?? m.content;\n const executionId = historyEntry?.executionId;\n const prebuiltSummary = historyEntry?.summary || summarizeObject(rawOutput);\n\n if ((policy === 'summarize_archive' || policy === 'drop') && historyEntry && executionId && !archivedIds.has(executionId)) {\n archivedExecutions.push({\n ...historyEntry,\n summarized: true,\n retentionPolicy: policy,\n archiveId: executionId,\n summary: prebuiltSummary,\n });\n archivedIds.add(executionId);\n }\n\n return {\n ...m,\n content: renderRetainedToolMessage({\n policy,\n rawOutput,\n toolName,\n toolCallId,\n executionId,\n prebuiltSummary,\n }),\n };\n }\n return m;\n }).filter((m): m is NonNullable<typeof m> => m !== null);\n\n // 3b. Check if any messages were actually compressed (not just protected).\n const actuallyCompressed = newMessages.filter(\n (m) => m.role === 'tool'\n && isSummarizedToolPlaceholder(m.content)\n && !messages.some((orig) => orig.tool_call_id === m.tool_call_id && isSummarizedToolPlaceholder(orig.content))\n );\n if (actuallyCompressed.length === 0) {\n // All compressable messages were protected (recent). Skip summarization to avoid\n // injecting a summary + synthetic messages without actually reducing context.\n return {};\n }\n\n // 4. Validate message sequence - ensure every tool message follows an assistant with matching tool_calls\n const validatedMessages = validateMessageSequence(newMessages);\n\n // 5. Append the summarization interaction\n // We inject a fake tool call and response to represent the summarization event in the history.\n const summaryToolCallId = `call_summary_${Date.now()}`;\n \n // The assistant \"calls\" the summarizer\n const assistantSummaryCall: BaseMessage = {\n role: \"assistant\", // \"assistant\"\n content: \"Context limit reached. Summarizing conversation history to reduce token usage.\",\n tool_calls: [\n {\n id: summaryToolCallId,\n type: \"function\",\n function: {\n name: \"summarize_context\",\n arguments: \"{}\"\n }\n }\n ]\n };\n\n // The tool \"responds\" with the summary\n const toolSummaryResponse: BaseMessage = {\n role: \"tool\",\n tool_call_id: summaryToolCallId,\n name: \"summarize_context\", // Matches the tool name in the call\n content: summaryText\n };\n\n const summaries = Array.isArray(state.summaries) ? [...state.summaries, summaryText] : [summaryText];\n const summaryRecords = Array.isArray(state.summaryRecords)\n ? [...state.summaryRecords, { ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }]\n : [{ ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }];\n\n // Calculate token count after summarization\n const finalMessages = [...validatedMessages, assistantSummaryCall, toolSummaryResponse];\n const tokenCountAfter = countMessagesTokens(finalMessages);\n\n // Emit successful summarization event (use actual values from model response if available, fallback to estimates)\n const summarizationEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual ?? ((inputTokensActual ?? inputTokensEstimate) + (outputTokensActual ?? outputTokensEstimate)),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter,\n archivedCount: compressableMessages.length, // deprecated field for backward compatibility\n structuredSummary,\n integrity,\n };\n onEvent?.(summarizationEvent);\n\n // Record trace event for successful summarization\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"success\",\n durationMs,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual,\n messageList: sanitizeTracePayload([\n ...summaryPrompt,\n { role: \"assistant\", content: summaryText, name: \"summarization_result\" }\n ]),\n debug: {\n messagesCompressed: compressableMessages.length,\n tokenCountBefore,\n tokenCountAfter,\n tokensSaved: tokenCountBefore - tokenCountAfter,\n previousSummaryLength: previousSummary?.length || 0,\n usageFromModel: inputTokensActual !== undefined,\n cachedInputTokens: cachedInputTokens,\n integrity,\n },\n });\n\n return {\n messages: finalMessages as any,\n summaries,\n summaryRecords,\n toolHistoryArchived: archivedExecutions,\n };\n };\n}\n","import type { BaseMessage, MemoryFact, ResolvedSmartAgentConfig, SmartState, StructuredSummary } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { extractMessageText } from \"../utils/content.js\";\n\nfunction collectRecentTurns(messages: BaseMessage[], lastTurnsToKeep: number): BaseMessage[] {\n if (lastTurnsToKeep <= 0) return [];\n const systemPrefix = messages.filter((message, index) => index === 0 && message.role === \"system\");\n const body = systemPrefix.length > 0 ? messages.slice(1) : [...messages];\n\n // Count total user turns to detect single-user-turn scenarios (e.g. worker agents).\n const totalUserTurns = body.filter((m) => m.role === \"user\").length;\n\n // When there are fewer user turns than lastTurnsToKeep (typical for worker agents\n // that start with a single user message and then loop assistant→tool cycles),\n // count assistant messages as interaction rounds instead. This prevents the hybrid\n // policy from keeping ALL messages and forcing clampToBudget to do destructive\n // truncation that breaks tool_call/tool_result adjacency.\n const countAssistantTurns = totalUserTurns < lastTurnsToKeep;\n\n let turnCount = 0;\n const collected: BaseMessage[] = [];\n\n for (let index = body.length - 1; index >= 0; index -= 1) {\n const message = body[index];\n collected.unshift(message);\n\n const isTurnBoundary = countAssistantTurns\n ? message.role === \"assistant\"\n : message.role === \"user\";\n\n if (isTurnBoundary) {\n turnCount += 1;\n if (turnCount >= lastTurnsToKeep) break;\n }\n }\n\n // When counting assistant turns, ensure the first user message is always included\n // so the agent retains its original task instruction.\n if (countAssistantTurns && collected.length > 0 && collected[0].role !== \"user\") {\n const firstUserMsg = body.find((m) => m.role === \"user\");\n if (firstUserMsg && !collected.includes(firstUserMsg)) {\n collected.unshift(firstUserMsg);\n }\n }\n\n return [...systemPrefix, ...collected];\n}\n\nexport function renderStructuredSummary(summary: StructuredSummary | undefined): string {\n if (!summary) return \"\";\n const lines = [\"Context summary:\"];\n if (summary.stable_facts.length > 0) {\n lines.push(\"Stable facts:\");\n lines.push(...summary.stable_facts.map((fact) => `- ${fact.key}: ${fact.value}`));\n }\n if (summary.active_goals.length > 0) {\n lines.push(\"Active goals:\");\n lines.push(...summary.active_goals.map((goal) => `- ${goal}`));\n }\n if (summary.open_questions.length > 0) {\n lines.push(\"Open questions:\");\n lines.push(...summary.open_questions.map((question) => `- ${question}`));\n }\n // discarded_obsolete items are intentionally NOT rendered back into the context.\n // They are already obsolete and including them wastes tokens.\n return lines.join(\"\\n\");\n}\n\nfunction renderMemoryBlock(facts: MemoryFact[] | undefined): string {\n if (!facts || facts.length === 0) return \"\";\n return [\n \"Retrieved memory:\",\n ...facts.map((fact) => `- ${fact.key}: ${fact.value}`),\n ].join(\"\\n\");\n}\n\nfunction clampToBudget(messages: BaseMessage[], maxContextTokens: number): BaseMessage[] {\n let working = [...messages];\n\n while (working.length > 2) {\n const tokenCount = countApproxTokens(working.map(extractMessageText).join(\"\\n\"));\n if (tokenCount <= maxContextTokens) return working;\n\n // Find the first non-system message to remove.\n const firstNonSystem = working.findIndex((message, index) => !(index === 0 && message.role === \"system\"));\n if (firstNonSystem < 0) break;\n\n const target = working[firstNonSystem];\n\n // When removing an assistant message with tool_calls, also remove its\n // corresponding tool result messages to preserve message adjacency.\n // Orphan tool messages cause \"tool must follow assistant with tool_calls\" errors\n // and confuse the model with placeholder messages.\n if (target.role === \"assistant\" && Array.isArray(target.tool_calls) && target.tool_calls.length > 0) {\n const toolCallIds = new Set(\n target.tool_calls.map((tc: any) => tc.id).filter(Boolean)\n );\n // Remove assistant + its tool results as a group\n working = working.filter((m, idx) => {\n if (idx === firstNonSystem) return false;\n if (m.role === \"tool\" && m.tool_call_id && toolCallIds.has(m.tool_call_id)) return false;\n return true;\n });\n } else if (target.role === \"tool\") {\n // If the target is a tool message, also remove its parent assistant message\n // to avoid leaving an assistant with a dangling tool_call reference.\n const toolCallId = target.tool_call_id;\n let parentIdx = -1;\n if (toolCallId) {\n for (let i = firstNonSystem - 1; i >= 0; i--) {\n const m = working[i];\n if (m.role === \"assistant\" && Array.isArray(m.tool_calls) && m.tool_calls.some((tc: any) => tc.id === toolCallId)) {\n parentIdx = i;\n break;\n }\n }\n }\n if (parentIdx >= 0) {\n // Remove the entire assistant + all its tool results as a group\n const parent = working[parentIdx];\n const parentToolCallIds = new Set(\n (parent.tool_calls || []).map((tc: any) => tc.id).filter(Boolean)\n );\n working = working.filter((m, idx) => {\n if (idx === parentIdx) return false;\n if (m.role === \"tool\" && m.tool_call_id && parentToolCallIds.has(m.tool_call_id)) return false;\n return true;\n });\n } else {\n // Orphan tool message — safe to remove alone\n working.splice(firstNonSystem, 1);\n }\n } else {\n working.splice(firstNonSystem, 1);\n }\n }\n return working;\n}\n\nexport function buildModelMessages(state: SmartState, config: ResolvedSmartAgentConfig): BaseMessage[] {\n const rawMessages = (state.messages || []) as BaseMessage[];\n if (config.context.policy === \"raw\") {\n return clampToBudget(rawMessages, config.limits.maxContextTokens);\n }\n\n const recentMessages = collectRecentTurns(rawMessages, config.context.lastTurnsToKeep);\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n const summaryText = renderStructuredSummary(latestSummary);\n const memoryText = renderMemoryBlock(state.memoryFacts);\n const systemMessage = recentMessages[0]?.role === \"system\" ? recentMessages[0] : undefined;\n const body = systemMessage ? recentMessages.slice(1) : recentMessages;\n const syntheticContextMessages: BaseMessage[] = [];\n\n if (summaryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"context_summary\", content: summaryText });\n }\n if (memoryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"memory_context\", content: memoryText });\n }\n\n const assembled = [\n ...(systemMessage ? [systemMessage] : []),\n ...syntheticContextMessages,\n ...(config.context.policy === \"summary_only\" ? body.filter((message) => message.role === \"user\" || message.role === \"assistant\").slice(-2) : body),\n ];\n\n return clampToBudget(assembled, config.limits.maxContextTokens);\n}","export * from \"./model.js\";\nexport * from \"./tool.js\";\nexport * from \"./prompts.js\";\nexport * from \"./agent.js\";\nexport * from \"./nodes/agent.js\";\nexport * from \"./nodes/tools.js\";\nexport * from \"./nodes/resolver.js\";\nexport * from \"./nodes/toolLimitFinalize.js\";\nexport * from \"./nodes/contextSummarize.js\";\nexport * from \"./utils/utilTokens.js\";\nexport { setTokenCounter, getTokenCounter, defaultTokenCounter } from \"./utils/utilTokens.js\";\nexport type { TokenCounter } from \"./utils/utilTokens.js\";\nexport * from \"./contextTools.js\";\nexport * from \"./smart/index.js\";\nexport * from \"./smart/skills/index.js\";\nexport * from \"./smart/eval.js\";\nexport * from \"./smart/memory.js\";\nexport * from \"./smart/runtimeConfig.js\";\nexport * from \"./guardrails/index.js\";\nexport * from \"./structuredOutput/index.js\";\nexport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nexport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nexport { resolveUserQuestionState } from \"./utils/userQuestions.js\";\nexport { createAskUserQuestionTool } from \"./humanLoop.js\";\nexport { fromLangchainTools } from \"./adapters/langchain.js\";\nexport { resolveReasoning, validateReasoningConfig } from \"./smart/reasoning.js\";\nexport { fileSink, customSink, cognipeerSink, httpSink, otlpSink, startStreamingSession, generateTraceId, generateSpanId, traceSessionToOtlp } from \"./utils/tracing.js\";\n// Native LLM Providers (no LangChain dependency)\nexport {\n createProvider,\n fromNativeProvider,\n BaseProvider,\n OpenAIProvider,\n AnthropicProvider,\n AzureProvider,\n OpenAICompatibleProvider,\n BedrockProvider,\n VertexProvider,\n ProviderError,\n emptyUsage,\n} from \"./providers/index.js\";\nexport type {\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatCompletionChunk,\n TokenUsage,\n FinishReason,\n UnifiedMessage,\n ToolDefinition as ProviderToolDefinition,\n ToolCall as ProviderToolCall,\n ProviderConfig,\n ProviderType,\n OpenAIProviderConfig,\n AnthropicProviderConfig,\n AzureProviderConfig,\n OpenAICompatibleProviderConfig,\n BedrockProviderConfig,\n VertexProviderConfig,\n NativeModelOptions,\n} from \"./providers/index.js\";\nexport { GuardrailPhase } from \"./types.js\";\nexport type {\n\t// Smart Agent types\n\tSmartAgentOptions,\n\tSmartAgentLimits,\n\tSmartState,\n\tInvokeConfig,\n\tAgentInvokeResult,\n\tSmartAgentInstance,\n\tSmartAgentTracingConfig,\n\tSmartAgentEvent,\n\tRuntimeProfile,\n\tBuiltInRuntimeProfile,\n\tProfileConfig,\n\tResolvedSmartAgentConfig,\n\tSmartAgentCustomProfileConfig,\n\tStructuredSummary,\n\tSummaryIntegrityCheck,\n\tMemoryFact,\n\tMemoryStore,\n\tMemoryScope,\n\tMemoryReadPolicy,\n\tMemoryWritePolicy,\n\tPlanningMode,\n\tReplanPolicy,\n\tDelegationMode,\n\tChildContextPolicy,\n\tToolResponseClassification,\n\tToolResponseRetentionPolicy,\n\tEvalCase,\n\tEvalCaseResult,\n\tEvalHarnessMetrics,\n\tEvalHarnessResult,\n\t// Base Agent types\n\tAgentOptions,\n\tAgentLimits,\n\tAgentState,\n\tAgentInstance,\n\tAgentRuntimeConfig,\n\tTracingConfig,\n\tHandoffDescriptor,\n\t// Common types\n\tMessage,\n\tBaseMessage,\n\tAIMessage,\n\tToolInterface,\n\tTraceEventRecord,\n\tTraceDataSection,\n\tTraceMessageSection,\n\tTraceToolDetails,\n\tTraceToolCallSection,\n\tTraceToolResultSection,\n\tTraceToolResponseSection,\n\tTraceSummarySection,\n\tTraceMetadataSection,\n\tTraceSessionSummary,\n\tTraceSessionFile,\n\tTraceSessionStatus,\n\tTraceErrorRecord,\n\tResolvedTraceConfig,\n\tResolvedTraceSink,\n\tTracingMode,\n\tTraceSinkConfig,\n\tTraceSinkFileConfig,\n\tTraceSinkCustomConfig,\n\tTraceSinkCognipeerConfig,\n\tTraceSinkHttpConfig,\n\tTraceSinkOtlpConfig,\n\tTraceSinkSnapshot,\n\tTraceSessionConfigSnapshot,\n\tConversationGuardrail,\n\tGuardrailOutcome,\n\tGuardrailIncident,\n\tGuardrailRule,\n\tGuardrailContext,\n\tGuardrailDisposition,\n\tGuardrailEvent,\n\tAgentSnapshot,\n\t// Reasoning / reflection\n\tReasoningConfig,\n\tReasoningLevel,\n\tReflectionConfig,\n\tReflectionCadence,\n\tNativeReasoningConfig,\n\tReflectionRecord,\n\tReflectionEvent,\n\tReflectionHookContext,\n\tSnapshotOptions,\n\tRestoreSnapshotOptions,\n\tSerializableSmartState,\n\tSnapshotRuntimeHint,\n\tAgentSnapshotMetadata,\n\tPendingToolApproval,\n\tToolApprovalResolution,\n\tToolApprovalEvent,\n\tPendingUserQuestion,\n\tUserQuestionItem,\n\tUserQuestionOption,\n\tUserQuestionAnswer,\n\tUserQuestionAnswerSet,\n\tUserQuestionResolution,\n\tUserQuestionEvent,\n\tUserQuestionStatus,\n\tHumanInTheLoopOptions,\n\tHumanInTheLoopAskUserConfig,\n\tHumanInTheLoopRuntimeConfig,\n\t// Event types\n\tToolCallEvent,\n\tPlanEvent,\n\tSummarizationEvent,\n\tFinalAnswerEvent,\n\tMetadataEvent,\n\tProgressEvent,\n\tStreamEvent,\n\tCancelledEvent,\n\tHandoffEvent,\n\t// Smart Agent config sub-types\n\tSummarizationMode,\n\tContextPolicy,\n\tSummaryFactItem,\n\tPlanStepRecord,\n\tSmartAgentSummarizationConfig,\n\tSmartAgentContextConfig,\n\tSmartAgentPlanningConfig,\n\tSmartAgentDelegationConfig,\n\tSmartAgentMemoryConfig,\n\tSmartAgentToolResponseConfig,\n\tSmartAgentBudgetConfig,\n\tMemoryProviderKind,\n\t// Eval types\n\tEvalFamily,\n\tEvalProfileDescriptor,\n\tEvalProfileTarget,\n\t// Utility types\n\tToolApprovalStatus,\n\tCancellationTokenLike,\n\tProgressUpdate,\n\tStreamChunk,\n} from \"./types.js\";\n","import { z } from \"zod\";\nimport { createTool } from \"./tool.js\";\nimport { recordTraceEvent } from \"./utils/tracing.js\";\n// no message helpers needed here\n\nexport type ContextToolsStateRef = {\n toolHistory?: any[];\n toolHistoryArchived?: any[];\n todoList?: any[];\n planVersion?: number;\n adherenceScore?: number;\n messages?: Array<{ role?: string; content?: unknown }>;\n};\n\nconst TOOL_RESPONSE_RECOVERY_MARKERS = [\n /ARCHIVED_TOOL_RESPONSE\\s*\\[/,\n /STRUCTURED_TOOL_RESPONSE\\s*\\[/,\n /SUMMARIZED_TOOL_RESPONSE\\b/,\n /DROPPED_TOOL_RESPONSE\\s*\\[/,\n /Use get_tool_response with executionId/i,\n] as const;\n\nconst todoStatusSchema = z.enum([\"not-started\", \"in-progress\", \"completed\", \"blocked\"]);\n\nconst todoWriteItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Sequential id starting from 1\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema,\n evidence: z.string().max(300).optional(),\n});\n\nconst todoUpdateItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Existing todo id to update\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema.optional(),\n evidence: z.string().max(300).optional(),\n});\n\nfunction normalizeTodoItem(item: any, existing?: any) {\n const id = item.id ?? existing?.id;\n const step = item.step || item.title || item.description || existing?.step || existing?.title || existing?.description || `Step ${id}`;\n const title = item.title || item.step || existing?.title || existing?.step || `Step ${id}`;\n const description = item.description || item.step || item.title || existing?.description || existing?.step || existing?.title || `Step ${id}`;\n\n return {\n ...existing,\n ...item,\n id,\n step,\n title,\n description,\n owner: item.owner || existing?.owner || \"agent\",\n exitCriteria: item.exitCriteria || existing?.exitCriteria || description || `Complete step ${id}`,\n status: item.status || existing?.status,\n evidence: item.evidence ?? existing?.evidence,\n };\n}\n\nfunction validatePlanInvariants(todoList: any[], requireSequentialIds: boolean) {\n const ids = todoList.map((item) => item.id);\n const uniqueIds = new Set(ids);\n if (uniqueIds.size !== ids.length) {\n return { ok: false, error: \"Todo ids must be unique.\" } as const;\n }\n\n if (requireSequentialIds) {\n const expectedIds = Array.from({ length: todoList.length }, (_, index) => index + 1);\n const isSequential = ids.every((id, index) => id === expectedIds[index]);\n if (!isSequential) {\n return { ok: false, error: \"Todo ids must be sequential starting from 1 for write operations.\" } as const;\n }\n }\n\n const inProgressCount = todoList.filter((item) => item.status === \"in-progress\").length;\n if (inProgressCount > 1) {\n return { ok: false, error: \"Only one todo item may be in-progress at a time.\" } as const;\n }\n\n return { ok: true } as const;\n}\n\nfunction calculateAdherenceScore(todoList: any[]) {\n const completedCount = todoList.filter((item) => item.status === \"completed\").length;\n return todoList.length === 0 ? 1 : Number((completedCount / todoList.length).toFixed(2));\n}\n\nfunction formatTodoListSummary(todoList: any[]) {\n if (!Array.isArray(todoList) || todoList.length === 0) {\n return \"No plan items.\";\n }\n\n return todoList\n .map((item) => `${item.id}. ${item.title || item.step || item.description || `Step ${item.id}`} [${item.status}]`)\n .join(\"\\n\");\n}\n\nfunction flattenRecoveryContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (typeof part === \"string\") {\n return part;\n }\n\n if (part && typeof part === \"object\") {\n if (typeof (part as { text?: unknown }).text === \"string\") {\n return (part as { text: string }).text;\n }\n\n if (typeof (part as { content?: unknown }).content === \"string\") {\n return (part as { content: string }).content;\n }\n }\n\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\");\n }\n\n return \"\";\n}\n\nexport function hasToolResponseRecoveryReference(\n messages: Array<{ role?: string; content?: unknown }> | undefined,\n executionId?: string,\n) {\n if (!Array.isArray(messages) || messages.length === 0) {\n return false;\n }\n\n return messages.some((message) => {\n if (message?.role === \"system\") {\n return false;\n }\n\n const content = flattenRecoveryContent(message?.content);\n if (!content) {\n return false;\n }\n\n const hasRecoveryMarker = TOOL_RESPONSE_RECOVERY_MARKERS.some((pattern) => pattern.test(content));\n if (!hasRecoveryMarker) {\n return false;\n }\n\n return executionId ? content.includes(executionId) : true;\n });\n}\n\nexport function createManageTodoTool(stateRef: ContextToolsStateRef) {\n const manageTodo = createTool({\n name: \"manage_todo_list\",\n description:\n \"Manage a structured todo list to track progress and plan tasks throughout your coding session.\\n\\nOperations:\\n- read: return the current plan\\n- write: replace the full plan with a complete ordered todoList\\n- update: patch existing todo items by id without resending the whole plan\\n\\nRules:\\n- Use write only when creating or fully rewriting the plan\\n- After a plan exists, prefer update for status, evidence, or owner changes\\n- Update payloads should contain only the changed items\\n- When using update, pass expectedVersion to avoid overwriting a newer plan\\n- Keep ids unique; write operations must keep ids sequential starting from 1\\n- Keep at most ONE item in-progress at a time\\n- If update fails due to version mismatch, read the latest plan and retry\",\n schema: z.object({\n operation: z.enum([\"write\", \"read\", \"update\"]),\n expectedVersion: z.number().int().min(0).optional(),\n todoList: z.array(z.union([todoWriteItemSchema, todoUpdateItemSchema])).optional()\n }),\n func: async ({ operation, expectedVersion, todoList }) => {\n const toolStateRef = (manageTodo as any)._stateRef as undefined | { __onEvent?: (e: any) => void; ctx?: { __traceSession?: any } };\n const onEvent = toolStateRef?.__onEvent;\n const emitPlanEvent = (list: any[]) => {\n const version = stateRef.planVersion || 1;\n const adherenceScore = stateRef.adherenceScore || 0;\n const planData = {\n source: \"manage_todo_list\",\n operation,\n version,\n adherenceScore,\n count: Array.isArray(list) ? list.length : 0,\n };\n onEvent?.({ type: \"plan\", todoList: list, ...planData });\n\n const traceSession = toolStateRef?.ctx?.__traceSession;\n recordTraceEvent(traceSession, {\n type: \"plan\",\n label: `Plan ${operation}`,\n actor: { scope: \"agent\", name: \"manage_todo_list\", role: \"planner\" },\n sections: [\n {\n kind: \"summary\",\n label: \"Todo List\",\n content: formatTodoListSummary(list),\n },\n {\n kind: \"metadata\",\n label: \"Plan Metadata\",\n data: planData,\n },\n ],\n debug: planData,\n });\n };\n\n const currentVersion = stateRef.planVersion || 0;\n if (operation === \"read\") {\n const list = stateRef.todoList || [];\n emitPlanEvent(list);\n return list;\n }\n\n if (typeof expectedVersion === \"number\" && expectedVersion !== currentVersion) {\n return {\n status: \"error\",\n operation,\n error: \"Plan version mismatch. Read the latest plan and retry.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (!Array.isArray(todoList)) {\n return {\n status: \"error\",\n operation,\n error: \"todoList is required for write and update operations.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (operation === \"write\") {\n const parsed = z.array(todoWriteItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for write.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const normalizedList = parsed.data.map((item) => normalizeTodoItem(item));\n const validation = validatePlanInvariants(normalizedList, true);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = normalizedList;\n } else if (operation === \"update\") {\n const parsed = z.array(todoUpdateItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for update.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const currentList = Array.isArray(stateRef.todoList) ? stateRef.todoList : [];\n if (currentList.length === 0) {\n return {\n status: \"error\",\n operation,\n error: \"No existing plan to update. Use write first.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n const currentMap = new Map(currentList.map((item) => [item.id, item]));\n const patchMap = new Map<number, (typeof parsed.data)[number]>();\n for (const item of parsed.data) {\n if (patchMap.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: \"Update payload contains duplicate todo ids.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n patchMap.set(item.id, item);\n if (!currentMap.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: `Cannot update missing todo id ${item.id}. Use write to replace the plan.`,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n }\n\n const mergedList = currentList.map((item) => {\n const patch = patchMap.get(item.id);\n return patch ? normalizeTodoItem(patch, item) : item;\n });\n const validation = validatePlanInvariants(mergedList, false);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = mergedList;\n }\n\n stateRef.planVersion = currentVersion + 1;\n stateRef.adherenceScore = calculateAdherenceScore(stateRef.todoList || []);\n const payload = {\n status: \"ok\",\n operation,\n count: Array.isArray(todoList) ? todoList.length : undefined,\n version: stateRef.planVersion || 1,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n emitPlanEvent(stateRef.todoList || []);\n return payload;\n }\n });\n (manageTodo as any)._stateRef = stateRef;\n return manageTodo;\n}\n\nexport function createGetToolResponseTool(stateRef: ContextToolsStateRef) {\n const getTool = createTool({\n name: \"get_tool_response\",\n description:\n \"RETRIEVE the full output of a tool execution whose response was archived, dropped, truncated, or later compacted in conversation history. This tool is only useful when the visible transcript already shows a reduced tool-response marker for the referenced executionId or tool_call_id. Use it only when a marker such as 'ARCHIVED_TOOL_RESPONSE', 'STRUCTURED_TOOL_RESPONSE', 'SUMMARIZED_TOOL_RESPONSE', 'DROPPED_TOOL_RESPONSE', or an explicit truncation note points you to a missing field you still need. Do not call it to re-fetch a normal tool result that is already present in context.\",\n schema: z.object({ executionId: z.string().describe(\"Tool execution id or original tool_call_id\") }),\n maxExecutionsPerRun: 8,\n func: async ({ executionId }) => {\n if (!hasToolResponseRecoveryReference(stateRef.messages, executionId)) {\n return \"Execution not recoverable from the visible transcript. Use this only when the conversation already shows a reduced tool-response marker for that executionId.\";\n }\n\n const matchesExecution = (t: any) => t?.executionId === executionId || t?.tool_call_id === executionId;\n let execution = stateRef.toolHistory?.find((t) => matchesExecution(t));\n if (!execution) {\n execution = stateRef.toolHistoryArchived?.find((t) => matchesExecution(t));\n }\n if (execution) {\n return execution.rawOutput || execution.output;\n }\n return \"Execution not found. Please check the executionId.\";\n }\n });\n (getTool as any)._stateRef = stateRef;\n return getTool;\n}\n\n// Create context tools like get_tool_response, manage_todo_list\nexport function createContextTools(\n stateRef: ContextToolsStateRef,\n opts?: { planningEnabled?: boolean; outputSchema?: any; includeGetToolResponse?: boolean }\n) {\n const tools = [] as any[];\n\n if (opts?.planningEnabled) {\n tools.push(createManageTodoTool(stateRef));\n }\n\n if (opts?.includeGetToolResponse ?? true) {\n tools.push(createGetToolResponseTool(stateRef));\n }\n\n // Note: Structured output response tool is now managed by StructuredOutputManager\n // in the base agent (createAgent). No duplicate tool creation needed here.\n\n return tools;\n}\n","import { SmartState, SmartAgentOptions } from \"../types.js\";\nimport { countMessagesTokens } from \"../utils/utilTokens.js\";\nimport { isSyntheticSummaryMessage } from \"../utils/syntheticMessages.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\n\n/** Shared helper to compute whether we exceed token limit */\nfunction needsSummarization(state: SmartState, opts: SmartAgentOptions, summarizationEnabled: boolean): boolean {\n if (!summarizationEnabled) {\n return false;\n }\n\n if ((state.ctx as any)?.__needsSummarization) {\n return true;\n }\n\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n if (!resolved.summarization.enable) {\n return false;\n }\n\n const maxTok = resolved.summarization.summaryTriggerTokens;\n\n try {\n const filtered = (state.messages || []).filter((message: any) => !isSyntheticSummaryMessage(message));\n const tokenCount = countMessagesTokens(filtered);\n return tokenCount > maxTok;\n } catch {\n return false;\n }\n}\n\nexport function resolverDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function resolverDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function toolsDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function toolsDecision(state: SmartState) {\n const max = (opts.limits?.maxToolCalls ?? 10) as number;\n const count = state.toolCallCount || 0;\n if (count >= max) return \"toolLimitFinalize\";\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}","import type {\n MemoryFact,\n MemoryReadPolicy,\n MemoryScope,\n MemoryStore,\n ResolvedSmartAgentConfig,\n StructuredSummary,\n} from \"../types.js\";\n\ntype ScopeMap = Map<MemoryScope, MemoryFact[]>;\n\nfunction normalizeFact(scope: MemoryScope, fact: MemoryFact): MemoryFact {\n return {\n ...fact,\n scope,\n obsolete: fact.obsolete ?? false,\n lastUpdatedAt: fact.lastUpdatedAt ?? new Date().toISOString(),\n confidence: Number.isFinite(fact.confidence) ? fact.confidence : 0.5,\n };\n}\n\nexport class InMemoryMemoryStore implements MemoryStore {\n private readonly buckets: ScopeMap = new Map();\n\n async get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]> {\n const includeObsolete = options?.includeObsolete === true;\n const all = [...(this.buckets.get(scope) || [])]\n .filter((fact) => includeObsolete || !fact.obsolete)\n .sort((left, right) => new Date(right.lastUpdatedAt || 0).getTime() - new Date(left.lastUpdatedAt || 0).getTime());\n return typeof options?.limit === \"number\" ? all.slice(0, options.limit) : all;\n }\n\n async upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void> {\n const existing = [...(this.buckets.get(scope) || [])];\n\n for (const fact of facts) {\n const normalized = normalizeFact(scope, fact);\n const sameKey = existing.filter((entry) => entry.key === normalized.key && !entry.obsolete);\n for (const entry of sameKey) {\n if (entry.value !== normalized.value) {\n entry.obsolete = true;\n entry.lastUpdatedAt = new Date().toISOString();\n }\n }\n\n const match = existing.find((entry) => entry.key === normalized.key && entry.value === normalized.value && !entry.obsolete);\n if (match) {\n match.confidence = Math.max(match.confidence, normalized.confidence);\n match.sourceTurn = normalized.sourceTurn;\n match.ttl = normalized.ttl;\n match.tags = normalized.tags;\n match.lastUpdatedAt = normalized.lastUpdatedAt;\n } else {\n existing.push(normalized);\n }\n }\n\n this.buckets.set(scope, existing);\n }\n\n async markObsolete(scope: MemoryScope, keys: string[]): Promise<void> {\n const bucket = this.buckets.get(scope) || [];\n const now = new Date().toISOString();\n for (const fact of bucket) {\n if (keys.includes(fact.key)) {\n fact.obsolete = true;\n fact.lastUpdatedAt = now;\n }\n }\n this.buckets.set(scope, bucket);\n }\n\n async semanticSearch(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]> {\n const normalizedQuery = query.toLowerCase();\n const bucket = (this.buckets.get(scope) || []).filter((fact) => !fact.obsolete);\n const scored = bucket\n .map((fact) => {\n const haystack = `${fact.key} ${fact.value} ${(fact.tags || []).join(\" \")}`.toLowerCase();\n const score = haystack.includes(normalizedQuery) ? 2 : normalizedQuery.split(/\\s+/).filter(Boolean).reduce((acc, token) => acc + (haystack.includes(token) ? 1 : 0), 0);\n return { fact, score };\n })\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score || right.fact.confidence - left.fact.confidence)\n .map((entry) => entry.fact);\n return typeof options?.limit === \"number\" ? scored.slice(0, options.limit) : scored;\n }\n}\n\nexport function resolveMemoryStore(config: ResolvedSmartAgentConfig): MemoryStore | undefined {\n if (config.memory.store) return config.memory.store;\n if (config.memory.provider === \"inMemory\") return new InMemoryMemoryStore();\n return undefined;\n}\n\nexport async function readMemoryFacts(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n query: string,\n): Promise<MemoryFact[]> {\n if (!store) return [];\n const scope = config.memory.scope;\n const limit = config.context.lastTurnsToKeep;\n const policy: MemoryReadPolicy = config.memory.readPolicy;\n\n if (policy === \"recent_only\") {\n return store.get(scope, { limit });\n }\n\n if (policy === \"semantic\" && typeof store.semanticSearch === \"function\") {\n return store.semanticSearch(scope, query, { limit });\n }\n\n if (policy === \"hybrid\") {\n const recent = await store.get(scope, { limit: Math.max(3, Math.ceil(limit / 2)) });\n const semantic = typeof store.semanticSearch === \"function\"\n ? await store.semanticSearch(scope, query, { limit: Math.max(3, Math.ceil(limit / 2)) })\n : [];\n const deduped = new Map<string, MemoryFact>();\n for (const fact of [...semantic, ...recent]) {\n deduped.set(`${fact.key}:${fact.value}`, fact);\n }\n return [...deduped.values()].slice(0, limit);\n }\n\n return store.get(scope, { limit });\n}\n\nexport async function writeSummaryFactsToMemory(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n summary: StructuredSummary | undefined,\n sourceTurn: number,\n): Promise<MemoryFact[]> {\n if (!store || !summary) return [];\n\n const facts: MemoryFact[] = summary.stable_facts.map((fact) => ({\n key: fact.key,\n value: fact.value,\n sourceTurn,\n confidence: fact.confidence ?? 0.8,\n obsolete: false,\n tags: [\"summary_fact\"],\n }));\n\n if (summary.discarded_obsolete.length > 0) {\n await store.markObsolete(config.memory.scope, summary.discarded_obsolete);\n }\n\n if (facts.length > 0) {\n await store.upsert(config.memory.scope, facts);\n }\n\n return store.get(config.memory.scope, { limit: config.context.lastTurnsToKeep + summary.stable_facts.length });\n}","import type { ToolInterface } from \"../../types.js\";\n\n/**\n * Skill primitive — progressive capability disclosure for the smart agent.\n *\n * A Skill is a lazy, self-contained capability bundle. The model always sees a\n * cheap one-line `header`; it calls `open_skill(key)` to load the skill's prompt\n * and (for small skills) bind its tools, or `bind_skill_tools(key, names)` to\n * bind a chosen subset of a fat skill. This keeps the number of bound tools per\n * step small — the property small models need — and replaces an up-front\n * tool-selector pass with on-demand disclosure.\n */\n\nexport type SkillToolHeader = {\n name: string;\n description?: string;\n};\n\nexport type SkillModelTier = \"small\" | \"large\";\n\nexport type Skill = {\n /** Stable key, e.g. \"mcp:atlassian\" | \"integration:google\" | \"builtin:drawio\". */\n key: string;\n title: string;\n /** One-line \"what + when to use\" the model always sees in the catalog. */\n header: string;\n /** Injected (as the open_skill result) only after the skill is opened. */\n prompt: string | (() => Promise<string> | string);\n /** When true, opening this skill should trigger sandbox bootstrap. */\n needsSandbox?: boolean;\n /** Gate: a \"large\"-only skill is hidden from a small-tier model. */\n minModelTier?: SkillModelTier;\n /** Whether the skill is usable in the current workspace (integration connected, etc.). */\n isAvailable?: () => boolean | Promise<boolean>;\n /** Cheap list of the skill's tool headers (names + one-liners). */\n listToolIndex: () => Promise<SkillToolHeader[]> | SkillToolHeader[];\n /** Bind concrete tools. With no names, bind the whole (small) skill. */\n bindTools: (names?: string[]) => Promise<ToolInterface[]> | ToolInterface[];\n /** Optional embedding/heuristic ranking of tool headers for a fat skill. */\n rankToolHeaders?: (\n query: string,\n headers: SkillToolHeader[],\n ) => Promise<SkillToolHeader[]> | SkillToolHeader[];\n /** Deterministic floor: tools to bind when a weak model gives no usable query. */\n defaultBindNames?: string[];\n};\n\nexport type SkillPolicy = {\n /** Max distinct skills open at once (small tier should be 1). */\n maxOpenSkills: number;\n /** Max tools bound from a single skill in one bind call. */\n maxBoundToolsPerSkill: number;\n /** Overall cap on skill-bound tools across the whole run. */\n maxBoundToolsTotal: number;\n /** Current model tier; gates `minModelTier`. */\n modelTier?: SkillModelTier;\n};\n\nexport const DEFAULT_SKILL_POLICY: SkillPolicy = {\n maxOpenSkills: 4,\n maxBoundToolsPerSkill: 12,\n maxBoundToolsTotal: 40,\n};\n\nexport const SMALL_TIER_SKILL_POLICY: SkillPolicy = {\n maxOpenSkills: 1,\n maxBoundToolsPerSkill: 6,\n maxBoundToolsTotal: 18,\n modelTier: \"small\",\n};\n\n/**\n * Mutable per-invoke registry. The skill tools mutate this ref (append-only) and\n * call `__onToolsChanged` so the runtime can rebuild its tool sets. Mirrors the\n * stateRef pattern used by createAskUserQuestionTool.\n */\nexport type SkillRegistryRef = {\n /** Append-only: skills the model has opened this run. */\n openedSkillKeys: string[];\n /** Append-only, deduped by tool name: tools bound from opened skills. */\n boundSkillTools: ToolInterface[];\n /** Rebuild hook wired by createSmartAgent; rebuilds both recovery variants. */\n __onToolsChanged?: () => void;\n};\n\nexport function createSkillRegistryRef(): SkillRegistryRef {\n return { openedSkillKeys: [], boundSkillTools: [] };\n}\n","import type { ToolInterface } from \"../../types.js\";\nimport type { Skill, SkillPolicy, SkillRegistryRef } from \"./types.js\";\n\n/**\n * Pure registry helpers for the skill primitive. No I/O, no agent loop — these\n * are the deterministic core, fully unit-testable on their own.\n */\n\n/**\n * Rebuild BOTH runtime tool-set variants with fresh array references.\n *\n * This is the heart of mid-run skill binding. `syncRuntimeTools` swaps between\n * two PRE-COMPUTED arrays and short-circuits on `currentRuntime.tools ===\n * nextTools`. So to make newly-bound skill tools take effect we must hand back\n * NEW array references (breaking the `===` short-circuit) AND include the skill\n * tools in the recovery variant too (otherwise a recovery-swap iteration would\n * silently drop them).\n */\nexport function composeToolSets(input: {\n base: ToolInterface[];\n boundSkillTools: ToolInterface[];\n recoveryTool?: ToolInterface;\n}): { toolsWithoutRecovery: ToolInterface[]; toolsWithRecovery: ToolInterface[] } {\n const without = [...input.base, ...input.boundSkillTools];\n const withRec = input.recoveryTool ? [...without, input.recoveryTool] : [...without];\n return { toolsWithoutRecovery: without, toolsWithRecovery: withRec };\n}\n\n/**\n * Append tools to the registry, append-only and deduped by name, honoring the\n * overall total cap. Returns the tools actually added (may be fewer than asked).\n */\nexport function appendBoundTools(\n ref: SkillRegistryRef,\n newTools: ToolInterface[],\n policy: Pick<SkillPolicy, \"maxBoundToolsTotal\">,\n): ToolInterface[] {\n const present = new Set(ref.boundSkillTools.map((tool) => tool.name));\n const added: ToolInterface[] = [];\n for (const tool of newTools) {\n if (ref.boundSkillTools.length >= policy.maxBoundToolsTotal) break;\n if (present.has(tool.name)) continue;\n present.add(tool.name);\n ref.boundSkillTools.push(tool);\n added.push(tool);\n }\n return added;\n}\n\n/** Precedence guard: may the model open another (not-yet-open) skill? */\nexport function canOpenSkill(\n ref: SkillRegistryRef,\n policy: SkillPolicy,\n): { ok: true } | { ok: false; reason: string } {\n if (ref.openedSkillKeys.length >= policy.maxOpenSkills) {\n return { ok: false, reason: `max ${policy.maxOpenSkills} skill(s) already open` };\n }\n if (ref.boundSkillTools.length >= policy.maxBoundToolsTotal) {\n return { ok: false, reason: \"skill tool budget exhausted\" };\n }\n return { ok: true };\n}\n\n/** Filter the catalog to skills usable now: available + tier-gated. */\nexport async function resolveAvailableSkills(\n skills: Skill[],\n opts: { modelTier?: SkillPolicy[\"modelTier\"] } = {},\n): Promise<Skill[]> {\n const out: Skill[] = [];\n for (const skill of skills) {\n if (skill.minModelTier === \"large\" && opts.modelTier === \"small\") continue;\n const available = skill.isAvailable ? await skill.isAvailable() : true;\n if (available) out.push(skill);\n }\n return out;\n}\n\n/** The cheap header block the model always sees in its system prompt. */\nexport function buildSkillHeaderBlock(skills: Skill[]): string {\n if (skills.length === 0) return \"\";\n const lines = skills.map((skill) => `- ${skill.key}: ${skill.header}`);\n return [\n \"<available_skills>\",\n \"Open a skill with open_skill(skillKey) to load its tools on demand. Only open what the task needs; close nothing — opened skills stay available for the rest of the run.\",\n ...lines,\n \"</available_skills>\",\n ].join(\"\\n\");\n}\n\nexport function dedupeToolsByName(tools: ToolInterface[]): ToolInterface[] {\n const seen = new Set<string>();\n const out: ToolInterface[] = [];\n for (const tool of tools) {\n if (seen.has(tool.name)) continue;\n seen.add(tool.name);\n out.push(tool);\n }\n return out;\n}\n","import { z } from \"zod\";\n\nimport { createTool } from \"../../tool.js\";\nimport type { ToolInterface } from \"../../types.js\";\nimport { appendBoundTools, canOpenSkill } from \"./registry.js\";\nimport type { Skill, SkillPolicy, SkillRegistryRef } from \"./types.js\";\n\n/**\n * Per-invoke skill tools (`open_skill`, `bind_skill_tools`). They mutate a\n * SkillRegistryRef (append-only) and call `ref.__onToolsChanged()` so the\n * runtime can rebuild its tool sets. Mirrors createAskUserQuestionTool: state\n * is attached to the tool via a private field and read inside `func`.\n */\n\nconst MAX_RETURNED_INDEX = 40;\n\nexport type SkillToolDeps = {\n registryRef: SkillRegistryRef;\n skills: Skill[];\n policy: SkillPolicy;\n};\n\nconst OPEN_SKILL_DESCRIPTION =\n \"Load a capability on demand. Pass a skillKey from <available_skills>. A small \" +\n \"skill binds all its tools immediately; a large one returns a tool index — then \" +\n \"call bind_skill_tools with only the tools you need. Open only what the task needs.\";\n\nconst BIND_SKILL_TOOLS_DESCRIPTION =\n \"After open_skill on a large skill, bind a chosen subset of its tools by name. \" +\n \"Pick the few tools the task actually needs.\";\n\nfunction findSkill(deps: SkillToolDeps, key: string): Skill | undefined {\n return deps.skills.find((skill) => skill.key === key);\n}\n\nexport function createOpenSkillTool(deps: SkillToolDeps): ToolInterface {\n const tool = createTool({\n name: \"open_skill\",\n description: OPEN_SKILL_DESCRIPTION,\n schema: z\n .object({\n skillKey: z.string().min(1).describe(\"A key from <available_skills>.\"),\n query: z\n .string()\n .optional()\n .describe(\"What you need from the skill — used to rank a large skill's tools.\"),\n })\n .strict(),\n func: async ({ skillKey, query }: { skillKey: string; query?: string }) => {\n const { registryRef: ref, policy } = (tool as any)._deps as SkillToolDeps;\n const skill = findSkill((tool as any)._deps, skillKey);\n if (!skill) {\n return { error: `Unknown skill: ${skillKey}. Choose a key listed in <available_skills>.` };\n }\n if (skill.isAvailable && !(await skill.isAvailable())) {\n return { error: `Skill ${skillKey} is not available in this workspace.` };\n }\n\n const alreadyOpen = ref.openedSkillKeys.includes(skillKey);\n if (!alreadyOpen) {\n const guard = canOpenSkill(ref, policy);\n if (!guard.ok) {\n return {\n error: `Cannot open ${skillKey}: ${guard.reason}. Work with the skills already open.`,\n };\n }\n ref.openedSkillKeys.push(skillKey);\n }\n\n const prompt = typeof skill.prompt === \"function\" ? await skill.prompt() : skill.prompt;\n const index = await skill.listToolIndex();\n\n // Small skill: bind everything in one step.\n if (index.length <= policy.maxBoundToolsPerSkill) {\n const bound = await skill.bindTools();\n const added = appendBoundTools(ref, bound, policy);\n if (added.length > 0) ref.__onToolsChanged?.();\n return {\n skillKey,\n prompt,\n needsSandbox: Boolean(skill.needsSandbox),\n boundTools: added.map((t) => t.name),\n // Inject the bound tools into the live runtime for this loop.\n __runtimeToolsDelta: added,\n };\n }\n\n // Fat skill: optionally bind a deterministic default floor (so a weak\n // model that can't pick still gets a working set), then return the index.\n let defaultBound: string[] = [];\n let defaultAdded: ToolInterface[] = [];\n if ((!query || query.trim().length < 3) && skill.defaultBindNames?.length) {\n const bound = await skill.bindTools(skill.defaultBindNames.slice(0, policy.maxBoundToolsPerSkill));\n defaultAdded = appendBoundTools(ref, bound, policy);\n if (defaultAdded.length > 0) ref.__onToolsChanged?.();\n defaultBound = defaultAdded.map((t) => t.name);\n }\n\n const headers =\n query && query.trim().length >= 3 && skill.rankToolHeaders\n ? await skill.rankToolHeaders(query, index)\n : index;\n\n return {\n skillKey,\n prompt,\n needsSandbox: Boolean(skill.needsSandbox),\n boundTools: defaultBound,\n toolIndex: headers.slice(0, MAX_RETURNED_INDEX).map((h) => ({ name: h.name, description: h.description })),\n hint: \"Call bind_skill_tools(skillKey, toolNames) with only the tools you need.\",\n ...(defaultAdded.length > 0 ? { __runtimeToolsDelta: defaultAdded } : {}),\n };\n },\n });\n\n (tool as any)._deps = deps;\n (tool as any).__source = \"smart-skills\";\n return tool;\n}\n\nexport function createBindSkillToolsTool(deps: SkillToolDeps): ToolInterface {\n const tool = createTool({\n name: \"bind_skill_tools\",\n description: BIND_SKILL_TOOLS_DESCRIPTION,\n schema: z\n .object({\n skillKey: z.string().min(1),\n toolNames: z.array(z.string().min(1)).min(1).describe(\"Tool names from the skill's index.\"),\n })\n .strict(),\n func: async ({ skillKey, toolNames }: { skillKey: string; toolNames: string[] }) => {\n const { registryRef: ref, policy } = (tool as any)._deps as SkillToolDeps;\n const skill = findSkill((tool as any)._deps, skillKey);\n if (!skill) {\n return { error: `Unknown skill: ${skillKey}.` };\n }\n if (!ref.openedSkillKeys.includes(skillKey)) {\n return { error: `Call open_skill(\"${skillKey}\") before binding its tools.` };\n }\n\n const capped = toolNames.slice(0, policy.maxBoundToolsPerSkill);\n const bound = await skill.bindTools(capped);\n const added = appendBoundTools(ref, bound, policy);\n if (added.length > 0) ref.__onToolsChanged?.();\n\n return {\n skillKey,\n boundTools: added.map((t) => t.name),\n requested: capped.length,\n truncated: toolNames.length > capped.length,\n ...(added.length > 0 ? { __runtimeToolsDelta: added } : {}),\n };\n },\n });\n\n (tool as any)._deps = deps;\n (tool as any).__source = \"smart-skills\";\n return tool;\n}\n\n/** Both skill tools for an invoke, sharing one registry ref. */\nexport function createSkillTools(deps: SkillToolDeps): ToolInterface[] {\n return [createOpenSkillTool(deps), createBindSkillToolsTool(deps)];\n}\n","import type { AgentInvokeResult, InvokeConfig, SmartAgentOptions, SmartState, SmartAgentInstance, HumanInTheLoopAskUserConfig } from \"../types.js\";\nimport type { ZodSchema } from \"zod\";\nimport { createAgent } from \"../agent.js\";\nimport { createContextTools, createGetToolResponseTool, hasToolResponseRecoveryReference } from \"../contextTools.js\";\nimport { createAskUserQuestionTool } from \"../humanLoop.js\";\nimport { createContextSummarizeNode } from \"../nodes/contextSummarize.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { resolverDecisionFactory, toolsDecisionFactory } from \"../graph/decisions.js\";\nimport { normalizeSmartAgentOptions } from \"./runtimeConfig.js\";\nimport { buildModelMessages } from \"./contextPolicy.js\";\nimport { readMemoryFacts, resolveMemoryStore, writeSummaryFactsToMemory } from \"./memory.js\";\nimport { StructuredOutputManager } from \"../structuredOutput/manager.js\";\nimport { resolveStrategy, getModelCapabilities } from \"../structuredOutput/resolver.js\";\nimport { extractMessageText } from \"../utils/content.js\";\nimport { createSkillRegistryRef, DEFAULT_SKILL_POLICY, type Skill, type SkillPolicy } from \"./skills/types.js\";\nimport { createSkillTools } from \"./skills/skillTools.js\";\nimport { buildSkillHeaderBlock, composeToolSets, resolveAvailableSkills } from \"./skills/registry.js\";\n\n// SmartAgent on top of core createAgent: adds system prompt, optional planning context tools, and token-aware summarization.\nexport function createSmartAgent<TOutput = unknown>(opts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> }): SmartAgentInstance<TOutput> {\n const resolved = normalizeSmartAgentOptions(opts);\n const planningEnabled = resolved.planning.mode !== 'off';\n const memoryStore = resolveMemoryStore(resolved);\n const runtimeOpts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> } = {\n ...opts,\n runtimeProfile: resolved.runtimeProfile,\n limits: resolved.limits,\n summarization: resolved.summarization,\n context: resolved.context,\n planning: resolved.planning,\n delegation: resolved.delegation,\n memory: { ...resolved.memory, store: memoryStore },\n toolResponses: resolved.toolResponses,\n useTodoList: planningEnabled,\n };\n\n // Build a placeholder stateRef + tool set for the base agent construction.\n // Each invoke replaces these with fresh per-call instances so concurrent\n // invocations of the same agent do not clobber each other's plan/todo state.\n const userTools = ((opts.tools as any) ?? []) as any[];\n const factoryStateRef: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined, planVersion: 0, adherenceScore: 0 };\n const factoryContextTools = createContextTools(factoryStateRef, { planningEnabled, includeGetToolResponse: false });\n\n const askUserConfig: HumanInTheLoopAskUserConfig | undefined = (() => {\n const raw = (opts as any).humanInTheLoop?.askUser;\n if (!raw) return undefined;\n if (raw === true) return { enabled: true, allowFreeText: true };\n return {\n enabled: true,\n allowFreeText: raw.allowFreeText !== false,\n promptOverride: raw.promptOverride,\n };\n })();\n\n const factoryToolsWithoutRecovery = [...userTools, ...factoryContextTools];\n if (askUserConfig) {\n factoryToolsWithoutRecovery.push(createAskUserQuestionTool(factoryStateRef, askUserConfig));\n }\n\n // Progressive capability disclosure: when `skills` are supplied, the model\n // sees cheap skill headers and opens them on demand to bind their tools.\n const skills: Skill[] = ((opts as any).skills as Skill[] | undefined) ?? [];\n const skillPolicy: SkillPolicy = ((opts as any).skillPolicy as SkillPolicy | undefined) ?? DEFAULT_SKILL_POLICY;\n const skillsEnabled = skills.length > 0;\n\n // Pre-resolve the structured-output manager so we can plug the `response`\n // finalize tool into the smart runtime's tool set (state.agent.tools).\n // Otherwise the smart agent would override base agent's tools without the\n // finalize tool and the model could never call it.\n const soManagerFactory = opts.outputSchema\n ? new StructuredOutputManager<TOutput>(opts.outputSchema, resolveStrategy(opts.model))\n : undefined;\n const modelCapabilities = opts.outputSchema ? getModelCapabilities(opts.model) : undefined;\n const responseFinalizeTool = soManagerFactory && modelCapabilities?.structuredOutput !== \"native\"\n ? soManagerFactory.getResponseTool()\n : undefined;\n\n type InvokeToolSet = {\n stateRef: any;\n toolsWithoutRecovery: any[];\n toolsWithRecovery: any[];\n skillRegistryRef?: any;\n };\n const buildInvokeToolSet = (): InvokeToolSet => {\n const ref: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined, planVersion: 0, adherenceScore: 0 };\n const ctxTools = createContextTools(ref, { planningEnabled, includeGetToolResponse: false });\n const recoveryTool = createGetToolResponseTool(ref);\n const coreBase = [...userTools, ...ctxTools];\n if (responseFinalizeTool) coreBase.push(responseFinalizeTool);\n if (askUserConfig) coreBase.push(createAskUserQuestionTool(ref, askUserConfig));\n\n if (!skillsEnabled) {\n const without = coreBase;\n const withRec = [...without, recoveryTool];\n return { stateRef: ref, toolsWithoutRecovery: without, toolsWithRecovery: withRec };\n }\n\n // Skill mode: open_skill/bind_skill_tools mutate a per-invoke registry and\n // call __onToolsChanged, which rebuilds BOTH tool-set variants with fresh\n // references so syncRuntimeTools' identity-swap propagates the newly-bound\n // tools (and the recovery variant can never drop them).\n const toolSet: InvokeToolSet = { stateRef: ref, toolsWithoutRecovery: [], toolsWithRecovery: [] };\n const skillRegistryRef = createSkillRegistryRef();\n const skillMetaTools = createSkillTools({ registryRef: skillRegistryRef, skills, policy: skillPolicy });\n const baseWithMeta = [...coreBase, ...skillMetaTools];\n const rebuild = () => {\n const composed = composeToolSets({\n base: baseWithMeta,\n boundSkillTools: skillRegistryRef.boundSkillTools,\n recoveryTool,\n });\n toolSet.toolsWithoutRecovery = composed.toolsWithoutRecovery;\n toolSet.toolsWithRecovery = composed.toolsWithRecovery;\n };\n skillRegistryRef.__onToolsChanged = rebuild;\n toolSet.skillRegistryRef = skillRegistryRef;\n rebuild();\n return toolSet;\n };\n\n // Compose base agent – pass summarization config so createAgent's token-budget\n // guard and __needsSummarization throw know summarization is handled externally.\n const base = createAgent<TOutput>({ ...runtimeOpts, tools: factoryToolsWithoutRecovery });\n base.__runtime.runtimeProfile = resolved.runtimeProfile;\n base.__runtime.smart = resolved;\n\n const summarizationEnabled = resolved.summarization.enable !== false;\n const summarizer = summarizationEnabled ? createContextSummarizeNode(runtimeOpts) : undefined;\n const decideBefore = resolverDecisionFactory(runtimeOpts, summarizationEnabled);\n const decideAfter = toolsDecisionFactory(runtimeOpts, summarizationEnabled);\n\n // Structured output: use the manager from the base agent's strategy resolution\n const soManager = opts.outputSchema\n ? new StructuredOutputManager<TOutput>(opts.outputSchema, resolveStrategy(opts.model))\n : undefined;\n\n const structuredOutputHint = soManager\n ? soManager.buildSystemPromptHint()\n : '';\n\n const runtimeHint = [\n resolved.runtimeProfile === resolved.baseProfile\n ? `Runtime profile: ${resolved.runtimeProfile}.`\n : `Runtime profile: ${resolved.runtimeProfile} (base: ${resolved.baseProfile}).`,\n `Context policy: ${resolved.context.policy}.`,\n `Planning mode: ${resolved.planning.mode}. Replan policy: ${resolved.planning.replanPolicy}.`,\n `Delegation mode: ${resolved.delegation.mode}. Child context policy: ${resolved.delegation.childContextPolicy}.`,\n `Tool response policy: ${resolved.context.toolResponsePolicy}.`,\n ].join('\\n');\n\n function latestUserPrompt(messages: any[]): string {\n const latest = [...messages].reverse().find((message) => message.role === 'user');\n return latest ? extractMessageText(latest) : '';\n }\n\n async function syncMemory(state: SmartState): Promise<SmartState> {\n const query = latestUserPrompt(state.messages || []);\n const memoryFacts = await readMemoryFacts(memoryStore, resolved, query);\n return { ...state, memoryFacts };\n }\n\n async function persistLatestSummary(state: SmartState): Promise<SmartState> {\n if (!memoryStore) return state;\n if (resolved.memory.writePolicy === 'manual') return state;\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n if (!latestSummary) return state;\n if (resolved.memory.writePolicy === 'auto_important' && latestSummary.stable_facts.length === 0) {\n return state;\n }\n const memoryFacts = await writeSummaryFactsToMemory(memoryStore, resolved, latestSummary, Math.max(1, (state.messages || []).filter((message) => message.role === 'user').length));\n return { ...state, memoryFacts };\n }\n\n function syncPlanStateWith(ref: any, state: SmartState): SmartState {\n if (!Array.isArray(ref.todoList)) return state;\n return {\n ...state,\n plan: {\n version: ref.planVersion || state.planVersion || 1,\n steps: ref.todoList,\n lastUpdated: new Date().toISOString(),\n adherenceScore: ref.adherenceScore || 0,\n },\n planVersion: ref.planVersion || state.planVersion || 1,\n };\n }\n\n function systemMessage(extraBlock?: string): any {\n const sys = buildSystemPrompt(\n [opts.systemPrompt, runtimeHint, structuredOutputHint, extraBlock].filter(Boolean).join(\"\\n\"),\n planningEnabled,\n opts.name || \"Agent\",\n opts.todoListPrompt,\n );\n return { role: 'system', content: sys } as any;\n }\n\n function syncRuntimeTools(\n currentState: SmartState,\n currentMessages: any[],\n toolSet: InvokeToolSet,\n ): SmartState {\n const needsRecoveryTool = hasToolResponseRecoveryReference(currentMessages as Array<{ content?: unknown }>);\n const nextTools = needsRecoveryTool ? toolSet.toolsWithRecovery : toolSet.toolsWithoutRecovery;\n const currentRuntime = currentState.agent || base.__runtime;\n\n if (currentRuntime.tools === nextTools) {\n return currentState;\n }\n\n return {\n ...currentState,\n agent: {\n ...currentRuntime,\n tools: nextTools,\n },\n };\n }\n\n function producedTerminalAssistantTurn(messages: any[]) {\n const lastAssistant = [...messages].reverse().find((message) => message?.role === 'assistant');\n if (!lastAssistant) return false;\n const toolCalls = Array.isArray(lastAssistant.tool_calls) ? lastAssistant.tool_calls : [];\n return toolCalls.length === 0;\n }\n\n /** Runs the summarizer and applies the result to state. Returns updated state and whether summarization succeeded. */\n async function trySummarize(\n currentState: SmartState,\n currentRawMessages: any[],\n ref: any,\n ): Promise<{ state: SmartState; rawMessages: any[]; compressed: boolean }> {\n if (!summarizer) return { state: currentState, rawMessages: currentRawMessages, compressed: false };\n const delta = await summarizer(currentState);\n if (!delta || Object.keys(delta).length === 0) {\n const ctx = { ...(currentState.ctx || {}), __summarizationExhausted: true };\n return { state: { ...currentState, ctx } as SmartState, rawMessages: currentRawMessages, compressed: false };\n }\n const ctx = { ...(currentState.ctx || {}) };\n delete ctx.__summarizationExhausted;\n const updated = await persistLatestSummary(syncPlanStateWith(ref, { ...currentState, ...delta, ctx } as SmartState));\n return { state: updated, rawMessages: [...(updated.messages || currentRawMessages)], compressed: true };\n }\n\n const instance: SmartAgentInstance<TOutput> = {\n invoke: async (input: SmartState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // Per-invoke tool set + stateRef so concurrent invocations on the same\n // agent instance never share planning/todo/tool-history state.\n const toolSet = buildInvokeToolSet();\n const stateRef = toolSet.stateRef;\n stateRef.toolHistory = input.toolHistory;\n stateRef.toolHistoryArchived = input.toolHistoryArchived;\n stateRef.todoList = input.plan?.steps;\n stateRef.planVersion = input.planVersion || input.plan?.version || 0;\n stateRef.adherenceScore = input.plan?.adherenceScore || 0;\n\n const syncPlanFromRef = (state: SmartState) => syncPlanStateWith(stateRef, state);\n\n // Resolve which skills are usable this invoke (availability + tier gating)\n // and surface their headers in the system prompt so the model knows what\n // it can open. open_skill re-checks availability at call time.\n const availableSkills = skillsEnabled\n ? await resolveAvailableSkills(skills, { modelTier: skillPolicy.modelTier })\n : [];\n const skillBlock = availableSkills.length > 0 ? buildSkillHeaderBlock(availableSkills) : undefined;\n\n // Prepend a single system message once\n const alreadyHasSystem = Array.isArray(input.messages) && input.messages[0]?.role === 'system';\n const seedMessages = alreadyHasSystem ? [...(input.messages || [])] : [systemMessage(skillBlock), ...(input.messages || [])];\n let state: SmartState = syncRuntimeTools(await syncMemory({ ...input, messages: seedMessages } as SmartState), seedMessages, toolSet);\n let lastResult: AgentInvokeResult<TOutput> | null = null;\n let rawMessages = [...seedMessages];\n const effectiveMaxToolCalls = (config?.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number;\n const iterationLimit = Math.max(effectiveMaxToolCalls * 3 + 5, 30);\n\n for (let i = 0; i < iterationLimit; i++) {\n state = syncRuntimeTools({ ...state, messages: rawMessages } as SmartState, rawMessages, toolSet);\n // Pre-agent summarization decision\n const next = summarizationEnabled ? decideBefore(state) : 'agent';\n if (next === 'contextSummarize' && summarizer) {\n const result = await trySummarize(state, rawMessages, stateRef);\n state = result.state;\n rawMessages = result.rawMessages;\n if (result.compressed) continue;\n }\n\n // Delegate a full turn to base agent (includes tools + tool-limit finalize + structured output finalize)\n const modelMessages = buildModelMessages(state, resolved);\n const res = await base.invoke({ ...state, messages: modelMessages } as SmartState, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n // Preserve summaries from current state when merging with result state\n const currentSummaries = state.summaries;\n const currentSummaryRecords = state.summaryRecords;\n const currentPlan = state.plan;\n const appendedMessages = res.messages.slice(modelMessages.length);\n rawMessages = [...rawMessages, ...appendedMessages];\n state = ((res.state as SmartState) || { ...state, messages: res.messages }) as SmartState;\n state = { ...state, messages: rawMessages } as SmartState;\n // Restore summaries if they were lost during state merge\n if (currentSummaries && currentSummaries.length > 0 && (!state.summaries || state.summaries.length === 0)) {\n state = { ...state, summaries: currentSummaries };\n }\n if (currentSummaryRecords && currentSummaryRecords.length > 0 && (!state.summaryRecords || state.summaryRecords.length === 0)) {\n state = { ...state, summaryRecords: currentSummaryRecords };\n }\n if (currentPlan && !state.plan) {\n state = { ...state, plan: currentPlan };\n }\n state = syncRuntimeTools(syncPlanFromRef(await syncMemory(state)), rawMessages, toolSet);\n stateRef.toolHistory = state.toolHistory;\n stateRef.toolHistoryArchived = state.toolHistoryArchived;\n\n // Check if base agent signaled that summarization is needed (context too large)\n if ((state as any).ctx?.__needsSummarization && summarizer) {\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__needsSummarization;\n state = { ...state, ctx } as SmartState;\n const result = await trySummarize(state, rawMessages, stateRef);\n state = result.state;\n rawMessages = result.rawMessages;\n continue;\n }\n\n // If structured output finalize triggered, base already stopped with parsed output\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n // If the base agent also parsed structured output via JSON-from-text fallback,\n // accept it and stop (the `output` field will be populated even without the flag).\n if (opts.outputSchema && lastResult?.output != null) break;\n\n // Once the model has produced a terminal assistant turn, do not run a\n // post-turn summarization pass. Summary messages are internal state\n // maintenance and should only happen before the next model call, not\n // after a real final answer has already been produced for this turn.\n if (producedTerminalAssistantTurn(appendedMessages)) break;\n\n // Post-tools summarization decision\n if (summarizationEnabled) {\n const after = decideAfter(state);\n if (after === 'contextSummarize' && summarizer) {\n const result = await trySummarize(state, rawMessages, stateRef);\n state = result.state;\n rawMessages = result.rawMessages;\n if (result.compressed) continue;\n }\n }\n\n // If outputSchema is active but the base agent stopped without calling `response`,\n // the base agent's StructuredOutputManager handles retries internally.\n // No additional SmartAgent-level retries needed — the centralized manager\n // already exhausted its maxRetries with proper nudge/correction prompts.\n\n // If base produced an assistant message without tool calls (its normal stop), we're done.\n break;\n }\n\n // Fall back if base was never invoked (edge case)\n if (!lastResult) {\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n }\n\n // Ensure summaries are preserved in the final result\n if (state.summaries && state.summaries.length > 0) {\n if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, messages: rawMessages } };\n } else {\n lastResult = { ...lastResult, state: { ...state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, messages: rawMessages } };\n }\n } else if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, messages: rawMessages } };\n }\n\n return lastResult as AgentInvokeResult<TOutput>;\n },\n snapshot: base.snapshot,\n resume: base.resume,\n resolveToolApproval: base.resolveToolApproval,\n resolveUserQuestion: base.resolveUserQuestion,\n asTool: base.asTool,\n asHandoff: base.asHandoff,\n __runtime: base.__runtime,\n };\n\n return instance;\n}\n","import type {\n EvalCase,\n EvalCaseResult,\n EvalHarnessMetrics,\n EvalProfileDescriptor,\n EvalProfileTarget,\n EvalHarnessResult,\n RuntimeProfile,\n SmartAgentEvent,\n SmartAgentInstance,\n SmartState,\n} from \"../types.js\";\n\nexport type EvalHarnessParams = {\n profiles: EvalProfileTarget[];\n cases: EvalCase[];\n createAgent: (profile: RuntimeProfile, descriptor: EvalProfileDescriptor) => SmartAgentInstance<any>;\n};\n\nfunction normalizeProfileTarget(target: EvalProfileTarget): EvalProfileDescriptor {\n if (typeof target === \"string\") {\n return {\n label: target,\n runtimeProfile: target,\n baseProfile: target === \"custom\" ? \"balanced\" : target,\n };\n }\n return {\n label: target.label,\n runtimeProfile: target.runtimeProfile,\n baseProfile: target.baseProfile ?? (target.runtimeProfile === \"custom\" ? target.customProfile?.extends ?? \"balanced\" : target.runtimeProfile),\n customProfile: target.customProfile,\n };\n}\n\nfunction normalizeText(value: string | undefined): string {\n return (value || \"\").toLowerCase();\n}\n\nfunction ratio(numerator: number, denominator: number): number {\n if (denominator <= 0) return 1;\n return Number((numerator / denominator).toFixed(3));\n}\n\nfunction sum(values: number[]): number {\n return values.reduce((acc, value) => acc + value, 0);\n}\n\nfunction mean(values: number[]): number {\n if (values.length === 0) return 0;\n return Number((sum(values) / values.length).toFixed(3));\n}\n\nfunction extractTotalTokens(usage: any): number {\n if (!usage?.totals || typeof usage.totals !== \"object\") return 0;\n return Object.values(usage.totals).reduce((acc: number, entry: any) => acc + (Number(entry?.total) || 0), 0);\n}\n\nfunction caseResultFromRun(\n descriptor: EvalProfileDescriptor,\n testCase: EvalCase,\n content: string,\n events: SmartAgentEvent[],\n state: SmartState | undefined,\n latencyMs: number,\n totalTokens: number,\n): EvalCaseResult {\n const normalizedContent = normalizeText(content);\n const matchedPhrases = (testCase.expectedPhrases || []).filter((phrase) => normalizedContent.includes(normalizeText(phrase)));\n const matchedFacts = (testCase.expectedFacts || []).filter((fact) => {\n const memoryMatch = state?.memoryFacts?.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value)));\n const summaryMatch = state?.summaryRecords?.some((record) => record.stable_facts.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value))));\n return Boolean(memoryMatch || summaryMatch || normalizedContent.includes(normalizeText(fact.value)));\n });\n const forbiddenMisses = (testCase.forbiddenPhrases || []).filter((phrase) => !normalizedContent.includes(normalizeText(phrase)));\n const toolCalls = events.filter((event) => event.type === \"tool_call\" && event.phase === \"success\") as Array<Extract<SmartAgentEvent, { type: \"tool_call\" }>>;\n const expectedToolHits = (testCase.expectedToolNames || []).filter((toolName) => toolCalls.some((event) => event.name === toolName));\n const toolPrecision = ratio(expectedToolHits.length, Math.max(toolCalls.length, 1));\n const recallAccuracy = ratio(matchedPhrases.length + matchedFacts.length, (testCase.expectedPhrases?.length || 0) + (testCase.expectedFacts?.length || 0));\n const obsoleteDropAccuracy = ratio(forbiddenMisses.length, testCase.forbiddenPhrases?.length || 0);\n const trajectoryScore = ratio(expectedToolHits.length, testCase.expectedToolNames?.length || 0);\n const hadRecoverableError = events.some((event) => event.type === \"tool_call\" && event.phase === \"error\");\n const recoveryRate = hadRecoverableError ? Number((normalizedContent.length > 0 ? 1 : 0).toFixed(3)) : 1;\n const overToolingRate = toolCalls.length === 0 ? 0 : Number((Math.max(0, toolCalls.length - Math.max(testCase.expectedToolNames?.length || 0, 1)) / toolCalls.length).toFixed(3));\n const success = recallAccuracy >= 0.8 && obsoleteDropAccuracy >= 0.8;\n\n return {\n id: testCase.id,\n family: testCase.family,\n success,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore: Number(((trajectoryScore + toolPrecision) / 2).toFixed(3)),\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n notes: success ? [] : [\n recallAccuracy < 0.8 ? \"Recall below threshold.\" : \"\",\n obsoleteDropAccuracy < 0.8 ? \"Obsolete filtering below threshold.\" : \"\",\n trajectoryScore < 0.5 ? \"Tool trajectory diverged from expectation.\" : \"\",\n ].filter(Boolean),\n };\n}\n\nfunction aggregateMetrics(caseResults: EvalCaseResult[]): EvalHarnessMetrics {\n const taskSuccess = ratio(caseResults.filter((result) => result.success).length, caseResults.length);\n const recallAccuracy = mean(caseResults.map((result) => result.recallAccuracy));\n const obsoleteDropAccuracy = mean(caseResults.map((result) => result.obsoleteDropAccuracy));\n const trajectoryScore = mean(caseResults.map((result) => result.trajectoryScore));\n const recoveryRate = mean(caseResults.map((result) => result.recoveryRate));\n const overToolingRate = mean(caseResults.map((result) => result.overToolingRate));\n const latencyMs = mean(caseResults.map((result) => result.latencyMs));\n const totalTokens = sum(caseResults.map((result) => result.totalTokens || 0));\n const toolPrecision = trajectoryScore;\n const costScore = totalTokens <= 0 ? 1 : Number((1 / (1 + totalTokens / 10000)).toFixed(3));\n const score = Number((\n (0.45 * taskSuccess)\n + (0.20 * trajectoryScore)\n + (0.15 * toolPrecision)\n + (0.10 * recoveryRate)\n + (0.10 * costScore)\n ).toFixed(3));\n\n return {\n taskSuccess,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore,\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n score,\n };\n}\n\nexport async function runSmartAgentEvalHarness(params: EvalHarnessParams): Promise<EvalHarnessResult[]> {\n const results: EvalHarnessResult[] = [];\n\n for (const profileTarget of params.profiles) {\n const descriptor = normalizeProfileTarget(profileTarget);\n const caseResults: EvalCaseResult[] = [];\n\n for (const testCase of params.cases) {\n const agent = params.createAgent(descriptor.runtimeProfile, descriptor);\n const events: SmartAgentEvent[] = [];\n const startedAt = Date.now();\n const result = await agent.invoke({\n messages: [{ role: \"user\", content: testCase.prompt }],\n } as SmartState, {\n onEvent: (event) => {\n events.push(event);\n },\n });\n\n caseResults.push(caseResultFromRun(\n descriptor,\n testCase,\n result.content,\n events,\n result.state,\n Date.now() - startedAt,\n extractTotalTokens(result.metadata?.usage),\n ));\n }\n\n results.push({\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n metrics: aggregateMetrics(caseResults),\n cases: caseResults,\n });\n }\n\n return results;\n}","import AjvModule, { type ValidateFunction, type ErrorObject, type Options } from \"ajv\";\nimport { z } from \"zod\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n GuardrailRule,\n GuardrailContext,\n GuardrailDisposition,\n SmartAgentInstance,\n} from \"../types.js\";\nimport { contentToString, mergeContentsToString } from \"../utils/content.js\";\n\nconst Ajv = (AjvModule as unknown as { default?: new (options?: Options) => any })?.default ?? (AjvModule as unknown as new (options?: Options) => any);\nconst defaultAjv = new Ajv({ allErrors: true } satisfies Options);\n(defaultAjv as any).opts.strict = false;\n\nfunction ensureRegExp(pattern: RegExp | string, flags?: string): RegExp {\n if (pattern instanceof RegExp) return pattern;\n return new RegExp(pattern, flags ?? \"i\");\n}\n\nfunction latestText(context: GuardrailContext): string {\n return contentToString(context.latestMessage?.content ?? \"\");\n}\n\nfunction threadText(context: GuardrailContext): string {\n return mergeContentsToString(context.messages.map((msg) => msg.content));\n}\n\nexport type RegexRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n pattern: RegExp | string;\n flags?: string;\n matchDisposition?: GuardrailDisposition;\n selector?: (context: GuardrailContext) => string;\n allowIfMatch?: boolean;\n failureMessage?: string;\n};\n\nexport function regexRule(options: RegexRuleOptions): GuardrailRule {\n const regex = ensureRegExp(options.pattern, options.flags);\n const selector = options.selector || latestText;\n const failureMessage =\n options.failureMessage || `Message violates pattern: ${regex.toString()}`;\n const matchDisposition = options.matchDisposition || \"block\";\n const allowIfMatch = options.allowIfMatch === true;\n\n return {\n id: options.id,\n title: options.title || \"Regex compliance\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n const matches = regex.test(text);\n const passed = allowIfMatch ? matches : !matches;\n const disposition = matches ? matchDisposition : \"allow\";\n return {\n passed,\n reason: matches ? failureMessage : undefined,\n disposition,\n details: matches ? { pattern: regex.toString(), textSnippet: text.slice(0, 200) } : undefined,\n };\n },\n };\n}\n\nexport type JsonSchemaRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n schema: JSONSchema7 | z.ZodTypeAny;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowOnParseError?: boolean;\n};\n\nfunction compileValidator(\n schema: JSONSchema7 | z.ZodTypeAny\n): ((input: unknown) => { valid: boolean; errors?: string[] }) {\n if ((schema as z.ZodTypeAny)?._def) {\n const typed = schema as z.ZodTypeAny;\n return (input: unknown) => {\n const result = typed.safeParse(input);\n return {\n valid: result.success,\n errors: result.success\n ? undefined\n : result.error.issues.map((issue) => issue.message),\n };\n };\n }\n\n const validator: ValidateFunction = defaultAjv.compile(schema as JSONSchema7);\n return (input: unknown) => {\n const valid = validator(input);\n const errors = (validator.errors as ErrorObject[] | null | undefined)?.map((err) => {\n const path = (\"instancePath\" in err && typeof err.instancePath === \"string\" && err.instancePath.length > 0)\n ? err.instancePath\n : ((err as any).dataPath as string | undefined);\n return `${path || \"/\"} ${err.message || \"invalid\"}`;\n });\n return { valid: !!valid, errors };\n };\n}\n\nexport function jsonSchemaRule(options: JsonSchemaRuleOptions): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"block\";\n const validator = compileValidator(options.schema);\n\n return {\n id: options.id,\n title: options.title || \"JSON schema validation\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (err) {\n if (options.allowOnParseError) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message content is not valid JSON.\",\n details: { error: err instanceof Error ? err.message : String(err) },\n };\n }\n\n const result = validator(parsed);\n if (result.valid) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message JSON failed schema validation.\",\n details: { errors: result.errors },\n };\n },\n };\n}\n\nexport type CodeDetectionRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowList?: Array<RegExp | string>;\n};\n\nfunction containsAllowListed(text: string, allowList?: Array<RegExp | string>): boolean {\n if (!allowList?.length) return false;\n return allowList.some((pattern) => ensureRegExp(pattern).test(text));\n}\n\nconst codePattern = /```[\\s\\S]*?```|\\b(function|class|import|export|const|let|var)\\b|<[^>]+>/i;\n\nexport function codePresenceRule(options: CodeDetectionRuleOptions = {}): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"warn\";\n\n return {\n id: options.id,\n title: options.title || \"Code presence detection\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n if (!text) return { passed: true };\n if (containsAllowListed(text, options.allowList)) {\n return { passed: true };\n }\n const matches = codePattern.test(text);\n if (!matches) return { passed: true };\n return {\n passed: false,\n disposition,\n reason: \"Potential code content detected in message.\",\n details: { snippet: text.slice(0, 200) },\n };\n },\n };\n}\n\nconst guardianSchema = z.object({\n allow: z.boolean().describe(\"Whether the message should be allowed.\"),\n disposition: z.enum([\"allow\", \"warn\", \"block\"]).optional(),\n reason: z\n .string()\n .max(400, \"Reason must be 400 characters or fewer.\")\n .optional(),\n details: z.record(z.any()).optional(),\n});\n\nexport type AgentRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n agent: SmartAgentInstance<z.infer<typeof guardianSchema>>;\n systemPrompt?: string;\n payloadBuilder?: (context: GuardrailContext) => string;\n dispositionFallback?: GuardrailDisposition;\n};\n\nfunction defaultPayload(context: GuardrailContext): string {\n const latest = latestText(context);\n const transcript = threadText(context);\n return JSON.stringify(\n {\n phase: context.phase,\n latestMessage: latest,\n transcript,\n metadata: {\n runtime: {\n name: context.runtime?.name,\n version: context.runtime?.version,\n },\n },\n },\n null,\n 2\n );\n}\n\nexport function agentVerdictRule(options: AgentRuleOptions): GuardrailRule {\n const payloadBuilder = options.payloadBuilder || defaultPayload;\n const fallbackDisposition = options.dispositionFallback || \"block\";\n\n return {\n id: options.id,\n title: options.title || \"Agent-based guardrail\",\n description: options.description,\n async evaluate(context) {\n const payload = payloadBuilder(context);\n const systemPrompt =\n options.systemPrompt ||\n \"You are a safety auditor. Review the provided conversation payload and decide whether it should continue. Return JSON with keys allow (boolean), optional disposition ('allow' | 'warn' | 'block'), optional reason (string), and optional details (object).\";\n\n const review = await options.agent.invoke({\n messages: [\n { role: \"system\", content: systemPrompt } as any,\n { role: \"user\", content: payload } as any,\n ],\n });\n\n let parsed = review.output;\n if (!parsed) {\n try {\n parsed = guardianSchema.parse(JSON.parse(review.content));\n } catch {\n parsed = guardianSchema.parse({ allow: false, reason: \"Guard agent did not return structured output.\" });\n }\n }\n\n const disposition = parsed.disposition || (parsed.allow ? \"allow\" : fallbackDisposition);\n return {\n passed: parsed.allow,\n disposition,\n reason: parsed.reason,\n details: parsed.details,\n };\n },\n };\n}\n\nexport type CustomRuleCallback = (\n context: GuardrailContext\n) =>\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n | Promise<\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n >;\n\nexport type CustomRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n callback: CustomRuleCallback;\n defaultDisposition?: GuardrailDisposition;\n};\n\nexport function customCallbackRule(options: CustomRuleOptions): GuardrailRule {\n const fallbackDisposition = options.defaultDisposition || \"block\";\n return {\n id: options.id,\n title: options.title || \"Custom callback guardrail\",\n description: options.description,\n async evaluate(context) {\n const outcome = await options.callback(context);\n if (typeof outcome === \"boolean\") {\n return {\n passed: outcome,\n disposition: outcome ? \"allow\" : fallbackDisposition,\n };\n }\n return {\n passed: outcome.allow,\n disposition: outcome.disposition || (outcome.allow ? \"allow\" : fallbackDisposition),\n reason: outcome.reason,\n details: outcome.details,\n };\n },\n };\n}\n","import { GuardrailPhase, type ConversationGuardrail } from \"../types.js\";\nimport { evaluateGuardrails, createGuardrail } from \"./engine.js\";\nimport {\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n} from \"./checks.js\";\nimport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n} from \"./checks.js\";\n\nexport {\n evaluateGuardrails,\n createGuardrail,\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n};\n\nexport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n};\n\ntype GuardrailPresetBase = {\n guardrailId?: string;\n guardrailTitle?: string;\n guardrailDescription?: string;\n phases?: GuardrailPhase[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport type RegexGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<RegexRuleOptions, \"pattern\">;\n};\n\nexport function createRegexGuardrail(\n pattern: RegExp | string,\n options?: RegexGuardrailOptions\n): ConversationGuardrail {\n const rule = regexRule({ pattern, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"Regex Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type JsonGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<JsonSchemaRuleOptions, \"schema\">;\n};\n\nexport function createJsonGuardrail(\n schema: JsonSchemaRuleOptions[\"schema\"],\n options?: JsonGuardrailOptions\n): ConversationGuardrail {\n const rule = jsonSchemaRule({ schema, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"JSON Schema Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type CodeGuardrailOptions = GuardrailPresetBase & {\n rule?: CodeDetectionRuleOptions;\n};\n\nexport function createCodeGuardrail(options?: CodeGuardrailOptions): ConversationGuardrail {\n const ruleOptions = { disposition: \"warn\" as const, ...(options?.rule || {}) };\n const rule = codePresenceRule(ruleOptions);\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || ruleOptions.title || \"Code Presence Guardrail\",\n description: options?.guardrailDescription || ruleOptions.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n","// ─── Unified LLM Provider Types ─────────────────────────────────────────────\n// Provider-agnostic request/response contracts consumed by all native providers.\n// Each provider converts these into its own wire format and maps back.\n\n// ─── Messages ────────────────────────────────────────────────────────────────\n\nexport type MessageRole = \"system\" | \"user\" | \"assistant\" | \"tool\";\n\nexport type TextContent = { type: \"text\"; text: string };\n\nexport type ImageContent = {\n type: \"image\";\n source:\n | { type: \"base64\"; mediaType: string; data: string }\n | { type: \"url\"; url: string };\n};\n\nexport type ContentPart = TextContent | ImageContent;\n\nexport type ToolCall = {\n id: string;\n name: string;\n arguments: string; // JSON string\n};\n\n/**\n * A provider-native reasoning/thinking block. Captured from the model response\n * and replayed verbatim on subsequent turns (required by Anthropic extended\n * thinking when tools are involved — the `signature` must round-trip intact).\n */\nexport type ReasoningBlock = {\n type: \"thinking\" | \"redacted_thinking\";\n /** Plain-text thinking content (absent for redacted blocks). */\n text?: string;\n /** Cryptographic signature Anthropic requires to be echoed back verbatim. */\n signature?: string;\n /** Opaque payload for redacted_thinking blocks. */\n data?: string;\n};\n\n/** Captured reasoning payload attached to assistant turns / responses. */\nexport type ReasoningPayload = {\n /** Verbatim provider blocks to replay on the next turn. */\n blocks?: ReasoningBlock[];\n /** Human-readable reasoning summary, when the provider exposes one. */\n summary?: string;\n};\n\nexport type UnifiedMessage = {\n role: MessageRole;\n content: string | ContentPart[];\n name?: string;\n toolCalls?: ToolCall[];\n toolCallId?: string; // for tool result messages\n /** Native reasoning blocks to replay verbatim (Anthropic/Bedrock thinking). */\n reasoning?: ReasoningPayload;\n};\n\n// ─── Tool Definition ─────────────────────────────────────────────────────────\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n parameters: Record<string, any>; // JSON Schema\n strict?: boolean;\n};\n\n// ─── Request ─────────────────────────────────────────────────────────────────\n\nexport type ChatCompletionRequest = {\n model: string;\n messages: UnifiedMessage[];\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n stop?: string[];\n tools?: ToolDefinition[];\n toolChoice?: \"auto\" | \"required\" | \"none\" | { name: string };\n responseFormat?: {\n type: \"json_schema\" | \"json_object\" | \"text\";\n schema?: Record<string, any>;\n name?: string;\n };\n stream?: boolean;\n // Provider-specific extras passed raw into the body (escape hatch)\n extra?: Record<string, any>;\n /**\n * Unified native-reasoning request config. Each provider maps this to its\n * own shape:\n * - OpenAI o-series: body.reasoning_effort = effort\n * - OpenAI Responses: body.reasoning = { effort }\n * - Anthropic: body.thinking = { type: \"enabled\", budget_tokens }\n * - Google / Vertex: body.generationConfig.thinkingConfig = { thinkingBudget, includeThoughts }\n *\n * Providers silently ignore unsupported fields.\n */\n reasoning?: ReasoningRequestConfig;\n};\n\nexport type ReasoningEffort = \"minimal\" | \"low\" | \"medium\" | \"high\";\n\nexport type ReasoningRequestConfig = {\n /** Qualitative effort hint (mapped per-provider). */\n effort?: ReasoningEffort;\n /** Explicit per-call token budget for reasoning/thinking. */\n budgetTokens?: number;\n /** Whether the provider should expose its reasoning/thought summary to the caller. Default false. */\n includeThoughts?: boolean;\n /** Provider-specific passthrough merged on top of the mapped shape. */\n providerExtras?: Record<string, any>;\n};\n\n// ─── Token Usage ─────────────────────────────────────────────────────────────\n\nexport type TokenUsage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cachedInputTokens: number;\n cachedWriteTokens: number;\n cachedOutputTokens: number;\n reasoningTokens: number;\n};\n\nexport function emptyUsage(): TokenUsage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: 0,\n };\n}\n\n// ─── Response ────────────────────────────────────────────────────────────────\n\nexport type FinishReason = \"stop\" | \"tool_calls\" | \"length\" | \"content_filter\" | \"error\";\n\nexport type ChatCompletionResponse = {\n id: string;\n model: string;\n content: string | null;\n toolCalls: ToolCall[];\n usage: TokenUsage;\n finishReason: FinishReason;\n /** Native reasoning blocks + summary captured from the response, if any. */\n reasoning?: ReasoningPayload;\n raw: any; // Original provider response\n};\n\n// ─── Stream Chunk ────────────────────────────────────────────────────────────\n\nexport type ChatCompletionChunk = {\n id: string;\n model: string;\n delta: {\n content?: string;\n toolCalls?: Partial<ToolCall>[];\n /** Incremental reasoning text / signature deltas (Anthropic thinking). */\n reasoning?: ReasoningPayload;\n };\n usage?: TokenUsage;\n finishReason?: FinishReason;\n};\n\n// ─── Provider Configs ────────────────────────────────────────────────────────\n\nexport type ProviderRetryConfig = {\n /** Maximum retries on 429/5xx (default 3). */\n maxRetries?: number;\n /** Initial delay between retries in ms (default 500, doubled each attempt). */\n baseDelayMs?: number;\n /** Hard cap on a single retry delay in ms (default 8000). */\n maxDelayMs?: number;\n /** Custom predicate to opt in/out of a specific retry. */\n shouldRetry?: (error: any, attempt: number) => boolean;\n};\n\nexport type OpenAIProviderConfig = {\n provider: \"openai\";\n apiKey: string;\n baseURL?: string;\n organization?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n retry?: ProviderRetryConfig;\n};\n\nexport type AnthropicProviderConfig = {\n provider: \"anthropic\";\n apiKey: string;\n baseURL?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n anthropicVersion?: string;\n retry?: ProviderRetryConfig;\n /**\n * Prompt caching configuration. When enabled, places cache_control:\n * ephemeral breakpoints on the system prompt and the final tool definition,\n * which is the recommended Anthropic recipe for static system + tools.\n */\n prompt_caching?: { enabled: boolean };\n};\n\nexport type AzureProviderConfig = {\n provider: \"azure\";\n apiKey: string;\n endpoint: string; // e.g. https://my-resource.openai.azure.com\n apiVersion?: string;\n deploymentName?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type OpenAICompatibleProviderConfig = {\n provider: \"openai-compatible\";\n apiKey: string;\n baseURL: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type BedrockProviderConfig = {\n provider: \"bedrock\";\n region: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n retry?: ProviderRetryConfig;\n /**\n * Insert Bedrock Converse `cachePoint` blocks at the end of the system\n * prompt and tools list. Only supported by models that implement Converse\n * prompt caching (most Anthropic Claude variants on Bedrock).\n */\n prompt_caching?: { enabled: boolean };\n};\n\nexport type VertexProviderConfig = {\n provider: \"vertex\";\n projectId: string;\n location?: string;\n accessToken?: string;\n serviceAccountJson?: string | Record<string, any>;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type ProviderConfig =\n | OpenAIProviderConfig\n | AnthropicProviderConfig\n | AzureProviderConfig\n | OpenAICompatibleProviderConfig\n | BedrockProviderConfig\n | VertexProviderConfig;\n\nexport type ProviderType = ProviderConfig[\"provider\"];\n\n// ─── Provider Error ──────────────────────────────────────────────────────────\n\nexport class ProviderError extends Error {\n constructor(\n message: string,\n public readonly provider: string,\n public readonly statusCode?: number,\n public readonly responseBody?: any,\n ) {\n super(message);\n this.name = \"ProviderError\";\n }\n}\n","// Abstract base class for all native LLM providers.\n// Each concrete provider implements the conversion between unified ↔ wire format.\n\nimport type {\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatCompletionChunk,\n ProviderType,\n} from \"./types.js\";\n\nexport type ProviderRetryPolicy = {\n /** Maximum number of retries on 429/5xx responses. Default: 3. */\n maxRetries?: number;\n /** Initial backoff in ms (doubled on each retry). Default: 500. */\n baseDelayMs?: number;\n /** Hard cap on individual delay between retries. Default: 8000. */\n maxDelayMs?: number;\n /**\n * Custom predicate to decide whether to retry. By default we retry 429\n * and 5xx responses; pass a function to broaden/narrow that set.\n */\n shouldRetry?: (error: any, attempt: number) => boolean;\n};\n\nconst DEFAULT_RETRY: Required<Pick<ProviderRetryPolicy, \"maxRetries\" | \"baseDelayMs\" | \"maxDelayMs\">> = {\n maxRetries: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n};\n\nexport abstract class BaseProvider {\n abstract readonly providerName: ProviderType;\n protected retryPolicy: ProviderRetryPolicy = DEFAULT_RETRY;\n\n /** Non-streaming completion */\n abstract complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;\n\n /** Streaming completion – yields incremental chunks */\n abstract completeStream(\n request: ChatCompletionRequest,\n ): AsyncGenerator<ChatCompletionChunk, void, unknown>;\n\n /**\n * Helper concrete providers can wrap their fetch with. Retries 429/5xx\n * with exponential backoff and respects Retry-After if the response\n * carries one.\n */\n protected async doFetchWithRetry(execute: () => Promise<Response>): Promise<Response> {\n const policy = this.retryPolicy;\n const maxRetries = Math.max(0, policy.maxRetries ?? DEFAULT_RETRY.maxRetries);\n const baseDelay = Math.max(0, policy.baseDelayMs ?? DEFAULT_RETRY.baseDelayMs);\n const maxDelay = Math.max(baseDelay, policy.maxDelayMs ?? DEFAULT_RETRY.maxDelayMs);\n\n let lastResp: Response | undefined;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const res = await execute();\n const isRetryable = res.status === 429 || (res.status >= 500 && res.status < 600);\n if (!isRetryable) return res;\n\n // Custom predicate gets a chance to opt out.\n const predicate = policy.shouldRetry;\n if (predicate && !predicate({ status: res.status }, attempt)) return res;\n\n if (attempt === maxRetries) {\n lastResp = res;\n break;\n }\n // Respect Retry-After when present (in seconds or HTTP date).\n const retryAfter = res.headers.get(\"retry-after\");\n let delay = Math.min(maxDelay, baseDelay * Math.pow(2, attempt));\n if (retryAfter) {\n const asNumber = Number(retryAfter);\n if (!Number.isNaN(asNumber)) delay = Math.min(maxDelay, Math.max(delay, asNumber * 1000));\n }\n // Drain the body so the connection can be reused.\n try { await res.text(); } catch { /* ignore */ }\n await new Promise((r) => setTimeout(r, delay));\n }\n return lastResp!;\n }\n}\n","// SSE (Server-Sent Events) stream parser for fetch Response bodies.\n// Works with OpenAI, Anthropic, Azure, Vertex and any text/event-stream endpoint.\n\nexport type SSEEvent = {\n event?: string;\n data: string;\n id?: string;\n retry?: number;\n};\n\n/**\n * Parses an SSE text/event-stream from a ReadableStream<Uint8Array>.\n * Yields individual SSEEvent objects for each complete event block.\n */\nexport async function* parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n): AsyncGenerator<SSEEvent, void, unknown> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n if (signal?.aborted) break;\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n // SSE events are separated by double newlines\n const parts = buffer.split(/\\r?\\n\\r?\\n/);\n // Keep the last (potentially incomplete) part in the buffer\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n if (!part.trim()) continue;\n const event = parseSSEBlock(part);\n if (event) yield event;\n }\n }\n\n // Process any remaining data\n if (buffer.trim()) {\n const event = parseSSEBlock(buffer);\n if (event) yield event;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction parseSSEBlock(block: string): SSEEvent | null {\n let event: string | undefined;\n let id: string | undefined;\n let retry: number | undefined;\n const dataLines: string[] = [];\n\n for (const line of block.split(/\\r?\\n/)) {\n if (line.startsWith(\":\")) continue; // comment\n\n const colonIdx = line.indexOf(\":\");\n let field: string;\n let value: string;\n\n if (colonIdx === -1) {\n field = line;\n value = \"\";\n } else {\n field = line.slice(0, colonIdx);\n value = line.slice(colonIdx + 1);\n if (value.startsWith(\" \")) value = value.slice(1); // strip leading space\n }\n\n switch (field) {\n case \"event\":\n event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n case \"id\":\n id = value;\n break;\n case \"retry\": {\n const n = parseInt(value, 10);\n if (!isNaN(n)) retry = n;\n break;\n }\n }\n }\n\n if (dataLines.length === 0) return null;\n return { event, data: dataLines.join(\"\\n\"), id, retry };\n}\n","// Provider-agnostic mapper for ReasoningRequestConfig.\n// Each native provider calls one of these helpers inside its buildRequestBody.\n// The helpers are defensive — unknown fields are ignored silently so callers\n// can pass a unified config regardless of the current provider.\n\nimport type { ReasoningRequestConfig, ReasoningEffort } from \"../types.js\";\n\nexport type OpenAIReasoningMode = \"legacy_effort\" | \"responses\";\n\n// ─── Effort → token-budget tables ──────────────────────────────────────────\n// Centralised so every provider derives budgets from the same numbers. Values\n// are deliberately conservative; Anthropic/Bedrock additionally clamp the\n// budget below `max_tokens` (a provider hard requirement).\nexport const ANTHROPIC_EFFORT_BUDGET: Record<ReasoningEffort, number> = {\n minimal: 1024,\n low: 2048,\n medium: 8192,\n high: 16384,\n};\n\nexport const GEMINI_EFFORT_BUDGET: Record<ReasoningEffort, number> = {\n minimal: 512,\n low: 1024,\n medium: 4096,\n high: 12000,\n};\n\n/** Minimum gap between the thinking budget and `max_tokens` for Anthropic/Bedrock. */\nconst THINKING_OUTPUT_RESERVE = 1024;\n/** Floor for `max_tokens` once thinking is enabled (budget + reserve at least this). */\nconst THINKING_MIN_MAX_TOKENS = 4096;\n\n/** Maps a unified reasoning config onto the OpenAI Chat Completions body.\n *\n * For o-series (o1, o3, o4, gpt-5) the accepted field is `reasoning_effort`.\n * We keep the mapping best-effort; models that don't support it will respond\n * with a 400 — in that case callers should not pass `reasoning` at all.\n */\nexport function applyOpenAIReasoning(\n body: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n mode: OpenAIReasoningMode = \"legacy_effort\",\n): void {\n if (!reasoning) return;\n const effort = normalizeEffort(reasoning.effort);\n if (mode === \"responses\") {\n const obj: Record<string, any> = {};\n if (effort) obj.effort = effort;\n if (reasoning.includeThoughts) obj.summary = \"auto\";\n if (reasoning.providerExtras) Object.assign(obj, reasoning.providerExtras);\n if (Object.keys(obj).length > 0) body.reasoning = obj;\n } else {\n if (effort) body.reasoning_effort = effort;\n if (reasoning.providerExtras) Object.assign(body, reasoning.providerExtras);\n }\n}\n\n/** Maps onto Anthropic Messages API body.\n *\n * Requires claude-sonnet-3.7+, claude-opus-4, claude-sonnet-4 etc. Anthropic\n * requires an explicit budget_tokens value (we derive it from effort when the\n * caller didn't specify one) AND that `budget_tokens < max_tokens`. When\n * thinking is enabled Anthropic also rejects non-default `temperature`/`top_p`/\n * `top_k`, so we strip them here so callers can pass a unified config safely.\n */\nexport function applyAnthropicReasoning(\n body: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n): void {\n if (!reasoning) return;\n let budget = resolveBudget(reasoning, ANTHROPIC_EFFORT_BUDGET);\n if (!budget) return;\n\n // Ensure max_tokens leaves room for the visible answer on top of thinking.\n const currentMax = typeof body.max_tokens === \"number\" ? body.max_tokens : 0;\n const requiredMax = Math.max(THINKING_MIN_MAX_TOKENS, budget + THINKING_OUTPUT_RESERVE);\n if (currentMax < requiredMax) {\n body.max_tokens = requiredMax;\n }\n // Clamp the budget strictly below max_tokens (Anthropic hard requirement).\n budget = clampBudget(budget, body.max_tokens);\n\n const thinking: Record<string, any> = { type: \"enabled\", budget_tokens: budget };\n if (reasoning.providerExtras) Object.assign(thinking, reasoning.providerExtras);\n body.thinking = thinking;\n\n // Thinking mode forbids sampling overrides.\n stripSamplingParams(body, [\"temperature\", \"top_p\", \"top_k\"]);\n}\n\n/** Maps onto AWS Bedrock Converse for thinking-capable Anthropic models via\n * `additionalModelRequestFields.thinking`. Same budget/temperature rules as the\n * direct Anthropic API apply. The Converse body is mutated in place.\n */\nexport function applyBedrockReasoning(\n body: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n): void {\n if (!reasoning) return;\n let budget = resolveBudget(reasoning, ANTHROPIC_EFFORT_BUDGET);\n if (!budget) return;\n\n const inference = (body.inferenceConfig ??= {});\n const currentMax = typeof inference.maxTokens === \"number\" ? inference.maxTokens : 0;\n const requiredMax = Math.max(THINKING_MIN_MAX_TOKENS, budget + THINKING_OUTPUT_RESERVE);\n if (currentMax < requiredMax) {\n inference.maxTokens = requiredMax;\n }\n budget = clampBudget(budget, inference.maxTokens);\n\n const extra = (body.additionalModelRequestFields ??= {});\n const thinking: Record<string, any> = { type: \"enabled\", budget_tokens: budget };\n if (reasoning.providerExtras) Object.assign(thinking, reasoning.providerExtras);\n extra.thinking = thinking;\n\n // Thinking mode forbids sampling overrides on the inferenceConfig.\n stripSamplingParams(inference, [\"temperature\", \"topP\"]);\n}\n\n/** Maps onto Google Vertex / Gemini generationConfig. */\nexport function applyGeminiReasoning(\n generationConfig: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n): void {\n if (!reasoning) return;\n const budget = resolveBudget(reasoning, GEMINI_EFFORT_BUDGET);\n if (budget == null) return;\n const thinkingConfig: Record<string, any> = { thinkingBudget: budget };\n if (reasoning.includeThoughts) thinkingConfig.includeThoughts = true;\n if (reasoning.providerExtras) Object.assign(thinkingConfig, reasoning.providerExtras);\n generationConfig.thinkingConfig = thinkingConfig;\n}\n\nfunction stripSamplingParams(target: Record<string, any>, keys: string[]): void {\n for (const k of keys) {\n if (k in target) delete target[k];\n }\n}\n\nfunction clampBudget(budget: number, maxTokens: number | undefined): number {\n if (typeof maxTokens !== \"number\" || maxTokens <= 0) return budget;\n const ceiling = maxTokens - THINKING_OUTPUT_RESERVE;\n if (ceiling < 1024) return Math.max(1024, Math.floor(maxTokens / 2));\n return Math.min(budget, ceiling);\n}\n\nfunction normalizeEffort(effort: ReasoningEffort | undefined): ReasoningEffort | undefined {\n if (!effort) return undefined;\n const allowed: ReasoningEffort[] = [\"minimal\", \"low\", \"medium\", \"high\"];\n return allowed.includes(effort) ? effort : undefined;\n}\n\nfunction resolveBudget(\n reasoning: ReasoningRequestConfig,\n effortBudget: Record<ReasoningEffort, number>,\n): number | undefined {\n if (typeof reasoning.budgetTokens === \"number\" && reasoning.budgetTokens > 0) {\n return Math.floor(reasoning.budgetTokens);\n }\n const effort = normalizeEffort(reasoning.effort);\n if (effort && effortBudget[effort]) return effortBudget[effort];\n return undefined;\n}\n","// OpenAI Chat Completions API provider.\n// Direct fetch-based implementation – no SDK dependency.\n\nimport { BaseProvider } from \"./base.js\";\nimport { parseSSEStream } from \"./utils/sse.js\";\nimport { applyOpenAIReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ContentPart,\n type ToolDefinition,\n type OpenAIProviderConfig,\n type ProviderType,\n ProviderError,\n emptyUsage,\n} from \"./types.js\";\n\nexport class OpenAIProvider extends BaseProvider {\n readonly providerName: ProviderType = \"openai\";\n\n protected readonly apiKey: string;\n protected readonly baseURL: string;\n protected readonly defaultModel: string;\n protected readonly defaultHeaders: Record<string, string>;\n\n constructor(config: OpenAIProviderConfig) {\n super();\n this.apiKey = config.apiKey;\n this.baseURL = (config.baseURL ?? \"https://api.openai.com/v1\").replace(/\\/$/, \"\");\n this.defaultModel = config.defaultModel ?? \"gpt-4o\";\n this.defaultHeaders = {\n ...config.defaultHeaders,\n ...(config.organization ? { \"OpenAI-Organization\": config.organization } : {}),\n };\n if (config.retry) this.retryPolicy = { ...this.retryPolicy, ...config.retry };\n }\n\n /** True when the request targets a reasoning model (o-series / gpt-5) so we\n * should route through the Responses API, which exposes `reasoning.effort`\n * and reasoning summaries. Chat Completions silently drops these. */\n protected useResponsesApi(request: ChatCompletionRequest): boolean {\n if (!request.reasoning) return false;\n return isReasoningModel(request.model || this.defaultModel);\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n if (this.useResponsesApi(request)) {\n return this.completeResponses(request);\n }\n const body = this.buildRequestBody(request, false);\n const res = await this.doFetch(body);\n const json = await res.json();\n return this.parseResponse(json);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n if (this.useResponsesApi(request)) {\n // Responses streaming uses a distinct SSE event protocol; for reasoning\n // models we issue a single non-streaming call and emit one final chunk\n // so reasoning summary + usage are preserved.\n const response = await this.completeResponses(request);\n yield {\n id: response.id,\n model: response.model,\n delta: {\n content: response.content ?? undefined,\n toolCalls: response.toolCalls.length > 0 ? response.toolCalls : undefined,\n reasoning: response.reasoning,\n },\n usage: response.usage,\n finishReason: response.finishReason,\n };\n return;\n }\n const body = this.buildRequestBody(request, true);\n const res = await this.doFetch(body);\n\n if (!res.body) throw new ProviderError(\"No response body for stream\", this.providerName);\n\n let id = \"\";\n let model = \"\";\n const toolCallBuffers = new Map<number, { id: string; name: string; arguments: string }>();\n let usage: TokenUsage | undefined;\n\n for await (const event of parseSSEStream(res.body)) {\n if (event.data === \"[DONE]\") break;\n\n let chunk: any;\n try {\n chunk = JSON.parse(event.data);\n } catch {\n continue;\n }\n\n id = chunk.id ?? id;\n model = chunk.model ?? model;\n\n const choice = chunk.choices?.[0];\n\n // Usage is in the final chunk when stream_options.include_usage is true\n if (chunk.usage) {\n usage = this.extractUsage(chunk.usage);\n }\n\n if (!choice) {\n // Usage-only chunk\n if (usage) yield { id, model, delta: {}, usage };\n continue;\n }\n\n const delta = choice.delta ?? {};\n const out: ChatCompletionChunk = {\n id,\n model,\n delta: {},\n finishReason: mapFinishReason(choice.finish_reason),\n };\n\n if (delta.content) {\n out.delta.content = delta.content;\n }\n\n // Accumulate tool calls\n if (delta.tool_calls) {\n const partials: Partial<ToolCall>[] = [];\n for (const tc of delta.tool_calls) {\n const idx = tc.index ?? 0;\n if (!toolCallBuffers.has(idx)) {\n toolCallBuffers.set(idx, { id: tc.id ?? \"\", name: \"\", arguments: \"\" });\n }\n const buf = toolCallBuffers.get(idx)!;\n if (tc.id) buf.id = tc.id;\n if (tc.function?.name) buf.name = tc.function.name;\n if (tc.function?.arguments) buf.arguments += tc.function.arguments;\n partials.push({ id: buf.id, name: buf.name || undefined, arguments: tc.function?.arguments });\n }\n out.delta.toolCalls = partials;\n }\n\n if (usage) out.usage = usage;\n yield out;\n }\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n protected buildRequestBody(request: ChatCompletionRequest, stream: boolean): Record<string, any> {\n const body: Record<string, any> = {\n model: request.model || this.defaultModel,\n messages: request.messages.map((m) => this.toOpenAIMessage(m)),\n stream,\n };\n\n if (stream) {\n body.stream_options = { include_usage: true };\n }\n if (request.temperature != null) body.temperature = request.temperature;\n if (request.maxTokens != null) body.max_tokens = request.maxTokens;\n if (request.topP != null) body.top_p = request.topP;\n if (request.stop) body.stop = request.stop;\n\n if (request.tools?.length) {\n body.tools = request.tools.map((t) => this.toOpenAITool(t));\n }\n\n if (request.toolChoice != null && request.tools?.length) {\n if (typeof request.toolChoice === \"string\") {\n body.tool_choice = request.toolChoice;\n } else {\n body.tool_choice = { type: \"function\", function: { name: request.toolChoice.name } };\n }\n }\n\n if (request.responseFormat) {\n if (request.responseFormat.type === \"json_schema\") {\n body.response_format = {\n type: \"json_schema\",\n json_schema: {\n name: request.responseFormat.name ?? \"response\",\n schema: request.responseFormat.schema,\n strict: true,\n },\n };\n } else if (request.responseFormat.type === \"json_object\") {\n body.response_format = { type: \"json_object\" };\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n applyOpenAIReasoning(body, request.reasoning, \"legacy_effort\");\n\n return body;\n }\n\n // ─── Responses API (reasoning models) ──────────────────────────────────────\n\n protected async completeResponses(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const body = this.buildResponsesBody(request);\n const res = await this.responsesFetch(body);\n const json = await res.json();\n return this.parseResponsesResponse(json, request.model || this.defaultModel);\n }\n\n protected buildResponsesBody(request: ChatCompletionRequest): Record<string, any> {\n const body: Record<string, any> = {\n model: request.model || this.defaultModel,\n input: request.messages.map((m) => this.toResponsesInput(m)),\n };\n\n if (request.maxTokens != null) body.max_output_tokens = request.maxTokens;\n if (request.topP != null) body.top_p = request.topP;\n // Reasoning models reject `temperature`; omit it intentionally.\n\n if (request.tools?.length) {\n // Responses tools are flat function objects (not nested under `function`).\n body.tools = request.tools.map((t) => ({\n type: \"function\",\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n ...(t.strict ? { strict: true } : {}),\n }));\n }\n\n if (request.toolChoice != null && request.tools?.length) {\n if (typeof request.toolChoice === \"string\") {\n body.tool_choice = request.toolChoice;\n } else {\n body.tool_choice = { type: \"function\", name: request.toolChoice.name };\n }\n }\n\n if (request.responseFormat) {\n if (request.responseFormat.type === \"json_schema\") {\n body.text = {\n format: {\n type: \"json_schema\",\n name: request.responseFormat.name ?? \"response\",\n schema: request.responseFormat.schema,\n strict: true,\n },\n };\n } else if (request.responseFormat.type === \"json_object\") {\n body.text = { format: { type: \"json_object\" } };\n }\n }\n\n if (request.extra) Object.assign(body, request.extra);\n\n // reasoning.effort + reasoning.summary\n applyOpenAIReasoning(body, request.reasoning, \"responses\");\n\n return body;\n }\n\n /** Maps a unified message to a Responses API `input` item. */\n protected toResponsesInput(m: UnifiedMessage): Record<string, any> {\n // Tool result → function_call_output\n if (m.role === \"tool\" && m.toolCallId) {\n const output = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n return { type: \"function_call_output\", call_id: m.toolCallId, output };\n }\n\n // Assistant with tool calls → emit function_call items. The Responses API\n // expects each call as its own input item; when there is also text we keep\n // it as a separate message item.\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n // Caller flattens arrays; return the function_call list wrapped so the\n // body builder can splice. We return a single item array marker instead.\n // To keep the 1:1 map contract, encode tool calls as a message with an\n // attached __calls field that buildResponsesBody expands.\n return {\n __assistantWithCalls: true,\n text: typeof m.content === \"string\" ? m.content : \"\",\n calls: m.toolCalls.map((tc) => ({\n type: \"function_call\",\n call_id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n })),\n };\n }\n\n const role = m.role === \"system\" ? \"system\" : m.role === \"assistant\" ? \"assistant\" : \"user\";\n const textType = role === \"assistant\" ? \"output_text\" : \"input_text\";\n if (typeof m.content === \"string\") {\n return { role, content: [{ type: textType, text: m.content }] };\n }\n const content = (m.content as ContentPart[]).map((part) => {\n if (part.type === \"text\") return { type: textType, text: part.text };\n if (part.type === \"image\") {\n const src = part.source;\n const url = src.type === \"url\" ? src.url : `data:${src.mediaType};base64,${src.data}`;\n return { type: \"input_image\", image_url: url };\n }\n return { type: textType, text: \"\" };\n });\n return { role, content };\n }\n\n protected async responsesFetch(body: Record<string, any>): Promise<Response> {\n // Expand assistant-with-calls markers into discrete input items.\n body.input = expandResponsesInput(body.input);\n const url = `${this.baseURL}/responses`;\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n ...this.defaultHeaders,\n };\n const payload = JSON.stringify(body);\n const res = await this.doFetchWithRetry(() => fetch(url, { method: \"POST\", headers, body: payload }));\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `OpenAI Responses API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n return res;\n }\n\n protected parseResponsesResponse(json: any, modelId: string): ChatCompletionResponse {\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const summaryParts: string[] = [];\n\n for (const item of json.output ?? []) {\n if (item.type === \"message\") {\n for (const c of item.content ?? []) {\n if (c.type === \"output_text\" && typeof c.text === \"string\") textParts.push(c.text);\n }\n } else if (item.type === \"function_call\") {\n toolCalls.push({\n id: item.call_id ?? item.id ?? \"\",\n name: item.name ?? \"\",\n arguments: typeof item.arguments === \"string\" ? item.arguments : JSON.stringify(item.arguments ?? {}),\n });\n } else if (item.type === \"reasoning\") {\n for (const s of item.summary ?? []) {\n if (typeof s.text === \"string\") summaryParts.push(s.text);\n }\n }\n }\n\n // Fallback: top-level output_text convenience field.\n if (textParts.length === 0 && typeof json.output_text === \"string\") {\n textParts.push(json.output_text);\n }\n\n const usage = json.usage ?? {};\n const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? 0;\n const tokenUsage: TokenUsage = {\n inputTokens: usage.input_tokens ?? 0,\n outputTokens: usage.output_tokens ?? 0,\n totalTokens: usage.total_tokens ?? (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n cachedInputTokens: usage.input_tokens_details?.cached_tokens ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens,\n };\n\n const finishReason: ChatCompletionResponse[\"finishReason\"] = toolCalls.length > 0\n ? \"tool_calls\"\n : json.status === \"incomplete\" ? \"length\" : \"stop\";\n\n return {\n id: json.id ?? \"\",\n model: json.model ?? modelId,\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason,\n reasoning: summaryParts.length > 0 ? { summary: summaryParts.join(\"\\n\").trim() || undefined } : undefined,\n raw: json,\n };\n }\n\n protected toOpenAIMessage(m: UnifiedMessage): Record<string, any> {\n const msg: Record<string, any> = { role: m.role };\n\n if (typeof m.content === \"string\") {\n msg.content = m.content;\n } else if (Array.isArray(m.content)) {\n msg.content = m.content.map((part) => {\n if (part.type === \"text\") return { type: \"text\", text: part.text };\n if (part.type === \"image\") {\n const src = part.source;\n const url = src.type === \"url\" ? src.url : `data:${src.mediaType};base64,${src.data}`;\n return { type: \"image_url\", image_url: { url } };\n }\n return part;\n });\n }\n\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n msg.tool_calls = m.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n }));\n }\n\n if (m.role === \"tool\" && m.toolCallId) {\n msg.tool_call_id = m.toolCallId;\n }\n\n if (m.name) msg.name = m.name;\n\n return msg;\n }\n\n protected toOpenAITool(t: ToolDefinition): Record<string, any> {\n const fn: Record<string, any> = {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n };\n if (t.strict) {\n fn.strict = true;\n }\n return { type: \"function\", function: fn };\n }\n\n protected async doFetch(body: Record<string, any>): Promise<Response> {\n const url = `${this.baseURL}/chat/completions`;\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n ...this.defaultHeaders,\n };\n const payload = JSON.stringify(body);\n const res = await this.doFetchWithRetry(() => fetch(url, { method: \"POST\", headers, body: payload }));\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `OpenAI API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n protected parseResponse(json: any): ChatCompletionResponse {\n const choice = json.choices?.[0];\n const message = choice?.message ?? {};\n\n const toolCalls: ToolCall[] = (message.tool_calls ?? []).map((tc: any) => ({\n id: tc.id,\n name: tc.function?.name ?? \"\",\n arguments: tc.function?.arguments ?? \"{}\",\n }));\n\n return {\n id: json.id ?? \"\",\n model: json.model ?? \"\",\n content: message.content ?? null,\n toolCalls,\n usage: this.extractUsage(json.usage),\n finishReason: mapFinishReason(choice?.finish_reason),\n raw: json,\n };\n }\n\n protected extractUsage(usage: any): TokenUsage {\n if (!usage) return emptyUsage();\n const promptDetails = usage.prompt_tokens_details ?? {};\n const completionDetails = usage.completion_tokens_details ?? {};\n return {\n inputTokens: usage.prompt_tokens ?? 0,\n outputTokens: usage.completion_tokens ?? 0,\n totalTokens: usage.total_tokens ?? (usage.prompt_tokens ?? 0) + (usage.completion_tokens ?? 0),\n cachedInputTokens: promptDetails.cached_tokens ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: completionDetails.reasoning_tokens ?? 0,\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Detects OpenAI reasoning models (o-series and gpt-5 family). */\nexport function isReasoningModel(model: string | undefined): boolean {\n if (!model) return false;\n const m = model.toLowerCase();\n return /(^|[/_-])o[0-9]/.test(m) || m.startsWith(\"o1\") || m.startsWith(\"o3\") || m.startsWith(\"o4\")\n || m.includes(\"gpt-5\") || m.includes(\"gpt5\");\n}\n\n/** Expands assistant-with-tool-call markers produced by toResponsesInput into\n * the flat Responses `input` item list (optional message text + function_call\n * items in order). */\nfunction expandResponsesInput(input: any[]): any[] {\n const out: any[] = [];\n for (const item of input) {\n if (item && item.__assistantWithCalls) {\n if (item.text) {\n out.push({ role: \"assistant\", content: [{ type: \"output_text\", text: item.text }] });\n }\n for (const call of item.calls) out.push(call);\n } else {\n out.push(item);\n }\n }\n return out;\n}\n\nfunction mapFinishReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"stop\":\n return \"stop\";\n case \"tool_calls\":\n return \"tool_calls\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content_filter\";\n default:\n return \"stop\";\n }\n}\n","// Anthropic Messages API provider.\n// Direct fetch-based implementation – no SDK dependency.\n\nimport { BaseProvider } from \"./base.js\";\nimport { parseSSEStream } from \"./utils/sse.js\";\nimport { applyAnthropicReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ToolDefinition,\n type ReasoningBlock,\n type AnthropicProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\n\nexport class AnthropicProvider extends BaseProvider {\n readonly providerName: ProviderType = \"anthropic\";\n\n private readonly apiKey: string;\n private readonly baseURL: string;\n private readonly defaultModel: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly anthropicVersion: string;\n\n private readonly promptCachingEnabled: boolean;\n\n constructor(config: AnthropicProviderConfig) {\n super();\n this.apiKey = config.apiKey;\n this.baseURL = (config.baseURL ?? \"https://api.anthropic.com\").replace(/\\/$/, \"\");\n this.defaultModel = config.defaultModel ?? \"claude-sonnet-4-20250514\";\n this.defaultHeaders = config.defaultHeaders ?? {};\n this.anthropicVersion = config.anthropicVersion ?? \"2023-06-01\";\n this.promptCachingEnabled = config.prompt_caching?.enabled === true;\n if (config.retry) this.retryPolicy = { ...this.retryPolicy, ...config.retry };\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const body = this.buildRequestBody(request, false);\n const res = await this.doFetch(body);\n const json = await res.json();\n return this.parseResponse(json);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n const body = this.buildRequestBody(request, true);\n const res = await this.doFetch(body);\n\n if (!res.body) throw new ProviderError(\"No response body for stream\", this.providerName);\n\n let id = \"\";\n let model = \"\";\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadInputTokens = 0;\n let cacheCreationInputTokens = 0;\n const currentToolCalls = new Map<number, { id: string; name: string; arguments: string }>();\n // Accumulate thinking blocks by content-block index so we can replay them.\n const reasoningBlocks = new Map<number, ReasoningBlock>();\n\n for await (const event of parseSSEStream(res.body)) {\n let data: any;\n try {\n data = JSON.parse(event.data);\n } catch {\n continue;\n }\n\n const eventType = event.event ?? data.type;\n\n switch (eventType) {\n case \"message_start\": {\n const msg = data.message;\n id = msg?.id ?? \"\";\n model = msg?.model ?? \"\";\n if (msg?.usage) {\n inputTokens = msg.usage.input_tokens ?? 0;\n cacheReadInputTokens = msg.usage.cache_read_input_tokens ?? 0;\n cacheCreationInputTokens = msg.usage.cache_creation_input_tokens ?? 0;\n }\n break;\n }\n\n case \"content_block_start\": {\n const idx = data.index ?? 0;\n const block = data.content_block;\n if (block?.type === \"tool_use\") {\n currentToolCalls.set(idx, {\n id: block.id ?? \"\",\n name: block.name ?? \"\",\n arguments: \"\",\n });\n } else if (block?.type === \"thinking\") {\n reasoningBlocks.set(idx, { type: \"thinking\", text: block.thinking ?? \"\", signature: block.signature });\n } else if (block?.type === \"redacted_thinking\") {\n reasoningBlocks.set(idx, { type: \"redacted_thinking\", data: block.data });\n }\n break;\n }\n\n case \"content_block_delta\": {\n const idx = data.index ?? 0;\n const delta = data.delta;\n\n if (delta?.type === \"text_delta\" && delta.text) {\n yield {\n id,\n model,\n delta: { content: delta.text },\n };\n } else if (delta?.type === \"thinking_delta\" && delta.thinking) {\n const blk = reasoningBlocks.get(idx) ?? { type: \"thinking\", text: \"\" };\n blk.text = (blk.text ?? \"\") + delta.thinking;\n reasoningBlocks.set(idx, blk);\n yield {\n id,\n model,\n delta: { reasoning: { summary: delta.thinking } },\n };\n } else if (delta?.type === \"signature_delta\" && delta.signature) {\n const blk = reasoningBlocks.get(idx) ?? { type: \"thinking\", text: \"\" };\n blk.signature = (blk.signature ?? \"\") + delta.signature;\n reasoningBlocks.set(idx, blk);\n } else if (delta?.type === \"input_json_delta\" && delta.partial_json) {\n const tc = currentToolCalls.get(idx);\n if (tc) {\n tc.arguments += delta.partial_json;\n yield {\n id,\n model,\n delta: {\n toolCalls: [{ id: tc.id, name: tc.name, arguments: delta.partial_json }],\n },\n };\n }\n }\n break;\n }\n\n case \"content_block_stop\":\n // No action needed\n break;\n\n case \"message_delta\": {\n const delta = data.delta;\n if (data.usage) {\n outputTokens = data.usage.output_tokens ?? outputTokens;\n }\n const finishReason = mapAnthropicStopReason(delta?.stop_reason);\n const usage: TokenUsage = {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n cachedInputTokens: cacheReadInputTokens,\n cachedWriteTokens: cacheCreationInputTokens,\n cachedOutputTokens: 0,\n reasoningTokens: 0,\n };\n const blocks = [...reasoningBlocks.values()].filter(\n (b) => (b.type === \"thinking\" && b.signature) || (b.type === \"redacted_thinking\" && b.data),\n );\n yield {\n id,\n model,\n delta: blocks.length > 0 ? { reasoning: { blocks } } : {},\n finishReason,\n usage,\n };\n break;\n }\n\n case \"message_stop\":\n break;\n\n case \"error\": {\n const errMsg = data.error?.message ?? \"Unknown Anthropic streaming error\";\n throw new ProviderError(errMsg, this.providerName);\n }\n }\n }\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n private buildRequestBody(request: ChatCompletionRequest, stream: boolean): Record<string, any> {\n // Anthropic separates system from messages\n const { system, messages } = this.splitSystemMessages(request.messages);\n\n const body: Record<string, any> = {\n model: request.model || this.defaultModel,\n messages: messages.map((m) => this.toAnthropicMessage(m)),\n max_tokens: request.maxTokens ?? 4096,\n stream,\n };\n\n if (system) {\n // When prompt caching is on, ship `system` as a block array with a\n // cache_control breakpoint so the static system prompt is reused.\n if (this.promptCachingEnabled) {\n body.system = [{ type: \"text\", text: system, cache_control: { type: \"ephemeral\" } }];\n } else {\n body.system = system;\n }\n }\n if (request.temperature != null) body.temperature = request.temperature;\n if (request.topP != null) body.top_p = request.topP;\n if (request.stop) body.stop_sequences = request.stop;\n\n if (request.tools?.length) {\n const tools = request.tools.map((t) => this.toAnthropicTool(t));\n // Cache the entire tools block by placing the breakpoint on the final\n // tool definition – everything above it in the request is cached too.\n if (this.promptCachingEnabled && tools.length > 0) {\n tools[tools.length - 1] = { ...tools[tools.length - 1], cache_control: { type: \"ephemeral\" } };\n }\n body.tools = tools;\n }\n\n if (request.toolChoice != null) {\n if (request.toolChoice === \"auto\") {\n body.tool_choice = { type: \"auto\" };\n } else if (request.toolChoice === \"required\") {\n body.tool_choice = { type: \"any\" };\n } else if (request.toolChoice === \"none\") {\n // Anthropic doesn't have a direct \"none\" – omit tools\n } else {\n body.tool_choice = { type: \"tool\", name: request.toolChoice.name };\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n applyAnthropicReasoning(body, request.reasoning);\n\n return body;\n }\n\n private splitSystemMessages(messages: UnifiedMessage[]): { system: string | undefined; messages: UnifiedMessage[] } {\n const systemParts: string[] = [];\n const rest: UnifiedMessage[] = [];\n\n for (const m of messages) {\n if (m.role === \"system\") {\n if (typeof m.content === \"string\") {\n systemParts.push(m.content);\n } else {\n const text = m.content\n .filter((p) => p.type === \"text\")\n .map((p) => (p as { type: \"text\"; text: string }).text)\n .join(\"\\n\");\n if (text) systemParts.push(text);\n }\n } else {\n rest.push(m);\n }\n }\n\n return {\n system: systemParts.length > 0 ? systemParts.join(\"\\n\\n\") : undefined,\n messages: rest,\n };\n }\n\n private toAnthropicMessage(m: UnifiedMessage): Record<string, any> {\n // Tool result messages\n if (m.role === \"tool\" && m.toolCallId) {\n const content = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: m.toolCallId,\n content,\n },\n ],\n };\n }\n\n // Assistant with tool calls. Anthropic requires the original thinking\n // blocks (with their `signature`) to be replayed verbatim *before* the\n // text/tool_use blocks whenever extended thinking was used in that turn.\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n const content: any[] = [];\n appendReasoningBlocks(content, m.reasoning?.blocks);\n if (typeof m.content === \"string\" && m.content) {\n content.push({ type: \"text\", text: m.content });\n }\n for (const tc of m.toolCalls) {\n content.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: safeJsonParse(tc.arguments),\n });\n }\n return { role: \"assistant\", content };\n }\n\n // Assistant text-only turn that nonetheless carried thinking blocks.\n if (m.role === \"assistant\" && m.reasoning?.blocks?.length) {\n const content: any[] = [];\n appendReasoningBlocks(content, m.reasoning.blocks);\n const text = typeof m.content === \"string\" ? m.content : \"\";\n if (text) content.push({ type: \"text\", text });\n return { role: \"assistant\", content };\n }\n\n // Regular messages\n const msg: Record<string, any> = { role: m.role };\n\n if (typeof m.content === \"string\") {\n msg.content = m.content;\n } else if (Array.isArray(m.content)) {\n msg.content = m.content.map((part) => {\n if (part.type === \"text\") return { type: \"text\", text: part.text };\n if (part.type === \"image\") {\n const src = part.source;\n if (src.type === \"base64\") {\n return {\n type: \"image\",\n source: { type: \"base64\", media_type: src.mediaType, data: src.data },\n };\n }\n return {\n type: \"image\",\n source: { type: \"url\", url: src.url },\n };\n }\n return part;\n });\n }\n\n return msg;\n }\n\n private toAnthropicTool(t: ToolDefinition): Record<string, any> {\n return {\n name: t.name,\n description: t.description,\n input_schema: t.parameters,\n };\n }\n\n private async doFetch(body: Record<string, any>): Promise<Response> {\n const url = `${this.baseURL}/v1/messages`;\n const headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": this.apiKey,\n \"anthropic-version\": this.anthropicVersion,\n ...this.defaultHeaders,\n };\n const payload = JSON.stringify(body);\n const res = await this.doFetchWithRetry(() => fetch(url, { method: \"POST\", headers, body: payload }));\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Anthropic API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n private parseResponse(json: any): ChatCompletionResponse {\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const reasoningBlocks: ReasoningBlock[] = [];\n const summaryParts: string[] = [];\n\n for (const block of json.content ?? []) {\n if (block.type === \"text\") {\n textParts.push(block.text);\n } else if (block.type === \"thinking\") {\n reasoningBlocks.push({\n type: \"thinking\",\n text: block.thinking ?? \"\",\n signature: block.signature,\n });\n if (block.thinking) summaryParts.push(block.thinking);\n } else if (block.type === \"redacted_thinking\") {\n reasoningBlocks.push({ type: \"redacted_thinking\", data: block.data });\n } else if (block.type === \"tool_use\") {\n toolCalls.push({\n id: block.id,\n name: block.name,\n arguments: typeof block.input === \"string\" ? block.input : JSON.stringify(block.input),\n });\n }\n }\n\n const usage = json.usage ?? {};\n const tokenUsage: TokenUsage = {\n inputTokens: usage.input_tokens ?? 0,\n outputTokens: usage.output_tokens ?? 0,\n totalTokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n cachedInputTokens: usage.cache_read_input_tokens ?? 0,\n cachedWriteTokens: usage.cache_creation_input_tokens ?? 0,\n cachedOutputTokens: 0,\n // Anthropic bills thinking tokens inside `output_tokens` and does not\n // expose a separate count, so reasoningTokens stays 0 here (cost is still\n // captured via outputTokens). See docs for the limitation.\n reasoningTokens: 0,\n };\n\n return {\n id: json.id ?? \"\",\n model: json.model ?? \"\",\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason: mapAnthropicStopReason(json.stop_reason),\n reasoning: reasoningBlocks.length > 0\n ? { blocks: reasoningBlocks, summary: summaryParts.join(\"\\n\").trim() || undefined }\n : undefined,\n raw: json,\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction mapAnthropicStopReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"end_turn\":\n case \"stop_sequence\":\n return \"stop\";\n case \"tool_use\":\n return \"tool_calls\";\n case \"max_tokens\":\n return \"length\";\n default:\n return \"stop\";\n }\n}\n\nfunction safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return {};\n }\n}\n\n/** Pushes captured thinking blocks back into an Anthropic assistant content\n * array. `thinking` blocks must include their original `signature`; redacted\n * blocks carry an opaque `data` payload. Blocks missing required fields are\n * skipped (Anthropic rejects malformed thinking blocks).\n */\nfunction appendReasoningBlocks(content: any[], blocks: ReasoningBlock[] | undefined): void {\n if (!blocks?.length) return;\n for (const b of blocks) {\n if (b.type === \"redacted_thinking\") {\n if (b.data) content.push({ type: \"redacted_thinking\", data: b.data });\n } else if (b.type === \"thinking\") {\n if (b.signature) {\n content.push({ type: \"thinking\", thinking: b.text ?? \"\", signature: b.signature });\n }\n }\n }\n}\n","// Azure OpenAI provider.\n// Extends OpenAI with Azure-specific URL construction and api-key auth.\n\nimport { OpenAIProvider } from \"./openai.js\";\nimport {\n type AzureProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\nexport class AzureProvider extends OpenAIProvider {\n override readonly providerName: ProviderType = \"azure\";\n\n private readonly endpoint: string;\n private readonly apiVersion: string;\n private readonly deploymentName?: string;\n private readonly azureApiKey: string;\n\n constructor(config: AzureProviderConfig) {\n // We pass a dummy OpenAI config; we override doFetch/buildRequestBody\n super({\n provider: \"openai\",\n apiKey: config.apiKey,\n defaultModel: config.defaultModel ?? config.deploymentName ?? \"gpt-4o\",\n defaultHeaders: config.defaultHeaders,\n });\n this.endpoint = config.endpoint.replace(/\\/$/, \"\");\n this.apiVersion = config.apiVersion ?? \"2024-10-21\";\n this.deploymentName = config.deploymentName;\n this.azureApiKey = config.apiKey;\n }\n\n protected override async doFetch(body: Record<string, any>): Promise<Response> {\n // Azure uses the deployment name from the URL path, or from the model field\n const deployment = this.deploymentName ?? body.model;\n if (!deployment) {\n throw new ProviderError(\"Azure requires a deploymentName or model\", this.providerName);\n }\n\n const url = `${this.endpoint}/openai/deployments/${deployment}/chat/completions?api-version=${this.apiVersion}`;\n\n // Remove model from body since Azure uses deployment path\n const { model: _model, ...bodyWithoutModel } = body;\n\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"api-key\": this.azureApiKey,\n ...this.defaultHeaders,\n },\n body: JSON.stringify(bodyWithoutModel),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Azure OpenAI API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n /** Azure exposes the Responses API at /openai/responses with api-key auth.\n * Reasoning summaries require a preview api-version; callers can override via\n * the `apiVersion` config. */\n protected override async responsesFetch(body: Record<string, any>): Promise<Response> {\n body.input = expandAzureResponsesInput(body.input);\n const deployment = this.deploymentName ?? body.model;\n if (!deployment) {\n throw new ProviderError(\"Azure requires a deploymentName or model\", this.providerName);\n }\n // Azure routes by deployment in the path; keep `model` in the body too as\n // some api-versions expect it. Prefer the deployment-scoped responses route.\n const url = `${this.endpoint}/openai/responses?api-version=${this.apiVersion}`;\n const payload = JSON.stringify({ ...body, model: deployment });\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"api-key\": this.azureApiKey,\n ...this.defaultHeaders,\n },\n body: payload,\n });\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Azure OpenAI Responses API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n return res;\n }\n}\n\n/** Re-applies the assistant-with-calls expansion (mirrors the OpenAI helper). */\nfunction expandAzureResponsesInput(input: any[]): any[] {\n const out: any[] = [];\n for (const item of input) {\n if (item && item.__assistantWithCalls) {\n if (item.text) {\n out.push({ role: \"assistant\", content: [{ type: \"output_text\", text: item.text }] });\n }\n for (const call of item.calls) out.push(call);\n } else {\n out.push(item);\n }\n }\n return out;\n}\n","// OpenAI-compatible API provider.\n// Works with any API that implements the OpenAI Chat Completions spec\n// (e.g. Ollama, Together, Groq, Fireworks, vLLM, LiteLLM, etc.)\n\nimport { OpenAIProvider } from \"./openai.js\";\nimport type { OpenAICompatibleProviderConfig, ProviderType } from \"./types.js\";\n\nexport class OpenAICompatibleProvider extends OpenAIProvider {\n override readonly providerName: ProviderType = \"openai-compatible\";\n\n constructor(config: OpenAICompatibleProviderConfig) {\n super({\n provider: \"openai\",\n apiKey: config.apiKey,\n baseURL: config.baseURL,\n defaultModel: config.defaultModel,\n defaultHeaders: config.defaultHeaders,\n });\n }\n}\n","// AWS Signature Version 4 signing implementation for Bedrock API calls.\n// Uses Node.js built-in crypto module – zero external dependencies.\n\nimport { createHmac, createHash } from \"crypto\";\n\nexport type SigV4Credentials = {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n};\n\nexport type SigV4Request = {\n method: string;\n url: string;\n headers: Record<string, string>;\n body: string;\n region: string;\n service: string;\n credentials: SigV4Credentials;\n};\n\n/**\n * Signs an HTTP request using AWS Signature Version 4.\n * Returns a new headers object with the Authorization, x-amz-date,\n * and optionally x-amz-security-token headers added.\n */\nexport function signRequest(req: SigV4Request): Record<string, string> {\n const now = new Date();\n const dateStamp = toDateStamp(now);\n const amzDate = toAmzDate(now);\n\n const parsed = new URL(req.url);\n const host = parsed.host;\n const canonicalUri = parsed.pathname || \"/\";\n const canonicalQuerystring = sortQueryParams(parsed.searchParams);\n\n // Build headers to sign\n const headers: Record<string, string> = {\n ...req.headers,\n host,\n \"x-amz-date\": amzDate,\n };\n\n if (req.credentials.sessionToken) {\n headers[\"x-amz-security-token\"] = req.credentials.sessionToken;\n }\n\n // Canonical headers (must be sorted, lowercased)\n const signedHeaderKeys = Object.keys(headers)\n .map((k) => k.toLowerCase())\n .sort();\n const canonicalHeaders = signedHeaderKeys\n .map((k) => `${k}:${headers[Object.keys(headers).find((h) => h.toLowerCase() === k)!]?.trim()}`)\n .join(\"\\n\") + \"\\n\";\n const signedHeaders = signedHeaderKeys.join(\";\");\n\n // Payload hash\n const payloadHash = sha256(req.body);\n\n // Canonical request\n const canonicalRequest = [\n req.method,\n canonicalUri,\n canonicalQuerystring,\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join(\"\\n\");\n\n // Credential scope\n const credentialScope = `${dateStamp}/${req.region}/${req.service}/aws4_request`;\n\n // String to sign\n const stringToSign = [\n \"AWS4-HMAC-SHA256\",\n amzDate,\n credentialScope,\n sha256(canonicalRequest),\n ].join(\"\\n\");\n\n // Signing key\n const signingKey = getSignatureKey(\n req.credentials.secretAccessKey,\n dateStamp,\n req.region,\n req.service,\n );\n\n // Signature\n const signature = hmacHex(signingKey, stringToSign);\n\n // Authorization header\n const authorization = `AWS4-HMAC-SHA256 Credential=${req.credentials.accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n const result: Record<string, string> = {\n ...req.headers,\n \"x-amz-date\": amzDate,\n Authorization: authorization,\n };\n\n if (req.credentials.sessionToken) {\n result[\"x-amz-security-token\"] = req.credentials.sessionToken;\n }\n\n return result;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction toDateStamp(d: Date): string {\n return d.toISOString().replace(/[-:T]/g, \"\").slice(0, 8);\n}\n\nfunction toAmzDate(d: Date): string {\n return d.toISOString().replace(/[-:]/g, \"\").replace(/\\.\\d+Z$/, \"Z\");\n}\n\nfunction sha256(data: string): string {\n return createHash(\"sha256\").update(data, \"utf8\").digest(\"hex\");\n}\n\nfunction hmac(key: Buffer | string, data: string): Buffer {\n return createHmac(\"sha256\", key).update(data, \"utf8\").digest();\n}\n\nfunction hmacHex(key: Buffer | string, data: string): string {\n return createHmac(\"sha256\", key).update(data, \"utf8\").digest(\"hex\");\n}\n\nfunction getSignatureKey(secret: string, dateStamp: string, region: string, service: string): Buffer {\n const kDate = hmac(`AWS4${secret}`, dateStamp);\n const kRegion = hmac(kDate, region);\n const kService = hmac(kRegion, service);\n return hmac(kService, \"aws4_request\");\n}\n\nfunction sortQueryParams(params: URLSearchParams): string {\n const sorted = [...params.entries()].sort(([a], [b]) => a.localeCompare(b));\n return sorted.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join(\"&\");\n}\n","// AWS Bedrock Converse API provider.\n// Uses AWS SigV4 signing with fetch – no AWS SDK dependency.\n\nimport { BaseProvider } from \"./base.js\";\nimport { signRequest, type SigV4Credentials } from \"./utils/sigv4.js\";\nimport { applyBedrockReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ToolDefinition,\n type ReasoningBlock,\n type BedrockProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\n\nexport class BedrockProvider extends BaseProvider {\n readonly providerName: ProviderType = \"bedrock\";\n\n private readonly region: string;\n private readonly credentials: SigV4Credentials;\n private readonly defaultModel: string;\n private readonly defaultHeaders: Record<string, string>;\n\n private readonly promptCachingEnabled: boolean;\n\n constructor(config: BedrockProviderConfig) {\n super();\n this.region = config.region;\n this.defaultModel = config.defaultModel ?? \"anthropic.claude-sonnet-4-20250514-v1:0\";\n this.defaultHeaders = config.defaultHeaders ?? {};\n this.promptCachingEnabled = config.prompt_caching?.enabled === true;\n if (config.retry) this.retryPolicy = { ...this.retryPolicy, ...config.retry };\n\n this.credentials = {\n accessKeyId: config.accessKeyId ?? process.env.AWS_ACCESS_KEY_ID ?? \"\",\n secretAccessKey: config.secretAccessKey ?? process.env.AWS_SECRET_ACCESS_KEY ?? \"\",\n sessionToken: config.sessionToken ?? process.env.AWS_SESSION_TOKEN,\n };\n\n if (!this.credentials.accessKeyId || !this.credentials.secretAccessKey) {\n throw new ProviderError(\n \"AWS credentials required: provide accessKeyId/secretAccessKey or set AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY env vars\",\n \"bedrock\",\n );\n }\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const modelId = request.model || this.defaultModel;\n const body = this.buildConverseBody(request);\n const json = await this.doFetch(modelId, body);\n return this.parseResponse(json, modelId);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n // Bedrock ConverseStream uses AWS event stream binary protocol.\n // For simplicity, we fall back to non-streaming and yield a single chunk.\n // Full event stream parsing can be added if needed.\n const response = await this.complete(request);\n\n yield {\n id: response.id,\n model: response.model,\n delta: {\n content: response.content ?? undefined,\n toolCalls: response.toolCalls.length > 0 ? response.toolCalls : undefined,\n },\n usage: response.usage,\n finishReason: response.finishReason,\n };\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n private buildConverseBody(request: ChatCompletionRequest): Record<string, any> {\n const { system, messages } = this.splitSystemMessages(request.messages);\n\n const body: Record<string, any> = {\n messages: messages.map((m) => this.toBedrockMessage(m)),\n };\n\n if (system.length > 0) {\n const systemBlocks = system.map((s) => ({ text: s }) as Record<string, any>);\n if (this.promptCachingEnabled) systemBlocks.push({ cachePoint: { type: \"default\" } });\n body.system = systemBlocks;\n }\n\n // Inference config\n const inferenceConfig: Record<string, any> = {};\n if (request.maxTokens != null) inferenceConfig.maxTokens = request.maxTokens;\n if (request.temperature != null) inferenceConfig.temperature = request.temperature;\n if (request.topP != null) inferenceConfig.topP = request.topP;\n if (request.stop) inferenceConfig.stopSequences = request.stop;\n if (Object.keys(inferenceConfig).length > 0) body.inferenceConfig = inferenceConfig;\n\n // Tools\n if (request.tools?.length) {\n const tools = request.tools.map((t) => this.toBedrockTool(t)) as Array<Record<string, any>>;\n if (this.promptCachingEnabled && tools.length > 0) {\n // Converse uses a {cachePoint} block at the end of the tools array.\n tools.push({ cachePoint: { type: \"default\" } });\n }\n body.toolConfig = {\n tools,\n };\n\n if (request.toolChoice != null) {\n if (request.toolChoice === \"auto\") {\n body.toolConfig.toolChoice = { auto: {} };\n } else if (request.toolChoice === \"required\") {\n body.toolConfig.toolChoice = { any: {} };\n } else if (typeof request.toolChoice === \"object\") {\n body.toolConfig.toolChoice = { tool: { name: request.toolChoice.name } };\n }\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n // Native reasoning: maps to additionalModelRequestFields.thinking and\n // enforces the budget/temperature rules for thinking-capable models.\n applyBedrockReasoning(body, request.reasoning);\n\n return body;\n }\n\n private splitSystemMessages(messages: UnifiedMessage[]): { system: string[]; messages: UnifiedMessage[] } {\n const system: string[] = [];\n const rest: UnifiedMessage[] = [];\n\n for (const m of messages) {\n if (m.role === \"system\") {\n const text = typeof m.content === \"string\"\n ? m.content\n : m.content.filter((p) => p.type === \"text\").map((p) => (p as { type: \"text\"; text: string }).text).join(\"\\n\");\n if (text) system.push(text);\n } else {\n rest.push(m);\n }\n }\n\n return { system, messages: rest };\n }\n\n private toBedrockMessage(m: UnifiedMessage): Record<string, any> {\n // Tool result → user message with toolResult content\n if (m.role === \"tool\" && m.toolCallId) {\n const text = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n return {\n role: \"user\",\n content: [\n {\n toolResult: {\n toolUseId: m.toolCallId,\n content: [{ text }],\n status: \"success\",\n },\n },\n ],\n };\n }\n\n // Assistant with tool calls\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n const content: any[] = [];\n appendBedrockReasoning(content, m.reasoning?.blocks);\n if (typeof m.content === \"string\" && m.content) {\n content.push({ text: m.content });\n }\n for (const tc of m.toolCalls) {\n content.push({\n toolUse: {\n toolUseId: tc.id,\n name: tc.name,\n input: safeJsonParse(tc.arguments),\n },\n });\n }\n return { role: \"assistant\", content };\n }\n\n // Regular messages\n const content: any[] = [];\n if (typeof m.content === \"string\") {\n content.push({ text: m.content });\n } else if (Array.isArray(m.content)) {\n for (const part of m.content) {\n if (part.type === \"text\") {\n content.push({ text: part.text });\n } else if (part.type === \"image\") {\n const src = part.source;\n if (src.type === \"base64\") {\n content.push({\n image: {\n format: mediaTypeToFormat(src.mediaType),\n source: { bytes: src.data },\n },\n });\n }\n }\n }\n }\n\n return { role: m.role === \"user\" ? \"user\" : \"assistant\", content };\n }\n\n private toBedrockTool(t: ToolDefinition): Record<string, any> {\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: { json: t.parameters },\n },\n };\n }\n\n private async doFetch(modelId: string, body: Record<string, any>): Promise<any> {\n const host = `bedrock-runtime.${this.region}.amazonaws.com`;\n const url = `https://${host}/model/${encodeURIComponent(modelId)}/converse`;\n const bodyStr = JSON.stringify(body);\n\n const res = await this.doFetchWithRetry(() => {\n // SigV4 must re-sign on each retry because of the x-amz-date header.\n const headers = signRequest({\n method: \"POST\",\n url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...this.defaultHeaders,\n },\n body: bodyStr,\n region: this.region,\n service: \"bedrock\",\n credentials: this.credentials,\n });\n return fetch(url, { method: \"POST\", headers, body: bodyStr });\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Bedrock API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res.json();\n }\n\n private parseResponse(json: any, modelId: string): ChatCompletionResponse {\n const output = json.output?.message;\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const reasoningBlocks: ReasoningBlock[] = [];\n const summaryParts: string[] = [];\n\n for (const block of output?.content ?? []) {\n if (block.text) {\n textParts.push(block.text);\n } else if (block.reasoningContent) {\n const rc = block.reasoningContent;\n if (rc.reasoningText) {\n reasoningBlocks.push({\n type: \"thinking\",\n text: rc.reasoningText.text ?? \"\",\n signature: rc.reasoningText.signature,\n });\n if (rc.reasoningText.text) summaryParts.push(rc.reasoningText.text);\n } else if (rc.redactedContent) {\n reasoningBlocks.push({ type: \"redacted_thinking\", data: rc.redactedContent });\n }\n } else if (block.toolUse) {\n toolCalls.push({\n id: block.toolUse.toolUseId,\n name: block.toolUse.name,\n arguments: typeof block.toolUse.input === \"string\"\n ? block.toolUse.input\n : JSON.stringify(block.toolUse.input ?? {}),\n });\n }\n }\n\n const usage = json.usage ?? {};\n const tokenUsage: TokenUsage = {\n inputTokens: usage.inputTokens ?? 0,\n outputTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens ?? (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0),\n cachedInputTokens: usage.cacheReadInputTokenCount ?? 0,\n cachedWriteTokens: usage.cacheWriteInputTokenCount ?? 0,\n cachedOutputTokens: 0,\n // Bedrock bills thinking tokens inside outputTokens; no separate count.\n reasoningTokens: 0,\n };\n\n return {\n id: json.requestId ?? json.$metadata?.requestId ?? \"\",\n model: modelId,\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason: mapBedrockStopReason(json.stopReason),\n reasoning: reasoningBlocks.length > 0\n ? { blocks: reasoningBlocks, summary: summaryParts.join(\"\\n\").trim() || undefined }\n : undefined,\n raw: json,\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Replays captured thinking blocks into a Bedrock Converse assistant content\n * array as `reasoningContent` blocks, ahead of text/toolUse blocks. */\nfunction appendBedrockReasoning(content: any[], blocks: ReasoningBlock[] | undefined): void {\n if (!blocks?.length) return;\n for (const b of blocks) {\n if (b.type === \"redacted_thinking\") {\n if (b.data) content.push({ reasoningContent: { redactedContent: b.data } });\n } else if (b.type === \"thinking\") {\n if (b.signature) {\n content.push({\n reasoningContent: { reasoningText: { text: b.text ?? \"\", signature: b.signature } },\n });\n }\n }\n }\n}\n\nfunction mapBedrockStopReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"end_turn\":\n case \"stop_sequence\":\n return \"stop\";\n case \"tool_use\":\n return \"tool_calls\";\n case \"max_tokens\":\n return \"length\";\n case \"content_filtered\":\n case \"guardrail\":\n return \"content_filter\";\n default:\n return \"stop\";\n }\n}\n\nfunction mediaTypeToFormat(mediaType: string): string {\n const map: Record<string, string> = {\n \"image/jpeg\": \"jpeg\",\n \"image/png\": \"png\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n };\n return map[mediaType] ?? \"png\";\n}\n\nfunction safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return {};\n }\n}\n","// Google Vertex AI (Gemini) provider.\n// Direct fetch-based implementation – supports both access token and service account auth.\n\nimport { BaseProvider } from \"./base.js\";\nimport { parseSSEStream } from \"./utils/sse.js\";\nimport { applyGeminiReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ToolDefinition,\n type VertexProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\n\nexport class VertexProvider extends BaseProvider {\n readonly providerName: ProviderType = \"vertex\";\n\n private readonly projectId: string;\n private readonly location: string;\n private readonly defaultModel: string;\n private readonly defaultHeaders: Record<string, string>;\n private accessToken?: string;\n private serviceAccountJson?: Record<string, any>;\n private tokenExpiry = 0;\n\n constructor(config: VertexProviderConfig) {\n super();\n this.projectId = config.projectId;\n this.location = config.location ?? \"us-central1\";\n this.defaultModel = config.defaultModel ?? \"gemini-2.0-flash\";\n this.defaultHeaders = config.defaultHeaders ?? {};\n\n if (config.accessToken) {\n this.accessToken = config.accessToken;\n this.tokenExpiry = Date.now() + 3600_000; // assume 1h validity\n }\n\n if (config.serviceAccountJson) {\n this.serviceAccountJson =\n typeof config.serviceAccountJson === \"string\"\n ? JSON.parse(config.serviceAccountJson)\n : config.serviceAccountJson;\n }\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const modelId = request.model || this.defaultModel;\n const body = this.buildGeminiBody(request);\n const url = this.buildUrl(modelId, false);\n const res = await this.doFetch(url, body);\n const json = await res.json();\n return this.parseResponse(json, modelId);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n const modelId = request.model || this.defaultModel;\n const body = this.buildGeminiBody(request);\n const url = this.buildUrl(modelId, true);\n const res = await this.doFetch(url, body);\n\n if (!res.body) throw new ProviderError(\"No response body for stream\", this.providerName);\n\n // Vertex streams JSON array items separated by newlines or SSE\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"text/event-stream\")) {\n // SSE format\n for await (const event of parseSSEStream(res.body)) {\n if (event.data === \"[DONE]\") break;\n let chunk: any;\n try {\n chunk = JSON.parse(event.data);\n } catch {\n continue;\n }\n yield this.parseStreamChunk(chunk, modelId);\n }\n } else {\n // NDJSON or JSON array format\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n // Try to parse JSON objects from buffer\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim().replace(/^,/, \"\").replace(/^\\[/, \"\").replace(/\\]$/, \"\");\n if (!trimmed || trimmed === \"[\" || trimmed === \"]\") continue;\n try {\n const chunk = JSON.parse(trimmed);\n yield this.parseStreamChunk(chunk, modelId);\n } catch {\n // Incomplete JSON, put back\n buffer = line + \"\\n\" + buffer;\n break;\n }\n }\n }\n\n // Process remaining buffer\n const remaining = buffer.trim().replace(/^,/, \"\").replace(/^\\[/, \"\").replace(/\\]$/, \"\");\n if (remaining && remaining !== \"[\" && remaining !== \"]\") {\n try {\n const chunk = JSON.parse(remaining);\n yield this.parseStreamChunk(chunk, modelId);\n } catch {\n // ignore\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n private buildUrl(modelId: string, stream: boolean): string {\n const base = `https://${this.location}-aiplatform.googleapis.com/v1`;\n const path = `projects/${this.projectId}/locations/${this.location}/publishers/google/models/${modelId}`;\n const action = stream ? \"streamGenerateContent?alt=sse\" : \"generateContent\";\n return `${base}/${path}:${action}`;\n }\n\n private buildGeminiBody(request: ChatCompletionRequest): Record<string, any> {\n const { system, contents } = this.buildContents(request.messages);\n\n const body: Record<string, any> = { contents };\n\n if (system) {\n body.systemInstruction = { parts: [{ text: system }] };\n }\n\n // Generation config\n const generationConfig: Record<string, any> = {};\n if (request.maxTokens != null) generationConfig.maxOutputTokens = request.maxTokens;\n if (request.temperature != null) generationConfig.temperature = request.temperature;\n if (request.topP != null) generationConfig.topP = request.topP;\n if (request.stop) generationConfig.stopSequences = request.stop;\n\n if (request.responseFormat) {\n if (request.responseFormat.type === \"json_schema\" || request.responseFormat.type === \"json_object\") {\n generationConfig.responseMimeType = \"application/json\";\n if (request.responseFormat.schema) {\n generationConfig.responseSchema = request.responseFormat.schema;\n }\n }\n }\n\n applyGeminiReasoning(generationConfig, request.reasoning);\n\n if (Object.keys(generationConfig).length > 0) body.generationConfig = generationConfig;\n if (request.tools?.length) {\n body.tools = [\n {\n functionDeclarations: request.tools.map((t) => this.toGeminiTool(t)),\n },\n ];\n\n if (request.toolChoice != null) {\n const mode =\n request.toolChoice === \"auto\" ? \"AUTO\"\n : request.toolChoice === \"required\" ? \"ANY\"\n : request.toolChoice === \"none\" ? \"NONE\"\n : \"AUTO\";\n body.toolConfig = { functionCallingConfig: { mode } };\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n return body;\n }\n\n private buildContents(messages: UnifiedMessage[]): { system: string | undefined; contents: any[] } {\n const systemParts: string[] = [];\n const contents: any[] = [];\n\n for (const m of messages) {\n if (m.role === \"system\") {\n const text = typeof m.content === \"string\"\n ? m.content\n : m.content.filter((p) => p.type === \"text\").map((p) => (p as { type: \"text\"; text: string }).text).join(\"\\n\");\n if (text) systemParts.push(text);\n continue;\n }\n\n contents.push(this.toGeminiContent(m));\n }\n\n return {\n system: systemParts.length > 0 ? systemParts.join(\"\\n\\n\") : undefined,\n contents,\n };\n }\n\n private toGeminiContent(m: UnifiedMessage): Record<string, any> {\n // Tool result → user message with functionResponse\n if (m.role === \"tool\" && m.toolCallId) {\n const text = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n let response: any;\n try {\n response = JSON.parse(text);\n } catch {\n response = { result: text };\n }\n return {\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name: m.name ?? m.toolCallId,\n response,\n },\n },\n ],\n };\n }\n\n // Assistant with tool calls\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n const parts: any[] = [];\n if (typeof m.content === \"string\" && m.content) {\n parts.push({ text: m.content });\n }\n for (const tc of m.toolCalls) {\n parts.push({\n functionCall: {\n name: tc.name,\n args: safeJsonParse(tc.arguments),\n },\n });\n }\n return { role: \"model\", parts };\n }\n\n // Map roles: user→user, assistant→model\n const role = m.role === \"assistant\" ? \"model\" : \"user\";\n const parts: any[] = [];\n\n if (typeof m.content === \"string\") {\n parts.push({ text: m.content });\n } else if (Array.isArray(m.content)) {\n for (const part of m.content) {\n if (part.type === \"text\") {\n parts.push({ text: part.text });\n } else if (part.type === \"image\") {\n const src = part.source;\n if (src.type === \"base64\") {\n parts.push({\n inlineData: { mimeType: src.mediaType, data: src.data },\n });\n } else {\n parts.push({\n fileData: { mimeType: \"image/jpeg\", fileUri: src.url },\n });\n }\n }\n }\n }\n\n return { role, parts };\n }\n\n private toGeminiTool(t: ToolDefinition): Record<string, any> {\n return {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n };\n }\n\n private async getAccessToken(): Promise<string> {\n // If we have a valid token, reuse it\n if (this.accessToken && Date.now() < this.tokenExpiry) {\n return this.accessToken;\n }\n\n // Try to get token from service account JSON\n if (this.serviceAccountJson) {\n const token = await this.getTokenFromServiceAccount(this.serviceAccountJson);\n this.accessToken = token;\n this.tokenExpiry = Date.now() + 3500_000; // ~58 minutes\n return token;\n }\n\n // Try gcloud CLI as fallback\n try {\n const { execSync } = await import(\"child_process\");\n const token = execSync(\"gcloud auth print-access-token\", { encoding: \"utf8\" }).trim();\n this.accessToken = token;\n this.tokenExpiry = Date.now() + 3500_000;\n return token;\n } catch {\n throw new ProviderError(\n \"No access token available. Provide accessToken, serviceAccountJson, or ensure gcloud CLI is authenticated.\",\n this.providerName,\n );\n }\n }\n\n private async getTokenFromServiceAccount(sa: Record<string, any>): Promise<string> {\n const { createSign } = await import(\"crypto\");\n\n const now = Math.floor(Date.now() / 1000);\n const header = { alg: \"RS256\", typ: \"JWT\" };\n const claims = {\n iss: sa.client_email,\n scope: \"https://www.googleapis.com/auth/cloud-platform\",\n aud: \"https://oauth2.googleapis.com/token\",\n iat: now,\n exp: now + 3600,\n };\n\n const segments = [\n base64url(JSON.stringify(header)),\n base64url(JSON.stringify(claims)),\n ];\n const signingInput = segments.join(\".\");\n\n const sign = createSign(\"RSA-SHA256\");\n sign.update(signingInput);\n const signature = sign.sign(sa.private_key, \"base64url\");\n const jwt = `${signingInput}.${signature}`;\n\n const tokenRes = await fetch(\"https://oauth2.googleapis.com/token\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=${jwt}`,\n });\n\n if (!tokenRes.ok) {\n const text = await tokenRes.text().catch(() => \"\");\n throw new ProviderError(`Failed to get Vertex access token: ${text}`, this.providerName);\n }\n\n const tokenJson = (await tokenRes.json()) as { access_token: string };\n return tokenJson.access_token;\n }\n\n private async doFetch(url: string, body: Record<string, any>): Promise<Response> {\n const token = await this.getAccessToken();\n\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n ...this.defaultHeaders,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Vertex AI API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n private parseResponse(json: any, modelId: string): ChatCompletionResponse {\n const candidate = json.candidates?.[0];\n const parts = candidate?.content?.parts ?? [];\n\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const thoughtParts: string[] = [];\n let toolCallIdx = 0;\n\n for (const part of parts) {\n if (part.text) {\n // Gemini marks reasoning summary parts with thought:true.\n if (part.thought === true) {\n thoughtParts.push(part.text);\n } else {\n textParts.push(part.text);\n }\n } else if (part.functionCall) {\n toolCalls.push({\n id: `call_${toolCallIdx++}`,\n name: part.functionCall.name,\n arguments: JSON.stringify(part.functionCall.args ?? {}),\n });\n }\n }\n\n const usageMeta = json.usageMetadata ?? {};\n const tokenUsage: TokenUsage = {\n inputTokens: usageMeta.promptTokenCount ?? 0,\n outputTokens: usageMeta.candidatesTokenCount ?? 0,\n totalTokens: usageMeta.totalTokenCount ?? 0,\n cachedInputTokens: usageMeta.cachedContentTokenCount ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: usageMeta.thoughtsTokenCount ?? 0,\n };\n\n return {\n id: json.responseId ?? \"\",\n model: modelId,\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason: mapGeminiFinishReason(candidate?.finishReason),\n reasoning: thoughtParts.length > 0 ? { summary: thoughtParts.join(\"\\n\").trim() || undefined } : undefined,\n raw: json,\n };\n }\n\n private parseStreamChunk(chunk: any, modelId: string): ChatCompletionChunk {\n const candidate = chunk.candidates?.[0];\n const parts = candidate?.content?.parts ?? [];\n const delta: ChatCompletionChunk[\"delta\"] = {};\n\n for (const part of parts) {\n if (part.text) {\n if (part.thought === true) {\n delta.reasoning = { summary: (delta.reasoning?.summary ?? \"\") + part.text };\n } else {\n delta.content = (delta.content ?? \"\") + part.text;\n }\n } else if (part.functionCall) {\n if (!delta.toolCalls) delta.toolCalls = [];\n delta.toolCalls.push({\n id: `call_${delta.toolCalls.length}`,\n name: part.functionCall.name,\n arguments: JSON.stringify(part.functionCall.args ?? {}),\n });\n }\n }\n\n let usage: TokenUsage | undefined;\n if (chunk.usageMetadata) {\n const u = chunk.usageMetadata;\n usage = {\n inputTokens: u.promptTokenCount ?? 0,\n outputTokens: u.candidatesTokenCount ?? 0,\n totalTokens: u.totalTokenCount ?? 0,\n cachedInputTokens: u.cachedContentTokenCount ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: u.thoughtsTokenCount ?? 0,\n };\n }\n\n return {\n id: chunk.responseId ?? \"\",\n model: modelId,\n delta,\n usage,\n finishReason: mapGeminiFinishReason(candidate?.finishReason),\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction mapGeminiFinishReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"STOP\":\n return \"stop\";\n case \"MAX_TOKENS\":\n return \"length\";\n case \"SAFETY\":\n case \"RECITATION\":\n return \"content_filter\";\n case \"TOOL_CALLS\":\n return \"tool_calls\";\n default:\n return \"stop\";\n }\n}\n\nfunction base64url(str: string): string {\n return Buffer.from(str).toString(\"base64url\");\n}\n\nfunction safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return {};\n }\n}\n","// Adapter that wraps a native provider into the agent-sdk's BaseChatModel interface.\n// This allows any provider to be used directly with createAgent() / createSmartAgent().\n\nimport type { BaseChatModel, BaseChatMessage, BaseChatMessagePart } from \"../model.js\";\nimport type { ModelCapabilities } from \"../structuredOutput/types.js\";\nimport type { BaseProvider } from \"./base.js\";\nimport type {\n ChatCompletionRequest,\n ChatCompletionResponse,\n UnifiedMessage,\n ToolDefinition,\n ToolCall,\n ContentPart,\n TokenUsage,\n ProviderType,\n ReasoningRequestConfig,\n} from \"./types.js\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nexport type NativeModelOptions = {\n /** Override the model ID per adapter instance */\n model?: string;\n /** Default temperature */\n temperature?: number;\n /** Default max tokens */\n maxTokens?: number;\n /** Provider-specific extras passed on every request */\n extra?: Record<string, any>;\n /** Unified native reasoning config applied by default (per-call overrides supported). */\n reasoning?: ReasoningRequestConfig;\n};\n\n/**\n * Creates a BaseChatModel from a native provider.\n *\n * Usage:\n * ```ts\n * const provider = createProvider({ provider: \"openai\", apiKey: \"...\" });\n * const model = fromNativeProvider(provider, { model: \"gpt-4o\" });\n * const agent = createSmartAgent({ model, tools: [...] });\n * ```\n */\nexport function fromNativeProvider(\n provider: BaseProvider,\n options?: NativeModelOptions,\n): BaseChatModel {\n let boundTools: ToolDefinition[] | undefined = (options as any)?.__tools;\n\n const modelName = options?.model ?? (provider as any).defaultModel ?? provider.providerName;\n\n const adapted: BaseChatModel = {\n modelName,\n\n capabilities: resolveCapabilities(provider.providerName),\n\n invoke: async (\n messages: BaseChatMessage[],\n _invokeOptions?: Record<string, any>,\n ): Promise<BaseChatMessage> => {\n const request = buildRequest(messages, boundTools, options, _invokeOptions);\n const response = await provider.complete(request);\n return toBaseChatMessage(response);\n },\n\n stream: async function* (\n messages: BaseChatMessage[],\n _invokeOptions?: Record<string, any>,\n ): AsyncIterable<BaseChatMessage | BaseChatMessagePart | string> {\n const request = buildRequest(messages, boundTools, options, _invokeOptions);\n request.stream = true;\n\n let fullContent = \"\";\n let allToolCalls: ToolCall[] = [];\n let lastUsage: TokenUsage | undefined;\n let reasoningBlocks: import(\"./types.js\").ReasoningBlock[] | undefined;\n const toolCallBuffers = new Map<string, ToolCall>();\n\n for await (const chunk of provider.completeStream(request)) {\n // Yield text deltas as strings for streaming\n if (chunk.delta.content) {\n fullContent += chunk.delta.content;\n yield chunk.delta.content;\n }\n\n // Capture final reasoning blocks (emitted near end of stream).\n if (chunk.delta.reasoning?.blocks?.length) {\n reasoningBlocks = chunk.delta.reasoning.blocks;\n }\n\n // Accumulate tool calls\n if (chunk.delta.toolCalls) {\n for (const tc of chunk.delta.toolCalls) {\n if (tc.id) {\n const existing = toolCallBuffers.get(tc.id);\n if (existing) {\n if (tc.arguments) existing.arguments += tc.arguments;\n } else {\n toolCallBuffers.set(tc.id, {\n id: tc.id,\n name: tc.name ?? \"\",\n arguments: tc.arguments ?? \"\",\n });\n }\n }\n }\n }\n\n if (chunk.usage) lastUsage = chunk.usage;\n }\n\n // Yield final assembled message\n allToolCalls = [...toolCallBuffers.values()];\n const finalMessage = assembleMessage(fullContent, allToolCalls, lastUsage);\n if (reasoningBlocks?.length) {\n (finalMessage as any).reasoning = { blocks: reasoningBlocks };\n }\n yield finalMessage;\n },\n\n bindTools: (tools: any[], _bindOptions?: { strict?: boolean; [key: string]: any }): BaseChatModel => {\n const strict = _bindOptions?.strict ?? false;\n const toolDefs = tools.map((t) => toToolDefinition(t, strict));\n // Create a new adapter instance with tools pre-set in its closure\n return fromNativeProvider(provider, { ...options, __tools: toolDefs } as any);\n },\n };\n\n return adapted;\n\n // ─── Internal helpers ──────────────────────────────────────────────────\n\n function buildRequest(\n messages: BaseChatMessage[],\n tools?: ToolDefinition[],\n opts?: NativeModelOptions,\n invokeOptions?: Record<string, any>,\n ): ChatCompletionRequest {\n const req: ChatCompletionRequest = {\n model: opts?.model ?? modelName,\n messages: messages.map(toUnifiedMessage),\n };\n\n if (opts?.temperature != null) req.temperature = opts.temperature;\n if (opts?.maxTokens != null) req.maxTokens = opts.maxTokens;\n if (tools?.length) req.tools = tools;\n if (opts?.extra) req.extra = opts.extra;\n\n // Reasoning config: per-call invokeOptions.reasoning overrides the adapter default\n const reasoningOverride = (invokeOptions as any)?.reasoning as ReasoningRequestConfig | undefined;\n const reasoningCfg = reasoningOverride ?? opts?.reasoning;\n if (reasoningCfg) req.reasoning = reasoningCfg;\n\n // Per-call tool choice override (used by reflection node to disable tools temporarily)\n const tc = (invokeOptions as any)?.tool_choice ?? (invokeOptions as any)?.toolChoice;\n if (tc && tools?.length) {\n req.toolChoice = tc;\n }\n\n // Propagate response_format from invoke options (set by StructuredOutputManager via agentCore)\n const rf = invokeOptions?.response_format;\n if (rf && typeof rf === \"object\" && rf.type) {\n if (rf.type === \"json_schema\" && rf.json_schema) {\n req.responseFormat = {\n type: \"json_schema\",\n schema: rf.json_schema.schema,\n name: rf.json_schema.name,\n };\n } else if (rf.type === \"json_object\") {\n req.responseFormat = { type: \"json_object\" };\n } else if (rf.type === \"text\") {\n req.responseFormat = { type: \"text\" };\n }\n }\n\n // Fallback: check for __responseFormat in messages (legacy path)\n if (!req.responseFormat) {\n const lastMsg = messages[messages.length - 1];\n if (lastMsg && (lastMsg as any).__responseFormat) {\n req.responseFormat = (lastMsg as any).__responseFormat;\n }\n }\n\n return req;\n }\n}\n\n// ─── Conversion helpers ──────────────────────────────────────────────────────\n\nfunction toUnifiedMessage(msg: BaseChatMessage): UnifiedMessage {\n const unified: UnifiedMessage = {\n role: msg.role as UnifiedMessage[\"role\"],\n content: convertContent(msg.content),\n };\n\n if (msg.name) unified.name = msg.name;\n if (msg.tool_call_id) unified.toolCallId = msg.tool_call_id;\n\n if (msg.tool_calls?.length) {\n unified.toolCalls = msg.tool_calls.map((tc: any) => ({\n id: tc.id,\n name: tc.function?.name ?? tc.name ?? \"\",\n arguments: tc.function?.arguments ?? tc.arguments ?? \"{}\",\n }));\n }\n\n // Carry native reasoning blocks back so providers can replay them verbatim\n // (Anthropic/Bedrock extended thinking requires the signed blocks intact).\n const reasoning = (msg as any).reasoning;\n if (reasoning && (reasoning.blocks?.length || reasoning.summary)) {\n unified.reasoning = reasoning;\n }\n\n return unified;\n}\n\nfunction convertContent(content: string | BaseChatMessagePart[]): string | ContentPart[] {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return String(content ?? \"\");\n\n return content.map((part): ContentPart => {\n if (part.type === \"text\" || (!part.type && part.text)) {\n return { type: \"text\", text: part.text ?? part.content ?? \"\" };\n }\n if (part.type === \"image_url\") {\n const img = (part as any).image_url;\n if (typeof img === \"string\" || img?.url?.startsWith(\"http\")) {\n return {\n type: \"image\",\n source: { type: \"url\", url: typeof img === \"string\" ? img : img.url },\n };\n }\n // data URI → base64\n if (img?.url?.startsWith(\"data:\")) {\n const match = img.url.match(/^data:([^;]+);base64,(.+)$/);\n if (match) {\n return {\n type: \"image\",\n source: { type: \"base64\", mediaType: match[1], data: match[2] },\n };\n }\n }\n }\n // Fallback: treat as text\n return { type: \"text\", text: part.text ?? part.content ?? JSON.stringify(part) };\n });\n}\n\n// ─── Zod → JSON Schema helpers ───────────────────────────────────────────────\n\nfunction isZodSchema(obj: any): boolean {\n return obj != null && typeof obj === \"object\" && typeof obj.safeParse === \"function\" && \"_def\" in obj;\n}\n\nfunction hasStrictUnsafeShape(node: any, inProperty = false): boolean {\n if (!node || typeof node !== \"object\") return false;\n\n if (Array.isArray(node)) {\n return node.some((item) => hasStrictUnsafeShape(item, inProperty));\n }\n\n if (typeof node.$ref === \"string\") {\n return true;\n }\n\n const hasType = typeof node.type === \"string\" || (Array.isArray(node.type) && node.type.length > 0);\n const hasProperties = !!node.properties && typeof node.properties === \"object\" && !Array.isArray(node.properties);\n const hasItems = node.items !== undefined;\n const hasComposite = [\"anyOf\", \"oneOf\", \"allOf\"].some((key) => Array.isArray(node[key]) && node[key].length > 0);\n\n if (inProperty && !hasType && !hasProperties && !hasItems) {\n return true;\n }\n\n if (inProperty && hasComposite && !hasType) {\n return true;\n }\n\n if (hasProperties) {\n for (const value of Object.values(node.properties as Record<string, unknown>)) {\n if (hasStrictUnsafeShape(value, true)) {\n return true;\n }\n }\n }\n\n if (node.items && hasStrictUnsafeShape(node.items, false)) {\n return true;\n }\n\n for (const key of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n if (Array.isArray(node[key]) && hasStrictUnsafeShape(node[key], false)) {\n return true;\n }\n }\n\n for (const key of [\"definitions\", \"$defs\"]) {\n const defs = node[key];\n if (defs && typeof defs === \"object\") {\n for (const value of Object.values(defs as Record<string, unknown>)) {\n if (hasStrictUnsafeShape(value, false)) {\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\nfunction canUseStrictToolSchema(schema: any): boolean {\n if (!schema || typeof schema !== \"object\") {\n return true;\n }\n\n if (isZodSchema(schema)) {\n return true;\n }\n\n return !hasStrictUnsafeShape(schema);\n}\n\n/**\n * Convert a potentially-Zod schema to a plain JSON Schema object.\n * If it's already a JSON Schema (plain object with `type`), pass through.\n */\nfunction convertToJsonSchema(schema: any, strict = false): Record<string, any> {\n if (!schema || typeof schema !== \"object\") {\n return { type: \"object\", properties: {}, required: [], additionalProperties: false };\n }\n if (isZodSchema(schema)) {\n const converted = zodToJsonSchema(schema, {\n $refStrategy: \"none\",\n ...(strict ? { openaiStrictMode: true } : {}),\n }) as Record<string, any>;\n delete converted[\"$schema\"];\n // Ensure root is type: \"object\" (zodToJsonSchema should do this, but guard)\n if (!converted.type) converted.type = \"object\";\n return converted;\n }\n const converted = { ...schema };\n delete converted[\"$schema\"];\n // Already JSON Schema — ensure type is present\n if (!converted.type && converted.properties) {\n return { type: \"object\", ...converted };\n }\n return converted;\n}\n\n/**\n * Recursively normalize a JSON Schema for OpenAI strict mode:\n * - All object properties become required\n * - additionalProperties: false on every object\n */\nfunction normalizeStrictSchema(schema: Record<string, any>): Record<string, any> {\n if (!schema || typeof schema !== \"object\") return schema;\n const clone = { ...schema };\n\n if (typeof clone.format === \"string\") {\n delete clone.format;\n }\n\n if (clone.type === \"object\" || clone.properties) {\n if (!clone.type) clone.type = \"object\";\n if (clone.properties && typeof clone.properties === \"object\") {\n const normalized: Record<string, any> = {};\n for (const [k, v] of Object.entries(clone.properties)) {\n normalized[k] = normalizeStrictSchema(v as Record<string, any>);\n }\n clone.properties = normalized;\n clone.required = Object.keys(normalized);\n } else {\n clone.properties = {};\n clone.required = [];\n }\n clone.additionalProperties = false;\n }\n\n if (clone.items) clone.items = normalizeStrictSchema(clone.items);\n for (const key of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n if (Array.isArray(clone[key])) {\n clone[key] = clone[key].map((s: any) => normalizeStrictSchema(s));\n }\n }\n if (clone.definitions && typeof clone.definitions === \"object\") {\n const nd: Record<string, any> = {};\n for (const [k, v] of Object.entries(clone.definitions)) {\n nd[k] = normalizeStrictSchema(v as Record<string, any>);\n }\n clone.definitions = nd;\n }\n if (clone.$defs && typeof clone.$defs === \"object\") {\n const nd: Record<string, any> = {};\n for (const [k, v] of Object.entries(clone.$defs)) {\n nd[k] = normalizeStrictSchema(v as Record<string, any>);\n }\n clone.$defs = nd;\n }\n return clone;\n}\n\nfunction toToolDefinition(tool: any, strict?: boolean): ToolDefinition {\n let name: string;\n let description: string;\n let parameters: Record<string, any>;\n let rawSchema: any;\n let useStrict = strict ?? false;\n\n if (tool.type === \"function\" && tool.function) {\n // OpenAI function format — parameters are already JSON Schema\n name = tool.function.name;\n description = tool.function.description ?? \"\";\n rawSchema = tool.function.parameters ?? { type: \"object\", properties: {}, additionalProperties: false };\n } else {\n name = tool.name ?? \"unknown\";\n description = tool.description ?? \"\";\n rawSchema = tool.schema ?? tool.parameters;\n }\n\n if (useStrict && !canUseStrictToolSchema(rawSchema)) {\n useStrict = false;\n }\n\n parameters = convertToJsonSchema(rawSchema, useStrict);\n\n if (useStrict) {\n parameters = normalizeStrictSchema(parameters);\n }\n\n return { name, description, parameters, ...(useStrict ? { strict: true } : {}) };\n}\n\nfunction toBaseChatMessage(response: ChatCompletionResponse): BaseChatMessage {\n const msg: BaseChatMessage = {\n role: \"assistant\",\n content: response.content ?? \"\",\n usage: {\n prompt_tokens: response.usage.inputTokens,\n completion_tokens: response.usage.outputTokens,\n total_tokens: response.usage.totalTokens,\n prompt_tokens_details: {\n cached_tokens: response.usage.cachedInputTokens,\n },\n completion_tokens_details: {\n reasoning_tokens: response.usage.reasoningTokens,\n },\n },\n response_metadata: {\n token_usage: {\n prompt_tokens: response.usage.inputTokens,\n completion_tokens: response.usage.outputTokens,\n total_tokens: response.usage.totalTokens,\n cached_tokens: response.usage.cachedInputTokens,\n cache_write_tokens: response.usage.cachedWriteTokens,\n },\n finish_reason: response.finishReason,\n model_name: response.model,\n },\n };\n\n if (response.toolCalls.length > 0) {\n msg.tool_calls = response.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\" as const,\n function: { name: tc.name, arguments: tc.arguments },\n }));\n }\n\n if (response.reasoning && (response.reasoning.blocks?.length || response.reasoning.summary)) {\n (msg as any).reasoning = response.reasoning;\n }\n\n return msg;\n}\n\nfunction assembleMessage(content: string, toolCalls: ToolCall[], usage?: TokenUsage): BaseChatMessage {\n const msg: BaseChatMessage = {\n role: \"assistant\",\n content,\n };\n\n if (usage) {\n msg.usage = {\n prompt_tokens: usage.inputTokens,\n completion_tokens: usage.outputTokens,\n total_tokens: usage.totalTokens,\n prompt_tokens_details: {\n cached_tokens: usage.cachedInputTokens,\n },\n completion_tokens_details: {\n reasoning_tokens: usage.reasoningTokens,\n },\n };\n msg.response_metadata = {\n token_usage: {\n prompt_tokens: usage.inputTokens,\n completion_tokens: usage.outputTokens,\n total_tokens: usage.totalTokens,\n cached_tokens: usage.cachedInputTokens,\n cache_write_tokens: usage.cachedWriteTokens,\n },\n };\n }\n\n if (toolCalls.length > 0) {\n msg.tool_calls = toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\" as const,\n function: { name: tc.name, arguments: tc.arguments },\n }));\n }\n\n return msg;\n}\n\nfunction resolveCapabilities(provider: ProviderType): ModelCapabilities {\n switch (provider) {\n case \"openai\":\n case \"azure\":\n case \"openai-compatible\":\n return {\n structuredOutput: \"native\",\n strictToolCalling: true,\n streaming: true,\n provider: provider,\n };\n case \"anthropic\":\n return {\n structuredOutput: \"tool_based\",\n strictToolCalling: false,\n streaming: true,\n provider: \"anthropic\",\n };\n case \"bedrock\":\n return {\n structuredOutput: \"tool_based\",\n strictToolCalling: false,\n streaming: false, // streaming uses binary protocol\n provider: \"bedrock\",\n };\n case \"vertex\":\n return {\n structuredOutput: \"native\",\n strictToolCalling: false,\n streaming: true,\n provider: \"google\",\n };\n default:\n return { provider };\n }\n}\n","// ─── Native LLM Providers ───────────────────────────────────────────────────\n// Direct API consumption without LangChain or any framework dependency.\n// Unified request/response schema with per-provider wire format conversion.\n\n// Types\nexport type {\n // Message types\n MessageRole,\n TextContent,\n ImageContent,\n ContentPart,\n ToolCall,\n UnifiedMessage,\n ToolDefinition,\n // Request / Response\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatCompletionChunk,\n TokenUsage,\n FinishReason,\n // Provider configs\n ProviderConfig,\n ProviderType,\n OpenAIProviderConfig,\n AnthropicProviderConfig,\n AzureProviderConfig,\n OpenAICompatibleProviderConfig,\n BedrockProviderConfig,\n VertexProviderConfig,\n} from \"./types.js\";\n\nexport { ProviderError, emptyUsage } from \"./types.js\";\n\n// Base\nexport { BaseProvider } from \"./base.js\";\n\n// Providers\nexport { OpenAIProvider } from \"./openai.js\";\nexport { AnthropicProvider } from \"./anthropic.js\";\nexport { AzureProvider } from \"./azure.js\";\nexport { OpenAICompatibleProvider } from \"./openaiCompatible.js\";\nexport { BedrockProvider } from \"./bedrock.js\";\nexport { VertexProvider } from \"./vertex.js\";\n\n// Adapter\nexport { fromNativeProvider, type NativeModelOptions } from \"./adapter.js\";\n\n// Factory\nimport type { ProviderConfig } from \"./types.js\";\nimport type { BaseProvider } from \"./base.js\";\nimport { OpenAIProvider } from \"./openai.js\";\nimport { AnthropicProvider } from \"./anthropic.js\";\nimport { AzureProvider } from \"./azure.js\";\nimport { OpenAICompatibleProvider } from \"./openaiCompatible.js\";\nimport { BedrockProvider } from \"./bedrock.js\";\nimport { VertexProvider } from \"./vertex.js\";\n\n/**\n * Factory function to create a provider from a config object.\n *\n * @example\n * ```ts\n * const provider = createProvider({\n * provider: \"openai\",\n * apiKey: process.env.OPENAI_API_KEY!,\n * });\n *\n * // Direct usage\n * const response = await provider.complete({\n * model: \"gpt-4o\",\n * messages: [{ role: \"user\", content: \"Hello!\" }],\n * });\n *\n * // Or wrap as BaseChatModel for agent-sdk\n * import { fromNativeProvider } from \"./adapter\";\n * const model = fromNativeProvider(provider, { model: \"gpt-4o\" });\n * const agent = createSmartAgent({ model, tools: [...] });\n * ```\n */\nexport function createProvider(config: ProviderConfig): BaseProvider {\n switch (config.provider) {\n case \"openai\":\n return new OpenAIProvider(config);\n case \"anthropic\":\n return new AnthropicProvider(config);\n case \"azure\":\n return new AzureProvider(config);\n case \"openai-compatible\":\n return new OpenAICompatibleProvider(config);\n case \"bedrock\":\n return new BedrockProvider(config);\n case \"vertex\":\n return new VertexProvider(config);\n default:\n throw new Error(`Unknown provider: ${(config as any).provider}`);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/utilTokens.ts","../src/adapters/langchain.ts","../src/structuredOutput/types.ts","../src/structuredOutput/nativeStrategy.ts","../src/tool.ts","../src/structuredOutput/toolStrategy.ts","../src/structuredOutput/resolver.ts","../src/model.ts","../src/prompts.ts","../src/types.ts","../src/nodes/resolver.ts","../src/utils/usage.ts","../src/utils/tracing.ts","../src/nodes/agentCore.ts","../src/utils/content.ts","../src/utils/traceSections.ts","../src/smart/runtimeConfig.ts","../src/smart/toolResponses.ts","../src/utils/pendingToolCalls.ts","../src/nodes/tools.ts","../src/nodes/toolLimitFinalize.ts","../src/nodes/reflect.ts","../src/smart/reasoning.ts","../src/guardrails/engine.ts","../src/utils/stateSnapshot.ts","../src/utils/toolApprovals.ts","../src/utils/userQuestions.ts","../src/humanLoop.ts","../src/agent.ts","../src/utils/syntheticMessages.ts","../src/structuredOutput/manager.ts","../src/smart/subagents/registry.ts","../src/nodes/agent.ts","../src/nodes/contextSummarize.ts","../src/smart/contextPolicy.ts","../src/index.ts","../src/contextTools.ts","../src/graph/decisions.ts","../src/smart/memory.ts","../src/smart/skills/types.ts","../src/smart/skills/registry.ts","../src/smart/skills/skillTools.ts","../src/smart/subagents/types.ts","../src/smart/subagents/subagentTools.ts","../src/smart/index.ts","../src/smart/skills/markdownLoader.ts","../src/smart/eval.ts","../src/guardrails/checks.ts","../src/guardrails/index.ts","../src/providers/types.ts","../src/providers/base.ts","../src/providers/utils/sse.ts","../src/providers/utils/reasoning.ts","../src/providers/openai.ts","../src/providers/anthropic.ts","../src/providers/azure.ts","../src/providers/openaiCompatible.ts","../src/providers/utils/sigv4.ts","../src/providers/bedrock.ts","../src/providers/vertex.ts","../src/providers/adapter.ts","../src/providers/index.ts"],"names":["extractMessageText","createRequire","z","wrapped","path","clone","zodToJsonSchema","GuardrailPhase","getNestedValue","fs","nanoid","crypto","status","Buffer","extractText","durationMs","ZodError","executionId","responsePolicy","outputBytes","tool","randomUUID","entry","result","ctx","setTokenCounter","systemMessage","cleanCtx","state","AjvModule","createHash","createHmac","content","safeJsonParse","parts","converted"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Token counter contract used across the SDK. The default is a\n * character-based heuristic; users can swap in a real tokenizer (tiktoken,\n * @anthropic-ai/tokenizer, …) via SmartAgentOptions.tokenCounter.\n */\nexport type TokenCounter = (text: string) => number;\n\n/**\n * Estimates token count from text using a character-based heuristic.\n *\n * Approximation:\n * - For Latin/ASCII text: ~4 characters per token (GPT-family models)\n * - For CJK/Unicode text: ~1.5 characters per token\n *\n * For production accuracy, pass a `tokenCounter` option backed by tiktoken.\n */\nexport function defaultTokenCounter(text: string): number {\n if (!text) return 0;\n // Count non-ASCII characters (CJK, Arabic, etc.) which use more tokens\n const nonAsciiCount = (text.match(/[^\\x00-\\x7F]/g) || []).length;\n const asciiCount = text.length - nonAsciiCount;\n // ASCII text: ~4 chars/token, non-ASCII: ~1.5 chars/token\n return Math.ceil(asciiCount / 4 + nonAsciiCount / 1.5);\n}\n\nlet activeTokenCounter: TokenCounter = defaultTokenCounter;\n\n/**\n * Installs a custom token counter used by every callable in this module\n * (countApproxTokens, countMessagesTokens). Pass `undefined` or\n * `defaultTokenCounter` to restore the heuristic.\n */\nexport function setTokenCounter(counter?: TokenCounter | null): void {\n activeTokenCounter = typeof counter === \"function\" ? counter : defaultTokenCounter;\n}\n\nexport function getTokenCounter(): TokenCounter {\n return activeTokenCounter;\n}\n\n/** Backwards-compatible alias that delegates to the active counter. */\nexport function countApproxTokens(text: string): number {\n return activeTokenCounter(text || \"\");\n}\n\n/**\n * Extracts all text from a message, including content AND tool_calls arguments.\n * \n * Standard `countApproxTokens` only counts `.content`, but assistant messages\n * with tool_calls often have `content: \"\"` while `tool_calls[].function.arguments`\n * can contain massive JSON strings. The actual LLM API counts both towards input tokens,\n * so we must include tool_calls to get an accurate estimate.\n * \n * Also accounts for per-message overhead (role, name, formatting tokens).\n */\nfunction extractMessageText(m: any): string {\n if (!m) return \"\";\n const parts: string[] = [];\n\n // 1. Role + name overhead (~4 tokens worth of text)\n parts.push(m.role || \"\");\n if (m.name) parts.push(m.name);\n\n // 2. Content field\n if (typeof m.content === \"string\") {\n parts.push(m.content);\n } else if (Array.isArray(m.content)) {\n for (const c of m.content) {\n if (typeof c === \"string\") parts.push(c);\n else if (c?.text) parts.push(c.text);\n else if (c?.content) parts.push(c.content);\n else if (c?.type === \"tool_use\" && c?.input) {\n // Anthropic/Bedrock native tool_use content blocks\n parts.push(c.name || \"\");\n parts.push(typeof c.input === \"string\" ? c.input : JSON.stringify(c.input));\n } else if (c != null && typeof c === \"object\") {\n parts.push(JSON.stringify(c));\n }\n }\n } else if (m.content != null && typeof m.content === \"object\") {\n parts.push(JSON.stringify(m.content));\n }\n\n // 3. Tool calls (assistant messages) — these are counted by the API but often missed\n if (Array.isArray(m.tool_calls)) {\n for (const tc of m.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n // LangChain normalized format (name + args at top level)\n if (tc?.name && !tc?.function?.name) parts.push(tc.name);\n if (tc?.args && !tc?.function?.arguments) {\n parts.push(typeof tc.args === \"string\" ? tc.args : JSON.stringify(tc.args));\n }\n }\n }\n\n // 4. additional_kwargs.tool_calls (LangChain Bedrock format)\n if (Array.isArray(m.additional_kwargs?.tool_calls)) {\n for (const tc of m.additional_kwargs.tool_calls) {\n if (tc?.function?.name) parts.push(tc.function.name);\n if (tc?.function?.arguments) {\n parts.push(\n typeof tc.function.arguments === \"string\"\n ? tc.function.arguments\n : JSON.stringify(tc.function.arguments)\n );\n }\n }\n }\n\n return parts.join(\"\\n\");\n}\n\n/**\n * Estimates the total token count for an array of messages.\n * \n * Unlike counting only `.content`, this includes:\n * - `tool_calls[].function.arguments` (can be massive JSON)\n * - `tool_calls[].function.name`\n * - `additional_kwargs.tool_calls` (LangChain/Bedrock)\n * - Per-message overhead (role, name, formatting)\n * - Anthropic tool_use content blocks\n */\nexport function countMessagesTokens(messages: any[]): number {\n if (!Array.isArray(messages) || messages.length === 0) return 0;\n const allText = messages.map(extractMessageText).join(\"\\n\");\n // Add ~4 tokens per message for framing overhead (role delimiters, etc.)\n return countApproxTokens(allText) + messages.length * 4;\n}\n","import { z } from \"zod\";\nimport { createRequire } from \"module\";\n\nimport type { ToolInterface } from \"../types.js\";\n\ntype ToolExecutor = (input: any) => Promise<any> | any;\n\nconst moduleName = \"@langchain/core/tools\";\nlet cachedToolFactory: ((impl: ToolExecutor, config: Record<string, any>) => any) | null | undefined;\nlet cachedHasAttemptedFactory = false;\n\nlet requireFn: ((specifier: string) => any) | null = null;\ntry {\n requireFn = createRequire(import.meta.url);\n} catch {\n requireFn = null;\n}\n\nfunction getExecutor(tool: ToolInterface): ToolExecutor {\n if (typeof tool.invoke === \"function\") return (input: any) => tool.invoke!(input);\n if (typeof tool.call === \"function\") return (input: any) => tool.call!(input);\n if (typeof (tool as any).func === \"function\") return (input: any) => (tool as any).func(input);\n if (typeof (tool as any).run === \"function\") return (input: any) => (tool as any).run(input);\n if (typeof (tool as unknown as ToolExecutor) === \"function\") {\n return tool as unknown as ToolExecutor;\n }\n throw new Error(`Tool ${tool?.name ?? \"<unnamed>\"} is not invokable`);\n}\n\nfunction loadLangchainToolFactory(): ((impl: ToolExecutor, config: Record<string, any>) => any) | null {\n if (cachedHasAttemptedFactory) return cachedToolFactory ?? null;\n cachedHasAttemptedFactory = true;\n cachedToolFactory = null;\n if (!requireFn) return null;\n try {\n const mod = requireFn(moduleName) as any;\n const factory = typeof mod?.tool === \"function\" ? mod.tool : undefined;\n if (typeof factory === \"function\") {\n cachedToolFactory = factory;\n }\n } catch {\n cachedToolFactory = null;\n }\n return cachedToolFactory ?? null;\n}\n\nfunction ensureSchema(candidate: any) {\n if (!candidate) return z.any();\n if (candidate instanceof z.ZodType) return candidate;\n return candidate;\n}\n\nexport function toLangchainTools(tools: ToolInterface[]): any[] {\n const factory = loadLangchainToolFactory();\n if (!factory) return tools;\n\n return tools.map((tool) => {\n if (!tool) return tool;\n if ((tool as any).__lcTool) return (tool as any).__lcTool;\n\n const executor = getExecutor(tool);\n try {\n const lcTool = factory(async (input: any) => executor(input), {\n name: tool.name,\n description: tool.description,\n schema: ensureSchema((tool as any).schema),\n });\n (tool as any).__lcTool = lcTool;\n return lcTool;\n } catch {\n return tool;\n }\n });\n}\n\nexport function fromLangchainTools<T extends ToolInterface = ToolInterface>(tools: any[]): T[] {\n return tools.map((tool: any) => {\n if (!tool) return tool;\n if ((tool as any).__source === \"smart\") return tool as T;\n if (typeof tool === \"function\" && !tool.name) {\n const wrapped = createSimpleTool({\n name: \"anonymous_tool\",\n description: undefined,\n schema: z.any(),\n executor: tool as ToolExecutor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n }\n\n const name = tool.name || (tool?.lc_kwargs?.name as string) || (tool?.config?.name as string) || \"tool\";\n const description = tool.description || tool?.lc_kwargs?.description;\n const schema = tool.schema || tool?.lc_kwargs?.schema || z.any();\n const executor: ToolExecutor = (input: any) => {\n if (typeof tool.invoke === \"function\") return tool.invoke(input);\n if (typeof tool.call === \"function\") return tool.call(input);\n if (typeof tool._call === \"function\") return tool._call(input);\n if (typeof tool.run === \"function\") return tool.run(input);\n if (typeof tool.func === \"function\") return tool.func(input);\n if (typeof tool === \"function\") return tool(input);\n throw new Error(`LangChain tool ${name} is not invokable`);\n };\n\n const wrapped = createSimpleTool({\n name,\n description,\n schema,\n executor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n });\n}\n\nfunction createSimpleTool({\n name,\n description,\n schema,\n executor,\n}: {\n name: string;\n description?: string;\n schema: any;\n executor: ToolExecutor;\n}): ToolInterface {\n const invoke = async (input: any) => executor(input);\n return {\n name,\n description,\n schema,\n invoke,\n call: invoke,\n run: invoke,\n func: invoke,\n };\n}\n","import type { ZodError } from \"zod\";\n\n// --- Model Capabilities ---\n\n/** Describes what a model/provider natively supports. */\nexport type ModelCapabilities = {\n /** How the model supports structured output:\n * - \"native\": model accepts response_format with json_schema (OpenAI, Gemini, etc.)\n * - \"tool_based\": structured output must be emulated via a response tool\n */\n structuredOutput?: \"native\" | \"tool_based\";\n /** Whether tools must be bound with strict=true for native structured output auto-parsing. */\n strictToolCalling?: boolean;\n /** Whether the model supports streaming */\n streaming?: boolean;\n /** Provider identifier (e.g. \"openai\", \"anthropic\", \"bedrock\", \"google\") */\n provider?: string;\n};\n\n// --- Structured Output Error ---\n\nexport type StructuredOutputFieldError = {\n path: string;\n expected: string;\n received: string;\n message: string;\n};\n\nexport type StructuredOutputError = {\n type: \"parse_error\" | \"validation_error\" | \"no_output\" | \"max_retries\";\n message: string;\n fieldErrors?: StructuredOutputFieldError[];\n rawContent?: string;\n};\n\n// --- Structured Output Result ---\n\nexport type StructuredOutputResult<T> =\n | { success: true; data: T; attempts: number }\n | { success: false; error: StructuredOutputError; attempts: number; rawContent?: string };\n\n// --- Strategy Interface ---\n\n/**\n * Encapsulates how structured output is achieved for a given model/provider.\n * NativeJsonSchemaStrategy uses response_format; ToolBasedStrategy uses a response tool.\n */\nexport interface StructuredOutputStrategy {\n readonly kind: \"native\" | \"tool_based\";\n\n /**\n * Build a correction prompt when validation fails.\n * The prompt tells the model exactly which fields were wrong.\n */\n buildCorrectionPrompt(error: ZodError<any>, previousAttempt: unknown): string;\n}\n\n// --- Manager Config ---\n\nexport type StructuredOutputManagerConfig = {\n maxRetries?: number;\n};\n\n// --- Helper: get nested value for error messages ---\n\nexport function getNestedValue(obj: unknown, path: (string | number)[]): unknown {\n let current: any = obj;\n for (const key of path) {\n if (current == null || typeof current !== \"object\") return undefined;\n current = current[key];\n }\n return current;\n}\n\n// --- Helper: format ZodError into StructuredOutputError ---\n\nexport function formatZodError(error: ZodError<any>, rawContent?: string): StructuredOutputError {\n const fieldErrors: StructuredOutputFieldError[] = error.issues.map((issue) => ({\n path: issue.path.join(\".\") || \"root\",\n expected: (issue as any).expected ?? issue.code,\n received: (issue as any).received ?? \"unknown\",\n message: issue.message,\n }));\n\n return {\n type: \"validation_error\",\n message: `Schema validation failed: ${fieldErrors.map((f) => `${f.path}: ${f.message}`).join(\"; \")}`,\n fieldErrors,\n rawContent,\n };\n}\n","import type { ZodError, ZodSchema } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport type { StructuredOutputStrategy, StructuredOutputError } from \"./types.js\";\nimport { formatZodError, getNestedValue } from \"./types.js\";\n\n/**\n * Native JSON Schema strategy for providers that support `response_format`.\n *\n * Works with OpenAI (gpt-4o+), Google Gemini, and similar providers\n * that accept `response_format: { type: \"json_schema\", json_schema: {...} }`.\n *\n * The model guarantees valid JSON output matching the schema — no tool needed.\n */\nexport class NativeJsonSchemaStrategy implements StructuredOutputStrategy {\n readonly kind = \"native\" as const;\n\n private resolveJsonPointer(document: Record<string, any>, pointer: string): unknown {\n if (!pointer.startsWith(\"#/\")) {\n return undefined;\n }\n\n const segments = pointer\n .slice(2)\n .split(\"/\")\n .map((segment) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n\n let current: unknown = document;\n for (const segment of segments) {\n if (!current || typeof current !== \"object\" || !(segment in (current as Record<string, unknown>))) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n }\n\n private unwrapRootObjectSchema(schema: Record<string, any>): Record<string, any> {\n if (schema.type === \"object\") {\n return schema;\n }\n\n const ref = typeof schema.$ref === \"string\" ? schema.$ref : null;\n if (!ref) {\n return schema;\n }\n\n const resolved = this.resolveJsonPointer(schema, ref);\n if (!resolved || typeof resolved !== \"object\" || Array.isArray(resolved)) {\n return schema;\n }\n\n const resolvedSchema = { ...(resolved as Record<string, any>) };\n if (resolvedSchema.type !== \"object\") {\n return schema;\n }\n\n if (schema.definitions && resolvedSchema.definitions === undefined) {\n resolvedSchema.definitions = schema.definitions;\n }\n\n if (schema.$defs && resolvedSchema.$defs === undefined) {\n resolvedSchema.$defs = schema.$defs;\n }\n\n return resolvedSchema;\n }\n\n private normalizeOpenAIStrictSchema(schema: Record<string, any>): Record<string, any> {\n const visit = (node: any): any => {\n if (!node || typeof node !== \"object\") return node;\n\n if (Array.isArray(node)) {\n return node.map(visit);\n }\n\n const clone: Record<string, any> = { ...node };\n\n if (clone.properties && typeof clone.properties === \"object\") {\n const normalizedProperties: Record<string, any> = {};\n for (const [key, value] of Object.entries(clone.properties)) {\n normalizedProperties[key] = visit(value);\n }\n clone.properties = normalizedProperties;\n clone.required = Object.keys(normalizedProperties);\n if (clone.additionalProperties === undefined) {\n clone.additionalProperties = false;\n }\n }\n\n if (clone.items) {\n clone.items = visit(clone.items);\n }\n\n if (clone.definitions && typeof clone.definitions === \"object\") {\n const normalizedDefinitions: Record<string, any> = {};\n for (const [key, value] of Object.entries(clone.definitions)) {\n normalizedDefinitions[key] = visit(value);\n }\n clone.definitions = normalizedDefinitions;\n }\n\n if (clone.$defs && typeof clone.$defs === \"object\") {\n const normalizedDefs: Record<string, any> = {};\n for (const [key, value] of Object.entries(clone.$defs)) {\n normalizedDefs[key] = visit(value);\n }\n clone.$defs = normalizedDefs;\n }\n\n for (const compositeKey of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n if (Array.isArray(clone[compositeKey])) {\n clone[compositeKey] = clone[compositeKey].map(visit);\n }\n }\n\n return clone;\n };\n\n return visit(schema);\n }\n\n /**\n * Convert a Zod schema to the JSON Schema object used in response_format.\n */\n toJsonSchema(schema: ZodSchema<any>, name = \"structured_response\"): Record<string, any> {\n // Use zod-to-json-schema's OpenAI strict mode so optional/defaulted fields are\n // normalized into OpenAI's stricter json_schema subset.\n // @ts-expect-error zodToJsonSchema type instantiation can be excessively deep with complex schemas\n const result = zodToJsonSchema(schema, {\n name,\n openaiStrictMode: true,\n nameStrategy: \"duplicate-ref\",\n $refStrategy: \"extract-to-root\",\n nullableStrategy: \"property\",\n });\n const normalized = this.normalizeOpenAIStrictSchema(result as Record<string, any>);\n return this.unwrapRootObjectSchema(normalized);\n }\n\n /**\n * Build response_format configuration for the model call.\n * Returns the object that should be spread into model invocation options.\n */\n buildResponseFormat(schema: ZodSchema<any>, name?: string): Record<string, any> {\n const schemaName = name || \"structured_response\";\n const jsonSchema = this.toJsonSchema(schema, schemaName);\n // Remove $schema and other meta keys that some providers don't accept\n delete jsonSchema[\"$schema\"];\n\n return {\n response_format: {\n type: \"json_schema\",\n json_schema: {\n name: schemaName,\n strict: true,\n schema: jsonSchema,\n },\n },\n };\n }\n\n /**\n * Parse and validate model response content.\n * With native support, content is guaranteed JSON — but we still validate with Zod\n * for type safety and field-level error reporting.\n */\n extractOutput<T>(content: string, schema: ZodSchema<T>): { data: T } | { error: StructuredOutputError } {\n try {\n const raw = JSON.parse(content);\n const validated = (schema as any).parse(raw);\n return { data: validated };\n } catch (e: any) {\n if (e?.issues) {\n return { error: formatZodError(e as ZodError<T>, content) };\n }\n return {\n error: {\n type: \"parse_error\",\n message: `Failed to parse native structured output: ${e?.message}`,\n rawContent: content,\n },\n };\n }\n }\n\n buildCorrectionPrompt(error: ZodError<any>, previousAttempt: unknown): string {\n const fieldIssues = error.issues\n .map((issue) => {\n const pathStr = issue.path.join(\".\") || \"root\";\n const received = getNestedValue(previousAttempt, issue.path);\n return `- \"${pathStr}\": ${issue.message} (received: ${JSON.stringify(received)})`;\n })\n .join(\"\\n\");\n\n return [\n \"Your previous JSON response had validation errors:\",\n fieldIssues,\n \"\",\n \"Please output corrected JSON matching the schema.\",\n ].join(\"\\n\");\n }\n}\n","import type { ZodSchema } from \"zod\";\n\nimport type { ToolInterface } from \"./types.js\";\n\nexport type SmartToolFn = (args: any) => Promise<any> | any;\n\nexport type ToolCachePolicy = {\n /** Cache scope. \"run\" persists for the current invoke only. */\n scope?: \"run\";\n /** Override the cache key (default: stable JSON of args). */\n keyFn?: (args: any) => string;\n /** Time-to-live for the cached value, in ms. Default: full invoke. */\n ttlMs?: number;\n};\n\nexport type ToolRetryPolicy = {\n /** Max retry attempts after the initial failure. Default: 0. */\n maxRetries?: number;\n /** Initial backoff in ms (doubled on each retry). Default: 250. */\n backoffMs?: number;\n /** Decide whether an error is worth retrying. Default: every error. */\n shouldRetry?: (err: unknown, attempt: number) => boolean;\n /**\n * Open a circuit-breaker after this many consecutive failures across the\n * invoke; once tripped the tool short-circuits with the breaker error\n * until the loop ends. Default: never trip.\n */\n circuitBreakerThreshold?: number;\n};\n\nexport function createTool({\n name,\n description,\n schema,\n func,\n needsApproval,\n approvalPrompt,\n approvalDefaults,\n maxExecutionsPerRun,\n cache,\n retry,\n}: {\n name: string;\n description?: string;\n schema: ZodSchema;\n func: SmartToolFn;\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n /** When set, identical args within the same invoke short-circuit to the cached result. */\n cache?: boolean | ToolCachePolicy;\n /** Per-tool retry + circuit-breaker policy. */\n retry?: ToolRetryPolicy;\n}): ToolInterface {\n const execute: SmartToolFn = async (input: any) => func(input);\n\n const toolRecord: ToolInterface = {\n name,\n description,\n schema,\n // Our runtime prefers invoke but fallback helpers keep compatibility with LC-style tools.\n invoke: execute,\n call: execute,\n run: execute,\n func: execute,\n } as ToolInterface;\n\n if (typeof needsApproval === \"boolean\") {\n (toolRecord as any).needsApproval = needsApproval;\n }\n if (approvalPrompt !== undefined) {\n (toolRecord as any).approvalPrompt = approvalPrompt;\n }\n if (approvalDefaults !== undefined) {\n (toolRecord as any).approvalDefaults = approvalDefaults;\n }\n if (maxExecutionsPerRun !== undefined) {\n (toolRecord as any).maxExecutionsPerRun = maxExecutionsPerRun;\n }\n if (cache !== undefined) {\n (toolRecord as any).cache = cache;\n }\n if (retry !== undefined) {\n (toolRecord as any).retry = retry;\n }\n\n (toolRecord as any).__source = (toolRecord as any).__source || \"smart\";\n (toolRecord as any).__impl = func;\n\n return toolRecord;\n}\n","import type { ZodError, ZodSchema } from \"zod\";\nimport type { StructuredOutputStrategy, StructuredOutputError } from \"./types.js\";\nimport { formatZodError, getNestedValue } from \"./types.js\";\nimport { createTool } from \"../tool.js\";\nimport type { ToolInterface } from \"../types.js\";\n\n/**\n * Tool-based structured output strategy.\n *\n * Injects a hidden `response` tool that the model must call with the final JSON.\n * This is the universal fallback that works with all providers.\n */\nexport class ToolBasedStrategy implements StructuredOutputStrategy {\n readonly kind = \"tool_based\" as const;\n\n /**\n * Create the `response` tool for a given Zod schema.\n * The tool validates input against the schema and returns a sentinel object\n * that the tools node picks up to finalize the structured output.\n */\n createResponseTool<T>(schema: ZodSchema<T>): ToolInterface {\n return createTool({\n name: \"response\",\n description:\n \"Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.\",\n schema: schema as any,\n func: async (data: any) => {\n try {\n const validated = (schema as any).parse ? (schema as any).parse(data) : data;\n return { __finalStructuredOutput: true, data: validated };\n } catch (e: any) {\n // Return structured error so the model can self-correct\n const zodError = e as ZodError<T>;\n if (zodError?.issues) {\n const soError = formatZodError(zodError);\n return {\n error: \"Schema validation failed\",\n details: soError.message,\n fieldErrors: soError.fieldErrors,\n };\n }\n return { error: \"Schema validation failed\", details: e?.message };\n }\n },\n });\n }\n\n /**\n * Try to extract structured output from raw assistant text content.\n * Used as a last resort when the model writes JSON directly instead of calling the tool.\n */\n extractFromText<T>(content: string, schema: ZodSchema<T>): { data: T } | { error: StructuredOutputError } {\n let jsonText: string | null = null;\n\n // Try fenced code block first\n const fenced = content.match(/```(?:json)?\\n([\\s\\S]*?)```/i);\n if (fenced && fenced[1]) {\n jsonText = fenced[1].trim();\n } else {\n // Find first { or [\n const braceIdx = content.indexOf(\"{\");\n const bracketIdx = content.indexOf(\"[\");\n const candidates = [braceIdx, bracketIdx].filter((i) => i >= 0).sort((a, b) => a - b);\n if (candidates.length > 0) {\n jsonText = content.slice(candidates[0]).trim();\n }\n }\n\n try {\n const raw = JSON.parse(jsonText ?? content);\n const validated = (schema as any).parse(raw);\n return { data: validated };\n } catch (e: any) {\n if (e?.issues) {\n return { error: formatZodError(e as ZodError<T>, content) };\n }\n return {\n error: {\n type: \"parse_error\",\n message: `Failed to parse JSON from assistant message: ${e?.message}`,\n rawContent: content,\n },\n };\n }\n }\n\n buildCorrectionPrompt(error: ZodError<any>, previousAttempt: unknown): string {\n const fieldIssues = error.issues\n .map((issue) => {\n const pathStr = issue.path.join(\".\") || \"root\";\n const received = getNestedValue(previousAttempt, issue.path);\n return `- \"${pathStr}\": ${issue.message} (received: ${JSON.stringify(received)})`;\n })\n .join(\"\\n\");\n\n return [\n \"Your previous structured output had validation errors:\",\n fieldIssues,\n \"\",\n \"Please call `response` again with corrected values matching the schema.\",\n ].join(\"\\n\");\n }\n}\n","import type { StructuredOutputStrategy, ModelCapabilities } from \"./types.js\";\nimport { NativeJsonSchemaStrategy } from \"./nativeStrategy.js\";\nimport { ToolBasedStrategy } from \"./toolStrategy.js\";\n\n/**\n * Resolve the most appropriate structured output strategy for a given model.\n *\n * If the model exposes capabilities (via adapter or direct provider),\n * we use native JSON Schema support when available. Otherwise we fall back\n * to the universal tool-based approach.\n *\n * When direct providers are added to the SDK, they should set\n * `model.capabilities.structuredOutput = \"native\"` for providers that support\n * response_format (OpenAI, Gemini, etc.).\n */\nexport function resolveStrategy(model: any): StructuredOutputStrategy {\n const capabilities = getModelCapabilities(model);\n\n if (capabilities.structuredOutput === \"native\") {\n return new NativeJsonSchemaStrategy();\n }\n\n return new ToolBasedStrategy();\n}\n\n/**\n * Extract capabilities from a model object.\n * Supports:\n * - model.capabilities (set by adapters or direct providers)\n * - Auto-detection from model class name / metadata\n */\nexport function getModelCapabilities(model: any): ModelCapabilities {\n // Explicit capabilities take precedence\n if (model?.capabilities && typeof model.capabilities === \"object\") {\n return model.capabilities as ModelCapabilities;\n }\n\n // Auto-detect from LangChain wrapper or model metadata\n const provider = detectProvider(model);\n if (provider) {\n return {\n provider,\n structuredOutput: supportsNativeStructuredOutput(provider) ? \"native\" : \"tool_based\",\n strictToolCalling: requiresStrictToolCalling(provider),\n streaming: true,\n };\n }\n\n // Default: tool-based (safe fallback)\n return { structuredOutput: \"tool_based\" };\n}\n\n/**\n * Try to detect the provider from model metadata.\n * Works with both fromLangchainModel wrappers and future direct providers.\n */\nfunction detectProvider(model: any): string | undefined {\n if (!model || typeof model !== \"object\") return undefined;\n\n // Check explicit provider field\n if (typeof model.provider === \"string\") return model.provider;\n\n // Check LangChain wrapped model\n const lcModel = model._lc;\n if (lcModel) {\n return detectProviderFromLCModel(lcModel);\n }\n\n // Check model name hints\n const modelName: string = model.modelName || model.model || \"\";\n if (modelName.startsWith(\"gpt-\") || modelName.startsWith(\"o1\") || modelName.startsWith(\"o3\") || modelName.startsWith(\"o4\")) return \"openai\";\n if (modelName.startsWith(\"claude\")) return \"anthropic\";\n if (modelName.startsWith(\"gemini\")) return \"google\";\n if (modelName.startsWith(\"amazon.\") || modelName.startsWith(\"anthropic.\")) return \"bedrock\";\n\n return undefined;\n}\n\nfunction detectProviderFromLCModel(lcModel: any): string | undefined {\n if (!lcModel) return undefined;\n\n const className = lcModel.constructor?.name || \"\";\n if (className.includes(\"ChatOpenAI\") || className.includes(\"AzureChatOpenAI\")) return \"openai\";\n if (className.includes(\"ChatAnthropic\")) return \"anthropic\";\n if (className.includes(\"ChatGoogleGenerativeAI\") || className.includes(\"ChatVertexAI\")) return \"google\";\n if (className.includes(\"ChatBedrock\") || className.includes(\"BedrockChat\")) return \"bedrock\";\n if (className.includes(\"ChatGroq\")) return \"groq\";\n if (className.includes(\"ChatMistralAI\")) return \"mistral\";\n\n // Check _llmType()\n const llmType = typeof lcModel._llmType === \"function\" ? lcModel._llmType() : lcModel._llmType;\n if (typeof llmType === \"string\") {\n if (llmType.includes(\"openai\")) return \"openai\";\n if (llmType.includes(\"anthropic\")) return \"anthropic\";\n if (llmType.includes(\"google\")) return \"google\";\n }\n\n return undefined;\n}\n\n/**\n * Providers that support native response_format with json_schema.\n * This list will grow as more providers adopt the standard.\n */\nfunction supportsNativeStructuredOutput(provider: string): boolean {\n return [\"openai\", \"google\", \"groq\", \"mistral\"].includes(provider);\n}\n\nfunction requiresStrictToolCalling(provider: string): boolean {\n return [\"openai\"].includes(provider);\n}\n","// Generic base chat model contract used internally by agent-sdk.\n// We intentionally keep this minimal and implementation-agnostic so that\n// different framework specific models (LangChain, OpenAI SDK, Anthropic, etc.)\n// can be adapted without adding hard dependencies.\n\nimport { toLangchainTools } from \"./adapters/langchain.js\";\nimport type { ModelCapabilities } from \"./structuredOutput/types.js\";\nimport { getModelCapabilities } from \"./structuredOutput/resolver.js\";\n\nexport interface BaseChatMessagePart {\n type?: string; // e.g. 'text'\n text?: string;\n content?: string; // provider specific\n [key: string]: any;\n}\n\nexport interface BaseChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | string;\n name?: string;\n content: string | BaseChatMessagePart[];\n // Tool call metadata (OpenAI style)\n tool_calls?: Array<{ id: string; type?: string; function?: { name: string; arguments: string } }>;\n tool_call_id?: string; // for tool response messages\n usage?: any; // optional provider usage shape\n response_metadata?: any; // optional provider wrapper metadata\n [key: string]: any; // allow extensions\n}\n\nexport interface BaseChatModel {\n // Invoke should accept an array of BaseChatMessage (system/user/assistant/tool)\n invoke(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage>;\n // Optional streaming method that yields incremental chunks or messages\n stream?(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): AsyncIterable<BaseChatMessage | BaseChatMessagePart | string>;\n // Optional tool binding hook. If not present the agent will emulate simple pass-through.\n bindTools? (tools: any[], options?: { strict?: boolean; [key: string]: any }): BaseChatModel;\n // Optional metadata helpers\n modelName?: string;\n // Provider capabilities (structured output support, streaming, etc.)\n capabilities?: ModelCapabilities;\n [key: string]: any; // allow arbitrary extensions\n}\n\nexport type SmartModel = BaseChatModel;\n\nexport function isSmartModel(m: any): m is SmartModel {\n return !!m && typeof m === 'object' && typeof m.invoke === 'function';\n}\n\nexport function withTools(model: SmartModel, tools: any[], options?: { strict?: boolean; [key: string]: any }) {\n if (model?.bindTools) return model.bindTools(tools, options);\n return model;\n}\n\n// --- Adapters ----------------------------------------------------------------\n\n// Duck-type adapter for LangChain ChatModel / Runnable style objects.\n// We DO NOT import LangChain here; instead we just check for common methods.\n// Usage: fromLangchainModel(new ChatOpenAI(...)) returns a BaseChatModel.\nexport function fromLangchainModel(lcModel: any): BaseChatModel {\n if (!lcModel) throw new Error('fromLangchainModel: model is undefined/null');\n\n /** Normalize multimodal content parts for LangChain message format. */\n const normalizeContent = (content: any): any => {\n if (content == null) return content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((part: any) => {\n if (!part || typeof part !== 'object') return part;\n if (part.type === 'text') return { type: 'text', text: String(part.text ?? '') };\n if (part.type === 'image_url') {\n const img = (part as any).image_url;\n if (typeof img === 'string') return { type: 'image_url', image_url: { url: img } };\n if (img && typeof img === 'object') {\n if ('url' in img) return { type: 'image_url', image_url: img };\n if ('base64' in img) {\n const media = (img as any).media_type || 'image/jpeg';\n const dataUrl = `data:${media};base64,${(img as any).base64}`;\n const detail = (img as any).detail;\n return { type: 'image_url', image_url: { url: dataUrl, detail } };\n }\n }\n return part;\n }\n return part;\n });\n }\n return content;\n };\n\n /** Convert a BaseChatMessage to a LangChain-compatible message object. */\n const toLC = (m: BaseChatMessage): any => {\n if ((m as any)._getType || (m as any).lc_serializable) return m as any;\n return { role: m.role, content: normalizeContent(m.content), name: m.name, tool_calls: (m as any).tool_calls, tool_call_id: (m as any).tool_call_id };\n };\n\n const adapted: BaseChatModel = {\n invoke: async (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage> => {\n const lcMessages = messages.map(toLC);\n const response = await lcModel.invoke(lcMessages, options);\n if (response && typeof response === 'object') {\n const content = (response as any).content ?? (response as any).text ?? '';\n return {\n role: (response as any).role || 'assistant',\n content,\n tool_calls: (response as any).tool_calls,\n usage: (response as any).usage\n ?? (response as any).usage_metadata\n ?? (response as any).response_metadata?.token_usage\n ?? (response as any).response_metadata?.tokenUsage,\n usage_metadata: (response as any).usage_metadata,\n response_metadata: (response as any).response_metadata,\n ...response,\n } as BaseChatMessage;\n }\n return { role: 'assistant', content: String(response ?? '') };\n },\n stream: async function* (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }) {\n if (typeof lcModel.stream !== 'function') return;\n const lcMessages = messages.map(toLC);\n const streamResult = lcModel.stream(lcMessages, options);\n const stream = typeof (streamResult as Promise<unknown>)?.then === \"function\" ? await streamResult : streamResult;\n for await (const chunk of stream) {\n yield chunk as any;\n }\n },\n bindTools: (tools: any[], options?: { strict?: boolean; [key: string]: any }) => {\n const lcReady = toLangchainTools(tools);\n if (typeof lcModel.bindTools === 'function') {\n const bound = lcModel.bindTools(lcReady, options);\n return fromLangchainModel(bound);\n }\n if (typeof lcModel.bind === 'function') {\n const bound = lcModel.bind({ tools: lcReady, ...(options || {}) });\n return fromLangchainModel(bound);\n }\n return adapted;\n },\n modelName: lcModel.modelName || lcModel._modelId || lcModel._llmType || lcModel.name,\n _lc: lcModel,\n };\n\n // Auto-detect capabilities from the LangChain model\n adapted.capabilities = getModelCapabilities(adapted);\n\n return adapted;\n}\n\n// Placeholder for future adapters (OpenAI SDK, Anthropic, etc.) can follow a similar pattern.\n\n","import type { PlanningMode } from \"./types.js\";\n\nconst DEFAULT_TODO_LIST_PROMPT = `Planning tools are available when they materially improve execution.\n\nRules:\n1) Use \"manage_todo_list\" for multi-step work, delegation, recovery after a failed attempt, or when the user explicitly asks for a plan.\n2) Do NOT create a plan for direct Q&A, simple recall from existing context, or a single straightforward tool lookup unless the user asks for one.\n3) If a task is multi-step and no valid plan exists yet, create one before substantial execution.\n4) Use operation=\"write\" only to create or fully replace the entire plan. After a plan exists, default to operation=\"update\" for progress, evidence, status, owner changes, blockers, or reprioritization.\n5) When using operation=\"update\", send only the changed items. Do not resend unchanged plan items unless the whole plan structure is being rewritten.\n6) Include expectedVersion from the latest successful plan state whenever you update an existing plan. If you do not know the latest version, read the plan first.\n7) Keep exactly ONE item \"in-progress\" at a time.\n8) Update the plan whenever a step starts, completes, becomes blocked, fails, or the approach changes. Do not finish a multi-step task with stale plan state.\n9) If tool results materially change the task state, sync the plan before the final answer.\n10) Reuse prior tool results already present in the conversation before calling tools again.\n11) If an update fails because of a version mismatch, read the latest plan and retry instead of blindly rewriting it.\n12) Repeating full operation=\"write\" calls for the same plan is a mistake unless the plan structure itself changed.\n13) Keep the plan internal unless the user explicitly asks to see it.`;\n\nfunction buildPlanningBlock(todoListPrompt?: string) {\n const promptBody = todoListPrompt?.trim() || DEFAULT_TODO_LIST_PROMPT;\n if (promptBody.startsWith(\"<planning>\")) {\n return promptBody;\n }\n return `<planning>\\n${promptBody}\\n</planning>`;\n}\n\nexport function buildSystemPrompt(\n extra?: string,\n planning?: boolean | PlanningMode,\n name: string = \"Agent\",\n todoListPrompt?: string,\n) {\n const extraTrimmed = extra?.trim();\n const agentHeader = `Agent Name: ${name}`;\n const planningMode = typeof planning === \"string\"\n ? planning\n : planning\n ? \"todo\"\n : \"off\";\n const planningBlock = planningMode !== \"off\"\n ? buildPlanningBlock(todoListPrompt)\n : \"\";\n return [\n agentHeader,\n \"You are an advanced AI agent that is concise, accurate, and helpful.\",\n \"Follow these rules:\",\n \"- Use tools only when they add value; avoid redundant calls.\",\n \"- Never fabricate tool results; if unavailable, say so briefly.\",\n \"- Prefer short, structured answers; use bullet points when helpful.\",\n \"- Keep privacy and safety: do not reveal secrets or sensitive data.\",\n \"- If inputs are ambiguous or missing, ask one concise clarifying question.\",\n \"- Reuse prior tool results already present in the conversation when sufficient.\",\n \"- Use recovery tools such as \\\"get_tool_response\\\" only when the visible transcript explicitly shows a reduced tool-response marker (for example ARCHIVED_TOOL_RESPONSE, STRUCTURED_TOOL_RESPONSE, SUMMARIZED_TOOL_RESPONSE, DROPPED_TOOL_RESPONSE, or a truncation note with an executionId). Never use a recovery tool to re-fetch a normal tool result already visible in context.\",\n planningBlock,\n extraTrimmed ? `Extra instructions: ${extraTrimmed}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n","// LangChain specific types are removed from core; we define lightweight internal shapes.\n// If the user uses LangChain, they can still pass LC message objects; we treat them opaquely.\nimport type { ZodSchema } from \"zod\";\n\n// Image and content part types for multimodal messages\nexport type ImageURL =\n | { url: string; detail?: 'auto' | 'low' | 'high' }\n | { base64: string; media_type?: string; detail?: 'auto' | 'low' | 'high' }\n | string;\n\nexport type ContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: ImageURL }\n | { type: string; [key: string]: any };\n\n// Generic tool interface minimal contract (duck-typed). If user passes a LangChain Tool it will satisfy this.\nexport interface ToolInterface<TInput = any, TOutput = any, TCallOptions = any> {\n name: string;\n description?: string;\n // Either invoke(arg) or call(arg)\n invoke?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n call?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n schema?: any; // optional JSON schema / zod inference\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n maxExecutionsPerRun?: number | null;\n [key: string]: any;\n}\n\nexport type RunnableConfig = { [key: string]: any };\n\n// Base message (internal) – we accept either string content or array parts.\nexport type BaseMessage = {\n role: string; // 'user' | 'assistant' | 'system' | 'tool' | etc.\n name?: string;\n content: string | ContentPart[];\n tool_calls?: any;\n tool_call_id?: string;\n [key: string]: any;\n};\n\n// AI message is any message with role=assistant; keep alias for usageConverter generics\nexport type AIMessage = BaseMessage & { role: 'assistant' };\n\nexport type Message = BaseMessage; // maintain alias used elsewhere\n\nexport enum GuardrailPhase {\n Request = \"request\",\n Response = \"response\",\n}\n\nexport type GuardrailDisposition = \"block\" | \"warn\" | \"allow\";\n\nexport type GuardrailContext = {\n phase: GuardrailPhase;\n messages: Message[];\n latestMessage?: Message;\n state: SmartState;\n runtime?: AgentRuntimeConfig;\n options: SmartAgentOptions;\n};\n\nexport type GuardrailRuleResult = {\n passed: boolean;\n reason?: string;\n details?: Record<string, any>;\n disposition?: GuardrailDisposition;\n};\n\nexport type GuardrailRule = {\n id?: string;\n title?: string;\n description?: string;\n evaluate: (\n context: GuardrailContext\n ) => Promise<GuardrailRuleResult> | GuardrailRuleResult;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailIncident = {\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n phase: GuardrailPhase;\n reason?: string;\n details?: Record<string, any>;\n disposition: GuardrailDisposition;\n};\n\nexport type ConversationGuardrail = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo: GuardrailPhase[];\n rules: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: (\n incident: GuardrailIncident,\n context: GuardrailContext\n ) => Promise<GuardrailDisposition | void> | GuardrailDisposition | void;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailOutcome = {\n ok: boolean;\n incidents: GuardrailIncident[];\n};\n\n// Common limits for both Agent and SmartAgent\nexport type AgentLimits = {\n maxToolCalls?: number;\n // Maximum number of tools to execute in parallel per turn\n maxParallelTools?: number;\n // Approximate maximum context tokens the smart runtime should build for model calls\n maxContextTokens?: number;\n /**\n * Cap on cumulative model output tokens across the whole invoke. Once\n * exceeded the loop terminates after the current iteration with a\n * `metadata` event explaining the reason and emits `finalAnswer` so callers\n * can still recover the partial result.\n */\n maxTotalOutputTokens?: number;\n /**\n * Cap on cumulative cost in USD. Requires `costEstimator` on the agent\n * options to be a no-op-free check; otherwise this limit is ignored.\n */\n maxCostUsd?: number;\n /**\n * Cap on total wall-clock time for the invoke in milliseconds. Identical\n * semantics to `InvokeConfig.timeoutMs` but lives on the agent definition\n * so server-side defaults can be enforced without per-call wiring.\n */\n maxWallClockMs?: number;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentLimits = AgentLimits;\n\nexport type TraceSinkFileConfig = {\n type: \"file\";\n path?: string;\n};\n\nexport type TraceSinkCustomConfig = {\n type: \"custom\";\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n};\n\nexport type TraceSinkCognipeerConfig = {\n type: \"cognipeer\";\n apiKey: string;\n url?: string;\n};\n\nexport type TraceSinkHttpConfig = {\n type: \"http\";\n url: string;\n headers?: Record<string, string>;\n};\n\nexport type TraceSinkOtlpConfig = {\n type: \"otlp\";\n endpoint: string;\n headers?: Record<string, string>;\n};\n\nexport type TracingMode = \"batched\" | \"streaming\";\n\nexport type TraceSinkConfig =\n | TraceSinkFileConfig\n | TraceSinkCustomConfig\n | TraceSinkCognipeerConfig\n | TraceSinkHttpConfig\n | TraceSinkOtlpConfig;\n\nexport type TracingConfig = {\n enabled: boolean;\n mode?: TracingMode;\n logData?: boolean;\n sink?: TraceSinkConfig;\n threadId?: string;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentTracingConfig = TracingConfig;\n\n// --- Base Agent (simple, minimal) ---\nexport type AgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Optional override for the built-in todo list planning instructions.\n // Applied only when todo/planning guidance is enabled.\n todoListPrompt?: string;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n /**\n * Unified reasoning configuration. Controls both:\n * - Provider-native reasoning (OpenAI reasoning_effort, Anthropic thinking, Gemini thinkingConfig)\n * - Post-turn reflection (a short textual insight from the model after each tool turn)\n *\n * When omitted or `enabled=false` the agent behaves exactly as before.\n */\n reasoning?: ReasoningConfig;\n /**\n * Optional drop-in token counter. When provided, all internal token\n * estimates (summarization trigger, hard caps, context budget) use this\n * function instead of the built-in character heuristic. Recommended:\n * tiktoken / @anthropic-ai/tokenizer for production accuracy.\n */\n tokenCounter?: (text: string) => number;\n /**\n * Pluggable cost estimator: returns USD cost for a single model call's\n * usage. Used by the `maxCostUsd` budget limit. When omitted the SDK has\n * no built-in pricing table and the cost limit is a no-op.\n */\n costEstimator?: (args: {\n modelName?: string;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens?: number;\n reasoningTokens?: number;\n }) => number;\n /**\n * Human-in-the-loop hooks. When `askUser` is enabled, the agent gains a\n * built-in `ask_user_question` tool that pauses the run with structured\n * questions for the host application to answer.\n */\n humanInTheLoop?: HumanInTheLoopOptions;\n};\n\n// ─── Reasoning + Reflection ──────────────────────────────────────────────────\n// Unified naming:\n// - `reasoning.native` → provider-native reasoning pass-through\n// - `reasoning.reflection` → post-turn textual reflection step\n//\n// Top-level `enabled`/`level` act as a preset; explicit sub-keys always win.\n\nexport type ReasoningLevel = \"minimal\" | \"low\" | \"medium\" | \"high\";\n\nexport type ReflectionCadence = \"off\" | \"every_turn\" | \"after_tool\" | \"on_branch\" | \"initial_then_after_tool\";\n\n/** Context passed to reflection lifecycle hooks. */\nexport type ReflectionHookContext = {\n state: SmartState;\n /** The turn number (state.toolCallCount) at the time of the decision. */\n turn: number;\n trigger: ReflectionCadence;\n ranToolsThisTurn: boolean;\n};\n\nexport type ReflectionConfig = {\n enabled?: boolean;\n cadence?: ReflectionCadence;\n /**\n * - \"piggyback\" (default) — appends a short user-style \"reflect now\" message to the existing\n * transcript, reusing provider prompt cache. No tools. Returned text becomes a reflection record.\n * - \"separate\" — dedicated tool-free call with a compact prompt (cheaper, smaller cache hit).\n */\n mode?: \"piggyback\" | \"separate\";\n maxTokens?: number;\n maxChars?: number;\n keepLast?: number;\n /** When true reflection messages are compressible by the summarizer. Default false. */\n summarize?: boolean;\n promptTemplate?: string;\n /** When true emits `reflection` SmartAgent events. Default true. */\n emitEvents?: boolean;\n /**\n * Hard cap on the number of reflection calls within a single invoke. Once\n * the cap is hit subsequent qualifying turns no longer trigger reflection.\n * Default: unlimited.\n */\n maxPerRun?: number;\n /**\n * Minimum number of tool-bearing turns between reflections. Defaults to 1\n * (reflect on every qualifying turn). Set to 2 to reflect every other tool\n * turn, etc. Independent of `cadence`.\n */\n everyNTurns?: number;\n /**\n * Where to route the reflection text in addition to the reflection record:\n * - \"memory\" — store as a low-confidence agent-scoped `MemoryFact`.\n * - \"plan\" — append the note to the active plan's `lastReflection` field.\n * - \"none\" — record only (default).\n */\n feedTo?: \"memory\" | \"plan\" | \"none\";\n /**\n * Custom predicate that overrides the built-in cadence decision. Return true\n * to force a reflection on this turn, false to skip. `maxPerRun`/`everyNTurns`\n * throttles still apply on top of this.\n */\n shouldReflect?: (ctx: ReflectionHookContext) => boolean;\n /**\n * Build the reflection prompt body. Receives the resolved default prompt and\n * the char budget; return the prompt text to send. Overrides `promptTemplate`.\n */\n buildPrompt?: (ctx: ReflectionHookContext & { defaultPrompt: string; maxChars: number }) => string;\n /** Side-effect hook invoked after a reflection record is produced. */\n onReflection?: (record: ReflectionRecord, ctx: ReflectionHookContext) => void;\n};\n\nexport type NativeReasoningConfig = {\n effort?: \"minimal\" | \"low\" | \"medium\" | \"high\";\n budgetTokens?: number;\n includeThoughts?: boolean;\n providerExtras?: Record<string, any>;\n};\n\nexport type ReasoningConfig = {\n enabled?: boolean;\n level?: ReasoningLevel;\n /** Pass `false` to disable provider-native reasoning while keeping reflection. */\n native?: NativeReasoningConfig | false;\n /** Pass `false` to fully disable reflection. */\n reflection?: ReflectionConfig | false;\n};\n\nexport type BuiltInRuntimeProfile = \"fast\" | \"balanced\" | \"deep\" | \"research\";\nexport type RuntimeProfile = BuiltInRuntimeProfile | \"custom\";\n\nexport type SummarizationMode = \"incremental\" | \"full_rewrite\";\n\nexport type ContextPolicy = \"raw\" | \"summary_only\" | \"hybrid\";\n\nexport type ToolResponseRetentionPolicy = \"keep_full\" | \"keep_structured\" | \"summarize_archive\" | \"drop\";\n\nexport type ToolResponseClassification = \"critical\" | \"informative\" | \"verbose\";\n\nexport type PlanningMode = \"off\" | \"todo\" | \"planner_executor\" | \"reasoning_then_tools\";\n\nexport type ReplanPolicy = \"never\" | \"on_failure\" | \"on_conflict\" | \"every_n_steps\";\n\nexport type DelegationMode = \"off\" | \"role_based\" | \"automatic\";\n\nexport type ChildContextPolicy = \"minimal\" | \"scoped\" | \"full\";\n\nexport type MemoryProviderKind = \"inMemory\" | \"redis\" | \"postgres\" | \"mongo\" | \"s3\";\n\nexport type MemoryScope = \"session\" | \"user\" | \"workspace\" | \"tenant\";\n\nexport type MemoryWritePolicy = \"manual\" | \"auto_important\" | \"always\";\n\nexport type MemoryReadPolicy = \"recent_only\" | \"semantic\" | \"hybrid\";\n\nexport type MemoryFact = {\n key: string;\n value: string;\n sourceTurn: number;\n confidence: number;\n ttl?: number | null;\n obsolete?: boolean;\n lastUpdatedAt?: string;\n scope?: MemoryScope;\n tags?: string[];\n};\n\nexport interface MemoryStore {\n get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]>;\n upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void>;\n markObsolete(scope: MemoryScope, keys: string[]): Promise<void>;\n semanticSearch?(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]>;\n}\n\nexport type SummaryFactItem = {\n key: string;\n value: string;\n confidence?: number;\n source?: string;\n};\n\nexport type StructuredSummary = {\n stable_facts: SummaryFactItem[];\n active_goals: string[];\n open_questions: string[];\n discarded_obsolete: string[];\n rawSummary?: string;\n};\n\nexport type SummaryIntegrityCheck = {\n passed: boolean;\n criticalFactLoss: boolean;\n obsoleteFactRevived: boolean;\n notes: string[];\n};\n\nexport type PlanStepRecord = {\n id: number;\n step: string;\n owner: \"agent\" | \"user\" | \"tool\" | string;\n exitCriteria: string;\n evidence?: string;\n status: \"not-started\" | \"in-progress\" | \"completed\" | \"blocked\";\n title?: string;\n description?: string;\n};\n\nexport type SmartAgentSummarizationConfig = {\n enable?: boolean;\n maxTokens?: number;\n summaryTriggerTokens?: number;\n summaryPromptMaxTokens?: number;\n summaryCompressionRatioTarget?: number;\n summaryMode?: SummarizationMode;\n promptTemplate?: string;\n toolFreeCall?: boolean;\n integrityCheck?: boolean;\n};\n\nexport type SmartAgentBudgetConfig = {\n systemReserveTokens?: number;\n goalsReserveTokens?: number;\n recentTurnsReserveTokens?: number;\n toolResponseReserveTokens?: number;\n};\n\nexport type SmartAgentContextConfig = {\n policy?: ContextPolicy;\n lastTurnsToKeep?: number;\n toolResponsePolicy?: ToolResponseRetentionPolicy;\n budget?: SmartAgentBudgetConfig;\n};\n\nexport type SmartAgentPlanningConfig = {\n mode?: PlanningMode;\n replanPolicy?: ReplanPolicy;\n everyNSteps?: number;\n};\n\nexport type SmartAgentDelegationConfig = {\n mode?: DelegationMode;\n maxDelegationDepth?: number;\n maxChildCalls?: number;\n maxParallelChild?: number;\n childContextPolicy?: ChildContextPolicy;\n requireJsonOutputContract?: boolean;\n};\n\nexport type SmartAgentMemoryConfig = {\n provider?: MemoryProviderKind;\n store?: MemoryStore;\n scope?: MemoryScope;\n writePolicy?: MemoryWritePolicy;\n readPolicy?: MemoryReadPolicy;\n};\n\nexport type SmartAgentToolResponseConfig = {\n /**\n * Hard cap (in characters) applied at tool execution time to a single response.\n * Anything larger is truncated immediately with a get_tool_response retrieval hint\n * so a single oversized payload cannot blow up the next model call. Critical\n * tools are exempt from this cap.\n */\n maxToolResponseChars?: number;\n /** Hard cap (approx. tokens) for the same eager truncation rule. */\n maxToolResponseTokens?: number;\n /**\n * Retention policy applied to all non-critical tool responses by the summarizer\n * when it fires (context limit reached). Has no effect at execution time.\n * Defaults to context.toolResponsePolicy, or the active runtime profile default.\n */\n defaultPolicy?: ToolResponseRetentionPolicy;\n /**\n * Per-tool override of the summarizer retention policy. Wins over `defaultPolicy`.\n * Critical tools cannot be reduced regardless of override.\n */\n toolResponseRetentionByTool?: Record<string, ToolResponseRetentionPolicy>;\n /** Tool names whose responses are never reduced by the summarizer or hard cap. */\n criticalTools?: string[];\n /** Controls whether Zod-backed tool schemas fail fast or warn on invalid args. */\n schemaValidation?: \"strict\" | \"warn\";\n};\n\nexport type SmartAgentCustomProfileConfig = {\n extends?: BuiltInRuntimeProfile;\n limits?: AgentLimits;\n summarization?: SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n planning?: SmartAgentPlanningConfig;\n memory?: SmartAgentMemoryConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n};\n\nexport type ProfileConfig = {\n limits: Required<AgentLimits>;\n summarization: Required<SmartAgentSummarizationConfig>;\n context: Required<SmartAgentContextConfig> & { budget: Required<SmartAgentBudgetConfig> };\n planning: Required<SmartAgentPlanningConfig>;\n memory: Required<Omit<SmartAgentMemoryConfig, \"store\">> & { store?: MemoryStore };\n delegation: Required<SmartAgentDelegationConfig>;\n toolResponses: Required<SmartAgentToolResponseConfig>;\n};\n\nexport type ResolvedSmartAgentConfig = ProfileConfig & {\n runtimeProfile: RuntimeProfile;\n baseProfile: BuiltInRuntimeProfile;\n};\n\n// --- Smart Agent (batteries-included with planning & summarization) ---\nexport type SmartAgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n runtimeProfile?: RuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n // Toggle token-aware context summarization. Default: true. Set to false to disable.\n summarization?: boolean | SmartAgentSummarizationConfig;\n context?: SmartAgentContextConfig;\n memory?: SmartAgentMemoryConfig;\n planning?: SmartAgentPlanningConfig;\n delegation?: SmartAgentDelegationConfig;\n toolResponses?: SmartAgentToolResponseConfig;\n // System prompt configuration\n systemPrompt?: string; // Plain string system prompt to append to defaults\n // Optional override for the built-in todo list planning instructions.\n // Applied only when planning mode injects todo guidance.\n todoListPrompt?: string;\n // Enable internal planning workflow (todo list tool + prompt hints)\n /** @deprecated Use planning.mode=\"todo\" */\n useTodoList?: boolean;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n /**\n * Unified reasoning configuration. Same shape as on `AgentOptions`. See `ReasoningConfig`.\n */\n reasoning?: ReasoningConfig;\n /** See AgentOptions.tokenCounter. */\n tokenCounter?: (text: string) => number;\n /** See AgentOptions.costEstimator. */\n costEstimator?: AgentOptions[\"costEstimator\"];\n /** See AgentOptions.humanInTheLoop. */\n humanInTheLoop?: HumanInTheLoopOptions;\n /**\n * Progressive capability disclosure. When provided, the agent exposes cheap\n * skill headers in its system prompt and binds a skill's tools on demand via\n * the built-in open_skill / bind_skill_tools tools. Keeps the bound-tool count\n * per step small. An empty array is a no-op.\n */\n skills?: import(\"./smart/skills/types.js\").Skill[];\n /** Caps/tiering for skill disclosure. Defaults to DEFAULT_SKILL_POLICY. */\n skillPolicy?: import(\"./smart/skills/types.js\").SkillPolicy;\n /**\n * Sub-agents for dynamic problem decomposition. When provided (or when\n * `subagentPolicy.mode` enables ad-hoc spawning), the agent exposes\n * `delegate_to` / `spawn_subagent` / `spawn_subagents_parallel` tools and a\n * `<available_subagents>` catalog in its system prompt. Children inherit the\n * parent model (unless a `SubagentDef.model` override is given), and the\n * parent's event/streaming/cancellation/trace wiring.\n */\n subagents?: import(\"./smart/subagents/types.js\").SubagentDef[];\n /** Caps/modes for sub-agent spawning. Defaults to DEFAULT_SUBAGENT_POLICY. */\n subagentPolicy?: import(\"./smart/subagents/types.js\").SubagentPolicy;\n /**\n * Hooks to intercept/override the SDK's otherwise-static prompt surfaces:\n * the composed system prompt, built-in tool descriptions, and the sub-agent\n * catalog block. See {@link PromptHooks}.\n */\n promptHooks?: PromptHooks;\n};\n\n/**\n * Override points for the SDK's built-in (otherwise static) prompt surfaces.\n * Every hook is optional and additive — when omitted the defaults are used.\n */\nexport type PromptHooks = {\n /**\n * Transform the fully-composed system prompt right before it is sent. Receives\n * the default prompt and returns the prompt to use.\n */\n transformSystemPrompt?: (prompt: string, ctx: { agentName: string }) => string;\n /**\n * Override built-in tool descriptions by tool name (e.g. `delegate_to`,\n * `spawn_subagent`, `spawn_subagents_parallel`, `open_skill`,\n * `ask_user_question`). A string replaces the description; a function receives\n * the default and returns the replacement.\n */\n toolDescriptions?: Record<string, string | ((defaultDescription: string) => string)>;\n /**\n * Override the `<available_subagents>` catalog block. Receives the default\n * block and the active sub-agent definitions.\n */\n subagentCatalog?: (defaultBlock: string, subagents: import(\"./smart/subagents/types.js\").SubagentDef[]) => string;\n};\n\n// Runtime representation of an agent (used inside state.agent)\nexport type AgentRuntimeConfig = {\n name?: string;\n version?: string;\n model: any;\n tools: Array<ToolInterface<any, any, any>>;\n guardrails?: ConversationGuardrail[];\n systemPrompt?: string;\n todoListPrompt?: string;\n limits?: AgentLimits;\n useTodoList?: boolean;\n outputSchema?: ZodSchema<any>;\n // When using native structured output (response_format), this is set by StructuredOutputManager\n responseFormat?: Record<string, any>;\n tracing?: TracingConfig;\n runtimeProfile?: RuntimeProfile;\n smart?: ResolvedSmartAgentConfig;\n humanInTheLoop?: HumanInTheLoopRuntimeConfig;\n};\n\nexport type TraceMessageSection = {\n id?: string;\n kind: \"message\";\n label: string;\n role: string;\n content: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolCallSection = {\n id?: string;\n kind: \"tool_call\";\n label: string;\n tool: string;\n arguments?: any;\n toolDetails?: TraceToolDetails;\n};\n\nexport type TraceToolDetails = {\n name: string;\n description?: string;\n inputSchema?: any;\n approval?: {\n required?: boolean;\n prompt?: string;\n defaults?: any;\n };\n cache?: {\n enabled: boolean;\n scope?: string;\n ttlMs?: number;\n hasKeyFn?: boolean;\n };\n retry?: {\n maxRetries?: number;\n backoffMs?: number;\n circuitBreakerThreshold?: number;\n hasShouldRetry?: boolean;\n };\n limits?: {\n maxExecutionsPerRun?: number | null;\n };\n source?: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolResultItem = {\n title?: string;\n url?: string;\n snippet?: string;\n [key: string]: any;\n};\n\nexport type TraceToolResultSection = {\n id?: string;\n kind: \"tool_result\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n toolDetails?: TraceToolDetails;\n execution?: {\n id?: string;\n status?: \"success\" | \"error\" | \"skipped\" | \"cached\" | string;\n durationMs?: number;\n fromCache?: boolean;\n };\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type TraceToolResponseSection = {\n id?: string;\n kind: \"tool_response\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n toolDetails?: TraceToolDetails;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n};\n\nexport type TraceSummarySection = {\n id?: string;\n kind: \"summary\";\n label: string;\n content: string;\n};\n\nexport type TraceMetadataSection = {\n id?: string;\n kind: \"metadata\";\n label: string;\n data: Record<string, any>;\n};\n\nexport type TraceDataSection =\n | TraceMessageSection\n | TraceToolCallSection\n | TraceToolResultSection\n | TraceToolResponseSection\n | TraceSummarySection\n | TraceMetadataSection;\n\nexport type TraceEventRecord = {\n sessionId: string;\n id: string;\n type: string;\n label: string;\n sequence: number;\n timestamp: string;\n traceId?: string;\n spanId?: string;\n parentSpanId?: string;\n actor?: { scope?: string; name?: string; role?: string; version?: string };\n status: \"success\" | \"error\" | \"skipped\" | \"retry\";\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolDetails?: TraceToolDetails;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n data?: { sections: TraceDataSection[] };\n debug?: Record<string, any>;\n};\n\nexport type TraceErrorRecord = {\n eventId: string;\n message: string;\n stack?: string;\n type?: string;\n timestamp?: string;\n};\n\nexport type TraceSessionSummary = {\n totalDurationMs: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n totalCachedInputTokens: number;\n totalBytesIn: number;\n totalBytesOut: number;\n eventCounts: Record<string, number>;\n};\n\nexport type TraceSessionStatus = \"in_progress\" | \"success\" | \"error\" | \"partial\";\n\nexport type TraceSinkSnapshot =\n | { type: \"file\"; path: string }\n | { type: \"custom\" }\n | { type: \"cognipeer\"; url: string }\n | { type: \"http\"; url: string }\n | { type: \"otlp\"; endpoint: string };\n\nexport type TraceSessionConfigSnapshot = {\n enabled: boolean;\n logData: boolean;\n sink: TraceSinkSnapshot;\n};\n\nexport type TraceSessionFile = {\n sessionId: string;\n traceId?: string;\n rootSpanId?: string;\n threadId?: string;\n startedAt: string;\n endedAt?: string;\n durationMs?: number;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config: TraceSessionConfigSnapshot;\n summary: TraceSessionSummary;\n events: TraceEventRecord[];\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n};\n\nexport type ResolvedTraceSink =\n | { type: \"file\"; baseDir: string }\n | { type: \"custom\"; onEvent?: (event: TraceEventRecord) => void | Promise<void>; onSession?: (session: TraceSessionFile) => void | Promise<void> }\n | { type: \"cognipeer\"; url: string; apiKey: string }\n | { type: \"http\"; url: string; headers?: Record<string, string> }\n | { type: \"otlp\"; endpoint: string; headers?: Record<string, string> };\n\nexport type ResolvedTraceConfig = {\n enabled: boolean;\n mode: TracingMode;\n logData: boolean;\n sink: ResolvedTraceSink;\n};\n\nexport type TraceSessionRuntime = {\n sessionId: string;\n startedAt: number;\n traceId?: string;\n rootSpanId?: string;\n currentIterationSpanId?: string;\n threadId?: string;\n sessionStarted?: boolean;\n agentInfo?: { name?: string; version?: string; model?: string; provider?: string };\n resolvedConfig: ResolvedTraceConfig;\n events: TraceEventRecord[];\n summary: TraceSessionSummary;\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n fileBaseDir?: string;\n fileSessionDir?: string;\n};\n\n// Handoff descriptor returned from childAgent.asHandoff(...)\nexport type HandoffDescriptor<TParsed = any> = {\n type: \"handoff\";\n toolName: string;\n description: string;\n // Optional zod schema for handoff arguments; fallback is { reason: string }\n schema?: ZodSchema<any>;\n target: SmartAgentInstance<TParsed> & { __runtime: AgentRuntimeConfig };\n};\n\n// Base Agent State (minimal)\nexport type AgentState = {\n messages: Message[];\n // Active agent runtime parameters (dynamically swapped on handoff)\n agent?: AgentRuntimeConfig;\n toolHistory?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n toolCache?: Record<string, any>;\n toolCallCount?: number;\n metadata?: Record<string, any>;\n ctx?: Record<string, any>;\n pendingApprovals?: PendingToolApproval[];\n pendingUserQuestions?: PendingUserQuestion[];\n // Usage tracking (per agent model call). Each agent turn that produces an AI response\n // appends an entry to usage.perRequest. totals aggregates by modelName.\n usage?: {\n perRequest: Array<{\n id: string; // unique id per request\n modelName: string; // resolved provider/model identifier\n usage: any; // raw provider usage object (unmodified)\n timestamp: string; // ISO time of capture\n turn: number; // 1-based index of agent turn producing this response\n cachedInput?: number; // cached / reused prompt tokens (provider specific)\n }>;\n totals: Record<string, { input: number; output: number; total: number; cachedInput: number }>;\n };\n guardrailResult?: GuardrailOutcome;\n};\n\n// Smart Agent State (extends base with planning & summarization)\nexport type SmartState = AgentState & {\n summaries?: string[];\n summaryRecords?: Array<StructuredSummary & { integrity?: SummaryIntegrityCheck; createdAt?: string }>;\n memoryFacts?: MemoryFact[];\n toolHistoryArchived?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n classification?: ToolResponseClassification;\n retentionPolicy?: ToolResponseRetentionPolicy;\n archiveId?: string;\n summary?: string;\n status?: \"success\" | \"error\" | \"rejected\" | \"handoff\";\n }>;\n plan?: { version: number; steps: PlanStepRecord[]; lastUpdated?: string; adherenceScore?: number; lastReflection?: string } | null;\n planVersion?: number;\n /**\n * Post-turn reflection records produced by the reflection node. The SDK keeps the full\n * history here (even when only `keepLast` are re-injected into the prompt) so callers\n * can render them in a task/run timeline.\n */\n reflections?: ReflectionRecord[];\n};\n\nexport type ReflectionRecord = {\n id: string;\n turn: number;\n /** Plain-text reflection produced by the model. */\n text: string;\n createdAt: string;\n durationMs?: number;\n /** Index of the last message present when this reflection was taken. */\n anchorMessageIndex?: number;\n /** Trigger cadence that fired this reflection. */\n trigger?: ReflectionCadence;\n /** Token usage for this specific reflection call. */\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n cachedInputTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n };\n /** Optional tool call ids / names the reflection commented on (for UI linking). */\n toolCallIds?: string[];\n};\n\n// Event types for observability and future streaming support\nexport type ToolCallEvent = {\n type: \"tool_call\";\n phase: \"start\" | \"success\" | \"error\" | \"skipped\";\n name: string;\n id?: string;\n args?: any;\n result?: any;\n error?: { message: string } | undefined;\n durationMs?: number;\n};\n\nexport type PlanEvent = {\n type: \"plan\";\n source: \"manage_todo_list\" | \"system\";\n operation?: \"write\" | \"read\" | \"update\";\n todoList?: PlanStepRecord[];\n version?: number;\n adherenceScore?: number;\n};\n\nexport type SummarizationEvent = {\n type: \"summarization\";\n summary: string;\n /** Number of messages that were compressed/summarized */\n messagesCompressed?: number;\n /** Input tokens used for summarization prompt (from model response if available, otherwise estimated) */\n inputTokens?: number;\n /** Output tokens from summarization response (from model response if available, otherwise estimated) */\n outputTokens?: number;\n /** Cached input tokens from model response (prompt cache hit) */\n cachedInputTokens?: number;\n /** Total tokens (input + output) */\n totalTokens?: number;\n /** Duration of the summarization call in milliseconds */\n durationMs?: number;\n /** Previous summary content (if incremental summarization) */\n previousSummary?: string;\n /** Total token count before summarization */\n tokenCountBefore?: number;\n /** Total token count after summarization */\n tokenCountAfter?: number;\n /** @deprecated Use messagesCompressed instead */\n archivedCount?: number;\n structuredSummary?: StructuredSummary;\n integrity?: SummaryIntegrityCheck;\n};\n\nexport type EvalFamily = \"recall\" | \"state_continuity\" | \"summarization_fidelity\" | \"context_rollover\" | \"query_focused_summary\";\n\nexport type EvalCase = {\n id: string;\n family: EvalFamily;\n prompt: string;\n expectedPhrases?: string[];\n forbiddenPhrases?: string[];\n expectedFacts?: Array<{ key: string; value: string }>;\n expectedToolNames?: string[];\n};\n\nexport type EvalProfileDescriptor = {\n label: string;\n runtimeProfile: RuntimeProfile;\n baseProfile?: BuiltInRuntimeProfile;\n customProfile?: SmartAgentCustomProfileConfig;\n};\n\nexport type EvalProfileTarget = RuntimeProfile | EvalProfileDescriptor;\n\nexport type EvalCaseResult = {\n id: string;\n family: EvalFamily;\n success: boolean;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens?: number;\n profile: RuntimeProfile;\n profileLabel?: string;\n baseProfile?: BuiltInRuntimeProfile;\n notes: string[];\n};\n\nexport type EvalHarnessMetrics = {\n taskSuccess: number;\n recallAccuracy: number;\n obsoleteDropAccuracy: number;\n trajectoryScore: number;\n recoveryRate: number;\n overToolingRate: number;\n latencyMs: number;\n totalTokens: number;\n score: number;\n};\n\nexport type EvalHarnessResult = {\n profile: RuntimeProfile;\n profileLabel: string;\n baseProfile?: BuiltInRuntimeProfile;\n metrics: EvalHarnessMetrics;\n cases: EvalCaseResult[];\n};\n\nexport type FinalAnswerEvent = {\n type: \"finalAnswer\";\n content: string;\n};\n\nexport type MetadataEvent = {\n type: \"metadata\";\n usage?: any;\n modelName?: string;\n limits?: SmartAgentLimits;\n [key: string]: any;\n};\n\nexport type ProgressEvent = {\n type: \"progress\";\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamEvent = {\n type: \"stream\";\n text: string;\n isFinal?: boolean;\n};\n\nexport type CancelledEvent = {\n type: \"cancelled\";\n stage?: string;\n reason?: string;\n};\n\nexport type HandoffEvent = {\n type: \"handoff\";\n from?: string;\n to?: string;\n toolName: string;\n};\n\nexport type ToolApprovalStatus = \"pending\" | \"approved\" | \"rejected\" | \"executed\";\n\nexport type PendingToolApproval = {\n id: string;\n toolCallId: string;\n toolName: string;\n args: any;\n status: ToolApprovalStatus;\n requestedAt: string;\n decidedAt?: string;\n decidedBy?: string;\n comment?: string;\n approvedArgs?: any;\n resolvedAt?: string;\n executionId?: string;\n metadata?: Record<string, any>;\n};\n\nexport type ToolApprovalResolution = {\n id: string;\n approved: boolean;\n approvedArgs?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type ToolApprovalEvent = {\n type: \"tool_approval\";\n status: \"pending\" | \"approved\" | \"rejected\";\n id: string;\n toolName: string;\n toolCallId?: string;\n args?: any;\n decidedBy?: string;\n comment?: string;\n};\n\n// ─── Ask-User (Human-in-the-Loop questions) ──────────────────────────────────\n// Lets the model pause the agent and surface a structured prompt back to the\n// host application. Mirrors the Claude Code \"AskUserQuestion\" UX: one or more\n// related questions with multi-choice options and (optionally) free-text.\n\nexport type UserQuestionOption = {\n /** Label shown to the user. */\n label: string;\n /** Value returned in the resolution. Defaults to `label` when omitted. */\n value?: string;\n /** Optional helper text rendered alongside the option. */\n description?: string;\n /** Optional code / ASCII preview rendered when the option is focused. */\n preview?: string;\n};\n\nexport type UserQuestionItem = {\n /** The full question text shown to the user. */\n question: string;\n /** Short label (chip / tag) displayed alongside the question. */\n header?: string;\n /** When true the user may pick multiple options. Default: false. */\n multiSelect?: boolean;\n /** Placeholder shown for the free-text input (when enabled globally). */\n placeholder?: string;\n /** Predefined options; omit for a pure free-text question. */\n options?: UserQuestionOption[];\n /** When true the user must answer this item. Default: true. */\n required?: boolean;\n};\n\nexport type UserQuestionStatus = \"pending\" | \"answered\" | \"cancelled\" | \"executed\";\n\nexport type UserQuestionAnswer = {\n /** Selected option values. Single-select questions report exactly one entry. */\n values: string[];\n /** Populated when the user typed a custom answer (only when free-text is enabled). */\n freeText?: string;\n /** Optional reviewer notes. */\n notes?: string;\n};\n\n/** Keyed by the question text (or `header`, if both questions share text). */\nexport type UserQuestionAnswerSet = Record<string, UserQuestionAnswer>;\n\nexport type PendingUserQuestion = {\n id: string;\n toolCallId: string;\n toolName: \"ask_user_question\";\n questions: UserQuestionItem[];\n status: UserQuestionStatus;\n requestedAt: string;\n answeredAt?: string;\n answeredBy?: string;\n answers?: UserQuestionAnswerSet;\n cancelled?: boolean;\n notes?: string;\n /** Snapshot of the global free-text flag at request time, for UI rendering. */\n allowFreeText?: boolean;\n metadata?: Record<string, any>;\n};\n\nexport type UserQuestionResolution = {\n id: string;\n answers?: UserQuestionAnswerSet;\n answeredBy?: string;\n notes?: string;\n /** When true the tool call is reported back as cancelled / unanswered. */\n cancelled?: boolean;\n};\n\nexport type UserQuestionEvent = {\n type: \"user_question\";\n status: \"pending\" | \"answered\" | \"cancelled\";\n id: string;\n toolCallId: string;\n questions?: UserQuestionItem[];\n answers?: UserQuestionAnswerSet;\n answeredBy?: string;\n allowFreeText?: boolean;\n};\n\n// Runtime configuration carried on AgentRuntimeConfig / ctx so the tool and\n// the resolver share a single source of truth.\nexport type HumanInTheLoopAskUserConfig = {\n enabled: boolean;\n allowFreeText: boolean;\n promptOverride?: string;\n};\n\nexport type HumanInTheLoopRuntimeConfig = {\n askUser?: HumanInTheLoopAskUserConfig;\n};\n\nexport type HumanInTheLoopOptions = {\n askUser?: boolean | {\n /** Allow the user to type a custom \"Other\" answer. Default: true. */\n allowFreeText?: boolean;\n /** Override the built-in tool description. */\n promptOverride?: string;\n /** Convenience: subscribe to user_question events without setting up onEvent. */\n onQuestion?: (event: UserQuestionEvent) => void;\n };\n};\n\nexport type GuardrailEvent = {\n type: \"guardrail\";\n phase: GuardrailPhase;\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n disposition: GuardrailDisposition;\n reason?: string;\n details?: Record<string, any>;\n};\n\nexport type SubagentEvent = {\n type: \"subagent\";\n /** Lifecycle phase of a delegated sub-agent run. */\n phase: \"start\" | \"result\" | \"error\" | \"paused\";\n /** Sub-agent name (registry) or role (ad-hoc). */\n name: string;\n /** Unique per-spawn id. */\n id: string;\n mode: \"registry\" | \"adhoc\";\n /** Parent tool_call id that owns this sub-agent. */\n parentToolCallId?: string;\n /** True when spawned inside `spawn_subagents_parallel`. */\n parallel?: boolean;\n /** Task input (on `start`). */\n input?: string;\n /** Final content (on `result`). */\n content?: string;\n error?: { message: string };\n durationMs?: number;\n};\n\n/**\n * Origin-stamp fields the runtime attaches to any event that was forwarded from\n * a delegated child. Sub-agent children stamp `subagentId` / `subagentName`;\n * `asTool` delegated children stamp `delegatedTo`. All optional and absent on a\n * top-level agent's own events.\n */\nexport type DelegationEventStamp = {\n /** Per-spawn id of the sub-agent that produced this forwarded event. */\n subagentId?: string;\n /** Sub-agent name / role that produced this forwarded event. */\n subagentName?: string;\n /** Name of the `asTool` child agent this forwarded event came from. */\n delegatedTo?: string;\n};\n\nexport type SmartAgentEvent = (\n | ToolCallEvent\n | ToolApprovalEvent\n | UserQuestionEvent\n | PlanEvent\n | SummarizationEvent\n | FinalAnswerEvent\n | MetadataEvent\n | HandoffEvent\n | GuardrailEvent\n | ProgressEvent\n | StreamEvent\n | CancelledEvent\n | SubagentEvent\n | ReflectionEvent\n) & DelegationEventStamp;\n\nexport type ReflectionEvent = {\n type: \"reflection\";\n id: string;\n turn: number;\n text: string;\n trigger?: ReflectionCadence;\n durationMs?: number;\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n cachedInputTokens?: number;\n totalTokens?: number;\n reasoningTokens?: number;\n };\n toolCallIds?: string[];\n};\n\nexport type CancellationTokenLike = {\n readonly isCancellationRequested: boolean;\n onCancellationRequested?: (listener: () => void) => { dispose(): void } | void;\n};\n\nexport type AbortSignalLike = {\n readonly aborted: boolean;\n};\n\nexport type ProgressUpdate = {\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamChunk = {\n text: string;\n isFinal?: boolean;\n};\n\nexport type InvokeConfig = RunnableConfig & {\n // Optional per-call event hook (overrides SmartAgentOptions.onEvent if provided)\n onEvent?: (event: SmartAgentEvent) => void;\n // Optional per-call progress hook\n onProgress?: (progress: ProgressUpdate) => void;\n // Optional per-call streaming hook\n onStream?: (chunk: StreamChunk) => void;\n // Enable streaming if supported by model\n stream?: boolean;\n // Cancellation control\n cancellationToken?: CancellationTokenLike | AbortSignalLike;\n // Optional timeout for the full invoke (ms)\n timeoutMs?: number;\n // Optional per-call limits override\n limits?: Partial<AgentLimits>;\n // Invoked after each major stage; return true to checkpoint execution (state.ctx.__paused will be set).\n onStateChange?: (state: SmartState) => boolean;\n // Optional reason stored alongside checkpoint metadata.\n checkpointReason?: string;\n};\n\nexport type SnapshotRuntimeHint = {\n name?: string;\n version?: string;\n tools?: string[];\n};\n\nexport type SerializableSmartState = Omit<SmartState, \"agent\"> & { agent?: undefined };\n\nexport type AgentSnapshotMetadata = {\n createdAt: string;\n tag?: string;\n paused?: {\n stage?: string;\n iteration?: number;\n reason?: string;\n } | null;\n};\n\nexport type AgentSnapshot = {\n state: SerializableSmartState;\n runtimeHint?: SnapshotRuntimeHint;\n metadata: AgentSnapshotMetadata;\n};\n\nexport type SnapshotOptions = {\n tag?: string;\n includeRuntimeHint?: boolean;\n};\n\nexport type RestoreSnapshotOptions = {\n agent?: AgentRuntimeConfig;\n ctx?: Record<string, any>;\n mergeCtx?: boolean;\n};\n\n// Structured agent result returned by invoke\nexport type AgentInvokeResult<TOutput = unknown> = {\n content: string;\n // If outputSchema is set, this will contain the parsed and validated output.\n // TOutput will be inferred from the provided Zod schema.\n output?: TOutput;\n // If outputSchema is set and parsing/validation failed, this describes the error.\n // When output is defined, outputError is undefined and vice versa.\n outputError?: import(\"./structuredOutput/types.js\").StructuredOutputError;\n metadata: { usage?: any };\n messages: Message[];\n state?: SmartState;\n};\n\n// Base Agent instance (minimal)\nexport type AgentInstance<TOutput = unknown> = {\n invoke: (input: SmartState, config?: InvokeConfig) => Promise<AgentInvokeResult<TOutput>>;\n snapshot: (state: SmartState, options?: SnapshotOptions) => AgentSnapshot;\n resume: (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => Promise<AgentInvokeResult<TOutput>>;\n resolveToolApproval: (state: SmartState, resolution: ToolApprovalResolution) => SmartState;\n resolveUserQuestion: (state: SmartState, resolution: UserQuestionResolution) => SmartState;\n // Convert this agent into a tool usable by another agent. Accepts optional overrides.\n asTool: (opts: { toolName: string; description?: string; inputDescription?: string } ) => ToolInterface<any, any, any>;\n // Create a handoff descriptor so another agent can switch control to this one mid-conversation\n asHandoff: (opts: { toolName?: string; description?: string; schema?: ZodSchema<any>; }) => HandoffDescriptor<TOutput>;\n __runtime: AgentRuntimeConfig;\n};\n\n// Smart Agent instance (same as AgentInstance for now, but semantically separate)\nexport type SmartAgentInstance<TOutput = unknown> = AgentInstance<TOutput>;\n","import type { SmartState } from \"../types.js\";\n\n// Ensures required state fields exist and normalizes incoming messages\nexport function createResolverNode() {\n return async (state: SmartState): Promise<SmartState> => {\n const messages = Array.isArray(state.messages) ? state.messages : [];\n return {\n ...state,\n messages,\n summaries: state.summaries || [],\n toolCallCount: state.toolCallCount || 0,\n toolCache: state.toolCache || {},\n toolHistory: state.toolHistory || [],\n toolHistoryArchived: state.toolHistoryArchived || [],\n pendingApprovals: state.pendingApprovals || [],\n pendingUserQuestions: state.pendingUserQuestions || [],\n plan: state.plan || null,\n planVersion: state.planVersion || 0,\n } as SmartState;\n };\n}\n","// Normalizes provider-specific usage objects into a common shape.\n// Target shape:\n// {\n// prompt_tokens: number;\n// completion_tokens: number;\n// total_tokens: number;\n// prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n// completion_tokens_details: { reasoning_tokens: number; audio_tokens: number; accepted_prediction_tokens: number; rejected_prediction_tokens: number };\n// raw?: any; // original provider usage\n// }\n\nexport type NormalizedUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n completion_tokens_details: {\n reasoning_tokens: number;\n audio_tokens: number;\n accepted_prediction_tokens: number;\n rejected_prediction_tokens: number;\n };\n raw?: any;\n};\n\nexport function normalizeUsage(raw: any | undefined | null): NormalizedUsage | undefined {\n if (!raw) return undefined;\n // Canonical numeric fields from various provider key aliases.\n const prompt = num(raw.prompt_tokens, raw.input_tokens, raw.promptTokens, raw.total_prompt_tokens);\n const completion = num(raw.completion_tokens, raw.output_tokens, raw.completionTokens, raw.total_completion_tokens);\n // total might be explicitly provided or computed.\n const total = num(\n raw.total_tokens,\n raw.totalTokens,\n (typeof prompt === 'number' ? prompt : 0) + (typeof completion === 'number' ? completion : 0)\n );\n\n // Details: attempt to pull from common nested spots else zeros\n // OpenAI format: prompt_tokens_details / completion_tokens_details\n // LangChain format: input_token_details / output_token_details\n const promptDetailsSrc = raw.prompt_tokens_details || raw.promptTokensDetails\n || raw.input_token_details || raw.inputTokenDetails\n || raw.input_tokens_details || raw.inputTokensDetails\n || {};\n const completionDetailsSrc = raw.completion_tokens_details || raw.completionTokensDetails\n || raw.output_token_details || raw.outputTokenDetails\n || raw.output_tokens_details || raw.outputTokensDetails\n || {};\n\n const cachedTokens = num(\n promptDetailsSrc.cached_tokens,\n promptDetailsSrc.cachedTokens,\n promptDetailsSrc.cached,\n promptDetailsSrc.cache_read,\n promptDetailsSrc.cacheRead,\n promptDetailsSrc.cache_read_tokens,\n raw.cached_input_tokens,\n raw.cachedInputTokens,\n raw.cached_prompt_tokens,\n raw.cachedPromptTokens,\n raw.cache_read_input_tokens,\n raw.cacheReadInputTokens\n );\n\n const normalized: NormalizedUsage = {\n prompt_tokens: safe(prompt),\n completion_tokens: safe(completion),\n total_tokens: safe(total || (prompt || 0) + (completion || 0)),\n prompt_tokens_details: {\n cached_tokens: safe(cachedTokens),\n audio_tokens: safe(num(promptDetailsSrc.audio_tokens, promptDetailsSrc.audioTokens, promptDetailsSrc.audio)),\n },\n completion_tokens_details: {\n reasoning_tokens: safe(num(completionDetailsSrc.reasoning_tokens, completionDetailsSrc.reasoningTokens)),\n audio_tokens: safe(num(completionDetailsSrc.audio_tokens, completionDetailsSrc.audioTokens)),\n accepted_prediction_tokens: safe(\n num(completionDetailsSrc.accepted_prediction_tokens, completionDetailsSrc.acceptedPredictionTokens)\n ),\n rejected_prediction_tokens: safe(\n num(completionDetailsSrc.rejected_prediction_tokens, completionDetailsSrc.rejectedPredictionTokens)\n ),\n },\n raw,\n };\n return normalized;\n}\n\nfunction num(...vals: any[]): number | undefined {\n for (const v of vals) {\n if (v === 0) return 0;\n if (v == null) continue;\n const n = Number(v);\n if (!Number.isNaN(n)) return n;\n }\n return undefined;\n}\nfunction safe(v: any): number { const n = Number(v); return Number.isFinite(n) && n >= 0 ? n : 0; }\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Buffer } from \"node:buffer\";\nimport { nanoid } from \"nanoid\";\nimport crypto from \"node:crypto\";\nimport type {\n AgentRuntimeConfig,\n ResolvedTraceConfig,\n ResolvedTraceSink,\n SmartAgentOptions,\n SmartAgentTracingConfig,\n TraceDataSection,\n TraceEventRecord,\n TraceSessionConfigSnapshot,\n TraceSessionFile,\n TraceSessionRuntime,\n TraceSessionStatus,\n TraceSessionSummary,\n TraceSinkConfig,\n TraceSinkSnapshot,\n TraceToolCallSection,\n TracingMode,\n} from \"../types.js\";\n\nconst DEFAULT_COGNIPEER_URL = \"https://console.cognipeer.com/api/client/v1/tracing/sessions\";\n\nexport function fileSink(path?: string): TraceSinkConfig {\n return { type: \"file\", path };\n}\n\ntype CustomSinkArg =\n | ((event: TraceEventRecord) => void | Promise<void>)\n | {\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n };\n\nexport function customSink(handler: CustomSinkArg): TraceSinkConfig {\n if (typeof handler === \"function\") {\n return { type: \"custom\", onEvent: handler };\n }\n return {\n type: \"custom\",\n onEvent: typeof handler?.onEvent === \"function\" ? handler.onEvent : undefined,\n onSession: typeof handler?.onSession === \"function\" ? handler.onSession : undefined,\n };\n}\n\nexport function cognipeerSink(apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(url: string | undefined, apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(first: string | undefined, second?: string): TraceSinkConfig {\n if (second === undefined) {\n const apiKey = first ?? \"\";\n return { type: \"cognipeer\", apiKey };\n }\n const url = typeof first === \"string\" && first.trim().length > 0 ? first.trim() : undefined;\n return { type: \"cognipeer\", url, apiKey: second };\n}\n\nexport function httpSink(url: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"http\", url, headers };\n}\n\n/**\n * Create an OTLP/HTTP JSON sink that exports traces in OpenTelemetry format.\n * @param endpoint OTLP endpoint URL (e.g. \"https://console.cognipeer.com/api/client/v1/traces\")\n * @param headers Optional headers (e.g. { Authorization: \"Bearer ...\" })\n */\nexport function otlpSink(endpoint: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"otlp\", endpoint, headers };\n}\nfunction resolveLogsBaseDir(customPath?: string, ensureDirectory = true) {\n const root = process.cwd();\n const base = customPath && customPath.trim().length > 0 ? customPath : path.join(root, \"logs\");\n if (ensureDirectory) {\n ensureDir(base);\n }\n return base;\n}\n\nfunction coerceToString(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"function\" && value.length === 0) {\n try {\n return coerceToString((value as () => unknown)());\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n const normalized = coerceToString(item);\n if (normalized) return normalized;\n }\n return undefined;\n }\n return undefined;\n}\n\n// Metadata extraction paths - defined once for DRY principle\nconst METADATA_PATHS = {\n model: [\n \"model\", \"options.model\", \"params.model\", \"config.model\", \n \"configuration.model\", \"metadata.model\", \"lc_kwargs.model\",\n \"metadata.modelName\", \"modelName\", \"lc_alias\", \"model_id\", \"id\",\n \"_model\", \"_modelName\", \"__model\", \"_modelId\", \"_llmType\"\n ],\n provider: [\n \"provider\", \"options.provider\", \"params.provider\", \"config.provider\",\n \"configuration.provider\", \"metadata.provider\", \"lc_kwargs.provider\"\n ],\n};\n\n/** Safely extract nested object value using dot notation path */\nfunction getNestedValue(obj: any, path: string): any {\n if (!obj || typeof path !== \"string\") return undefined;\n return path.split(\".\").reduce((current, key) => current?.[key], obj);\n}\n\n/** Unified metadata extraction - eliminates code duplication between model/provider extraction */\nfunction extractMetadata(model: any, paths: string[]): string | undefined {\n if (!model) return undefined;\n \n // Direct extraction from model\n for (const path of paths) {\n const value = getNestedValue(model, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n \n // Try LangChain wrapper (_lc property)\n const maybeLc = model?._lc;\n if (maybeLc) {\n for (const path of paths) {\n const value = getNestedValue(maybeLc, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Try client/api/service properties\n const maybeClient = model?.client || model?.api || model?.service;\n if (maybeClient) {\n for (const path of paths) {\n const value = getNestedValue(maybeClient, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Constructor name as last resort (filter out generic types)\n const constructorName = model?.constructor?.name;\n if (constructorName && ![\"Object\", \"Function\"].includes(constructorName)) {\n return constructorName;\n }\n \n return undefined;\n}\n\nexport function getModelName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.model);\n}\n\nexport function getProviderName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.provider);\n}\n\nfunction inferModelFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific metadata paths for inference from history\n const messagePaths = [\n \"metadata.model\", \"metadata.modelName\", \"response_metadata.model\",\n \"response_metadata.modelName\", \"usage_metadata.model\", \"model\", \"modelName\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nfunction inferProviderFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific paths for provider inference\n const messagePaths = [\n \"metadata.provider\", \"response_metadata.provider\", \"usage_metadata.provider\", \"provider\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nconst DEFAULT_TRACE_CONFIG = {\n enabled: false,\n logData: true,\n} as const;\n\nfunction ensureDir(p: string) {\n if (!fs.existsSync(p)) {\n fs.mkdirSync(p, { recursive: true });\n }\n}\n\nfunction withDefaults(config?: SmartAgentTracingConfig): ResolvedTraceConfig {\n const enabled = Boolean(config?.enabled);\n const logData = config?.logData ?? DEFAULT_TRACE_CONFIG.logData;\n const mode: TracingMode = config?.mode === \"streaming\" ? \"streaming\" : \"batched\";\n\n let sink: ResolvedTraceSink;\n try {\n sink = resolveSink(config?.sink);\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Invalid tracing sink configuration. Falling back to file sink.\", err);\n }\n sink = resolveSink({ type: \"file\" });\n }\n\n return {\n enabled,\n logData,\n mode,\n sink,\n };\n}\n\nfunction resolveSink(sink?: TraceSinkConfig): ResolvedTraceSink {\n const candidate = sink ?? { type: \"file\" };\n switch (candidate.type) {\n case \"file\": {\n const baseDir = resolveLogsBaseDir(candidate.path, false);\n return { type: \"file\", baseDir };\n }\n case \"custom\": {\n const onEvent = typeof candidate.onEvent === \"function\" ? candidate.onEvent : undefined;\n const onSession = typeof candidate.onSession === \"function\" ? candidate.onSession : undefined;\n return { type: \"custom\", onEvent, onSession };\n }\n case \"cognipeer\": {\n const apiKey = typeof candidate.apiKey === \"string\" ? candidate.apiKey.trim() : \"\";\n if (!apiKey) {\n throw new Error(\"cognipeer sink requires a non-empty apiKey\");\n }\n const url = typeof candidate.url === \"string\" && candidate.url.trim().length > 0\n ? candidate.url.trim()\n : DEFAULT_COGNIPEER_URL;\n return { type: \"cognipeer\", url, apiKey };\n }\n case \"http\": {\n const url = typeof candidate.url === \"string\" ? candidate.url.trim() : \"\";\n if (!url) {\n throw new Error(\"http sink requires a non-empty url\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"http\", url, headers } : { type: \"http\", url };\n }\n case \"otlp\": {\n const endpoint = typeof candidate.endpoint === \"string\" ? candidate.endpoint.trim() : \"\";\n if (!endpoint) {\n throw new Error(\"otlp sink requires a non-empty endpoint\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"otlp\", endpoint, headers } : { type: \"otlp\", endpoint };\n }\n default: {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Unknown tracing sink type. Falling back to file sink.\", candidate);\n }\n return resolveSink({ type: \"file\" });\n }\n }\n}\n\nfunction snapshotSink(runtime: TraceSessionRuntime): TraceSinkSnapshot {\n const sink = runtime.resolvedConfig.sink;\n switch (sink.type) {\n case \"file\":\n return { type: \"file\", path: runtime.fileBaseDir || sink.baseDir };\n case \"custom\":\n return { type: \"custom\" };\n case \"cognipeer\":\n return { type: \"cognipeer\", url: sink.url };\n case \"http\":\n return { type: \"http\", url: sink.url };\n case \"otlp\":\n return { type: \"otlp\", endpoint: sink.endpoint };\n default:\n return { type: \"custom\" };\n }\n}\n\nfunction buildConfigSnapshot(runtime: TraceSessionRuntime): TraceSessionConfigSnapshot {\n return {\n enabled: runtime.resolvedConfig.enabled,\n logData: runtime.resolvedConfig.logData,\n sink: snapshotSink(runtime),\n };\n}\n\nasync function postTraceSession(\n url: string,\n headers: Record<string, string> | undefined,\n payload: TraceSessionFile\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n const errorMsg = `${statusLine}${bodyPreview}`;\n \n // DEBUG error logging\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Error posting to\", url, \":\", errorMsg);\n }\n \n throw new Error(errorMsg);\n }\n } catch (err) {\n // Rethrow with error info\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a streaming session start to the remote endpoint\n */\nasync function postStreamingSessionStart(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n startedAt: string;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config?: TraceSessionConfigSnapshot;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/start`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session start:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST a single event to the streaming endpoint\n */\nasync function postStreamingEvent(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n sessionId: string,\n event: TraceEventRecord\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${sessionId}/events`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify({ event }),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post streaming event:\", errMsg);\n }\n throw err;\n }\n}\n\n/**\n * POST session end to the streaming endpoint\n */\nasync function postStreamingSessionEnd(\n baseUrl: string,\n headers: Record<string, string> | undefined,\n payload: {\n sessionId: string;\n endedAt: string;\n durationMs: number;\n status: TraceSessionStatus;\n summary: TraceSessionSummary;\n errors: Array<{ eventId: string; message: string; stack?: string; type?: string; timestamp?: string }>;\n }\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const url = `${baseUrl.replace(/\\/$/, \"\")}/stream/${payload.sessionId}/end`;\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post session end:\", errMsg);\n }\n throw err;\n }\n}\n\n// ─── OTLP/HTTP JSON Export ──────────────────────────────────────────────────\n\n/** Nanosecond timestamp from ISO date string */\nfunction isoToUnixNano(iso: string): string {\n const ms = new Date(iso).getTime();\n // OTel uses fixed-point string nanoseconds (BigInt not needed for JSON)\n return `${ms}000000`;\n}\n\n/** Map agent/event status to OTel StatusCode: 0=UNSET, 1=OK, 2=ERROR */\nfunction toOtlpStatusCode(status: string): number {\n if (status === \"error\") return 2;\n if (status === \"success\" || status === \"completed\") return 1;\n return 0; // UNSET for in_progress, skipped, retry, etc.\n}\n\n/** Map event type to OTel SpanKind: 0 UNSPECIFIED, 1 INTERNAL, 2 SERVER, 3 CLIENT */\nfunction toOtlpSpanKind(type: string): number {\n switch (type) {\n case \"ai_call\":\n return 3; // CLIENT — outgoing LLM request\n case \"tool_call\":\n return 1; // INTERNAL\n case \"agent_iteration\":\n return 1; // INTERNAL\n default:\n return 1; // INTERNAL\n }\n}\n\ntype OtlpKeyValue = { key: string; value: { stringValue?: string; intValue?: string; doubleValue?: number; boolValue?: boolean } };\n\nfunction stringAttr(key: string, val: string | undefined): OtlpKeyValue | null {\n return val != null ? { key, value: { stringValue: val } } : null;\n}\n\nfunction intAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { intValue: String(val) } } : null;\n}\n\nfunction doubleAttr(key: string, val: number | undefined): OtlpKeyValue | null {\n return val != null && !Number.isNaN(val) ? { key, value: { doubleValue: val } } : null;\n}\n\n/** Convert a single TraceEventRecord into an OTLP Span object. */\nfunction eventToOtlpSpan(event: TraceEventRecord): Record<string, unknown> {\n const startNano = isoToUnixNano(event.timestamp);\n const endNano = event.durationMs != null\n ? `${new Date(new Date(event.timestamp).getTime() + event.durationMs).getTime()}000000`\n : startNano;\n\n const attrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.event.type\", event.type),\n stringAttr(\"cognipeer.event.label\", event.label),\n intAttr(\"cognipeer.event.sequence\", event.sequence),\n stringAttr(\"cognipeer.actor.scope\", event.actor?.scope),\n stringAttr(\"cognipeer.actor.name\", event.actor?.name),\n stringAttr(\"cognipeer.actor.role\", event.actor?.role),\n stringAttr(\"cognipeer.model\", event.model),\n stringAttr(\"cognipeer.provider\", event.provider),\n stringAttr(\"cognipeer.tool.details\", event.toolDetails ? JSON.stringify(event.toolDetails) : undefined),\n intAttr(\"cognipeer.tokens.input\", event.inputTokens),\n intAttr(\"cognipeer.tokens.output\", event.outputTokens),\n intAttr(\"cognipeer.tokens.total\", event.totalTokens),\n intAttr(\"cognipeer.tokens.cached_input\", event.cachedInputTokens),\n intAttr(\"cognipeer.bytes.request\", event.requestBytes),\n intAttr(\"cognipeer.bytes.response\", event.responseBytes),\n stringAttr(\"cognipeer.tool.execution_id\", event.toolExecutionId),\n stringAttr(\"cognipeer.retry_of\", event.retryOf),\n stringAttr(\"cognipeer.event.id\", event.id),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Add sections as a JSON string attribute if present\n if (event.data?.sections && event.data.sections.length > 0) {\n try {\n attrs.push({ key: \"cognipeer.sections\", value: { stringValue: JSON.stringify(event.data.sections) } });\n } catch { /* skip on serialization failures */ }\n }\n\n const span: Record<string, unknown> = {\n traceId: event.traceId,\n spanId: event.spanId,\n parentSpanId: event.parentSpanId || \"\",\n name: event.label || event.type,\n kind: toOtlpSpanKind(event.type),\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: attrs,\n status: {\n code: toOtlpStatusCode(event.status),\n ...(event.status === \"error\" && event.error?.message ? { message: event.error.message } : {}),\n },\n };\n\n // Error events\n if (event.error) {\n span.events = [{\n timeUnixNano: startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: event.error.message } },\n ...(event.error.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: event.error.stack } }] : []),\n ],\n }];\n }\n\n return span;\n}\n\n/**\n * Convert a complete TraceSessionFile into an OTLP ExportTraceServiceRequest (JSON).\n * Produces a root span for the session and child spans for each event.\n */\nexport function traceSessionToOtlp(session: TraceSessionFile): Record<string, unknown> {\n const traceId = session.traceId || generateTraceId();\n const rootSpanId = session.rootSpanId || generateSpanId();\n const startNano = isoToUnixNano(session.startedAt);\n const endNano = session.endedAt ? isoToUnixNano(session.endedAt) : startNano;\n\n // Resource attributes\n const resourceAttrs: OtlpKeyValue[] = [\n { key: \"service.name\", value: { stringValue: session.agent?.name || \"cognipeer-agent\" } },\n stringAttr(\"service.version\", session.agent?.version),\n stringAttr(\"cognipeer.session.id\", session.sessionId),\n stringAttr(\"cognipeer.thread.id\", session.threadId),\n stringAttr(\"cognipeer.agent.model\", session.agent?.model),\n stringAttr(\"cognipeer.agent.provider\", session.agent?.provider),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Root span — represents the entire agent session\n const rootAttrs: OtlpKeyValue[] = [\n stringAttr(\"cognipeer.session.status\", session.status),\n doubleAttr(\"cognipeer.session.duration_ms\", session.durationMs),\n intAttr(\"cognipeer.session.total_input_tokens\", session.summary.totalInputTokens),\n intAttr(\"cognipeer.session.total_output_tokens\", session.summary.totalOutputTokens),\n intAttr(\"cognipeer.session.total_cached_input_tokens\", session.summary.totalCachedInputTokens),\n intAttr(\"cognipeer.session.total_bytes_in\", session.summary.totalBytesIn),\n intAttr(\"cognipeer.session.total_bytes_out\", session.summary.totalBytesOut),\n intAttr(\"cognipeer.session.event_count\", session.events.length),\n ].filter(Boolean) as OtlpKeyValue[];\n\n // Include event count breakdown\n if (session.summary.eventCounts) {\n for (const [key, count] of Object.entries(session.summary.eventCounts)) {\n rootAttrs.push({ key: `cognipeer.session.event_count.${key}`, value: { intValue: String(count) } });\n }\n }\n\n const rootSpan: Record<string, unknown> = {\n traceId,\n spanId: rootSpanId,\n parentSpanId: \"\",\n name: `agent_session: ${session.agent?.name || \"agent\"}`,\n kind: 1, // INTERNAL\n startTimeUnixNano: startNano,\n endTimeUnixNano: endNano,\n attributes: rootAttrs,\n status: {\n code: toOtlpStatusCode(session.status),\n ...(session.status === \"error\" && session.errors.length > 0\n ? { message: session.errors.map((e) => e.message).join(\"; \") }\n : {}),\n },\n };\n\n // Error events on root span\n if (session.errors.length > 0) {\n rootSpan.events = session.errors.map((err) => ({\n timeUnixNano: err.timestamp ? isoToUnixNano(err.timestamp) : startNano,\n name: \"exception\",\n attributes: [\n { key: \"exception.message\", value: { stringValue: err.message } },\n ...(err.stack ? [{ key: \"exception.stacktrace\", value: { stringValue: err.stack } }] : []),\n ...(err.type ? [{ key: \"exception.type\", value: { stringValue: err.type } }] : []),\n ],\n }));\n }\n\n // Child spans for each event — inherit traceId from session\n const childSpans = session.events.map((event) => {\n const span = eventToOtlpSpan({\n ...event,\n traceId: event.traceId || traceId,\n spanId: event.spanId || generateSpanId(),\n parentSpanId: event.parentSpanId || rootSpanId,\n });\n return span;\n });\n\n return {\n resourceSpans: [{\n resource: { attributes: resourceAttrs },\n scopeSpans: [{\n scope: {\n name: \"cognipeer-agent-sdk\",\n version: \"1.0.0\",\n },\n spans: [rootSpan, ...childSpans],\n }],\n }],\n };\n}\n\n/**\n * POST an OTLP ExportTraceServiceRequest (JSON) to the given endpoint.\n */\nasync function postOtlpTraces(\n endpoint: string,\n headers: Record<string, string> | undefined,\n payload: Record<string, unknown>\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"OTLP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders: Record<string, string> = {\n \"content-type\": \"application/json\",\n ...(headers || {}),\n };\n\n try {\n const response = await fetchFn(endpoint, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch { /* ignore */ }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] OTLP export failed:\", errMsg);\n }\n throw err;\n }\n}\n\nfunction createEmptySummary(): TraceSessionSummary {\n return {\n totalDurationMs: 0,\n totalInputTokens: 0,\n totalOutputTokens: 0,\n totalCachedInputTokens: 0,\n totalBytesIn: 0,\n totalBytesOut: 0,\n eventCounts: {},\n };\n}\n\nfunction generateSessionId(): string {\n return `sess_${nanoid(18)}`;\n}\n\nfunction generateEventId(sequence: number): string {\n return `evt_${String(sequence).padStart(4, \"0\")}_${nanoid(4)}`;\n}\n\n/** Generate a W3C-compatible trace ID (32 hex chars / 128-bit). */\nexport function generateTraceId(): string {\n return crypto.randomBytes(16).toString(\"hex\");\n}\n\n/** Generate an OTel span ID (16 hex chars / 64-bit). */\nexport function generateSpanId(): string {\n return crypto.randomBytes(8).toString(\"hex\");\n}\n\nfunction defaultEventLabel(type: string): string {\n switch (type) {\n case \"ai_call\":\n return \"Assistant Response\";\n case \"tool_call\":\n return \"Tool Execution\";\n case \"session\":\n return \"Session Event\";\n default:\n return type.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n\nfunction ensureUniqueSections(eventId: string, sections?: TraceDataSection[]): TraceDataSection[] | undefined {\n if (!sections || sections.length === 0) return undefined;\n const labelCounts = new Map<string, number>();\n const normalized: TraceDataSection[] = [];\n let counter = 1;\n\n for (const section of sections) {\n const baseLabel = section.label?.trim().length ? section.label.trim() : defaultSectionLabel(section.kind);\n const nextCount = (labelCounts.get(baseLabel) || 0) + 1;\n labelCounts.set(baseLabel, nextCount);\n const finalLabel = nextCount > 1 ? `${baseLabel} (${nextCount})` : baseLabel;\n\n let id = section.id?.trim();\n if (!id) {\n id = `${section.kind}-${eventId}-${String(counter).padStart(2, \"0\")}`;\n }\n counter += 1;\n\n normalized.push({\n ...section,\n id,\n label: finalLabel,\n } as TraceDataSection);\n }\n\n return normalized;\n}\n\nfunction defaultSectionLabel(kind: TraceDataSection[\"kind\"]): string {\n switch (kind) {\n case \"message\":\n return \"Message\";\n case \"tool_call\":\n return \"Tool Call\";\n case \"tool_result\":\n return \"Tool Result\";\n case \"tool_response\":\n return \"Tool Response\";\n case \"summary\":\n return \"Summary\";\n case \"metadata\":\n return \"Details\";\n default:\n return \"Section\";\n }\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalized = role?.trim().length ? role.trim() : \"message\";\n const base = `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nfunction toDisplayString(value: any): string {\n const sanitized = sanitizeTracePayload(value);\n if (sanitized == null) return \"\";\n if (typeof sanitized === \"string\") return sanitized;\n if (Array.isArray(sanitized)) {\n return sanitized\n .map((item) => toDisplayString(item))\n .filter((part) => part && part.trim().length > 0)\n .join(\"\\n\");\n }\n if (typeof sanitized === \"object\") {\n if (typeof (sanitized as any).text === \"string\" && Object.keys(sanitized).length === 1) {\n return (sanitized as any).text;\n }\n if (typeof (sanitized as any).content === \"string\") {\n return (sanitized as any).content;\n }\n try {\n return JSON.stringify(sanitized, null, 2);\n } catch {\n return String(sanitized);\n }\n }\n return String(sanitized);\n}\n\nfunction parseToolArguments(args: any): any {\n if (args == null) return undefined;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction collectToolCallSectionsFromMessage(message: any): TraceToolCallSection[] {\n const sections: TraceToolCallSection[] = [];\n if (!message) return sections;\n\n const addCall = (call: any) => {\n if (!call) return;\n const toolName = call?.name || call?.tool || call?.function?.name || call?.function_call?.name || \"tool\";\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseToolArguments(rawArgs);\n const argumentsPayload = sanitizeTracePayload(parsedArgs ?? rawArgs ?? {});\n sections.push({\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: argumentsPayload,\n });\n };\n\n const directCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : undefined;\n if (directCalls) {\n directCalls.forEach((call: any) => addCall(call));\n }\n\n return sections;\n}\n\nfunction convertMessageListToSections(messageList?: any[]): TraceDataSection[] | undefined {\n if (!Array.isArray(messageList) || messageList.length === 0) return undefined;\n const sections: TraceDataSection[] = [];\n const roleCounts = new Map<string, number>();\n\n for (const message of messageList) {\n if (!message) continue;\n\n const toolSections = collectToolCallSectionsFromMessage(message);\n if (toolSections.length > 0) {\n sections.push(...toolSections);\n continue;\n }\n\n const role = typeof message?.role === \"string\" ? message.role : \"assistant\";\n const next = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, next);\n\n let content = toDisplayString(message?.content ?? \"\");\n if (!content || !content.trim().length) {\n if (toolSections.length > 0) {\n content = \"[tool call]\";\n } else if (typeof message?.content === \"undefined\" || message?.content === null) {\n continue;\n } else {\n content = toDisplayString(sanitizeTracePayload(message?.content));\n if (!content || !content.trim().length) continue;\n }\n }\n\n sections.push({\n kind: \"message\",\n label: buildMessageLabel(role, next),\n role,\n content,\n metadata: typeof message?.name === \"string\" ? { name: message.name } : undefined,\n });\n }\n\n return sections.length > 0 ? sections : undefined;\n}\n\nexport function createTraceSession(opts: SmartAgentOptions): TraceSessionRuntime | undefined {\n const cfg = withDefaults(opts.tracing);\n if (!cfg.enabled) return undefined;\n\n const sessionId = generateSessionId();\n const traceId = generateTraceId();\n const rootSpanId = generateSpanId();\n const runtime: TraceSessionRuntime = {\n sessionId,\n traceId,\n rootSpanId,\n threadId: opts.tracing?.threadId,\n startedAt: Date.now(),\n resolvedConfig: cfg,\n events: [],\n summary: createEmptySummary(),\n status: \"in_progress\",\n errors: [],\n sessionStarted: false,\n };\n\n if (cfg.sink.type === \"file\") {\n const baseDir = cfg.sink.baseDir;\n ensureDir(baseDir);\n const sessionDir = path.join(baseDir, sessionId);\n ensureDir(sessionDir);\n runtime.fileBaseDir = baseDir;\n runtime.fileSessionDir = sessionDir;\n }\n\n return runtime;\n}\n\n/**\n * Start a streaming trace session. Should be called before recording events in streaming mode.\n * This sends the session start to the remote endpoint immediately.\n */\nexport async function startStreamingSession(\n session: TraceSessionRuntime | undefined,\n agentRuntime?: AgentRuntimeConfig\n): Promise<void> {\n if (!session) return;\n if (session.resolvedConfig.mode !== \"streaming\") return;\n if (session.sessionStarted) return;\n\n const sink = session.resolvedConfig.sink;\n \n // Build agent info\n const agentInfo = agentRuntime ? {\n name: agentRuntime.name || \"unknown-agent\",\n version: agentRuntime.version,\n model: getModelName(agentRuntime.model) || \"unknown-model\",\n provider: getProviderName(agentRuntime.model),\n } : undefined;\n \n session.agentInfo = agentInfo;\n \n const configSnapshot = buildConfigSnapshot(session);\n const startedAtIso = new Date(session.startedAt).toISOString();\n \n const payload = {\n sessionId: session.sessionId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n agent: agentInfo,\n config: configSnapshot,\n };\n\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n await postStreamingSessionStart(sink.url, headers, payload);\n session.sessionStarted = true;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"session_start\",\n message,\n type: \"sink\",\n timestamp: startedAtIso,\n });\n // Don't throw - allow session to continue in degraded mode\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to start streaming session, falling back to batched:\", message);\n }\n }\n } else if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n // For custom sinks in streaming mode, we mark as started and let events flow through\n session.sessionStarted = true;\n } else if (sink.type === \"file\") {\n // File sink in streaming mode - just mark as started, events will be written on finalize\n session.sessionStarted = true;\n }\n}\n\nexport function recordTraceEvent(\n session: TraceSessionRuntime | undefined,\n event: {\n type: string;\n label?: string;\n timestamp?: string;\n actor?: TraceEventRecord[\"actor\"];\n status?: TraceEventRecord[\"status\"];\n /** Explicit parent span ID. Falls back to session.currentIterationSpanId when omitted. */\n parentSpanId?: string;\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolDetails?: TraceEventRecord[\"toolDetails\"];\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n messageList?: any[];\n /** Pre-built sections to use instead of auto-converting messageList */\n sections?: TraceDataSection[];\n debug?: Record<string, any>;\n }\n): TraceEventRecord | undefined {\n if (!session) return undefined;\n\n\n const sequence = session.events.length + 1;\n const id = generateEventId(sequence);\n const timestampIso = event.timestamp || new Date().toISOString();\n const status = event.status ?? \"success\";\n const baseLabel = event.label?.trim().length ? event.label.trim() : defaultEventLabel(event.type);\n const eventLabel = `${baseLabel} #${sequence}`;\n\n const durationMs = event.durationMs !== undefined ? Number(event.durationMs) : undefined;\n if (!Number.isNaN(durationMs ?? NaN) && durationMs !== undefined) {\n session.summary.totalDurationMs += durationMs;\n }\n\n const inputTokens = event.inputTokens !== undefined ? Number(event.inputTokens) : undefined;\n if (!Number.isNaN(inputTokens ?? NaN) && inputTokens !== undefined) {\n session.summary.totalInputTokens += inputTokens;\n }\n\n const outputTokens = event.outputTokens !== undefined ? Number(event.outputTokens) : undefined;\n if (!Number.isNaN(outputTokens ?? NaN) && outputTokens !== undefined) {\n session.summary.totalOutputTokens += outputTokens;\n }\n\n const cachedInputTokens = event.cachedInputTokens !== undefined ? Number(event.cachedInputTokens) : undefined;\n if (!Number.isNaN(cachedInputTokens ?? NaN) && cachedInputTokens !== undefined) {\n session.summary.totalCachedInputTokens += cachedInputTokens;\n }\n\n const totalTokens = event.totalTokens !== undefined ? Number(event.totalTokens) : undefined;\n const requestBytes = event.requestBytes !== undefined ? Number(event.requestBytes) : undefined;\n if (!Number.isNaN(requestBytes ?? NaN) && requestBytes !== undefined) {\n session.summary.totalBytesIn += requestBytes;\n }\n\n const responseBytes = event.responseBytes !== undefined ? Number(event.responseBytes) : undefined;\n if (!Number.isNaN(responseBytes ?? NaN) && responseBytes !== undefined) {\n session.summary.totalBytesOut += responseBytes;\n }\n\n session.summary.eventCounts[event.type] = (session.summary.eventCounts[event.type] || 0) + 1;\n\n let sections: TraceDataSection[] | undefined;\n if (session.resolvedConfig.logData) {\n // Use pre-built sections if provided, otherwise auto-convert from messageList\n if (event.sections && event.sections.length > 0) {\n sections = ensureUniqueSections(id, event.sections);\n } else {\n const converted = convertMessageListToSections(event.messageList);\n sections = ensureUniqueSections(id, converted);\n }\n }\n\n const resolvedModel = event.model ?? inferModelFromMessages(event.messageList);\n const resolvedProvider = event.provider ?? inferProviderFromMessages(event.messageList);\n\n // For ai_call events, always include token fields (even if undefined/0) for consistency\n const isAiCall = event.type === \"ai_call\";\n\n // Span hierarchy: traceId from session, unique spanId per event,\n // parentSpanId from explicit param or current iteration span\n const spanId = generateSpanId();\n const parentSpanId = event.parentSpanId || session.currentIterationSpanId || session.rootSpanId;\n \n const record: TraceEventRecord = {\n sessionId: session.sessionId,\n traceId: session.traceId,\n spanId,\n parentSpanId,\n id,\n type: event.type,\n label: eventLabel,\n sequence,\n timestamp: timestampIso,\n actor: event.actor,\n status,\n durationMs,\n ...(isAiCall ? {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n totalTokens: totalTokens ?? 0,\n cachedInputTokens: cachedInputTokens ?? 0,\n } : {\n ...(inputTokens !== undefined && { inputTokens }),\n ...(outputTokens !== undefined && { outputTokens }),\n ...(totalTokens !== undefined && { totalTokens }),\n ...(cachedInputTokens !== undefined && { cachedInputTokens }),\n }),\n requestBytes,\n responseBytes,\n model: resolvedModel,\n provider: resolvedProvider,\n toolDetails: session.resolvedConfig.logData ? sanitizeTracePayload(event.toolDetails) : undefined,\n toolExecutionId: event.toolExecutionId,\n retryOf: event.retryOf,\n error: event.error ?? (status === \"error\" ? { message: \"Unknown error\" } : undefined) ?? undefined,\n data: sections ? { sections } : undefined,\n debug: event.debug,\n };\n\n if (status === \"error\") {\n const errorInfo = event.error ?? { message: \"Unknown error\" };\n session.errors.push({\n eventId: id,\n message: errorInfo.message,\n stack: errorInfo.stack,\n type: event.type,\n timestamp: timestampIso,\n });\n }\n\n session.events.push(record);\n const sink = session.resolvedConfig.sink;\n if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(record));\n const result = sink.onEvent(cloned);\n if (result && typeof (result as PromiseLike<void>).then === \"function\") {\n (result as PromiseLike<void>).then(undefined, (error: unknown) => {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent rejected\", error);\n }\n });\n }\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent failed\", err);\n }\n }\n }\n\n // In streaming mode, send event immediately to HTTP sinks\n if (session.resolvedConfig.mode === \"streaming\" && session.sessionStarted) {\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n // Fire and forget - don't block on event sending\n postStreamingEvent(sink.url, headers, session.sessionId, record).catch((err) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"[Tracing] Failed to send streaming event:\", errMsg);\n }\n session.errors.push({\n eventId: record.id,\n message: errMsg,\n type: \"sink\",\n timestamp: timestampIso,\n });\n });\n }\n }\n\n return record;\n}\n\nexport async function finalizeTraceSession(session: TraceSessionRuntime | undefined, params: {\n agentRuntime?: AgentRuntimeConfig;\n status?: TraceSessionStatus;\n error?: { message?: string; stack?: string } | null;\n} = {}): Promise<TraceSessionFile | undefined> {\n if (!session) return undefined;\n\n const endedAtMs = Date.now();\n const endedAtIso = new Date(endedAtMs).toISOString();\n const durationMs = endedAtMs - session.startedAt;\n const startedAtIso = new Date(session.startedAt).toISOString();\n\n // Build agent info with safe defaults - single source of truth\n const buildAgentInfo = (runtime: AgentRuntimeConfig | undefined) => {\n if (!runtime) return undefined;\n return {\n name: runtime.name || \"unknown-agent\",\n version: runtime.version,\n model: getModelName(runtime.model) || \"unknown-model\",\n provider: getProviderName(runtime.model),\n };\n };\n\n const agentInfo = buildAgentInfo(params.agentRuntime);\n\n if (params.error) {\n session.errors.push({\n eventId: \"session\",\n message: params.error.message || \"Unknown error\",\n stack: params.error.stack,\n type: \"session\",\n timestamp: endedAtIso,\n });\n }\n\n const configSnapshot = buildConfigSnapshot(session);\n const initialStatus: TraceSessionStatus = params.status\n ? params.status\n : session.errors.length > 0\n ? \"error\"\n : \"success\";\n\n const buildPayload = (status: TraceSessionStatus): TraceSessionFile => ({\n sessionId: session.sessionId,\n traceId: session.traceId,\n rootSpanId: session.rootSpanId,\n threadId: session.threadId,\n startedAt: startedAtIso,\n endedAt: endedAtIso,\n durationMs,\n agent: agentInfo || session.agentInfo,\n config: configSnapshot,\n summary: session.summary,\n events: session.events,\n status,\n errors: session.errors,\n });\n\n const payloadForSink = buildPayload(initialStatus);\n let sinkFailed = false;\n const sink = session.resolvedConfig.sink;\n const isStreamingMode = session.resolvedConfig.mode === \"streaming\";\n\n if (sink.type === \"otlp\") {\n // OTLP/HTTP JSON export — convert session to ExportTraceServiceRequest and POST\n try {\n const otlpPayload = traceSessionToOtlp(payloadForSink);\n await postOtlpTraces(sink.endpoint, sink.headers, otlpPayload);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n } else if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n if (isStreamingMode && session.sessionStarted) {\n // In streaming mode, send session end instead of full session\n await postStreamingSessionEnd(sink.url, headers, {\n sessionId: session.sessionId,\n endedAt: endedAtIso,\n durationMs,\n status: initialStatus,\n summary: session.summary,\n errors: session.errors,\n });\n } else {\n // In batched mode (or if streaming never started), send full session\n await postTraceSession(sink.url, headers, payloadForSink);\n }\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n \n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n }\n\n const hadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hadSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let status: TraceSessionStatus = params.status ?? (hadNonSinkErrors ? \"error\" : \"success\");\n if (status === \"success\" && (sinkFailed || hadSinkErrors)) {\n status = \"partial\";\n }\n\n let finalPayload = buildPayload(status);\n\n if (sink.type === \"file\" && session.fileSessionDir) {\n try {\n const filePath = path.join(session.fileSessionDir, \"trace.session.json\");\n await fs.promises.writeFile(filePath, JSON.stringify(finalPayload, null, 2), \"utf8\");\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (sink.type === \"custom\" && typeof sink.onSession === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(finalPayload));\n await sink.onSession(cloned);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (!params.status) {\n const finalHadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hasSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let computedStatus: TraceSessionStatus = finalHadNonSinkErrors ? \"error\" : \"success\";\n if (computedStatus === \"success\" && hasSinkErrors) {\n computedStatus = \"partial\";\n }\n if (computedStatus !== status) {\n status = computedStatus;\n finalPayload = buildPayload(status);\n }\n }\n\n return finalPayload;\n}\n\nexport type { ResolvedTraceConfig };\n\nexport function sanitizeTracePayload(value: any): any {\n try {\n const cache = new WeakSet();\n const json = JSON.stringify(\n value,\n (_key, val) => {\n if (typeof val === \"function\") return `[Function ${val.name || \"anonymous\"}]`;\n if (typeof val === \"bigint\") return val.toString();\n if (val instanceof Error) return { message: val.message, stack: val.stack };\n if (val && typeof val === \"object\") {\n if (cache.has(val)) return \"[Circular]\";\n cache.add(val);\n }\n return val;\n },\n 2\n );\n return JSON.parse(json);\n } catch {\n try {\n return typeof value === \"string\" ? value : String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n\nexport function estimatePayloadBytes(value: any): number {\n try {\n const json = JSON.stringify(value);\n return Buffer.byteLength(json ?? \"\", \"utf8\");\n } catch {\n try {\n return Buffer.byteLength(String(value ?? \"\"), \"utf8\");\n } catch {\n return 0;\n }\n }\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\n// Minimal agent node: no system prompt injection. Invokes model with messages as-is.\nexport function createAgentCoreNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const runtime: any = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n guardrails: (opts as any).guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: (opts as any).outputSchema,\n tracing: opts.tracing,\n responseFormat: undefined,\n };\n\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const shouldUseStrictToolCalling = Boolean(\n runtime.responseFormat\n && (runtime.model as any)?.capabilities?.strictToolCalling\n );\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(\n tools,\n shouldUseStrictToolCalling ? { strict: true } : undefined,\n )\n : runtime.model;\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(state.messages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n // Bedrock (Claude) requires strict tool_use -> tool_result adjacency.\n // We both normalize (insert placeholder tool_result if missing) and log a compact dump.\n const extractToolUses = (m: any): Array<{ id: string; name?: string }> => {\n const tcs = m?.tool_calls || m?.additional_kwargs?.tool_calls;\n if (!Array.isArray(tcs)) return [];\n return tcs\n .map((tc: any) => ({ id: tc?.id, name: tc?.function?.name || tc?.name }))\n .filter((x: any) => typeof x.id === \"string\" && x.id.length > 0);\n };\n\n const normalizeBedrockToolPairing = (input: any[]): any[] => {\n const msgs = Array.isArray(input) ? [...input] : [];\n \n // Phase 1: Build a set of all valid tool_call IDs from assistant messages\n const validToolCallIds = new Set<string>();\n for (const m of msgs) {\n if (m?.role === 'assistant') {\n for (const tu of extractToolUses(m)) {\n if (tu.id) validToolCallIds.add(tu.id);\n }\n }\n }\n \n // Phase 2: Filter out orphan tool messages (those without a matching assistant tool_call)\n const filteredMsgs = msgs.filter((m) => {\n if (m?.role === 'tool') {\n const toolCallId = m.tool_call_id;\n if (!toolCallId || !validToolCallIds.has(toolCallId)) {\n // Orphan tool message - remove it\n return false;\n }\n }\n return true;\n });\n \n // Phase 3: Ensure tool messages immediately follow their corresponding assistant message\n // OpenAI requires: assistant(tool_calls) -> tool(tool_call_id) -> tool(tool_call_id) -> ...\n for (let i = 0; i < filteredMsgs.length; i++) {\n const m = filteredMsgs[i];\n if (m?.role !== \"assistant\") continue;\n\n const toolUses = extractToolUses(m);\n if (toolUses.length === 0) continue;\n\n // Bedrock expects exactly one \"next message\" containing the corresponding tool_result blocks.\n // In our message format we represent tool_result as role:'tool' messages with tool_call_id.\n // If the next message isn't a tool result for the first tool_use id, insert placeholders.\n const next = filteredMsgs[i + 1];\n\n // If next is a tool message for the first id, we assume pairing is okay and let downstream validate.\n const firstId = toolUses[0]?.id;\n const nextIsToolForFirst = !!(next && next.role === \"tool\" && next.tool_call_id === firstId);\n if (nextIsToolForFirst) continue;\n\n // Insert placeholder tool results for all tool uses on this assistant turn.\n const placeholders = toolUses.map((tu) => ({\n role: \"tool\",\n name: tu.name || \"unknown_tool\",\n tool_call_id: tu.id,\n content: \"SUMMARIZED/DEFERRED: tool result missing in transcript; inserted placeholder for tool_result adjacency.\",\n }));\n filteredMsgs.splice(i + 1, 0, ...placeholders);\n\n // Skip over inserted placeholders\n i += placeholders.length;\n }\n return filteredMsgs;\n };\n\n const debugToolPairing = (messagesToSend: any[]) => {\n try {\n const msgs: any[] = Array.isArray(messagesToSend) ? messagesToSend : [];\n const toolUseIds: string[] = [];\n const missingResults: Array<{ id: string; atIndex: number; tool?: string }> = [];\n\n for (let i = 0; i < msgs.length; i++) {\n const m = msgs[i];\n if (m?.role === \"assistant\") {\n for (const tu of extractToolUses(m)) {\n toolUseIds.push(tu.id);\n const next = msgs[i + 1];\n if (!(next && next.role === \"tool\" && (next.tool_call_id === tu.id || next.tool_call_id === m?.tool_call_id))) {\n missingResults.push({ id: tu.id, atIndex: i, tool: tu.name });\n }\n }\n }\n }\n\n } catch {\n // Debug tool pairing failed silently\n }\n };\n\n const onEvent = (state.ctx as any)?.__onEvent as ((e: any) => void) | undefined;\n const onStream = (state.ctx as any)?.__onStream as ((chunk: { text: string; isFinal?: boolean }) => void) | undefined;\n const streamingEnabled = Boolean((state.ctx as any)?.__streaming);\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n\n // Native structured output: pass response_format to model invocation if set\n const responseFormat = (runtime as any).responseFormat as Record<string, any> | undefined;\n\n // Unified reasoning pass-through: when the loop resolved a ReasoningConfig we\n // place the native shape on ctx.__reasoning. We forward it into invoke options\n // so native providers (OpenAI/Anthropic/Vertex) can map it to their own body.\n const reasoningForCall = (state.ctx as any)?.__reasoning;\n const reasoningInvokeOpts = reasoningForCall ? { reasoning: reasoningForCall } : undefined;\n\n const extractText = (chunk: any) => {\n if (chunk == null) return \"\";\n if (typeof chunk === \"string\") return chunk;\n if (typeof chunk?.content === \"string\") return chunk.content;\n if (Array.isArray(chunk?.content)) {\n return chunk.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n }\n if (typeof chunk?.text === \"string\") return chunk.text;\n if (typeof chunk?.delta?.content === \"string\") return chunk.delta.content;\n return \"\";\n };\n\n let response: any;\n try {\n const normalizedMessages = normalizeBedrockToolPairing([...(state.messages as any[])]);\n debugToolPairing(normalizedMessages);\n if (streamingEnabled && typeof (modelWithTools as any).stream === \"function\") {\n let streamedText = \"\";\n let streamedMessage: any | undefined;\n const streamOptions = { signal: abortSignal, cancellationToken, ...responseFormat, ...reasoningInvokeOpts };\n for await (const chunk of (modelWithTools as any).stream(normalizedMessages, streamOptions)) {\n if ((cancellationToken && cancellationToken.isCancellationRequested) || abortSignal?.aborted) {\n break;\n }\n if (chunk && typeof chunk === \"object\" && (chunk as any).role) {\n streamedMessage = chunk;\n }\n const text = extractText(chunk);\n if (text) {\n streamedText += text;\n onStream?.({ text });\n onEvent?.({ type: \"stream\", text });\n }\n }\n if (streamedMessage) {\n response = { ...streamedMessage };\n if (response.content == null || response.content === \"\") {\n response.content = streamedText;\n }\n } else {\n response = { role: \"assistant\", content: streamedText } as any;\n }\n } else {\n response = await modelWithTools.invoke(normalizedMessages, { signal: abortSignal, cancellationToken, ...responseFormat, ...reasoningInvokeOpts });\n }\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: state.messages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...state.messages,\n response as any,\n ];\n\n // Usage tracking (per-request, aggregated by model)\n const rawUsage = (response as any)?.usage\n || (response as any)?.usage_metadata\n || (response as any)?.response_metadata?.token_usage\n || (response as any)?.response_metadata?.tokenUsage // LangChain camelCase\n || (response as any)?.response_metadata?.usage\n || (response as any)?.response_metadata?.usage_metadata\n || (response as any)?.response_metadata?.usageMetadata;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const durationMs = Date.now() - start;\n\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes: responseBytes,\n model: modelName,\n provider: getProviderName((runtime as any).model || (opts as any).model),\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details?.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type { ContentPart } from \"../types.js\";\n\n// Convert content (string | parts[]) to a human-readable string for logging, token counting, or summarization.\nexport function contentToString(content: string | ContentPart[] | any): string {\n try {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((p) => {\n if (!p || typeof p !== \"object\") return String(p);\n if ((p as any).type === \"text\") return String((p as any).text ?? \"\");\n if ((p as any).type === \"image_url\") {\n const img = (p as any).image_url;\n const url = typeof img === \"string\" ? img : img?.url;\n const detail = typeof img === \"string\" ? undefined : img?.detail;\n return `[image:${url || \"unknown\"}${detail ? ` detail=${detail}` : \"\"}]`;\n }\n // generic fallback\n return JSON.stringify(p);\n })\n .join(\"\\n\");\n }\n // unknown object\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n}\n\n// Merge an array of messages' contents into a single string (used in token counting decisions)\nexport function mergeContentsToString(contents: Array<string | ContentPart[] | any>): string {\n return contents.map((c) => contentToString(c)).join(\"\\n\");\n}\n\n// Safely convert any value to string via JSON.stringify, with fallback.\nexport function safeStringify(value: unknown, pretty = false): string {\n if (value == null) return \"\";\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, pretty ? 2 : undefined) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\n// Extract text from a message object (handles string content, ContentPart arrays, etc.)\nexport function extractMessageText(message: any): string {\n if (!message) return \"\";\n const content = message.content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((part: any) => (typeof part === \"string\" ? part : part?.text ?? part?.content ?? \"\"))\n .join(\"\");\n }\n return \"\";\n}\n","import { sanitizeTracePayload } from \"./tracing.js\";\nimport { safeStringify } from \"./content.js\";\nimport type {\n TraceDataSection,\n TraceMessageSection,\n TraceSummarySection,\n TraceMetadataSection,\n TraceToolCallSection,\n TraceToolResultItem,\n TraceToolResponseSection,\n} from \"../types.js\";\n\nfunction truncate(text: string, max = 500): string {\n if (!text) return \"\";\n return text.length > max ? `${text.slice(0, max)}…` : text;\n}\n\nfunction parseJsonLike(value: any): any {\n if (Array.isArray(value)) {\n if (value.length === 1) {\n return parseJsonLike(value[0]);\n }\n return value.map((item) => parseJsonLike(item));\n }\n if (value && typeof value === \"object\") {\n if (typeof (value as any).text === \"string\" && Object.keys(value).length === 1) {\n try {\n return JSON.parse((value as any).text);\n } catch {\n return (value as any).text;\n }\n }\n return value;\n }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n try {\n return JSON.parse(trimmed);\n } catch {\n return value;\n }\n }\n return value;\n}\n\nexport function summarizeToolOutput(output: any): string {\n if (output == null) return \"\";\n if (typeof output === \"string\") return truncate(output.trim());\n if (Array.isArray(output)) {\n const preview = output\n .slice(0, 3)\n .map((item, index) => `${index + 1}. ${truncate(safeStringify(item))}`)\n .join(\"\\n\");\n const suffix = output.length > 3 ? `\\n… (+${output.length - 3} more)` : \"\";\n return `${preview}${suffix}`.trim();\n }\n if (typeof output === \"object\") {\n if (Array.isArray((output as any).items)) {\n return summarizeToolOutput((output as any).items);\n }\n return truncate(safeStringify(output));\n }\n return truncate(String(output));\n}\n\nexport function extractToolItems(output: any): TraceToolResultItem[] | undefined {\n const source = Array.isArray(output) ? output : Array.isArray(output?.items) ? output.items : undefined;\n if (!Array.isArray(source) || source.length === 0) return undefined;\n return source.slice(0, 5).map((item) => {\n if (item && typeof item === \"object\") {\n const snippetSource = (item as any).content ?? (item as any).snippet ?? (item as any).description ?? (item as any).text ?? (item as any).summary ?? item;\n return {\n title: typeof (item as any).title === \"string\" ? (item as any).title : undefined,\n url: typeof (item as any).url === \"string\" ? (item as any).url : undefined,\n snippet: truncate(safeStringify(snippetSource)),\n } as TraceToolResultItem;\n }\n return { snippet: truncate(safeStringify(item)) } as TraceToolResultItem;\n });\n}\n\nfunction capitalize(word: string): string {\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n\nexport function formatMessageContent(content: any): string {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((item) => {\n if (typeof item === \"string\") return item;\n if (item && typeof item === \"object\") {\n if (typeof (item as any).text === \"string\") return (item as any).text;\n if (typeof (item as any).content === \"string\") return (item as any).content;\n try {\n return JSON.stringify(item);\n } catch {\n return String(item);\n }\n }\n try {\n return JSON.stringify(item);\n } catch {\n return String(item);\n }\n })\n .filter(Boolean)\n .join(\"\\n\");\n }\n if (typeof content === \"object\") {\n if (typeof (content as any).text === \"string\") return (content as any).text;\n if (typeof (content as any).content === \"string\") return (content as any).content;\n try {\n return JSON.stringify(content, null, 2);\n } catch {\n return String(content);\n }\n }\n return String(content);\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalizedRole = role || \"message\";\n const base = `${capitalize(normalizedRole)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nexport function buildPromptSections(messages: any[]): TraceDataSection[] {\n if (!Array.isArray(messages)) return [];\n const roleCounts = new Map<string, number>();\n const sections: TraceDataSection[] = [];\n\n for (const msg of messages) {\n const role = typeof msg?.role === \"string\" ? msg.role : \"system\";\n const nextCount = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, nextCount);\n const label = buildMessageLabel(role, nextCount);\n const content = formatMessageContent(msg?.content);\n\n sections.push({\n kind: \"message\",\n label,\n role,\n content,\n metadata: msg?.name ? { name: msg.name } : undefined,\n } as TraceMessageSection);\n }\n\n return sections;\n}\n\nfunction parseArguments(args: any): any {\n if (args == null) return args;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction toToolCallSection(call: any, index: number): TraceToolCallSection {\n const toolName = call?.name || call?.tool || call?.function?.name || `tool_${index + 1}`;\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseArguments(rawArgs);\n return {\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: sanitizeTracePayload(parsedArgs ?? rawArgs ?? {}),\n } as TraceToolCallSection;\n}\n\nexport function extractToolCalls(response: any): TraceToolCallSection[] {\n const calls: TraceToolCallSection[] = [];\n const candidateSets = [\n Array.isArray(response?.tool_calls) ? response.tool_calls : null,\n Array.isArray(response?.additional_kwargs?.tool_calls) ? response.additional_kwargs.tool_calls : null,\n ];\n\n for (const set of candidateSets) {\n if (Array.isArray(set)) {\n set.forEach((call, idx) => calls.push(toToolCallSection(call, idx)));\n }\n }\n\n const functionCall = response?.function_call || response?.additional_kwargs?.function_call;\n if (functionCall) {\n calls.push(toToolCallSection(functionCall, calls.length));\n }\n\n return calls;\n}\n\nexport function buildAssistantMessageSection(\n response: any,\n options?: { label?: string }\n): TraceMessageSection | null {\n const content = formatMessageContent(response?.content ?? response);\n if (!content) return null;\n return {\n kind: \"message\",\n label: options?.label ?? \"Assistant Message\",\n role: \"assistant\",\n content,\n metadata: response?.name ? { name: response.name } : undefined,\n } as TraceMessageSection;\n}\n\nexport function buildLastUserMessageSections(messages: any[]): TraceDataSection[] {\n if (!Array.isArray(messages)) return [];\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const msg = messages[i];\n if (msg?.role === \"user\") {\n return buildPromptSections([msg]);\n }\n }\n return [];\n}\n\nfunction findLastIndex<T>(arr: T[], predicate: (value: T, index: number, array: T[]) => boolean): number {\n for (let i = arr.length - 1; i >= 0; i -= 1) {\n if (predicate(arr[i], i, arr)) {\n return i;\n }\n }\n return -1;\n}\n\nfunction isAssistantToolCallMessage(message: any): boolean {\n if (!message) return false;\n return extractToolCalls(message).length > 0;\n}\n\nfunction buildToolResponseSectionFromMessage(message: any): TraceToolResponseSection | null {\n if (!message) return null;\n const toolName = message?.name || message?.metadata?.name || message?.tool || message?.tool_call_id || \"tool\";\n const parsed = parseJsonLike(message?.content ?? message);\n const sanitizedOutput = sanitizeTracePayload(parsed ?? (message?.content ?? message));\n const summarySource = sanitizedOutput ?? parsed ?? message?.content ?? message;\n const summary = summarizeToolOutput(summarySource);\n const items = extractToolItems(summarySource);\n const fallback = summary || formatMessageContent(message?.content ?? message);\n if (!fallback) return null;\n return {\n kind: \"tool_response\",\n label: `Tool Response: ${toolName}`,\n tool: toolName,\n summary: fallback,\n items,\n output: sanitizedOutput,\n } as TraceToolResponseSection;\n}\n\nfunction collectToolResponseSections(messages: any[], startIndex: number): TraceToolResponseSection[] {\n if (!Array.isArray(messages)) return [];\n const sections: TraceToolResponseSection[] = [];\n for (let i = startIndex + 1; i < messages.length; i += 1) {\n const msg = messages[i];\n if (!msg) continue;\n const role = msg.role;\n const hasToolName = typeof msg?.name === \"string\" && msg.name.length > 0;\n const hasToolId = typeof msg?.tool_call_id === \"string\" && msg.tool_call_id.length > 0;\n if (role === \"tool\" || hasToolName || hasToolId) {\n const section = buildToolResponseSectionFromMessage(msg);\n if (section) sections.push(section);\n }\n }\n return sections;\n}\n\nexport function buildToolCallTurnSections(messages: any[], response: any): TraceDataSection[] {\n const toolCalls = extractToolCalls(response);\n if (toolCalls.length === 0) return [];\n const sections: TraceDataSection[] = [];\n sections.push(...buildLastUserMessageSections(messages));\n sections.push(...toolCalls);\n return sections;\n}\n\nexport function buildFinalAgentSections(messages: any[], response: any): TraceDataSection[] {\n if (!Array.isArray(messages)) return [];\n const assistantToolIndex = findLastIndex(messages, (msg) => isAssistantToolCallMessage(msg));\n if (assistantToolIndex === -1) return [];\n const sections: TraceDataSection[] = [];\n sections.push(...buildLastUserMessageSections(messages));\n const assistantToolMessage = messages[assistantToolIndex];\n sections.push(...extractToolCalls(assistantToolMessage));\n sections.push(...collectToolResponseSections(messages, assistantToolIndex));\n const assistantMessage = buildAssistantMessageSection(response, { label: \"AI Message\" });\n if (assistantMessage) sections.push(assistantMessage);\n return sections;\n}\n\nexport function buildAssistantResponseSections(response: any): TraceDataSection[] {\n if (!response) return [];\n const sections: TraceDataSection[] = [];\n const assistantMessage = buildAssistantMessageSection(response);\n if (assistantMessage) {\n sections.push(assistantMessage);\n }\n sections.push(...extractToolCalls(response));\n\n return sections;\n}\n\n/**\n * Builds dedicated trace sections for a summarization event.\n *\n * This produces a structured representation with:\n * 1. A \"summary\" section containing the generated summary text.\n * 2. A \"metadata\" section with detailed summarization statistics\n * (tokens before/after, messages compressed, previous summary, etc.).\n * 3. Optionally, the summarization prompt messages for debugging.\n */\nexport function buildSummarizationSections(opts: {\n summaryText: string;\n previousSummary?: string;\n messagesCompressed: number;\n tokenCountBefore: number;\n tokenCountAfter: number;\n inputTokens?: number;\n outputTokens?: number;\n cachedInputTokens?: number;\n durationMs?: number;\n promptMessages?: any[];\n}): TraceDataSection[] {\n const sections: TraceDataSection[] = [];\n\n // 1. The generated summary as a dedicated \"summary\" section\n sections.push({\n kind: \"summary\",\n label: \"Context Summary\",\n content: opts.summaryText,\n } as TraceSummarySection);\n\n // 2. Summarization statistics as a \"metadata\" section\n const tokensSaved = opts.tokenCountBefore - opts.tokenCountAfter;\n const reductionPct = opts.tokenCountBefore > 0\n ? Math.round((tokensSaved / opts.tokenCountBefore) * 100)\n : 0;\n\n const metaData: Record<string, any> = {\n messagesCompressed: opts.messagesCompressed,\n tokenCountBefore: opts.tokenCountBefore,\n tokenCountAfter: opts.tokenCountAfter,\n tokensSaved,\n reductionPercent: reductionPct,\n };\n\n if (opts.inputTokens !== undefined) metaData.inputTokens = opts.inputTokens;\n if (opts.outputTokens !== undefined) metaData.outputTokens = opts.outputTokens;\n if (opts.cachedInputTokens !== undefined) metaData.cachedInputTokens = opts.cachedInputTokens;\n if (opts.durationMs !== undefined) metaData.durationMs = opts.durationMs;\n if (opts.previousSummary) metaData.previousSummaryLength = opts.previousSummary.length;\n\n sections.push({\n kind: \"metadata\",\n label: \"Summarization Stats\",\n data: metaData,\n } as TraceMetadataSection);\n\n // 3. Optionally include the prompt that was sent to the model\n if (Array.isArray(opts.promptMessages) && opts.promptMessages.length > 0) {\n for (const msg of opts.promptMessages) {\n const role = typeof msg?.role === \"string\" ? msg.role : \"system\";\n const content = formatMessageContent(msg?.content ?? \"\");\n if (content) {\n sections.push({\n kind: \"message\",\n label: `Summarization Prompt (${role})`,\n role,\n content,\n } as TraceMessageSection);\n }\n }\n }\n\n return sections;\n}\n","import type {\n AgentLimits,\n BuiltInRuntimeProfile,\n MemoryStore,\n ProfileConfig,\n ResolvedSmartAgentConfig,\n RuntimeProfile,\n SmartAgentOptions,\n} from \"../types.js\";\n\nconst DEFAULT_CRITICAL_TOOLS = [\"response\", \"manage_todo_list\", \"get_tool_response\"];\n\n// Shared defaults across all profiles — only overridden values need to be specified per profile.\n// These mirror the \"balanced\" profile and are scaled for modern frontier models\n// (Claude 4.x, GPT-4o, Gemini 2.x) where 100k+ context windows are standard.\nconst BASE_DEFAULTS: ProfileConfig = {\n limits: { maxToolCalls: 20, maxParallelTools: 5, maxContextTokens: 96000, maxTotalOutputTokens: 0, maxCostUsd: 0, maxWallClockMs: 0 },\n summarization: {\n enable: true,\n maxTokens: 96000,\n summaryTriggerTokens: 72000,\n summaryPromptMaxTokens: 12000,\n summaryCompressionRatioTarget: 0.45,\n summaryMode: \"incremental\",\n promptTemplate: \"\",\n toolFreeCall: true,\n integrityCheck: true,\n },\n context: {\n policy: \"hybrid\",\n lastTurnsToKeep: 16,\n toolResponsePolicy: \"summarize_archive\",\n budget: {\n systemReserveTokens: 2000,\n goalsReserveTokens: 2000,\n recentTurnsReserveTokens: 18000,\n toolResponseReserveTokens: 9000,\n },\n },\n planning: {\n mode: \"off\",\n replanPolicy: \"on_failure\",\n everyNSteps: 0,\n },\n memory: {\n provider: \"inMemory\",\n scope: \"session\",\n writePolicy: \"auto_important\",\n readPolicy: \"hybrid\",\n },\n delegation: {\n mode: \"role_based\",\n maxDelegationDepth: 2,\n maxChildCalls: 6,\n maxParallelChild: 3,\n childContextPolicy: \"scoped\",\n requireJsonOutputContract: true,\n },\n toolResponses: {\n maxToolResponseChars: 32_000,\n maxToolResponseTokens: 8_000,\n defaultPolicy: \"summarize_archive\",\n toolResponseRetentionByTool: {},\n criticalTools: [...DEFAULT_CRITICAL_TOOLS],\n schemaValidation: \"strict\",\n },\n};\n\nfunction buildProfile(overrides: Partial<{\n limits: Partial<ProfileConfig[\"limits\"]>;\n summarization: Partial<ProfileConfig[\"summarization\"]>;\n context: Partial<ProfileConfig[\"context\"]> & { budget?: Partial<ProfileConfig[\"context\"][\"budget\"]> };\n planning: Partial<ProfileConfig[\"planning\"]>;\n memory: Partial<ProfileConfig[\"memory\"]>;\n delegation: Partial<ProfileConfig[\"delegation\"]>;\n toolResponses: Partial<ProfileConfig[\"toolResponses\"]>;\n}>): ProfileConfig {\n return {\n limits: { ...BASE_DEFAULTS.limits, ...overrides.limits },\n summarization: { ...BASE_DEFAULTS.summarization, ...overrides.summarization },\n context: {\n ...BASE_DEFAULTS.context,\n ...overrides.context,\n budget: { ...BASE_DEFAULTS.context.budget, ...overrides.context?.budget },\n },\n planning: { ...BASE_DEFAULTS.planning, ...overrides.planning },\n memory: { ...BASE_DEFAULTS.memory, ...overrides.memory },\n delegation: { ...BASE_DEFAULTS.delegation, ...overrides.delegation },\n toolResponses: {\n ...BASE_DEFAULTS.toolResponses,\n ...overrides.toolResponses,\n criticalTools: overrides.toolResponses?.criticalTools ?? [...DEFAULT_CRITICAL_TOOLS],\n toolResponseRetentionByTool: overrides.toolResponses?.toolResponseRetentionByTool ?? {},\n },\n };\n}\n\nexport const DEFAULT_PROFILE_CONFIGS: Record<BuiltInRuntimeProfile, ProfileConfig> = {\n fast: buildProfile({\n limits: { maxToolCalls: 8, maxParallelTools: 3, maxContextTokens: 32000 },\n summarization: {\n maxTokens: 32000,\n summaryTriggerTokens: 24000,\n summaryPromptMaxTokens: 6000,\n summaryCompressionRatioTarget: 0.5,\n },\n context: {\n lastTurnsToKeep: 8,\n toolResponsePolicy: \"keep_structured\",\n budget: { systemReserveTokens: 1500, goalsReserveTokens: 1200, recentTurnsReserveTokens: 6000, toolResponseReserveTokens: 3500 },\n },\n memory: { readPolicy: \"recent_only\" },\n delegation: { mode: \"off\", maxDelegationDepth: 1, maxChildCalls: 2, maxParallelChild: 1, childContextPolicy: \"minimal\" },\n toolResponses: { maxToolResponseChars: 16_000, maxToolResponseTokens: 4_000 },\n }),\n\n balanced: buildProfile({}),\n\n deep: buildProfile({\n limits: { maxToolCalls: 40, maxParallelTools: 8, maxContextTokens: 200000 },\n summarization: {\n maxTokens: 200000,\n summaryTriggerTokens: 150000,\n summaryPromptMaxTokens: 16000,\n summaryCompressionRatioTarget: 0.4,\n },\n context: {\n lastTurnsToKeep: 30,\n budget: { systemReserveTokens: 2500, goalsReserveTokens: 2500, recentTurnsReserveTokens: 36000, toolResponseReserveTokens: 18000 },\n },\n memory: { scope: \"workspace\" },\n delegation: { maxDelegationDepth: 3, maxChildCalls: 10, maxParallelChild: 4 },\n toolResponses: { maxToolResponseChars: 64_000, maxToolResponseTokens: 16_000 },\n }),\n\n research: buildProfile({\n limits: { maxToolCalls: 80, maxParallelTools: 10, maxContextTokens: 400000 },\n summarization: {\n maxTokens: 400000,\n summaryTriggerTokens: 300000,\n summaryPromptMaxTokens: 24000,\n summaryCompressionRatioTarget: 0.35,\n },\n context: {\n lastTurnsToKeep: 60,\n budget: { systemReserveTokens: 3000, goalsReserveTokens: 3000, recentTurnsReserveTokens: 72000, toolResponseReserveTokens: 32000 },\n },\n memory: { scope: \"workspace\" },\n delegation: { mode: \"automatic\", maxDelegationDepth: 4, maxChildCalls: 16, maxParallelChild: 6, childContextPolicy: \"full\" },\n toolResponses: { maxToolResponseChars: 96_000, maxToolResponseTokens: 24_000 },\n }),\n};\n\nfunction mergeLimits(base: Required<AgentLimits>, override?: AgentLimits): Required<AgentLimits> {\n return {\n maxToolCalls: override?.maxToolCalls ?? base.maxToolCalls,\n maxParallelTools: override?.maxParallelTools ?? base.maxParallelTools,\n maxContextTokens: override?.maxContextTokens ?? base.maxContextTokens,\n maxTotalOutputTokens: override?.maxTotalOutputTokens ?? base.maxTotalOutputTokens ?? 0,\n maxCostUsd: override?.maxCostUsd ?? base.maxCostUsd ?? 0,\n maxWallClockMs: override?.maxWallClockMs ?? base.maxWallClockMs ?? 0,\n };\n}\n\nfunction resolveBaseProfile(opts: SmartAgentOptions, runtimeProfile: RuntimeProfile): BuiltInRuntimeProfile {\n if (opts.customProfile?.extends) return opts.customProfile.extends;\n if (runtimeProfile !== \"custom\") return runtimeProfile;\n return \"balanced\";\n}\n\nexport function normalizeSmartAgentOptions(opts: SmartAgentOptions): ResolvedSmartAgentConfig {\n const runtimeProfile = opts.runtimeProfile ?? (opts.customProfile ? \"custom\" : \"balanced\");\n const baseProfile = resolveBaseProfile(opts, runtimeProfile);\n const preset = DEFAULT_PROFILE_CONFIGS[baseProfile];\n const customProfile = opts.customProfile || {};\n const useTodoList = opts.useTodoList === true;\n const summarizationDisabled = opts.summarization === false;\n const summarizationOverride = typeof opts.summarization === \"object\" ? opts.summarization : {};\n const planningMode = opts.planning?.mode ?? customProfile.planning?.mode ?? (useTodoList ? \"todo\" : preset.planning.mode);\n const memoryStore = (opts.memory?.store ?? customProfile.memory?.store) as MemoryStore | undefined;\n const contextToolResponsePolicy = opts.context?.toolResponsePolicy\n ?? customProfile.context?.toolResponsePolicy\n ?? preset.context.toolResponsePolicy;\n\n return {\n runtimeProfile,\n baseProfile,\n limits: mergeLimits(mergeLimits(preset.limits, customProfile.limits), opts.limits),\n summarization: {\n ...preset.summarization,\n ...(customProfile.summarization || {}),\n ...summarizationOverride,\n enable: summarizationDisabled ? false : (summarizationOverride.enable ?? customProfile.summarization?.enable ?? preset.summarization.enable),\n maxTokens: summarizationOverride.maxTokens ?? opts.limits?.maxContextTokens ?? customProfile.summarization?.maxTokens ?? preset.summarization.maxTokens,\n summaryTriggerTokens:\n summarizationOverride.summaryTriggerTokens\n ?? summarizationOverride.maxTokens\n ?? opts.limits?.maxContextTokens\n ?? customProfile.summarization?.summaryTriggerTokens\n ?? customProfile.summarization?.maxTokens\n ?? preset.summarization.summaryTriggerTokens,\n promptTemplate: summarizationOverride.promptTemplate ?? customProfile.summarization?.promptTemplate ?? preset.summarization.promptTemplate,\n },\n context: {\n ...preset.context,\n ...(customProfile.context || {}),\n ...(opts.context || {}),\n budget: {\n ...preset.context.budget,\n ...((customProfile.context?.budget || {})),\n ...((opts.context?.budget || {})),\n },\n toolResponsePolicy: contextToolResponsePolicy,\n },\n planning: {\n ...preset.planning,\n ...(customProfile.planning || {}),\n ...(opts.planning || {}),\n mode: planningMode,\n },\n memory: {\n ...preset.memory,\n ...(customProfile.memory || {}),\n ...(opts.memory || {}),\n store: memoryStore,\n },\n delegation: {\n ...preset.delegation,\n ...(customProfile.delegation || {}),\n ...(opts.delegation || {}),\n },\n toolResponses: {\n ...preset.toolResponses,\n ...(customProfile.toolResponses || {}),\n ...(opts.toolResponses || {}),\n defaultPolicy: opts.toolResponses?.defaultPolicy\n ?? customProfile.toolResponses?.defaultPolicy\n ?? contextToolResponsePolicy,\n toolResponseRetentionByTool: {\n ...preset.toolResponses.toolResponseRetentionByTool,\n ...((customProfile.toolResponses?.toolResponseRetentionByTool || {})),\n ...((opts.toolResponses?.toolResponseRetentionByTool || {})),\n },\n criticalTools: opts.toolResponses?.criticalTools ?? customProfile.toolResponses?.criticalTools ?? preset.toolResponses.criticalTools,\n },\n };\n}\n\nexport function getResolvedSmartConfig(opts: SmartAgentOptions, runtime?: { smart?: ResolvedSmartAgentConfig | undefined }): ResolvedSmartAgentConfig {\n return runtime?.smart || normalizeSmartAgentOptions(opts);\n}","import { ZodError } from \"zod\";\nimport type {\n ResolvedSmartAgentConfig,\n ToolInterface,\n ToolResponseClassification,\n ToolResponseRetentionPolicy,\n} from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { safeStringify } from \"../utils/content.js\";\n\n/**\n * Compact textual preview of a value for archive/structured retention. Used by\n * the summarizer when an old tool response is reduced to a placeholder. Not\n * used at tool execution time.\n */\nexport function summarizeObject(value: any): string {\n if (value == null) return \"null\";\n if (typeof value === \"string\") {\n return value.length > 240 ? `${value.slice(0, 240)}...` : value;\n }\n if (Array.isArray(value)) {\n const preview = value.slice(0, 3).map((entry) => safeStringify(entry).slice(0, 120)).join(\" | \");\n return `array(length=${value.length}) ${preview}`.trim();\n }\n if (typeof value === \"object\") {\n const keys = Object.keys(value);\n const preview = keys.slice(0, 6).map((key) => `${key}=${safeStringify(value[key]).slice(0, 80)}`).join(\"; \");\n return `object(keys=${keys.length}) ${preview}`.trim();\n }\n return safeStringify(value);\n}\n\nexport function classifyToolResponse(\n toolName: string,\n output: unknown,\n config: ResolvedSmartAgentConfig,\n): ToolResponseClassification {\n const criticalTools = new Set(config.toolResponses.criticalTools);\n if (criticalTools.has(toolName)) return \"critical\";\n\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n if (\n tokenCount >= config.toolResponses.maxToolResponseTokens\n || serialized.length >= config.toolResponses.maxToolResponseChars\n ) {\n return \"verbose\";\n }\n return \"informative\";\n}\n\n/**\n * Eager pass executed at tool-call time. The full payload is always preserved in\n * `toolHistory`; we only intervene when a single response would blow up the\n * very next model call. Critical tools are never truncated.\n */\nexport function applyToolResponseHardCap(\n toolName: string,\n output: unknown,\n executionId: string,\n config: ResolvedSmartAgentConfig,\n): {\n classification: ToolResponseClassification;\n content: string;\n rawOutput: unknown;\n tokenCount: number;\n truncated: boolean;\n} {\n const serialized = safeStringify(output);\n const tokenCount = countApproxTokens(serialized);\n const classification = classifyToolResponse(toolName, output, config);\n\n if (classification !== \"verbose\") {\n return { classification, content: serialized, rawOutput: output, tokenCount, truncated: false };\n }\n\n const cap = config.toolResponses.maxToolResponseChars;\n const head = serialized.slice(0, cap);\n const note = `\\n... [TRUNCATED ${serialized.length - cap} chars by hard cap. Use get_tool_response with executionId=\"${executionId}\" to fetch the full payload.]`;\n return {\n classification,\n content: head + note,\n rawOutput: output,\n tokenCount,\n truncated: true,\n };\n}\n\n/**\n * Resolves the retention policy applied by the summarizer when context limits\n * are reached. Critical tools are never reduced. Per-tool override beats the\n * default policy.\n */\nexport function resolveSummarizationRetention(\n toolName: string,\n config: ResolvedSmartAgentConfig,\n): ToolResponseRetentionPolicy {\n const criticalTools = new Set(config.toolResponses.criticalTools);\n if (criticalTools.has(toolName)) return \"keep_full\";\n const byTool = config.toolResponses.toolResponseRetentionByTool[toolName];\n return byTool || config.toolResponses.defaultPolicy;\n}\n\n/**\n * Renders the placeholder content used when the summarizer reduces an old tool\n * message according to the resolved retention policy. The full payload is still\n * fetchable via `get_tool_response` using the executionId/toolCallId reference.\n */\nexport function renderRetainedToolMessage(args: {\n policy: ToolResponseRetentionPolicy;\n rawOutput: unknown;\n toolName: string;\n toolCallId?: string;\n executionId?: string;\n prebuiltSummary?: string;\n}): string {\n const { policy, rawOutput, toolName, toolCallId, executionId, prebuiltSummary } = args;\n if (policy === \"keep_full\") {\n return typeof rawOutput === \"string\" ? rawOutput : safeStringify(rawOutput);\n }\n\n const summary = prebuiltSummary || summarizeObject(rawOutput);\n const refs = [\n `toolName=${toolName}`,\n toolCallId ? `toolCallId=${toolCallId}` : null,\n executionId ? `executionId=${executionId}` : null,\n ].filter(Boolean).join(\"; \");\n const refId = executionId || toolCallId || \"\";\n\n if (policy === \"keep_structured\") {\n return `STRUCTURED_TOOL_RESPONSE [${refs}]\\nPreview: ${summary}\\nUse get_tool_response with executionId \"${refId}\" to fetch the full payload when a specific field is needed.`;\n }\n\n if (policy === \"summarize_archive\") {\n return `ARCHIVED_TOOL_RESPONSE [${refs}]\\nSummary: ${summary}\\nUse get_tool_response with executionId \"${refId}\" to fetch the full payload.`;\n }\n\n return `DROPPED_TOOL_RESPONSE [${refs}]\\nUse get_tool_response with executionId \"${refId}\" only if you must recover the original payload.`;\n}\n\nexport function validateToolArgs(\n tool: ToolInterface<any, any, any>,\n args: unknown,\n): { ok: true; value: any } | { ok: false; message: string } {\n const schema = (tool as any).schema;\n if (!schema || typeof schema.parse !== \"function\") {\n return { ok: true, value: args };\n }\n\n try {\n return { ok: true, value: schema.parse(args) };\n } catch (error) {\n if (error instanceof ZodError) {\n const message = error.issues.map((issue) => `${issue.path.join(\".\") || \"root\"}: ${issue.message}`).join(\"; \");\n return { ok: false, message };\n }\n return { ok: false, message: error instanceof Error ? error.message : String(error) };\n }\n}\n","/**\n * Selects the tool_calls that still need to be executed for the current turn.\n *\n * Normal operation: the assistant message the model just produced is last, so we\n * return its tool_calls verbatim (possibly empty for a final answer). This keeps\n * the hot path byte-for-byte identical to `messages[last].tool_calls`.\n *\n * Resume-after-pause: a pausable tool (a sub-agent `delegate_to` / `spawn_subagent`\n * whose child awaited human input) can be emitted in the SAME assistant turn as\n * ordinary tools. Those ordinary tools complete and their `role:\"tool\"` results\n * get appended, so on resume the LAST message is a sibling tool result — not the\n * assistant turn. Reading `messages[last].tool_calls` then yields `[]` and the\n * paused tool never re-runs (leaving an unpaired tool_use and, downstream, a hard\n * loop-termination error). Here we instead find the assistant turn that owns the\n * still-unresolved tool_calls and return ONLY those (calls that already have a\n * matching `role:\"tool\"` result are filtered out, so completed siblings never\n * re-execute).\n */\nexport function selectPendingToolCalls(messages: Array<any> | undefined): any[] {\n if (!Array.isArray(messages) || messages.length === 0) return [];\n const last = messages[messages.length - 1];\n\n // Hot path: the just-produced assistant turn is last. Return its calls as-is\n // (empty ⇒ final answer). Identical to the previous behaviour.\n if (last?.role === \"assistant\") {\n return Array.isArray(last.tool_calls) ? last.tool_calls : [];\n }\n\n // Resume path: last message is a tool result. Find the most recent assistant\n // turn and return only the tool_calls that have no matching tool result yet.\n const resolvedIds = new Set<string>();\n for (const m of messages) {\n if (m?.role === \"tool\" && m.tool_call_id != null) resolvedIds.add(String(m.tool_call_id));\n }\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const m = messages[i];\n if (m?.role !== \"assistant\") continue;\n const calls = Array.isArray(m.tool_calls) ? m.tool_calls : [];\n if (calls.length === 0) return [];\n // A call is unresolved when its id has no tool result (or it has no id at\n // all, in which case it cannot be matched and must be treated as pending).\n return calls.filter((c: any) => c?.id == null || !resolvedIds.has(String(c.id)));\n }\n return [];\n}\n","import type {\n SmartAgentEvent,\n SmartAgentOptions,\n SmartState,\n AgentRuntimeConfig,\n ToolInterface,\n Message,\n PendingToolApproval,\n PendingUserQuestion,\n TraceDataSection,\n TraceToolDetails,\n} from \"../types.js\";\nimport { nanoid } from \"nanoid\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes } from \"../utils/tracing.js\";\nimport { extractToolItems, summarizeToolOutput } from \"../utils/traceSections.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { applyToolResponseHardCap, validateToolArgs } from \"../smart/toolResponses.js\";\nimport { selectPendingToolCalls } from \"../utils/pendingToolCalls.js\";\n\nfunction normalizeMaxExecutionsPerRun(value: unknown): number | null {\n if (value === null || value === undefined || value === \"\") return null;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return null;\n const normalized = Math.trunc(parsed);\n return normalized >= 0 ? normalized : null;\n}\n\nfunction countSuccessfulToolExecutions(toolHistory: SmartState[\"toolHistory\"], toolName: string): number {\n if (!Array.isArray(toolHistory)) return 0;\n return toolHistory.filter((entry) => entry?.toolName === toolName && (entry?.status === \"success\" || entry?.status === \"handoff\")).length;\n}\n\nfunction normalizeToolCall(call: any): { id?: string; name: string; args: any } | null {\n if (!call || typeof call !== \"object\") return null;\n\n const name = call.name ?? call.tool ?? call.function?.name ?? call.function_call?.name;\n if (typeof name !== \"string\" || name.length === 0) return null;\n\n return {\n id: call.id,\n name,\n args: call.args ?? call.arguments ?? call.input ?? call.function?.arguments ?? call.function_call?.arguments,\n };\n}\n\nfunction normalizeToolSchema(tool: ToolInterface, toolName: string): any {\n const schema = (tool as any).schema;\n if (!schema) return undefined;\n\n if (typeof schema === \"object\" && (schema as any)._def) {\n try {\n return sanitizeTracePayload((zodToJsonSchema as any)(schema, { name: toolName }));\n } catch {\n // Fall through to generic serialization.\n }\n }\n\n if (schema && typeof schema === \"object\" && typeof (schema as any).toJSON === \"function\") {\n try {\n return sanitizeTracePayload((schema as any).toJSON());\n } catch {\n // Fall through to generic serialization.\n }\n }\n\n return sanitizeTracePayload(schema);\n}\n\nfunction buildToolDetails(tool: ToolInterface | undefined, toolName: string): TraceToolDetails | undefined {\n if (!tool) return undefined;\n const details: TraceToolDetails = { name: toolName };\n if (typeof (tool as any).description === \"string\" && (tool as any).description.trim().length > 0) {\n details.description = (tool as any).description;\n }\n\n const inputSchema = normalizeToolSchema(tool, toolName);\n if (inputSchema !== undefined) details.inputSchema = inputSchema;\n\n const needsApproval = typeof (tool as any).needsApproval === \"boolean\" ? (tool as any).needsApproval : undefined;\n if (needsApproval !== undefined || (tool as any).approvalPrompt !== undefined || (tool as any).approvalDefaults !== undefined) {\n details.approval = {\n required: needsApproval,\n prompt: typeof (tool as any).approvalPrompt === \"string\" ? (tool as any).approvalPrompt : undefined,\n defaults: (tool as any).approvalDefaults !== undefined ? sanitizeTracePayload((tool as any).approvalDefaults) : undefined,\n };\n }\n\n const cache = (tool as any).cache;\n if (cache !== undefined) {\n details.cache = {\n enabled: Boolean(cache),\n scope: cache && typeof cache === \"object\" && typeof cache.scope === \"string\" ? cache.scope : undefined,\n ttlMs: cache && typeof cache === \"object\" && typeof cache.ttlMs === \"number\" ? cache.ttlMs : undefined,\n hasKeyFn: Boolean(cache && typeof cache === \"object\" && typeof cache.keyFn === \"function\"),\n };\n }\n\n const retry = (tool as any).retry;\n if (retry && typeof retry === \"object\") {\n details.retry = {\n maxRetries: typeof retry.maxRetries === \"number\" ? retry.maxRetries : undefined,\n backoffMs: typeof retry.backoffMs === \"number\" ? retry.backoffMs : undefined,\n circuitBreakerThreshold: typeof retry.circuitBreakerThreshold === \"number\" ? retry.circuitBreakerThreshold : undefined,\n hasShouldRetry: typeof retry.shouldRetry === \"function\",\n };\n }\n\n if ((tool as any).maxExecutionsPerRun !== undefined) {\n details.limits = { maxExecutionsPerRun: (tool as any).maxExecutionsPerRun };\n }\n\n if (typeof (tool as any).__source === \"string\") {\n details.source = (tool as any).__source;\n }\n\n return details;\n}\n\nfunction buildToolTraceSections(params: {\n args?: any;\n classification?: any;\n durationMs?: number;\n executionId?: string;\n output?: any;\n retentionPolicy?: any;\n status: \"success\" | \"error\" | \"skipped\" | \"cached\" | string;\n summary?: string;\n toolDetails?: TraceToolDetails;\n toolName: string;\n fromCache?: boolean;\n}): TraceDataSection[] {\n const sanitizedArgs = sanitizeTracePayload(params.args ?? {});\n const sanitizedOutput = sanitizeTracePayload(params.output);\n const summary = params.summary ?? summarizeToolOutput(sanitizedOutput);\n const items = extractToolItems(sanitizedOutput);\n\n return [\n {\n kind: \"tool_call\",\n label: `Tool Call: ${params.toolName}`,\n tool: params.toolName,\n arguments: sanitizedArgs,\n toolDetails: params.toolDetails,\n },\n {\n kind: \"tool_result\",\n label: `Tool Result: ${params.toolName}`,\n tool: params.toolName,\n summary,\n items,\n output: sanitizedOutput,\n toolDetails: params.toolDetails,\n execution: {\n id: params.executionId,\n status: params.status,\n durationMs: params.durationMs,\n fromCache: params.fromCache,\n },\n classification: params.classification,\n retentionPolicy: params.retentionPolicy,\n },\n ];\n}\n\nexport function createToolsNode(initialTools: Array<ToolInterface<any, any, any>>, opts?: SmartAgentOptions) {\n return async (state: SmartState): Promise<any> => {\n const runtime = state.agent || {\n name: opts?.name,\n model: opts?.model,\n tools: initialTools,\n limits: opts?.limits,\n systemPrompt: opts?.systemPrompt,\n todoListPrompt: opts?.todoListPrompt,\n useTodoList: opts?.useTodoList,\n outputSchema: (opts as any)?.outputSchema,\n } as AgentRuntimeConfig;\n const resolved = getResolvedSmartConfig(opts || ({} as SmartAgentOptions), runtime as any);\n const activeTools: Array<ToolInterface<any, any, any>> = runtime.tools as any;\n const toolByName = new Map<string, ToolInterface>();\n for (const tool of activeTools) toolByName.set((tool as any).name, tool);\n\n const limits = {\n maxToolCalls: (runtime.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number,\n maxParallelTools: Math.max(1, (runtime.limits?.maxParallelTools ?? resolved.limits.maxParallelTools ?? 1) as number),\n };\n const appended: Message[] = [];\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n const pendingApprovals: PendingToolApproval[] = Array.isArray(state.pendingApprovals)\n ? state.pendingApprovals.map((entry) => ({ ...entry }))\n : [];\n const pendingByCallId = new Map(pendingApprovals.map((entry) => [entry.toolCallId, entry]));\n const pendingUserQuestions: PendingUserQuestion[] = Array.isArray(state.pendingUserQuestions)\n ? state.pendingUserQuestions.map((entry) => ({ ...entry }))\n : [];\n let awaitingApproval = false;\n let awaitingUserQuestion = false;\n\n for (const tool of toolByName.values()) {\n const anyTool: any = tool as any;\n if (anyTool._stateRef && typeof anyTool._stateRef === \"object\") {\n anyTool._stateRef.toolHistory = state.toolHistory;\n anyTool._stateRef.toolHistoryArchived = state.toolHistoryArchived;\n anyTool._stateRef.pendingApprovals = pendingApprovals;\n anyTool._stateRef.pendingUserQuestions = pendingUserQuestions;\n anyTool._stateRef.messages = state.messages;\n anyTool._stateRef.ctx = state.ctx || (state.ctx = {});\n anyTool._stateRef.__onEvent = onEvent;\n // Expose parent runtime to delegation-aware tools (asTool sub-agents).\n anyTool._stateRef.parentRuntime = runtime;\n }\n }\n\n // Process the owning assistant turn's UNRESOLVED tool_calls. On the normal\n // path this equals the last assistant message's tool_calls; on resume after a\n // sub-agent human-input pause it skips already-completed sibling tool_calls\n // (which have tool results) and re-runs only the still-pending delegating tool.\n let toolCount = state.toolCallCount || 0;\n const toolCalls: Array<{ id?: string; name: string; args: any }> = selectPendingToolCalls(state.messages)\n .map((toolCall: any) => normalizeToolCall(toolCall))\n .filter((toolCall: { id?: string; name: string; args: any } | null): toolCall is { id?: string; name: string; args: any } => toolCall !== null);\n const toolHistory = state.toolHistory || [];\n const toolHistoryArchived = state.toolHistoryArchived || [];\n const remaining = Math.max(0, limits.maxToolCalls - toolCount);\n const planned = toolCalls.slice(0, remaining);\n const skipped = toolCalls.slice(remaining);\n // Per-tool slot used to preserve append order across parallel execution.\n // Bedrock / Anthropic adapters expect tool_result blocks in the same order\n // as tool_use blocks in the assistant turn; we honor that by writing each\n // call's output messages to its planned index and flattening at the end.\n const orderedSlots: Message[][] = planned.map(() => []);\n\n type ToolExecutionResult =\n | { status: \"success\" | \"error\"; approval?: PendingToolApproval }\n | { status: \"awaiting_approval\" | \"rejected\"; approval: PendingToolApproval }\n | { status: \"awaiting_user_question\"; userQuestion: PendingUserQuestion };\n\n const isCancelled = () => {\n if (abortSignal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (cancellationToken && cancellationToken.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const markToolFailure = (message: string, toolName: string, toolCallId?: string) => {\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__lastToolError = message;\n if (toolCallId) {\n ctx.__toolSchemaError = { toolName, toolCallId, message };\n }\n if (resolved.planning.replanPolicy === \"on_failure\") {\n ctx.__planNeedsReplan = true;\n }\n state.ctx = ctx;\n };\n\n // Each runOne writes its tool/result messages to the provided slot. We\n // keep `appended` as the canonical accumulator but slots let parallel\n // execution preserve the deterministic planned order.\n const runOne = async (\n tc: { id?: string; name: string; args: any },\n slot: Message[] = appended,\n ): Promise<ToolExecutionResult> => {\n const push = (msg: Message) => slot.push(msg);\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n return { status: \"error\" };\n }\n\n const tool = toolByName.get(tc.name);\n if (!tool) {\n push({ role: \"tool\", content: `Tool not found: ${tc.name}`, tool_call_id: tc.id || `${tc.name}_unknown`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args: tc.args, error: { message: \"Tool not found\" } });\n toolCount += 1;\n return { status: \"error\" };\n }\n\n let args: any = tc.args;\n if (typeof args === \"string\") {\n try { args = JSON.parse(args); } catch { /* keep raw string */ }\n }\n\n const toolCallId = tc.id || `${tc.name}_${toolCount + 1}`;\n const validatedArgs = validateToolArgs(tool, args);\n if (!validatedArgs.ok && resolved.toolResponses.schemaValidation === \"strict\") {\n const errorMessage = `Tool argument validation failed for ${tc.name}: ${validatedArgs.message}`;\n push({ role: \"tool\", content: errorMessage, tool_call_id: toolCallId, name: tc.name });\n markToolFailure(errorMessage, tc.name, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args, error: { message: errorMessage } });\n toolCount += 1;\n return { status: \"error\" };\n }\n if (validatedArgs.ok) {\n args = validatedArgs.value;\n }\n\n const toolName = (tool as any).name || tc.name;\n const toolDetails = buildToolDetails(tool, toolName);\n const toolStateRef = (tool as any)._stateRef && typeof (tool as any)._stateRef === \"object\"\n ? (tool as any)._stateRef as Record<string, any>\n : null;\n\n if (toolStateRef) {\n toolStateRef.pendingApprovals = pendingApprovals;\n toolStateRef.pendingUserQuestions = pendingUserQuestions;\n toolStateRef.ctx = state.ctx || (state.ctx = {});\n toolStateRef.__currentToolCallId = toolCallId;\n delete toolStateRef.__awaitingApproval;\n }\n\n const maxExecutionsPerRun = normalizeMaxExecutionsPerRun((tool as any).maxExecutionsPerRun);\n if (maxExecutionsPerRun !== null) {\n const currentExecutions = countSuccessfulToolExecutions(toolHistory, toolName);\n if (currentExecutions >= maxExecutionsPerRun) {\n const limitMessage = `Skipped tool due to per-tool execution limit: ${toolName} (${maxExecutionsPerRun}/run)`;\n push({ role: \"tool\", content: limitMessage, tool_call_id: toolCallId, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: toolName, id: tc.id, args });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"skipped\",\n toolDetails,\n toolExecutionId: tc.id,\n sections: buildToolTraceSections({\n args,\n executionId: tc.id,\n output: limitMessage,\n status: \"skipped\",\n summary: limitMessage,\n toolDetails,\n toolName,\n }),\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n }\n\n let approvalEntry = pendingByCallId.get(toolCallId);\n const needsApproval = Boolean((tool as any).needsApproval);\n if (needsApproval) {\n if (!approvalEntry) {\n approvalEntry = {\n id: nanoid(),\n toolCallId,\n toolName: (tool as any).name || tc.name,\n args,\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n metadata: (tool as any).approvalPrompt || (tool as any).approvalDefaults\n ? { prompt: (tool as any).approvalPrompt, defaults: (tool as any).approvalDefaults }\n : undefined,\n };\n pendingApprovals.push(approvalEntry);\n pendingByCallId.set(toolCallId, approvalEntry);\n onEvent?.({ type: \"tool_approval\", status: \"pending\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, args });\n } else if (!approvalEntry.args) {\n approvalEntry.args = args;\n }\n\n if (approvalEntry.status === \"pending\") {\n awaitingApproval = true;\n const ctx = (state.ctx = state.ctx || {});\n ctx.__awaitingApproval = {\n approvalId: approvalEntry.id,\n toolCallId: approvalEntry.toolCallId,\n toolName: approvalEntry.toolName,\n requestedAt: approvalEntry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n return { status: \"awaiting_approval\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"rejected\") {\n const rejectionMessage = approvalEntry.comment || \"Tool call rejected by reviewer.\";\n push({ role: \"tool\", content: `Tool call rejected: ${rejectionMessage}`, tool_call_id: toolCallId, name: tc.name });\n approvalEntry.metadata = { ...(approvalEntry.metadata || {}), resolution: \"rejected\" };\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n pendingByCallId.set(toolCallId, approvalEntry);\n toolHistory.push({ executionId: nanoid(), toolName: (tool as any).name, args, output: `Rejected: ${rejectionMessage}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"rejected\" });\n onEvent?.({ type: \"tool_approval\", status: \"rejected\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, comment: approvalEntry.comment, decidedBy: approvalEntry.decidedBy });\n toolCount += 1;\n return { status: \"rejected\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"approved\" && approvalEntry.approvedArgs !== undefined) {\n args = approvalEntry.approvedArgs;\n onEvent?.({ type: \"tool_approval\", status: \"approved\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, decidedBy: approvalEntry.decidedBy, comment: approvalEntry.comment });\n }\n }\n\n const start = Date.now();\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n\n // ── Tool result cache (opt-in via `cache: true` on the tool) ──────────\n const cacheCfg = (tool as any).cache;\n const cacheEnabled = cacheCfg === true || (cacheCfg && typeof cacheCfg === \"object\");\n const cacheKeyFn: ((a: any) => string) | undefined = cacheEnabled && typeof cacheCfg === \"object\" ? cacheCfg.keyFn : undefined;\n const stableJson = (value: any): string => {\n try {\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(stableJson).join(\",\")}]`;\n const keys = Object.keys(value).sort();\n return `{${keys.map((k) => JSON.stringify(k) + \":\" + stableJson(value[k])).join(\",\")}}`;\n } catch {\n return String(value);\n }\n };\n const cacheKey = cacheEnabled ? `${toolName}|${cacheKeyFn ? cacheKeyFn(args) : stableJson(args)}` : undefined;\n const toolCache = (state.toolCache = state.toolCache || {});\n let cachedHit: any = undefined;\n if (cacheKey && Object.prototype.hasOwnProperty.call(toolCache, cacheKey)) {\n const entry = toolCache[cacheKey];\n const ttl = cacheEnabled && typeof cacheCfg === \"object\" ? cacheCfg.ttlMs : undefined;\n if (!ttl || (entry?.timestamp && Date.now() - entry.timestamp <= ttl)) {\n cachedHit = entry?.value;\n }\n }\n\n // ── Circuit breaker (consecutive failure cap per tool) ────────────────\n const retryCfg = (tool as any).retry;\n const failureStats = (state.ctx as any).__toolFailureCounts ||= {} as Record<string, number>;\n if (retryCfg?.circuitBreakerThreshold && failureStats[toolName] >= retryCfg.circuitBreakerThreshold) {\n const breakerMsg = `Tool ${toolName} circuit breaker open after ${failureStats[toolName]} consecutive failures`;\n push({ role: \"tool\", content: breakerMsg, tool_call_id: toolCallId, name: tc.name });\n markToolFailure(breakerMsg, toolName, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: toolName, id: tc.id, args, error: { message: breakerMsg } });\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n requestBytes: inputBytes,\n toolDetails,\n toolExecutionId: toolCallId,\n error: { message: breakerMsg },\n sections: buildToolTraceSections({\n args,\n executionId: toolCallId,\n output: { message: breakerMsg },\n status: \"error\",\n summary: breakerMsg,\n toolDetails,\n toolName,\n }),\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n\n try {\n if (cachedHit !== undefined) {\n // Short-circuit: serve from cache without re-invoking the tool.\n const executionId = nanoid();\n const responsePolicy = applyToolResponseHardCap(toolName, cachedHit, executionId, resolved);\n toolHistory.push({\n executionId,\n toolName,\n args,\n output: cachedHit,\n rawOutput: cachedHit,\n timestamp: new Date().toISOString(),\n tool_call_id: tc.id,\n summarized: false,\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n fromCache: true,\n status: \"success\",\n });\n push({ role: \"tool\", content: responsePolicy.content, tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: cachedHit, durationMs: 0 });\n const sanitizedCachedHit = sanitizeTracePayload(cachedHit);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedCachedHit) : undefined;\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs: 0,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolDetails,\n toolExecutionId: executionId,\n sections: buildToolTraceSections({\n args,\n classification: responsePolicy.classification,\n durationMs: 0,\n executionId,\n fromCache: true,\n output: sanitizedCachedHit,\n retentionPolicy: \"keep_full\",\n status: \"cached\",\n summary: responsePolicy.content,\n toolDetails,\n toolName,\n }),\n debug: {\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n originalTokenCount: responsePolicy.tokenCount,\n truncated: responsePolicy.truncated,\n fromCache: true,\n },\n });\n toolCount += 1;\n return { status: \"success\" };\n }\n onEvent?.({ type: \"tool_call\", phase: \"start\", name: toolName, id: tc.id, args });\n onProgress?.({ stage: \"tools\", message: `Running tool ${tc.name}` });\n const anyTool = tool as any;\n const callOptions = { cancellationToken, signal: abortSignal };\n const invokeOnce = async (): Promise<any> => {\n if (typeof anyTool.func === \"function\") return anyTool.func(args, callOptions);\n if (typeof anyTool.invoke === \"function\") return anyTool.invoke(args, callOptions);\n if (typeof anyTool.call === \"function\") return anyTool.call(args, callOptions);\n if (typeof anyTool._call === \"function\") return anyTool._call(args, callOptions);\n if (typeof anyTool.run === \"function\") return anyTool.run(args, callOptions);\n throw new Error(\"Tool is not invokable\");\n };\n\n let output: any;\n const maxRetries = Math.max(0, Number(retryCfg?.maxRetries) || 0);\n const backoffMs = Math.max(0, Number(retryCfg?.backoffMs) || 250);\n let attempt = 0;\n // First attempt + up to maxRetries retries with exponential backoff.\n // shouldRetry can short-circuit retries for non-transient errors.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n output = await invokeOnce();\n failureStats[toolName] = 0;\n break;\n } catch (retryErr) {\n attempt += 1;\n const shouldRetry = retryCfg?.shouldRetry\n ? retryCfg.shouldRetry(retryErr, attempt)\n : true;\n if (attempt > maxRetries || !shouldRetry) {\n failureStats[toolName] = (failureStats[toolName] || 0) + 1;\n throw retryErr;\n }\n await new Promise((r) => setTimeout(r, backoffMs * Math.pow(2, attempt - 1)));\n }\n }\n\n if (cacheKey) {\n toolCache[cacheKey] = { value: output, timestamp: Date.now() };\n }\n\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n\n // Progressive disclosure: a tool may inject additional runtime tools\n // (e.g. open_skill / bind_skill_tools) so later model turns in THIS same\n // loop can call them. Unlike __handoff this does not replace the agent or\n // return early — it appends to the live tool set and falls through to the\n // normal tool-result push (the marker is stripped before serialization).\n if (output && typeof output === \"object\" && Array.isArray((output as any).__runtimeToolsDelta)) {\n const delta = (output as any).__runtimeToolsDelta as Array<{ name?: string }>;\n delete (output as any).__runtimeToolsDelta;\n const currentRuntime: any = state.agent || runtime;\n const currentTools: any[] = (currentRuntime?.tools as any[]) ?? [];\n const present = new Set(currentTools.map((tool) => tool?.name));\n const additions = delta.filter((tool) => tool && (tool as any).name && !present.has((tool as any).name));\n if (additions.length > 0 && currentRuntime) {\n state.agent = { ...currentRuntime, tools: [...currentTools, ...additions] };\n }\n }\n\n if (output && typeof output === \"object\" && output.__handoff && output.__handoff.runtime) {\n toolHistory.push({ executionId, toolName, args, output: \"handoff:ok\", rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"handoff\" });\n push({ role: \"tool\", content: \"ok\", tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n state.agent = output.__handoff.runtime as AgentRuntimeConfig;\n onEvent?.({ type: \"handoff\", from: runtime.name, to: state.agent?.name, toolName });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: \"handoff\", durationMs });\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n }\n\n if (output && typeof output === \"object\" && (output as any).__awaitingToolApproval) {\n if (toolStateRef?.ctx && typeof toolStateRef.ctx === \"object\") {\n state.ctx = toolStateRef.ctx;\n }\n\n const pendingApproval = pendingApprovals.find((entry) =>\n entry.toolCallId === (output as any).toolCallId || entry.id === (output as any).approvalId\n );\n\n if (!pendingApproval) {\n throw new Error(`Tool ${toolName} requested approval but no pending approval entry was recorded.`);\n }\n\n awaitingApproval = true;\n return {\n status: \"awaiting_approval\",\n approval: pendingApproval\n };\n }\n\n if (output && typeof output === \"object\" && (output as any).__awaitingUserQuestion) {\n if (toolStateRef?.ctx && typeof toolStateRef.ctx === \"object\") {\n state.ctx = toolStateRef.ctx;\n }\n\n const pendingQuestion = pendingUserQuestions.find((entry) =>\n entry.toolCallId === (output as any).toolCallId || entry.id === (output as any).id\n );\n\n if (!pendingQuestion) {\n throw new Error(`Tool ${toolName} requested a user question but no pending question entry was recorded.`);\n }\n\n awaitingUserQuestion = true;\n return {\n status: \"awaiting_user_question\",\n userQuestion: pendingQuestion,\n };\n }\n\n if (output && typeof output === \"object\" && output.__finalStructuredOutput) {\n if (!state.ctx) state.ctx = {};\n state.ctx.__structuredOutputParsed = output.data;\n state.ctx.__finalizedDueToStructuredOutput = true;\n }\n\n const responsePolicy = applyToolResponseHardCap(toolName, output, executionId, resolved);\n const timestamp = new Date().toISOString();\n\n toolHistory.push({\n executionId,\n toolName,\n args,\n output,\n rawOutput: output,\n timestamp,\n tool_call_id: tc.id,\n summarized: false,\n originalTokenCount: responsePolicy.tokenCount,\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n summary: undefined,\n archiveId: undefined,\n status: \"success\",\n });\n\n push({ role: \"tool\", content: responsePolicy.content, tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: toolName, id: tc.id, args, result: output, durationMs });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} completed`, detail: { durationMs } });\n\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n\n const sanitizedOutput = sanitizeTracePayload(output);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedOutput) : undefined;\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolDetails,\n toolExecutionId: executionId,\n sections: buildToolTraceSections({\n args: sanitizedArgs,\n classification: responsePolicy.classification,\n durationMs,\n executionId,\n output: sanitizedOutput,\n retentionPolicy: \"keep_full\",\n status: \"success\",\n summary: responsePolicy.content,\n toolDetails,\n toolName,\n }),\n debug: {\n classification: responsePolicy.classification,\n retentionPolicy: \"keep_full\",\n originalTokenCount: responsePolicy.tokenCount,\n truncated: responsePolicy.truncated,\n },\n });\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n } catch (error: any) {\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n const message = error?.message || String(error);\n toolHistory.push({ executionId, toolName, args, output: `Error executing tool: ${message}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id, status: \"error\" });\n push({ role: \"tool\", content: `Error executing tool: ${message}`, tool_call_id: tc.id || `${tc.name}_${toolCount}`, name: tc.name });\n markToolFailure(message, toolName, toolCallId);\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: toolName, id: tc.id, args, error: { message } });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} failed`, detail: { error: message } });\n const errorOutput = { message, stack: error?.stack };\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n durationMs,\n requestBytes: inputBytes,\n responseBytes: traceSession?.resolvedConfig.logData ? estimatePayloadBytes(errorOutput) : undefined,\n toolDetails,\n toolExecutionId: executionId,\n error: { message, stack: error?.stack },\n sections: buildToolTraceSections({\n args: sanitizedArgs,\n durationMs,\n executionId,\n output: errorOutput,\n status: \"error\",\n summary: `Error executing tool: ${message}`,\n toolDetails,\n toolName,\n }),\n });\n toolCount += 1;\n return { status: \"error\", approval: approvalEntry };\n }\n };\n\n // Split into two index groups: tools that need human approval must run\n // sequentially (the first pending one short-circuits the turn), tools that\n // do not need approval can be fanned out up to `maxParallelTools`.\n const approvalIndices: number[] = [];\n const parallelIndices: number[] = [];\n planned.forEach((tc, idx) => {\n const t = toolByName.get(tc.name);\n if (t && (t as any).needsApproval) approvalIndices.push(idx);\n else parallelIndices.push(idx);\n });\n\n let shouldStop = false;\n const checkCancellationStop = () => {\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n shouldStop = true;\n return true;\n }\n return false;\n };\n\n // Approval-requiring tools: sequential so the first pending approval can\n // break the turn deterministically.\n for (const idx of approvalIndices) {\n if (awaitingApproval || awaitingUserQuestion || shouldStop) break;\n if (checkCancellationStop()) break;\n const result = await runOne(planned[idx], orderedSlots[idx]);\n if (result.status === \"awaiting_approval\") {\n awaitingApproval = true;\n break;\n }\n if (result.status === \"awaiting_user_question\") {\n awaitingUserQuestion = true;\n break;\n }\n }\n\n // Fan out non-approval tools with bounded concurrency.\n if (!awaitingApproval && !awaitingUserQuestion && !shouldStop && parallelIndices.length > 0) {\n const concurrency = Math.max(1, Math.min(limits.maxParallelTools, parallelIndices.length));\n let cursor = 0;\n const workerError: { err?: unknown } = {};\n const workers: Promise<void>[] = [];\n for (let w = 0; w < concurrency; w++) {\n workers.push((async () => {\n while (true) {\n if (workerError.err || shouldStop || awaitingApproval || awaitingUserQuestion) return;\n const i = cursor++;\n if (i >= parallelIndices.length) return;\n if (checkCancellationStop()) return;\n const idx = parallelIndices[i];\n try {\n const result = await runOne(planned[idx], orderedSlots[idx]);\n if (result.status === \"awaiting_approval\") {\n awaitingApproval = true;\n return;\n }\n if (result.status === \"awaiting_user_question\") {\n awaitingUserQuestion = true;\n return;\n }\n } catch (err) {\n workerError.err = err;\n return;\n }\n }\n })());\n }\n await Promise.all(workers);\n if (workerError.err) throw workerError.err;\n }\n\n // Flatten per-planned-index slots into the canonical appended order so\n // tool_result blocks line up with the assistant turn's tool_use order.\n for (const slot of orderedSlots) {\n if (slot.length > 0) appended.push(...slot);\n }\n\n for (const tc of skipped) {\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: tc.name, id: tc.id, args: tc.args });\n const toolDetails = buildToolDetails(toolByName.get(tc.name), tc.name);\n const skipMessage = `Skipped tool due to tool-call limit: ${tc.name}`;\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${tc.name}`,\n actor: { scope: \"tool\", name: tc.name, role: \"tool\" },\n status: \"skipped\",\n toolDetails,\n toolExecutionId: tc.id,\n sections: buildToolTraceSections({\n args: tc.args,\n executionId: tc.id,\n output: skipMessage,\n status: \"skipped\",\n summary: skipMessage,\n toolDetails,\n toolName: tc.name,\n }),\n });\n appended.push({ role: \"tool\", content: skipMessage, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n toolCount += 1;\n }\n\n if (!awaitingApproval && state.ctx?.__awaitingApproval) {\n const ctx = { ...state.ctx };\n delete ctx.__awaitingApproval;\n if (!pendingApprovals.some((entry) => entry.status !== \"executed\")) {\n delete ctx.__resumeStage;\n }\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n // New tool results invalidate any prior \"summarizer had nothing to\n // compress\" verdict — fresh raw payloads are now in scope. Without this,\n // a previously-exhausted summarization run would silently suppress\n // legitimate compaction on subsequent turns.\n const appendedHasToolResult = appended.some((m) => m.role === \"tool\");\n if (appendedHasToolResult && state.ctx?.__summarizationExhausted) {\n const ctx = { ...state.ctx };\n delete ctx.__summarizationExhausted;\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n return {\n messages: [...state.messages, ...appended],\n toolCallCount: toolCount,\n toolHistory,\n toolHistoryArchived,\n toolCache: state.toolCache,\n // Explicitly propagate ctx so callers using `{ ...state, ...delta }`\n // do not silently capture a stale ctx reference. Mutations to\n // __summarizationExhausted / __awaitingApproval / __awaitingUserQuestion /\n // __structuredOutputParsed are made on this object during execution.\n ctx: state.ctx,\n agent: state.agent,\n pendingApprovals,\n pendingUserQuestions,\n };\n };\n}\n","import type { SmartAgentOptions, SmartState } from \"../types.js\";\n\n// This node is reached when tool-call limit is hit. It appends a short instruction\n// telling the agent to produce an answer with the current information and avoid further tools.\n// Note: Using 'user' role since 'system' messages cannot appear in the middle of a conversation for OpenAI API.\nexport function createToolLimitFinalizeNode(_opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const notice = { role: 'user', content: \"[System Notice] Tool-call limit reached. Produce the best possible final answer using the available context and prior tool outputs. Do not call any more tools.\" } as any;\n const ctx = { ...(state.ctx || {}), __finalizedDueToToolLimit: true };\n return { messages: [...state.messages, notice], ctx };\n };\n}\n","// Reflection node — produces a short textual insight after a tool turn.\n//\n// Design goals:\n// - Piggyback on the existing transcript so the provider's prompt cache is\n// reused (no re-assembly of the whole context). We simply append a\n// `role:\"user\"` \"reflect now\" message and call the model with tool_choice:\"none\".\n// - The returned assistant text is **NOT** committed back as a real assistant\n// turn — it is captured in `state.reflections` and mirrored into the prompt\n// as a `role:\"system\"` \"agent_reflection\" message so the main model can see\n// the last few reflections without polluting the actual tool/assistant chain.\n// - Summarization respects `reflection.summarize`: when false (default) these\n// system messages are skipped by the summarizer and kept verbatim.\n\nimport type { SmartState, SmartAgentOptions, SmartAgentEvent, ReflectionRecord, ReflectionCadence } from \"../types.js\";\nimport type { ResolvedReflectionConfig } from \"../smart/reasoning.js\";\nimport { randomUUID } from \"node:crypto\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent } from \"../utils/tracing.js\";\n\nconst REFLECTION_SYSTEM_NAME = \"agent_reflection\";\nconst REFLECTION_ASK_NAME = \"agent_reflection_ask\";\n\nconst DEFAULT_REFLECT_PROMPT =\n`Reflect briefly — plain text, no JSON, no tool calls.\nStructure your note (1–2 sentences each):\n1) What the latest tool results actually tell us (facts, surprises).\n2) What is still missing or uncertain before we can finish the user's task.\n3) The single next step you plan to take, and why that step over alternatives.\nBe concrete. Do not repeat the task description. Do not apologize. Max ${\"${maxChars}\"} characters total.`;\n\nfunction trimToChars(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text;\n return text.slice(0, maxChars - 1).trimEnd() + \"…\";\n}\n\nfunction countToolCallsInLastTurn(state: SmartState): { ids: string[]; names: string[] } {\n const ids: string[] = [];\n const names: string[] = [];\n for (let i = state.messages.length - 1; i >= 0; i--) {\n const m: any = state.messages[i];\n if (m?.role === \"tool\") {\n if (m.tool_call_id) ids.push(m.tool_call_id);\n if (m.name) names.push(m.name);\n } else if (m?.role === \"assistant\") {\n // Reached the assistant turn that produced these tool results — stop.\n break;\n }\n }\n return { ids, names };\n}\n\nfunction stripReflectionAskMessages(messages: any[]): any[] {\n return messages.filter((m) => !(m?.role === \"user\" && m?.name === REFLECTION_ASK_NAME));\n}\n\n/**\n * Returns the tool-name sets for the two most recent tool-producing turns\n * (newest first). Used by the `on_branch` cadence to detect when the agent\n * switched the *kind* of tools it is using (a genuine branch in strategy).\n */\nfunction lastTwoToolTurns(state: SmartState): { current: string[]; previous: string[] } {\n const groups: string[][] = [];\n let cur: string[] = [];\n let sawTool = false;\n for (let i = state.messages.length - 1; i >= 0; i--) {\n const m: any = state.messages[i];\n if (m?.role === \"tool\") {\n if (m.name) cur.push(m.name);\n sawTool = true;\n } else if (m?.role === \"assistant\") {\n if (sawTool) {\n groups.push(cur);\n cur = [];\n sawTool = false;\n if (groups.length >= 2) break;\n }\n }\n }\n if (sawTool && cur.length) groups.push(cur);\n return { current: groups[0] ?? [], previous: groups[1] ?? [] };\n}\n\nexport function shouldRunReflection(\n cadence: ReflectionCadence,\n state: SmartState,\n ranToolsThisTurn: boolean,\n): boolean {\n if (cadence === \"off\") return false;\n if (cadence === \"every_turn\") return true;\n if (cadence === \"after_tool\") return ranToolsThisTurn;\n // The \"initial\" half of this cadence fires once before the loop (handled in\n // the agent core); inside the loop it behaves exactly like \"after_tool\".\n if (cadence === \"initial_then_after_tool\") return ranToolsThisTurn;\n if (cadence === \"on_branch\") {\n // Fire when this turn's tool-name set differs from the previous tool turn's\n // set — i.e. the agent changed which tools it is leaning on (a real branch),\n // not merely how many times it has called tools.\n if (!ranToolsThisTurn) return false;\n const { current, previous } = lastTwoToolTurns(state);\n if (previous.length === 0) return true; // first tool turn is itself a branch\n const a = new Set(current);\n const b = new Set(previous);\n for (const n of a) if (!b.has(n)) return true;\n for (const n of b) if (!a.has(n)) return true;\n return false;\n }\n return false;\n}\n\nexport function createReflectionNode(opts: SmartAgentOptions, resolved: ResolvedReflectionConfig) {\n return async function reflectNode(\n state: SmartState,\n trigger: ReflectionCadence,\n ): Promise<Partial<SmartState>> {\n if (!resolved.enabled) return {};\n\n const runtime = (state as any).agent || {\n model: (opts as any).model,\n name: opts.name,\n version: opts.version,\n };\n const model: any = runtime.model;\n if (!model?.invoke && !model?.stream) return {};\n\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n\n const maxChars = resolved.maxChars;\n const turnNow = state.toolCallCount ?? 0;\n const hookCtx = { state, turn: turnNow, trigger, ranToolsThisTurn: true };\n const defaultPrompt = (resolved.promptTemplate || DEFAULT_REFLECT_PROMPT).replace(/\\$\\{maxChars\\}/g, String(maxChars));\n const promptBody = resolved.buildPrompt\n ? String(resolved.buildPrompt({ ...hookCtx, defaultPrompt, maxChars }) ?? defaultPrompt)\n : defaultPrompt;\n\n // Piggyback: append ask as user message on top of the existing transcript.\n // This maximises the provider prompt-cache hit rate vs. building a new one.\n const baseMessages = stripReflectionAskMessages([...(state.messages as any[])]);\n const askMessage: any = {\n role: \"user\",\n name: REFLECTION_ASK_NAME,\n content: promptBody,\n };\n const messagesForCall =\n resolved.mode === \"piggyback\" ? [...baseMessages, askMessage]\n : buildSeparateCallMessages(baseMessages, promptBody);\n\n const start = Date.now();\n let response: any;\n try {\n response = await model.invoke(messagesForCall, {\n // tool_choice:\"none\" so the model won't try to call tools during reflection\n tool_choice: \"none\",\n toolChoice: \"none\",\n // Override max_tokens for the reflection call. BaseChatModel passes this through\n // to the adapter which forwards into the provider body.\n max_tokens: resolved.maxTokens,\n maxTokens: resolved.maxTokens,\n });\n } catch (err: any) {\n recordTraceEvent(traceSession, {\n type: \"reflection\" as any,\n label: \"Reflection error\",\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"reflection\" },\n status: \"error\",\n error: { message: err?.message || String(err) },\n });\n return {};\n }\n\n const durationMs = Date.now() - start;\n const rawText = extractText(response);\n const text = trimToChars(String(rawText ?? \"\").trim(), maxChars);\n if (!text) return {};\n\n // IMP-4: skip near-identical consecutive reflections so the prompt does not\n // accumulate restated insights that waste tokens and add no signal.\n const prevText = (state.reflections?.[state.reflections.length - 1]?.text || \"\").trim();\n if (prevText && isNearDuplicate(prevText, text)) return {};\n\n const rawUsage = (response as any)?.usage_metadata\n || (response as any)?.response_metadata?.usage\n || (response as any)?.usage\n || (response as any)?.additional_kwargs?.usage;\n const usage = normalizeUsage(rawUsage);\n const { ids, names } = countToolCallsInLastTurn(state);\n const turn = (state.toolCallCount ?? 0);\n const record: ReflectionRecord = {\n id: safeRandomId(),\n turn,\n text,\n createdAt: new Date().toISOString(),\n durationMs,\n anchorMessageIndex: state.messages.length,\n trigger,\n usage: usage ? {\n inputTokens: usage.prompt_tokens,\n outputTokens: usage.completion_tokens,\n cachedInputTokens: usage.prompt_tokens_details?.cached_tokens,\n totalTokens: usage.total_tokens,\n reasoningTokens: usage.completion_tokens_details?.reasoning_tokens,\n } : undefined,\n toolCallIds: ids.length > 0 ? ids : undefined,\n };\n\n recordTraceEvent(traceSession, {\n type: \"reflection\" as any,\n label: `Reflection turn ${turn}`,\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"reflection\" },\n status: \"success\",\n durationMs,\n inputTokens: record.usage?.inputTokens,\n outputTokens: record.usage?.outputTokens,\n cachedInputTokens: record.usage?.cachedInputTokens,\n totalTokens: record.usage?.totalTokens,\n debug: { text, toolNames: names },\n });\n\n if (resolved.emitEvents) {\n try {\n onEvent?.({\n type: \"reflection\",\n id: record.id,\n turn,\n text,\n trigger,\n durationMs,\n usage: record.usage,\n toolCallIds: record.toolCallIds,\n });\n } catch (e) {\n // onEvent failures must never break the loop\n }\n }\n\n // Side-effect hook (never allowed to break the loop).\n if (resolved.onReflection) {\n try {\n resolved.onReflection(record, hookCtx);\n } catch {\n // swallow\n }\n }\n\n // Rebuild the live message list. The reflection ask is a transient probe and\n // the model's reply is never committed as a real assistant turn — it lives in\n // `state.reflections`. Here we (1) drop any prior ask message and (2) mirror\n // the most recent reflections as compact `system` \"agent_reflection\" messages\n // so the main model can see them next turn without them joining the\n // tool_calls chain.\n const nextMessages = stripReflectionAskMessages([...(state.messages as any[])]);\n const reflections = [...(state.reflections || []), record];\n\n // Keep only last N reflections as live system messages; older ones stay in\n // `state.reflections` for persistence/UI but are pruned from the prompt.\n const kept = reflections.slice(-Math.max(1, resolved.keepLast));\n const prunedMessages = nextMessages.filter(\n (m: any) => !(m?.role === \"system\" && m?.name === REFLECTION_SYSTEM_NAME),\n );\n for (const r of kept) {\n prunedMessages.push({\n role: \"system\",\n name: REFLECTION_SYSTEM_NAME,\n content: `<agent_reflection turn=${r.turn} at=${r.createdAt}>\\n${r.text}\\n</agent_reflection>`,\n metadata: { reflectionId: r.id, reflectionTurn: r.turn, reflectionTrigger: r.trigger },\n });\n }\n\n const patch: Partial<SmartState> = { messages: prunedMessages, reflections };\n\n // R4: optionally route the reflection text into another store.\n if (resolved.feedTo === \"memory\") {\n const fact = {\n key: `reflection_turn_${turn}`,\n value: text,\n sourceTurn: turn,\n confidence: 0.3,\n tags: [\"reflection\"],\n };\n patch.memoryFacts = [...(state.memoryFacts || []), fact as any];\n } else if (resolved.feedTo === \"plan\" && state.plan) {\n patch.plan = { ...state.plan, lastReflection: text };\n }\n\n return patch;\n };\n}\n\nfunction extractText(chunk: any): string {\n if (chunk == null) return \"\";\n if (typeof chunk === \"string\") return chunk;\n if (typeof chunk?.content === \"string\") return chunk.content;\n if (Array.isArray(chunk?.content)) {\n return chunk.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n }\n if (typeof chunk?.text === \"string\") return chunk.text;\n return \"\";\n}\n\nfunction buildSeparateCallMessages(base: any[], promptBody: string): any[] {\n // Compact build: keep only the system prompt, last 2 user messages, and most recent\n // assistant+tool messages so the call is cheap but still grounded.\n const systemMessages = base.filter((m) => m?.role === \"system\");\n const tail = base.slice(-8);\n return [\n ...systemMessages,\n ...tail,\n { role: \"user\", name: REFLECTION_ASK_NAME, content: promptBody },\n ];\n}\n\nfunction safeRandomId(): string {\n try {\n return randomUUID();\n } catch {\n return `r_${Math.random().toString(36).slice(2, 10)}_${Date.now().toString(36)}`;\n }\n}\n\n/** Returns true when two reflection texts are effectively the same note —\n * either an exact normalized match or a very high word-overlap (Jaccard >= 0.9). */\nfunction isNearDuplicate(a: string, b: string): boolean {\n const norm = (s: string) => s.toLowerCase().replace(/\\s+/g, \" \").trim();\n const na = norm(a);\n const nb = norm(b);\n if (na === nb) return true;\n const tokensA = new Set(na.split(\" \").filter(Boolean));\n const tokensB = new Set(nb.split(\" \").filter(Boolean));\n if (tokensA.size === 0 || tokensB.size === 0) return false;\n let inter = 0;\n for (const t of tokensA) if (tokensB.has(t)) inter++;\n const union = tokensA.size + tokensB.size - inter;\n return union > 0 && inter / union >= 0.9;\n}\n\nexport { REFLECTION_SYSTEM_NAME, REFLECTION_ASK_NAME };\n","// Resolves the unified ReasoningConfig into concrete shapes consumed by the loop:\n// - native reasoning request config for the model adapter (per provider)\n// - reflection config (cadence / token budget / injection rules)\n//\n// Resolution is a pure function — defaults are applied based on `level` when\n// sub-fields are omitted. Any explicit sub-field wins.\n\nimport type {\n ReasoningConfig,\n ReasoningLevel,\n ReflectionConfig,\n ReflectionCadence,\n ReflectionHookContext,\n ReflectionRecord,\n NativeReasoningConfig,\n} from \"../types.js\";\n\nexport type ResolvedReflectionConfig = {\n enabled: boolean;\n cadence: ReflectionCadence;\n mode: \"piggyback\" | \"separate\";\n maxTokens: number;\n maxChars: number;\n keepLast: number;\n summarize: boolean;\n promptTemplate?: string;\n emitEvents: boolean;\n maxPerRun?: number;\n everyNTurns: number;\n feedTo: \"memory\" | \"plan\" | \"none\";\n shouldReflect?: (ctx: ReflectionHookContext) => boolean;\n buildPrompt?: (ctx: ReflectionHookContext & { defaultPrompt: string; maxChars: number }) => string;\n onReflection?: (record: ReflectionRecord, ctx: ReflectionHookContext) => void;\n};\n\nexport type ResolvedReasoning = {\n enabled: boolean;\n level: ReasoningLevel;\n native?: NativeReasoningConfig;\n reflection: ResolvedReflectionConfig;\n};\n\nconst LEVEL_DEFAULTS: Record<ReasoningLevel, {\n native: NativeReasoningConfig;\n reflection: Pick<ResolvedReflectionConfig, \"maxTokens\" | \"maxChars\" | \"cadence\">;\n}> = {\n minimal: {\n native: { effort: \"minimal\" },\n reflection: { maxTokens: 150, maxChars: 400, cadence: \"off\" },\n },\n low: {\n native: { effort: \"low\" },\n reflection: { maxTokens: 200, maxChars: 600, cadence: \"on_branch\" },\n },\n medium: {\n native: { effort: \"medium\" },\n reflection: { maxTokens: 350, maxChars: 1200, cadence: \"initial_then_after_tool\" },\n },\n high: {\n native: { effort: \"high\" },\n reflection: { maxTokens: 600, maxChars: 2000, cadence: \"initial_then_after_tool\" },\n },\n};\n\nconst VALID_LEVELS: ReasoningLevel[] = [\"minimal\", \"low\", \"medium\", \"high\"];\nconst VALID_CADENCES: ReflectionCadence[] = [\"off\", \"every_turn\", \"after_tool\", \"on_branch\", \"initial_then_after_tool\"];\nconst VALID_EFFORTS = [\"minimal\", \"low\", \"medium\", \"high\"];\n\n/**\n * Validates a user-supplied ReasoningConfig and throws a descriptive error for\n * obviously-wrong values. Pure; safe to call before resolveReasoning.\n */\nexport function validateReasoningConfig(input: ReasoningConfig | undefined): void {\n if (!input) return;\n if (input.level !== undefined && !VALID_LEVELS.includes(input.level)) {\n throw new Error(`reasoning.level must be one of ${VALID_LEVELS.join(\", \")} (got \"${input.level}\")`);\n }\n if (input.native) {\n const n = input.native;\n if (n.effort !== undefined && !VALID_EFFORTS.includes(n.effort)) {\n throw new Error(`reasoning.native.effort must be one of ${VALID_EFFORTS.join(\", \")} (got \"${n.effort}\")`);\n }\n if (n.budgetTokens !== undefined && (!Number.isFinite(n.budgetTokens) || n.budgetTokens < 0)) {\n throw new Error(`reasoning.native.budgetTokens must be a non-negative number (got ${n.budgetTokens})`);\n }\n }\n if (input.reflection) {\n const r = input.reflection;\n if (r.cadence !== undefined && !VALID_CADENCES.includes(r.cadence)) {\n throw new Error(`reasoning.reflection.cadence must be one of ${VALID_CADENCES.join(\", \")} (got \"${r.cadence}\")`);\n }\n if (r.maxPerRun !== undefined && (!Number.isFinite(r.maxPerRun) || r.maxPerRun < 0)) {\n throw new Error(`reasoning.reflection.maxPerRun must be a non-negative number (got ${r.maxPerRun})`);\n }\n if (r.everyNTurns !== undefined && (!Number.isFinite(r.everyNTurns) || r.everyNTurns < 1)) {\n throw new Error(`reasoning.reflection.everyNTurns must be >= 1 (got ${r.everyNTurns})`);\n }\n if (r.feedTo !== undefined && ![\"memory\", \"plan\", \"none\"].includes(r.feedTo)) {\n throw new Error(`reasoning.reflection.feedTo must be \"memory\", \"plan\", or \"none\" (got \"${r.feedTo}\")`);\n }\n }\n}\n\nexport function resolveReasoning(input: ReasoningConfig | undefined): ResolvedReasoning | undefined {\n if (!input || input.enabled === false) return undefined;\n validateReasoningConfig(input);\n const enabled = input.enabled ?? (input.native !== undefined || input.reflection !== undefined || input.level !== undefined);\n if (!enabled) return undefined;\n\n const level: ReasoningLevel = input.level ?? \"medium\";\n const presets = LEVEL_DEFAULTS[level];\n\n // --- native ---\n let native: NativeReasoningConfig | undefined;\n if (input.native === false) {\n native = undefined;\n } else {\n native = { ...presets.native, ...(input.native ?? {}) };\n }\n\n // --- reflection ---\n const reflection = resolveReflection(input.reflection, presets.reflection);\n\n return { enabled: true, level, native, reflection };\n}\n\nfunction resolveReflection(\n input: ReflectionConfig | false | undefined,\n preset: { maxTokens: number; maxChars: number; cadence: ReflectionCadence },\n): ResolvedReflectionConfig {\n if (input === false) {\n return {\n enabled: false,\n cadence: \"off\",\n mode: \"piggyback\",\n maxTokens: preset.maxTokens,\n maxChars: preset.maxChars,\n keepLast: 3,\n summarize: false,\n emitEvents: true,\n everyNTurns: 1,\n feedTo: \"none\",\n };\n }\n const cfg = input ?? {};\n const enabled = cfg.enabled ?? true;\n const cadence: ReflectionCadence = cfg.cadence ?? preset.cadence;\n return {\n enabled: enabled && cadence !== \"off\",\n cadence: enabled ? cadence : \"off\",\n mode: cfg.mode ?? \"piggyback\",\n maxTokens: cfg.maxTokens ?? preset.maxTokens,\n maxChars: cfg.maxChars ?? preset.maxChars,\n keepLast: cfg.keepLast ?? 3,\n summarize: cfg.summarize ?? false,\n promptTemplate: cfg.promptTemplate,\n emitEvents: cfg.emitEvents ?? true,\n maxPerRun: typeof cfg.maxPerRun === \"number\" && cfg.maxPerRun >= 0 ? cfg.maxPerRun : undefined,\n everyNTurns: Math.max(1, Math.trunc(cfg.everyNTurns ?? 1)),\n feedTo: cfg.feedTo ?? \"none\",\n shouldReflect: cfg.shouldReflect,\n buildPrompt: cfg.buildPrompt,\n onReflection: cfg.onReflection,\n };\n}\n","import { nanoid } from \"nanoid\";\nimport { GuardrailPhase } from \"../types.js\";\nimport type {\n ConversationGuardrail,\n GuardrailContext,\n GuardrailIncident,\n GuardrailOutcome,\n GuardrailRule,\n GuardrailDisposition,\n SmartState,\n SmartAgentOptions,\n AgentRuntimeConfig,\n SmartAgentEvent,\n} from \"../types.js\";\n\nexport type GuardrailEvaluationParams = {\n guardrails?: ConversationGuardrail[];\n phase: GuardrailPhase;\n state: SmartState;\n runtime: AgentRuntimeConfig;\n options: SmartAgentOptions;\n emit?: (event: SmartAgentEvent) => void;\n};\n\nfunction ensureArray<T>(value: T[] | undefined): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction buildContext(\n params: Omit<GuardrailEvaluationParams, \"guardrails\" | \"emit\">\n): GuardrailContext {\n const latest = params.state.messages[params.state.messages.length - 1];\n return {\n phase: params.phase,\n messages: params.state.messages,\n latestMessage: latest,\n state: params.state,\n runtime: params.runtime,\n options: params.options,\n };\n}\n\nfunction normalizeDisposition(\n passed: boolean,\n disposition?: GuardrailDisposition\n): GuardrailDisposition {\n if (disposition) return disposition;\n return passed ? \"allow\" : \"block\";\n}\n\nexport async function evaluateGuardrails(\n params: GuardrailEvaluationParams\n): Promise<GuardrailOutcome> {\n const incidents: GuardrailIncident[] = [];\n const guardrails = ensureArray(params.guardrails).filter((guardrail) =>\n ensureArray(guardrail.appliesTo).includes(params.phase)\n );\n\n if (guardrails.length === 0) {\n return { ok: true, incidents };\n }\n\n const context = buildContext(params);\n\n for (const guardrail of guardrails) {\n for (const rule of ensureArray(guardrail.rules)) {\n let result: Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n try {\n result = await rule.evaluate(context);\n } catch (err) {\n result = {\n passed: false,\n reason: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n details: { thrown: true },\n disposition: \"block\" as GuardrailDisposition,\n } as Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n }\n\n const passed = result?.passed !== false;\n const disposition = normalizeDisposition(passed, result?.disposition);\n\n if (passed && disposition === \"allow\") {\n continue;\n }\n\n const incident: GuardrailIncident = {\n guardrailId: guardrail.id ?? rule.id ?? nanoid(8),\n guardrailTitle: guardrail.title,\n ruleId: rule.id,\n ruleTitle: rule.title,\n phase: params.phase,\n reason: result?.reason,\n details: result?.details,\n disposition,\n };\n\n let effectiveDisposition = incident.disposition;\n if (typeof guardrail.onViolation === \"function\") {\n try {\n const override = await guardrail.onViolation(incident, context);\n if (override) {\n effectiveDisposition = override;\n incident.disposition = override;\n }\n } catch (err) {\n effectiveDisposition = \"block\";\n incident.disposition = \"block\";\n incident.details = {\n ...(incident.details || {}),\n onViolationError: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n };\n if (!incident.reason) {\n incident.reason = \"Guardrail onViolation handler threw an error.\";\n }\n }\n }\n\n incidents.push(incident);\n\n params.emit?.({\n type: \"guardrail\",\n phase: params.phase,\n guardrailId: incident.guardrailId,\n guardrailTitle: incident.guardrailTitle,\n ruleId: incident.ruleId,\n ruleTitle: incident.ruleTitle,\n disposition: effectiveDisposition,\n reason: incident.reason,\n details: incident.details,\n });\n\n if (effectiveDisposition === \"block\" && guardrail.haltOnViolation !== false) {\n break;\n }\n }\n }\n\n const ok = incidents.every((incident) => incident.disposition !== \"block\");\n return { ok, incidents };\n}\n\nexport type CreateGuardrailOptions = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo?: GuardrailPhase[];\n checks: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport function createGuardrail(options: CreateGuardrailOptions): ConversationGuardrail {\n const appliesTo = options.appliesTo?.length\n ? options.appliesTo\n : [GuardrailPhase.Request, GuardrailPhase.Response];\n\n return {\n id: options.id,\n title: options.title,\n description: options.description,\n appliesTo,\n rules: options.checks,\n haltOnViolation: options.haltOnViolation,\n onViolation: options.onViolation,\n metadata: options.metadata,\n };\n}\n","import { AgentRuntimeConfig, AgentSnapshot, RestoreSnapshotOptions, SmartState, SnapshotOptions } from \"../types.js\";\n\nconst DISALLOWED_CTX_KEYS = new Set([\n \"__onEvent\",\n \"__onProgress\",\n \"__onStream\",\n \"__traceSession\",\n \"__paused\",\n \"__cancellationToken\",\n \"__abortSignal\",\n]);\n\nconst clone = <T>(value: T): T => {\n if (typeof (globalThis as any).structuredClone === \"function\") {\n return (globalThis as any).structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n};\n\nconst cleanCtx = (ctx?: Record<string, any>): Record<string, any> | undefined => {\n if (!ctx) return undefined;\n const entries = Object.entries(ctx).filter(([key]) => !DISALLOWED_CTX_KEYS.has(key));\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n};\n\nconst runtimeHintFromAgent = (agent?: AgentRuntimeConfig) => {\n if (!agent) return undefined;\n const tools = Array.isArray(agent.tools) ? agent.tools.map((tool: any) => tool?.name).filter(Boolean) : undefined;\n return {\n name: agent.name,\n version: agent.version,\n tools: tools && tools.length > 0 ? tools : undefined,\n };\n};\n\nexport function captureSnapshot(state: SmartState, options?: SnapshotOptions): AgentSnapshot {\n const { agent, ctx, ...rest } = state;\n const metadata = {\n createdAt: new Date().toISOString(),\n tag: options?.tag,\n paused: ctx?.__paused ?? null,\n };\n\n const safeState = clone({\n ...rest,\n ctx: cleanCtx(ctx),\n });\n\n if (safeState.ctx && \"__paused\" in safeState.ctx) {\n delete (safeState.ctx as Record<string, any>).__paused;\n }\n\n return {\n state: safeState,\n runtimeHint: options?.includeRuntimeHint !== false ? runtimeHintFromAgent(agent) : undefined,\n metadata,\n };\n}\n\nexport function restoreSnapshot(snapshot: AgentSnapshot, restoreOptions?: RestoreSnapshotOptions): SmartState {\n const base = clone(snapshot.state) as SmartState;\n const incomingCtx = restoreOptions?.ctx;\n const mergedCtx = restoreOptions?.mergeCtx === false\n ? cleanCtx(incomingCtx)\n : {\n ...(base.ctx || {}),\n ...cleanCtx(incomingCtx),\n };\n\n const ctx = {\n ...(mergedCtx || {}),\n __restoredFromSnapshot: true,\n };\n\n const restored: SmartState = {\n ...base,\n ctx,\n };\n\n if (restoreOptions?.agent) {\n restored.agent = restoreOptions.agent;\n }\n\n return restored;\n}\n","import { SmartState, ToolApprovalResolution, PendingToolApproval } from \"../types.js\";\n\nconst cloneApprovals = (approvals: PendingToolApproval[] | undefined) =>\n Array.isArray(approvals) ? approvals.map((entry) => ({ ...entry })) : [];\n\nexport function resolveToolApprovalState(state: SmartState, resolution: ToolApprovalResolution): SmartState {\n const approvals = cloneApprovals(state.pendingApprovals);\n const matchIndex = approvals.findIndex((entry) => entry.id === resolution.id || entry.toolCallId === resolution.id);\n if (matchIndex === -1) {\n throw new Error(`Pending approval not found for id: ${resolution.id}`);\n }\n\n const entry = { ...approvals[matchIndex] };\n if (entry.status === \"executed\") {\n throw new Error(`Tool approval ${entry.id} already completed.`);\n }\n\n entry.status = resolution.approved ? \"approved\" : \"rejected\";\n entry.approvedArgs = resolution.approved ? (resolution.approvedArgs ?? entry.args) : undefined;\n entry.decidedBy = resolution.decidedBy;\n entry.comment = resolution.comment;\n entry.decidedAt = new Date().toISOString();\n\n approvals[matchIndex] = entry;\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingApproval;\n ctx.__resumeStage = \"tools\";\n ctx.__approvalResolved = { id: entry.id, status: entry.status };\n\n return {\n ...state,\n pendingApprovals: approvals,\n ctx,\n };\n}\n","import type {\n SmartState,\n Message,\n PendingUserQuestion,\n UserQuestionResolution,\n UserQuestionAnswerSet,\n} from \"../types.js\";\n\nconst cloneQuestions = (questions: PendingUserQuestion[] | undefined) =>\n Array.isArray(questions) ? questions.map((entry) => ({ ...entry })) : [];\n\nfunction validateAnswers(\n entry: PendingUserQuestion,\n answers: UserQuestionAnswerSet | undefined,\n cancelled: boolean,\n): UserQuestionAnswerSet {\n if (cancelled) {\n return answers || {};\n }\n\n const allowFreeText = entry.allowFreeText !== false;\n const out: UserQuestionAnswerSet = {};\n const provided = answers || {};\n\n for (const question of entry.questions) {\n const required = question.required !== false;\n const key = question.question;\n const answer = provided[key] ?? provided[question.header || \"\"];\n\n if (!answer) {\n if (required) {\n throw new Error(`Missing answer for required question: \"${key}\".`);\n }\n continue;\n }\n\n const values = Array.isArray(answer.values) ? answer.values.filter((v) => typeof v === \"string\") : [];\n const freeText = typeof answer.freeText === \"string\" ? answer.freeText.trim() : \"\";\n const notes = typeof answer.notes === \"string\" ? answer.notes : undefined;\n\n if (freeText && !allowFreeText) {\n throw new Error(\n `Free-text answers are disabled for this agent (question: \"${key}\"). Pick one of the provided options.`,\n );\n }\n\n if (values.length === 0 && !freeText) {\n if (required) {\n throw new Error(`Question \"${key}\" requires either a selected option or free-text answer.`);\n }\n continue;\n }\n\n if (values.length > 1 && !question.multiSelect) {\n throw new Error(`Question \"${key}\" is single-select but received multiple values.`);\n }\n\n if (Array.isArray(question.options) && question.options.length > 0 && values.length > 0) {\n const allowedValues = new Set(\n question.options.map((option) => option.value ?? option.label),\n );\n for (const value of values) {\n if (!allowedValues.has(value)) {\n if (!allowFreeText) {\n throw new Error(\n `Value \"${value}\" is not one of the allowed options for question \"${key}\".`,\n );\n }\n // With free-text enabled, treat unknown values as a custom answer.\n }\n }\n }\n\n out[key] = { values, ...(freeText ? { freeText } : {}), ...(notes ? { notes } : {}) };\n }\n\n return out;\n}\n\nfunction buildToolResponseContent(entry: PendingUserQuestion, answers: UserQuestionAnswerSet, cancelled: boolean, notes?: string): string {\n if (cancelled) {\n return JSON.stringify({\n status: \"cancelled\",\n message: notes || \"User dismissed the question without answering.\",\n });\n }\n\n // Flatten into a compact, model-friendly shape.\n const payload = {\n status: \"answered\",\n answers: entry.questions.map((question) => {\n const key = question.question;\n const ans = answers[key];\n return {\n question: key,\n header: question.header,\n values: ans?.values ?? [],\n freeText: ans?.freeText,\n notes: ans?.notes,\n };\n }),\n ...(notes ? { reviewerNotes: notes } : {}),\n };\n return JSON.stringify(payload);\n}\n\nexport function resolveUserQuestionState(\n state: SmartState,\n resolution: UserQuestionResolution,\n): SmartState {\n const pending = cloneQuestions(state.pendingUserQuestions);\n const matchIndex = pending.findIndex(\n (entry) => entry.id === resolution.id || entry.toolCallId === resolution.id,\n );\n if (matchIndex === -1) {\n throw new Error(`Pending user question not found for id: ${resolution.id}`);\n }\n\n const entry = { ...pending[matchIndex] };\n if (entry.status === \"answered\" || entry.status === \"executed\" || entry.status === \"cancelled\") {\n throw new Error(`User question ${entry.id} already resolved (status: ${entry.status}).`);\n }\n\n const cancelled = resolution.cancelled === true;\n const validated = validateAnswers(entry, resolution.answers, cancelled);\n\n entry.status = cancelled ? \"cancelled\" : \"answered\";\n entry.answers = validated;\n entry.cancelled = cancelled || undefined;\n entry.answeredBy = resolution.answeredBy;\n entry.notes = resolution.notes;\n entry.answeredAt = new Date().toISOString();\n\n pending[matchIndex] = entry;\n\n // A sub-agent surfaces a CHILD question to the parent. The parent transcript\n // has no matching tool_call for it, so we must NOT inject a tool message at\n // the parent level and must KEEP `__resumeStage = \"tools\"` so the parent\n // re-runs the delegating sub-agent tool, which feeds the answer into the\n // child and resumes it.\n const isSubagentQuestion = Boolean((entry.metadata as any)?.__subagent);\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingUserQuestion;\n // The original tool call set `__resumeStage = \"tools\"` so the runtime would\n // re-enter the tools node on resume; for a parent-level ask_user we already\n // injected the answer as a tool message, so the loop should run the agent\n // (not the tools node) first on the next invoke. For a sub-agent question we\n // keep it so the delegating tool re-runs.\n if (ctx.__resumeStage === \"tools\" && !isSubagentQuestion) {\n delete ctx.__resumeStage;\n }\n ctx.__userQuestionResolved = { id: entry.id, status: entry.status };\n\n if (isSubagentQuestion) {\n return {\n ...state,\n pendingUserQuestions: pending,\n ctx,\n };\n }\n\n const toolMessage: Message = {\n role: \"tool\",\n name: \"ask_user_question\",\n tool_call_id: entry.toolCallId,\n content: buildToolResponseContent(entry, validated, cancelled, resolution.notes),\n };\n\n return {\n ...state,\n pendingUserQuestions: pending,\n messages: [...(state.messages || []), toolMessage],\n ctx,\n };\n}\n","import { z } from \"zod\";\nimport { nanoid } from \"nanoid\";\nimport { createTool } from \"./tool.js\";\nimport { recordTraceEvent } from \"./utils/tracing.js\";\nimport type {\n PendingUserQuestion,\n UserQuestionItem,\n HumanInTheLoopAskUserConfig,\n} from \"./types.js\";\n\nexport type AskUserStateRef = {\n pendingUserQuestions?: PendingUserQuestion[];\n ctx?: Record<string, any>;\n __onEvent?: (event: any) => void;\n __currentToolCallId?: string;\n};\n\nconst DEFAULT_DESCRIPTION_WITH_FREETEXT =\n \"Pause the agent and surface a structured prompt to the human user when you genuinely cannot proceed without their input. \" +\n \"Group up to 4 closely related questions into a single call. \" +\n \"Prefer concrete options the user can pick over open-ended free-text — list `options` whenever you can anticipate the choices. \" +\n \"The user may type a custom answer for any question. \" +\n \"Do not use this tool for things you can deduce from the conversation, the system prompt, or another tool. \" +\n \"After the user answers, their selections come back as the tool result.\";\n\nconst DEFAULT_DESCRIPTION_NO_FREETEXT =\n \"Pause the agent and surface a structured multi-choice prompt to the human user when you genuinely cannot proceed without their input. \" +\n \"Group up to 4 closely related questions into a single call. \" +\n \"Every question MUST include at least two `options` — free-text answers are disabled for this agent. \" +\n \"Do not use this tool for things you can deduce from the conversation, the system prompt, or another tool. \" +\n \"After the user picks, their selections come back as the tool result.\";\n\nfunction buildOptionSchema() {\n return z\n .object({\n label: z.string().min(1).describe(\"Display text the user sees\"),\n value: z\n .string()\n .min(1)\n .optional()\n .describe(\"Value returned in the answer; defaults to label\"),\n description: z.string().optional(),\n preview: z\n .string()\n .optional()\n .describe(\"Optional code / ASCII preview rendered when this option is focused\"),\n })\n .strict();\n}\n\nfunction buildQuestionSchema(allowFreeText: boolean) {\n const optionSchema = buildOptionSchema();\n const baseShape = {\n question: z.string().min(1).describe(\"Full question shown to the user\"),\n header: z\n .string()\n .max(40)\n .optional()\n .describe(\"Short chip / tag rendered next to the question (max ~12 chars recommended)\"),\n multiSelect: z.boolean().optional().describe(\"Allow multiple selections. Default: false\"),\n placeholder: z.string().optional(),\n required: z.boolean().optional().describe(\"Default: true\"),\n } as const;\n\n if (allowFreeText) {\n return z\n .object({\n ...baseShape,\n options: z.array(optionSchema).min(2).max(12).optional(),\n })\n .strict();\n }\n\n return z\n .object({\n ...baseShape,\n options: z\n .array(optionSchema)\n .min(2)\n .max(12)\n .describe(\"Required: free-text answers are disabled for this agent\"),\n })\n .strict();\n}\n\nexport function createAskUserQuestionTool(\n stateRef: AskUserStateRef,\n config: HumanInTheLoopAskUserConfig,\n) {\n const allowFreeText = config.allowFreeText !== false;\n const description = config.promptOverride\n ?? (allowFreeText ? DEFAULT_DESCRIPTION_WITH_FREETEXT : DEFAULT_DESCRIPTION_NO_FREETEXT);\n const questionSchema = buildQuestionSchema(allowFreeText);\n\n const askUser = createTool({\n name: \"ask_user_question\",\n description,\n schema: z\n .object({\n questions: z\n .array(questionSchema)\n .min(1)\n .max(4)\n .describe(\"1-4 related questions to ask in a single pause.\"),\n })\n .strict(),\n func: async ({ questions }) => {\n const ref = ((askUser as any)._stateRef ||= {}) as AskUserStateRef;\n const onEvent = ref.__onEvent;\n if (!ref.ctx) ref.ctx = {};\n const ctx = ref.ctx;\n const toolCallId = ref.__currentToolCallId || `ask_user_${nanoid(6)}`;\n if (!ref.pendingUserQuestions) ref.pendingUserQuestions = [];\n const pendingList = ref.pendingUserQuestions;\n\n const entry: PendingUserQuestion = {\n id: nanoid(),\n toolCallId,\n toolName: \"ask_user_question\",\n questions: questions as UserQuestionItem[],\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n allowFreeText,\n };\n pendingList.push(entry);\n\n ctx.__awaitingUserQuestion = {\n id: entry.id,\n toolCallId: entry.toolCallId,\n requestedAt: entry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n\n onEvent?.({\n type: \"user_question\",\n status: \"pending\",\n id: entry.id,\n toolCallId: entry.toolCallId,\n questions: entry.questions,\n allowFreeText,\n });\n\n recordTraceEvent(ctx.__traceSession, {\n type: \"user_question\",\n label: \"Ask User\",\n actor: { scope: \"agent\", name: \"ask_user_question\", role: \"user_interaction\" },\n status: \"success\",\n sections: [\n {\n kind: \"metadata\",\n label: \"Pending Question\",\n data: {\n id: entry.id,\n toolCallId: entry.toolCallId,\n questions: entry.questions,\n allowFreeText,\n },\n },\n ],\n });\n\n return {\n __awaitingUserQuestion: true,\n id: entry.id,\n toolCallId: entry.toolCallId,\n };\n },\n });\n\n (askUser as any)._stateRef = stateRef;\n (askUser as any).__source = \"human-in-the-loop\";\n return askUser;\n}\n","// A minimal agent builder: no system prompt, no summarization, with tool limit and optional structured output finalize.\nimport type { AgentInvokeResult, InvokeConfig, SmartAgentEvent, AgentOptions, AgentState, AgentInstance, AgentRuntimeConfig, HandoffDescriptor, GuardrailOutcome, AgentSnapshot, SnapshotOptions, RestoreSnapshotOptions, ToolApprovalResolution, UserQuestionResolution, HumanInTheLoopAskUserConfig } from \"./types.js\";\nimport { GuardrailPhase } from \"./types.js\";\nimport { z, ZodSchema } from \"zod\";\nimport { createResolverNode } from \"./nodes/resolver.js\";\nimport { createAgentCoreNode } from \"./nodes/agentCore.js\";\nimport { createToolsNode } from \"./nodes/tools.js\";\nimport { createToolLimitFinalizeNode } from \"./nodes/toolLimitFinalize.js\";\nimport { createReflectionNode, shouldRunReflection } from \"./nodes/reflect.js\";\nimport { resolveReasoning } from \"./smart/reasoning.js\";\nimport { createTool } from \"./tool.js\";\nimport { createTraceSession, finalizeTraceSession, startStreamingSession, recordTraceEvent } from \"./utils/tracing.js\";\nimport { evaluateGuardrails } from \"./guardrails/engine.js\";\nimport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nimport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nimport { resolveUserQuestionState } from \"./utils/userQuestions.js\";\nimport { createAskUserQuestionTool } from \"./humanLoop.js\";\nimport { countMessagesTokens } from \"./utils/utilTokens.js\";\nimport { isSyntheticSummaryMessage } from \"./utils/syntheticMessages.js\";\nimport { extractMessageText } from \"./utils/content.js\";\nimport { StructuredOutputManager } from \"./structuredOutput/manager.js\";\nimport { resolveStrategy, getModelCapabilities } from \"./structuredOutput/resolver.js\";\nimport type { StructuredOutputError } from \"./structuredOutput/types.js\";\nimport { seedChildMessages } from \"./smart/subagents/registry.js\";\nimport { selectPendingToolCalls } from \"./utils/pendingToolCalls.js\";\n\nfunction getLastAssistantMessage(messages: any[]): any | undefined {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n if (messages[index]?.role === \"assistant\") {\n return messages[index];\n }\n }\n return undefined;\n}\n\nfunction getActiveSummarizationThreshold(opts: AgentOptions): number | undefined {\n const summarization = (opts as any).summarization;\n if (!summarization || typeof summarization !== \"object\" || summarization.enable === false) {\n return undefined;\n }\n\n return (\n summarization.summaryTriggerTokens\n || summarization.maxTokens\n || opts.limits?.maxContextTokens\n || 50000\n );\n}\n\n/**\n * Decision helper for summarization signaling. Returns \"trigger\" only when:\n * - the conversation (excluding synthetic/context-overhead system messages)\n * exceeds the configured threshold, AND\n * - the summarizer has not already given up (`__summarizationExhausted`), AND\n * - we are not bouncing right after a fresh summary pass (15% tolerance).\n * Returns \"skip\" in every other case so the loop continues without breaking.\n */\nfunction shouldSignalSummarization(state: AgentState, threshold: number): \"trigger\" | \"skip\" {\n const tokCountMessages = (state.messages || []).filter((message: any) => {\n if (isSyntheticSummaryMessage(message)) return false;\n if (message.role === 'system' && (message.name === 'context_summary' || message.name === 'memory_context')) return false;\n return true;\n });\n const tokenCount = countMessagesTokens(tokCountMessages);\n if (tokenCount <= threshold) return \"skip\";\n\n // SmartAgent already attempted and could not compress further; pressing\n // again would deadlock. Proceed with the clamped context instead.\n if ((state.ctx as any)?.__summarizationExhausted) return \"skip\";\n\n // Fresh summary in transcript + only marginally over budget: do not\n // re-summarize. Context overhead alone can keep us 0–15% above the trigger.\n const hasFreshSummary = (state.messages || []).some((m: any) =>\n m.role === 'tool'\n && typeof m.content === 'string'\n && (m.content === 'SUMMARIZED' || m.content.startsWith('SUMMARIZED_TOOL_RESPONSE'))\n );\n if (hasFreshSummary && tokenCount <= threshold * 1.15) return \"skip\";\n\n return \"trigger\";\n}\n\nfunction clearNeedsSummarization(state: AgentState): AgentState {\n if (!(state.ctx as any)?.__needsSummarization) {\n return state;\n }\n\n const nextCtx = { ...(state.ctx || {}) } as Record<string, unknown>;\n delete nextCtx.__needsSummarization;\n\n return {\n ...state,\n ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined,\n } as AgentState;\n}\n\nexport function createAgent<TOutput = unknown>(opts: AgentOptions & { outputSchema?: ZodSchema<TOutput> }): AgentInstance<TOutput> {\n const resolver = createResolverNode();\n const agentCore = createAgentCoreNode(opts);\n // Prepare tools list: base tools + structured output finalize if schema provided\n const toolsBase = [...((opts.tools as any) ?? [])];\n\n // Resolve human-in-the-loop config; when askUser is enabled we attach the\n // built-in ask_user_question tool to the agent's tool surface.\n const askUserConfig: HumanInTheLoopAskUserConfig | undefined = (() => {\n const raw = (opts as any).humanInTheLoop?.askUser;\n if (!raw) return undefined;\n if (raw === true) return { enabled: true, allowFreeText: true };\n return {\n enabled: true,\n allowFreeText: raw.allowFreeText !== false,\n promptOverride: raw.promptOverride,\n };\n })();\n const askUserOnQuestion = typeof (opts as any).humanInTheLoop?.askUser === \"object\"\n ? (opts as any).humanInTheLoop?.askUser?.onQuestion as ((event: any) => void) | undefined\n : undefined;\n // Shared per-agent stateRef for the ask_user tool. Each invoke replaces the\n // pendingUserQuestions array via the tools node, but the tool object itself\n // is reused — that's fine because it only reads from this ref at call time.\n const askUserStateRef: any = askUserConfig\n ? { pendingUserQuestions: undefined, ctx: undefined, __onEvent: undefined, __currentToolCallId: undefined }\n : undefined;\n if (askUserConfig && askUserStateRef) {\n toolsBase.push(createAskUserQuestionTool(askUserStateRef, askUserConfig));\n }\n\n // Structured output manager: resolves strategy (native vs tool-based) based on model capabilities\n const soManager = opts.outputSchema\n ? new StructuredOutputManager<TOutput>(opts.outputSchema, resolveStrategy(opts.model))\n : undefined;\n\n if (soManager) {\n const modelCapabilities = getModelCapabilities(opts.model);\n const responseTool = soManager.getResponseTool();\n // Hard guard: when model supports native structured output, never attach the fallback response tool.\n if (responseTool && modelCapabilities.structuredOutput !== \"native\") {\n toolsBase.push(responseTool);\n }\n }\n const toolsNode = createToolsNode(toolsBase, opts);\n const finalizeNode = createToolLimitFinalizeNode(opts);\n\n // Resolve unified reasoning config (provider-native + reflection). When omitted,\n // the loop behaves exactly as before: no reflection node and no reasoning extras.\n const resolvedReasoning = resolveReasoning((opts as any).reasoning);\n const reflectNode = resolvedReasoning?.reflection.enabled\n ? createReflectionNode(opts as any, resolvedReasoning.reflection)\n : undefined;\n\n type GuardrailStore = { lastRequestLength: number; lastResponseLength: number };\n\n const mergeGuardrailOutcomes = (\n prev: GuardrailOutcome | undefined,\n next: GuardrailOutcome\n ): GuardrailOutcome => {\n if (!prev) return next;\n return {\n ok: prev.ok && next.ok,\n incidents: [...prev.incidents, ...next.incidents],\n };\n };\n\n const ensureGuardrailStore = (state: AgentState): GuardrailStore => {\n const ctx = (state.ctx = state.ctx || {});\n const existing = (ctx.__guardrailStore as GuardrailStore | undefined) || {\n lastRequestLength: -1,\n lastResponseLength: -1,\n };\n ctx.__guardrailStore = existing;\n return existing;\n };\n\n const getGuardrailConfig = (state: AgentState) => {\n const agentGuardrails = state.agent?.guardrails;\n return Array.isArray(agentGuardrails)\n ? agentGuardrails\n : Array.isArray(opts.guardrails)\n ? opts.guardrails\n : [];\n };\n\n const runtime: AgentRuntimeConfig = {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: toolsBase,\n guardrails: opts.guardrails,\n systemPrompt: undefined,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: opts.outputSchema as any,\n responseFormat: soManager?.getResponseFormat(),\n tracing: opts.tracing,\n humanInTheLoop: askUserConfig ? { askUser: askUserConfig } : undefined,\n };\n const summarizationThreshold = getActiveSummarizationThreshold(opts);\n\n async function runLoop(\n initial: AgentState,\n config: InvokeConfig | undefined,\n emit?: (event: SmartAgentEvent) => void\n ): Promise<AgentState> {\n let state = await resolver(initial);\n if (state.ctx?.__paused) {\n const nextCtx = { ...state.ctx };\n delete nextCtx.__paused;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n let resumeStage: \"tools\" | null = null;\n if (state.ctx?.__resumeStage) {\n const nextCtx = { ...state.ctx };\n if (nextCtx.__resumeStage === \"tools\") {\n resumeStage = \"tools\";\n }\n delete nextCtx.__resumeStage;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n\n if (summarizationThreshold === undefined) {\n state = clearNeedsSummarization(state);\n }\n\n // Forward resolved native reasoning into ctx so agentCore picks it up and\n // adapters map it to provider-specific body fields. We (re)apply this on\n // every invoke so a resumed run cannot inherit a stale `__reasoning` value\n // from a previous config — and we clear it when native reasoning is off.\n if (resolvedReasoning) {\n const ctx: any = { ...(state.ctx || {}) };\n if (resolvedReasoning.native) {\n ctx.__reasoning = resolvedReasoning.native;\n } else {\n delete ctx.__reasoning;\n }\n state = { ...state, ctx: Object.keys(ctx).length > 0 ? ctx : undefined } as AgentState;\n }\n const mergedLimits = {\n ...(opts.limits || {}),\n ...((config?.limits || {}) as any),\n } as AgentOptions[\"limits\"];\n\n const maxToolCalls = (mergedLimits?.maxToolCalls === undefined) ? 50 : mergedLimits?.maxToolCalls;\n const iterationLimit = maxToolCalls === Infinity ? 100 : Math.max(maxToolCalls * 3 + 10, 40);\n const wallClockStart = Date.now();\n // Treat 0 / undefined as \"disabled\" so resolved-profile placeholders do not\n // accidentally throttle the loop.\n const maxWallClockMs = mergedLimits?.maxWallClockMs && mergedLimits.maxWallClockMs > 0 ? mergedLimits.maxWallClockMs : undefined;\n const maxTotalOutputTokens = mergedLimits?.maxTotalOutputTokens && mergedLimits.maxTotalOutputTokens > 0 ? mergedLimits.maxTotalOutputTokens : undefined;\n const maxCostUsd = mergedLimits?.maxCostUsd && mergedLimits.maxCostUsd > 0 ? mergedLimits.maxCostUsd : undefined;\n const costEstimator = (opts as any).costEstimator as ((args: { modelName?: string; inputTokens: number; outputTokens: number; cachedInputTokens?: number; reasoningTokens?: number }) => number) | undefined;\n const checkBudgetBreached = (): { breached: false } | { breached: true; reason: string } => {\n if (maxWallClockMs && Date.now() - wallClockStart > maxWallClockMs) {\n return { breached: true, reason: `maxWallClockMs (${maxWallClockMs}ms) exceeded` };\n }\n if (maxTotalOutputTokens) {\n const totals = (state as any).usage?.totals as Record<string, { output: number }> | undefined;\n if (totals) {\n let outputSum = 0;\n for (const v of Object.values(totals)) outputSum += Number(v?.output) || 0;\n if (outputSum > maxTotalOutputTokens) {\n return { breached: true, reason: `maxTotalOutputTokens (${maxTotalOutputTokens}) exceeded` };\n }\n }\n }\n if (maxCostUsd && costEstimator) {\n const perRequest = (state as any).usage?.perRequest as Array<{ modelName: string; usage: any }> | undefined;\n if (perRequest) {\n let cost = 0;\n for (const r of perRequest) {\n cost += costEstimator({\n modelName: r.modelName,\n inputTokens: Number(r.usage?.prompt_tokens) || 0,\n outputTokens: Number(r.usage?.completion_tokens) || 0,\n cachedInputTokens: Number(r.usage?.prompt_tokens_details?.cached_tokens) || 0,\n reasoningTokens: Number(r.usage?.completion_tokens_details?.reasoning_tokens) || 0,\n }) || 0;\n }\n if (cost > maxCostUsd) {\n return { breached: true, reason: `maxCostUsd ($${maxCostUsd}) exceeded (actual: $${cost.toFixed(4)})` };\n }\n }\n }\n return { breached: false };\n };\n let iterations = 0;\n // Run-scoped reflection counter. `state.reflections` accumulates across the\n // whole (possibly resumed) conversation, so it cannot back `maxPerRun`.\n let reflectionsThisRun = 0;\n const onStateChange = config?.onStateChange;\n const checkpointReason = config?.checkpointReason;\n let pausedStage: string | null = null;\n\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n\n const isCancelled = () => {\n const ctx: any = state.ctx || {};\n const token = ctx.__cancellationToken as any;\n const signal = ctx.__abortSignal as AbortSignal | undefined;\n const deadline = ctx.__deadline as number | undefined;\n if (signal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (token && token.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n if (deadline && Date.now() > deadline) return { cancelled: true, reason: \"timeout\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const cancelIfRequested = (stage: string) => {\n const result = isCancelled();\n if (!result.cancelled) return false;\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__cancelled = { stage, reason: result.reason, timestamp: new Date().toISOString() };\n state = { ...state, ctx } as AgentState;\n emit?.({ type: \"cancelled\", stage, reason: result.reason });\n onProgress?.({ stage, message: \"Cancelled\", detail: { reason: result.reason } });\n return true;\n };\n\n const checkpointIfRequested = (stage: string) => {\n if (typeof onStateChange !== \"function\") return false;\n let result = false;\n try {\n result = onStateChange(state);\n } catch (err) {\n console.warn('[agent-sdk] onStateChange callback error:', err);\n result = false;\n }\n if (!result) return false;\n const ctx = { ...(state.ctx || {}) };\n ctx.__paused = {\n stage,\n iteration: iterations,\n reason: checkpointReason,\n timestamp: new Date().toISOString(),\n };\n state = { ...state, ctx } as AgentState;\n pausedStage = stage;\n return true;\n };\n\n // R1: \"initial_then_after_tool\" cadence reflects once up-front (a planning\n // note) before the first model call, then behaves like \"after_tool\" inside\n // the loop. Only fire on a fresh run (no assistant turn yet, not resuming).\n if (\n reflectNode &&\n resolvedReasoning?.reflection.enabled &&\n resolvedReasoning.reflection.cadence === \"initial_then_after_tool\" &&\n resumeStage === null &&\n !state.ctx?.__awaitingApproval &&\n !state.ctx?.__awaitingUserQuestion &&\n !(state.messages as any[]).some((m) => m?.role === \"assistant\")\n ) {\n try {\n const patch = await reflectNode(state as any, \"initial_then_after_tool\");\n if (patch && Object.keys(patch).length > 0) {\n state = { ...state, ...patch } as AgentState;\n reflectionsThisRun++;\n }\n } catch {\n // never fail the run due to reflection errors\n }\n }\n\n while (iterations < iterationLimit) {\n iterations++;\n // Enforce budget limits before each iteration so we never spend extra\n // tokens after the cap has been hit.\n const budget = checkBudgetBreached();\n if (budget.breached) {\n emit?.({ type: \"metadata\", limitBreached: budget.reason });\n const ctx = { ...(state.ctx || {}), __limitBreached: budget.reason } as any;\n state = { ...state, ctx } as AgentState;\n break;\n }\n\n // Open an iteration span as parent for all ai_call / tool_call events in this turn\n const traceSession = state.ctx?.__traceSession as import(\"./types.js\").TraceSessionRuntime | undefined;\n if (traceSession) {\n const iterEvent = recordTraceEvent(traceSession, {\n type: \"agent_iteration\",\n label: `Iteration ${iterations}`,\n actor: { scope: \"agent\", name: opts.name || \"agent\", role: \"orchestrator\" },\n parentSpanId: traceSession.rootSpanId,\n });\n // Override the spanId for the iteration event so children reference it\n if (iterEvent) {\n traceSession.currentIterationSpanId = iterEvent.spanId;\n }\n }\n\n if (cancelIfRequested(\"loop\")) break;\n\n const skippingAgent = resumeStage === \"tools\";\n if (!skippingAgent) {\n if (cancelIfRequested(\"before_guardrails\")) break;\n if (checkpointIfRequested(\"before_guardrails\")) break;\n\n const preGuardrails = getGuardrailConfig(state);\n if (preGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastRequestLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: preGuardrails,\n phase: GuardrailPhase.Request,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastRequestLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const guardMessage: any = {\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Request blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Request,\n incidents: outcome.incidents,\n },\n },\n };\n state = { ...state, messages: [...state.messages, guardMessage] } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Request,\n incident: blocking,\n };\n break;\n }\n }\n }\n\n // Defer to a single decision helper for context summarization. The\n // helper returns \"trigger\" only when the context truly exceeds the\n // budget and re-running the summarizer can plausibly shrink it.\n if (summarizationThreshold !== undefined) {\n const verdict = shouldSignalSummarization(state, summarizationThreshold);\n if (verdict === \"trigger\") {\n const ctx = { ...(state.ctx || {}), __needsSummarization: true };\n state = { ...state, ctx } as AgentState;\n break;\n }\n }\n\n // Agent step\n onProgress?.({ stage: \"agent\", message: \"Invoking model\" });\n if (cancelIfRequested(\"before_agent\")) break;\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n onProgress?.({ stage: \"agent\", message: \"Model response received\" });\n\n if (checkpointIfRequested(\"after_agent\")) break;\n\n const postGuardrails = getGuardrailConfig(state);\n if (postGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastResponseLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: postGuardrails,\n phase: GuardrailPhase.Response,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastResponseLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const updatedMessages = [...state.messages];\n const replaced = updatedMessages.pop();\n updatedMessages.push({\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Response blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n replaced,\n },\n },\n } as any);\n state = { ...state, messages: updatedMessages } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Response,\n incident: blocking,\n replaced,\n };\n break;\n } else if (outcome.incidents.length > 0) {\n const last = state.messages[state.messages.length - 1] as any;\n if (last) {\n last.metadata = {\n ...(last.metadata || {}),\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n },\n };\n }\n }\n }\n }\n } else {\n resumeStage = null;\n }\n\n const lastMsg: any = state.messages[state.messages.length - 1];\n // Use the owning assistant turn's UNRESOLVED tool_calls, not literally the\n // last message. On resume after a sub-agent human-input pause the last\n // message can be a completed sibling tool result; reading its (absent)\n // tool_calls would strand the paused delegating tool. selectPendingToolCalls\n // is identical to lastMsg.tool_calls on the normal path.\n const toolCalls: any[] = selectPendingToolCalls(state.messages);\n const toolCallCount = state.toolCallCount || 0;\n\n // Tool limit finalize gate\n if (state.ctx?.__finalizedDueToToolLimit) {\n break;\n }\n if (toolCallCount >= maxToolCalls && toolCalls.length > 0) {\n state = { ...state, ...(await finalizeNode(state)) } as AgentState;\n // One more assistant turn will occur, but without more tools ideally\n continue;\n }\n\n if (toolCalls.length === 0) {\n if (\n soManager &&\n !(state as any).ctx?.__finalizedDueToStructuredOutput &&\n !(state as any).ctx?.__structuredOutputForceFinalize\n ) {\n // Native strategy: the provider API (e.g. OpenAI `response_format:\n // json_schema` with strict=true) guarantees the text content is valid\n // JSON matching the schema. Parse and finalize in a single call — no\n // nudges, no retries. If parsing fails we surface the error to the\n // caller rather than burning extra round-trips trying to \"fix\" it.\n if (soManager.strategy.kind === \"native\") {\n const assistantText = extractMessageText(lastMsg);\n if (assistantText) {\n const parsed = soManager.parseFromContent(assistantText);\n if (parsed.success) {\n const ctx = {\n ...(state.ctx || {}),\n __finalizedDueToStructuredOutput: true,\n __structuredOutputParsed: parsed.data,\n };\n state = { ...state, ctx } as AgentState;\n }\n }\n // Exit unconditionally for native: either we finalized or the\n // caller will receive the parse error via result.outputError.\n break;\n }\n\n // Tool-based strategy: model skipped calling `response` and emitted\n // plain text instead. Inject a one-time nudge so the loop can re-ask\n // it to call the tool.\n const nudge = soManager.buildNudgeMessage(false);\n const ctx = { ...(state.ctx || {}), __structuredOutputForceFinalize: true };\n state = { ...state, messages: [...state.messages, nudge as any], ctx } as AgentState;\n continue;\n }\n break;\n }\n\n // Run tools\n onProgress?.({ stage: \"tools\", message: \"Running tools\" });\n if (cancelIfRequested(\"before_tools\")) break;\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n onProgress?.({ stage: \"tools\", message: \"Tools finished\" });\n if (state.ctx?.__awaitingApproval) break;\n if (state.ctx?.__awaitingUserQuestion) break;\n if (checkpointIfRequested(\"after_tools\")) break;\n if (state.ctx?.__finalizedDueToStructuredOutput) break;\n\n // Post-tool reflection (piggyback). Runs only when reasoning.reflection is\n // enabled and cadence matches. Errors are swallowed inside the node so the\n // main loop is never disturbed.\n if (reflectNode && resolvedReasoning?.reflection.enabled) {\n const cadence = resolvedReasoning.reflection.cadence;\n const refl = resolvedReasoning.reflection;\n // Single source of truth for throttling:\n // - maxPerRun caps reflections within THIS invoke (run-scoped counter).\n // - everyNTurns is enforced once, here, against the last reflection's turn.\n // - shouldRunReflection only decides cadence-shape (after_tool/on_branch/…).\n const lastTurn = ((state as any).reflections?.at(-1)?.turn ?? -Infinity) as number;\n const currentTurn = state.toolCallCount || 0;\n const budgetExceeded = typeof refl.maxPerRun === \"number\" && reflectionsThisRun >= refl.maxPerRun;\n const sinceLast = currentTurn - (Number.isFinite(lastTurn) ? lastTurn : -refl.everyNTurns);\n const cadenceGap = sinceLast < refl.everyNTurns;\n // R2: a custom shouldReflect predicate overrides the built-in cadence\n // decision (throttles still apply on top).\n const cadenceWantsIt = refl.shouldReflect\n ? !!refl.shouldReflect({ state: state as any, turn: currentTurn, trigger: cadence, ranToolsThisTurn: true })\n : shouldRunReflection(cadence, state as any, true);\n if (!budgetExceeded && !cadenceGap && cadenceWantsIt) {\n try {\n const patch = await reflectNode(state as any, cadence);\n if (patch && Object.keys(patch).length > 0) {\n state = { ...state, ...patch } as AgentState;\n reflectionsThisRun++;\n }\n } catch {\n // never fail the run due to reflection errors\n }\n }\n }\n }\n\n // Best-effort structured-output finalization when the loop exited without\n // a parsed output. For native strategy we only attempt a one-shot parse of\n // the last assistant message — no extra model calls. Retries are reserved\n // for the tool-based strategy, where the model can stubbornly skip calling\n // `response` and we need to nudge it.\n if (soManager && !(state as any).ctx?.__finalizedDueToStructuredOutput) {\n const lastForParse: any = state.messages[state.messages.length - 1];\n if (lastForParse?.role === \"assistant\") {\n const assistantText = extractMessageText(lastForParse);\n if (assistantText) {\n const parsed = soManager.parseFromContent(assistantText);\n if (parsed.success) {\n const ctx = {\n ...(state.ctx || {}),\n __finalizedDueToStructuredOutput: true,\n __structuredOutputParsed: parsed.data,\n };\n state = { ...state, ctx } as AgentState;\n }\n }\n }\n }\n\n if (\n soManager &&\n soManager.strategy.kind === \"tool_based\" &&\n !(state as any).ctx?.__finalizedDueToStructuredOutput\n ) {\n const maxPostLoopRetries = soManager.maxRetries;\n for (let postRetry = 0; postRetry < maxPostLoopRetries; postRetry++) {\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n const last: any = state.messages[state.messages.length - 1];\n const lastHasToolCalls = Array.isArray(last?.tool_calls) && last.tool_calls.length > 0;\n\n if (!lastHasToolCalls) {\n const isLastAttempt = postRetry === maxPostLoopRetries - 1;\n const nudge = soManager.buildNudgeMessage(isLastAttempt);\n state = { ...state, messages: [...state.messages, nudge as any] } as AgentState;\n }\n\n try {\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n const lastAfter: any = state.messages[state.messages.length - 1];\n const toolCallsAfter: any[] = Array.isArray(lastAfter?.tool_calls) ? lastAfter.tool_calls : [];\n if (toolCallsAfter.length > 0) {\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n }\n } catch (err: unknown) {\n const errMsg = err instanceof Error ? err.message : String(err);\n emit?.({ type: \"metadata\", error: `Structured output force-finalize failed: ${errMsg}` });\n throw err;\n }\n }\n }\n\n if ((state as any).ctx?.__needsSummarization && !(opts as any)?.summarization) {\n throw new Error(\n \"Agent context exceeded the available budget before a final assistant response could be generated. Reduce tool response size or use createSmartAgent with summarization enabled.\"\n );\n }\n\n // Safety: detect abnormal loop exit where the last message is a tool response\n // but no valid exit condition is active (approval, cancellation, checkpoint,\n // structured-output finalize, summarization signal).\n // This catches edge cases like exhausted iteration budget or silent model errors\n // that would otherwise leak raw tool output to the caller.\n const lastAfterLoop = state.messages[state.messages.length - 1] as any;\n if (lastAfterLoop?.role === 'tool' && !pausedStage) {\n const isExpectedExit =\n state.ctx?.__awaitingApproval ||\n state.ctx?.__awaitingUserQuestion ||\n state.ctx?.__cancelled ||\n state.ctx?.__finalizedDueToStructuredOutput ||\n state.ctx?.__finalizedDueToToolLimit ||\n state.ctx?.__needsSummarization ||\n state.ctx?.__limitBreached;\n if (!isExpectedExit) {\n throw new Error(\n \"Agent loop terminated with a pending tool response but no subsequent model invocation. \" +\n \"This usually indicates a model provider error or exhausted iteration budget.\"\n );\n }\n }\n\n if (!pausedStage && typeof onStateChange === \"function\" && onStateChange(state)) {\n checkpointIfRequested(\"after_loop\");\n }\n\n return state;\n }\n\n const invokeAgent = async (input: AgentState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // Install custom token counter for the duration of this invoke. The\n // setter is process-wide but we restore it in `finally` below so nested\n // / concurrent invokes do not poison one another's counter.\n const userTokenCounter = (opts as any).tokenCounter as ((text: string) => number) | undefined;\n if (userTokenCounter) {\n // Lazy import to avoid circular deps when this module is preloaded.\n const { setTokenCounter } = await import(\"./utils/utilTokens.js\");\n setTokenCounter(userTokenCounter);\n }\n const callerOnEvent = config?.onEvent;\n const onEvent = askUserOnQuestion\n ? (event: SmartAgentEvent) => {\n if (event && (event as any).type === \"user_question\") {\n try { askUserOnQuestion(event as any); } catch (err) { console.warn('[agent-sdk] humanInTheLoop.askUser.onQuestion error:', err); }\n }\n callerOnEvent?.(event);\n }\n : callerOnEvent;\n const onProgress = config?.onProgress;\n const onStream = config?.onStream;\n const streamEnabled = config?.stream === true;\n const emit = (e: SmartAgentEvent) => { try { onEvent?.(e); } catch (err) { console.warn('[agent-sdk] onEvent callback error:', err); } };\n const emitProgress = (progress: { stage?: string; message?: string; percent?: number; detail?: any }) => {\n try { onProgress?.(progress); } catch (err) { console.warn('[agent-sdk] onProgress callback error:', err); }\n emit({ type: \"progress\", ...progress });\n };\n const traceSession = createTraceSession(opts);\n\n const ctx: Record<string, any> = {\n ...(input.ctx || {}),\n __onEvent: onEvent,\n __onProgress: emitProgress,\n __onStream: onStream,\n __streaming: streamEnabled,\n };\n if (traceSession) ctx.__traceSession = traceSession;\n if (config?.cancellationToken) ctx.__cancellationToken = config.cancellationToken;\n if ((config?.cancellationToken as AbortSignal | undefined)?.aborted !== undefined) {\n ctx.__abortSignal = config?.cancellationToken as AbortSignal;\n }\n if (config?.timeoutMs && config.timeoutMs > 0) {\n ctx.__deadline = Date.now() + config.timeoutMs;\n }\n\n const runtimeWithInvokeLimits: AgentRuntimeConfig = config?.limits\n ? { ...runtime, limits: { ...(runtime.limits || {}), ...config.limits } }\n : runtime;\n\n const initial: AgentState = {\n messages: input.messages || [],\n toolCallCount: input.toolCallCount || 0,\n toolCache: input.toolCache || {},\n toolHistory: input.toolHistory || [],\n metadata: input.metadata,\n ctx,\n pendingApprovals: input.pendingApprovals || [],\n pendingUserQuestions: input.pendingUserQuestions || [],\n agent: input.agent || runtimeWithInvokeLimits,\n usage: input.usage || { perRequest: [], totals: {} },\n };\n\n let res: AgentState;\n try {\n await startStreamingSession(traceSession, runtimeWithInvokeLimits);\n res = await runLoop(initial, config, emit);\n } catch (err: any) {\n await finalizeTraceSession(traceSession, {\n agentRuntime: runtime,\n status: \"error\",\n error: { message: err?.message, stack: err?.stack },\n });\n if (userTokenCounter) {\n const { setTokenCounter } = await import(\"./utils/utilTokens.js\");\n setTokenCounter(undefined);\n }\n throw err;\n } finally {\n // Restore default token counter as soon as the loop ends so subsequent\n // unrelated invokes do not inherit it.\n if (userTokenCounter) {\n try {\n const { setTokenCounter } = await import(\"./utils/utilTokens.js\");\n setTokenCounter(undefined);\n } catch {\n // ignore\n }\n }\n }\n\n await finalizeTraceSession(traceSession, {\n agentRuntime: res.agent || runtime,\n status: \"success\",\n });\n\n // The base loop can exit purely to signal SmartAgent that the conversation\n // needs summarization before the model can be invoked again. In that case the\n // last assistant message in state can be a synthetic summarize_context call\n // produced by the previous summarization pass — it is internal runtime\n // metadata, not a real terminal answer. Treat this as \"no final answer yet\"\n // and let the SmartAgent driver loop continue without leaking the synthetic\n // marker as visible assistant content / finalAnswer event.\n const isTransientSummarizationExit = !!(res as any).ctx?.__needsSummarization;\n const finalAssistantMsg = isTransientSummarizationExit\n ? undefined\n : getLastAssistantMessage(res.messages);\n const finalIsSyntheticSummary = !isTransientSummarizationExit\n && finalAssistantMsg\n && isSyntheticSummaryMessage(finalAssistantMsg);\n const content = (isTransientSummarizationExit || finalIsSyntheticSummary)\n ? \"\"\n : extractMessageText(finalAssistantMsg);\n\n let parsed: TOutput | undefined = undefined;\n let outputError: StructuredOutputError | undefined = undefined;\n\n if (soManager) {\n if ((res as any).ctx?.__structuredOutputParsed) {\n // Primary path: tool-based finalization succeeded\n parsed = (res as any).ctx.__structuredOutputParsed as TOutput;\n } else if (content) {\n // Fallback: try to parse structured output from assistant message content\n const fallbackResult = soManager.parseFromContent(content);\n if (fallbackResult.success) {\n parsed = fallbackResult.data;\n } else {\n outputError = fallbackResult.error;\n }\n } else if (!isTransientSummarizationExit) {\n // No content at all — report no_output error\n const noResult = soManager.noOutputResult(1);\n if (!noResult.success) {\n outputError = noResult.error;\n }\n }\n }\n\n // Only emit a final answer event when the loop actually produced one.\n // Suppress when we exited transiently for summarization (SmartAgent will\n // retry) or when the only candidate is the synthetic summary marker.\n if (!isTransientSummarizationExit && !finalIsSyntheticSummary) {\n emit({ type: \"finalAnswer\", content });\n if (streamEnabled && content) {\n onStream?.({ text: content, isFinal: true });\n emit({ type: \"stream\", text: content, isFinal: true });\n }\n }\n\n return {\n content,\n output: parsed as TOutput | undefined,\n outputError,\n metadata: { usage: (res as any).usage },\n messages: res.messages,\n state: res as AgentState,\n };\n };\n\n const snapshotState = (state: AgentState, options?: SnapshotOptions) => captureSnapshot(state, options);\n\n const resumeAgent = async (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => {\n const restoredState = restoreSnapshot(snapshot, restoreOptions);\n return invokeAgent(restoredState, config);\n };\n\n const resolveToolApproval = (state: AgentState, resolution: ToolApprovalResolution) =>\n resolveToolApprovalState(state, resolution);\n\n const resolveUserQuestion = (state: AgentState, resolution: UserQuestionResolution) =>\n resolveUserQuestionState(state, resolution);\n\n const instance: AgentInstance<TOutput> = {\n invoke: invokeAgent,\n snapshot: snapshotState,\n resume: resumeAgent,\n resolveToolApproval,\n resolveUserQuestion,\n asTool: ({ toolName, description, inputDescription }: { toolName: string; description?: string; inputDescription?: string }) => {\n const schema = z.object({ input: z.string().describe(inputDescription || \"Input for delegated agent\") });\n const delegatedTool: any = createTool({\n name: toolName,\n description: description || `Delegate task to agent ${opts.name || 'Agent'}`,\n schema,\n func: async ({ input }) => {\n // Read parent runtime delegation policy + current depth from the\n // injected _stateRef. The toolsNode wires this on every call.\n const ref: any = delegatedTool._stateRef;\n const parentCtx: any = ref.ctx || {};\n const parentMessages: any[] = Array.isArray(ref.messages) ? ref.messages : [];\n const parentRuntime: any = ref.parentRuntime;\n // The parent runtime is whichever agent is currently executing.\n // Pull its resolved delegation policy if available (SmartAgent only).\n const resolvedSmart = parentRuntime?.smart || (opts as any).__resolvedSmart;\n const delegationPolicy = resolvedSmart?.delegation || {\n mode: \"role_based\",\n maxDelegationDepth: 2,\n maxChildCalls: 4,\n childContextPolicy: \"scoped\",\n };\n const currentDepth = Number(parentCtx.__delegationDepth) || 0;\n if (delegationPolicy.mode === \"off\") {\n return { error: \"Delegation disabled by runtime policy.\" };\n }\n if (currentDepth >= delegationPolicy.maxDelegationDepth) {\n return {\n error: `Delegation depth limit reached (${delegationPolicy.maxDelegationDepth}). Refusing nested call.`,\n };\n }\n parentCtx.__delegatedCallCount = (parentCtx.__delegatedCallCount || 0) + 1;\n if (parentCtx.__delegatedCallCount > delegationPolicy.maxChildCalls) {\n return {\n error: `Child-call budget exhausted (${delegationPolicy.maxChildCalls}).`,\n };\n }\n\n // Apply childContextPolicy when seeding the child agent (shared with\n // the sub-agent primitive via seedChildMessages).\n const childMessages = seedChildMessages(\n delegationPolicy.childContextPolicy as any,\n parentMessages as any,\n input,\n );\n\n const childCtx = { __delegationDepth: currentDepth + 1 };\n // Forward the parent's event/streaming/cancellation wiring so a\n // delegated child surfaces its progress to the host (previously the\n // child ran \"dark\"). Events are stamped with the child's name.\n const childConfig = {\n onEvent: parentCtx.__onEvent\n ? (e: any) => {\n if (e?.type === \"finalAnswer\" || e?.type === \"metadata\") return;\n try { parentCtx.__onEvent({ ...e, delegatedTo: opts.name }); } catch { /* ignore */ }\n }\n : undefined,\n onProgress: parentCtx.__onProgress,\n onStream: parentCtx.__streaming && parentCtx.__onStream\n ? (chunk: any) => { if (!chunk?.isFinal) parentCtx.__onStream(chunk); }\n : undefined,\n stream: Boolean(parentCtx.__streaming),\n cancellationToken: parentCtx.__cancellationToken ?? parentCtx.__abortSignal,\n };\n const res = await instance.invoke({ messages: childMessages, ctx: childCtx } as any, childConfig as any);\n return {\n content: res.content,\n output: res.output,\n summary: res.state?.summaries?.[res.state.summaries.length - 1],\n };\n }\n });\n // Eagerly initialize _stateRef so the parent's toolsNode (which only\n // writes into existing _stateRef objects) can deposit `parentRuntime`,\n // `ctx`, and `messages` before the delegation tool runs.\n delegatedTool._stateRef = {};\n return delegatedTool;\n },\n asHandoff: ({ toolName, description, schema }: { toolName?: string; description?: string; schema?: ZodSchema<any>; }): HandoffDescriptor => {\n const finalName = toolName || `handoff_to_${runtime.name || 'agent'}`;\n const zschema = schema || z.object({ reason: z.string().describe('Reason for handoff') });\n createTool({\n name: finalName,\n description: description || `Handoff control to agent ${runtime.name || 'Agent'}`,\n schema: zschema,\n func: async (_args: any) => ({ __handoff: { runtime } })\n });\n return { type: 'handoff', toolName: finalName, description: description || '', schema: zschema, target: instance } as any;\n },\n __runtime: runtime,\n };\n\n if (opts.handoffs && Array.isArray(opts.handoffs)) {\n const handoffTools = opts.handoffs.map(h => {\n const schema = h.schema || z.object({ reason: z.string().describe('Reason for handoff') });\n return createTool({\n name: h.toolName,\n description: h.description || `Handoff to ${h.target.__runtime.name || 'agent'}`,\n schema,\n func: async (_args: any) => ({ __handoff: { runtime: h.target.__runtime } })\n });\n });\n runtime.tools = [...runtime.tools, ...handoffTools];\n }\n\n return instance;\n}\n","/**\n * Detects synthetic summarization messages injected by the contextSummarize node.\n * Shared across agent.ts, decisions.ts, and contextSummarize.ts to avoid duplication.\n */\nexport function isSyntheticSummaryMessage(message: any): boolean {\n if (!message) return false;\n if (message.role === 'tool' && message.name === 'summarize_context') {\n return true;\n }\n\n if (message.role === 'assistant' && Array.isArray(message.tool_calls)) {\n return message.tool_calls.some((toolCall: any) => {\n const toolName = toolCall?.function?.name || toolCall?.name;\n return toolName === 'summarize_context';\n });\n }\n\n return false;\n}\n","import type { ZodSchema } from \"zod\";\nimport type {\n StructuredOutputStrategy,\n StructuredOutputResult,\n StructuredOutputError,\n StructuredOutputManagerConfig,\n} from \"./types.js\";\n// formatZodError available from ./types.js for strategy implementations\nimport type { ToolBasedStrategy } from \"./toolStrategy.js\";\nimport type { NativeJsonSchemaStrategy } from \"./nativeStrategy.js\";\nimport type { ToolInterface } from \"../types.js\";\n\n/**\n * Centralized manager for structured output across both base Agent and SmartAgent.\n *\n * Responsibilities:\n * - Prepare tools or response_format depending on the resolved strategy\n * - Build system prompt hints tailored to the strategy\n * - Build nudge/correction prompts for retries\n * - Parse final output from tool result or assistant content\n * - Report structured errors (never silently swallow)\n */\nexport class StructuredOutputManager<T> {\n readonly strategy: StructuredOutputStrategy;\n readonly schema: ZodSchema<T>;\n readonly maxRetries: number;\n\n constructor(\n schema: ZodSchema<T>,\n strategy: StructuredOutputStrategy,\n config?: StructuredOutputManagerConfig,\n ) {\n this.schema = schema;\n this.strategy = strategy;\n this.maxRetries = config?.maxRetries ?? 2;\n }\n\n // --- Setup Phase ---\n\n /**\n * Get the `response` tool for tool-based strategy.\n * Returns undefined for native strategy (no tool needed).\n */\n getResponseTool(): ToolInterface | undefined {\n if (this.strategy.kind !== \"tool_based\") return undefined;\n return (this.strategy as ToolBasedStrategy).createResponseTool(this.schema);\n }\n\n /**\n * Get response_format config for native strategy.\n * Returns undefined for tool-based strategy.\n */\n getResponseFormat(): Record<string, any> | undefined {\n if (this.strategy.kind !== \"native\") return undefined;\n return (this.strategy as NativeJsonSchemaStrategy).buildResponseFormat(this.schema);\n }\n\n /**\n * Build the system prompt hint that tells the model how to produce structured output.\n */\n buildSystemPromptHint(): string {\n if (this.strategy.kind === \"native\") {\n return [\n \"A structured output schema is active.\",\n \"Your response MUST be valid JSON matching the output schema.\",\n \"Do NOT wrap the JSON in code fences or add any text before/after it.\",\n ].join(\"\\n\");\n }\n\n // tool_based\n return [\n \"A structured output schema is active.\",\n \"Do NOT output the final JSON directly as an assistant message.\",\n \"When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).\",\n \"Call it exactly once then STOP producing further assistant messages.\",\n ].join(\"\\n\");\n }\n\n /**\n * Build a nudge message for when the model didn't produce structured output.\n * Used by the agent loop when it needs to retry.\n */\n buildNudgeMessage(isLastAttempt: boolean): { role: string; content: string } {\n if (this.strategy.kind === \"native\") {\n return {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST respond with valid JSON matching the schema.\",\n \"Do NOT include any text outside the JSON object.\",\n isLastAttempt ? \"This is your FINAL attempt. Produce the JSON NOW.\" : \"\",\n ].filter(Boolean).join(\"\\n\"),\n };\n }\n\n // tool_based\n return {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST now call tool `response` with the final JSON object that matches the schema.\",\n \"Do not write the JSON in the assistant message.\",\n \"Call `response` exactly once, then stop.\",\n isLastAttempt ? \"Do NOT call any other tools. Produce the response NOW based on whatever information you have gathered so far.\" : \"\",\n ].filter(Boolean).join(\"\\n\"),\n };\n }\n\n /**\n * Build a correction message when schema validation failed.\n */\n buildCorrectionMessage(error: StructuredOutputError, _previousAttempt?: unknown): { role: string; content: string } {\n if (error.fieldErrors && error.fieldErrors.length > 0) {\n const fieldIssues = error.fieldErrors\n .map((f) => `- \"${f.path}\": ${f.message} (received: ${JSON.stringify(f.received)})`)\n .join(\"\\n\");\n\n const action = this.strategy.kind === \"native\"\n ? \"Please output corrected JSON matching the schema.\"\n : \"Please call `response` again with corrected values matching the schema.\";\n\n return {\n role: \"system\",\n content: [\n \"Your previous structured output had validation errors:\",\n fieldIssues,\n \"\",\n action,\n ].join(\"\\n\"),\n };\n }\n\n // Generic correction\n return this.buildNudgeMessage(false);\n }\n\n // --- Parse Phase ---\n\n /**\n * Try to parse structured output from the tool-based finalization result.\n * Called when __structuredOutputParsed is available in ctx.\n */\n parseFromToolResult(data: unknown): StructuredOutputResult<T> {\n return { success: true, data: data as T, attempts: 1 };\n }\n\n /**\n * Try to parse structured output from assistant message content.\n * For native strategy: content should be valid JSON.\n * For tool-based strategy: last-resort fallback extraction from text.\n */\n parseFromContent(content: string): StructuredOutputResult<T> {\n if (this.strategy.kind === \"native\") {\n const result = (this.strategy as NativeJsonSchemaStrategy).extractOutput(content, this.schema);\n if (\"data\" in result) {\n return { success: true, data: result.data, attempts: 1 };\n }\n return { success: false, error: result.error, attempts: 1, rawContent: content };\n }\n\n // tool_based fallback\n const result = (this.strategy as ToolBasedStrategy).extractFromText(content, this.schema);\n if (\"data\" in result) {\n return { success: true, data: result.data, attempts: 1 };\n }\n return { success: false, error: result.error, attempts: 1, rawContent: content };\n }\n\n /**\n * Create a \"no output\" error result.\n */\n noOutputResult(attempts: number, rawContent?: string): StructuredOutputResult<T> {\n return {\n success: false,\n error: {\n type: \"no_output\",\n message: \"Model did not produce structured output after all retry attempts.\",\n rawContent,\n },\n attempts,\n rawContent,\n };\n }\n\n /**\n * Create a \"max retries\" error result.\n */\n maxRetriesResult(lastError: StructuredOutputError, attempts: number, rawContent?: string): StructuredOutputResult<T> {\n return {\n success: false,\n error: {\n ...lastError,\n type: \"max_retries\",\n message: `Structured output failed after ${attempts} attempts: ${lastError.message}`,\n },\n attempts,\n rawContent,\n };\n }\n}\n","import type { ChildContextPolicy, Message, ToolInterface } from \"../../types.js\";\nimport type { SubagentDef, SubagentPolicy, SubagentRegistryRef } from \"./types.js\";\n\n/**\n * Pure registry helpers for the sub-agent primitive. No I/O, no agent loop —\n * the deterministic core, fully unit-testable on its own.\n */\n\n/** Look up a registry sub-agent by name. */\nexport function findSubagent(subagents: SubagentDef[], name: string): SubagentDef | undefined {\n return subagents.find((entry) => entry.name === name);\n}\n\n/** Filter the catalog to sub-agents usable now (availability gate). */\nexport async function resolveAvailableSubagents(subagents: SubagentDef[]): Promise<SubagentDef[]> {\n const out: SubagentDef[] = [];\n for (const entry of subagents) {\n const available = entry.isAvailable ? await entry.isAvailable() : true;\n if (available) out.push(entry);\n }\n return out;\n}\n\n/**\n * Spawn guard: may the run spawn `count` more children? Enforces the per-run\n * child-call budget. Depth is checked separately against the live ctx because\n * it depends on the parent's `__delegationDepth`.\n */\nexport function canSpawn(\n ref: SubagentRegistryRef,\n policy: SubagentPolicy,\n count = 1,\n): { ok: true } | { ok: false; reason: string } {\n if (policy.mode === \"off\") {\n return { ok: false, reason: \"sub-agents are disabled by runtime policy\" };\n }\n if (ref.spawnedCount + count > policy.maxChildCalls) {\n return {\n ok: false,\n reason: `child-call budget exhausted (${policy.maxChildCalls}); ${ref.spawnedCount} already spawned`,\n };\n }\n return { ok: true };\n}\n\n/** Depth guard, evaluated against the current delegation depth from ctx. */\nexport function withinDepth(\n currentDepth: number,\n policy: SubagentPolicy,\n): { ok: true } | { ok: false; reason: string } {\n if (currentDepth >= policy.maxDepth) {\n return { ok: false, reason: `delegation depth limit reached (${policy.maxDepth})` };\n }\n return { ok: true };\n}\n\n/**\n * Seed the child's initial messages from the parent transcript according to the\n * context policy. Extracted so both `asTool` delegation and the sub-agent tools\n * share ONE implementation.\n *\n * - `full` — entire parent transcript (minus its system prompt) + the input.\n * - `scoped` — last user turn + the task input.\n * - `minimal` — only the task input (default).\n *\n * The parent's system message is intentionally NOT carried over: the child agent\n * composes its own system prompt from its `SubagentDef.systemPrompt` (or role),\n * and leaking the parent's system message would suppress it.\n */\nexport function seedChildMessages(\n policy: ChildContextPolicy,\n parentMessages: Message[],\n input: string,\n): Message[] {\n const messages = (Array.isArray(parentMessages) ? parentMessages : []).filter((m) => m?.role !== \"system\");\n switch (policy) {\n case \"full\":\n return [...messages, { role: \"user\", content: input } as Message];\n case \"scoped\": {\n const lastUser = [...messages].reverse().find((m) => m?.role === \"user\");\n return [\n ...(lastUser ? [lastUser] : []),\n { role: \"user\", content: input } as Message,\n ];\n }\n case \"minimal\":\n default:\n return [{ role: \"user\", content: input } as Message];\n }\n}\n\n/**\n * Resolve a sub-agent's declared tool surface to concrete tools. `string[]`\n * entries are matched (by name) against the parent's live tool set so an ad-hoc\n * or registry sub-agent can borrow a subset of the parent's capabilities.\n */\nexport async function resolveSubagentTools(\n declared: SubagentDef[\"tools\"] | string[] | undefined,\n parentTools: ToolInterface[],\n): Promise<ToolInterface[]> {\n if (!declared) return [];\n if (typeof declared === \"function\") {\n return await declared();\n }\n if (Array.isArray(declared) && declared.length > 0 && typeof declared[0] === \"string\") {\n const wanted = new Set(declared as string[]);\n return parentTools.filter((tool) => wanted.has((tool as any)?.name));\n }\n return declared as ToolInterface[];\n}\n\n/** The cheap catalog block the model always sees in its system prompt. */\nexport function buildSubagentCatalogBlock(\n subagents: SubagentDef[],\n policy: SubagentPolicy,\n toolNames: { delegate: string; spawn: string; parallel: string },\n): string {\n const lines: string[] = [\"<available_subagents>\"];\n const adhoc = policy.mode === \"registry_and_adhoc\";\n lines.push(\n \"Delegate self-contained subtasks to focused sub-agents. Each runs with an \" +\n \"isolated context and returns a concise result. Use them to decompose hard \" +\n \"problems; do NOT delegate trivial steps you can do directly.\",\n );\n if (subagents.length > 0) {\n lines.push(`Call ${toolNames.delegate}(subagent, input) for a named sub-agent:`);\n for (const entry of subagents) {\n lines.push(`- ${entry.name}: ${entry.header}`);\n }\n }\n if (adhoc) {\n lines.push(\n `Call ${toolNames.spawn}({ role, prompt, input, tools? }) to create a sub-agent on the fly.`,\n );\n }\n lines.push(\n `Call ${toolNames.parallel}({ tasks: [...] }) to run up to ${policy.maxParallel} ` +\n \"independent subtasks concurrently (no human-input tools inside parallel children).\",\n );\n lines.push(\"</available_subagents>\");\n return lines.join(\"\\n\");\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\nexport function createAgentNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n // Prefer dynamic runtime config from state.agent, fallback to initial opts\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n systemPrompt: opts.systemPrompt,\n todoListPrompt: opts.todoListPrompt,\n limits: opts.limits,\n useTodoList: opts.useTodoList,\n outputSchema: (opts as any).outputSchema,\n };\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n // 3) Prepend a single, fresh system prompt for this turn only\n const structuredOutputHint = runtime.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const systemMsg = {\n role: 'system',\n content: buildSystemPrompt(\n [runtime.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n runtime.useTodoList === true,\n runtime.name || \"Agent\",\n runtime.todoListPrompt,\n )\n } as any;\n const messages = [systemMsg, ...state.messages];\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const promptMessages = [systemMsg, ...state.messages];\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(promptMessages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n let response: any;\n try {\n response = await modelWithTools.invoke(promptMessages);\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: promptMessages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...messages,\n response as any,\n ];\n\n // ---- Usage tracking (per-request) ----\n const rawUsage = (response as any)?.usage\n || (response as any)?.usage_metadata\n || (response as any)?.response_metadata?.token_usage\n || (response as any)?.response_metadata?.tokenUsage\n || (response as any)?.response_metadata?.usage\n || (response as any)?.response_metadata?.usage_metadata\n || (response as any)?.response_metadata?.usageMetadata;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const providerName = getProviderName((runtime as any).model || (opts as any).model);\n const durationMs = Date.now() - start;\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes,\n model: modelName,\n provider: providerName,\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n // Normalize token counts to aggregate totals\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n // Attach back so next nodes see updated state\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","// Lightweight message helpers to avoid hard dependency on LangChain\nimport type {\n SmartAgentOptions,\n SmartState,\n BaseMessage,\n SmartAgentEvent,\n StructuredSummary,\n SummarizationEvent,\n SummaryIntegrityCheck,\n} from \"../types.js\";\nimport { countApproxTokens, countMessagesTokens } from \"../utils/utilTokens.js\";\nimport { isSyntheticSummaryMessage } from \"../utils/syntheticMessages.js\";\nimport { recordTraceEvent, sanitizeTracePayload } from \"../utils/tracing.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\nimport { renderStructuredSummary } from \"../smart/contextPolicy.js\";\nimport { renderRetainedToolMessage, resolveSummarizationRetention, summarizeObject } from \"../smart/toolResponses.js\";\n\n// Helper for lightweight message construction\nconst systemMessage = (content: string) => ({ role: 'system', content });\nconst humanMessage = (content: string) => ({ role: 'user', content });\n\n/**\n * Validates message sequence to ensure OpenAI API compatibility.\n * Every tool message must follow an assistant message with a matching tool_call.\n * This prevents \"messages with role 'tool' must be a response to a preceeding message with 'tool_calls'\" errors.\n */\nfunction validateMessageSequence(messages: BaseMessage[]): BaseMessage[] {\n const validated: BaseMessage[] = [];\n const pendingToolCallIds = new Set<string>();\n \n for (const m of messages) {\n if (m.role === 'assistant') {\n // Clear any pending tool calls when we see a new assistant message without tool_calls\n if (!m.tool_calls || m.tool_calls.length === 0) {\n pendingToolCallIds.clear();\n } else {\n // Register new tool calls\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) pendingToolCallIds.add(tc.id);\n });\n }\n validated.push(m);\n } else if (m.role === 'tool') {\n const toolCallId = m.tool_call_id;\n // Only include tool messages that have a pending (expected) tool_call_id\n if (toolCallId && pendingToolCallIds.has(toolCallId)) {\n pendingToolCallIds.delete(toolCallId);\n validated.push(m);\n }\n // Otherwise, this is an orphan tool message - skip it\n } else {\n // user, system messages - always include\n validated.push(m);\n }\n }\n \n return validated;\n}\n\n/** Extracts a JSON object from text, handling markdown code fences or raw JSON. */\nfunction extractJsonObject(text: string): string | null {\n const fenced = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (fenced?.[1]) return fenced[1].trim();\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start >= 0 && end > start) {\n return text.slice(start, end + 1);\n }\n return null;\n}\n\nfunction normalizeStructuredSummary(input: any, fallbackText: string): StructuredSummary {\n const summary: StructuredSummary = {\n stable_facts: Array.isArray(input?.stable_facts)\n ? input.stable_facts\n .filter((fact: any) => fact && typeof fact === \"object\")\n .map((fact: any) => ({\n key: String(fact.key || \"unknown\"),\n value: String(fact.value || \"\"),\n confidence: typeof fact.confidence === \"number\" ? fact.confidence : 0.7,\n source: fact.source ? String(fact.source) : undefined,\n }))\n : [],\n active_goals: Array.isArray(input?.active_goals) ? input.active_goals.map((goal: any) => String(goal)) : [],\n open_questions: Array.isArray(input?.open_questions) ? input.open_questions.map((question: any) => String(question)) : [],\n discarded_obsolete: Array.isArray(input?.discarded_obsolete || input?.obsolete_discarded)\n ? (input.discarded_obsolete || input.obsolete_discarded).map((item: any) => String(item))\n : [],\n rawSummary: typeof input?.rawSummary === \"string\" ? input.rawSummary : fallbackText,\n };\n\n if (summary.stable_facts.length === 0 && fallbackText) {\n const importantLines = fallbackText\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .slice(0, 8);\n summary.stable_facts = importantLines.map((line, index) => ({\n key: `fact_${index + 1}`,\n value: line,\n confidence: 0.5,\n }));\n }\n\n return summary;\n}\n\nfunction normalizeFactKeySegment(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n || \"item\";\n}\n\nfunction extractCanonicalFacts(messages: BaseMessage[]): StructuredSummary[\"stable_facts\"] {\n const facts = new Map<string, StructuredSummary[\"stable_facts\"][number]>();\n\n for (const message of messages) {\n const content = typeof message.content === \"string\"\n ? message.content\n : Array.isArray(message.content)\n ? message.content.map((part: any) => part?.text ?? part?.content ?? String(part ?? \"\")).join(\"\\n\")\n : \"\";\n if (!content) continue;\n\n const lines = content.split(\"\\n\").map((line) => line.trim()).filter(Boolean);\n for (const line of lines) {\n if (!/^[A-Z0-9_]+\\|/.test(line) || !line.includes(\"=\")) continue;\n\n const segments = line.split(\"|\").map((segment) => segment.trim()).filter(Boolean);\n const label = segments[0];\n const entries = segments.slice(1)\n .map((segment) => {\n const eqIndex = segment.indexOf(\"=\");\n if (eqIndex <= 0) return null;\n return {\n key: segment.slice(0, eqIndex).trim(),\n value: segment.slice(eqIndex + 1).trim(),\n };\n })\n .filter((entry): entry is { key: string; value: string } => Boolean(entry?.key));\n if (entries.length === 0) continue;\n\n const identifier = entries.find((entry) => [\"code\", \"id\", \"project\", \"name\", \"key\"].includes(entry.key.toLowerCase()))?.value;\n const keyPrefix = [normalizeFactKeySegment(label), identifier ? normalizeFactKeySegment(identifier) : undefined]\n .filter(Boolean)\n .join(\".\");\n\n for (const entry of entries) {\n const normalizedEntryKey = normalizeFactKeySegment(entry.key);\n const factKey = keyPrefix ? `${keyPrefix}.${normalizedEntryKey}` : `${normalizeFactKeySegment(label)}.${normalizedEntryKey}`;\n facts.set(factKey, {\n key: factKey,\n value: entry.value,\n confidence: 0.98,\n source: \"canonical_tool_output\",\n });\n }\n }\n }\n\n return [...facts.values()];\n}\n\nfunction isSummarizedToolPlaceholder(content: BaseMessage[\"content\"]): boolean {\n return typeof content === \"string\"\n && (\n content === \"SUMMARIZED\"\n || content.startsWith(\"SUMMARIZED_TOOL_RESPONSE\")\n || content.startsWith(\"ARCHIVED_TOOL_RESPONSE\")\n || content.startsWith(\"STRUCTURED_TOOL_RESPONSE\")\n || content.startsWith(\"DROPPED_TOOL_RESPONSE\")\n );\n}\n\nfunction findToolHistoryEntry(state: SmartState, toolCallId?: string, toolName?: string) {\n const entries = [\n ...(state.toolHistory || []),\n ...(state.toolHistoryArchived || []),\n ];\n\n if (toolCallId) {\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index];\n if (entry?.tool_call_id === toolCallId) {\n return entry;\n }\n }\n }\n\n if (!toolName) {\n return undefined;\n }\n\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index];\n if (entry?.toolName === toolName) {\n return entry;\n }\n }\n\n return undefined;\n}\n\nfunction mergeStableFacts(\n summary: StructuredSummary,\n additionalFacts: StructuredSummary[\"stable_facts\"],\n): StructuredSummary {\n if (additionalFacts.length === 0) return summary;\n\n const merged = new Map(summary.stable_facts.map((fact) => [fact.key, fact]));\n for (const fact of additionalFacts) {\n const existing = merged.get(fact.key);\n if (!existing || (fact.confidence || 0) >= (existing.confidence || 0)) {\n merged.set(fact.key, fact);\n }\n }\n\n return {\n ...summary,\n stable_facts: [...merged.values()],\n };\n}\n\nfunction runIntegrityCheck(previous: StructuredSummary | undefined, current: StructuredSummary): SummaryIntegrityCheck {\n const notes: string[] = [];\n const previousKeys = new Set((previous?.stable_facts || []).map((fact) => fact.key));\n const currentKeys = new Set(current.stable_facts.map((fact) => fact.key));\n const obsoleteKeys = new Set(current.discarded_obsolete);\n const criticalFactLoss = [...previousKeys].some((key) => !obsoleteKeys.has(key) && !currentKeys.has(key));\n const obsoleteFactRevived = current.stable_facts.some((fact) => obsoleteKeys.has(fact.key));\n\n if (criticalFactLoss) {\n notes.push(\"Missing previously retained facts; merged forward during integrity repair.\");\n }\n if (obsoleteFactRevived) {\n notes.push(\"Obsolete facts reappeared; removed during integrity repair.\");\n }\n\n return {\n passed: !criticalFactLoss && !obsoleteFactRevived,\n criticalFactLoss,\n obsoleteFactRevived,\n notes,\n };\n}\n\nfunction repairStructuredSummary(previous: StructuredSummary | undefined, current: StructuredSummary, integrity: SummaryIntegrityCheck): StructuredSummary {\n if (!previous) return current;\n const nextFacts = [...current.stable_facts];\n if (integrity.criticalFactLoss) {\n const existingKeys = new Set(nextFacts.map((fact) => fact.key));\n for (const fact of previous.stable_facts) {\n if (!existingKeys.has(fact.key) && !current.discarded_obsolete.includes(fact.key)) {\n nextFacts.push(fact);\n }\n }\n }\n const filteredFacts = integrity.obsoleteFactRevived\n ? nextFacts.filter((fact) => !current.discarded_obsolete.includes(fact.key))\n : nextFacts;\n return { ...current, stable_facts: filteredFacts };\n}\n\n/**\n * Creates the summarization node.\n * \n * Logic:\n * 1. Check if summarization is enabled.\n * 2. Convert current conversation history into a text suitable for summarization.\n * 3. Invoke the model to generate a summary of the conversation.\n * 4. Rewrite the message history:\n * - All tool messages (role='tool') have their content replaced with \"SUMMARIZED\".\n * - A new assistant message calling 'summarize_context' is appended.\n * - A new tool message with the summary content is appended.\n */\nexport function createContextSummarizeNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n const config = resolved.summarization;\n if (!config.enable) return {};\n\n // Prefer the live runtime model (state.agent.model) so handoffs and\n // per-invoke model overrides also reach the summarizer. Falls back to the\n // factory-time model when no runtime is attached.\n const model = (state.agent as any)?.model || (opts as any).model;\n const messages = state.messages || [];\n\n // Get onEvent and traceSession from state context\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n\n // Check if there are any tool messages that can be compressed.\n // Critical tools and per-tool overrides set to keep_full are skipped.\n const compressableMessages = messages.filter(\n (m) => {\n if (m.role !== 'tool') return false;\n if (isSummarizedToolPlaceholder(m.content)) return false;\n if (isSyntheticSummaryMessage(m)) return false;\n const policy = resolveSummarizationRetention(m.name || '', resolved);\n if (policy === 'keep_full') return false;\n return true;\n },\n );\n if (compressableMessages.length === 0) {\n // Nothing to compress. If we summarize, we only ADD tokens (summary).\n // Abort to prevent infinite loops or growing context.\n return {};\n }\n\n // Calculate token count before summarization\n const tokenCountBefore = countMessagesTokens(messages);\n\n // 1. Generate Summary\n // We convert current messages to a simple text format for the model to summarize.\n // IMPORTANT: We must truncate the conversation to fit within summaryPromptMaxTokens\n // to avoid \"input too large\" errors from the model.\n \n // Build conversation text from RECENT messages, respecting token budget\n const summaryPromptMaxTokens = config.summaryPromptMaxTokens;\n // Reserve ~500 tokens for the system prompt and instructions\n const availableTokensForConversation = summaryPromptMaxTokens - 500;\n \n // Build messages from newest to oldest, stopping when we hit the budget\n const messageTexts: string[] = [];\n let accumulatedTokens = 0;\n \n // Process messages from end to start (most recent first)\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (isSyntheticSummaryMessage(m) || isSyntheticSummaryMessage(m)) {\n continue;\n }\n let content = \"\";\n if (typeof m.content === \"string\") content = m.content;\n else if (Array.isArray(m.content)) {\n content = m.content.map((c: any) => c.text || JSON.stringify(c)).join(\" \");\n }\n\n // If this is a tool message that was already summarized in a previous pass,\n // try to recover the original output from toolHistory so the summarizer\n // can produce a meaningful summary instead of summarizing placeholders.\n if (m.role === 'tool' && isSummarizedToolPlaceholder(content)) {\n const historyEntry = findToolHistoryEntry(state, m.tool_call_id, m.name);\n if (historyEntry) {\n const original = historyEntry.rawOutput ?? historyEntry.output;\n content = typeof original === 'string' ? original : JSON.stringify(original);\n } else {\n // No history entry found — use the summary hint from the placeholder\n // (already present in content), which is better than nothing.\n }\n }\n \n // Truncate individual message content if it's too large (e.g., huge tool outputs)\n const maxContentLength = 2000; // ~500 tokens per message max\n if (content.length > maxContentLength) {\n content = content.substring(0, maxContentLength) + \"... [TRUNCATED]\";\n }\n \n let prefix = `${m.role.toUpperCase()}`;\n if (m.name) prefix += ` (${m.name})`;\n \n const messageText = `${prefix}: ${content}`;\n const messageTokens = countApproxTokens(messageText);\n \n if (accumulatedTokens + messageTokens > availableTokensForConversation) {\n // We've hit our budget, stop adding more messages\n // Add a note that earlier messages were omitted\n messageTexts.unshift(\"[Earlier conversation history omitted for brevity]\");\n break;\n }\n \n messageTexts.unshift(messageText);\n accumulatedTokens += messageTokens;\n }\n \n const conversationText = messageTexts.join(\"\\n\\n\");\n const canonicalFacts = extractCanonicalFacts(compressableMessages);\n\n const previousSummary = Array.isArray(state.summaries) && state.summaries.length > 0\n ? state.summaries[state.summaries.length - 1]\n : \"\";\n const previousStructuredSummary = Array.isArray(state.summaryRecords) && state.summaryRecords.length > 0\n ? state.summaryRecords[state.summaryRecords.length - 1]\n : undefined;\n\n const defaultPrompt = `Summarize the conversation into strict JSON.\n\nReturn exactly one JSON object with this schema:\n{\n \"stable_facts\": [{ \"key\": string, \"value\": string, \"confidence\": number }],\n \"active_goals\": [string],\n \"open_questions\": [string],\n \"discarded_obsolete\": [string],\n \"rawSummary\": string\n}\n\nRules:\n- Keep stable_facts only for facts that future turns must remember.\n- Put invalidated or superseded fact keys in discarded_obsolete.\n- Preserve active_goals still relevant to the user.\n- Preserve unresolved questions.\n- Do not include prose outside JSON.\n- Target compression ratio: ${config.summaryCompressionRatioTarget}.\n- Summary mode: ${config.summaryMode}.\n\nPrevious summary text:\n${previousSummary || \"(none)\"}\n\nPrevious structured summary:\n${previousStructuredSummary ? JSON.stringify(previousStructuredSummary) : \"(none)\"}\n\nConversation:\n${conversationText}\n\nCanonical facts extracted from tool outputs:\n${canonicalFacts.length > 0 ? canonicalFacts.map((fact) => `- ${fact.key}: ${fact.value}`).join(\"\\n\") : \"(none)\"}`;\n\n const template = config.promptTemplate || defaultPrompt;\n const promptBody = template\n .replace(/\\{\\{\\s*conversation\\s*\\}\\}/g, conversationText)\n .replace(/\\{\\{\\s*previousSummary\\s*\\}\\}/g, previousSummary || \"\");\n\n const summaryPrompt = [\n systemMessage(\"You are a helpful assistant that summarizes conversation history efficiently. Return strict JSON only.\"),\n humanMessage(promptBody)\n ];\n\n // Estimate input tokens for the summarization prompt (fallback if model doesn't provide usage)\n const inputTokensEstimate = countApproxTokens(summaryPrompt.map(m => m.content).join(\"\\n\"));\n\n let summaryText = \"Summary unavailable.\";\n let structuredSummary: StructuredSummary | undefined;\n let integrity: SummaryIntegrityCheck | undefined;\n let outputTokensEstimate = 0;\n let durationMs = 0;\n let inputTokensActual: number | undefined;\n let outputTokensActual: number | undefined;\n let cachedInputTokens: number | undefined;\n let totalTokensActual: number | undefined;\n \n const startTime = Date.now();\n try {\n if (!model || typeof model.invoke !== \"function\") {\n throw new Error(\"Summarization model is unavailable.\");\n }\n const response = await model.invoke(summaryPrompt);\n durationMs = Date.now() - startTime;\n summaryText = typeof response.content === \"string\" \n ? response.content \n : Array.isArray(response.content) \n ? response.content.map((c: any) => c.text || \"\").join(\"\")\n : JSON.stringify(response.content);\n outputTokensEstimate = countApproxTokens(summaryText);\n\n const jsonText = extractJsonObject(summaryText);\n const parsed = jsonText ? JSON.parse(jsonText) : undefined;\n structuredSummary = normalizeStructuredSummary(parsed, summaryText);\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = config.integrityCheck\n ? runIntegrityCheck(previousStructuredSummary, structuredSummary)\n : { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [] };\n if (integrity && !integrity.passed) {\n structuredSummary = repairStructuredSummary(previousStructuredSummary, structuredSummary, integrity);\n integrity = { ...integrity, passed: true };\n }\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Extract actual token usage from model response if available\n const rawUsage = (response as any)?.usage \n || (response as any)?.response_metadata?.token_usage \n || (response as any)?.response_metadata?.tokenUsage\n || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n if (normalized) {\n inputTokensActual = normalized.prompt_tokens;\n outputTokensActual = normalized.completion_tokens;\n totalTokensActual = normalized.total_tokens;\n cachedInputTokens = normalized.prompt_tokens_details?.cached_tokens;\n }\n } catch (err: any) {\n durationMs = Date.now() - startTime;\n structuredSummary = normalizeStructuredSummary(undefined, previousSummary || conversationText.slice(0, 800));\n structuredSummary = mergeStableFacts(structuredSummary, canonicalFacts);\n integrity = { passed: true, criticalFactLoss: false, obsoleteFactRevived: false, notes: [\"Fallback summary generated locally.\"] };\n summaryText = renderStructuredSummary(structuredSummary);\n \n // Emit error event for onEvent\n const errorEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter: tokenCountBefore,\n structuredSummary,\n integrity,\n };\n onEvent?.(errorEvent);\n \n // Record trace event for error\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization Failed\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"error\",\n durationMs,\n inputTokens: inputTokensEstimate,\n outputTokens: countApproxTokens(summaryText),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: sanitizeTracePayload(summaryPrompt),\n });\n // Continue with local fallback summary to avoid losing the compaction step.\n }\n\n // 2. Build a map of tool_call_id -> assistant message index\n // This ensures we only keep tool messages that have a matching assistant with tool_calls\n const toolCallIdToAssistantIdx = new Map<string, number>();\n messages.forEach((m, idx) => {\n if (m.role === 'assistant' && m.tool_calls && Array.isArray(m.tool_calls)) {\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) {\n toolCallIdToAssistantIdx.set(tc.id, idx);\n }\n });\n }\n });\n\n // 2b. Identify tool_call_ids from the LAST assistant turn so we can protect\n // their tool responses from being summarized. The agent needs to see its most\n // recent tool outputs to reason correctly. We only apply this protection when\n // there are OTHER older compressable messages — otherwise (e.g. first turn)\n // we allow normal summarization to proceed.\n const protectedToolCallIds = new Set<string>();\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role === 'assistant' && Array.isArray(m.tool_calls) && m.tool_calls.length > 0) {\n const thisToolCallIds = new Set(m.tool_calls.map((tc: any) => tc.id).filter(Boolean));\n const otherCompressable = compressableMessages.filter(\n (cm) => !thisToolCallIds.has(cm.tool_call_id)\n );\n if (otherCompressable.length > 0) {\n for (const tc of m.tool_calls) {\n if (tc.id) protectedToolCallIds.add(tc.id);\n }\n }\n break;\n }\n }\n\n // 3. Rewrite tool messages per resolved retention policy.\n // Orphan tool messages (no matching assistant tool_call) are removed.\n // The last assistant turn's tool responses are always protected so the agent\n // can reason about its latest tool outputs.\n const archivedExecutions: SmartState[\"toolHistoryArchived\"] = [...(state.toolHistoryArchived || [])];\n const archivedIds = new Set(archivedExecutions.map((entry) => entry?.executionId).filter(Boolean));\n const newMessages = messages.map((m) => {\n if (m.role === 'tool') {\n if (isSyntheticSummaryMessage(m)) {\n return m;\n }\n const toolCallId = m.tool_call_id;\n\n if (!toolCallId || !toolCallIdToAssistantIdx.has(toolCallId)) {\n return null;\n }\n\n if (isSummarizedToolPlaceholder(m.content)) return m;\n if (toolCallId && protectedToolCallIds.has(toolCallId)) return m;\n\n const toolName = m.name || '';\n const policy = resolveSummarizationRetention(toolName, resolved);\n if (policy === 'keep_full') return m;\n\n const historyEntry = findToolHistoryEntry(state, toolCallId, toolName);\n const rawOutput = historyEntry?.rawOutput ?? historyEntry?.output ?? m.content;\n const executionId = historyEntry?.executionId;\n const prebuiltSummary = historyEntry?.summary || summarizeObject(rawOutput);\n\n if ((policy === 'summarize_archive' || policy === 'drop') && historyEntry && executionId && !archivedIds.has(executionId)) {\n archivedExecutions.push({\n ...historyEntry,\n summarized: true,\n retentionPolicy: policy,\n archiveId: executionId,\n summary: prebuiltSummary,\n });\n archivedIds.add(executionId);\n }\n\n return {\n ...m,\n content: renderRetainedToolMessage({\n policy,\n rawOutput,\n toolName,\n toolCallId,\n executionId,\n prebuiltSummary,\n }),\n };\n }\n return m;\n }).filter((m): m is NonNullable<typeof m> => m !== null);\n\n // 3b. Check if any messages were actually compressed (not just protected).\n const actuallyCompressed = newMessages.filter(\n (m) => m.role === 'tool'\n && isSummarizedToolPlaceholder(m.content)\n && !messages.some((orig) => orig.tool_call_id === m.tool_call_id && isSummarizedToolPlaceholder(orig.content))\n );\n if (actuallyCompressed.length === 0) {\n // All compressable messages were protected (recent). Skip summarization to avoid\n // injecting a summary + synthetic messages without actually reducing context.\n return {};\n }\n\n // 4. Validate message sequence - ensure every tool message follows an assistant with matching tool_calls\n const validatedMessages = validateMessageSequence(newMessages);\n\n // 5. Append the summarization interaction\n // We inject a fake tool call and response to represent the summarization event in the history.\n const summaryToolCallId = `call_summary_${Date.now()}`;\n \n // The assistant \"calls\" the summarizer\n const assistantSummaryCall: BaseMessage = {\n role: \"assistant\", // \"assistant\"\n content: \"Context limit reached. Summarizing conversation history to reduce token usage.\",\n tool_calls: [\n {\n id: summaryToolCallId,\n type: \"function\",\n function: {\n name: \"summarize_context\",\n arguments: \"{}\"\n }\n }\n ]\n };\n\n // The tool \"responds\" with the summary\n const toolSummaryResponse: BaseMessage = {\n role: \"tool\",\n tool_call_id: summaryToolCallId,\n name: \"summarize_context\", // Matches the tool name in the call\n content: summaryText\n };\n\n const summaries = Array.isArray(state.summaries) ? [...state.summaries, summaryText] : [summaryText];\n const summaryRecords = Array.isArray(state.summaryRecords)\n ? [...state.summaryRecords, { ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }]\n : [{ ...(structuredSummary || normalizeStructuredSummary(undefined, summaryText)), integrity, createdAt: new Date().toISOString() }];\n\n // Calculate token count after summarization\n const finalMessages = [...validatedMessages, assistantSummaryCall, toolSummaryResponse];\n const tokenCountAfter = countMessagesTokens(finalMessages);\n\n // Emit successful summarization event (use actual values from model response if available, fallback to estimates)\n const summarizationEvent: SummarizationEvent = {\n type: \"summarization\",\n summary: summaryText,\n messagesCompressed: compressableMessages.length,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual ?? ((inputTokensActual ?? inputTokensEstimate) + (outputTokensActual ?? outputTokensEstimate)),\n durationMs,\n previousSummary: previousSummary || undefined,\n tokenCountBefore,\n tokenCountAfter,\n archivedCount: compressableMessages.length, // deprecated field for backward compatibility\n structuredSummary,\n integrity,\n };\n onEvent?.(summarizationEvent);\n\n // Record trace event for successful summarization\n recordTraceEvent(traceSession, {\n type: \"summarization\",\n label: \"Context Summarization\",\n actor: { scope: \"system\", name: \"summarizer\", role: \"summarization\" },\n status: \"success\",\n durationMs,\n inputTokens: inputTokensActual ?? inputTokensEstimate,\n outputTokens: outputTokensActual ?? outputTokensEstimate,\n cachedInputTokens: cachedInputTokens,\n totalTokens: totalTokensActual,\n messageList: sanitizeTracePayload([\n ...summaryPrompt,\n { role: \"assistant\", content: summaryText, name: \"summarization_result\" }\n ]),\n debug: {\n messagesCompressed: compressableMessages.length,\n tokenCountBefore,\n tokenCountAfter,\n tokensSaved: tokenCountBefore - tokenCountAfter,\n previousSummaryLength: previousSummary?.length || 0,\n usageFromModel: inputTokensActual !== undefined,\n cachedInputTokens: cachedInputTokens,\n integrity,\n },\n });\n\n return {\n messages: finalMessages as any,\n summaries,\n summaryRecords,\n toolHistoryArchived: archivedExecutions,\n };\n };\n}\n","import type { BaseMessage, MemoryFact, ResolvedSmartAgentConfig, SmartState, StructuredSummary } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\nimport { extractMessageText } from \"../utils/content.js\";\n\nfunction collectRecentTurns(messages: BaseMessage[], lastTurnsToKeep: number): BaseMessage[] {\n if (lastTurnsToKeep <= 0) return [];\n const systemPrefix = messages.filter((message, index) => index === 0 && message.role === \"system\");\n const body = systemPrefix.length > 0 ? messages.slice(1) : [...messages];\n\n // Count total user turns to detect single-user-turn scenarios (e.g. worker agents).\n const totalUserTurns = body.filter((m) => m.role === \"user\").length;\n\n // When there are fewer user turns than lastTurnsToKeep (typical for worker agents\n // that start with a single user message and then loop assistant→tool cycles),\n // count assistant messages as interaction rounds instead. This prevents the hybrid\n // policy from keeping ALL messages and forcing clampToBudget to do destructive\n // truncation that breaks tool_call/tool_result adjacency.\n const countAssistantTurns = totalUserTurns < lastTurnsToKeep;\n\n let turnCount = 0;\n const collected: BaseMessage[] = [];\n\n for (let index = body.length - 1; index >= 0; index -= 1) {\n const message = body[index];\n collected.unshift(message);\n\n const isTurnBoundary = countAssistantTurns\n ? message.role === \"assistant\"\n : message.role === \"user\";\n\n if (isTurnBoundary) {\n turnCount += 1;\n if (turnCount >= lastTurnsToKeep) break;\n }\n }\n\n // When counting assistant turns, ensure the first user message is always included\n // so the agent retains its original task instruction.\n if (countAssistantTurns && collected.length > 0 && collected[0].role !== \"user\") {\n const firstUserMsg = body.find((m) => m.role === \"user\");\n if (firstUserMsg && !collected.includes(firstUserMsg)) {\n collected.unshift(firstUserMsg);\n }\n }\n\n return [...systemPrefix, ...collected];\n}\n\nexport function renderStructuredSummary(summary: StructuredSummary | undefined): string {\n if (!summary) return \"\";\n const lines = [\"Context summary:\"];\n if (summary.stable_facts.length > 0) {\n lines.push(\"Stable facts:\");\n lines.push(...summary.stable_facts.map((fact) => `- ${fact.key}: ${fact.value}`));\n }\n if (summary.active_goals.length > 0) {\n lines.push(\"Active goals:\");\n lines.push(...summary.active_goals.map((goal) => `- ${goal}`));\n }\n if (summary.open_questions.length > 0) {\n lines.push(\"Open questions:\");\n lines.push(...summary.open_questions.map((question) => `- ${question}`));\n }\n // discarded_obsolete items are intentionally NOT rendered back into the context.\n // They are already obsolete and including them wastes tokens.\n return lines.join(\"\\n\");\n}\n\nfunction renderMemoryBlock(facts: MemoryFact[] | undefined): string {\n if (!facts || facts.length === 0) return \"\";\n return [\n \"Retrieved memory:\",\n ...facts.map((fact) => `- ${fact.key}: ${fact.value}`),\n ].join(\"\\n\");\n}\n\nfunction clampToBudget(messages: BaseMessage[], maxContextTokens: number): BaseMessage[] {\n let working = [...messages];\n\n while (working.length > 2) {\n const tokenCount = countApproxTokens(working.map(extractMessageText).join(\"\\n\"));\n if (tokenCount <= maxContextTokens) return working;\n\n // Find the first non-system message to remove.\n const firstNonSystem = working.findIndex((message, index) => !(index === 0 && message.role === \"system\"));\n if (firstNonSystem < 0) break;\n\n const target = working[firstNonSystem];\n\n // When removing an assistant message with tool_calls, also remove its\n // corresponding tool result messages to preserve message adjacency.\n // Orphan tool messages cause \"tool must follow assistant with tool_calls\" errors\n // and confuse the model with placeholder messages.\n if (target.role === \"assistant\" && Array.isArray(target.tool_calls) && target.tool_calls.length > 0) {\n const toolCallIds = new Set(\n target.tool_calls.map((tc: any) => tc.id).filter(Boolean)\n );\n // Remove assistant + its tool results as a group\n working = working.filter((m, idx) => {\n if (idx === firstNonSystem) return false;\n if (m.role === \"tool\" && m.tool_call_id && toolCallIds.has(m.tool_call_id)) return false;\n return true;\n });\n } else if (target.role === \"tool\") {\n // If the target is a tool message, also remove its parent assistant message\n // to avoid leaving an assistant with a dangling tool_call reference.\n const toolCallId = target.tool_call_id;\n let parentIdx = -1;\n if (toolCallId) {\n for (let i = firstNonSystem - 1; i >= 0; i--) {\n const m = working[i];\n if (m.role === \"assistant\" && Array.isArray(m.tool_calls) && m.tool_calls.some((tc: any) => tc.id === toolCallId)) {\n parentIdx = i;\n break;\n }\n }\n }\n if (parentIdx >= 0) {\n // Remove the entire assistant + all its tool results as a group\n const parent = working[parentIdx];\n const parentToolCallIds = new Set(\n (parent.tool_calls || []).map((tc: any) => tc.id).filter(Boolean)\n );\n working = working.filter((m, idx) => {\n if (idx === parentIdx) return false;\n if (m.role === \"tool\" && m.tool_call_id && parentToolCallIds.has(m.tool_call_id)) return false;\n return true;\n });\n } else {\n // Orphan tool message — safe to remove alone\n working.splice(firstNonSystem, 1);\n }\n } else {\n working.splice(firstNonSystem, 1);\n }\n }\n return working;\n}\n\nexport function buildModelMessages(state: SmartState, config: ResolvedSmartAgentConfig): BaseMessage[] {\n const rawMessages = (state.messages || []) as BaseMessage[];\n if (config.context.policy === \"raw\") {\n return clampToBudget(rawMessages, config.limits.maxContextTokens);\n }\n\n const recentMessages = collectRecentTurns(rawMessages, config.context.lastTurnsToKeep);\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n const summaryText = renderStructuredSummary(latestSummary);\n const memoryText = renderMemoryBlock(state.memoryFacts);\n const systemMessage = recentMessages[0]?.role === \"system\" ? recentMessages[0] : undefined;\n const body = systemMessage ? recentMessages.slice(1) : recentMessages;\n const syntheticContextMessages: BaseMessage[] = [];\n\n if (summaryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"context_summary\", content: summaryText });\n }\n if (memoryText) {\n syntheticContextMessages.push({ role: \"system\", name: \"memory_context\", content: memoryText });\n }\n\n const assembled = [\n ...(systemMessage ? [systemMessage] : []),\n ...syntheticContextMessages,\n ...(config.context.policy === \"summary_only\" ? body.filter((message) => message.role === \"user\" || message.role === \"assistant\").slice(-2) : body),\n ];\n\n return clampToBudget(assembled, config.limits.maxContextTokens);\n}","export * from \"./model.js\";\nexport * from \"./tool.js\";\nexport * from \"./prompts.js\";\nexport * from \"./agent.js\";\nexport * from \"./nodes/agent.js\";\nexport * from \"./nodes/tools.js\";\nexport * from \"./nodes/resolver.js\";\nexport * from \"./nodes/toolLimitFinalize.js\";\nexport * from \"./nodes/contextSummarize.js\";\nexport * from \"./utils/utilTokens.js\";\nexport { setTokenCounter, getTokenCounter, defaultTokenCounter } from \"./utils/utilTokens.js\";\nexport type { TokenCounter } from \"./utils/utilTokens.js\";\nexport * from \"./contextTools.js\";\nexport * from \"./smart/index.js\";\nexport * from \"./smart/skills/index.js\";\nexport * from \"./smart/subagents/index.js\";\nexport * from \"./smart/eval.js\";\nexport * from \"./smart/memory.js\";\nexport * from \"./smart/runtimeConfig.js\";\nexport * from \"./guardrails/index.js\";\nexport * from \"./structuredOutput/index.js\";\nexport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nexport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nexport { resolveUserQuestionState } from \"./utils/userQuestions.js\";\nexport { createAskUserQuestionTool } from \"./humanLoop.js\";\nexport { fromLangchainTools } from \"./adapters/langchain.js\";\nexport { resolveReasoning, validateReasoningConfig } from \"./smart/reasoning.js\";\nexport { fileSink, customSink, cognipeerSink, httpSink, otlpSink, startStreamingSession, generateTraceId, generateSpanId, traceSessionToOtlp } from \"./utils/tracing.js\";\n// Native LLM Providers (no LangChain dependency)\nexport {\n createProvider,\n fromNativeProvider,\n BaseProvider,\n OpenAIProvider,\n AnthropicProvider,\n AzureProvider,\n OpenAICompatibleProvider,\n BedrockProvider,\n VertexProvider,\n ProviderError,\n emptyUsage,\n} from \"./providers/index.js\";\nexport type {\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatCompletionChunk,\n TokenUsage,\n FinishReason,\n UnifiedMessage,\n ToolDefinition as ProviderToolDefinition,\n ToolCall as ProviderToolCall,\n ProviderConfig,\n ProviderType,\n OpenAIProviderConfig,\n AnthropicProviderConfig,\n AzureProviderConfig,\n OpenAICompatibleProviderConfig,\n BedrockProviderConfig,\n VertexProviderConfig,\n NativeModelOptions,\n} from \"./providers/index.js\";\nexport { GuardrailPhase } from \"./types.js\";\nexport type {\n\t// Smart Agent types\n\tSmartAgentOptions,\n\tSmartAgentLimits,\n\tSmartState,\n\tInvokeConfig,\n\tAgentInvokeResult,\n\tSmartAgentInstance,\n\tSmartAgentTracingConfig,\n\tSmartAgentEvent,\n\tRuntimeProfile,\n\tBuiltInRuntimeProfile,\n\tProfileConfig,\n\tResolvedSmartAgentConfig,\n\tSmartAgentCustomProfileConfig,\n\tStructuredSummary,\n\tSummaryIntegrityCheck,\n\tMemoryFact,\n\tMemoryStore,\n\tMemoryScope,\n\tMemoryReadPolicy,\n\tMemoryWritePolicy,\n\tPlanningMode,\n\tReplanPolicy,\n\tDelegationMode,\n\tChildContextPolicy,\n\tToolResponseClassification,\n\tToolResponseRetentionPolicy,\n\tEvalCase,\n\tEvalCaseResult,\n\tEvalHarnessMetrics,\n\tEvalHarnessResult,\n\t// Base Agent types\n\tAgentOptions,\n\tAgentLimits,\n\tAgentState,\n\tAgentInstance,\n\tAgentRuntimeConfig,\n\tTracingConfig,\n\tHandoffDescriptor,\n\t// Common types\n\tMessage,\n\tBaseMessage,\n\tAIMessage,\n\tToolInterface,\n\tTraceEventRecord,\n\tTraceDataSection,\n\tTraceMessageSection,\n\tTraceToolDetails,\n\tTraceToolCallSection,\n\tTraceToolResultSection,\n\tTraceToolResponseSection,\n\tTraceSummarySection,\n\tTraceMetadataSection,\n\tTraceSessionSummary,\n\tTraceSessionFile,\n\tTraceSessionStatus,\n\tTraceErrorRecord,\n\tResolvedTraceConfig,\n\tResolvedTraceSink,\n\tTracingMode,\n\tTraceSinkConfig,\n\tTraceSinkFileConfig,\n\tTraceSinkCustomConfig,\n\tTraceSinkCognipeerConfig,\n\tTraceSinkHttpConfig,\n\tTraceSinkOtlpConfig,\n\tTraceSinkSnapshot,\n\tTraceSessionConfigSnapshot,\n\tConversationGuardrail,\n\tGuardrailOutcome,\n\tGuardrailIncident,\n\tGuardrailRule,\n\tGuardrailContext,\n\tGuardrailDisposition,\n\tGuardrailEvent,\n\tAgentSnapshot,\n\t// Reasoning / reflection\n\tReasoningConfig,\n\tReasoningLevel,\n\tReflectionConfig,\n\tReflectionCadence,\n\tNativeReasoningConfig,\n\tReflectionRecord,\n\tReflectionEvent,\n\tReflectionHookContext,\n\tSnapshotOptions,\n\tRestoreSnapshotOptions,\n\tSerializableSmartState,\n\tSnapshotRuntimeHint,\n\tAgentSnapshotMetadata,\n\tPendingToolApproval,\n\tToolApprovalResolution,\n\tToolApprovalEvent,\n\tPendingUserQuestion,\n\tUserQuestionItem,\n\tUserQuestionOption,\n\tUserQuestionAnswer,\n\tUserQuestionAnswerSet,\n\tUserQuestionResolution,\n\tUserQuestionEvent,\n\tUserQuestionStatus,\n\tHumanInTheLoopOptions,\n\tHumanInTheLoopAskUserConfig,\n\tHumanInTheLoopRuntimeConfig,\n\t// Event types\n\tToolCallEvent,\n\tPlanEvent,\n\tSummarizationEvent,\n\tFinalAnswerEvent,\n\tMetadataEvent,\n\tProgressEvent,\n\tStreamEvent,\n\tCancelledEvent,\n\tHandoffEvent,\n\tSubagentEvent,\n\tDelegationEventStamp,\n\tPromptHooks,\n\t// Smart Agent config sub-types\n\tSummarizationMode,\n\tContextPolicy,\n\tSummaryFactItem,\n\tPlanStepRecord,\n\tSmartAgentSummarizationConfig,\n\tSmartAgentContextConfig,\n\tSmartAgentPlanningConfig,\n\tSmartAgentDelegationConfig,\n\tSmartAgentMemoryConfig,\n\tSmartAgentToolResponseConfig,\n\tSmartAgentBudgetConfig,\n\tMemoryProviderKind,\n\t// Eval types\n\tEvalFamily,\n\tEvalProfileDescriptor,\n\tEvalProfileTarget,\n\t// Utility types\n\tToolApprovalStatus,\n\tCancellationTokenLike,\n\tProgressUpdate,\n\tStreamChunk,\n} from \"./types.js\";\n","import { z } from \"zod\";\nimport { createTool } from \"./tool.js\";\nimport { recordTraceEvent } from \"./utils/tracing.js\";\n// no message helpers needed here\n\nexport type ContextToolsStateRef = {\n toolHistory?: any[];\n toolHistoryArchived?: any[];\n todoList?: any[];\n planVersion?: number;\n adherenceScore?: number;\n messages?: Array<{ role?: string; content?: unknown }>;\n};\n\nconst TOOL_RESPONSE_RECOVERY_MARKERS = [\n /ARCHIVED_TOOL_RESPONSE\\s*\\[/,\n /STRUCTURED_TOOL_RESPONSE\\s*\\[/,\n /SUMMARIZED_TOOL_RESPONSE\\b/,\n /DROPPED_TOOL_RESPONSE\\s*\\[/,\n /Use get_tool_response with executionId/i,\n] as const;\n\nconst todoStatusSchema = z.enum([\"not-started\", \"in-progress\", \"completed\", \"blocked\"]);\n\nconst todoWriteItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Sequential id starting from 1\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema,\n evidence: z.string().max(300).optional(),\n});\n\nconst todoUpdateItemSchema = z.object({\n id: z.number().int().min(1).describe(\"Existing todo id to update\"),\n step: z.string().min(1).optional(),\n title: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n owner: z.string().min(1).optional(),\n exitCriteria: z.string().min(1).optional(),\n status: todoStatusSchema.optional(),\n evidence: z.string().max(300).optional(),\n});\n\nfunction normalizeTodoItem(item: any, existing?: any) {\n const id = item.id ?? existing?.id;\n const step = item.step || item.title || item.description || existing?.step || existing?.title || existing?.description || `Step ${id}`;\n const title = item.title || item.step || existing?.title || existing?.step || `Step ${id}`;\n const description = item.description || item.step || item.title || existing?.description || existing?.step || existing?.title || `Step ${id}`;\n\n return {\n ...existing,\n ...item,\n id,\n step,\n title,\n description,\n owner: item.owner || existing?.owner || \"agent\",\n exitCriteria: item.exitCriteria || existing?.exitCriteria || description || `Complete step ${id}`,\n status: item.status || existing?.status,\n evidence: item.evidence ?? existing?.evidence,\n };\n}\n\nfunction validatePlanInvariants(todoList: any[], requireSequentialIds: boolean) {\n const ids = todoList.map((item) => item.id);\n const uniqueIds = new Set(ids);\n if (uniqueIds.size !== ids.length) {\n return { ok: false, error: \"Todo ids must be unique.\" } as const;\n }\n\n if (requireSequentialIds) {\n const expectedIds = Array.from({ length: todoList.length }, (_, index) => index + 1);\n const isSequential = ids.every((id, index) => id === expectedIds[index]);\n if (!isSequential) {\n return { ok: false, error: \"Todo ids must be sequential starting from 1 for write operations.\" } as const;\n }\n }\n\n const inProgressCount = todoList.filter((item) => item.status === \"in-progress\").length;\n if (inProgressCount > 1) {\n return { ok: false, error: \"Only one todo item may be in-progress at a time.\" } as const;\n }\n\n return { ok: true } as const;\n}\n\nfunction calculateAdherenceScore(todoList: any[]) {\n const completedCount = todoList.filter((item) => item.status === \"completed\").length;\n return todoList.length === 0 ? 1 : Number((completedCount / todoList.length).toFixed(2));\n}\n\nfunction formatTodoListSummary(todoList: any[]) {\n if (!Array.isArray(todoList) || todoList.length === 0) {\n return \"No plan items.\";\n }\n\n return todoList\n .map((item) => `${item.id}. ${item.title || item.step || item.description || `Step ${item.id}`} [${item.status}]`)\n .join(\"\\n\");\n}\n\nfunction flattenRecoveryContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n return content\n .map((part) => {\n if (typeof part === \"string\") {\n return part;\n }\n\n if (part && typeof part === \"object\") {\n if (typeof (part as { text?: unknown }).text === \"string\") {\n return (part as { text: string }).text;\n }\n\n if (typeof (part as { content?: unknown }).content === \"string\") {\n return (part as { content: string }).content;\n }\n }\n\n return \"\";\n })\n .filter(Boolean)\n .join(\"\\n\");\n }\n\n return \"\";\n}\n\nexport function hasToolResponseRecoveryReference(\n messages: Array<{ role?: string; content?: unknown }> | undefined,\n executionId?: string,\n) {\n if (!Array.isArray(messages) || messages.length === 0) {\n return false;\n }\n\n return messages.some((message) => {\n if (message?.role === \"system\") {\n return false;\n }\n\n const content = flattenRecoveryContent(message?.content);\n if (!content) {\n return false;\n }\n\n const hasRecoveryMarker = TOOL_RESPONSE_RECOVERY_MARKERS.some((pattern) => pattern.test(content));\n if (!hasRecoveryMarker) {\n return false;\n }\n\n return executionId ? content.includes(executionId) : true;\n });\n}\n\nexport function createManageTodoTool(stateRef: ContextToolsStateRef) {\n const manageTodo = createTool({\n name: \"manage_todo_list\",\n description:\n \"Manage a structured todo list to track progress and plan tasks throughout your coding session.\\n\\nOperations:\\n- read: return the current plan\\n- write: replace the full plan with a complete ordered todoList\\n- update: patch existing todo items by id without resending the whole plan\\n\\nRules:\\n- Use write only when creating or fully rewriting the plan\\n- After a plan exists, prefer update for status, evidence, or owner changes\\n- Update payloads should contain only the changed items\\n- When using update, pass expectedVersion to avoid overwriting a newer plan\\n- Keep ids unique; write operations must keep ids sequential starting from 1\\n- Keep at most ONE item in-progress at a time\\n- If update fails due to version mismatch, read the latest plan and retry\",\n schema: z.object({\n operation: z.enum([\"write\", \"read\", \"update\"]),\n expectedVersion: z.number().int().min(0).optional(),\n todoList: z.array(z.union([todoWriteItemSchema, todoUpdateItemSchema])).optional()\n }),\n func: async ({ operation, expectedVersion, todoList }) => {\n const toolStateRef = (manageTodo as any)._stateRef as undefined | { __onEvent?: (e: any) => void; ctx?: { __traceSession?: any } };\n const onEvent = toolStateRef?.__onEvent;\n const emitPlanEvent = (list: any[]) => {\n const version = stateRef.planVersion || 1;\n const adherenceScore = stateRef.adherenceScore || 0;\n const planData = {\n source: \"manage_todo_list\",\n operation,\n version,\n adherenceScore,\n count: Array.isArray(list) ? list.length : 0,\n };\n onEvent?.({ type: \"plan\", todoList: list, ...planData });\n\n const traceSession = toolStateRef?.ctx?.__traceSession;\n recordTraceEvent(traceSession, {\n type: \"plan\",\n label: `Plan ${operation}`,\n actor: { scope: \"agent\", name: \"manage_todo_list\", role: \"planner\" },\n sections: [\n {\n kind: \"summary\",\n label: \"Todo List\",\n content: formatTodoListSummary(list),\n },\n {\n kind: \"metadata\",\n label: \"Plan Metadata\",\n data: planData,\n },\n ],\n debug: planData,\n });\n };\n\n const currentVersion = stateRef.planVersion || 0;\n if (operation === \"read\") {\n const list = stateRef.todoList || [];\n emitPlanEvent(list);\n return list;\n }\n\n if (typeof expectedVersion === \"number\" && expectedVersion !== currentVersion) {\n return {\n status: \"error\",\n operation,\n error: \"Plan version mismatch. Read the latest plan and retry.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (!Array.isArray(todoList)) {\n return {\n status: \"error\",\n operation,\n error: \"todoList is required for write and update operations.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n if (operation === \"write\") {\n const parsed = z.array(todoWriteItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for write.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const normalizedList = parsed.data.map((item) => normalizeTodoItem(item));\n const validation = validatePlanInvariants(normalizedList, true);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = normalizedList;\n } else if (operation === \"update\") {\n const parsed = z.array(todoUpdateItemSchema).safeParse(todoList);\n if (!parsed.success) {\n return {\n status: \"error\",\n operation,\n error: parsed.error.issues[0]?.message || \"Invalid todoList for update.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n const currentList = Array.isArray(stateRef.todoList) ? stateRef.todoList : [];\n if (currentList.length === 0) {\n return {\n status: \"error\",\n operation,\n error: \"No existing plan to update. Use write first.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n\n const currentMap = new Map(currentList.map((item) => [item.id, item]));\n const patchMap = new Map<number, (typeof parsed.data)[number]>();\n for (const item of parsed.data) {\n if (patchMap.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: \"Update payload contains duplicate todo ids.\",\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n patchMap.set(item.id, item);\n if (!currentMap.has(item.id)) {\n return {\n status: \"error\",\n operation,\n error: `Cannot update missing todo id ${item.id}. Use write to replace the plan.`,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n }\n\n const mergedList = currentList.map((item) => {\n const patch = patchMap.get(item.id);\n return patch ? normalizeTodoItem(patch, item) : item;\n });\n const validation = validatePlanInvariants(mergedList, false);\n if (!validation.ok) {\n return {\n status: \"error\",\n operation,\n error: validation.error,\n version: currentVersion,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n }\n stateRef.todoList = mergedList;\n }\n\n stateRef.planVersion = currentVersion + 1;\n stateRef.adherenceScore = calculateAdherenceScore(stateRef.todoList || []);\n const payload = {\n status: \"ok\",\n operation,\n count: Array.isArray(todoList) ? todoList.length : undefined,\n version: stateRef.planVersion || 1,\n adherenceScore: stateRef.adherenceScore || 0,\n } as const;\n emitPlanEvent(stateRef.todoList || []);\n return payload;\n }\n });\n (manageTodo as any)._stateRef = stateRef;\n return manageTodo;\n}\n\nexport function createGetToolResponseTool(stateRef: ContextToolsStateRef) {\n const getTool = createTool({\n name: \"get_tool_response\",\n description:\n \"RETRIEVE the full output of a tool execution whose response was archived, dropped, truncated, or later compacted in conversation history. This tool is only useful when the visible transcript already shows a reduced tool-response marker for the referenced executionId or tool_call_id. Use it only when a marker such as 'ARCHIVED_TOOL_RESPONSE', 'STRUCTURED_TOOL_RESPONSE', 'SUMMARIZED_TOOL_RESPONSE', 'DROPPED_TOOL_RESPONSE', or an explicit truncation note points you to a missing field you still need. Do not call it to re-fetch a normal tool result that is already present in context.\",\n schema: z.object({ executionId: z.string().describe(\"Tool execution id or original tool_call_id\") }),\n maxExecutionsPerRun: 8,\n func: async ({ executionId }) => {\n if (!hasToolResponseRecoveryReference(stateRef.messages, executionId)) {\n return \"Execution not recoverable from the visible transcript. Use this only when the conversation already shows a reduced tool-response marker for that executionId.\";\n }\n\n const matchesExecution = (t: any) => t?.executionId === executionId || t?.tool_call_id === executionId;\n let execution = stateRef.toolHistory?.find((t) => matchesExecution(t));\n if (!execution) {\n execution = stateRef.toolHistoryArchived?.find((t) => matchesExecution(t));\n }\n if (execution) {\n return execution.rawOutput || execution.output;\n }\n return \"Execution not found. Please check the executionId.\";\n }\n });\n (getTool as any)._stateRef = stateRef;\n return getTool;\n}\n\n// Create context tools like get_tool_response, manage_todo_list\nexport function createContextTools(\n stateRef: ContextToolsStateRef,\n opts?: { planningEnabled?: boolean; outputSchema?: any; includeGetToolResponse?: boolean }\n) {\n const tools = [] as any[];\n\n if (opts?.planningEnabled) {\n tools.push(createManageTodoTool(stateRef));\n }\n\n if (opts?.includeGetToolResponse ?? true) {\n tools.push(createGetToolResponseTool(stateRef));\n }\n\n // Note: Structured output response tool is now managed by StructuredOutputManager\n // in the base agent (createAgent). No duplicate tool creation needed here.\n\n return tools;\n}\n","import { SmartState, SmartAgentOptions } from \"../types.js\";\nimport { countMessagesTokens } from \"../utils/utilTokens.js\";\nimport { isSyntheticSummaryMessage } from \"../utils/syntheticMessages.js\";\nimport { getResolvedSmartConfig } from \"../smart/runtimeConfig.js\";\n\n/** Shared helper to compute whether we exceed token limit */\nfunction needsSummarization(state: SmartState, opts: SmartAgentOptions, summarizationEnabled: boolean): boolean {\n if (!summarizationEnabled) {\n return false;\n }\n\n if ((state.ctx as any)?.__needsSummarization) {\n return true;\n }\n\n const resolved = getResolvedSmartConfig(opts, state.agent as any);\n if (!resolved.summarization.enable) {\n return false;\n }\n\n const maxTok = resolved.summarization.summaryTriggerTokens;\n\n try {\n const filtered = (state.messages || []).filter((message: any) => !isSyntheticSummaryMessage(message));\n const tokenCount = countMessagesTokens(filtered);\n return tokenCount > maxTok;\n } catch {\n return false;\n }\n}\n\nexport function resolverDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function resolverDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function toolsDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function toolsDecision(state: SmartState) {\n const max = (opts.limits?.maxToolCalls ?? 10) as number;\n const count = state.toolCallCount || 0;\n if (count >= max) return \"toolLimitFinalize\";\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}","import type {\n MemoryFact,\n MemoryReadPolicy,\n MemoryScope,\n MemoryStore,\n ResolvedSmartAgentConfig,\n StructuredSummary,\n} from \"../types.js\";\n\ntype ScopeMap = Map<MemoryScope, MemoryFact[]>;\n\nfunction normalizeFact(scope: MemoryScope, fact: MemoryFact): MemoryFact {\n return {\n ...fact,\n scope,\n obsolete: fact.obsolete ?? false,\n lastUpdatedAt: fact.lastUpdatedAt ?? new Date().toISOString(),\n confidence: Number.isFinite(fact.confidence) ? fact.confidence : 0.5,\n };\n}\n\nexport class InMemoryMemoryStore implements MemoryStore {\n private readonly buckets: ScopeMap = new Map();\n\n async get(scope: MemoryScope, options?: { includeObsolete?: boolean; limit?: number }): Promise<MemoryFact[]> {\n const includeObsolete = options?.includeObsolete === true;\n const all = [...(this.buckets.get(scope) || [])]\n .filter((fact) => includeObsolete || !fact.obsolete)\n .sort((left, right) => new Date(right.lastUpdatedAt || 0).getTime() - new Date(left.lastUpdatedAt || 0).getTime());\n return typeof options?.limit === \"number\" ? all.slice(0, options.limit) : all;\n }\n\n async upsert(scope: MemoryScope, facts: MemoryFact[]): Promise<void> {\n const existing = [...(this.buckets.get(scope) || [])];\n\n for (const fact of facts) {\n const normalized = normalizeFact(scope, fact);\n const sameKey = existing.filter((entry) => entry.key === normalized.key && !entry.obsolete);\n for (const entry of sameKey) {\n if (entry.value !== normalized.value) {\n entry.obsolete = true;\n entry.lastUpdatedAt = new Date().toISOString();\n }\n }\n\n const match = existing.find((entry) => entry.key === normalized.key && entry.value === normalized.value && !entry.obsolete);\n if (match) {\n match.confidence = Math.max(match.confidence, normalized.confidence);\n match.sourceTurn = normalized.sourceTurn;\n match.ttl = normalized.ttl;\n match.tags = normalized.tags;\n match.lastUpdatedAt = normalized.lastUpdatedAt;\n } else {\n existing.push(normalized);\n }\n }\n\n this.buckets.set(scope, existing);\n }\n\n async markObsolete(scope: MemoryScope, keys: string[]): Promise<void> {\n const bucket = this.buckets.get(scope) || [];\n const now = new Date().toISOString();\n for (const fact of bucket) {\n if (keys.includes(fact.key)) {\n fact.obsolete = true;\n fact.lastUpdatedAt = now;\n }\n }\n this.buckets.set(scope, bucket);\n }\n\n async semanticSearch(scope: MemoryScope, query: string, options?: { limit?: number }): Promise<MemoryFact[]> {\n const normalizedQuery = query.toLowerCase();\n const bucket = (this.buckets.get(scope) || []).filter((fact) => !fact.obsolete);\n const scored = bucket\n .map((fact) => {\n const haystack = `${fact.key} ${fact.value} ${(fact.tags || []).join(\" \")}`.toLowerCase();\n const score = haystack.includes(normalizedQuery) ? 2 : normalizedQuery.split(/\\s+/).filter(Boolean).reduce((acc, token) => acc + (haystack.includes(token) ? 1 : 0), 0);\n return { fact, score };\n })\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score || right.fact.confidence - left.fact.confidence)\n .map((entry) => entry.fact);\n return typeof options?.limit === \"number\" ? scored.slice(0, options.limit) : scored;\n }\n}\n\nexport function resolveMemoryStore(config: ResolvedSmartAgentConfig): MemoryStore | undefined {\n if (config.memory.store) return config.memory.store;\n if (config.memory.provider === \"inMemory\") return new InMemoryMemoryStore();\n return undefined;\n}\n\nexport async function readMemoryFacts(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n query: string,\n): Promise<MemoryFact[]> {\n if (!store) return [];\n const scope = config.memory.scope;\n const limit = config.context.lastTurnsToKeep;\n const policy: MemoryReadPolicy = config.memory.readPolicy;\n\n if (policy === \"recent_only\") {\n return store.get(scope, { limit });\n }\n\n if (policy === \"semantic\" && typeof store.semanticSearch === \"function\") {\n return store.semanticSearch(scope, query, { limit });\n }\n\n if (policy === \"hybrid\") {\n const recent = await store.get(scope, { limit: Math.max(3, Math.ceil(limit / 2)) });\n const semantic = typeof store.semanticSearch === \"function\"\n ? await store.semanticSearch(scope, query, { limit: Math.max(3, Math.ceil(limit / 2)) })\n : [];\n const deduped = new Map<string, MemoryFact>();\n for (const fact of [...semantic, ...recent]) {\n deduped.set(`${fact.key}:${fact.value}`, fact);\n }\n return [...deduped.values()].slice(0, limit);\n }\n\n return store.get(scope, { limit });\n}\n\nexport async function writeSummaryFactsToMemory(\n store: MemoryStore | undefined,\n config: ResolvedSmartAgentConfig,\n summary: StructuredSummary | undefined,\n sourceTurn: number,\n): Promise<MemoryFact[]> {\n if (!store || !summary) return [];\n\n const facts: MemoryFact[] = summary.stable_facts.map((fact) => ({\n key: fact.key,\n value: fact.value,\n sourceTurn,\n confidence: fact.confidence ?? 0.8,\n obsolete: false,\n tags: [\"summary_fact\"],\n }));\n\n if (summary.discarded_obsolete.length > 0) {\n await store.markObsolete(config.memory.scope, summary.discarded_obsolete);\n }\n\n if (facts.length > 0) {\n await store.upsert(config.memory.scope, facts);\n }\n\n return store.get(config.memory.scope, { limit: config.context.lastTurnsToKeep + summary.stable_facts.length });\n}","import type { ToolInterface } from \"../../types.js\";\n\n/**\n * Skill primitive — progressive capability disclosure for the smart agent.\n *\n * A Skill is a lazy, self-contained capability bundle. The model always sees a\n * cheap one-line `header`; it calls `open_skill(key)` to load the skill's prompt\n * and (for small skills) bind its tools, or `bind_skill_tools(key, names)` to\n * bind a chosen subset of a fat skill. This keeps the number of bound tools per\n * step small — the property small models need — and replaces an up-front\n * tool-selector pass with on-demand disclosure.\n */\n\nexport type SkillToolHeader = {\n name: string;\n description?: string;\n};\n\nexport type SkillModelTier = \"small\" | \"large\";\n\nexport type Skill = {\n /** Stable key, e.g. \"mcp:atlassian\" | \"integration:google\" | \"builtin:drawio\". */\n key: string;\n title: string;\n /** One-line \"what + when to use\" the model always sees in the catalog. */\n header: string;\n /** Injected (as the open_skill result) only after the skill is opened. */\n prompt: string | (() => Promise<string> | string);\n /** When true, opening this skill should trigger sandbox bootstrap. */\n needsSandbox?: boolean;\n /** Gate: a \"large\"-only skill is hidden from a small-tier model. */\n minModelTier?: SkillModelTier;\n /** Whether the skill is usable in the current workspace (integration connected, etc.). */\n isAvailable?: () => boolean | Promise<boolean>;\n /** Cheap list of the skill's tool headers (names + one-liners). */\n listToolIndex: () => Promise<SkillToolHeader[]> | SkillToolHeader[];\n /** Bind concrete tools. With no names, bind the whole (small) skill. */\n bindTools: (names?: string[]) => Promise<ToolInterface[]> | ToolInterface[];\n /** Optional embedding/heuristic ranking of tool headers for a fat skill. */\n rankToolHeaders?: (\n query: string,\n headers: SkillToolHeader[],\n ) => Promise<SkillToolHeader[]> | SkillToolHeader[];\n /** Deterministic floor: tools to bind when a weak model gives no usable query. */\n defaultBindNames?: string[];\n};\n\nexport type SkillPolicy = {\n /** Max distinct skills open at once (small tier should be 1). */\n maxOpenSkills: number;\n /** Max tools bound from a single skill in one bind call. */\n maxBoundToolsPerSkill: number;\n /** Overall cap on skill-bound tools across the whole run. */\n maxBoundToolsTotal: number;\n /** Current model tier; gates `minModelTier`. */\n modelTier?: SkillModelTier;\n};\n\nexport const DEFAULT_SKILL_POLICY: SkillPolicy = {\n maxOpenSkills: 4,\n maxBoundToolsPerSkill: 12,\n maxBoundToolsTotal: 40,\n};\n\nexport const SMALL_TIER_SKILL_POLICY: SkillPolicy = {\n maxOpenSkills: 1,\n maxBoundToolsPerSkill: 6,\n maxBoundToolsTotal: 18,\n modelTier: \"small\",\n};\n\n/**\n * Mutable per-invoke registry. The skill tools mutate this ref (append-only) and\n * call `__onToolsChanged` so the runtime can rebuild its tool sets. Mirrors the\n * stateRef pattern used by createAskUserQuestionTool.\n */\nexport type SkillRegistryRef = {\n /** Append-only: skills the model has opened this run. */\n openedSkillKeys: string[];\n /** Append-only, deduped by tool name: tools bound from opened skills. */\n boundSkillTools: ToolInterface[];\n /** Rebuild hook wired by createSmartAgent; rebuilds both recovery variants. */\n __onToolsChanged?: () => void;\n};\n\nexport function createSkillRegistryRef(): SkillRegistryRef {\n return { openedSkillKeys: [], boundSkillTools: [] };\n}\n","import type { ToolInterface } from \"../../types.js\";\nimport type { Skill, SkillPolicy, SkillRegistryRef } from \"./types.js\";\n\n/**\n * Pure registry helpers for the skill primitive. No I/O, no agent loop — these\n * are the deterministic core, fully unit-testable on their own.\n */\n\n/**\n * Rebuild BOTH runtime tool-set variants with fresh array references.\n *\n * This is the heart of mid-run skill binding. `syncRuntimeTools` swaps between\n * two PRE-COMPUTED arrays and short-circuits on `currentRuntime.tools ===\n * nextTools`. So to make newly-bound skill tools take effect we must hand back\n * NEW array references (breaking the `===` short-circuit) AND include the skill\n * tools in the recovery variant too (otherwise a recovery-swap iteration would\n * silently drop them).\n */\nexport function composeToolSets(input: {\n base: ToolInterface[];\n boundSkillTools: ToolInterface[];\n recoveryTool?: ToolInterface;\n}): { toolsWithoutRecovery: ToolInterface[]; toolsWithRecovery: ToolInterface[] } {\n const without = [...input.base, ...input.boundSkillTools];\n const withRec = input.recoveryTool ? [...without, input.recoveryTool] : [...without];\n return { toolsWithoutRecovery: without, toolsWithRecovery: withRec };\n}\n\n/**\n * Append tools to the registry, append-only and deduped by name, honoring the\n * overall total cap. Returns the tools actually added (may be fewer than asked).\n */\nexport function appendBoundTools(\n ref: SkillRegistryRef,\n newTools: ToolInterface[],\n policy: Pick<SkillPolicy, \"maxBoundToolsTotal\">,\n): ToolInterface[] {\n const present = new Set(ref.boundSkillTools.map((tool) => tool.name));\n const added: ToolInterface[] = [];\n for (const tool of newTools) {\n if (ref.boundSkillTools.length >= policy.maxBoundToolsTotal) break;\n if (present.has(tool.name)) continue;\n present.add(tool.name);\n ref.boundSkillTools.push(tool);\n added.push(tool);\n }\n return added;\n}\n\n/** Precedence guard: may the model open another (not-yet-open) skill? */\nexport function canOpenSkill(\n ref: SkillRegistryRef,\n policy: SkillPolicy,\n): { ok: true } | { ok: false; reason: string } {\n if (ref.openedSkillKeys.length >= policy.maxOpenSkills) {\n return { ok: false, reason: `max ${policy.maxOpenSkills} skill(s) already open` };\n }\n if (ref.boundSkillTools.length >= policy.maxBoundToolsTotal) {\n return { ok: false, reason: \"skill tool budget exhausted\" };\n }\n return { ok: true };\n}\n\n/** Filter the catalog to skills usable now: available + tier-gated. */\nexport async function resolveAvailableSkills(\n skills: Skill[],\n opts: { modelTier?: SkillPolicy[\"modelTier\"] } = {},\n): Promise<Skill[]> {\n const out: Skill[] = [];\n for (const skill of skills) {\n if (skill.minModelTier === \"large\" && opts.modelTier === \"small\") continue;\n const available = skill.isAvailable ? await skill.isAvailable() : true;\n if (available) out.push(skill);\n }\n return out;\n}\n\n/** The cheap header block the model always sees in its system prompt. */\nexport function buildSkillHeaderBlock(skills: Skill[]): string {\n if (skills.length === 0) return \"\";\n const lines = skills.map((skill) => `- ${skill.key}: ${skill.header}`);\n return [\n \"<available_skills>\",\n \"Open a skill with open_skill(skillKey) to load its tools on demand. Only open what the task needs; close nothing — opened skills stay available for the rest of the run.\",\n ...lines,\n \"</available_skills>\",\n ].join(\"\\n\");\n}\n\nexport function dedupeToolsByName(tools: ToolInterface[]): ToolInterface[] {\n const seen = new Set<string>();\n const out: ToolInterface[] = [];\n for (const tool of tools) {\n if (seen.has(tool.name)) continue;\n seen.add(tool.name);\n out.push(tool);\n }\n return out;\n}\n","import { z } from \"zod\";\n\nimport { createTool } from \"../../tool.js\";\nimport type { ToolInterface } from \"../../types.js\";\nimport { appendBoundTools, canOpenSkill } from \"./registry.js\";\nimport type { Skill, SkillPolicy, SkillRegistryRef } from \"./types.js\";\n\n/**\n * Per-invoke skill tools (`open_skill`, `bind_skill_tools`). They mutate a\n * SkillRegistryRef (append-only) and call `ref.__onToolsChanged()` so the\n * runtime can rebuild its tool sets. Mirrors createAskUserQuestionTool: state\n * is attached to the tool via a private field and read inside `func`.\n */\n\nconst MAX_RETURNED_INDEX = 40;\n\nexport type SkillToolDeps = {\n registryRef: SkillRegistryRef;\n skills: Skill[];\n policy: SkillPolicy;\n};\n\nconst OPEN_SKILL_DESCRIPTION =\n \"Load a capability on demand. Pass a skillKey from <available_skills>. A small \" +\n \"skill binds all its tools immediately; a large one returns a tool index — then \" +\n \"call bind_skill_tools with only the tools you need. Open only what the task needs.\";\n\nconst BIND_SKILL_TOOLS_DESCRIPTION =\n \"After open_skill on a large skill, bind a chosen subset of its tools by name. \" +\n \"Pick the few tools the task actually needs.\";\n\nfunction findSkill(deps: SkillToolDeps, key: string): Skill | undefined {\n return deps.skills.find((skill) => skill.key === key);\n}\n\nexport function createOpenSkillTool(deps: SkillToolDeps): ToolInterface {\n const tool = createTool({\n name: \"open_skill\",\n description: OPEN_SKILL_DESCRIPTION,\n schema: z\n .object({\n skillKey: z.string().min(1).describe(\"A key from <available_skills>.\"),\n query: z\n .string()\n .optional()\n .describe(\"What you need from the skill — used to rank a large skill's tools.\"),\n })\n .strict(),\n func: async ({ skillKey, query }: { skillKey: string; query?: string }) => {\n const { registryRef: ref, policy } = (tool as any)._deps as SkillToolDeps;\n const skill = findSkill((tool as any)._deps, skillKey);\n if (!skill) {\n return { error: `Unknown skill: ${skillKey}. Choose a key listed in <available_skills>.` };\n }\n if (skill.isAvailable && !(await skill.isAvailable())) {\n return { error: `Skill ${skillKey} is not available in this workspace.` };\n }\n\n const alreadyOpen = ref.openedSkillKeys.includes(skillKey);\n if (!alreadyOpen) {\n const guard = canOpenSkill(ref, policy);\n if (!guard.ok) {\n return {\n error: `Cannot open ${skillKey}: ${guard.reason}. Work with the skills already open.`,\n };\n }\n ref.openedSkillKeys.push(skillKey);\n }\n\n const prompt = typeof skill.prompt === \"function\" ? await skill.prompt() : skill.prompt;\n const index = await skill.listToolIndex();\n\n // Small skill: bind everything in one step.\n if (index.length <= policy.maxBoundToolsPerSkill) {\n const bound = await skill.bindTools();\n const added = appendBoundTools(ref, bound, policy);\n if (added.length > 0) ref.__onToolsChanged?.();\n return {\n skillKey,\n prompt,\n needsSandbox: Boolean(skill.needsSandbox),\n boundTools: added.map((t) => t.name),\n // Inject the bound tools into the live runtime for this loop.\n __runtimeToolsDelta: added,\n };\n }\n\n // Fat skill: optionally bind a deterministic default floor (so a weak\n // model that can't pick still gets a working set), then return the index.\n let defaultBound: string[] = [];\n let defaultAdded: ToolInterface[] = [];\n if ((!query || query.trim().length < 3) && skill.defaultBindNames?.length) {\n const bound = await skill.bindTools(skill.defaultBindNames.slice(0, policy.maxBoundToolsPerSkill));\n defaultAdded = appendBoundTools(ref, bound, policy);\n if (defaultAdded.length > 0) ref.__onToolsChanged?.();\n defaultBound = defaultAdded.map((t) => t.name);\n }\n\n const headers =\n query && query.trim().length >= 3 && skill.rankToolHeaders\n ? await skill.rankToolHeaders(query, index)\n : index;\n\n return {\n skillKey,\n prompt,\n needsSandbox: Boolean(skill.needsSandbox),\n boundTools: defaultBound,\n toolIndex: headers.slice(0, MAX_RETURNED_INDEX).map((h) => ({ name: h.name, description: h.description })),\n hint: \"Call bind_skill_tools(skillKey, toolNames) with only the tools you need.\",\n ...(defaultAdded.length > 0 ? { __runtimeToolsDelta: defaultAdded } : {}),\n };\n },\n });\n\n (tool as any)._deps = deps;\n (tool as any).__source = \"smart-skills\";\n return tool;\n}\n\nexport function createBindSkillToolsTool(deps: SkillToolDeps): ToolInterface {\n const tool = createTool({\n name: \"bind_skill_tools\",\n description: BIND_SKILL_TOOLS_DESCRIPTION,\n schema: z\n .object({\n skillKey: z.string().min(1),\n toolNames: z.array(z.string().min(1)).min(1).describe(\"Tool names from the skill's index.\"),\n })\n .strict(),\n func: async ({ skillKey, toolNames }: { skillKey: string; toolNames: string[] }) => {\n const { registryRef: ref, policy } = (tool as any)._deps as SkillToolDeps;\n const skill = findSkill((tool as any)._deps, skillKey);\n if (!skill) {\n return { error: `Unknown skill: ${skillKey}.` };\n }\n if (!ref.openedSkillKeys.includes(skillKey)) {\n return { error: `Call open_skill(\"${skillKey}\") before binding its tools.` };\n }\n\n const capped = toolNames.slice(0, policy.maxBoundToolsPerSkill);\n const bound = await skill.bindTools(capped);\n const added = appendBoundTools(ref, bound, policy);\n if (added.length > 0) ref.__onToolsChanged?.();\n\n return {\n skillKey,\n boundTools: added.map((t) => t.name),\n requested: capped.length,\n truncated: toolNames.length > capped.length,\n ...(added.length > 0 ? { __runtimeToolsDelta: added } : {}),\n };\n },\n });\n\n (tool as any)._deps = deps;\n (tool as any).__source = \"smart-skills\";\n return tool;\n}\n\n/** Both skill tools for an invoke, sharing one registry ref. */\nexport function createSkillTools(deps: SkillToolDeps): ToolInterface[] {\n return [createOpenSkillTool(deps), createBindSkillToolsTool(deps)];\n}\n","import type { ZodSchema } from \"zod\";\nimport type { AgentLimits, ChildContextPolicy, Message, ToolInterface } from \"../../types.js\";\n\n/**\n * Sub-agent primitive — dynamic problem-solving by delegating self-contained\n * subtasks to focused child agents.\n *\n * Two complementary disclosure modes (hybrid by default):\n * - **Registry** — predefined, named sub-agents (`delegate_to(name, input)`).\n * - **Ad-hoc** — the orchestrator writes a role + prompt + tool subset at\n * runtime (`spawn_subagent({ role, prompt, input, tools })`).\n * - **Parallel** — fan out independent subtasks concurrently\n * (`spawn_subagents_parallel({ tasks })`).\n *\n * The primitive reuses the existing delegation guards (depth / child-call\n * budget / context policy) and forwards events, streaming, cancellation and\n * tracing from the parent run into each child. Model-agnostic: a child uses its\n * own `model` override when given, otherwise the parent's model.\n */\n\n/** A predefined sub-agent the orchestrator can invoke by name. */\nexport type SubagentDef = {\n /** Stable id used by `delegate_to`. */\n name: string;\n /** Human-friendly title (defaults to `name`). */\n title?: string;\n /** One-line \"what + when to use\" shown in the `<available_subagents>` catalog. */\n header: string;\n /**\n * Role / system prompt for the child agent. This is fully under your control\n * — it is the per-sub-agent prompt-override surface.\n */\n systemPrompt?: string;\n /**\n * Tool surface for the child:\n * - `ToolInterface[]` — explicit tools.\n * - `string[]` — names resolved against the PARENT's live tool set.\n * - function — built lazily at spawn time.\n * When omitted the child runs tool-free (pure reasoning).\n */\n tools?: ToolInterface[] | string[] | (() => ToolInterface[] | Promise<ToolInterface[]>);\n /** Optional model override. Defaults to the parent agent's model (model-agnostic). */\n model?: any;\n /** Optional JSON output contract for the child. */\n outputSchema?: ZodSchema<any>;\n /** Optional per-child limits override. */\n limits?: AgentLimits;\n /** Override the parent policy's context-seeding behaviour for this sub-agent. */\n childContextPolicy?: ChildContextPolicy;\n /** Gate: hide this sub-agent from the catalog when it returns false. */\n isAvailable?: () => boolean | Promise<boolean>;\n /** Free-form metadata surfaced on `subagent` events. */\n metadata?: Record<string, any>;\n};\n\nexport type SubagentMode = \"off\" | \"registry_only\" | \"registry_and_adhoc\";\n\nexport type SubagentPolicy = {\n /** `registry_and_adhoc` (default) enables both named + ad-hoc spawning. */\n mode: SubagentMode;\n /** Max nesting depth. Shares the delegation depth counter. */\n maxDepth: number;\n /** Total spawn budget per run (across delegate_to + spawn + parallel). */\n maxChildCalls: number;\n /** Fan-out width for `spawn_subagents_parallel`. */\n maxParallel: number;\n /** Default context seeding for children. Overridable per-`SubagentDef`. */\n childContextPolicy: ChildContextPolicy;\n /** Whether ad-hoc spawns may reference the parent's tools by name. */\n allowAdhocTools: boolean;\n};\n\nexport const DEFAULT_SUBAGENT_POLICY: SubagentPolicy = {\n mode: \"registry_and_adhoc\",\n maxDepth: 2,\n maxChildCalls: 8,\n maxParallel: 4,\n childContextPolicy: \"scoped\",\n allowAdhocTools: true,\n};\n\n/** Result of a single sub-agent run (returned to the model as the tool result). */\nexport type SubagentResult = {\n /** Sub-agent name (registry) or role (ad-hoc). */\n name: string;\n mode: \"registry\" | \"adhoc\";\n /** The input the sub-agent was tasked with. */\n input: string;\n /** Final assistant content from the child. */\n content?: string;\n /** Parsed structured output, when the child had an `outputSchema`. */\n output?: any;\n /** Latest child summary, when summarization fired. */\n summary?: string;\n /** Populated when the child failed or was refused by a guard. */\n error?: string;\n durationMs?: number;\n};\n\n/**\n * Mutable per-invoke registry. Records spawn budget usage and completed\n * results. Mirrors the SkillRegistryRef pattern. The durable child-pause state\n * (for HITL resume) lives in `state.ctx.__subagentPending`, NOT here, so it\n * survives the parent invoke boundary.\n */\nexport type SubagentRegistryRef = {\n /** Cumulative spawns this run (delegate + adhoc + each parallel child). */\n spawnedCount: number;\n /** Completed results, in completion order. */\n results: SubagentResult[];\n};\n\nexport function createSubagentRegistryRef(): SubagentRegistryRef {\n return { spawnedCount: 0, results: [] };\n}\n\n/**\n * Durable per-tool-call pause record, stored in `state.ctx.__subagentPending`\n * so a child that paused for human input (approval / ask-user) can be resumed\n * after the host answers at the parent level. Only data — no functions — so it\n * survives snapshot serialization for the in-memory resume path.\n */\nexport type SubagentPendingRecord = {\n /** Parent tool_call id that owns this paused child. */\n parentToolCallId: string;\n /** Sub-agent name / role. */\n name: string;\n mode: \"registry\" | \"adhoc\";\n /** Ad-hoc spec (role/prompt/tools/input) to rebuild the child agent. */\n adhoc?: { role: string; prompt?: string; toolNames?: string[]; outputContract?: string };\n /** The task input the child was running. */\n input: string;\n /** Serializable child SmartState (agent omitted) to restore + resume. */\n childState: any;\n /** Maps the child's pending approval/question id -> parent-surfaced id. */\n pendingKind: \"approval\" | \"user_question\";\n pendingId: string;\n};\n\nexport type SubagentToolNames = {\n delegate: string;\n spawn: string;\n parallel: string;\n};\n\nexport const DEFAULT_SUBAGENT_TOOL_NAMES: SubagentToolNames = {\n delegate: \"delegate_to\",\n spawn: \"spawn_subagent\",\n parallel: \"spawn_subagents_parallel\",\n};\n\n/** Re-export for convenience in the tool/registry modules. */\nexport type { Message };\n","import { z } from \"zod\";\nimport { nanoid } from \"nanoid\";\n\nimport { createTool } from \"../../tool.js\";\nimport type {\n AgentInvokeResult,\n InvokeConfig,\n SmartAgentEvent,\n SmartAgentInstance,\n SmartState,\n ToolInterface,\n} from \"../../types.js\";\nimport { resolveToolApprovalState } from \"../../utils/toolApprovals.js\";\nimport { resolveUserQuestionState } from \"../../utils/userQuestions.js\";\nimport {\n canSpawn,\n findSubagent,\n resolveSubagentTools,\n seedChildMessages,\n withinDepth,\n} from \"./registry.js\";\nimport type {\n SubagentDef,\n SubagentPendingRecord,\n SubagentPolicy,\n SubagentRegistryRef,\n SubagentResult,\n} from \"./types.js\";\n\n/**\n * Per-invoke sub-agent tools (`delegate_to`, `spawn_subagent`,\n * `spawn_subagents_parallel`). They read the parent runtime/context from the\n * tool `_stateRef` (injected by the tools node), build child agents via the\n * injected `buildChild` factory (dependency injection avoids a circular import\n * with createSmartAgent), and forward events/streaming/cancellation into each\n * child. Human-in-the-loop pauses inside a sequential child are surfaced to the\n * parent and resumed via `state.ctx.__subagentPending`.\n */\n\n/** Config a child agent is built from. The factory lives in createSmartAgent. */\nexport type BuildChildConfig = {\n name: string;\n model: any;\n systemPrompt?: string;\n tools: ToolInterface[];\n outputSchema?: any;\n limits?: any;\n};\n\nexport type SubagentToolDeps = {\n registryRef: SubagentRegistryRef;\n subagents: SubagentDef[];\n policy: SubagentPolicy;\n /** DI: build a child SmartAgent instance (createSmartAgent closure). */\n buildChild: (cfg: BuildChildConfig) => SmartAgentInstance;\n /** Optional prompt-override descriptions for the three tools. */\n descriptions?: { delegate?: string; spawn?: string; parallel?: string };\n};\n\nconst DEFAULT_DELEGATE_DESCRIPTION =\n \"Delegate a self-contained subtask to a predefined sub-agent. Pass the sub-agent \" +\n \"name (from <available_subagents>) and a complete, standalone `input` describing \" +\n \"the task and the expected result. The sub-agent runs in isolation and returns a concise result.\";\n\nconst DEFAULT_SPAWN_DESCRIPTION =\n \"Create a sub-agent on the fly. Provide a short `role`, a `prompt` defining how it \" +\n \"should behave, and a complete `input` task. Optionally pass `tools` (names of the \" +\n \"parent's tools the sub-agent may use). Use for one-off specialist subtasks.\";\n\nconst DEFAULT_PARALLEL_DESCRIPTION =\n \"Run several independent subtasks concurrently. Each task is either a registry \" +\n \"`subagent` + `input`, or an ad-hoc `role` + `prompt` + `input`. Returns one result \" +\n \"per task in order. Do NOT use for tasks that require human input (approval / questions).\";\n\nconst CTX_CALLBACK_KEYS = new Set([\n \"__onEvent\",\n \"__onProgress\",\n \"__onStream\",\n \"__traceSession\",\n \"__paused\",\n \"__cancellationToken\",\n \"__abortSignal\",\n \"__deadline\",\n]);\n\n/** Strip non-serializable parts from a child state so it can be stored/snapshotted. */\nfunction cleanChildState(state: SmartState): any {\n const { agent: _agent, ctx, ...rest } = state as any;\n let cleanCtx: Record<string, any> | undefined;\n if (ctx && typeof ctx === \"object\") {\n cleanCtx = {};\n for (const [k, v] of Object.entries(ctx)) {\n if (CTX_CALLBACK_KEYS.has(k)) continue;\n cleanCtx[k] = v;\n }\n }\n return { ...rest, ctx: cleanCtx };\n}\n\n/** Forward a child event to the parent host, stamped with sub-agent origin. */\nfunction makeChildEventForwarder(\n parentOnEvent: ((e: SmartAgentEvent) => void) | undefined,\n spawnId: string,\n name: string,\n) {\n return (event: SmartAgentEvent) => {\n if (!parentOnEvent) return;\n // Do not leak the child's terminal signals as the parent's own. The parent\n // emits dedicated `subagent` lifecycle events instead.\n if (event?.type === \"finalAnswer\" || event?.type === \"metadata\") return;\n try {\n parentOnEvent({ ...(event as any), subagentId: spawnId, subagentName: name });\n } catch {\n /* host callback errors never break the run */\n }\n };\n}\n\n/** Build the child InvokeConfig that forwards events/streaming/cancellation. */\nfunction buildChildConfig(parentCtx: Record<string, any>, spawnId: string, name: string): InvokeConfig {\n const streaming = Boolean(parentCtx.__streaming);\n const parentOnStream = parentCtx.__onStream as ((c: { text: string; isFinal?: boolean }) => void) | undefined;\n return {\n onEvent: makeChildEventForwarder(parentCtx.__onEvent, spawnId, name),\n onProgress: parentCtx.__onProgress,\n // Forward streaming deltas but swallow the child's `isFinal` chunk so the\n // host does not mistake a child completion for the parent's final answer.\n onStream: streaming && parentOnStream ? (chunk) => { if (!chunk.isFinal) parentOnStream(chunk); } : undefined,\n stream: streaming,\n cancellationToken: parentCtx.__cancellationToken ?? parentCtx.__abortSignal,\n };\n}\n\ntype ResolvedSpec = {\n name: string;\n mode: \"registry\" | \"adhoc\";\n systemPrompt?: string;\n model: any;\n tools: ToolInterface[];\n outputSchema?: any;\n limits?: any;\n childContextPolicy: SubagentPolicy[\"childContextPolicy\"];\n metadata?: Record<string, any>;\n /** Preserved for HITL resume of an ad-hoc child. */\n adhoc?: { role: string; prompt?: string; toolNames?: string[]; outputContract?: string };\n};\n\nfunction summaryOf(state: SmartState | undefined): string | undefined {\n const summaries = state?.summaries;\n return Array.isArray(summaries) && summaries.length > 0 ? summaries[summaries.length - 1] : undefined;\n}\n\n/**\n * Run one sub-agent task. Handles a fresh run AND a resume-after-human-input\n * (when a pending record exists for this parent tool-call). Sequential callers\n * (delegate_to / spawn_subagent) pass `allowHITL=true`; parallel children pass\n * `false` and surface a human-input requirement as an error result.\n */\nasync function runChild(\n spec: ResolvedSpec,\n input: string,\n deps: SubagentToolDeps,\n ref: any /* tool _stateRef */,\n opts: { allowHITL: boolean; parentToolCallId: string; parallel?: boolean; isResume?: boolean; record?: SubagentPendingRecord },\n): Promise<{ kind: \"result\"; result: SubagentResult } | { kind: \"approval\"; toolCallId: string; approvalId: string } | { kind: \"user_question\"; toolCallId: string; id: string }> {\n const parentCtx: Record<string, any> = ref.ctx || {};\n const parentOnEvent = parentCtx.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const spawnId = `sa_${nanoid(6)}`;\n const start = Date.now();\n\n const child = deps.buildChild({\n name: spec.name,\n model: spec.model,\n systemPrompt: spec.systemPrompt,\n tools: spec.tools,\n outputSchema: spec.outputSchema,\n limits: spec.limits,\n });\n\n const childConfig = buildChildConfig(parentCtx, spawnId, spec.name);\n\n let childInput: SmartState;\n if (opts.isResume && opts.record) {\n // Apply the host's resolution (held on the parent-surfaced pending entry)\n // to the restored child state, then resume the child.\n const restored = { ...opts.record.childState } as SmartState;\n if (opts.record.pendingKind === \"approval\") {\n const entry = (ref.pendingApprovals || []).find((e: any) => e.id === opts.record!.pendingId);\n if (!entry) {\n return { kind: \"result\", result: { name: spec.name, mode: spec.mode, input, error: \"Pending approval resolution missing on resume.\" } };\n }\n // Still unanswered: this is a second concurrent pause the host has not\n // resolved yet (two delegating tool_calls both paused in one turn, and the\n // host answered the other). Re-surface it instead of force-resolving with\n // empty data (which would throw and abandon the child).\n if (entry.status === \"pending\") {\n if (!parentCtx.__awaitingApproval) {\n parentCtx.__awaitingApproval = { approvalId: entry.id, toolCallId: entry.toolCallId, toolName: entry.toolName, requestedAt: entry.requestedAt };\n }\n parentCtx.__resumeStage = \"tools\";\n return { kind: \"approval\", toolCallId: entry.toolCallId, approvalId: entry.id };\n }\n childInput = resolveToolApprovalState(restored, {\n id: opts.record.pendingId,\n approved: entry.status === \"approved\",\n approvedArgs: entry.approvedArgs,\n decidedBy: entry.decidedBy,\n comment: entry.comment,\n });\n } else {\n const entry = (ref.pendingUserQuestions || []).find((e: any) => e.id === opts.record!.pendingId);\n if (!entry) {\n return { kind: \"result\", result: { name: spec.name, mode: spec.mode, input, error: \"Pending question resolution missing on resume.\" } };\n }\n if (entry.status === \"pending\") {\n if (!parentCtx.__awaitingUserQuestion) {\n parentCtx.__awaitingUserQuestion = { id: entry.id, toolCallId: entry.toolCallId, requestedAt: entry.requestedAt };\n }\n parentCtx.__resumeStage = \"tools\";\n return { kind: \"user_question\", toolCallId: entry.toolCallId, id: entry.id };\n }\n childInput = resolveUserQuestionState(restored, {\n id: opts.record.pendingId,\n answers: entry.answers,\n answeredBy: entry.answeredBy,\n notes: entry.notes,\n cancelled: entry.cancelled === true,\n });\n }\n } else {\n parentOnEvent?.({ type: \"subagent\", phase: \"start\", name: spec.name, id: spawnId, mode: spec.mode, parallel: opts.parallel, parentToolCallId: opts.parentToolCallId, input } as any);\n const currentDepth = Number(parentCtx.__delegationDepth) || 0;\n childInput = {\n messages: seedChildMessages(spec.childContextPolicy, ref.messages || [], input),\n ctx: { __delegationDepth: currentDepth + 1 },\n } as SmartState;\n }\n\n let res: AgentInvokeResult<any>;\n try {\n res = await child.invoke(childInput, childConfig);\n } catch (err: any) {\n const result: SubagentResult = { name: spec.name, mode: spec.mode, input, error: err?.message || String(err), durationMs: Date.now() - start };\n deps.registryRef.results.push(result);\n parentOnEvent?.({ type: \"subagent\", phase: \"error\", name: spec.name, id: spawnId, mode: spec.mode, error: { message: result.error! }, parentToolCallId: opts.parentToolCallId } as any);\n return { kind: \"result\", result };\n }\n\n const childState = res.state as SmartState | undefined;\n const awaitingApproval = childState?.ctx?.__awaitingApproval;\n const awaitingQuestion = childState?.ctx?.__awaitingUserQuestion;\n\n // ── Child paused for human input ────────────────────────────────────────────\n if (childState && (awaitingApproval || awaitingQuestion)) {\n if (!opts.allowHITL) {\n const result: SubagentResult = {\n name: spec.name, mode: spec.mode, input,\n error: \"Sub-agent requested human input, which is not supported inside parallel fan-out. Run it via delegate_to / spawn_subagent instead.\",\n durationMs: Date.now() - start,\n };\n deps.registryRef.results.push(result);\n return { kind: \"result\", result };\n }\n\n const pendingStore = (parentCtx.__subagentPending ||= {} as Record<string, SubagentPendingRecord>);\n\n if (awaitingApproval) {\n const childEntry = (childState.pendingApprovals || []).find((e) => e.status === \"pending\");\n if (childEntry) {\n // Surface the same entry to the parent, tagged so the host can render it.\n const surfaced = { ...childEntry, metadata: { ...(childEntry.metadata || {}), __subagent: { parentToolCallId: opts.parentToolCallId, name: spec.name } } };\n (ref.pendingApprovals ||= []).push(surfaced);\n // Signal the parent loop to pause (a tool returning __awaitingToolApproval\n // must set these itself; the tools node does not on this path). Guard the\n // single __awaiting* slot: if a concurrent sibling already claimed it this\n // turn, leave it primary — this one is still recorded and re-surfaces on a\n // later resume round so both pauses drain deterministically.\n if (!parentCtx.__awaitingApproval && !parentCtx.__awaitingUserQuestion) {\n parentCtx.__awaitingApproval = { approvalId: surfaced.id, toolCallId: surfaced.toolCallId, toolName: surfaced.toolName, requestedAt: surfaced.requestedAt };\n }\n parentCtx.__resumeStage = \"tools\";\n pendingStore[opts.parentToolCallId] = {\n parentToolCallId: opts.parentToolCallId, name: spec.name, mode: spec.mode,\n adhoc: spec.adhoc, input, childState: cleanChildState(childState),\n pendingKind: \"approval\", pendingId: childEntry.id,\n };\n parentOnEvent?.({ type: \"subagent\", phase: \"paused\", name: spec.name, id: spawnId, mode: spec.mode, parentToolCallId: opts.parentToolCallId } as any);\n return { kind: \"approval\", toolCallId: surfaced.toolCallId, approvalId: surfaced.id };\n }\n }\n\n if (awaitingQuestion) {\n const childEntry = (childState.pendingUserQuestions || []).find((e) => e.status === \"pending\");\n if (childEntry) {\n const surfaced = { ...childEntry, metadata: { ...(childEntry.metadata || {}), __subagent: { parentToolCallId: opts.parentToolCallId, name: spec.name } } };\n (ref.pendingUserQuestions ||= []).push(surfaced);\n // Guard the single __awaiting* slot against a concurrent sibling pause\n // (see the approval branch above).\n if (!parentCtx.__awaitingUserQuestion && !parentCtx.__awaitingApproval) {\n parentCtx.__awaitingUserQuestion = { id: surfaced.id, toolCallId: surfaced.toolCallId, requestedAt: surfaced.requestedAt };\n }\n parentCtx.__resumeStage = \"tools\";\n pendingStore[opts.parentToolCallId] = {\n parentToolCallId: opts.parentToolCallId, name: spec.name, mode: spec.mode,\n adhoc: spec.adhoc, input, childState: cleanChildState(childState),\n pendingKind: \"user_question\", pendingId: childEntry.id,\n };\n parentOnEvent?.({ type: \"subagent\", phase: \"paused\", name: spec.name, id: spawnId, mode: spec.mode, parentToolCallId: opts.parentToolCallId } as any);\n return { kind: \"user_question\", toolCallId: surfaced.toolCallId, id: surfaced.id };\n }\n }\n }\n\n // ── Child completed ─────────────────────────────────────────────────────────\n if (parentCtx.__subagentPending?.[opts.parentToolCallId]) {\n delete parentCtx.__subagentPending[opts.parentToolCallId];\n }\n const result: SubagentResult = {\n name: spec.name,\n mode: spec.mode,\n input,\n content: res.content,\n output: res.output,\n summary: summaryOf(childState),\n durationMs: Date.now() - start,\n };\n deps.registryRef.results.push(result);\n parentOnEvent?.({ type: \"subagent\", phase: \"result\", name: spec.name, id: spawnId, mode: spec.mode, content: res.content, durationMs: result.durationMs, parentToolCallId: opts.parentToolCallId } as any);\n return { kind: \"result\", result };\n}\n\n/** Resolve a registry sub-agent name into a concrete spec. */\nasync function specFromRegistry(def: SubagentDef, deps: SubagentToolDeps, parentRuntime: any): Promise<ResolvedSpec> {\n const tools = await resolveSubagentTools(def.tools, parentRuntime?.tools || []);\n return {\n name: def.name,\n mode: \"registry\",\n systemPrompt: def.systemPrompt,\n model: def.model ?? parentRuntime?.model,\n tools,\n outputSchema: def.outputSchema,\n limits: def.limits,\n childContextPolicy: def.childContextPolicy ?? deps.policy.childContextPolicy,\n metadata: def.metadata,\n };\n}\n\n/** Resolve an ad-hoc {role, prompt, tools} spec. */\nasync function specFromAdhoc(\n args: { role: string; prompt?: string; tools?: string[]; toolNames?: string[]; outputContract?: string },\n deps: SubagentToolDeps,\n parentRuntime: any,\n): Promise<ResolvedSpec> {\n // On a fresh spawn the borrowed tools arrive as `args.tools`; on a HITL resume\n // they come from the durable record as `toolNames` (SubagentPendingRecord.adhoc).\n // Accept either so a resumed ad-hoc child keeps its borrowed tools.\n const toolNames = deps.policy.allowAdhocTools ? (args.tools ?? args.toolNames ?? []) : [];\n const tools = await resolveSubagentTools(toolNames, parentRuntime?.tools || []);\n const systemPrompt = [args.prompt, args.outputContract ? `Output contract: ${args.outputContract}` : \"\"].filter(Boolean).join(\"\\n\\n\");\n return {\n name: args.role,\n mode: \"adhoc\",\n systemPrompt: systemPrompt || undefined,\n model: parentRuntime?.model,\n tools,\n childContextPolicy: deps.policy.childContextPolicy,\n adhoc: { role: args.role, prompt: args.prompt, toolNames, outputContract: args.outputContract },\n };\n}\n\n/** Map a runChild outcome into the tool's return payload understood by the tools node. */\nfunction toToolReturn(outcome: Awaited<ReturnType<typeof runChild>>): any {\n if (outcome.kind === \"approval\") {\n return { __awaitingToolApproval: true, toolCallId: outcome.toolCallId, approvalId: outcome.approvalId };\n }\n if (outcome.kind === \"user_question\") {\n return { __awaitingUserQuestion: true, toolCallId: outcome.toolCallId, id: outcome.id };\n }\n return outcome.result;\n}\n\nexport function createDelegateTool(deps: SubagentToolDeps): ToolInterface {\n const names = deps.subagents.map((s) => s.name);\n const tool = createTool({\n name: \"delegate_to\",\n description: deps.descriptions?.delegate ?? DEFAULT_DELEGATE_DESCRIPTION,\n schema: z\n .object({\n subagent: (names.length > 0 ? z.enum(names as [string, ...string[]]) : z.string().min(1)).describe(\"Name of a sub-agent from <available_subagents>.\"),\n input: z.string().min(1).describe(\"Complete, standalone task for the sub-agent.\"),\n })\n .strict(),\n func: async ({ subagent, input }: { subagent: string; input: string }) => {\n const ref: any = (tool as any)._stateRef || {};\n const d = (tool as any)._deps as SubagentToolDeps;\n const parentRuntime = ref.parentRuntime;\n const parentToolCallId: string = ref.__currentToolCallId || `delegate_${nanoid(6)}`;\n const parentCtx: Record<string, any> = ref.ctx || (ref.ctx = {});\n\n const def = findSubagent(d.subagents, subagent);\n if (!def) return { error: `Unknown sub-agent: ${subagent}. Choose one from <available_subagents>.` };\n if (def.isAvailable && !(await def.isAvailable())) return { error: `Sub-agent ${subagent} is not available right now.` };\n\n const record = parentCtx.__subagentPending?.[parentToolCallId] as SubagentPendingRecord | undefined;\n const spec = await specFromRegistry(def, d, parentRuntime);\n if (!record) {\n const depth = withinDepth(Number(parentCtx.__delegationDepth) || 0, d.policy);\n if (!depth.ok) return { error: depth.reason };\n const budget = canSpawn(d.registryRef, d.policy, 1);\n if (!budget.ok) return { error: budget.reason };\n d.registryRef.spawnedCount += 1;\n }\n return toToolReturn(await runChild(spec, record?.input ?? input, d, ref, { allowHITL: true, parentToolCallId, isResume: !!record, record }));\n },\n });\n (tool as any)._deps = deps;\n (tool as any)._stateRef = {};\n (tool as any).__source = \"smart-subagents\";\n return tool;\n}\n\nexport function createSpawnTool(deps: SubagentToolDeps): ToolInterface {\n const tool = createTool({\n name: \"spawn_subagent\",\n description: deps.descriptions?.spawn ?? DEFAULT_SPAWN_DESCRIPTION,\n schema: z\n .object({\n role: z.string().min(1).describe(\"Short role name, e.g. 'db-analyst'.\"),\n prompt: z.string().optional().describe(\"System prompt defining how the sub-agent behaves.\"),\n input: z.string().min(1).describe(\"Complete, standalone task for the sub-agent.\"),\n tools: z.array(z.string().min(1)).optional().describe(\"Names of the parent's tools the sub-agent may use.\"),\n outputContract: z.string().optional().describe(\"Optional description of the expected output shape.\"),\n })\n .strict(),\n func: async (args: { role: string; prompt?: string; input: string; tools?: string[]; outputContract?: string }) => {\n const ref: any = (tool as any)._stateRef || {};\n const d = (tool as any)._deps as SubagentToolDeps;\n if (d.policy.mode !== \"registry_and_adhoc\") {\n return { error: \"Ad-hoc sub-agents are disabled (subagentPolicy.mode is not 'registry_and_adhoc'). Use delegate_to.\" };\n }\n const parentRuntime = ref.parentRuntime;\n const parentToolCallId: string = ref.__currentToolCallId || `spawn_${nanoid(6)}`;\n const parentCtx: Record<string, any> = ref.ctx || (ref.ctx = {});\n\n const record = parentCtx.__subagentPending?.[parentToolCallId] as SubagentPendingRecord | undefined;\n const spec = record?.adhoc\n ? await specFromAdhoc(record.adhoc, d, parentRuntime)\n : await specFromAdhoc(args, d, parentRuntime);\n if (!record) {\n const depth = withinDepth(Number(parentCtx.__delegationDepth) || 0, d.policy);\n if (!depth.ok) return { error: depth.reason };\n const budget = canSpawn(d.registryRef, d.policy, 1);\n if (!budget.ok) return { error: budget.reason };\n d.registryRef.spawnedCount += 1;\n }\n return toToolReturn(await runChild(spec, record?.input ?? args.input, d, ref, { allowHITL: true, parentToolCallId, isResume: !!record, record }));\n },\n });\n (tool as any)._deps = deps;\n (tool as any)._stateRef = {};\n (tool as any).__source = \"smart-subagents\";\n return tool;\n}\n\nexport function createParallelTool(deps: SubagentToolDeps): ToolInterface {\n const tool = createTool({\n name: \"spawn_subagents_parallel\",\n description: deps.descriptions?.parallel ?? DEFAULT_PARALLEL_DESCRIPTION,\n schema: z\n .object({\n tasks: z\n .array(\n z\n .object({\n subagent: z.string().optional().describe(\"Registry sub-agent name.\"),\n role: z.string().optional().describe(\"Ad-hoc role (when not using `subagent`).\"),\n prompt: z.string().optional(),\n tools: z.array(z.string().min(1)).optional(),\n input: z.string().min(1),\n })\n .strict(),\n )\n .min(1)\n .max(16)\n .describe(\"Independent subtasks to run concurrently.\"),\n })\n .strict(),\n func: async ({ tasks }: { tasks: Array<{ subagent?: string; role?: string; prompt?: string; tools?: string[]; input: string }> }) => {\n const ref: any = (tool as any)._stateRef || {};\n const d = (tool as any)._deps as SubagentToolDeps;\n const parentRuntime = ref.parentRuntime;\n const parentToolCallId: string = ref.__currentToolCallId || `parallel_${nanoid(6)}`;\n const parentCtx: Record<string, any> = ref.ctx || (ref.ctx = {});\n\n const depth = withinDepth(Number(parentCtx.__delegationDepth) || 0, d.policy);\n if (!depth.ok) return { error: depth.reason };\n\n // Resolve specs first (validation), then charge the spawn budget only for\n // the tasks that will actually spawn a child (invalid tasks short-circuit\n // to an error result and must not consume the per-run child-call budget).\n const specs: Array<{ spec: ResolvedSpec; input: string } | { error: string; input: string }> = [];\n for (const task of tasks) {\n if (task.subagent) {\n const def = findSubagent(d.subagents, task.subagent);\n if (!def) { specs.push({ error: `Unknown sub-agent: ${task.subagent}`, input: task.input }); continue; }\n specs.push({ spec: await specFromRegistry(def, d, parentRuntime), input: task.input });\n } else if (task.role) {\n if (d.policy.mode !== \"registry_and_adhoc\") { specs.push({ error: \"Ad-hoc sub-agents are disabled.\", input: task.input }); continue; }\n specs.push({ spec: await specFromAdhoc({ role: task.role, prompt: task.prompt, tools: task.tools }, d, parentRuntime), input: task.input });\n } else {\n specs.push({ error: \"Each task needs either `subagent` or `role`.\", input: task.input });\n }\n }\n\n const spawnCount = specs.filter((entry) => !(\"error\" in entry)).length;\n const budget = canSpawn(d.registryRef, d.policy, spawnCount);\n if (!budget.ok) return { error: budget.reason };\n d.registryRef.spawnedCount += spawnCount;\n\n const results: SubagentResult[] = new Array(specs.length);\n const concurrency = Math.max(1, Math.min(d.policy.maxParallel, specs.length));\n let cursor = 0;\n const worker = async () => {\n while (true) {\n const i = cursor++;\n if (i >= specs.length) return;\n const entry = specs[i];\n if (\"error\" in entry) {\n results[i] = { name: \"?\", mode: \"adhoc\", input: entry.input, error: entry.error };\n continue;\n }\n const outcome = await runChild(entry.spec, entry.input, d, ref, {\n allowHITL: false,\n parentToolCallId: `${parentToolCallId}#${i}`,\n parallel: true,\n });\n results[i] = outcome.kind === \"result\"\n ? outcome.result\n : { name: entry.spec.name, mode: entry.spec.mode, input: entry.input, error: \"Unexpected pause in parallel child.\" };\n }\n };\n await Promise.all(Array.from({ length: concurrency }, () => worker()));\n return { results };\n },\n });\n (tool as any)._deps = deps;\n (tool as any)._stateRef = {};\n (tool as any).__source = \"smart-subagents\";\n return tool;\n}\n\n/** Build the sub-agent tool set for an invoke, all sharing one registry ref. */\nexport function createSubagentTools(deps: SubagentToolDeps): ToolInterface[] {\n const tools: ToolInterface[] = [];\n if (deps.subagents.length > 0) tools.push(createDelegateTool(deps));\n if (deps.policy.mode === \"registry_and_adhoc\") tools.push(createSpawnTool(deps));\n tools.push(createParallelTool(deps));\n return tools;\n}\n","import type { AgentInvokeResult, InvokeConfig, SmartAgentOptions, SmartState, SmartAgentInstance, HumanInTheLoopAskUserConfig } from \"../types.js\";\nimport type { ZodSchema } from \"zod\";\nimport { createAgent } from \"../agent.js\";\nimport { createContextTools, createGetToolResponseTool, hasToolResponseRecoveryReference } from \"../contextTools.js\";\nimport { createAskUserQuestionTool } from \"../humanLoop.js\";\nimport { createContextSummarizeNode } from \"../nodes/contextSummarize.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { resolverDecisionFactory, toolsDecisionFactory } from \"../graph/decisions.js\";\nimport { normalizeSmartAgentOptions } from \"./runtimeConfig.js\";\nimport { buildModelMessages } from \"./contextPolicy.js\";\nimport { readMemoryFacts, resolveMemoryStore, writeSummaryFactsToMemory } from \"./memory.js\";\nimport { StructuredOutputManager } from \"../structuredOutput/manager.js\";\nimport { resolveStrategy, getModelCapabilities } from \"../structuredOutput/resolver.js\";\nimport { extractMessageText } from \"../utils/content.js\";\nimport { createSkillRegistryRef, DEFAULT_SKILL_POLICY, type Skill, type SkillPolicy } from \"./skills/types.js\";\nimport { createSkillTools } from \"./skills/skillTools.js\";\nimport { appendBoundTools, buildSkillHeaderBlock, composeToolSets, resolveAvailableSkills } from \"./skills/registry.js\";\nimport { createSubagentRegistryRef, DEFAULT_SUBAGENT_POLICY, type SubagentDef, type SubagentPolicy } from \"./subagents/types.js\";\nimport { buildSubagentCatalogBlock, resolveAvailableSubagents } from \"./subagents/registry.js\";\nimport { createSubagentTools, type BuildChildConfig, type SubagentToolDeps } from \"./subagents/subagentTools.js\";\nimport type { PromptHooks, ToolInterface } from \"../types.js\";\n\n// SmartAgent on top of core createAgent: adds system prompt, optional planning context tools, and token-aware summarization.\nexport function createSmartAgent<TOutput = unknown>(opts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> }): SmartAgentInstance<TOutput> {\n const resolved = normalizeSmartAgentOptions(opts);\n const planningEnabled = resolved.planning.mode !== 'off';\n const memoryStore = resolveMemoryStore(resolved);\n const runtimeOpts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> } = {\n ...opts,\n runtimeProfile: resolved.runtimeProfile,\n limits: resolved.limits,\n summarization: resolved.summarization,\n context: resolved.context,\n planning: resolved.planning,\n delegation: resolved.delegation,\n memory: { ...resolved.memory, store: memoryStore },\n toolResponses: resolved.toolResponses,\n useTodoList: planningEnabled,\n };\n\n // Build a placeholder stateRef + tool set for the base agent construction.\n // Each invoke replaces these with fresh per-call instances so concurrent\n // invocations of the same agent do not clobber each other's plan/todo state.\n const userTools = ((opts.tools as any) ?? []) as any[];\n const factoryStateRef: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined, planVersion: 0, adherenceScore: 0 };\n const factoryContextTools = createContextTools(factoryStateRef, { planningEnabled, includeGetToolResponse: false });\n\n const askUserConfig: HumanInTheLoopAskUserConfig | undefined = (() => {\n const raw = (opts as any).humanInTheLoop?.askUser;\n if (!raw) return undefined;\n if (raw === true) return { enabled: true, allowFreeText: true };\n return {\n enabled: true,\n allowFreeText: raw.allowFreeText !== false,\n promptOverride: raw.promptOverride,\n };\n })();\n\n const factoryToolsWithoutRecovery = [...userTools, ...factoryContextTools];\n if (askUserConfig) {\n factoryToolsWithoutRecovery.push(createAskUserQuestionTool(factoryStateRef, askUserConfig));\n }\n\n // Progressive capability disclosure: when `skills` are supplied, the model\n // sees cheap skill headers and opens them on demand to bind their tools.\n const skills: Skill[] = ((opts as any).skills as Skill[] | undefined) ?? [];\n const skillPolicy: SkillPolicy = ((opts as any).skillPolicy as SkillPolicy | undefined) ?? DEFAULT_SKILL_POLICY;\n const skillsEnabled = skills.length > 0;\n\n // Sub-agents: dynamic problem decomposition (registry + ad-hoc + parallel).\n // OPT-IN: the spawn tools + <available_subagents> catalog are only wired when\n // the caller explicitly passes `subagents` or `subagentPolicy`. Without either,\n // a plain createSmartAgent stays sub-agent-free.\n const subagentsProvided = (opts as any).subagents !== undefined || (opts as any).subagentPolicy !== undefined;\n const subagents: SubagentDef[] = ((opts as any).subagents as SubagentDef[] | undefined) ?? [];\n const subagentPolicy: SubagentPolicy = ((opts as any).subagentPolicy as SubagentPolicy | undefined) ?? DEFAULT_SUBAGENT_POLICY;\n const subagentsEnabled = subagentsProvided && subagentPolicy.mode !== \"off\" && (subagents.length > 0 || subagentPolicy.mode === \"registry_and_adhoc\");\n const promptHooks: PromptHooks | undefined = (opts as any).promptHooks as PromptHooks | undefined;\n\n // DI factory so the sub-agent tools can build child agents without importing\n // createSmartAgent (avoids a circular module dependency). Children inherit the\n // parent's HITL/reasoning/token wiring but NOT its sub-agents (depth-guarded).\n const buildChild = (cfg: BuildChildConfig): SmartAgentInstance => createSmartAgent({\n name: cfg.name,\n model: cfg.model,\n tools: cfg.tools,\n systemPrompt: cfg.systemPrompt,\n outputSchema: cfg.outputSchema,\n limits: cfg.limits,\n runtimeProfile: resolved.runtimeProfile,\n humanInTheLoop: (opts as any).humanInTheLoop,\n reasoning: (opts as any).reasoning,\n tokenCounter: (opts as any).tokenCounter,\n costEstimator: (opts as any).costEstimator,\n promptHooks,\n // Sub-agents are single-level by design: a child never gets its own spawn\n // tools, so it cannot delegate further. This keeps decomposition bounded and\n // is why the depth guard mainly governs `asTool`-composed nesting (which seeds\n // __delegationDepth externally) rather than sub-agent-of-sub-agent recursion.\n subagents: [],\n subagentPolicy: { ...subagentPolicy, mode: \"off\" },\n } as any);\n\n // Apply description overrides uniformly to any tool (clones the few user/skill\n // tools that have an override so shared tool objects are never mutated).\n const decorateToolDescriptions = (tools: ToolInterface[]): ToolInterface[] => {\n const overrides = promptHooks?.toolDescriptions;\n if (!overrides) return tools;\n return tools.map((tool) => {\n const override = overrides[(tool as any)?.name];\n if (override === undefined) return tool;\n const next = typeof override === \"function\" ? override((tool as any).description || \"\") : override;\n if (next === (tool as any).description) return tool;\n return { ...(tool as any), description: next } as ToolInterface;\n });\n };\n\n // Pre-resolve the structured-output manager so we can plug the `response`\n // finalize tool into the smart runtime's tool set (state.agent.tools).\n // Otherwise the smart agent would override base agent's tools without the\n // finalize tool and the model could never call it.\n const soManagerFactory = opts.outputSchema\n ? new StructuredOutputManager<TOutput>(opts.outputSchema, resolveStrategy(opts.model))\n : undefined;\n const modelCapabilities = opts.outputSchema ? getModelCapabilities(opts.model) : undefined;\n const responseFinalizeTool = soManagerFactory && modelCapabilities?.structuredOutput !== \"native\"\n ? soManagerFactory.getResponseTool()\n : undefined;\n\n type InvokeToolSet = {\n stateRef: any;\n toolsWithoutRecovery: any[];\n toolsWithRecovery: any[];\n skillRegistryRef?: any;\n subagentRegistryRef?: any;\n };\n const buildInvokeToolSet = (): InvokeToolSet => {\n const ref: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined, planVersion: 0, adherenceScore: 0 };\n const ctxTools = createContextTools(ref, { planningEnabled, includeGetToolResponse: false });\n const recoveryTool = createGetToolResponseTool(ref);\n const coreBase = [...userTools, ...ctxTools];\n if (responseFinalizeTool) coreBase.push(responseFinalizeTool);\n if (askUserConfig) coreBase.push(createAskUserQuestionTool(ref, askUserConfig));\n\n // Sub-agent tools share one per-invoke registry ref (spawn budget/results).\n let subagentRegistryRef: any;\n if (subagentsEnabled) {\n subagentRegistryRef = createSubagentRegistryRef();\n const deps: SubagentToolDeps = {\n registryRef: subagentRegistryRef,\n subagents,\n policy: subagentPolicy,\n buildChild,\n // NOTE: promptHooks.toolDescriptions overrides for the sub-agent tools are\n // applied uniformly (and only) by decorateToolDescriptions below, so the\n // function form of an override receives the real DEFAULT_* string. Baking\n // them in here as well would double-apply and stringify the function.\n };\n coreBase.push(...createSubagentTools(deps));\n }\n\n if (!skillsEnabled) {\n const without = decorateToolDescriptions(coreBase);\n const withRec = decorateToolDescriptions([...coreBase, recoveryTool]);\n return { stateRef: ref, toolsWithoutRecovery: without, toolsWithRecovery: withRec, subagentRegistryRef };\n }\n\n // Skill mode: open_skill/bind_skill_tools mutate a per-invoke registry and\n // call __onToolsChanged, which rebuilds BOTH tool-set variants with fresh\n // references so syncRuntimeTools' identity-swap propagates the newly-bound\n // tools (and the recovery variant can never drop them).\n const toolSet: InvokeToolSet = { stateRef: ref, toolsWithoutRecovery: [], toolsWithRecovery: [], subagentRegistryRef };\n const skillRegistryRef = createSkillRegistryRef();\n const skillMetaTools = createSkillTools({ registryRef: skillRegistryRef, skills, policy: skillPolicy });\n const baseWithMeta = [...coreBase, ...skillMetaTools];\n const rebuild = () => {\n const composed = composeToolSets({\n base: baseWithMeta,\n boundSkillTools: skillRegistryRef.boundSkillTools,\n recoveryTool,\n });\n toolSet.toolsWithoutRecovery = decorateToolDescriptions(composed.toolsWithoutRecovery);\n toolSet.toolsWithRecovery = decorateToolDescriptions(composed.toolsWithRecovery);\n };\n skillRegistryRef.__onToolsChanged = rebuild;\n toolSet.skillRegistryRef = skillRegistryRef;\n rebuild();\n return toolSet;\n };\n\n // Skill state is per-invoke, so a resumed run (after any pause) would otherwise\n // rebuild the skill registry empty and drop every opened/bound skill tool. We\n // persist the opened keys + bound tool names on ctx.__skillState and rehydrate\n // by re-binding on the next invoke, so bound skill tools survive pause/resume.\n type PersistedSkillState = { openedSkillKeys: string[]; boundToolNames: string[] };\n async function rehydrateSkillRegistry(ref: any, persisted: PersistedSkillState | undefined): Promise<boolean> {\n if (!persisted) return false;\n const opened = Array.isArray(persisted.openedSkillKeys) ? persisted.openedSkillKeys : [];\n const boundNames = new Set(Array.isArray(persisted.boundToolNames) ? persisted.boundToolNames : []);\n if (opened.length === 0) return false;\n let changed = false;\n for (const key of opened) {\n if (!ref.openedSkillKeys.includes(key)) ref.openedSkillKeys.push(key);\n const skill = skills.find((s) => s.key === key);\n if (!skill) continue;\n let bound;\n try { bound = await skill.bindTools(); } catch { continue; }\n const wanted = (bound as any[]).filter((t) => boundNames.has(t.name));\n const added = appendBoundTools(ref, wanted, skillPolicy);\n if (added.length > 0) changed = true;\n }\n return changed;\n }\n function skillStateFromRegistry(ref: any): PersistedSkillState | undefined {\n if (!ref || !Array.isArray(ref.openedSkillKeys) || ref.openedSkillKeys.length === 0) return undefined;\n return {\n openedSkillKeys: [...ref.openedSkillKeys],\n boundToolNames: (ref.boundSkillTools || []).map((t: any) => t.name),\n };\n }\n\n // Compose base agent – pass summarization config so createAgent's token-budget\n // guard and __needsSummarization throw know summarization is handled externally.\n const base = createAgent<TOutput>({ ...runtimeOpts, tools: factoryToolsWithoutRecovery });\n base.__runtime.runtimeProfile = resolved.runtimeProfile;\n base.__runtime.smart = resolved;\n\n const summarizationEnabled = resolved.summarization.enable !== false;\n const summarizer = summarizationEnabled ? createContextSummarizeNode(runtimeOpts) : undefined;\n const decideBefore = resolverDecisionFactory(runtimeOpts, summarizationEnabled);\n const decideAfter = toolsDecisionFactory(runtimeOpts, summarizationEnabled);\n\n // Structured output: use the manager from the base agent's strategy resolution\n const soManager = opts.outputSchema\n ? new StructuredOutputManager<TOutput>(opts.outputSchema, resolveStrategy(opts.model))\n : undefined;\n\n const structuredOutputHint = soManager\n ? soManager.buildSystemPromptHint()\n : '';\n\n const runtimeHint = [\n resolved.runtimeProfile === resolved.baseProfile\n ? `Runtime profile: ${resolved.runtimeProfile}.`\n : `Runtime profile: ${resolved.runtimeProfile} (base: ${resolved.baseProfile}).`,\n `Context policy: ${resolved.context.policy}.`,\n `Planning mode: ${resolved.planning.mode}. Replan policy: ${resolved.planning.replanPolicy}.`,\n `Delegation mode: ${resolved.delegation.mode}. Child context policy: ${resolved.delegation.childContextPolicy}.`,\n `Tool response policy: ${resolved.context.toolResponsePolicy}.`,\n ].join('\\n');\n\n function latestUserPrompt(messages: any[]): string {\n const latest = [...messages].reverse().find((message) => message.role === 'user');\n return latest ? extractMessageText(latest) : '';\n }\n\n async function syncMemory(state: SmartState): Promise<SmartState> {\n const query = latestUserPrompt(state.messages || []);\n const memoryFacts = await readMemoryFacts(memoryStore, resolved, query);\n return { ...state, memoryFacts };\n }\n\n async function persistLatestSummary(state: SmartState): Promise<SmartState> {\n if (!memoryStore) return state;\n if (resolved.memory.writePolicy === 'manual') return state;\n const latestSummary = state.summaryRecords?.[state.summaryRecords.length - 1];\n if (!latestSummary) return state;\n if (resolved.memory.writePolicy === 'auto_important' && latestSummary.stable_facts.length === 0) {\n return state;\n }\n const memoryFacts = await writeSummaryFactsToMemory(memoryStore, resolved, latestSummary, Math.max(1, (state.messages || []).filter((message) => message.role === 'user').length));\n return { ...state, memoryFacts };\n }\n\n function syncPlanStateWith(ref: any, state: SmartState): SmartState {\n if (!Array.isArray(ref.todoList)) return state;\n return {\n ...state,\n plan: {\n version: ref.planVersion || state.planVersion || 1,\n steps: ref.todoList,\n lastUpdated: new Date().toISOString(),\n adherenceScore: ref.adherenceScore || 0,\n },\n planVersion: ref.planVersion || state.planVersion || 1,\n };\n }\n\n function systemMessage(extraBlock?: string): any {\n let sys = buildSystemPrompt(\n [opts.systemPrompt, runtimeHint, structuredOutputHint, extraBlock].filter(Boolean).join(\"\\n\"),\n planningEnabled,\n opts.name || \"Agent\",\n opts.todoListPrompt,\n );\n // Prompt-override hook: let callers intercept the otherwise-static prompt.\n if (promptHooks?.transformSystemPrompt) {\n try {\n sys = promptHooks.transformSystemPrompt(sys, { agentName: opts.name || \"Agent\" });\n } catch (err) {\n console.warn('[agent-sdk] promptHooks.transformSystemPrompt error:', err);\n }\n }\n return { role: 'system', content: sys } as any;\n }\n\n function syncRuntimeTools(\n currentState: SmartState,\n currentMessages: any[],\n toolSet: InvokeToolSet,\n ): SmartState {\n const needsRecoveryTool = hasToolResponseRecoveryReference(currentMessages as Array<{ content?: unknown }>);\n const nextTools = needsRecoveryTool ? toolSet.toolsWithRecovery : toolSet.toolsWithoutRecovery;\n const currentRuntime = currentState.agent || base.__runtime;\n\n if (currentRuntime.tools === nextTools) {\n return currentState;\n }\n\n return {\n ...currentState,\n agent: {\n ...currentRuntime,\n tools: nextTools,\n },\n };\n }\n\n function producedTerminalAssistantTurn(messages: any[]) {\n const lastAssistant = [...messages].reverse().find((message) => message?.role === 'assistant');\n if (!lastAssistant) return false;\n const toolCalls = Array.isArray(lastAssistant.tool_calls) ? lastAssistant.tool_calls : [];\n return toolCalls.length === 0;\n }\n\n /** Runs the summarizer and applies the result to state. Returns updated state and whether summarization succeeded. */\n async function trySummarize(\n currentState: SmartState,\n currentRawMessages: any[],\n ref: any,\n ): Promise<{ state: SmartState; rawMessages: any[]; compressed: boolean }> {\n if (!summarizer) return { state: currentState, rawMessages: currentRawMessages, compressed: false };\n const delta = await summarizer(currentState);\n if (!delta || Object.keys(delta).length === 0) {\n const ctx = { ...(currentState.ctx || {}), __summarizationExhausted: true };\n return { state: { ...currentState, ctx } as SmartState, rawMessages: currentRawMessages, compressed: false };\n }\n const ctx = { ...(currentState.ctx || {}) };\n delete ctx.__summarizationExhausted;\n const updated = await persistLatestSummary(syncPlanStateWith(ref, { ...currentState, ...delta, ctx } as SmartState));\n return { state: updated, rawMessages: [...(updated.messages || currentRawMessages)], compressed: true };\n }\n\n const instance: SmartAgentInstance<TOutput> = {\n invoke: async (input: SmartState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // Per-invoke tool set + stateRef so concurrent invocations on the same\n // agent instance never share planning/todo/tool-history state.\n const toolSet = buildInvokeToolSet();\n const stateRef = toolSet.stateRef;\n stateRef.toolHistory = input.toolHistory;\n stateRef.toolHistoryArchived = input.toolHistoryArchived;\n stateRef.todoList = input.plan?.steps;\n stateRef.planVersion = input.planVersion || input.plan?.version || 0;\n stateRef.adherenceScore = input.plan?.adherenceScore || 0;\n\n // Rehydrate previously opened/bound skills so a resumed run keeps its skill\n // tools (they were bound in an earlier invoke's per-invoke registry).\n if (skillsEnabled && toolSet.skillRegistryRef) {\n const changed = await rehydrateSkillRegistry(toolSet.skillRegistryRef, (input as any).ctx?.__skillState);\n if (changed) toolSet.skillRegistryRef.__onToolsChanged?.();\n }\n\n const syncPlanFromRef = (state: SmartState) => syncPlanStateWith(stateRef, state);\n\n // Resolve which skills are usable this invoke (availability + tier gating)\n // and surface their headers in the system prompt so the model knows what\n // it can open. open_skill re-checks availability at call time.\n const availableSkills = skillsEnabled\n ? await resolveAvailableSkills(skills, { modelTier: skillPolicy.modelTier })\n : [];\n const skillBlock = availableSkills.length > 0 ? buildSkillHeaderBlock(availableSkills) : undefined;\n\n // Surface the sub-agent catalog so the model knows what it can delegate to.\n let subagentBlock: string | undefined;\n if (subagentsEnabled) {\n const availableSubagents = await resolveAvailableSubagents(subagents);\n let block = buildSubagentCatalogBlock(availableSubagents, subagentPolicy, {\n delegate: \"delegate_to\",\n spawn: \"spawn_subagent\",\n parallel: \"spawn_subagents_parallel\",\n });\n if (promptHooks?.subagentCatalog) {\n try { block = promptHooks.subagentCatalog(block, availableSubagents); }\n catch (err) { console.warn('[agent-sdk] promptHooks.subagentCatalog error:', err); }\n }\n subagentBlock = block;\n }\n const disclosureBlock = [skillBlock, subagentBlock].filter(Boolean).join(\"\\n\\n\") || undefined;\n\n // Prepend a single system message once\n const alreadyHasSystem = Array.isArray(input.messages) && input.messages[0]?.role === 'system';\n const seedMessages = alreadyHasSystem ? [...(input.messages || [])] : [systemMessage(disclosureBlock), ...(input.messages || [])];\n let state: SmartState = syncRuntimeTools(await syncMemory({ ...input, messages: seedMessages } as SmartState), seedMessages, toolSet);\n let lastResult: AgentInvokeResult<TOutput> | null = null;\n let rawMessages = [...seedMessages];\n const effectiveMaxToolCalls = (config?.limits?.maxToolCalls ?? resolved.limits.maxToolCalls ?? 10) as number;\n const iterationLimit = Math.max(effectiveMaxToolCalls * 3 + 5, 30);\n\n for (let i = 0; i < iterationLimit; i++) {\n state = syncRuntimeTools({ ...state, messages: rawMessages } as SmartState, rawMessages, toolSet);\n // Pre-agent summarization decision\n const next = summarizationEnabled ? decideBefore(state) : 'agent';\n if (next === 'contextSummarize' && summarizer) {\n const result = await trySummarize(state, rawMessages, stateRef);\n state = result.state;\n rawMessages = result.rawMessages;\n if (result.compressed) continue;\n }\n\n // Delegate a full turn to base agent (includes tools + tool-limit finalize + structured output finalize)\n const modelMessages = buildModelMessages(state, resolved);\n const res = await base.invoke({ ...state, messages: modelMessages } as SmartState, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n // Preserve summaries from current state when merging with result state\n const currentSummaries = state.summaries;\n const currentSummaryRecords = state.summaryRecords;\n const currentPlan = state.plan;\n const appendedMessages = res.messages.slice(modelMessages.length);\n rawMessages = [...rawMessages, ...appendedMessages];\n state = ((res.state as SmartState) || { ...state, messages: res.messages }) as SmartState;\n state = { ...state, messages: rawMessages } as SmartState;\n // Restore summaries if they were lost during state merge\n if (currentSummaries && currentSummaries.length > 0 && (!state.summaries || state.summaries.length === 0)) {\n state = { ...state, summaries: currentSummaries };\n }\n if (currentSummaryRecords && currentSummaryRecords.length > 0 && (!state.summaryRecords || state.summaryRecords.length === 0)) {\n state = { ...state, summaryRecords: currentSummaryRecords };\n }\n if (currentPlan && !state.plan) {\n state = { ...state, plan: currentPlan };\n }\n state = syncRuntimeTools(syncPlanFromRef(await syncMemory(state)), rawMessages, toolSet);\n stateRef.toolHistory = state.toolHistory;\n stateRef.toolHistoryArchived = state.toolHistoryArchived;\n\n // Check if base agent signaled that summarization is needed (context too large)\n if ((state as any).ctx?.__needsSummarization && summarizer) {\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__needsSummarization;\n state = { ...state, ctx } as SmartState;\n const result = await trySummarize(state, rawMessages, stateRef);\n state = result.state;\n rawMessages = result.rawMessages;\n continue;\n }\n\n // If structured output finalize triggered, base already stopped with parsed output\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n // If the base agent also parsed structured output via JSON-from-text fallback,\n // accept it and stop (the `output` field will be populated even without the flag).\n if (opts.outputSchema && lastResult?.output != null) break;\n\n // Once the model has produced a terminal assistant turn, do not run a\n // post-turn summarization pass. Summary messages are internal state\n // maintenance and should only happen before the next model call, not\n // after a real final answer has already been produced for this turn.\n if (producedTerminalAssistantTurn(appendedMessages)) break;\n\n // Post-tools summarization decision\n if (summarizationEnabled) {\n const after = decideAfter(state);\n if (after === 'contextSummarize' && summarizer) {\n const result = await trySummarize(state, rawMessages, stateRef);\n state = result.state;\n rawMessages = result.rawMessages;\n if (result.compressed) continue;\n }\n }\n\n // If outputSchema is active but the base agent stopped without calling `response`,\n // the base agent's StructuredOutputManager handles retries internally.\n // No additional SmartAgent-level retries needed — the centralized manager\n // already exhausted its maxRetries with proper nudge/correction prompts.\n\n // If base produced an assistant message without tool calls (its normal stop), we're done.\n break;\n }\n\n // Fall back if base was never invoked (edge case)\n if (!lastResult) {\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n }\n\n // Ensure summaries are preserved in the final result\n if (state.summaries && state.summaries.length > 0) {\n if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, messages: rawMessages } };\n } else {\n lastResult = { ...lastResult, state: { ...state, summaries: state.summaries, summaryRecords: state.summaryRecords, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, messages: rawMessages } };\n }\n } else if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, memoryFacts: state.memoryFacts, plan: state.plan, planVersion: state.planVersion, messages: rawMessages } };\n }\n\n // Persist opened/bound skills so a resumed run can rehydrate them.\n if (skillsEnabled && lastResult.state) {\n const persisted = skillStateFromRegistry(toolSet.skillRegistryRef);\n if (persisted) {\n const prevCtx = (lastResult.state as any).ctx || {};\n lastResult = { ...lastResult, state: { ...lastResult.state, ctx: { ...prevCtx, __skillState: persisted } } as SmartState };\n }\n }\n\n return lastResult as AgentInvokeResult<TOutput>;\n },\n snapshot: base.snapshot,\n resume: base.resume,\n resolveToolApproval: base.resolveToolApproval,\n resolveUserQuestion: base.resolveUserQuestion,\n asTool: base.asTool,\n asHandoff: base.asHandoff,\n __runtime: base.__runtime,\n };\n\n return instance;\n}\n","import { z } from \"zod\";\n\nimport { createTool } from \"../../tool.js\";\nimport type { ToolInterface } from \"../../types.js\";\nimport type { Skill, SkillToolHeader } from \"./types.js\";\n\n/**\n * Native SKILL.md loader — Anthropic-style filesystem skills for the smart agent.\n *\n * Discovers `<root>/<name>/SKILL.md` documents, parses their frontmatter, and\n * adapts each into a {@link Skill} with progressive disclosure:\n * - level 1: `header` (frontmatter description) — always in the catalog;\n * - level 2: `prompt` (the markdown body) — returned on `open_skill`;\n * - level 3: bundled `scripts/` — exposed as tools that execute out-of-context\n * via an injected {@link SkillExecutionContext} (e.g. a sandbox), so script\n * source never enters the model context.\n *\n * The filesystem is injected (`SkillFs`) so skills can live on local disk or on\n * a remote sandbox filesystem. This module is additive: it produces standard\n * `Skill` objects consumable by `createSmartAgent({ skills })`.\n */\n\n/** Minimal filesystem the loader needs; satisfiable by node fs or a sandbox fs. */\nexport interface SkillFs {\n /** Entry names directly under `dir`. Reject if `dir` does not exist. */\n listDir(dir: string): Promise<string[]>;\n /** Read a UTF-8 file. Reject if the file does not exist. */\n readFile(path: string): Promise<string>;\n}\n\n/** Executes a skill's bundled script out of context and returns its output. */\nexport interface SkillExecutionContext {\n /**\n * Run a bundled script (path relative to the skill directory) with the given\n * arguments. Implementations typically shell out inside a sandbox and return\n * stdout / a parsed result.\n */\n executeScript(scriptPath: string, args: Record<string, unknown>): Promise<unknown>;\n}\n\nexport interface LoadSkillsOptions {\n fs: SkillFs;\n /** Directories to scan for `<name>/SKILL.md`. */\n roots: string[];\n /** When provided, bundled scripts become executable tools. */\n execution?: SkillExecutionContext;\n /** Default model-tier gate applied to discovered skills. */\n minModelTier?: \"small\" | \"large\";\n}\n\nexport interface SkillFrontmatter {\n metadata: Record<string, string | string[]>;\n body: string;\n}\n\nconst FRONTMATTER_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/;\n\n/** Parse SKILL.md frontmatter + body. No YAML dependency. */\nexport function parseSkillFrontmatter(md: string): SkillFrontmatter {\n const match = FRONTMATTER_RE.exec(md);\n if (!match) return { metadata: {}, body: md.trim() };\n return { metadata: parseFrontmatterBlock(match[1] ?? \"\"), body: md.slice(match[0].length).trim() };\n}\n\n// Keys whose inline value is semantically a comma-separated list. Everything\n// else (name, title, description, …) is treated as an opaque scalar so that a\n// value containing commas — the common case for a `description` — is NOT split\n// into an array and does not corrupt the always-visible skill header.\nconst LIST_KEYS = new Set([\n \"scripts\",\n \"keywords\",\n \"tags\",\n \"allowed-tools\",\n \"allowed_tools\",\n \"compatible-models\",\n \"compatible_models\",\n]);\n\nfunction parseFrontmatterBlock(raw: string): Record<string, string | string[]> {\n const out: Record<string, string | string[]> = {};\n let listKey: string | null = null;\n let listAcc: string[] = [];\n const flush = () => {\n if (listKey) {\n out[listKey] = listAcc;\n listAcc = [];\n listKey = null;\n }\n };\n const splitList = (value: string): string[] =>\n value.split(\",\").map((v) => unquote(v.trim())).filter(Boolean);\n for (const line of raw.split(/\\r?\\n/)) {\n if (line.trim() === \"\") continue;\n const item = /^\\s*-\\s+(.*)$/.exec(line);\n if (item && listKey) {\n listAcc.push(unquote(item[1]!.trim()));\n continue;\n }\n flush();\n const kv = /^([A-Za-z0-9_-]+):\\s*(.*)$/.exec(line);\n if (!kv) continue;\n const [, key, rawValue] = kv;\n const value = rawValue!.trim();\n if (value === \"\") {\n listKey = key!;\n } else if (value.startsWith(\"[\") && value.endsWith(\"]\")) {\n // Explicit inline-array syntax: `key: [a, b, c]`.\n out[key!] = splitList(value.slice(1, -1));\n } else if (LIST_KEYS.has(key!.toLowerCase())) {\n out[key!] = splitList(value);\n } else {\n out[key!] = unquote(value);\n }\n }\n flush();\n return out;\n}\n\nfunction unquote(s: string): string {\n if ((s.startsWith('\"') && s.endsWith('\"')) || (s.startsWith(\"'\") && s.endsWith(\"'\"))) {\n return s.slice(1, -1);\n }\n return s;\n}\n\nfunction asArray(v: string | string[] | undefined): string[] {\n if (v === undefined) return [];\n return Array.isArray(v) ? v : [v];\n}\n\nfunction sanitize(s: string): string {\n return s.replace(/[^A-Za-z0-9_]+/g, \"_\").replace(/^_+|_+$/g, \"\");\n}\n\nfunction scriptToolName(skillName: string, scriptFile: string): string {\n const base = scriptFile.replace(/\\.[^.]+$/, \"\");\n return `${sanitize(skillName)}__${sanitize(base)}`;\n}\n\nconst join = (...parts: string[]): string => parts.join(\"/\").replace(/\\/{2,}/g, \"/\");\n\n/** Build the executable tools for a skill's bundled scripts. */\nfunction buildScriptTools(\n skillName: string,\n skillDir: string,\n scripts: string[],\n execution: SkillExecutionContext,\n): { headers: SkillToolHeader[]; tools: ToolInterface[] } {\n const tools = scripts.map((file) =>\n createTool({\n name: scriptToolName(skillName, file),\n description: `Run the bundled \"${file}\" script from the \"${skillName}\" skill.`,\n schema: z.object({\n args: z.record(z.any()).optional().describe(\"Arguments passed to the script.\"),\n }),\n needsApproval: true,\n approvalPrompt: `Run script ${file} from skill ${skillName}?`,\n func: (input: { args?: Record<string, unknown> }) =>\n execution.executeScript(join(skillDir, \"scripts\", file), input?.args ?? {}),\n }),\n );\n const headers = tools.map((t) => ({ name: t.name, description: t.description }));\n return { headers, tools };\n}\n\nasync function loadOneSkill(\n fs: SkillFs,\n skillDir: string,\n fallbackName: string,\n execution: SkillExecutionContext | undefined,\n minModelTier: \"small\" | \"large\" | undefined,\n): Promise<Skill | null> {\n let md: string;\n try {\n md = await fs.readFile(join(skillDir, \"SKILL.md\"));\n } catch {\n return null; // not a skill directory\n }\n\n const { metadata, body } = parseSkillFrontmatter(md);\n const name = (metadata.name as string) ?? fallbackName;\n const description = (metadata.description as string) ?? \"\";\n const tier = (metadata[\"min-model-tier\"] as \"small\" | \"large\") ?? minModelTier;\n\n // Discover bundled scripts (best-effort).\n let scripts: string[] = asArray(metadata.scripts);\n if (scripts.length === 0) {\n try {\n scripts = await fs.listDir(join(skillDir, \"scripts\"));\n } catch {\n scripts = [];\n }\n }\n\n const built =\n execution && scripts.length > 0\n ? buildScriptTools(name, skillDir, scripts, execution)\n : { headers: [] as SkillToolHeader[], tools: [] as ToolInterface[] };\n\n const skill: Skill = {\n key: `skillmd:${name}`,\n title: name,\n header: description,\n prompt: body,\n needsSandbox: scripts.length > 0,\n listToolIndex: () => built.headers,\n bindTools: (names) =>\n names ? built.tools.filter((t) => names.includes(t.name)) : built.tools,\n };\n if (tier) skill.minModelTier = tier;\n return skill;\n}\n\n/**\n * Discover and load all SKILL.md skills under the configured roots. Returns\n * standard `Skill` objects ready to pass to `createSmartAgent({ skills })`.\n */\nexport async function loadSkillsFromDisk(opts: LoadSkillsOptions): Promise<Skill[]> {\n const skills: Skill[] = [];\n const seen = new Set<string>();\n\n for (const root of opts.roots) {\n let entries: string[];\n try {\n entries = await opts.fs.listDir(root);\n } catch {\n continue;\n }\n for (const entry of entries) {\n const skill = await loadOneSkill(\n opts.fs,\n join(root, entry),\n entry,\n opts.execution,\n opts.minModelTier,\n );\n if (skill && !seen.has(skill.key)) {\n seen.add(skill.key);\n skills.push(skill);\n }\n }\n }\n return skills;\n}\n","import type {\n EvalCase,\n EvalCaseResult,\n EvalHarnessMetrics,\n EvalProfileDescriptor,\n EvalProfileTarget,\n EvalHarnessResult,\n RuntimeProfile,\n SmartAgentEvent,\n SmartAgentInstance,\n SmartState,\n} from \"../types.js\";\n\nexport type EvalHarnessParams = {\n profiles: EvalProfileTarget[];\n cases: EvalCase[];\n createAgent: (profile: RuntimeProfile, descriptor: EvalProfileDescriptor) => SmartAgentInstance<any>;\n};\n\nfunction normalizeProfileTarget(target: EvalProfileTarget): EvalProfileDescriptor {\n if (typeof target === \"string\") {\n return {\n label: target,\n runtimeProfile: target,\n baseProfile: target === \"custom\" ? \"balanced\" : target,\n };\n }\n return {\n label: target.label,\n runtimeProfile: target.runtimeProfile,\n baseProfile: target.baseProfile ?? (target.runtimeProfile === \"custom\" ? target.customProfile?.extends ?? \"balanced\" : target.runtimeProfile),\n customProfile: target.customProfile,\n };\n}\n\nfunction normalizeText(value: string | undefined): string {\n return (value || \"\").toLowerCase();\n}\n\nfunction ratio(numerator: number, denominator: number): number {\n if (denominator <= 0) return 1;\n return Number((numerator / denominator).toFixed(3));\n}\n\nfunction sum(values: number[]): number {\n return values.reduce((acc, value) => acc + value, 0);\n}\n\nfunction mean(values: number[]): number {\n if (values.length === 0) return 0;\n return Number((sum(values) / values.length).toFixed(3));\n}\n\nfunction extractTotalTokens(usage: any): number {\n if (!usage?.totals || typeof usage.totals !== \"object\") return 0;\n return Object.values(usage.totals).reduce((acc: number, entry: any) => acc + (Number(entry?.total) || 0), 0);\n}\n\nfunction caseResultFromRun(\n descriptor: EvalProfileDescriptor,\n testCase: EvalCase,\n content: string,\n events: SmartAgentEvent[],\n state: SmartState | undefined,\n latencyMs: number,\n totalTokens: number,\n): EvalCaseResult {\n const normalizedContent = normalizeText(content);\n const matchedPhrases = (testCase.expectedPhrases || []).filter((phrase) => normalizedContent.includes(normalizeText(phrase)));\n const matchedFacts = (testCase.expectedFacts || []).filter((fact) => {\n const memoryMatch = state?.memoryFacts?.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value)));\n const summaryMatch = state?.summaryRecords?.some((record) => record.stable_facts.some((entry) => entry.key === fact.key && normalizeText(entry.value).includes(normalizeText(fact.value))));\n return Boolean(memoryMatch || summaryMatch || normalizedContent.includes(normalizeText(fact.value)));\n });\n const forbiddenMisses = (testCase.forbiddenPhrases || []).filter((phrase) => !normalizedContent.includes(normalizeText(phrase)));\n const toolCalls = events.filter((event) => event.type === \"tool_call\" && event.phase === \"success\") as Array<Extract<SmartAgentEvent, { type: \"tool_call\" }>>;\n const expectedToolHits = (testCase.expectedToolNames || []).filter((toolName) => toolCalls.some((event) => event.name === toolName));\n const toolPrecision = ratio(expectedToolHits.length, Math.max(toolCalls.length, 1));\n const recallAccuracy = ratio(matchedPhrases.length + matchedFacts.length, (testCase.expectedPhrases?.length || 0) + (testCase.expectedFacts?.length || 0));\n const obsoleteDropAccuracy = ratio(forbiddenMisses.length, testCase.forbiddenPhrases?.length || 0);\n const trajectoryScore = ratio(expectedToolHits.length, testCase.expectedToolNames?.length || 0);\n const hadRecoverableError = events.some((event) => event.type === \"tool_call\" && event.phase === \"error\");\n const recoveryRate = hadRecoverableError ? Number((normalizedContent.length > 0 ? 1 : 0).toFixed(3)) : 1;\n const overToolingRate = toolCalls.length === 0 ? 0 : Number((Math.max(0, toolCalls.length - Math.max(testCase.expectedToolNames?.length || 0, 1)) / toolCalls.length).toFixed(3));\n const success = recallAccuracy >= 0.8 && obsoleteDropAccuracy >= 0.8;\n\n return {\n id: testCase.id,\n family: testCase.family,\n success,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore: Number(((trajectoryScore + toolPrecision) / 2).toFixed(3)),\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n notes: success ? [] : [\n recallAccuracy < 0.8 ? \"Recall below threshold.\" : \"\",\n obsoleteDropAccuracy < 0.8 ? \"Obsolete filtering below threshold.\" : \"\",\n trajectoryScore < 0.5 ? \"Tool trajectory diverged from expectation.\" : \"\",\n ].filter(Boolean),\n };\n}\n\nfunction aggregateMetrics(caseResults: EvalCaseResult[]): EvalHarnessMetrics {\n const taskSuccess = ratio(caseResults.filter((result) => result.success).length, caseResults.length);\n const recallAccuracy = mean(caseResults.map((result) => result.recallAccuracy));\n const obsoleteDropAccuracy = mean(caseResults.map((result) => result.obsoleteDropAccuracy));\n const trajectoryScore = mean(caseResults.map((result) => result.trajectoryScore));\n const recoveryRate = mean(caseResults.map((result) => result.recoveryRate));\n const overToolingRate = mean(caseResults.map((result) => result.overToolingRate));\n const latencyMs = mean(caseResults.map((result) => result.latencyMs));\n const totalTokens = sum(caseResults.map((result) => result.totalTokens || 0));\n const toolPrecision = trajectoryScore;\n const costScore = totalTokens <= 0 ? 1 : Number((1 / (1 + totalTokens / 10000)).toFixed(3));\n const score = Number((\n (0.45 * taskSuccess)\n + (0.20 * trajectoryScore)\n + (0.15 * toolPrecision)\n + (0.10 * recoveryRate)\n + (0.10 * costScore)\n ).toFixed(3));\n\n return {\n taskSuccess,\n recallAccuracy,\n obsoleteDropAccuracy,\n trajectoryScore,\n recoveryRate,\n overToolingRate,\n latencyMs,\n totalTokens,\n score,\n };\n}\n\nexport async function runSmartAgentEvalHarness(params: EvalHarnessParams): Promise<EvalHarnessResult[]> {\n const results: EvalHarnessResult[] = [];\n\n for (const profileTarget of params.profiles) {\n const descriptor = normalizeProfileTarget(profileTarget);\n const caseResults: EvalCaseResult[] = [];\n\n for (const testCase of params.cases) {\n const agent = params.createAgent(descriptor.runtimeProfile, descriptor);\n const events: SmartAgentEvent[] = [];\n const startedAt = Date.now();\n const result = await agent.invoke({\n messages: [{ role: \"user\", content: testCase.prompt }],\n } as SmartState, {\n onEvent: (event) => {\n events.push(event);\n },\n });\n\n caseResults.push(caseResultFromRun(\n descriptor,\n testCase,\n result.content,\n events,\n result.state,\n Date.now() - startedAt,\n extractTotalTokens(result.metadata?.usage),\n ));\n }\n\n results.push({\n profile: descriptor.runtimeProfile,\n profileLabel: descriptor.label,\n baseProfile: descriptor.baseProfile,\n metrics: aggregateMetrics(caseResults),\n cases: caseResults,\n });\n }\n\n return results;\n}","import AjvModule, { type ValidateFunction, type ErrorObject, type Options } from \"ajv\";\nimport { z } from \"zod\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n GuardrailRule,\n GuardrailContext,\n GuardrailDisposition,\n SmartAgentInstance,\n} from \"../types.js\";\nimport { contentToString, mergeContentsToString } from \"../utils/content.js\";\n\nconst Ajv = (AjvModule as unknown as { default?: new (options?: Options) => any })?.default ?? (AjvModule as unknown as new (options?: Options) => any);\nconst defaultAjv = new Ajv({ allErrors: true } satisfies Options);\n(defaultAjv as any).opts.strict = false;\n\nfunction ensureRegExp(pattern: RegExp | string, flags?: string): RegExp {\n if (pattern instanceof RegExp) return pattern;\n return new RegExp(pattern, flags ?? \"i\");\n}\n\nfunction latestText(context: GuardrailContext): string {\n return contentToString(context.latestMessage?.content ?? \"\");\n}\n\nfunction threadText(context: GuardrailContext): string {\n return mergeContentsToString(context.messages.map((msg) => msg.content));\n}\n\nexport type RegexRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n pattern: RegExp | string;\n flags?: string;\n matchDisposition?: GuardrailDisposition;\n selector?: (context: GuardrailContext) => string;\n allowIfMatch?: boolean;\n failureMessage?: string;\n};\n\nexport function regexRule(options: RegexRuleOptions): GuardrailRule {\n const regex = ensureRegExp(options.pattern, options.flags);\n const selector = options.selector || latestText;\n const failureMessage =\n options.failureMessage || `Message violates pattern: ${regex.toString()}`;\n const matchDisposition = options.matchDisposition || \"block\";\n const allowIfMatch = options.allowIfMatch === true;\n\n return {\n id: options.id,\n title: options.title || \"Regex compliance\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n const matches = regex.test(text);\n const passed = allowIfMatch ? matches : !matches;\n const disposition = matches ? matchDisposition : \"allow\";\n return {\n passed,\n reason: matches ? failureMessage : undefined,\n disposition,\n details: matches ? { pattern: regex.toString(), textSnippet: text.slice(0, 200) } : undefined,\n };\n },\n };\n}\n\nexport type JsonSchemaRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n schema: JSONSchema7 | z.ZodTypeAny;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowOnParseError?: boolean;\n};\n\nfunction compileValidator(\n schema: JSONSchema7 | z.ZodTypeAny\n): ((input: unknown) => { valid: boolean; errors?: string[] }) {\n if ((schema as z.ZodTypeAny)?._def) {\n const typed = schema as z.ZodTypeAny;\n return (input: unknown) => {\n const result = typed.safeParse(input);\n return {\n valid: result.success,\n errors: result.success\n ? undefined\n : result.error.issues.map((issue) => issue.message),\n };\n };\n }\n\n const validator: ValidateFunction = defaultAjv.compile(schema as JSONSchema7);\n return (input: unknown) => {\n const valid = validator(input);\n const errors = (validator.errors as ErrorObject[] | null | undefined)?.map((err) => {\n const path = (\"instancePath\" in err && typeof err.instancePath === \"string\" && err.instancePath.length > 0)\n ? err.instancePath\n : ((err as any).dataPath as string | undefined);\n return `${path || \"/\"} ${err.message || \"invalid\"}`;\n });\n return { valid: !!valid, errors };\n };\n}\n\nexport function jsonSchemaRule(options: JsonSchemaRuleOptions): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"block\";\n const validator = compileValidator(options.schema);\n\n return {\n id: options.id,\n title: options.title || \"JSON schema validation\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (err) {\n if (options.allowOnParseError) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message content is not valid JSON.\",\n details: { error: err instanceof Error ? err.message : String(err) },\n };\n }\n\n const result = validator(parsed);\n if (result.valid) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message JSON failed schema validation.\",\n details: { errors: result.errors },\n };\n },\n };\n}\n\nexport type CodeDetectionRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowList?: Array<RegExp | string>;\n};\n\nfunction containsAllowListed(text: string, allowList?: Array<RegExp | string>): boolean {\n if (!allowList?.length) return false;\n return allowList.some((pattern) => ensureRegExp(pattern).test(text));\n}\n\nconst codePattern = /```[\\s\\S]*?```|\\b(function|class|import|export|const|let|var)\\b|<[^>]+>/i;\n\nexport function codePresenceRule(options: CodeDetectionRuleOptions = {}): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"warn\";\n\n return {\n id: options.id,\n title: options.title || \"Code presence detection\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n if (!text) return { passed: true };\n if (containsAllowListed(text, options.allowList)) {\n return { passed: true };\n }\n const matches = codePattern.test(text);\n if (!matches) return { passed: true };\n return {\n passed: false,\n disposition,\n reason: \"Potential code content detected in message.\",\n details: { snippet: text.slice(0, 200) },\n };\n },\n };\n}\n\nconst guardianSchema = z.object({\n allow: z.boolean().describe(\"Whether the message should be allowed.\"),\n disposition: z.enum([\"allow\", \"warn\", \"block\"]).optional(),\n reason: z\n .string()\n .max(400, \"Reason must be 400 characters or fewer.\")\n .optional(),\n details: z.record(z.any()).optional(),\n});\n\nexport type AgentRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n agent: SmartAgentInstance<z.infer<typeof guardianSchema>>;\n systemPrompt?: string;\n payloadBuilder?: (context: GuardrailContext) => string;\n dispositionFallback?: GuardrailDisposition;\n};\n\nfunction defaultPayload(context: GuardrailContext): string {\n const latest = latestText(context);\n const transcript = threadText(context);\n return JSON.stringify(\n {\n phase: context.phase,\n latestMessage: latest,\n transcript,\n metadata: {\n runtime: {\n name: context.runtime?.name,\n version: context.runtime?.version,\n },\n },\n },\n null,\n 2\n );\n}\n\nexport function agentVerdictRule(options: AgentRuleOptions): GuardrailRule {\n const payloadBuilder = options.payloadBuilder || defaultPayload;\n const fallbackDisposition = options.dispositionFallback || \"block\";\n\n return {\n id: options.id,\n title: options.title || \"Agent-based guardrail\",\n description: options.description,\n async evaluate(context) {\n const payload = payloadBuilder(context);\n const systemPrompt =\n options.systemPrompt ||\n \"You are a safety auditor. Review the provided conversation payload and decide whether it should continue. Return JSON with keys allow (boolean), optional disposition ('allow' | 'warn' | 'block'), optional reason (string), and optional details (object).\";\n\n const review = await options.agent.invoke({\n messages: [\n { role: \"system\", content: systemPrompt } as any,\n { role: \"user\", content: payload } as any,\n ],\n });\n\n let parsed = review.output;\n if (!parsed) {\n try {\n parsed = guardianSchema.parse(JSON.parse(review.content));\n } catch {\n parsed = guardianSchema.parse({ allow: false, reason: \"Guard agent did not return structured output.\" });\n }\n }\n\n const disposition = parsed.disposition || (parsed.allow ? \"allow\" : fallbackDisposition);\n return {\n passed: parsed.allow,\n disposition,\n reason: parsed.reason,\n details: parsed.details,\n };\n },\n };\n}\n\nexport type CustomRuleCallback = (\n context: GuardrailContext\n) =>\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n | Promise<\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n >;\n\nexport type CustomRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n callback: CustomRuleCallback;\n defaultDisposition?: GuardrailDisposition;\n};\n\nexport function customCallbackRule(options: CustomRuleOptions): GuardrailRule {\n const fallbackDisposition = options.defaultDisposition || \"block\";\n return {\n id: options.id,\n title: options.title || \"Custom callback guardrail\",\n description: options.description,\n async evaluate(context) {\n const outcome = await options.callback(context);\n if (typeof outcome === \"boolean\") {\n return {\n passed: outcome,\n disposition: outcome ? \"allow\" : fallbackDisposition,\n };\n }\n return {\n passed: outcome.allow,\n disposition: outcome.disposition || (outcome.allow ? \"allow\" : fallbackDisposition),\n reason: outcome.reason,\n details: outcome.details,\n };\n },\n };\n}\n","import { GuardrailPhase, type ConversationGuardrail } from \"../types.js\";\nimport { evaluateGuardrails, createGuardrail } from \"./engine.js\";\nimport {\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n} from \"./checks.js\";\nimport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n} from \"./checks.js\";\n\nexport {\n evaluateGuardrails,\n createGuardrail,\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n};\n\nexport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n};\n\ntype GuardrailPresetBase = {\n guardrailId?: string;\n guardrailTitle?: string;\n guardrailDescription?: string;\n phases?: GuardrailPhase[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport type RegexGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<RegexRuleOptions, \"pattern\">;\n};\n\nexport function createRegexGuardrail(\n pattern: RegExp | string,\n options?: RegexGuardrailOptions\n): ConversationGuardrail {\n const rule = regexRule({ pattern, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"Regex Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type JsonGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<JsonSchemaRuleOptions, \"schema\">;\n};\n\nexport function createJsonGuardrail(\n schema: JsonSchemaRuleOptions[\"schema\"],\n options?: JsonGuardrailOptions\n): ConversationGuardrail {\n const rule = jsonSchemaRule({ schema, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"JSON Schema Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type CodeGuardrailOptions = GuardrailPresetBase & {\n rule?: CodeDetectionRuleOptions;\n};\n\nexport function createCodeGuardrail(options?: CodeGuardrailOptions): ConversationGuardrail {\n const ruleOptions = { disposition: \"warn\" as const, ...(options?.rule || {}) };\n const rule = codePresenceRule(ruleOptions);\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || ruleOptions.title || \"Code Presence Guardrail\",\n description: options?.guardrailDescription || ruleOptions.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n","// ─── Unified LLM Provider Types ─────────────────────────────────────────────\n// Provider-agnostic request/response contracts consumed by all native providers.\n// Each provider converts these into its own wire format and maps back.\n\n// ─── Messages ────────────────────────────────────────────────────────────────\n\nexport type MessageRole = \"system\" | \"user\" | \"assistant\" | \"tool\";\n\nexport type TextContent = { type: \"text\"; text: string };\n\nexport type ImageContent = {\n type: \"image\";\n source:\n | { type: \"base64\"; mediaType: string; data: string }\n | { type: \"url\"; url: string };\n};\n\nexport type ContentPart = TextContent | ImageContent;\n\nexport type ToolCall = {\n id: string;\n name: string;\n arguments: string; // JSON string\n};\n\n/**\n * A provider-native reasoning/thinking block. Captured from the model response\n * and replayed verbatim on subsequent turns (required by Anthropic extended\n * thinking when tools are involved — the `signature` must round-trip intact).\n */\nexport type ReasoningBlock = {\n type: \"thinking\" | \"redacted_thinking\";\n /** Plain-text thinking content (absent for redacted blocks). */\n text?: string;\n /** Cryptographic signature Anthropic requires to be echoed back verbatim. */\n signature?: string;\n /** Opaque payload for redacted_thinking blocks. */\n data?: string;\n};\n\n/** Captured reasoning payload attached to assistant turns / responses. */\nexport type ReasoningPayload = {\n /** Verbatim provider blocks to replay on the next turn. */\n blocks?: ReasoningBlock[];\n /** Human-readable reasoning summary, when the provider exposes one. */\n summary?: string;\n};\n\nexport type UnifiedMessage = {\n role: MessageRole;\n content: string | ContentPart[];\n name?: string;\n toolCalls?: ToolCall[];\n toolCallId?: string; // for tool result messages\n /** Native reasoning blocks to replay verbatim (Anthropic/Bedrock thinking). */\n reasoning?: ReasoningPayload;\n};\n\n// ─── Tool Definition ─────────────────────────────────────────────────────────\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n parameters: Record<string, any>; // JSON Schema\n strict?: boolean;\n};\n\n// ─── Request ─────────────────────────────────────────────────────────────────\n\nexport type ChatCompletionRequest = {\n model: string;\n messages: UnifiedMessage[];\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n stop?: string[];\n tools?: ToolDefinition[];\n toolChoice?: \"auto\" | \"required\" | \"none\" | { name: string };\n responseFormat?: {\n type: \"json_schema\" | \"json_object\" | \"text\";\n schema?: Record<string, any>;\n name?: string;\n };\n stream?: boolean;\n // Provider-specific extras passed raw into the body (escape hatch)\n extra?: Record<string, any>;\n /**\n * Unified native-reasoning request config. Each provider maps this to its\n * own shape:\n * - OpenAI o-series: body.reasoning_effort = effort\n * - OpenAI Responses: body.reasoning = { effort }\n * - Anthropic: body.thinking = { type: \"enabled\", budget_tokens }\n * - Google / Vertex: body.generationConfig.thinkingConfig = { thinkingBudget, includeThoughts }\n *\n * Providers silently ignore unsupported fields.\n */\n reasoning?: ReasoningRequestConfig;\n};\n\nexport type ReasoningEffort = \"minimal\" | \"low\" | \"medium\" | \"high\";\n\nexport type ReasoningRequestConfig = {\n /** Qualitative effort hint (mapped per-provider). */\n effort?: ReasoningEffort;\n /** Explicit per-call token budget for reasoning/thinking. */\n budgetTokens?: number;\n /** Whether the provider should expose its reasoning/thought summary to the caller. Default false. */\n includeThoughts?: boolean;\n /** Provider-specific passthrough merged on top of the mapped shape. */\n providerExtras?: Record<string, any>;\n};\n\n// ─── Token Usage ─────────────────────────────────────────────────────────────\n\nexport type TokenUsage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cachedInputTokens: number;\n cachedWriteTokens: number;\n cachedOutputTokens: number;\n reasoningTokens: number;\n};\n\nexport function emptyUsage(): TokenUsage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: 0,\n };\n}\n\n// ─── Response ────────────────────────────────────────────────────────────────\n\nexport type FinishReason = \"stop\" | \"tool_calls\" | \"length\" | \"content_filter\" | \"error\";\n\nexport type ChatCompletionResponse = {\n id: string;\n model: string;\n content: string | null;\n toolCalls: ToolCall[];\n usage: TokenUsage;\n finishReason: FinishReason;\n /** Native reasoning blocks + summary captured from the response, if any. */\n reasoning?: ReasoningPayload;\n raw: any; // Original provider response\n};\n\n// ─── Stream Chunk ────────────────────────────────────────────────────────────\n\nexport type ChatCompletionChunk = {\n id: string;\n model: string;\n delta: {\n content?: string;\n toolCalls?: Partial<ToolCall>[];\n /** Incremental reasoning text / signature deltas (Anthropic thinking). */\n reasoning?: ReasoningPayload;\n };\n usage?: TokenUsage;\n finishReason?: FinishReason;\n};\n\n// ─── Provider Configs ────────────────────────────────────────────────────────\n\nexport type ProviderRetryConfig = {\n /** Maximum retries on 429/5xx (default 3). */\n maxRetries?: number;\n /** Initial delay between retries in ms (default 500, doubled each attempt). */\n baseDelayMs?: number;\n /** Hard cap on a single retry delay in ms (default 8000). */\n maxDelayMs?: number;\n /** Custom predicate to opt in/out of a specific retry. */\n shouldRetry?: (error: any, attempt: number) => boolean;\n};\n\nexport type OpenAIProviderConfig = {\n provider: \"openai\";\n apiKey: string;\n baseURL?: string;\n organization?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n retry?: ProviderRetryConfig;\n};\n\nexport type AnthropicProviderConfig = {\n provider: \"anthropic\";\n apiKey: string;\n baseURL?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n anthropicVersion?: string;\n retry?: ProviderRetryConfig;\n /**\n * Prompt caching configuration. When enabled, places cache_control:\n * ephemeral breakpoints on the system prompt and the final tool definition,\n * which is the recommended Anthropic recipe for static system + tools.\n */\n prompt_caching?: { enabled: boolean };\n};\n\nexport type AzureProviderConfig = {\n provider: \"azure\";\n apiKey: string;\n endpoint: string; // e.g. https://my-resource.openai.azure.com\n apiVersion?: string;\n deploymentName?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type OpenAICompatibleProviderConfig = {\n provider: \"openai-compatible\";\n apiKey: string;\n baseURL: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type BedrockProviderConfig = {\n provider: \"bedrock\";\n region: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n retry?: ProviderRetryConfig;\n /**\n * Insert Bedrock Converse `cachePoint` blocks at the end of the system\n * prompt and tools list. Only supported by models that implement Converse\n * prompt caching (most Anthropic Claude variants on Bedrock).\n */\n prompt_caching?: { enabled: boolean };\n};\n\nexport type VertexProviderConfig = {\n provider: \"vertex\";\n projectId: string;\n location?: string;\n accessToken?: string;\n serviceAccountJson?: string | Record<string, any>;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n};\n\nexport type ProviderConfig =\n | OpenAIProviderConfig\n | AnthropicProviderConfig\n | AzureProviderConfig\n | OpenAICompatibleProviderConfig\n | BedrockProviderConfig\n | VertexProviderConfig;\n\nexport type ProviderType = ProviderConfig[\"provider\"];\n\n// ─── Provider Error ──────────────────────────────────────────────────────────\n\nexport class ProviderError extends Error {\n constructor(\n message: string,\n public readonly provider: string,\n public readonly statusCode?: number,\n public readonly responseBody?: any,\n ) {\n super(message);\n this.name = \"ProviderError\";\n }\n}\n","// Abstract base class for all native LLM providers.\n// Each concrete provider implements the conversion between unified ↔ wire format.\n\nimport type {\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatCompletionChunk,\n ProviderType,\n} from \"./types.js\";\n\nexport type ProviderRetryPolicy = {\n /** Maximum number of retries on 429/5xx responses. Default: 3. */\n maxRetries?: number;\n /** Initial backoff in ms (doubled on each retry). Default: 500. */\n baseDelayMs?: number;\n /** Hard cap on individual delay between retries. Default: 8000. */\n maxDelayMs?: number;\n /**\n * Custom predicate to decide whether to retry. By default we retry 429\n * and 5xx responses; pass a function to broaden/narrow that set.\n */\n shouldRetry?: (error: any, attempt: number) => boolean;\n};\n\nconst DEFAULT_RETRY: Required<Pick<ProviderRetryPolicy, \"maxRetries\" | \"baseDelayMs\" | \"maxDelayMs\">> = {\n maxRetries: 3,\n baseDelayMs: 500,\n maxDelayMs: 8000,\n};\n\nexport abstract class BaseProvider {\n abstract readonly providerName: ProviderType;\n protected retryPolicy: ProviderRetryPolicy = DEFAULT_RETRY;\n\n /** Non-streaming completion */\n abstract complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse>;\n\n /** Streaming completion – yields incremental chunks */\n abstract completeStream(\n request: ChatCompletionRequest,\n ): AsyncGenerator<ChatCompletionChunk, void, unknown>;\n\n /**\n * Helper concrete providers can wrap their fetch with. Retries 429/5xx\n * with exponential backoff and respects Retry-After if the response\n * carries one.\n */\n protected async doFetchWithRetry(execute: () => Promise<Response>): Promise<Response> {\n const policy = this.retryPolicy;\n const maxRetries = Math.max(0, policy.maxRetries ?? DEFAULT_RETRY.maxRetries);\n const baseDelay = Math.max(0, policy.baseDelayMs ?? DEFAULT_RETRY.baseDelayMs);\n const maxDelay = Math.max(baseDelay, policy.maxDelayMs ?? DEFAULT_RETRY.maxDelayMs);\n\n let lastResp: Response | undefined;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const res = await execute();\n const isRetryable = res.status === 429 || (res.status >= 500 && res.status < 600);\n if (!isRetryable) return res;\n\n // Custom predicate gets a chance to opt out.\n const predicate = policy.shouldRetry;\n if (predicate && !predicate({ status: res.status }, attempt)) return res;\n\n if (attempt === maxRetries) {\n lastResp = res;\n break;\n }\n // Respect Retry-After when present (in seconds or HTTP date).\n const retryAfter = res.headers.get(\"retry-after\");\n let delay = Math.min(maxDelay, baseDelay * Math.pow(2, attempt));\n if (retryAfter) {\n const asNumber = Number(retryAfter);\n if (!Number.isNaN(asNumber)) delay = Math.min(maxDelay, Math.max(delay, asNumber * 1000));\n }\n // Drain the body so the connection can be reused.\n try { await res.text(); } catch { /* ignore */ }\n await new Promise((r) => setTimeout(r, delay));\n }\n return lastResp!;\n }\n}\n","// SSE (Server-Sent Events) stream parser for fetch Response bodies.\n// Works with OpenAI, Anthropic, Azure, Vertex and any text/event-stream endpoint.\n\nexport type SSEEvent = {\n event?: string;\n data: string;\n id?: string;\n retry?: number;\n};\n\n/**\n * Parses an SSE text/event-stream from a ReadableStream<Uint8Array>.\n * Yields individual SSEEvent objects for each complete event block.\n */\nexport async function* parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n): AsyncGenerator<SSEEvent, void, unknown> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n if (signal?.aborted) break;\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n // SSE events are separated by double newlines\n const parts = buffer.split(/\\r?\\n\\r?\\n/);\n // Keep the last (potentially incomplete) part in the buffer\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n if (!part.trim()) continue;\n const event = parseSSEBlock(part);\n if (event) yield event;\n }\n }\n\n // Process any remaining data\n if (buffer.trim()) {\n const event = parseSSEBlock(buffer);\n if (event) yield event;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction parseSSEBlock(block: string): SSEEvent | null {\n let event: string | undefined;\n let id: string | undefined;\n let retry: number | undefined;\n const dataLines: string[] = [];\n\n for (const line of block.split(/\\r?\\n/)) {\n if (line.startsWith(\":\")) continue; // comment\n\n const colonIdx = line.indexOf(\":\");\n let field: string;\n let value: string;\n\n if (colonIdx === -1) {\n field = line;\n value = \"\";\n } else {\n field = line.slice(0, colonIdx);\n value = line.slice(colonIdx + 1);\n if (value.startsWith(\" \")) value = value.slice(1); // strip leading space\n }\n\n switch (field) {\n case \"event\":\n event = value;\n break;\n case \"data\":\n dataLines.push(value);\n break;\n case \"id\":\n id = value;\n break;\n case \"retry\": {\n const n = parseInt(value, 10);\n if (!isNaN(n)) retry = n;\n break;\n }\n }\n }\n\n if (dataLines.length === 0) return null;\n return { event, data: dataLines.join(\"\\n\"), id, retry };\n}\n","// Provider-agnostic mapper for ReasoningRequestConfig.\n// Each native provider calls one of these helpers inside its buildRequestBody.\n// The helpers are defensive — unknown fields are ignored silently so callers\n// can pass a unified config regardless of the current provider.\n\nimport type { ReasoningRequestConfig, ReasoningEffort } from \"../types.js\";\n\nexport type OpenAIReasoningMode = \"legacy_effort\" | \"responses\";\n\n// ─── Effort → token-budget tables ──────────────────────────────────────────\n// Centralised so every provider derives budgets from the same numbers. Values\n// are deliberately conservative; Anthropic/Bedrock additionally clamp the\n// budget below `max_tokens` (a provider hard requirement).\nexport const ANTHROPIC_EFFORT_BUDGET: Record<ReasoningEffort, number> = {\n minimal: 1024,\n low: 2048,\n medium: 8192,\n high: 16384,\n};\n\nexport const GEMINI_EFFORT_BUDGET: Record<ReasoningEffort, number> = {\n minimal: 512,\n low: 1024,\n medium: 4096,\n high: 12000,\n};\n\n/** Minimum gap between the thinking budget and `max_tokens` for Anthropic/Bedrock. */\nconst THINKING_OUTPUT_RESERVE = 1024;\n/** Floor for `max_tokens` once thinking is enabled (budget + reserve at least this). */\nconst THINKING_MIN_MAX_TOKENS = 4096;\n\n/** Maps a unified reasoning config onto the OpenAI Chat Completions body.\n *\n * For o-series (o1, o3, o4, gpt-5) the accepted field is `reasoning_effort`.\n * We keep the mapping best-effort; models that don't support it will respond\n * with a 400 — in that case callers should not pass `reasoning` at all.\n */\nexport function applyOpenAIReasoning(\n body: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n mode: OpenAIReasoningMode = \"legacy_effort\",\n): void {\n if (!reasoning) return;\n const effort = normalizeEffort(reasoning.effort);\n if (mode === \"responses\") {\n const obj: Record<string, any> = {};\n if (effort) obj.effort = effort;\n if (reasoning.includeThoughts) obj.summary = \"auto\";\n if (reasoning.providerExtras) Object.assign(obj, reasoning.providerExtras);\n if (Object.keys(obj).length > 0) body.reasoning = obj;\n } else {\n if (effort) body.reasoning_effort = effort;\n if (reasoning.providerExtras) Object.assign(body, reasoning.providerExtras);\n }\n}\n\n/** Maps onto Anthropic Messages API body.\n *\n * Requires claude-sonnet-3.7+, claude-opus-4, claude-sonnet-4 etc. Anthropic\n * requires an explicit budget_tokens value (we derive it from effort when the\n * caller didn't specify one) AND that `budget_tokens < max_tokens`. When\n * thinking is enabled Anthropic also rejects non-default `temperature`/`top_p`/\n * `top_k`, so we strip them here so callers can pass a unified config safely.\n */\nexport function applyAnthropicReasoning(\n body: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n): void {\n if (!reasoning) return;\n let budget = resolveBudget(reasoning, ANTHROPIC_EFFORT_BUDGET);\n if (!budget) return;\n\n // Ensure max_tokens leaves room for the visible answer on top of thinking.\n const currentMax = typeof body.max_tokens === \"number\" ? body.max_tokens : 0;\n const requiredMax = Math.max(THINKING_MIN_MAX_TOKENS, budget + THINKING_OUTPUT_RESERVE);\n if (currentMax < requiredMax) {\n body.max_tokens = requiredMax;\n }\n // Clamp the budget strictly below max_tokens (Anthropic hard requirement).\n budget = clampBudget(budget, body.max_tokens);\n\n const thinking: Record<string, any> = { type: \"enabled\", budget_tokens: budget };\n if (reasoning.providerExtras) Object.assign(thinking, reasoning.providerExtras);\n body.thinking = thinking;\n\n // Thinking mode forbids sampling overrides.\n stripSamplingParams(body, [\"temperature\", \"top_p\", \"top_k\"]);\n}\n\n/** Maps onto AWS Bedrock Converse for thinking-capable Anthropic models via\n * `additionalModelRequestFields.thinking`. Same budget/temperature rules as the\n * direct Anthropic API apply. The Converse body is mutated in place.\n */\nexport function applyBedrockReasoning(\n body: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n): void {\n if (!reasoning) return;\n let budget = resolveBudget(reasoning, ANTHROPIC_EFFORT_BUDGET);\n if (!budget) return;\n\n const inference = (body.inferenceConfig ??= {});\n const currentMax = typeof inference.maxTokens === \"number\" ? inference.maxTokens : 0;\n const requiredMax = Math.max(THINKING_MIN_MAX_TOKENS, budget + THINKING_OUTPUT_RESERVE);\n if (currentMax < requiredMax) {\n inference.maxTokens = requiredMax;\n }\n budget = clampBudget(budget, inference.maxTokens);\n\n const extra = (body.additionalModelRequestFields ??= {});\n const thinking: Record<string, any> = { type: \"enabled\", budget_tokens: budget };\n if (reasoning.providerExtras) Object.assign(thinking, reasoning.providerExtras);\n extra.thinking = thinking;\n\n // Thinking mode forbids sampling overrides on the inferenceConfig.\n stripSamplingParams(inference, [\"temperature\", \"topP\"]);\n}\n\n/** Maps onto Google Vertex / Gemini generationConfig. */\nexport function applyGeminiReasoning(\n generationConfig: Record<string, any>,\n reasoning: ReasoningRequestConfig | undefined,\n): void {\n if (!reasoning) return;\n const budget = resolveBudget(reasoning, GEMINI_EFFORT_BUDGET);\n if (budget == null) return;\n const thinkingConfig: Record<string, any> = { thinkingBudget: budget };\n if (reasoning.includeThoughts) thinkingConfig.includeThoughts = true;\n if (reasoning.providerExtras) Object.assign(thinkingConfig, reasoning.providerExtras);\n generationConfig.thinkingConfig = thinkingConfig;\n}\n\nfunction stripSamplingParams(target: Record<string, any>, keys: string[]): void {\n for (const k of keys) {\n if (k in target) delete target[k];\n }\n}\n\nfunction clampBudget(budget: number, maxTokens: number | undefined): number {\n if (typeof maxTokens !== \"number\" || maxTokens <= 0) return budget;\n const ceiling = maxTokens - THINKING_OUTPUT_RESERVE;\n if (ceiling < 1024) return Math.max(1024, Math.floor(maxTokens / 2));\n return Math.min(budget, ceiling);\n}\n\nfunction normalizeEffort(effort: ReasoningEffort | undefined): ReasoningEffort | undefined {\n if (!effort) return undefined;\n const allowed: ReasoningEffort[] = [\"minimal\", \"low\", \"medium\", \"high\"];\n return allowed.includes(effort) ? effort : undefined;\n}\n\nfunction resolveBudget(\n reasoning: ReasoningRequestConfig,\n effortBudget: Record<ReasoningEffort, number>,\n): number | undefined {\n if (typeof reasoning.budgetTokens === \"number\" && reasoning.budgetTokens > 0) {\n return Math.floor(reasoning.budgetTokens);\n }\n const effort = normalizeEffort(reasoning.effort);\n if (effort && effortBudget[effort]) return effortBudget[effort];\n return undefined;\n}\n","// OpenAI Chat Completions API provider.\n// Direct fetch-based implementation – no SDK dependency.\n\nimport { BaseProvider } from \"./base.js\";\nimport { parseSSEStream } from \"./utils/sse.js\";\nimport { applyOpenAIReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ContentPart,\n type ToolDefinition,\n type OpenAIProviderConfig,\n type ProviderType,\n ProviderError,\n emptyUsage,\n} from \"./types.js\";\n\nexport class OpenAIProvider extends BaseProvider {\n readonly providerName: ProviderType = \"openai\";\n\n protected readonly apiKey: string;\n protected readonly baseURL: string;\n protected readonly defaultModel: string;\n protected readonly defaultHeaders: Record<string, string>;\n\n constructor(config: OpenAIProviderConfig) {\n super();\n this.apiKey = config.apiKey;\n this.baseURL = (config.baseURL ?? \"https://api.openai.com/v1\").replace(/\\/$/, \"\");\n this.defaultModel = config.defaultModel ?? \"gpt-4o\";\n this.defaultHeaders = {\n ...config.defaultHeaders,\n ...(config.organization ? { \"OpenAI-Organization\": config.organization } : {}),\n };\n if (config.retry) this.retryPolicy = { ...this.retryPolicy, ...config.retry };\n }\n\n /** True when the request targets a reasoning model (o-series / gpt-5) so we\n * should route through the Responses API, which exposes `reasoning.effort`\n * and reasoning summaries. Chat Completions silently drops these. */\n protected useResponsesApi(request: ChatCompletionRequest): boolean {\n if (!request.reasoning) return false;\n return isReasoningModel(request.model || this.defaultModel);\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n if (this.useResponsesApi(request)) {\n return this.completeResponses(request);\n }\n const body = this.buildRequestBody(request, false);\n const res = await this.doFetch(body);\n const json = await res.json();\n return this.parseResponse(json);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n if (this.useResponsesApi(request)) {\n // Responses streaming uses a distinct SSE event protocol; for reasoning\n // models we issue a single non-streaming call and emit one final chunk\n // so reasoning summary + usage are preserved.\n const response = await this.completeResponses(request);\n yield {\n id: response.id,\n model: response.model,\n delta: {\n content: response.content ?? undefined,\n toolCalls: response.toolCalls.length > 0 ? response.toolCalls : undefined,\n reasoning: response.reasoning,\n },\n usage: response.usage,\n finishReason: response.finishReason,\n };\n return;\n }\n const body = this.buildRequestBody(request, true);\n const res = await this.doFetch(body);\n\n if (!res.body) throw new ProviderError(\"No response body for stream\", this.providerName);\n\n let id = \"\";\n let model = \"\";\n const toolCallBuffers = new Map<number, { id: string; name: string; arguments: string }>();\n let usage: TokenUsage | undefined;\n\n for await (const event of parseSSEStream(res.body)) {\n if (event.data === \"[DONE]\") break;\n\n let chunk: any;\n try {\n chunk = JSON.parse(event.data);\n } catch {\n continue;\n }\n\n id = chunk.id ?? id;\n model = chunk.model ?? model;\n\n const choice = chunk.choices?.[0];\n\n // Usage is in the final chunk when stream_options.include_usage is true\n if (chunk.usage) {\n usage = this.extractUsage(chunk.usage);\n }\n\n if (!choice) {\n // Usage-only chunk\n if (usage) yield { id, model, delta: {}, usage };\n continue;\n }\n\n const delta = choice.delta ?? {};\n const out: ChatCompletionChunk = {\n id,\n model,\n delta: {},\n finishReason: mapFinishReason(choice.finish_reason),\n };\n\n if (delta.content) {\n out.delta.content = delta.content;\n }\n\n // Accumulate tool calls\n if (delta.tool_calls) {\n const partials: Partial<ToolCall>[] = [];\n for (const tc of delta.tool_calls) {\n const idx = tc.index ?? 0;\n if (!toolCallBuffers.has(idx)) {\n toolCallBuffers.set(idx, { id: tc.id ?? \"\", name: \"\", arguments: \"\" });\n }\n const buf = toolCallBuffers.get(idx)!;\n if (tc.id) buf.id = tc.id;\n if (tc.function?.name) buf.name = tc.function.name;\n if (tc.function?.arguments) buf.arguments += tc.function.arguments;\n partials.push({ id: buf.id, name: buf.name || undefined, arguments: tc.function?.arguments });\n }\n out.delta.toolCalls = partials;\n }\n\n if (usage) out.usage = usage;\n yield out;\n }\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n protected buildRequestBody(request: ChatCompletionRequest, stream: boolean): Record<string, any> {\n const body: Record<string, any> = {\n model: request.model || this.defaultModel,\n messages: request.messages.map((m) => this.toOpenAIMessage(m)),\n stream,\n };\n\n if (stream) {\n body.stream_options = { include_usage: true };\n }\n if (request.temperature != null) body.temperature = request.temperature;\n if (request.maxTokens != null) body.max_tokens = request.maxTokens;\n if (request.topP != null) body.top_p = request.topP;\n if (request.stop) body.stop = request.stop;\n\n if (request.tools?.length) {\n body.tools = request.tools.map((t) => this.toOpenAITool(t));\n }\n\n if (request.toolChoice != null && request.tools?.length) {\n if (typeof request.toolChoice === \"string\") {\n body.tool_choice = request.toolChoice;\n } else {\n body.tool_choice = { type: \"function\", function: { name: request.toolChoice.name } };\n }\n }\n\n if (request.responseFormat) {\n if (request.responseFormat.type === \"json_schema\") {\n body.response_format = {\n type: \"json_schema\",\n json_schema: {\n name: request.responseFormat.name ?? \"response\",\n schema: request.responseFormat.schema,\n strict: true,\n },\n };\n } else if (request.responseFormat.type === \"json_object\") {\n body.response_format = { type: \"json_object\" };\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n applyOpenAIReasoning(body, request.reasoning, \"legacy_effort\");\n\n return body;\n }\n\n // ─── Responses API (reasoning models) ──────────────────────────────────────\n\n protected async completeResponses(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const body = this.buildResponsesBody(request);\n const res = await this.responsesFetch(body);\n const json = await res.json();\n return this.parseResponsesResponse(json, request.model || this.defaultModel);\n }\n\n protected buildResponsesBody(request: ChatCompletionRequest): Record<string, any> {\n const body: Record<string, any> = {\n model: request.model || this.defaultModel,\n input: request.messages.map((m) => this.toResponsesInput(m)),\n };\n\n if (request.maxTokens != null) body.max_output_tokens = request.maxTokens;\n if (request.topP != null) body.top_p = request.topP;\n // Reasoning models reject `temperature`; omit it intentionally.\n\n if (request.tools?.length) {\n // Responses tools are flat function objects (not nested under `function`).\n body.tools = request.tools.map((t) => ({\n type: \"function\",\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n ...(t.strict ? { strict: true } : {}),\n }));\n }\n\n if (request.toolChoice != null && request.tools?.length) {\n if (typeof request.toolChoice === \"string\") {\n body.tool_choice = request.toolChoice;\n } else {\n body.tool_choice = { type: \"function\", name: request.toolChoice.name };\n }\n }\n\n if (request.responseFormat) {\n if (request.responseFormat.type === \"json_schema\") {\n body.text = {\n format: {\n type: \"json_schema\",\n name: request.responseFormat.name ?? \"response\",\n schema: request.responseFormat.schema,\n strict: true,\n },\n };\n } else if (request.responseFormat.type === \"json_object\") {\n body.text = { format: { type: \"json_object\" } };\n }\n }\n\n if (request.extra) Object.assign(body, request.extra);\n\n // reasoning.effort + reasoning.summary\n applyOpenAIReasoning(body, request.reasoning, \"responses\");\n\n return body;\n }\n\n /** Maps a unified message to a Responses API `input` item. */\n protected toResponsesInput(m: UnifiedMessage): Record<string, any> {\n // Tool result → function_call_output\n if (m.role === \"tool\" && m.toolCallId) {\n const output = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n return { type: \"function_call_output\", call_id: m.toolCallId, output };\n }\n\n // Assistant with tool calls → emit function_call items. The Responses API\n // expects each call as its own input item; when there is also text we keep\n // it as a separate message item.\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n // Caller flattens arrays; return the function_call list wrapped so the\n // body builder can splice. We return a single item array marker instead.\n // To keep the 1:1 map contract, encode tool calls as a message with an\n // attached __calls field that buildResponsesBody expands.\n return {\n __assistantWithCalls: true,\n text: typeof m.content === \"string\" ? m.content : \"\",\n calls: m.toolCalls.map((tc) => ({\n type: \"function_call\",\n call_id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n })),\n };\n }\n\n const role = m.role === \"system\" ? \"system\" : m.role === \"assistant\" ? \"assistant\" : \"user\";\n const textType = role === \"assistant\" ? \"output_text\" : \"input_text\";\n if (typeof m.content === \"string\") {\n return { role, content: [{ type: textType, text: m.content }] };\n }\n const content = (m.content as ContentPart[]).map((part) => {\n if (part.type === \"text\") return { type: textType, text: part.text };\n if (part.type === \"image\") {\n const src = part.source;\n const url = src.type === \"url\" ? src.url : `data:${src.mediaType};base64,${src.data}`;\n return { type: \"input_image\", image_url: url };\n }\n return { type: textType, text: \"\" };\n });\n return { role, content };\n }\n\n protected async responsesFetch(body: Record<string, any>): Promise<Response> {\n // Expand assistant-with-calls markers into discrete input items.\n body.input = expandResponsesInput(body.input);\n const url = `${this.baseURL}/responses`;\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n ...this.defaultHeaders,\n };\n const payload = JSON.stringify(body);\n const res = await this.doFetchWithRetry(() => fetch(url, { method: \"POST\", headers, body: payload }));\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `OpenAI Responses API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n return res;\n }\n\n protected parseResponsesResponse(json: any, modelId: string): ChatCompletionResponse {\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const summaryParts: string[] = [];\n\n for (const item of json.output ?? []) {\n if (item.type === \"message\") {\n for (const c of item.content ?? []) {\n if (c.type === \"output_text\" && typeof c.text === \"string\") textParts.push(c.text);\n }\n } else if (item.type === \"function_call\") {\n toolCalls.push({\n id: item.call_id ?? item.id ?? \"\",\n name: item.name ?? \"\",\n arguments: typeof item.arguments === \"string\" ? item.arguments : JSON.stringify(item.arguments ?? {}),\n });\n } else if (item.type === \"reasoning\") {\n for (const s of item.summary ?? []) {\n if (typeof s.text === \"string\") summaryParts.push(s.text);\n }\n }\n }\n\n // Fallback: top-level output_text convenience field.\n if (textParts.length === 0 && typeof json.output_text === \"string\") {\n textParts.push(json.output_text);\n }\n\n const usage = json.usage ?? {};\n const reasoningTokens = usage.output_tokens_details?.reasoning_tokens ?? 0;\n const tokenUsage: TokenUsage = {\n inputTokens: usage.input_tokens ?? 0,\n outputTokens: usage.output_tokens ?? 0,\n totalTokens: usage.total_tokens ?? (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n cachedInputTokens: usage.input_tokens_details?.cached_tokens ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens,\n };\n\n const finishReason: ChatCompletionResponse[\"finishReason\"] = toolCalls.length > 0\n ? \"tool_calls\"\n : json.status === \"incomplete\" ? \"length\" : \"stop\";\n\n return {\n id: json.id ?? \"\",\n model: json.model ?? modelId,\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason,\n reasoning: summaryParts.length > 0 ? { summary: summaryParts.join(\"\\n\").trim() || undefined } : undefined,\n raw: json,\n };\n }\n\n protected toOpenAIMessage(m: UnifiedMessage): Record<string, any> {\n const msg: Record<string, any> = { role: m.role };\n\n if (typeof m.content === \"string\") {\n msg.content = m.content;\n } else if (Array.isArray(m.content)) {\n msg.content = m.content.map((part) => {\n if (part.type === \"text\") return { type: \"text\", text: part.text };\n if (part.type === \"image\") {\n const src = part.source;\n const url = src.type === \"url\" ? src.url : `data:${src.mediaType};base64,${src.data}`;\n return { type: \"image_url\", image_url: { url } };\n }\n return part;\n });\n }\n\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n msg.tool_calls = m.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n }));\n }\n\n if (m.role === \"tool\" && m.toolCallId) {\n msg.tool_call_id = m.toolCallId;\n }\n\n if (m.name) msg.name = m.name;\n\n return msg;\n }\n\n protected toOpenAITool(t: ToolDefinition): Record<string, any> {\n const fn: Record<string, any> = {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n };\n if (t.strict) {\n fn.strict = true;\n }\n return { type: \"function\", function: fn };\n }\n\n protected async doFetch(body: Record<string, any>): Promise<Response> {\n const url = `${this.baseURL}/chat/completions`;\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n ...this.defaultHeaders,\n };\n const payload = JSON.stringify(body);\n const res = await this.doFetchWithRetry(() => fetch(url, { method: \"POST\", headers, body: payload }));\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `OpenAI API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n protected parseResponse(json: any): ChatCompletionResponse {\n const choice = json.choices?.[0];\n const message = choice?.message ?? {};\n\n const toolCalls: ToolCall[] = (message.tool_calls ?? []).map((tc: any) => ({\n id: tc.id,\n name: tc.function?.name ?? \"\",\n arguments: tc.function?.arguments ?? \"{}\",\n }));\n\n return {\n id: json.id ?? \"\",\n model: json.model ?? \"\",\n content: message.content ?? null,\n toolCalls,\n usage: this.extractUsage(json.usage),\n finishReason: mapFinishReason(choice?.finish_reason),\n raw: json,\n };\n }\n\n protected extractUsage(usage: any): TokenUsage {\n if (!usage) return emptyUsage();\n const promptDetails = usage.prompt_tokens_details ?? {};\n const completionDetails = usage.completion_tokens_details ?? {};\n return {\n inputTokens: usage.prompt_tokens ?? 0,\n outputTokens: usage.completion_tokens ?? 0,\n totalTokens: usage.total_tokens ?? (usage.prompt_tokens ?? 0) + (usage.completion_tokens ?? 0),\n cachedInputTokens: promptDetails.cached_tokens ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: completionDetails.reasoning_tokens ?? 0,\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Detects OpenAI reasoning models (o-series and gpt-5 family). */\nexport function isReasoningModel(model: string | undefined): boolean {\n if (!model) return false;\n const m = model.toLowerCase();\n return /(^|[/_-])o[0-9]/.test(m) || m.startsWith(\"o1\") || m.startsWith(\"o3\") || m.startsWith(\"o4\")\n || m.includes(\"gpt-5\") || m.includes(\"gpt5\");\n}\n\n/** Expands assistant-with-tool-call markers produced by toResponsesInput into\n * the flat Responses `input` item list (optional message text + function_call\n * items in order). */\nfunction expandResponsesInput(input: any[]): any[] {\n const out: any[] = [];\n for (const item of input) {\n if (item && item.__assistantWithCalls) {\n if (item.text) {\n out.push({ role: \"assistant\", content: [{ type: \"output_text\", text: item.text }] });\n }\n for (const call of item.calls) out.push(call);\n } else {\n out.push(item);\n }\n }\n return out;\n}\n\nfunction mapFinishReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"stop\":\n return \"stop\";\n case \"tool_calls\":\n return \"tool_calls\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content_filter\";\n default:\n return \"stop\";\n }\n}\n","// Anthropic Messages API provider.\n// Direct fetch-based implementation – no SDK dependency.\n\nimport { BaseProvider } from \"./base.js\";\nimport { parseSSEStream } from \"./utils/sse.js\";\nimport { applyAnthropicReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ToolDefinition,\n type ReasoningBlock,\n type AnthropicProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\n\nexport class AnthropicProvider extends BaseProvider {\n readonly providerName: ProviderType = \"anthropic\";\n\n private readonly apiKey: string;\n private readonly baseURL: string;\n private readonly defaultModel: string;\n private readonly defaultHeaders: Record<string, string>;\n private readonly anthropicVersion: string;\n\n private readonly promptCachingEnabled: boolean;\n\n constructor(config: AnthropicProviderConfig) {\n super();\n this.apiKey = config.apiKey;\n this.baseURL = (config.baseURL ?? \"https://api.anthropic.com\").replace(/\\/$/, \"\");\n this.defaultModel = config.defaultModel ?? \"claude-sonnet-4-20250514\";\n this.defaultHeaders = config.defaultHeaders ?? {};\n this.anthropicVersion = config.anthropicVersion ?? \"2023-06-01\";\n this.promptCachingEnabled = config.prompt_caching?.enabled === true;\n if (config.retry) this.retryPolicy = { ...this.retryPolicy, ...config.retry };\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const body = this.buildRequestBody(request, false);\n const res = await this.doFetch(body);\n const json = await res.json();\n return this.parseResponse(json);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n const body = this.buildRequestBody(request, true);\n const res = await this.doFetch(body);\n\n if (!res.body) throw new ProviderError(\"No response body for stream\", this.providerName);\n\n let id = \"\";\n let model = \"\";\n let inputTokens = 0;\n let outputTokens = 0;\n let cacheReadInputTokens = 0;\n let cacheCreationInputTokens = 0;\n const currentToolCalls = new Map<number, { id: string; name: string; arguments: string }>();\n // Accumulate thinking blocks by content-block index so we can replay them.\n const reasoningBlocks = new Map<number, ReasoningBlock>();\n\n for await (const event of parseSSEStream(res.body)) {\n let data: any;\n try {\n data = JSON.parse(event.data);\n } catch {\n continue;\n }\n\n const eventType = event.event ?? data.type;\n\n switch (eventType) {\n case \"message_start\": {\n const msg = data.message;\n id = msg?.id ?? \"\";\n model = msg?.model ?? \"\";\n if (msg?.usage) {\n inputTokens = msg.usage.input_tokens ?? 0;\n cacheReadInputTokens = msg.usage.cache_read_input_tokens ?? 0;\n cacheCreationInputTokens = msg.usage.cache_creation_input_tokens ?? 0;\n }\n break;\n }\n\n case \"content_block_start\": {\n const idx = data.index ?? 0;\n const block = data.content_block;\n if (block?.type === \"tool_use\") {\n currentToolCalls.set(idx, {\n id: block.id ?? \"\",\n name: block.name ?? \"\",\n arguments: \"\",\n });\n } else if (block?.type === \"thinking\") {\n reasoningBlocks.set(idx, { type: \"thinking\", text: block.thinking ?? \"\", signature: block.signature });\n } else if (block?.type === \"redacted_thinking\") {\n reasoningBlocks.set(idx, { type: \"redacted_thinking\", data: block.data });\n }\n break;\n }\n\n case \"content_block_delta\": {\n const idx = data.index ?? 0;\n const delta = data.delta;\n\n if (delta?.type === \"text_delta\" && delta.text) {\n yield {\n id,\n model,\n delta: { content: delta.text },\n };\n } else if (delta?.type === \"thinking_delta\" && delta.thinking) {\n const blk = reasoningBlocks.get(idx) ?? { type: \"thinking\", text: \"\" };\n blk.text = (blk.text ?? \"\") + delta.thinking;\n reasoningBlocks.set(idx, blk);\n yield {\n id,\n model,\n delta: { reasoning: { summary: delta.thinking } },\n };\n } else if (delta?.type === \"signature_delta\" && delta.signature) {\n const blk = reasoningBlocks.get(idx) ?? { type: \"thinking\", text: \"\" };\n blk.signature = (blk.signature ?? \"\") + delta.signature;\n reasoningBlocks.set(idx, blk);\n } else if (delta?.type === \"input_json_delta\" && delta.partial_json) {\n const tc = currentToolCalls.get(idx);\n if (tc) {\n tc.arguments += delta.partial_json;\n yield {\n id,\n model,\n delta: {\n toolCalls: [{ id: tc.id, name: tc.name, arguments: delta.partial_json }],\n },\n };\n }\n }\n break;\n }\n\n case \"content_block_stop\":\n // No action needed\n break;\n\n case \"message_delta\": {\n const delta = data.delta;\n if (data.usage) {\n outputTokens = data.usage.output_tokens ?? outputTokens;\n }\n const finishReason = mapAnthropicStopReason(delta?.stop_reason);\n const usage: TokenUsage = {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n cachedInputTokens: cacheReadInputTokens,\n cachedWriteTokens: cacheCreationInputTokens,\n cachedOutputTokens: 0,\n reasoningTokens: 0,\n };\n const blocks = [...reasoningBlocks.values()].filter(\n (b) => (b.type === \"thinking\" && b.signature) || (b.type === \"redacted_thinking\" && b.data),\n );\n yield {\n id,\n model,\n delta: blocks.length > 0 ? { reasoning: { blocks } } : {},\n finishReason,\n usage,\n };\n break;\n }\n\n case \"message_stop\":\n break;\n\n case \"error\": {\n const errMsg = data.error?.message ?? \"Unknown Anthropic streaming error\";\n throw new ProviderError(errMsg, this.providerName);\n }\n }\n }\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n private buildRequestBody(request: ChatCompletionRequest, stream: boolean): Record<string, any> {\n // Anthropic separates system from messages\n const { system, messages } = this.splitSystemMessages(request.messages);\n\n const body: Record<string, any> = {\n model: request.model || this.defaultModel,\n messages: messages.map((m) => this.toAnthropicMessage(m)),\n max_tokens: request.maxTokens ?? 4096,\n stream,\n };\n\n if (system) {\n // When prompt caching is on, ship `system` as a block array with a\n // cache_control breakpoint so the static system prompt is reused.\n if (this.promptCachingEnabled) {\n body.system = [{ type: \"text\", text: system, cache_control: { type: \"ephemeral\" } }];\n } else {\n body.system = system;\n }\n }\n if (request.temperature != null) body.temperature = request.temperature;\n if (request.topP != null) body.top_p = request.topP;\n if (request.stop) body.stop_sequences = request.stop;\n\n if (request.tools?.length) {\n const tools = request.tools.map((t) => this.toAnthropicTool(t));\n // Cache the entire tools block by placing the breakpoint on the final\n // tool definition – everything above it in the request is cached too.\n if (this.promptCachingEnabled && tools.length > 0) {\n tools[tools.length - 1] = { ...tools[tools.length - 1], cache_control: { type: \"ephemeral\" } };\n }\n body.tools = tools;\n }\n\n if (request.toolChoice != null) {\n if (request.toolChoice === \"auto\") {\n body.tool_choice = { type: \"auto\" };\n } else if (request.toolChoice === \"required\") {\n body.tool_choice = { type: \"any\" };\n } else if (request.toolChoice === \"none\") {\n // Anthropic doesn't have a direct \"none\" – omit tools\n } else {\n body.tool_choice = { type: \"tool\", name: request.toolChoice.name };\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n applyAnthropicReasoning(body, request.reasoning);\n\n return body;\n }\n\n private splitSystemMessages(messages: UnifiedMessage[]): { system: string | undefined; messages: UnifiedMessage[] } {\n const systemParts: string[] = [];\n const rest: UnifiedMessage[] = [];\n\n for (const m of messages) {\n if (m.role === \"system\") {\n if (typeof m.content === \"string\") {\n systemParts.push(m.content);\n } else {\n const text = m.content\n .filter((p) => p.type === \"text\")\n .map((p) => (p as { type: \"text\"; text: string }).text)\n .join(\"\\n\");\n if (text) systemParts.push(text);\n }\n } else {\n rest.push(m);\n }\n }\n\n return {\n system: systemParts.length > 0 ? systemParts.join(\"\\n\\n\") : undefined,\n messages: rest,\n };\n }\n\n private toAnthropicMessage(m: UnifiedMessage): Record<string, any> {\n // Tool result messages\n if (m.role === \"tool\" && m.toolCallId) {\n const content = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: m.toolCallId,\n content,\n },\n ],\n };\n }\n\n // Assistant with tool calls. Anthropic requires the original thinking\n // blocks (with their `signature`) to be replayed verbatim *before* the\n // text/tool_use blocks whenever extended thinking was used in that turn.\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n const content: any[] = [];\n appendReasoningBlocks(content, m.reasoning?.blocks);\n if (typeof m.content === \"string\" && m.content) {\n content.push({ type: \"text\", text: m.content });\n }\n for (const tc of m.toolCalls) {\n content.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: safeJsonParse(tc.arguments),\n });\n }\n return { role: \"assistant\", content };\n }\n\n // Assistant text-only turn that nonetheless carried thinking blocks.\n if (m.role === \"assistant\" && m.reasoning?.blocks?.length) {\n const content: any[] = [];\n appendReasoningBlocks(content, m.reasoning.blocks);\n const text = typeof m.content === \"string\" ? m.content : \"\";\n if (text) content.push({ type: \"text\", text });\n return { role: \"assistant\", content };\n }\n\n // Regular messages\n const msg: Record<string, any> = { role: m.role };\n\n if (typeof m.content === \"string\") {\n msg.content = m.content;\n } else if (Array.isArray(m.content)) {\n msg.content = m.content.map((part) => {\n if (part.type === \"text\") return { type: \"text\", text: part.text };\n if (part.type === \"image\") {\n const src = part.source;\n if (src.type === \"base64\") {\n return {\n type: \"image\",\n source: { type: \"base64\", media_type: src.mediaType, data: src.data },\n };\n }\n return {\n type: \"image\",\n source: { type: \"url\", url: src.url },\n };\n }\n return part;\n });\n }\n\n return msg;\n }\n\n private toAnthropicTool(t: ToolDefinition): Record<string, any> {\n return {\n name: t.name,\n description: t.description,\n input_schema: t.parameters,\n };\n }\n\n private async doFetch(body: Record<string, any>): Promise<Response> {\n const url = `${this.baseURL}/v1/messages`;\n const headers = {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": this.apiKey,\n \"anthropic-version\": this.anthropicVersion,\n ...this.defaultHeaders,\n };\n const payload = JSON.stringify(body);\n const res = await this.doFetchWithRetry(() => fetch(url, { method: \"POST\", headers, body: payload }));\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Anthropic API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n private parseResponse(json: any): ChatCompletionResponse {\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const reasoningBlocks: ReasoningBlock[] = [];\n const summaryParts: string[] = [];\n\n for (const block of json.content ?? []) {\n if (block.type === \"text\") {\n textParts.push(block.text);\n } else if (block.type === \"thinking\") {\n reasoningBlocks.push({\n type: \"thinking\",\n text: block.thinking ?? \"\",\n signature: block.signature,\n });\n if (block.thinking) summaryParts.push(block.thinking);\n } else if (block.type === \"redacted_thinking\") {\n reasoningBlocks.push({ type: \"redacted_thinking\", data: block.data });\n } else if (block.type === \"tool_use\") {\n toolCalls.push({\n id: block.id,\n name: block.name,\n arguments: typeof block.input === \"string\" ? block.input : JSON.stringify(block.input),\n });\n }\n }\n\n const usage = json.usage ?? {};\n const tokenUsage: TokenUsage = {\n inputTokens: usage.input_tokens ?? 0,\n outputTokens: usage.output_tokens ?? 0,\n totalTokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n cachedInputTokens: usage.cache_read_input_tokens ?? 0,\n cachedWriteTokens: usage.cache_creation_input_tokens ?? 0,\n cachedOutputTokens: 0,\n // Anthropic bills thinking tokens inside `output_tokens` and does not\n // expose a separate count, so reasoningTokens stays 0 here (cost is still\n // captured via outputTokens). See docs for the limitation.\n reasoningTokens: 0,\n };\n\n return {\n id: json.id ?? \"\",\n model: json.model ?? \"\",\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason: mapAnthropicStopReason(json.stop_reason),\n reasoning: reasoningBlocks.length > 0\n ? { blocks: reasoningBlocks, summary: summaryParts.join(\"\\n\").trim() || undefined }\n : undefined,\n raw: json,\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction mapAnthropicStopReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"end_turn\":\n case \"stop_sequence\":\n return \"stop\";\n case \"tool_use\":\n return \"tool_calls\";\n case \"max_tokens\":\n return \"length\";\n default:\n return \"stop\";\n }\n}\n\nfunction safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return {};\n }\n}\n\n/** Pushes captured thinking blocks back into an Anthropic assistant content\n * array. `thinking` blocks must include their original `signature`; redacted\n * blocks carry an opaque `data` payload. Blocks missing required fields are\n * skipped (Anthropic rejects malformed thinking blocks).\n */\nfunction appendReasoningBlocks(content: any[], blocks: ReasoningBlock[] | undefined): void {\n if (!blocks?.length) return;\n for (const b of blocks) {\n if (b.type === \"redacted_thinking\") {\n if (b.data) content.push({ type: \"redacted_thinking\", data: b.data });\n } else if (b.type === \"thinking\") {\n if (b.signature) {\n content.push({ type: \"thinking\", thinking: b.text ?? \"\", signature: b.signature });\n }\n }\n }\n}\n","// Azure OpenAI provider.\n// Extends OpenAI with Azure-specific URL construction and api-key auth.\n\nimport { OpenAIProvider } from \"./openai.js\";\nimport {\n type AzureProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\nexport class AzureProvider extends OpenAIProvider {\n override readonly providerName: ProviderType = \"azure\";\n\n private readonly endpoint: string;\n private readonly apiVersion: string;\n private readonly deploymentName?: string;\n private readonly azureApiKey: string;\n\n constructor(config: AzureProviderConfig) {\n // We pass a dummy OpenAI config; we override doFetch/buildRequestBody\n super({\n provider: \"openai\",\n apiKey: config.apiKey,\n defaultModel: config.defaultModel ?? config.deploymentName ?? \"gpt-4o\",\n defaultHeaders: config.defaultHeaders,\n });\n this.endpoint = config.endpoint.replace(/\\/$/, \"\");\n this.apiVersion = config.apiVersion ?? \"2024-10-21\";\n this.deploymentName = config.deploymentName;\n this.azureApiKey = config.apiKey;\n }\n\n protected override async doFetch(body: Record<string, any>): Promise<Response> {\n // Azure uses the deployment name from the URL path, or from the model field\n const deployment = this.deploymentName ?? body.model;\n if (!deployment) {\n throw new ProviderError(\"Azure requires a deploymentName or model\", this.providerName);\n }\n\n const url = `${this.endpoint}/openai/deployments/${deployment}/chat/completions?api-version=${this.apiVersion}`;\n\n // Remove model from body since Azure uses deployment path\n const { model: _model, ...bodyWithoutModel } = body;\n\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"api-key\": this.azureApiKey,\n ...this.defaultHeaders,\n },\n body: JSON.stringify(bodyWithoutModel),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Azure OpenAI API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n /** Azure exposes the Responses API at /openai/responses with api-key auth.\n * Reasoning summaries require a preview api-version; callers can override via\n * the `apiVersion` config. */\n protected override async responsesFetch(body: Record<string, any>): Promise<Response> {\n body.input = expandAzureResponsesInput(body.input);\n const deployment = this.deploymentName ?? body.model;\n if (!deployment) {\n throw new ProviderError(\"Azure requires a deploymentName or model\", this.providerName);\n }\n // Azure routes by deployment in the path; keep `model` in the body too as\n // some api-versions expect it. Prefer the deployment-scoped responses route.\n const url = `${this.endpoint}/openai/responses?api-version=${this.apiVersion}`;\n const payload = JSON.stringify({ ...body, model: deployment });\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"api-key\": this.azureApiKey,\n ...this.defaultHeaders,\n },\n body: payload,\n });\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Azure OpenAI Responses API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n return res;\n }\n}\n\n/** Re-applies the assistant-with-calls expansion (mirrors the OpenAI helper). */\nfunction expandAzureResponsesInput(input: any[]): any[] {\n const out: any[] = [];\n for (const item of input) {\n if (item && item.__assistantWithCalls) {\n if (item.text) {\n out.push({ role: \"assistant\", content: [{ type: \"output_text\", text: item.text }] });\n }\n for (const call of item.calls) out.push(call);\n } else {\n out.push(item);\n }\n }\n return out;\n}\n","// OpenAI-compatible API provider.\n// Works with any API that implements the OpenAI Chat Completions spec\n// (e.g. Ollama, Together, Groq, Fireworks, vLLM, LiteLLM, etc.)\n\nimport { OpenAIProvider } from \"./openai.js\";\nimport type { OpenAICompatibleProviderConfig, ProviderType } from \"./types.js\";\n\nexport class OpenAICompatibleProvider extends OpenAIProvider {\n override readonly providerName: ProviderType = \"openai-compatible\";\n\n constructor(config: OpenAICompatibleProviderConfig) {\n super({\n provider: \"openai\",\n apiKey: config.apiKey,\n baseURL: config.baseURL,\n defaultModel: config.defaultModel,\n defaultHeaders: config.defaultHeaders,\n });\n }\n}\n","// AWS Signature Version 4 signing implementation for Bedrock API calls.\n// Uses Node.js built-in crypto module – zero external dependencies.\n\nimport { createHmac, createHash } from \"crypto\";\n\nexport type SigV4Credentials = {\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n};\n\nexport type SigV4Request = {\n method: string;\n url: string;\n headers: Record<string, string>;\n body: string;\n region: string;\n service: string;\n credentials: SigV4Credentials;\n};\n\n/**\n * Signs an HTTP request using AWS Signature Version 4.\n * Returns a new headers object with the Authorization, x-amz-date,\n * and optionally x-amz-security-token headers added.\n */\nexport function signRequest(req: SigV4Request): Record<string, string> {\n const now = new Date();\n const dateStamp = toDateStamp(now);\n const amzDate = toAmzDate(now);\n\n const parsed = new URL(req.url);\n const host = parsed.host;\n const canonicalUri = parsed.pathname || \"/\";\n const canonicalQuerystring = sortQueryParams(parsed.searchParams);\n\n // Build headers to sign\n const headers: Record<string, string> = {\n ...req.headers,\n host,\n \"x-amz-date\": amzDate,\n };\n\n if (req.credentials.sessionToken) {\n headers[\"x-amz-security-token\"] = req.credentials.sessionToken;\n }\n\n // Canonical headers (must be sorted, lowercased)\n const signedHeaderKeys = Object.keys(headers)\n .map((k) => k.toLowerCase())\n .sort();\n const canonicalHeaders = signedHeaderKeys\n .map((k) => `${k}:${headers[Object.keys(headers).find((h) => h.toLowerCase() === k)!]?.trim()}`)\n .join(\"\\n\") + \"\\n\";\n const signedHeaders = signedHeaderKeys.join(\";\");\n\n // Payload hash\n const payloadHash = sha256(req.body);\n\n // Canonical request\n const canonicalRequest = [\n req.method,\n canonicalUri,\n canonicalQuerystring,\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join(\"\\n\");\n\n // Credential scope\n const credentialScope = `${dateStamp}/${req.region}/${req.service}/aws4_request`;\n\n // String to sign\n const stringToSign = [\n \"AWS4-HMAC-SHA256\",\n amzDate,\n credentialScope,\n sha256(canonicalRequest),\n ].join(\"\\n\");\n\n // Signing key\n const signingKey = getSignatureKey(\n req.credentials.secretAccessKey,\n dateStamp,\n req.region,\n req.service,\n );\n\n // Signature\n const signature = hmacHex(signingKey, stringToSign);\n\n // Authorization header\n const authorization = `AWS4-HMAC-SHA256 Credential=${req.credentials.accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n const result: Record<string, string> = {\n ...req.headers,\n \"x-amz-date\": amzDate,\n Authorization: authorization,\n };\n\n if (req.credentials.sessionToken) {\n result[\"x-amz-security-token\"] = req.credentials.sessionToken;\n }\n\n return result;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction toDateStamp(d: Date): string {\n return d.toISOString().replace(/[-:T]/g, \"\").slice(0, 8);\n}\n\nfunction toAmzDate(d: Date): string {\n return d.toISOString().replace(/[-:]/g, \"\").replace(/\\.\\d+Z$/, \"Z\");\n}\n\nfunction sha256(data: string): string {\n return createHash(\"sha256\").update(data, \"utf8\").digest(\"hex\");\n}\n\nfunction hmac(key: Buffer | string, data: string): Buffer {\n return createHmac(\"sha256\", key).update(data, \"utf8\").digest();\n}\n\nfunction hmacHex(key: Buffer | string, data: string): string {\n return createHmac(\"sha256\", key).update(data, \"utf8\").digest(\"hex\");\n}\n\nfunction getSignatureKey(secret: string, dateStamp: string, region: string, service: string): Buffer {\n const kDate = hmac(`AWS4${secret}`, dateStamp);\n const kRegion = hmac(kDate, region);\n const kService = hmac(kRegion, service);\n return hmac(kService, \"aws4_request\");\n}\n\nfunction sortQueryParams(params: URLSearchParams): string {\n const sorted = [...params.entries()].sort(([a], [b]) => a.localeCompare(b));\n return sorted.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join(\"&\");\n}\n","// AWS Bedrock Converse API provider.\n// Uses AWS SigV4 signing with fetch – no AWS SDK dependency.\n\nimport { BaseProvider } from \"./base.js\";\nimport { signRequest, type SigV4Credentials } from \"./utils/sigv4.js\";\nimport { applyBedrockReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ToolDefinition,\n type ReasoningBlock,\n type BedrockProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\n\nexport class BedrockProvider extends BaseProvider {\n readonly providerName: ProviderType = \"bedrock\";\n\n private readonly region: string;\n private readonly credentials: SigV4Credentials;\n private readonly defaultModel: string;\n private readonly defaultHeaders: Record<string, string>;\n\n private readonly promptCachingEnabled: boolean;\n\n constructor(config: BedrockProviderConfig) {\n super();\n this.region = config.region;\n this.defaultModel = config.defaultModel ?? \"anthropic.claude-sonnet-4-20250514-v1:0\";\n this.defaultHeaders = config.defaultHeaders ?? {};\n this.promptCachingEnabled = config.prompt_caching?.enabled === true;\n if (config.retry) this.retryPolicy = { ...this.retryPolicy, ...config.retry };\n\n this.credentials = {\n accessKeyId: config.accessKeyId ?? process.env.AWS_ACCESS_KEY_ID ?? \"\",\n secretAccessKey: config.secretAccessKey ?? process.env.AWS_SECRET_ACCESS_KEY ?? \"\",\n sessionToken: config.sessionToken ?? process.env.AWS_SESSION_TOKEN,\n };\n\n if (!this.credentials.accessKeyId || !this.credentials.secretAccessKey) {\n throw new ProviderError(\n \"AWS credentials required: provide accessKeyId/secretAccessKey or set AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY env vars\",\n \"bedrock\",\n );\n }\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const modelId = request.model || this.defaultModel;\n const body = this.buildConverseBody(request);\n const json = await this.doFetch(modelId, body);\n return this.parseResponse(json, modelId);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n // Bedrock ConverseStream uses AWS event stream binary protocol.\n // For simplicity, we fall back to non-streaming and yield a single chunk.\n // Full event stream parsing can be added if needed.\n const response = await this.complete(request);\n\n yield {\n id: response.id,\n model: response.model,\n delta: {\n content: response.content ?? undefined,\n toolCalls: response.toolCalls.length > 0 ? response.toolCalls : undefined,\n },\n usage: response.usage,\n finishReason: response.finishReason,\n };\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n private buildConverseBody(request: ChatCompletionRequest): Record<string, any> {\n const { system, messages } = this.splitSystemMessages(request.messages);\n\n const body: Record<string, any> = {\n messages: messages.map((m) => this.toBedrockMessage(m)),\n };\n\n if (system.length > 0) {\n const systemBlocks = system.map((s) => ({ text: s }) as Record<string, any>);\n if (this.promptCachingEnabled) systemBlocks.push({ cachePoint: { type: \"default\" } });\n body.system = systemBlocks;\n }\n\n // Inference config\n const inferenceConfig: Record<string, any> = {};\n if (request.maxTokens != null) inferenceConfig.maxTokens = request.maxTokens;\n if (request.temperature != null) inferenceConfig.temperature = request.temperature;\n if (request.topP != null) inferenceConfig.topP = request.topP;\n if (request.stop) inferenceConfig.stopSequences = request.stop;\n if (Object.keys(inferenceConfig).length > 0) body.inferenceConfig = inferenceConfig;\n\n // Tools\n if (request.tools?.length) {\n const tools = request.tools.map((t) => this.toBedrockTool(t)) as Array<Record<string, any>>;\n if (this.promptCachingEnabled && tools.length > 0) {\n // Converse uses a {cachePoint} block at the end of the tools array.\n tools.push({ cachePoint: { type: \"default\" } });\n }\n body.toolConfig = {\n tools,\n };\n\n if (request.toolChoice != null) {\n if (request.toolChoice === \"auto\") {\n body.toolConfig.toolChoice = { auto: {} };\n } else if (request.toolChoice === \"required\") {\n body.toolConfig.toolChoice = { any: {} };\n } else if (typeof request.toolChoice === \"object\") {\n body.toolConfig.toolChoice = { tool: { name: request.toolChoice.name } };\n }\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n // Native reasoning: maps to additionalModelRequestFields.thinking and\n // enforces the budget/temperature rules for thinking-capable models.\n applyBedrockReasoning(body, request.reasoning);\n\n return body;\n }\n\n private splitSystemMessages(messages: UnifiedMessage[]): { system: string[]; messages: UnifiedMessage[] } {\n const system: string[] = [];\n const rest: UnifiedMessage[] = [];\n\n for (const m of messages) {\n if (m.role === \"system\") {\n const text = typeof m.content === \"string\"\n ? m.content\n : m.content.filter((p) => p.type === \"text\").map((p) => (p as { type: \"text\"; text: string }).text).join(\"\\n\");\n if (text) system.push(text);\n } else {\n rest.push(m);\n }\n }\n\n return { system, messages: rest };\n }\n\n private toBedrockMessage(m: UnifiedMessage): Record<string, any> {\n // Tool result → user message with toolResult content\n if (m.role === \"tool\" && m.toolCallId) {\n const text = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n return {\n role: \"user\",\n content: [\n {\n toolResult: {\n toolUseId: m.toolCallId,\n content: [{ text }],\n status: \"success\",\n },\n },\n ],\n };\n }\n\n // Assistant with tool calls\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n const content: any[] = [];\n appendBedrockReasoning(content, m.reasoning?.blocks);\n if (typeof m.content === \"string\" && m.content) {\n content.push({ text: m.content });\n }\n for (const tc of m.toolCalls) {\n content.push({\n toolUse: {\n toolUseId: tc.id,\n name: tc.name,\n input: safeJsonParse(tc.arguments),\n },\n });\n }\n return { role: \"assistant\", content };\n }\n\n // Regular messages\n const content: any[] = [];\n if (typeof m.content === \"string\") {\n content.push({ text: m.content });\n } else if (Array.isArray(m.content)) {\n for (const part of m.content) {\n if (part.type === \"text\") {\n content.push({ text: part.text });\n } else if (part.type === \"image\") {\n const src = part.source;\n if (src.type === \"base64\") {\n content.push({\n image: {\n format: mediaTypeToFormat(src.mediaType),\n source: { bytes: src.data },\n },\n });\n }\n }\n }\n }\n\n return { role: m.role === \"user\" ? \"user\" : \"assistant\", content };\n }\n\n private toBedrockTool(t: ToolDefinition): Record<string, any> {\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: { json: t.parameters },\n },\n };\n }\n\n private async doFetch(modelId: string, body: Record<string, any>): Promise<any> {\n const host = `bedrock-runtime.${this.region}.amazonaws.com`;\n const url = `https://${host}/model/${encodeURIComponent(modelId)}/converse`;\n const bodyStr = JSON.stringify(body);\n\n const res = await this.doFetchWithRetry(() => {\n // SigV4 must re-sign on each retry because of the x-amz-date header.\n const headers = signRequest({\n method: \"POST\",\n url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...this.defaultHeaders,\n },\n body: bodyStr,\n region: this.region,\n service: \"bedrock\",\n credentials: this.credentials,\n });\n return fetch(url, { method: \"POST\", headers, body: bodyStr });\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Bedrock API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res.json();\n }\n\n private parseResponse(json: any, modelId: string): ChatCompletionResponse {\n const output = json.output?.message;\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const reasoningBlocks: ReasoningBlock[] = [];\n const summaryParts: string[] = [];\n\n for (const block of output?.content ?? []) {\n if (block.text) {\n textParts.push(block.text);\n } else if (block.reasoningContent) {\n const rc = block.reasoningContent;\n if (rc.reasoningText) {\n reasoningBlocks.push({\n type: \"thinking\",\n text: rc.reasoningText.text ?? \"\",\n signature: rc.reasoningText.signature,\n });\n if (rc.reasoningText.text) summaryParts.push(rc.reasoningText.text);\n } else if (rc.redactedContent) {\n reasoningBlocks.push({ type: \"redacted_thinking\", data: rc.redactedContent });\n }\n } else if (block.toolUse) {\n toolCalls.push({\n id: block.toolUse.toolUseId,\n name: block.toolUse.name,\n arguments: typeof block.toolUse.input === \"string\"\n ? block.toolUse.input\n : JSON.stringify(block.toolUse.input ?? {}),\n });\n }\n }\n\n const usage = json.usage ?? {};\n const tokenUsage: TokenUsage = {\n inputTokens: usage.inputTokens ?? 0,\n outputTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens ?? (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0),\n cachedInputTokens: usage.cacheReadInputTokenCount ?? 0,\n cachedWriteTokens: usage.cacheWriteInputTokenCount ?? 0,\n cachedOutputTokens: 0,\n // Bedrock bills thinking tokens inside outputTokens; no separate count.\n reasoningTokens: 0,\n };\n\n return {\n id: json.requestId ?? json.$metadata?.requestId ?? \"\",\n model: modelId,\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason: mapBedrockStopReason(json.stopReason),\n reasoning: reasoningBlocks.length > 0\n ? { blocks: reasoningBlocks, summary: summaryParts.join(\"\\n\").trim() || undefined }\n : undefined,\n raw: json,\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Replays captured thinking blocks into a Bedrock Converse assistant content\n * array as `reasoningContent` blocks, ahead of text/toolUse blocks. */\nfunction appendBedrockReasoning(content: any[], blocks: ReasoningBlock[] | undefined): void {\n if (!blocks?.length) return;\n for (const b of blocks) {\n if (b.type === \"redacted_thinking\") {\n if (b.data) content.push({ reasoningContent: { redactedContent: b.data } });\n } else if (b.type === \"thinking\") {\n if (b.signature) {\n content.push({\n reasoningContent: { reasoningText: { text: b.text ?? \"\", signature: b.signature } },\n });\n }\n }\n }\n}\n\nfunction mapBedrockStopReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"end_turn\":\n case \"stop_sequence\":\n return \"stop\";\n case \"tool_use\":\n return \"tool_calls\";\n case \"max_tokens\":\n return \"length\";\n case \"content_filtered\":\n case \"guardrail\":\n return \"content_filter\";\n default:\n return \"stop\";\n }\n}\n\nfunction mediaTypeToFormat(mediaType: string): string {\n const map: Record<string, string> = {\n \"image/jpeg\": \"jpeg\",\n \"image/png\": \"png\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n };\n return map[mediaType] ?? \"png\";\n}\n\nfunction safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return {};\n }\n}\n","// Google Vertex AI (Gemini) provider.\n// Direct fetch-based implementation – supports both access token and service account auth.\n\nimport { BaseProvider } from \"./base.js\";\nimport { parseSSEStream } from \"./utils/sse.js\";\nimport { applyGeminiReasoning } from \"./utils/reasoning.js\";\nimport {\n type ChatCompletionRequest,\n type ChatCompletionResponse,\n type ChatCompletionChunk,\n type ToolCall,\n type TokenUsage,\n type UnifiedMessage,\n type ToolDefinition,\n type VertexProviderConfig,\n type ProviderType,\n ProviderError,\n} from \"./types.js\";\n\nexport class VertexProvider extends BaseProvider {\n readonly providerName: ProviderType = \"vertex\";\n\n private readonly projectId: string;\n private readonly location: string;\n private readonly defaultModel: string;\n private readonly defaultHeaders: Record<string, string>;\n private accessToken?: string;\n private serviceAccountJson?: Record<string, any>;\n private tokenExpiry = 0;\n\n constructor(config: VertexProviderConfig) {\n super();\n this.projectId = config.projectId;\n this.location = config.location ?? \"us-central1\";\n this.defaultModel = config.defaultModel ?? \"gemini-2.0-flash\";\n this.defaultHeaders = config.defaultHeaders ?? {};\n\n if (config.accessToken) {\n this.accessToken = config.accessToken;\n this.tokenExpiry = Date.now() + 3600_000; // assume 1h validity\n }\n\n if (config.serviceAccountJson) {\n this.serviceAccountJson =\n typeof config.serviceAccountJson === \"string\"\n ? JSON.parse(config.serviceAccountJson)\n : config.serviceAccountJson;\n }\n }\n\n async complete(request: ChatCompletionRequest): Promise<ChatCompletionResponse> {\n const modelId = request.model || this.defaultModel;\n const body = this.buildGeminiBody(request);\n const url = this.buildUrl(modelId, false);\n const res = await this.doFetch(url, body);\n const json = await res.json();\n return this.parseResponse(json, modelId);\n }\n\n async *completeStream(request: ChatCompletionRequest): AsyncGenerator<ChatCompletionChunk, void, unknown> {\n const modelId = request.model || this.defaultModel;\n const body = this.buildGeminiBody(request);\n const url = this.buildUrl(modelId, true);\n const res = await this.doFetch(url, body);\n\n if (!res.body) throw new ProviderError(\"No response body for stream\", this.providerName);\n\n // Vertex streams JSON array items separated by newlines or SSE\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"text/event-stream\")) {\n // SSE format\n for await (const event of parseSSEStream(res.body)) {\n if (event.data === \"[DONE]\") break;\n let chunk: any;\n try {\n chunk = JSON.parse(event.data);\n } catch {\n continue;\n }\n yield this.parseStreamChunk(chunk, modelId);\n }\n } else {\n // NDJSON or JSON array format\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n // Try to parse JSON objects from buffer\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim().replace(/^,/, \"\").replace(/^\\[/, \"\").replace(/\\]$/, \"\");\n if (!trimmed || trimmed === \"[\" || trimmed === \"]\") continue;\n try {\n const chunk = JSON.parse(trimmed);\n yield this.parseStreamChunk(chunk, modelId);\n } catch {\n // Incomplete JSON, put back\n buffer = line + \"\\n\" + buffer;\n break;\n }\n }\n }\n\n // Process remaining buffer\n const remaining = buffer.trim().replace(/^,/, \"\").replace(/^\\[/, \"\").replace(/\\]$/, \"\");\n if (remaining && remaining !== \"[\" && remaining !== \"]\") {\n try {\n const chunk = JSON.parse(remaining);\n yield this.parseStreamChunk(chunk, modelId);\n } catch {\n // ignore\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n }\n\n // ─── Internals ───────────────────────────────────────────────────────────\n\n private buildUrl(modelId: string, stream: boolean): string {\n const base = `https://${this.location}-aiplatform.googleapis.com/v1`;\n const path = `projects/${this.projectId}/locations/${this.location}/publishers/google/models/${modelId}`;\n const action = stream ? \"streamGenerateContent?alt=sse\" : \"generateContent\";\n return `${base}/${path}:${action}`;\n }\n\n private buildGeminiBody(request: ChatCompletionRequest): Record<string, any> {\n const { system, contents } = this.buildContents(request.messages);\n\n const body: Record<string, any> = { contents };\n\n if (system) {\n body.systemInstruction = { parts: [{ text: system }] };\n }\n\n // Generation config\n const generationConfig: Record<string, any> = {};\n if (request.maxTokens != null) generationConfig.maxOutputTokens = request.maxTokens;\n if (request.temperature != null) generationConfig.temperature = request.temperature;\n if (request.topP != null) generationConfig.topP = request.topP;\n if (request.stop) generationConfig.stopSequences = request.stop;\n\n if (request.responseFormat) {\n if (request.responseFormat.type === \"json_schema\" || request.responseFormat.type === \"json_object\") {\n generationConfig.responseMimeType = \"application/json\";\n if (request.responseFormat.schema) {\n generationConfig.responseSchema = request.responseFormat.schema;\n }\n }\n }\n\n applyGeminiReasoning(generationConfig, request.reasoning);\n\n if (Object.keys(generationConfig).length > 0) body.generationConfig = generationConfig;\n if (request.tools?.length) {\n body.tools = [\n {\n functionDeclarations: request.tools.map((t) => this.toGeminiTool(t)),\n },\n ];\n\n if (request.toolChoice != null) {\n const mode =\n request.toolChoice === \"auto\" ? \"AUTO\"\n : request.toolChoice === \"required\" ? \"ANY\"\n : request.toolChoice === \"none\" ? \"NONE\"\n : \"AUTO\";\n body.toolConfig = { functionCallingConfig: { mode } };\n }\n }\n\n if (request.extra) {\n Object.assign(body, request.extra);\n }\n\n return body;\n }\n\n private buildContents(messages: UnifiedMessage[]): { system: string | undefined; contents: any[] } {\n const systemParts: string[] = [];\n const contents: any[] = [];\n\n for (const m of messages) {\n if (m.role === \"system\") {\n const text = typeof m.content === \"string\"\n ? m.content\n : m.content.filter((p) => p.type === \"text\").map((p) => (p as { type: \"text\"; text: string }).text).join(\"\\n\");\n if (text) systemParts.push(text);\n continue;\n }\n\n contents.push(this.toGeminiContent(m));\n }\n\n return {\n system: systemParts.length > 0 ? systemParts.join(\"\\n\\n\") : undefined,\n contents,\n };\n }\n\n private toGeminiContent(m: UnifiedMessage): Record<string, any> {\n // Tool result → user message with functionResponse\n if (m.role === \"tool\" && m.toolCallId) {\n const text = typeof m.content === \"string\" ? m.content : JSON.stringify(m.content);\n let response: any;\n try {\n response = JSON.parse(text);\n } catch {\n response = { result: text };\n }\n return {\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name: m.name ?? m.toolCallId,\n response,\n },\n },\n ],\n };\n }\n\n // Assistant with tool calls\n if (m.role === \"assistant\" && m.toolCalls?.length) {\n const parts: any[] = [];\n if (typeof m.content === \"string\" && m.content) {\n parts.push({ text: m.content });\n }\n for (const tc of m.toolCalls) {\n parts.push({\n functionCall: {\n name: tc.name,\n args: safeJsonParse(tc.arguments),\n },\n });\n }\n return { role: \"model\", parts };\n }\n\n // Map roles: user→user, assistant→model\n const role = m.role === \"assistant\" ? \"model\" : \"user\";\n const parts: any[] = [];\n\n if (typeof m.content === \"string\") {\n parts.push({ text: m.content });\n } else if (Array.isArray(m.content)) {\n for (const part of m.content) {\n if (part.type === \"text\") {\n parts.push({ text: part.text });\n } else if (part.type === \"image\") {\n const src = part.source;\n if (src.type === \"base64\") {\n parts.push({\n inlineData: { mimeType: src.mediaType, data: src.data },\n });\n } else {\n parts.push({\n fileData: { mimeType: \"image/jpeg\", fileUri: src.url },\n });\n }\n }\n }\n }\n\n return { role, parts };\n }\n\n private toGeminiTool(t: ToolDefinition): Record<string, any> {\n return {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n };\n }\n\n private async getAccessToken(): Promise<string> {\n // If we have a valid token, reuse it\n if (this.accessToken && Date.now() < this.tokenExpiry) {\n return this.accessToken;\n }\n\n // Try to get token from service account JSON\n if (this.serviceAccountJson) {\n const token = await this.getTokenFromServiceAccount(this.serviceAccountJson);\n this.accessToken = token;\n this.tokenExpiry = Date.now() + 3500_000; // ~58 minutes\n return token;\n }\n\n // Try gcloud CLI as fallback\n try {\n const { execSync } = await import(\"child_process\");\n const token = execSync(\"gcloud auth print-access-token\", { encoding: \"utf8\" }).trim();\n this.accessToken = token;\n this.tokenExpiry = Date.now() + 3500_000;\n return token;\n } catch {\n throw new ProviderError(\n \"No access token available. Provide accessToken, serviceAccountJson, or ensure gcloud CLI is authenticated.\",\n this.providerName,\n );\n }\n }\n\n private async getTokenFromServiceAccount(sa: Record<string, any>): Promise<string> {\n const { createSign } = await import(\"crypto\");\n\n const now = Math.floor(Date.now() / 1000);\n const header = { alg: \"RS256\", typ: \"JWT\" };\n const claims = {\n iss: sa.client_email,\n scope: \"https://www.googleapis.com/auth/cloud-platform\",\n aud: \"https://oauth2.googleapis.com/token\",\n iat: now,\n exp: now + 3600,\n };\n\n const segments = [\n base64url(JSON.stringify(header)),\n base64url(JSON.stringify(claims)),\n ];\n const signingInput = segments.join(\".\");\n\n const sign = createSign(\"RSA-SHA256\");\n sign.update(signingInput);\n const signature = sign.sign(sa.private_key, \"base64url\");\n const jwt = `${signingInput}.${signature}`;\n\n const tokenRes = await fetch(\"https://oauth2.googleapis.com/token\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=${jwt}`,\n });\n\n if (!tokenRes.ok) {\n const text = await tokenRes.text().catch(() => \"\");\n throw new ProviderError(`Failed to get Vertex access token: ${text}`, this.providerName);\n }\n\n const tokenJson = (await tokenRes.json()) as { access_token: string };\n return tokenJson.access_token;\n }\n\n private async doFetch(url: string, body: Record<string, any>): Promise<Response> {\n const token = await this.getAccessToken();\n\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n ...this.defaultHeaders,\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new ProviderError(\n `Vertex AI API error ${res.status}: ${text}`,\n this.providerName,\n res.status,\n text,\n );\n }\n\n return res;\n }\n\n private parseResponse(json: any, modelId: string): ChatCompletionResponse {\n const candidate = json.candidates?.[0];\n const parts = candidate?.content?.parts ?? [];\n\n const textParts: string[] = [];\n const toolCalls: ToolCall[] = [];\n const thoughtParts: string[] = [];\n let toolCallIdx = 0;\n\n for (const part of parts) {\n if (part.text) {\n // Gemini marks reasoning summary parts with thought:true.\n if (part.thought === true) {\n thoughtParts.push(part.text);\n } else {\n textParts.push(part.text);\n }\n } else if (part.functionCall) {\n toolCalls.push({\n id: `call_${toolCallIdx++}`,\n name: part.functionCall.name,\n arguments: JSON.stringify(part.functionCall.args ?? {}),\n });\n }\n }\n\n const usageMeta = json.usageMetadata ?? {};\n const tokenUsage: TokenUsage = {\n inputTokens: usageMeta.promptTokenCount ?? 0,\n outputTokens: usageMeta.candidatesTokenCount ?? 0,\n totalTokens: usageMeta.totalTokenCount ?? 0,\n cachedInputTokens: usageMeta.cachedContentTokenCount ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: usageMeta.thoughtsTokenCount ?? 0,\n };\n\n return {\n id: json.responseId ?? \"\",\n model: modelId,\n content: textParts.join(\"\") || null,\n toolCalls,\n usage: tokenUsage,\n finishReason: mapGeminiFinishReason(candidate?.finishReason),\n reasoning: thoughtParts.length > 0 ? { summary: thoughtParts.join(\"\\n\").trim() || undefined } : undefined,\n raw: json,\n };\n }\n\n private parseStreamChunk(chunk: any, modelId: string): ChatCompletionChunk {\n const candidate = chunk.candidates?.[0];\n const parts = candidate?.content?.parts ?? [];\n const delta: ChatCompletionChunk[\"delta\"] = {};\n\n for (const part of parts) {\n if (part.text) {\n if (part.thought === true) {\n delta.reasoning = { summary: (delta.reasoning?.summary ?? \"\") + part.text };\n } else {\n delta.content = (delta.content ?? \"\") + part.text;\n }\n } else if (part.functionCall) {\n if (!delta.toolCalls) delta.toolCalls = [];\n delta.toolCalls.push({\n id: `call_${delta.toolCalls.length}`,\n name: part.functionCall.name,\n arguments: JSON.stringify(part.functionCall.args ?? {}),\n });\n }\n }\n\n let usage: TokenUsage | undefined;\n if (chunk.usageMetadata) {\n const u = chunk.usageMetadata;\n usage = {\n inputTokens: u.promptTokenCount ?? 0,\n outputTokens: u.candidatesTokenCount ?? 0,\n totalTokens: u.totalTokenCount ?? 0,\n cachedInputTokens: u.cachedContentTokenCount ?? 0,\n cachedWriteTokens: 0,\n cachedOutputTokens: 0,\n reasoningTokens: u.thoughtsTokenCount ?? 0,\n };\n }\n\n return {\n id: chunk.responseId ?? \"\",\n model: modelId,\n delta,\n usage,\n finishReason: mapGeminiFinishReason(candidate?.finishReason),\n };\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction mapGeminiFinishReason(reason: string | null | undefined): ChatCompletionResponse[\"finishReason\"] {\n switch (reason) {\n case \"STOP\":\n return \"stop\";\n case \"MAX_TOKENS\":\n return \"length\";\n case \"SAFETY\":\n case \"RECITATION\":\n return \"content_filter\";\n case \"TOOL_CALLS\":\n return \"tool_calls\";\n default:\n return \"stop\";\n }\n}\n\nfunction base64url(str: string): string {\n return Buffer.from(str).toString(\"base64url\");\n}\n\nfunction safeJsonParse(str: string): any {\n try {\n return JSON.parse(str);\n } catch {\n return {};\n }\n}\n","// Adapter that wraps a native provider into the agent-sdk's BaseChatModel interface.\n// This allows any provider to be used directly with createAgent() / createSmartAgent().\n\nimport type { BaseChatModel, BaseChatMessage, BaseChatMessagePart } from \"../model.js\";\nimport type { ModelCapabilities } from \"../structuredOutput/types.js\";\nimport type { BaseProvider } from \"./base.js\";\nimport type {\n ChatCompletionRequest,\n ChatCompletionResponse,\n UnifiedMessage,\n ToolDefinition,\n ToolCall,\n ContentPart,\n TokenUsage,\n ProviderType,\n ReasoningRequestConfig,\n} from \"./types.js\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nexport type NativeModelOptions = {\n /** Override the model ID per adapter instance */\n model?: string;\n /** Default temperature */\n temperature?: number;\n /** Default max tokens */\n maxTokens?: number;\n /** Provider-specific extras passed on every request */\n extra?: Record<string, any>;\n /** Unified native reasoning config applied by default (per-call overrides supported). */\n reasoning?: ReasoningRequestConfig;\n};\n\n/**\n * Creates a BaseChatModel from a native provider.\n *\n * Usage:\n * ```ts\n * const provider = createProvider({ provider: \"openai\", apiKey: \"...\" });\n * const model = fromNativeProvider(provider, { model: \"gpt-4o\" });\n * const agent = createSmartAgent({ model, tools: [...] });\n * ```\n */\nexport function fromNativeProvider(\n provider: BaseProvider,\n options?: NativeModelOptions,\n): BaseChatModel {\n let boundTools: ToolDefinition[] | undefined = (options as any)?.__tools;\n\n const modelName = options?.model ?? (provider as any).defaultModel ?? provider.providerName;\n\n const adapted: BaseChatModel = {\n modelName,\n\n capabilities: resolveCapabilities(provider.providerName),\n\n invoke: async (\n messages: BaseChatMessage[],\n _invokeOptions?: Record<string, any>,\n ): Promise<BaseChatMessage> => {\n const request = buildRequest(messages, boundTools, options, _invokeOptions);\n const response = await provider.complete(request);\n return toBaseChatMessage(response);\n },\n\n stream: async function* (\n messages: BaseChatMessage[],\n _invokeOptions?: Record<string, any>,\n ): AsyncIterable<BaseChatMessage | BaseChatMessagePart | string> {\n const request = buildRequest(messages, boundTools, options, _invokeOptions);\n request.stream = true;\n\n let fullContent = \"\";\n let allToolCalls: ToolCall[] = [];\n let lastUsage: TokenUsage | undefined;\n let reasoningBlocks: import(\"./types.js\").ReasoningBlock[] | undefined;\n const toolCallBuffers = new Map<string, ToolCall>();\n\n for await (const chunk of provider.completeStream(request)) {\n // Yield text deltas as strings for streaming\n if (chunk.delta.content) {\n fullContent += chunk.delta.content;\n yield chunk.delta.content;\n }\n\n // Capture final reasoning blocks (emitted near end of stream).\n if (chunk.delta.reasoning?.blocks?.length) {\n reasoningBlocks = chunk.delta.reasoning.blocks;\n }\n\n // Accumulate tool calls\n if (chunk.delta.toolCalls) {\n for (const tc of chunk.delta.toolCalls) {\n if (tc.id) {\n const existing = toolCallBuffers.get(tc.id);\n if (existing) {\n if (tc.arguments) existing.arguments += tc.arguments;\n } else {\n toolCallBuffers.set(tc.id, {\n id: tc.id,\n name: tc.name ?? \"\",\n arguments: tc.arguments ?? \"\",\n });\n }\n }\n }\n }\n\n if (chunk.usage) lastUsage = chunk.usage;\n }\n\n // Yield final assembled message\n allToolCalls = [...toolCallBuffers.values()];\n const finalMessage = assembleMessage(fullContent, allToolCalls, lastUsage);\n if (reasoningBlocks?.length) {\n (finalMessage as any).reasoning = { blocks: reasoningBlocks };\n }\n yield finalMessage;\n },\n\n bindTools: (tools: any[], _bindOptions?: { strict?: boolean; [key: string]: any }): BaseChatModel => {\n const strict = _bindOptions?.strict ?? false;\n const toolDefs = tools.map((t) => toToolDefinition(t, strict));\n // Create a new adapter instance with tools pre-set in its closure\n return fromNativeProvider(provider, { ...options, __tools: toolDefs } as any);\n },\n };\n\n return adapted;\n\n // ─── Internal helpers ──────────────────────────────────────────────────\n\n function buildRequest(\n messages: BaseChatMessage[],\n tools?: ToolDefinition[],\n opts?: NativeModelOptions,\n invokeOptions?: Record<string, any>,\n ): ChatCompletionRequest {\n const req: ChatCompletionRequest = {\n model: opts?.model ?? modelName,\n messages: messages.map(toUnifiedMessage),\n };\n\n if (opts?.temperature != null) req.temperature = opts.temperature;\n if (opts?.maxTokens != null) req.maxTokens = opts.maxTokens;\n if (tools?.length) req.tools = tools;\n if (opts?.extra) req.extra = opts.extra;\n\n // Reasoning config: per-call invokeOptions.reasoning overrides the adapter default\n const reasoningOverride = (invokeOptions as any)?.reasoning as ReasoningRequestConfig | undefined;\n const reasoningCfg = reasoningOverride ?? opts?.reasoning;\n if (reasoningCfg) req.reasoning = reasoningCfg;\n\n // Per-call tool choice override (used by reflection node to disable tools temporarily)\n const tc = (invokeOptions as any)?.tool_choice ?? (invokeOptions as any)?.toolChoice;\n if (tc && tools?.length) {\n req.toolChoice = tc;\n }\n\n // Propagate response_format from invoke options (set by StructuredOutputManager via agentCore)\n const rf = invokeOptions?.response_format;\n if (rf && typeof rf === \"object\" && rf.type) {\n if (rf.type === \"json_schema\" && rf.json_schema) {\n req.responseFormat = {\n type: \"json_schema\",\n schema: rf.json_schema.schema,\n name: rf.json_schema.name,\n };\n } else if (rf.type === \"json_object\") {\n req.responseFormat = { type: \"json_object\" };\n } else if (rf.type === \"text\") {\n req.responseFormat = { type: \"text\" };\n }\n }\n\n // Fallback: check for __responseFormat in messages (legacy path)\n if (!req.responseFormat) {\n const lastMsg = messages[messages.length - 1];\n if (lastMsg && (lastMsg as any).__responseFormat) {\n req.responseFormat = (lastMsg as any).__responseFormat;\n }\n }\n\n return req;\n }\n}\n\n// ─── Conversion helpers ──────────────────────────────────────────────────────\n\nfunction toUnifiedMessage(msg: BaseChatMessage): UnifiedMessage {\n const unified: UnifiedMessage = {\n role: msg.role as UnifiedMessage[\"role\"],\n content: convertContent(msg.content),\n };\n\n if (msg.name) unified.name = msg.name;\n if (msg.tool_call_id) unified.toolCallId = msg.tool_call_id;\n\n if (msg.tool_calls?.length) {\n unified.toolCalls = msg.tool_calls.map((tc: any) => ({\n id: tc.id,\n name: tc.function?.name ?? tc.name ?? \"\",\n arguments: tc.function?.arguments ?? tc.arguments ?? \"{}\",\n }));\n }\n\n // Carry native reasoning blocks back so providers can replay them verbatim\n // (Anthropic/Bedrock extended thinking requires the signed blocks intact).\n const reasoning = (msg as any).reasoning;\n if (reasoning && (reasoning.blocks?.length || reasoning.summary)) {\n unified.reasoning = reasoning;\n }\n\n return unified;\n}\n\nfunction convertContent(content: string | BaseChatMessagePart[]): string | ContentPart[] {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return String(content ?? \"\");\n\n return content.map((part): ContentPart => {\n if (part.type === \"text\" || (!part.type && part.text)) {\n return { type: \"text\", text: part.text ?? part.content ?? \"\" };\n }\n if (part.type === \"image_url\") {\n const img = (part as any).image_url;\n if (typeof img === \"string\" || img?.url?.startsWith(\"http\")) {\n return {\n type: \"image\",\n source: { type: \"url\", url: typeof img === \"string\" ? img : img.url },\n };\n }\n // data URI → base64\n if (img?.url?.startsWith(\"data:\")) {\n const match = img.url.match(/^data:([^;]+);base64,(.+)$/);\n if (match) {\n return {\n type: \"image\",\n source: { type: \"base64\", mediaType: match[1], data: match[2] },\n };\n }\n }\n }\n // Fallback: treat as text\n return { type: \"text\", text: part.text ?? part.content ?? JSON.stringify(part) };\n });\n}\n\n// ─── Zod → JSON Schema helpers ───────────────────────────────────────────────\n\nfunction isZodSchema(obj: any): boolean {\n return obj != null && typeof obj === \"object\" && typeof obj.safeParse === \"function\" && \"_def\" in obj;\n}\n\nfunction hasStrictUnsafeShape(node: any, inProperty = false): boolean {\n if (!node || typeof node !== \"object\") return false;\n\n if (Array.isArray(node)) {\n return node.some((item) => hasStrictUnsafeShape(item, inProperty));\n }\n\n if (typeof node.$ref === \"string\") {\n return true;\n }\n\n const hasType = typeof node.type === \"string\" || (Array.isArray(node.type) && node.type.length > 0);\n const hasProperties = !!node.properties && typeof node.properties === \"object\" && !Array.isArray(node.properties);\n const hasItems = node.items !== undefined;\n const hasComposite = [\"anyOf\", \"oneOf\", \"allOf\"].some((key) => Array.isArray(node[key]) && node[key].length > 0);\n\n if (inProperty && !hasType && !hasProperties && !hasItems) {\n return true;\n }\n\n if (inProperty && hasComposite && !hasType) {\n return true;\n }\n\n if (hasProperties) {\n for (const value of Object.values(node.properties as Record<string, unknown>)) {\n if (hasStrictUnsafeShape(value, true)) {\n return true;\n }\n }\n }\n\n if (node.items && hasStrictUnsafeShape(node.items, false)) {\n return true;\n }\n\n for (const key of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n if (Array.isArray(node[key]) && hasStrictUnsafeShape(node[key], false)) {\n return true;\n }\n }\n\n for (const key of [\"definitions\", \"$defs\"]) {\n const defs = node[key];\n if (defs && typeof defs === \"object\") {\n for (const value of Object.values(defs as Record<string, unknown>)) {\n if (hasStrictUnsafeShape(value, false)) {\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\nfunction canUseStrictToolSchema(schema: any): boolean {\n if (!schema || typeof schema !== \"object\") {\n return true;\n }\n\n if (isZodSchema(schema)) {\n return true;\n }\n\n return !hasStrictUnsafeShape(schema);\n}\n\n/**\n * Convert a potentially-Zod schema to a plain JSON Schema object.\n * If it's already a JSON Schema (plain object with `type`), pass through.\n */\nfunction convertToJsonSchema(schema: any, strict = false): Record<string, any> {\n if (!schema || typeof schema !== \"object\") {\n return { type: \"object\", properties: {}, required: [], additionalProperties: false };\n }\n if (isZodSchema(schema)) {\n const converted = zodToJsonSchema(schema, {\n $refStrategy: \"none\",\n ...(strict ? { openaiStrictMode: true } : {}),\n }) as Record<string, any>;\n delete converted[\"$schema\"];\n // Ensure root is type: \"object\" (zodToJsonSchema should do this, but guard)\n if (!converted.type) converted.type = \"object\";\n return converted;\n }\n const converted = { ...schema };\n delete converted[\"$schema\"];\n // Already JSON Schema — ensure type is present\n if (!converted.type && converted.properties) {\n return { type: \"object\", ...converted };\n }\n return converted;\n}\n\n/**\n * Recursively normalize a JSON Schema for OpenAI strict mode:\n * - All object properties become required\n * - additionalProperties: false on every object\n */\nfunction normalizeStrictSchema(schema: Record<string, any>): Record<string, any> {\n if (!schema || typeof schema !== \"object\") return schema;\n const clone = { ...schema };\n\n if (typeof clone.format === \"string\") {\n delete clone.format;\n }\n\n if (clone.type === \"object\" || clone.properties) {\n if (!clone.type) clone.type = \"object\";\n if (clone.properties && typeof clone.properties === \"object\") {\n const normalized: Record<string, any> = {};\n for (const [k, v] of Object.entries(clone.properties)) {\n normalized[k] = normalizeStrictSchema(v as Record<string, any>);\n }\n clone.properties = normalized;\n clone.required = Object.keys(normalized);\n } else {\n clone.properties = {};\n clone.required = [];\n }\n clone.additionalProperties = false;\n }\n\n if (clone.items) clone.items = normalizeStrictSchema(clone.items);\n for (const key of [\"anyOf\", \"oneOf\", \"allOf\"]) {\n if (Array.isArray(clone[key])) {\n clone[key] = clone[key].map((s: any) => normalizeStrictSchema(s));\n }\n }\n if (clone.definitions && typeof clone.definitions === \"object\") {\n const nd: Record<string, any> = {};\n for (const [k, v] of Object.entries(clone.definitions)) {\n nd[k] = normalizeStrictSchema(v as Record<string, any>);\n }\n clone.definitions = nd;\n }\n if (clone.$defs && typeof clone.$defs === \"object\") {\n const nd: Record<string, any> = {};\n for (const [k, v] of Object.entries(clone.$defs)) {\n nd[k] = normalizeStrictSchema(v as Record<string, any>);\n }\n clone.$defs = nd;\n }\n return clone;\n}\n\nfunction toToolDefinition(tool: any, strict?: boolean): ToolDefinition {\n let name: string;\n let description: string;\n let parameters: Record<string, any>;\n let rawSchema: any;\n let useStrict = strict ?? false;\n\n if (tool.type === \"function\" && tool.function) {\n // OpenAI function format — parameters are already JSON Schema\n name = tool.function.name;\n description = tool.function.description ?? \"\";\n rawSchema = tool.function.parameters ?? { type: \"object\", properties: {}, additionalProperties: false };\n } else {\n name = tool.name ?? \"unknown\";\n description = tool.description ?? \"\";\n rawSchema = tool.schema ?? tool.parameters;\n }\n\n if (useStrict && !canUseStrictToolSchema(rawSchema)) {\n useStrict = false;\n }\n\n parameters = convertToJsonSchema(rawSchema, useStrict);\n\n if (useStrict) {\n parameters = normalizeStrictSchema(parameters);\n }\n\n return { name, description, parameters, ...(useStrict ? { strict: true } : {}) };\n}\n\nfunction toBaseChatMessage(response: ChatCompletionResponse): BaseChatMessage {\n const msg: BaseChatMessage = {\n role: \"assistant\",\n content: response.content ?? \"\",\n usage: {\n prompt_tokens: response.usage.inputTokens,\n completion_tokens: response.usage.outputTokens,\n total_tokens: response.usage.totalTokens,\n prompt_tokens_details: {\n cached_tokens: response.usage.cachedInputTokens,\n },\n completion_tokens_details: {\n reasoning_tokens: response.usage.reasoningTokens,\n },\n },\n response_metadata: {\n token_usage: {\n prompt_tokens: response.usage.inputTokens,\n completion_tokens: response.usage.outputTokens,\n total_tokens: response.usage.totalTokens,\n cached_tokens: response.usage.cachedInputTokens,\n cache_write_tokens: response.usage.cachedWriteTokens,\n },\n finish_reason: response.finishReason,\n model_name: response.model,\n },\n };\n\n if (response.toolCalls.length > 0) {\n msg.tool_calls = response.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\" as const,\n function: { name: tc.name, arguments: tc.arguments },\n }));\n }\n\n if (response.reasoning && (response.reasoning.blocks?.length || response.reasoning.summary)) {\n (msg as any).reasoning = response.reasoning;\n }\n\n return msg;\n}\n\nfunction assembleMessage(content: string, toolCalls: ToolCall[], usage?: TokenUsage): BaseChatMessage {\n const msg: BaseChatMessage = {\n role: \"assistant\",\n content,\n };\n\n if (usage) {\n msg.usage = {\n prompt_tokens: usage.inputTokens,\n completion_tokens: usage.outputTokens,\n total_tokens: usage.totalTokens,\n prompt_tokens_details: {\n cached_tokens: usage.cachedInputTokens,\n },\n completion_tokens_details: {\n reasoning_tokens: usage.reasoningTokens,\n },\n };\n msg.response_metadata = {\n token_usage: {\n prompt_tokens: usage.inputTokens,\n completion_tokens: usage.outputTokens,\n total_tokens: usage.totalTokens,\n cached_tokens: usage.cachedInputTokens,\n cache_write_tokens: usage.cachedWriteTokens,\n },\n };\n }\n\n if (toolCalls.length > 0) {\n msg.tool_calls = toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\" as const,\n function: { name: tc.name, arguments: tc.arguments },\n }));\n }\n\n return msg;\n}\n\nfunction resolveCapabilities(provider: ProviderType): ModelCapabilities {\n switch (provider) {\n case \"openai\":\n case \"azure\":\n case \"openai-compatible\":\n return {\n structuredOutput: \"native\",\n strictToolCalling: true,\n streaming: true,\n provider: provider,\n };\n case \"anthropic\":\n return {\n structuredOutput: \"tool_based\",\n strictToolCalling: false,\n streaming: true,\n provider: \"anthropic\",\n };\n case \"bedrock\":\n return {\n structuredOutput: \"tool_based\",\n strictToolCalling: false,\n streaming: false, // streaming uses binary protocol\n provider: \"bedrock\",\n };\n case \"vertex\":\n return {\n structuredOutput: \"native\",\n strictToolCalling: false,\n streaming: true,\n provider: \"google\",\n };\n default:\n return { provider };\n }\n}\n","// ─── Native LLM Providers ───────────────────────────────────────────────────\n// Direct API consumption without LangChain or any framework dependency.\n// Unified request/response schema with per-provider wire format conversion.\n\n// Types\nexport type {\n // Message types\n MessageRole,\n TextContent,\n ImageContent,\n ContentPart,\n ToolCall,\n UnifiedMessage,\n ToolDefinition,\n // Request / Response\n ChatCompletionRequest,\n ChatCompletionResponse,\n ChatCompletionChunk,\n TokenUsage,\n FinishReason,\n // Provider configs\n ProviderConfig,\n ProviderType,\n OpenAIProviderConfig,\n AnthropicProviderConfig,\n AzureProviderConfig,\n OpenAICompatibleProviderConfig,\n BedrockProviderConfig,\n VertexProviderConfig,\n} from \"./types.js\";\n\nexport { ProviderError, emptyUsage } from \"./types.js\";\n\n// Base\nexport { BaseProvider } from \"./base.js\";\n\n// Providers\nexport { OpenAIProvider } from \"./openai.js\";\nexport { AnthropicProvider } from \"./anthropic.js\";\nexport { AzureProvider } from \"./azure.js\";\nexport { OpenAICompatibleProvider } from \"./openaiCompatible.js\";\nexport { BedrockProvider } from \"./bedrock.js\";\nexport { VertexProvider } from \"./vertex.js\";\n\n// Adapter\nexport { fromNativeProvider, type NativeModelOptions } from \"./adapter.js\";\n\n// Factory\nimport type { ProviderConfig } from \"./types.js\";\nimport type { BaseProvider } from \"./base.js\";\nimport { OpenAIProvider } from \"./openai.js\";\nimport { AnthropicProvider } from \"./anthropic.js\";\nimport { AzureProvider } from \"./azure.js\";\nimport { OpenAICompatibleProvider } from \"./openaiCompatible.js\";\nimport { BedrockProvider } from \"./bedrock.js\";\nimport { VertexProvider } from \"./vertex.js\";\n\n/**\n * Factory function to create a provider from a config object.\n *\n * @example\n * ```ts\n * const provider = createProvider({\n * provider: \"openai\",\n * apiKey: process.env.OPENAI_API_KEY!,\n * });\n *\n * // Direct usage\n * const response = await provider.complete({\n * model: \"gpt-4o\",\n * messages: [{ role: \"user\", content: \"Hello!\" }],\n * });\n *\n * // Or wrap as BaseChatModel for agent-sdk\n * import { fromNativeProvider } from \"./adapter\";\n * const model = fromNativeProvider(provider, { model: \"gpt-4o\" });\n * const agent = createSmartAgent({ model, tools: [...] });\n * ```\n */\nexport function createProvider(config: ProviderConfig): BaseProvider {\n switch (config.provider) {\n case \"openai\":\n return new OpenAIProvider(config);\n case \"anthropic\":\n return new AnthropicProvider(config);\n case \"azure\":\n return new AzureProvider(config);\n case \"openai-compatible\":\n return new OpenAICompatibleProvider(config);\n case \"bedrock\":\n return new BedrockProvider(config);\n case \"vertex\":\n return new VertexProvider(config);\n default:\n throw new Error(`Unknown provider: ${(config as any).provider}`);\n }\n}\n"]}