@ddlqhd/agent-sdk 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/{chunk-NDSL7NPN.js → chunk-742JTNYI.js} +224 -19
- package/dist/chunk-742JTNYI.js.map +1 -0
- package/dist/{chunk-5QMA2YBY.cjs → chunk-AJD3DTL7.cjs} +57 -28
- package/dist/chunk-AJD3DTL7.cjs.map +1 -0
- package/dist/{chunk-X35MHWXE.cjs → chunk-DQFTAD3I.cjs} +231 -24
- package/dist/chunk-DQFTAD3I.cjs.map +1 -0
- package/dist/{chunk-Q3SOMX26.js → chunk-DXMVWGLJ.js} +52 -25
- package/dist/chunk-DXMVWGLJ.js.map +1 -0
- package/dist/chunk-LOYIGOBZ.js +54 -0
- package/dist/chunk-LOYIGOBZ.js.map +1 -0
- package/dist/chunk-OZO7D77N.cjs +59 -0
- package/dist/chunk-OZO7D77N.cjs.map +1 -0
- package/dist/{chunk-JF5AJQMU.cjs → chunk-Q3L4GIBG.cjs} +211 -58
- package/dist/chunk-Q3L4GIBG.cjs.map +1 -0
- package/dist/{chunk-OHXW2YM6.js → chunk-THKEF32L.js} +210 -57
- package/dist/chunk-THKEF32L.js.map +1 -0
- package/dist/cli/index.cjs +36 -37
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +11 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/{index-DPsZ1zat.d.ts → index-DGPDMbW5.d.cts} +8 -21
- package/dist/{index-RTPmFjMp.d.cts → index-nEfayAzD.d.ts} +8 -21
- package/dist/index.cjs +91 -79
- package/dist/index.d.cts +26 -6
- package/dist/index.d.ts +26 -6
- package/dist/index.js +4 -4
- package/dist/models/index.cjs +15 -15
- package/dist/models/index.d.cts +50 -6
- package/dist/models/index.d.ts +50 -6
- package/dist/models/index.js +2 -2
- package/dist/tools/index.cjs +51 -51
- package/dist/tools/index.d.cts +3 -3
- package/dist/tools/index.d.ts +3 -3
- package/dist/tools/index.js +2 -2
- package/dist/{types-C0aX_Qdp.d.cts → types-BLf9IqRs.d.cts} +34 -49
- package/dist/{types-C0aX_Qdp.d.ts → types-BLf9IqRs.d.ts} +34 -49
- package/package.json +15 -4
- package/dist/chunk-5QMA2YBY.cjs.map +0 -1
- package/dist/chunk-CNSGZVRN.cjs +0 -152
- package/dist/chunk-CNSGZVRN.cjs.map +0 -1
- package/dist/chunk-JF5AJQMU.cjs.map +0 -1
- package/dist/chunk-NDSL7NPN.js.map +0 -1
- package/dist/chunk-OHXW2YM6.js.map +0 -1
- package/dist/chunk-Q3SOMX26.js.map +0 -1
- package/dist/chunk-WH3APNQ5.js +0 -147
- package/dist/chunk-WH3APNQ5.js.map +0 -1
- package/dist/chunk-X35MHWXE.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/models/openai.ts","../src/models/anthropic.ts","../src/models/ollama.ts","../src/models/index.ts"],"names":[],"mappings":";;;;AAWA,IAAM,mBAAA,GAAyD;AAAA,EAC7D,QAAA,EAAU,EAAE,aAAA,EAAe,KAAA,EAAS,iBAAiB,KAAA,EAAO;AAAA,EAC5D,aAAA,EAAe,EAAE,aAAA,EAAe,KAAA,EAAS,iBAAiB,KAAA,EAAO;AAAA,EACjE,aAAA,EAAe,EAAE,aAAA,EAAe,KAAA,EAAS,iBAAiB,IAAA,EAAM;AAAA,EAChE,OAAA,EAAS,EAAE,aAAA,EAAe,IAAA,EAAO,iBAAiB,IAAA,EAAM;AAAA,EACxD,eAAA,EAAiB,EAAE,aAAA,EAAe,KAAA,EAAQ,iBAAiB,IAAA;AAC7D,CAAA;AAiBO,IAAM,aAAA,GAAN,cAA4B,gBAAA,CAAiB;AAAA,EACzC,IAAA;AAAA,EACD,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAuB,EAAC,EAAG;AACrC,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,IAAI,cAAA,IAAkB,EAAA;AAC7D,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,OAAA,CAAQ,IAAI,eAAA,IAAmB,2BAAA;AAChE,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAAS,QAAA;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,YAAA,IAAgB,OAAA,CAAQ,GAAA,CAAI,aAAA;AAEvD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,MAAM,+FAA+F,CAAA;AAAA,IACjH;AAEA,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA,OAAA,EAAU,IAAA,CAAK,KAAK,CAAA,CAAA;AAGhC,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,YAAA,IACtB,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,IAC9B,EAAE,aAAA,EAAe,KAAA,EAAS,eAAA,EAAiB,IAAA,EAAM;AAAA,EACxD;AAAA,EAEA,OAAO,OAAO,MAAA,EAAiD;AAC7D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,IAAI,CAAA;AAC/C,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,mBAAA,EAAqB,IAAA,EAAM,OAAO,MAAM,CAAA;AAE1E,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,SAAA,EAAU;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,eAAA,GAA0E,IAAA;AAE9E,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,IAAI,MAAA,CAAO,QAAQ,OAAA,EAAS;AAC1B,UAAA,MAAA,CAAO,MAAA,EAAO;AACd,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,cAAA,EAAgB;AAC5C,UAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAEnC,UAAA,IAAI;AACF,YAAA,MAAM,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA;AACxC,YAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,YAAA,IAAI,CAAC,MAAA,EAAQ;AACb,YAAA,MAAM,MAAM,MAAA,CAAO,sBAAA,GAAyB,EAAE,WAAA,EAAa,IAAA,KAAoB,EAAC;AAGhF,YAAA,IAAI,MAAA,CAAO,OAAO,OAAA,EAAS;AACzB,cAAA,MAAM,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,OAAO,KAAA,CAAM,OAAA,EAAS,GAAG,GAAA,EAAI;AAAA,YAC9D;AAGA,YAAA,IAAI,MAAA,CAAO,OAAO,UAAA,EAAY;AAC5B,cAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,UAAA,EAAY;AAC9C,gBAAA,IAAI,QAAA,CAAS,UAAU,KAAA,CAAA,EAAW;AAEhC,kBAAA,IAAI,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,QAAA,EAAU,IAAA,EAAM;AAC1C,oBAAA,IAAI,eAAA,EAAiB;AACnB,sBAAA,MAAM;AAAA,wBACJ,IAAA,EAAM,WAAA;AAAA,wBACN,QAAA,EAAU;AAAA,0BACR,IAAI,eAAA,CAAgB,EAAA;AAAA,0BACpB,MAAM,eAAA,CAAgB,IAAA;AAAA,0BACtB,SAAA,EAAW,IAAA,CAAK,aAAA,CAAc,eAAA,CAAgB,SAAS;AAAA,yBACzD;AAAA,wBACA,GAAG;AAAA,uBACL;AAAA,oBACF;AACA,oBAAA,eAAA,GAAkB;AAAA,sBAChB,IAAI,QAAA,CAAS,EAAA;AAAA,sBACb,IAAA,EAAM,SAAS,QAAA,CAAS,IAAA;AAAA,sBACxB,SAAA,EAAW,QAAA,CAAS,QAAA,CAAS,SAAA,IAAa;AAAA,qBAC5C;AACA,oBAAA,MAAM;AAAA,sBACJ,IAAA,EAAM,iBAAA;AAAA,sBACN,OAAA,EAAS,SAAS,QAAA,CAAS,IAAA;AAAA,sBAC3B,YAAY,QAAA,CAAS,EAAA;AAAA,sBACrB,GAAG;AAAA,qBACL;AAAA,kBACF,CAAA,MAAA,IAAW,QAAA,CAAS,QAAA,EAAU,SAAA,IAAa,eAAA,EAAiB;AAC1D,oBAAA,eAAA,CAAgB,SAAA,IAAa,SAAS,QAAA,CAAS,SAAA;AAC/C,oBAAA,MAAM;AAAA,sBACJ,IAAA,EAAM,iBAAA;AAAA,sBACN,OAAA,EAAS,SAAS,QAAA,CAAS,SAAA;AAAA,sBAC3B,YAAY,eAAA,CAAgB,EAAA;AAAA,sBAC5B,GAAG;AAAA,qBACL;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAGA,YAAA,IAAI,MAAA,CAAO,aAAA,KAAkB,YAAA,IAAgB,eAAA,EAAiB;AAC5D,cAAA,MAAM;AAAA,gBACJ,IAAA,EAAM,WAAA;AAAA,gBACN,QAAA,EAAU;AAAA,kBACR,IAAI,eAAA,CAAgB,EAAA;AAAA,kBACpB,MAAM,eAAA,CAAgB,IAAA;AAAA,kBACtB,SAAA,EAAW,IAAA,CAAK,aAAA,CAAc,eAAA,CAAgB,SAAS;AAAA,iBACzD;AAAA,gBACA,GAAG;AAAA,eACL;AACA,cAAA,eAAA,GAAkB,IAAA;AAAA,YACpB;AAGA,YAAA,IAAI,KAAK,KAAA,EAAO;AACd,cAAA,MAAM;AAAA,gBACJ,IAAA,EAAM,UAAA;AAAA,gBACN,UAAA,EAAY,QAAA;AAAA,gBACZ,QAAA,EAAU;AAAA,kBACR,KAAA,EAAO;AAAA,oBACL,YAAA,EAAc,KAAK,KAAA,CAAM,aAAA;AAAA,oBACzB,gBAAA,EAAkB,KAAK,KAAA,CAAM,iBAAA;AAAA,oBAC7B,WAAA,EAAa,KAAK,KAAA,CAAM;AAAA;AAC1B,iBACF;AAAA,gBACA,GAAG;AAAA,eACL;AAAA,YACF;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,MAAM;AAAA,UACJ,IAAA,EAAM,WAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,IAAI,eAAA,CAAgB,EAAA;AAAA,YACpB,MAAM,eAAA,CAAgB,IAAA;AAAA,YACtB,SAAA,EAAW,IAAA,CAAK,aAAA,CAAc,eAAA,CAAgB,SAAS;AAAA,WACzD;AAAA,UACA,GAAI,MAAA,CAAO,sBAAA,GAAyB,EAAE,WAAA,EAAa,EAAE,QAAA,EAAU,IAAA,EAAK,EAAE,GAAI;AAAC,SAC7E;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,IACvB,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAA,EAAgD;AAC7D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,KAAK,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,qBAAqB,IAAI,CAAA;AAE3D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,MAAA,GAA2B;AAAA,MAC/B,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,OAAA,IAAW;AAAA,KACtC;AAGA,IAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAC9B,MAAA,MAAA,CAAO,YAAY,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,MAAa;AAAA,QAC7D,IAAI,EAAA,CAAG,EAAA;AAAA,QACP,IAAA,EAAM,GAAG,QAAA,CAAS,IAAA;AAAA,QAClB,SAAA,EAAW,IAAA,CAAK,aAAA,CAAc,EAAA,CAAG,SAAS,SAAS;AAAA,OACrD,CAAE,CAAA;AAAA,IACJ;AAGA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACb,YAAA,EAAc,KAAK,KAAA,CAAM,aAAA;AAAA,QACzB,gBAAA,EAAkB,KAAK,KAAA,CAAM,iBAAA;AAAA,QAC7B,WAAA,EAAa,KAAK,KAAA,CAAM;AAAA,OAC1B;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,gBAAA,CAAiB,QAAqB,MAAA,EAA0B;AACtE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AACvD,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAI,MAAA,IAAU,EAAE,gBAAgB,EAAE,aAAA,EAAe,MAAK,EAAE;AAAA,MACxD,GAAI,MAAA,CAAO,WAAA,KAAgB,UAAa,EAAE,WAAA,EAAa,OAAO,WAAA,EAAY;AAAA,MAC1E,GAAI,MAAA,CAAO,SAAA,KAAc,UAAa,EAAE,UAAA,EAAY,OAAO,SAAA,EAAU;AAAA,MACrE,GAAI,MAAA,CAAO,aAAA,IAAiB,EAAE,IAAA,EAAM,OAAO,aAAA;AAAc,KAC3D;AAGA,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA,CAAE,IAAI,CAAA,IAAA,MAAS;AAAA,QACzD,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,OACZ,CAAE,CAAA;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAc,KAAA,CAAM,IAAA,EAAc,IAAA,EAAe,MAAA,EAAyC;AACxF,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,eAAA,EAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AAAA,KACxC;AAEA,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,OAAA,CAAQ,qBAAqB,IAAI,IAAA,CAAK,YAAA;AAAA,IACxC;AAEA,IAAA,OAAO,WAAW,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,cAAc,GAAA,EAAsB;AAC1C,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AACF;AAKO,SAAS,aAAa,MAAA,EAAsC;AACjE,EAAA,OAAO,IAAI,cAAc,MAAM,CAAA;AACjC;;;AC/RA,IAAM,sBAAA,GAA4D;AAAA,EAChE,0BAAA,EAA4B,EAAE,aAAA,EAAe,GAAA,EAAS,iBAAiB,KAAA,EAAO;AAAA,EAC9E,cAAA,EAAgB,EAAE,aAAA,EAAe,GAAA,EAAS,iBAAiB,IAAA,EAAM;AAAA,EACjE,4BAAA,EAA8B,EAAE,aAAA,EAAe,GAAA,EAAS,iBAAiB,IAAA,EAAM;AAAA,EAC/E,yBAAA,EAA2B,EAAE,aAAA,EAAe,GAAA,EAAS,iBAAiB,IAAA;AACxE,CAAA;AAiBO,IAAM,gBAAA,GAAN,cAA+B,gBAAA,CAAiB;AAAA,EAC5C,IAAA;AAAA,EACD,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAA0B,EAAC,EAAG;AACxC,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,OAAA,CAAQ,IAAI,iBAAA,IAAqB,EAAA;AAChE,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,OAAA,CAAQ,IAAI,kBAAA,IAAsB,2BAAA;AACnE,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAAS,0BAAA;AAC7B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,YAAA;AAEjC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,MAAM,qGAAqG,CAAA;AAAA,IACvH;AAEA,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA,UAAA,EAAa,IAAA,CAAK,KAAK,CAAA,CAAA;AAGnC,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,YAAA,IACtB,sBAAA,CAAuB,IAAA,CAAK,KAAK,CAAA,IACjC,EAAE,aAAA,EAAe,GAAA,EAAS,eAAA,EAAiB,IAAA,EAAM;AAAA,EACxD;AAAA,EAEA,OAAO,OAAO,MAAA,EAAiD;AAC7D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,IAAI,CAAA;AAC/C,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,cAAA,EAAgB,IAAA,EAAM,OAAO,MAAM,CAAA;AAErE,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,SAAA,EAAU;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,eAAA,GAAsE,IAAA;AAC1E,IAAA,IAAI,oBAAA,GAAsD,IAAA;AAE1D,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,IAAI,MAAA,CAAO,QAAQ,OAAA,EAAS;AAC1B,UAAA,MAAA,CAAO,MAAA,EAAO;AACd,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AAE9C,UAAA,IAAI,SAAA,GAAY,CAAA;AAChB,UAAA,IAAI,QAAQ,MAAA,GAAS,CAAA,IAAK,OAAA,CAAQ,CAAC,MAAM,GAAA,EAAK;AAC5C,YAAA,SAAA,GAAY,CAAA;AAAA,UACd;AACA,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA;AAEvC,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC/B,YAAA,MAAM,MAAM,MAAA,CAAO,sBAAA,GAAyB,EAAE,WAAA,EAAa,IAAA,KAAoB,EAAC;AAEhF,YAAA,QAAQ,KAAK,IAAA;AAAM,cACjB,KAAK,qBAAA;AACH,gBAAA,IAAI,IAAA,CAAK,aAAA,EAAe,IAAA,KAAS,UAAA,EAAY;AAC3C,kBAAA,eAAA,GAAkB;AAAA,oBAChB,EAAA,EAAI,KAAK,aAAA,CAAc,EAAA;AAAA,oBACvB,IAAA,EAAM,KAAK,aAAA,CAAc,IAAA;AAAA,oBACzB,KAAA,EAAO;AAAA,mBACT;AACA,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,iBAAA;AAAA,oBACN,QAAA,EAAU;AAAA,sBACR,EAAA,EAAI,KAAK,aAAA,CAAc,EAAA;AAAA,sBACvB,IAAA,EAAM,KAAK,aAAA,CAAc,IAAA;AAAA,sBACzB,WAAW;AAAC,qBACd;AAAA,oBACA,GAAG;AAAA,mBACL;AAAA,gBACF,CAAA,MAAA,IAAW,IAAA,CAAK,aAAA,EAAe,IAAA,KAAS,UAAA,EAAY;AAClD,kBAAA,oBAAA,GAAuB;AAAA,oBACrB,SAAA,EAAW,KAAK,aAAA,CAAc;AAAA,mBAChC;AACA,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,UAAA;AAAA,oBACN,OAAA,EAAS,KAAK,aAAA,CAAc,QAAA;AAAA,oBAC5B,WAAW,oBAAA,CAAqB,SAAA;AAAA,oBAChC,GAAG;AAAA,mBACL;AAAA,gBACF;AACA,gBAAA;AAAA,cAEF,KAAK,qBAAA;AACH,gBAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,KAAS,YAAA,EAAc;AACrC,kBAAA,MAAM,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAS,KAAK,KAAA,CAAM,IAAA,EAAM,GAAG,GAAA,EAAI;AAAA,gBACzD,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,EAAO,IAAA,KAAS,gBAAA,EAAkB;AAChD,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,UAAA;AAAA,oBACN,OAAA,EAAS,KAAK,KAAA,CAAM,QAAA;AAAA,oBACpB,WAAW,oBAAA,EAAsB,SAAA;AAAA,oBACjC,GAAG;AAAA,mBACL;AAAA,gBACF,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,EAAO,IAAA,KAAS,sBAAsB,eAAA,EAAiB;AACrE,kBAAA,eAAA,CAAgB,KAAA,IAAS,KAAK,KAAA,CAAM,YAAA;AACpC,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,iBAAA;AAAA,oBACN,OAAA,EAAS,KAAK,KAAA,CAAM,YAAA;AAAA,oBACpB,YAAY,eAAA,CAAgB,EAAA;AAAA,oBAC5B,GAAG;AAAA,mBACL;AAAA,gBACF;AACA,gBAAA;AAAA,cAEF,KAAK,oBAAA;AACH,gBAAA,IAAI,eAAA,EAAiB;AACnB,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,WAAA;AAAA,oBACN,QAAA,EAAU;AAAA,sBACR,IAAI,eAAA,CAAgB,EAAA;AAAA,sBACpB,MAAM,eAAA,CAAgB,IAAA;AAAA,sBACtB,SAAA,EAAW,IAAA,CAAK,aAAA,CAAc,eAAA,CAAgB,KAAK;AAAA,qBACrD;AAAA,oBACA,GAAG;AAAA,mBACL;AACA,kBAAA,eAAA,GAAkB,IAAA;AAAA,gBACpB;AACA,gBAAA,IAAI,oBAAA,EAAsB;AACxB,kBAAA,oBAAA,GAAuB,IAAA;AAAA,gBACzB;AACA,gBAAA;AAAA,cAEF,KAAK,eAAA;AACH,gBAAA,IAAI,IAAA,CAAK,SAAS,KAAA,EAAO;AACvB,kBAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,CAAQ,KAAA;AAG3B,kBAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,uBAAA,IAA2B,CAAA,CAAA;AACjF,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,UAAA;AAAA,oBACN,UAAA,EAAY,OAAA;AAAA,oBACZ,QAAA,EAAU;AAAA,sBACR,KAAA,EAAO;AAAA,wBACL,YAAA,EAAc,iBAAA;AAAA,wBACd,gBAAA,EAAkB,CAAA;AAAA,wBAClB,WAAA,EAAa,iBAAA;AAAA;AAAA,wBAEb,eAAA,EAAiB,MAAM,uBAAA,IAA2B,CAAA;AAAA,wBAClD,gBAAA,EAAkB,MAAM,2BAAA,IAA+B;AAAA;AACzD,qBACF;AAAA,oBACA,GAAG;AAAA,mBACL;AAAA,gBACF;AACA,gBAAA;AAAA,cAEF,KAAK,eAAA;AACH,gBAAA,IAAI,KAAK,KAAA,EAAO;AACd,kBAAA,MAAM;AAAA,oBACJ,IAAA,EAAM,UAAA;AAAA,oBACN,UAAA,EAAY,QAAA;AAAA,oBACZ,QAAA,EAAU;AAAA,sBACR,KAAA,EAAO;AAAA,wBACL,YAAA,EAAc,CAAA;AAAA,wBACd,gBAAA,EAAkB,KAAK,KAAA,CAAM,aAAA;AAAA,wBAC7B,WAAA,EAAa,KAAK,KAAA,CAAM;AAAA;AAC1B,qBACF;AAAA,oBACA,GAAG;AAAA,mBACL;AAAA,gBACF;AACA,gBAAA;AAAA;AACJ,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,MAAM,MAAA,EAAO;AAAA,IACvB,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAA,EAAgD;AAC7D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,KAAK,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,gBAAgB,IAAI,CAAA;AAEtD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,MAAM,MAAA,GAA2B;AAAA,MAC/B,OAAA,EAAS;AAAA,KACX;AAGA,IAAA,MAAM,YAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG;AACtC,MAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,QAAA,MAAA,CAAO,WAAW,KAAA,CAAM,IAAA;AAAA,MAC1B,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,WAAW,KAAA,CAAM;AAAA,SAClB,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,SAAA,GAAY,SAAA;AAAA,IACrB;AAGA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAGnB,MAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,YAAA,IAAgB,KAAA,CAAM,uBAAA,IAA2B,CAAA,CAAA;AACjF,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACb,YAAA,EAAc,iBAAA;AAAA,QACd,kBAAkB,KAAA,CAAM,aAAA;AAAA,QACxB,WAAA,EAAa,oBAAoB,KAAA,CAAM;AAAA,OACzC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,gBAAA,CAAiB,QAAqB,MAAA,EAA0B;AACtE,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,KAAa,IAAA,CAAK,oBAAA,CAAqB,OAAO,QAAQ,CAAA;AACtE,IAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,0BAAA,CAA2B,QAAQ,CAAA;AAEpE,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAA,EAAY,OAAO,SAAA,IAAa,IAAA;AAAA,MAChC,QAAA,EAAU,mBAAA;AAAA,MACV,MAAA;AAAA,MACA,GAAI,MAAA,IAAU,EAAE,MAAA,EAAO;AAAA,MACvB,GAAI,MAAA,CAAO,WAAA,KAAgB,UAAa,EAAE,WAAA,EAAa,OAAO,WAAA;AAAY,KAC5E;AAGA,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA,CAAE,IAAI,CAAA,IAAA,MAAS;AAAA,QACzD,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,cAAc,IAAA,CAAK;AAAA,OACrB,CAAE,CAAA;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,qBAAqB,QAAA,EAG3B;AACA,IAAA,MAAM,iBAAiB,QAAA,CAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC/D,IAAA,MAAM,gBAAgB,QAAA,CAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAG9D,IAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,MAAA,GAAS,CAAA,GAC3C,cAAA,CAAe,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAiB,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,GACxD,MAAA;AAEJ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,cAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAAA,EAEQ,2BAA2B,QAAA,EAA8C;AAC/E,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,GAAA,KAAO;AACzB,MAAA,MAAM,WAAA,GAAuC;AAAA,QAC3C,IAAA,EAAM,GAAA,CAAI,IAAA,KAAS,WAAA,GAAc,WAAA,GAAc,MAAA;AAAA,QAC/C,SAAS;AAAC,OACZ;AAEA,MAAA,IAAI,OAAO,GAAA,CAAI,OAAA,KAAY,QAAA,EAAU;AACnC,QAAA,WAAA,CAAY,OAAA,GAAU,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,GAAA,CAAI,SAAS,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AAErC,QAAA,MAAM,eAAsB,EAAC;AAC7B,QAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,OAAA,EAAS;AAC9B,UAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,YAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,UACxB,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC/B,YAAA,YAAA,CAAa,KAAK,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAO,IAAA,CAAa,MAAM,CAAA;AAAA,UAC9D,CAAA,MAAO;AACL,YAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,UACxB;AAAA,QACF;AACA,QAAA,WAAA,CAAY,OAAA,GAAU,YAAA;AAGtB,QAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,UAAA,WAAA,CAAY,OAAA,GAAU,EAAA;AAAA,QACxB;AAAA,MACF;AAGA,MAAA,IAAI,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,IAAA,KAAS,WAAA,EAAa;AAC7C,QAAA,KAAA,MAAW,EAAA,IAAM,IAAI,SAAA,EAAW;AAC9B,UAAC,WAAA,CAAY,QAAkB,IAAA,CAAK;AAAA,YAClC,IAAA,EAAM,UAAA;AAAA,YACN,IAAI,EAAA,CAAG,EAAA;AAAA,YACP,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,OAAO,EAAA,CAAG;AAAA,WACX,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,IAAU,GAAA,CAAI,UAAA,EAAY;AACzC,QAAA,WAAA,CAAY,IAAA,GAAO,MAAA;AACnB,QAAA,WAAA,CAAY,UAAU,CAAC;AAAA,UACrB,IAAA,EAAM,aAAA;AAAA,UACN,aAAa,GAAA,CAAI,UAAA;AAAA,UACjB,SAAS,GAAA,CAAI;AAAA,SACd,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,WAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,KAAA,CAAM,IAAA,EAAc,IAAA,EAAe,MAAA,EAAyC;AACxF,IAAA,OAAO,WAAW,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAa,IAAA,CAAK,MAAA;AAAA,QAClB,qBAAqB,IAAA,CAAK;AAAA,OAC5B;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,cAAc,GAAA,EAAsB;AAC1C,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AACF;AAKO,SAAS,gBAAgB,MAAA,EAA4C;AAC1E,EAAA,OAAO,IAAI,iBAAiB,MAAM,CAAA;AACpC;;;AChYA,IAAM,mBAAA,GAAyD;AAAA,EAC7D,cAAA,EAAgB,EAAE,aAAA,EAAe,KAAA,EAAQ,iBAAiB,IAAA,EAAM;AAAA,EAChE,oBAAA,EAAsB,EAAE,aAAA,EAAe,KAAA,EAAS,iBAAiB,KAAA,EAAO;AAAA,EACxE,wBAAA,EAA0B,EAAE,aAAA,EAAe,KAAA,EAAS,iBAAiB,KAAA,EAAO;AAAA,EAC5E,aAAA,EAAe,EAAE,aAAA,EAAe,KAAA,EAAS,iBAAiB,KAAA;AAC5D,CAAA;AAqBO,SAAS,8BAAA,CACd,IAAA,EACA,kBAAA,EACA,cAAA,EACe;AACf,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,MAAM,MAAM,IAAA,CAAK,OAAA;AACjB,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AAEjB,EAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AACrB,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,CAAS,SAAS,CAAA,EAAG;AACvD,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,UAAU,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AACpB,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,SAAS,CAAA,EAAG;AACrD,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,YAAY,GAAA,CAAI,UAAA;AACtB,EAAA,IAAI,SAAA,IAAa,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AACzC,IAAA,KAAA,MAAW,MAAM,SAAA,EAAW;AAC1B,MAAA,MAAM,CAAA,GAAI,EAAA;AACV,MAAA,MAAM,KAAK,CAAA,CAAE,QAAA;AACb,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,WAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACR,IAAI,cAAA,EAAe;AAAA,UACnB,OAAO,OAAO,EAAA,EAAI,SAAS,QAAA,GAAW,EAAA,CAAG,OAAO,EAAA,KAAO,EAAA;AAAA,UACvD,SAAA,EAAW,kBAAA,CAAmB,EAAA,EAAI,SAAS;AAAA;AAC7C,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,gCAAgC,OAAA,EAAyC;AACvF,EAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,OAAA;AACxC,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,GAAG,OAAO,EAAA;AACpC,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAC1B;AAGA,SAAS,sBAAA,CAAuB,SAAiB,KAAA,EAAuB;AACtE,EAAA,OAAO,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,KAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAC9E;AAKO,IAAM,aAAA,GAAN,cAA4B,gBAAA,CAAiB;AAAA,EACzC,IAAA;AAAA,EACD,OAAA;AAAA,EACA,KAAA;AAAA,EACS,KAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,GAAuB,EAAC,EAAG;AACrC,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,OAAA,CAAQ,IAAI,eAAA,IAAmB,wBAAA;AAChE,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAAS,cAAA;AAC7B,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AAEpB,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA,OAAA,EAAU,IAAA,CAAK,KAAK,CAAA,CAAA;AAGhC,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA,CAAO,YAAA,IACtB,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,IAC9B,EAAE,aAAA,EAAe,IAAA,EAAO,eAAA,EAAiB,IAAA,EAAM;AAAA,EACtD;AAAA,EAEA,OAAO,OAAO,MAAA,EAAiD;AAC7D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,IAAI,CAAA;AAC/C,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,MAAM,WAAA,EAAa,IAAA,EAAM,OAAO,MAAM,CAAA;AAElE,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,EAAM,SAAA,EAAU;AACxC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,MAAM,iBAAiB,MAAc,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAEnG,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,IAAI,MAAA,CAAO,QAAQ,OAAA,EAAS;AAC1B,UAAA,MAAA,CAAO,MAAA,EAAO;AACd,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,EAAS;AAEd,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC/B,YAAA,MAAM,MAAM,MAAA,CAAO,sBAAA,GAAyB,EAAE,WAAA,EAAa,IAAA,KAAoB,EAAC;AAEhF,YAAA,MAAM,aAAA,GAAgB,8BAAA;AAAA,cACpB,IAAA;AAAA,cACA,CAAC,IAAA,KAAS,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAA;AAAA,cACtC;AAAA,aACF;AACA,YAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,cAAA,MAAM,EAAE,GAAG,KAAA,EAAO,GAAG,GAAA,EAAI;AAAA,YAC3B;AAGA,YAAA,IAAI,KAAK,IAAA,EAAM;AACb,cAAA,IAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,UAAA,EAAY;AAC7C,gBAAA,MAAM;AAAA,kBACJ,IAAA,EAAM,UAAA;AAAA,kBACN,UAAA,EAAY,QAAA;AAAA,kBACZ,QAAA,EAAU;AAAA,oBACR,KAAA,EAAO;AAAA,sBACL,YAAA,EAAe,KAAK,iBAAA,IAAgC,CAAA;AAAA,sBACpD,gBAAA,EAAmB,KAAK,UAAA,IAAyB,CAAA;AAAA,sBACjD,WAAA,EAAA,CACI,IAAA,CAAK,iBAAA,IAAgC,CAAA,KAAO,KAAK,UAAA,IAAyB,CAAA;AAAA;AAChF,mBACF;AAAA,kBACA,GAAG;AAAA,iBACL;AAAA,cACF;AACA,cAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAG,GAAA,EAAI;AAAA,YAC/B;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAA,EAAgD;AAC7D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,KAAK,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,aAAa,IAAI,CAAA;AAEnD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,MAAM,MAAA,GAA2B;AAAA,MAC/B,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,OAAA,IAAW;AAAA,KACpC;AAEA,IAAA,MAAM,QAAA,GAAW,KAAK,OAAA,EAAS,QAAA;AAC/B,IAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,CAAS,SAAS,CAAA,EAAG;AACvD,MAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAAA,IACpB;AAGA,IAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,MAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,MAAA,MAAA,CAAO,YAAY,IAAA,CAAK,OAAA,CAAQ,WAAW,GAAA,CAAI,CAAC,IAAS,KAAA,MAAmB;AAAA,QAC1E,EAAA,EAAI,sBAAA,CAAuB,OAAA,EAAS,KAAK,CAAA;AAAA,QACzC,IAAA,EAAM,EAAA,CAAG,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,QAC3B,SAAA,EAAW,IAAA,CAAK,kBAAA,CAAmB,EAAA,CAAG,UAAU,SAAS;AAAA,OAC3D,CAAE,CAAA;AAAA,IACJ;AAGA,IAAA,IAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,UAAA,EAAY;AAC7C,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACb,YAAA,EAAc,KAAK,iBAAA,IAAqB,CAAA;AAAA,QACxC,gBAAA,EAAkB,KAAK,UAAA,IAAc,CAAA;AAAA,QACrC,WAAA,EAAA,CAAc,IAAA,CAAK,iBAAA,IAAqB,CAAA,KAAM,KAAK,UAAA,IAAc,CAAA;AAAA,OACnE;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,mBAAmB,IAAA,EAAwC;AACjE,IAAA,IAAI,IAAA,IAAQ,IAAA,EAAM,OAAO,EAAC;AAC1B,IAAA,IAAI,OAAO,SAAS,QAAA,IAAY,CAAC,MAAM,OAAA,CAAQ,IAAI,GAAG,OAAO,IAAA;AAC7D,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,QAAA,OAAO,OAAO,WAAW,QAAA,IAAY,MAAA,KAAW,OAAO,MAAA,GAAS,EAAE,OAAO,MAAA,EAAO;AAAA,MAClF,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAMmB,kBAAkB,QAAA,EAA8C;AACjF,IAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAoB;AACjD,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,WAAA,IAAe,GAAA,CAAI,SAAA,EAAW;AAC7C,QAAA,KAAA,MAAW,EAAA,IAAM,IAAI,SAAA,EAAW;AAC9B,UAAA,gBAAA,CAAiB,GAAA,CAAI,EAAA,CAAG,EAAA,EAAI,EAAA,CAAG,IAAI,CAAA;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,GAAA,KAAO;AACzB,MAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,IAAU,GAAA,CAAI,UAAA,EAAY;AACzC,QAAA,MAAM,WAAW,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,UAAU,KAAK,GAAA,CAAI,IAAA;AAC7D,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS,+BAAA,CAAgC,GAAA,CAAI,OAAiC,CAAA;AAAA,UAC9E,GAAI,QAAA,IAAY,EAAE,SAAA,EAAW,QAAA;AAAS,SACxC;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,OAAA,EAAS,+BAAA,CAAgC,GAAA,CAAI,OAAO,CAAA;AAAA,QACpD,GAAI,IAAI,SAAA,IAAa,EAAE,YAAY,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,EAAA,MAAO;AAAA,UAC1D,IAAI,EAAA,CAAG,EAAA;AAAA,UACP,IAAA,EAAM,UAAA;AAAA,UACN,QAAA,EAAU;AAAA,YACR,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,SAAA,EAAW,IAAA,CAAK,kBAAA,CAAmB,EAAA,CAAG,SAAS;AAAA;AACjD,UACA,CAAA;AAAC,OACL;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,gBAAA,CAAiB,QAAqB,MAAA,EAA0B;AACtE,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAA,EAAU,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,QAAQ,CAAA;AAAA,MAChD,MAAA;AAAA,MACA,GAAI,MAAA,CAAO,WAAA,KAAgB,MAAA,IAAa,EAAE,SAAS,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY;AAAE,KACzF;AAEA,IAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAAA,IACpB;AAIA,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA,CAAE,IAAI,CAAA,IAAA,MAAS;AAAA,QACzD,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,OACZ,CAAE,CAAA;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAc,KAAA,CAAM,IAAA,EAAc,IAAA,EAAe,MAAA,EAAyC;AACxF,IAAA,OAAO,WAAW,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAAA,EACH;AACF;AAKO,SAAS,aAAa,MAAA,EAAsC;AACjE,EAAA,OAAO,IAAI,cAAc,MAAM,CAAA;AACjC;;;ACtTO,SAAS,YAAY,MAAA,EAAyC;AACnE,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,aAAA,CAAc;AAAA,QACvB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH,KAAK,WAAA;AACH,MAAA,OAAO,IAAI,gBAAA,CAAiB;AAAA,QAC1B,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH,KAAK,QAAA;AACH,MAAA,OAAO,IAAI,aAAA,CAAc;AAAA,QACvB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAAA;AAElE","file":"chunk-NDSL7NPN.js","sourcesContent":["import type {\n ModelParams,\n ModelCapabilities,\n StreamChunk,\n CompletionResult\n} from '../core/types.js';\nimport { BaseModelAdapter, toolsToModelSchema } from './base.js';\n\n/**\n * OpenAI 模型能力映射\n */\nconst OPENAI_CAPABILITIES: Record<string, ModelCapabilities> = {\n 'gpt-4o': { contextLength: 128_000, maxOutputTokens: 16_384 },\n 'gpt-4o-mini': { contextLength: 128_000, maxOutputTokens: 16_384 },\n 'gpt-4-turbo': { contextLength: 128_000, maxOutputTokens: 4_096 },\n 'gpt-4': { contextLength: 8_192, maxOutputTokens: 4_096 },\n 'gpt-3.5-turbo': { contextLength: 16_385, maxOutputTokens: 4_096 },\n};\n\n/**\n * OpenAI 配置\n */\nexport interface OpenAIConfig {\n apiKey?: string;\n baseUrl?: string;\n model?: string;\n organization?: string;\n /** 自定义模型能力 (覆盖默认值) */\n capabilities?: ModelCapabilities;\n}\n\n/**\n * OpenAI 模型适配器\n */\nexport class OpenAIAdapter extends BaseModelAdapter {\n readonly name: string;\n private apiKey: string;\n private baseUrl: string;\n private model: string;\n private organization?: string;\n\n constructor(config: OpenAIConfig = {}) {\n super();\n this.apiKey = config.apiKey || process.env.OPENAI_API_KEY || '';\n this.baseUrl = config.baseUrl || process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1';\n this.model = config.model || 'gpt-4o';\n this.organization = config.organization || process.env.OPENAI_ORG_ID;\n\n if (!this.apiKey) {\n throw new Error('OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass apiKey in config.');\n }\n\n this.name = `openai/${this.model}`;\n\n // 设置模型能力\n this.capabilities = config.capabilities\n ?? OPENAI_CAPABILITIES[this.model]\n ?? { contextLength: 128_000, maxOutputTokens: 4_096 };\n }\n\n async *stream(params: ModelParams): AsyncIterable<StreamChunk> {\n const body = this.buildRequestBody(params, true);\n const response = await this.fetch('/chat/completions', body, params.signal);\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`OpenAI API error: ${response.status} - ${error}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let currentToolCall: { id: string; name: string; arguments: string } | null = null;\n\n try {\n while (true) {\n if (params.signal?.aborted) {\n reader.cancel();\n break;\n }\n\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n if (!trimmed.startsWith('data: ')) continue;\n\n try {\n const data = JSON.parse(trimmed.slice(6));\n const choice = data.choices?.[0];\n if (!choice) continue;\n const raw = params.includeRawStreamEvents ? { providerRaw: data as unknown } : {};\n\n // 处理内容增量\n if (choice.delta?.content) {\n yield { type: 'text', content: choice.delta.content, ...raw };\n }\n\n // 处理工具调用\n if (choice.delta?.tool_calls) {\n for (const toolCall of choice.delta.tool_calls) {\n if (toolCall.index !== undefined) {\n // 新的工具调用开始\n if (toolCall.id && toolCall.function?.name) {\n if (currentToolCall) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: currentToolCall.id,\n name: currentToolCall.name,\n arguments: this.safeParseJSON(currentToolCall.arguments)\n },\n ...raw\n };\n }\n currentToolCall = {\n id: toolCall.id,\n name: toolCall.function.name,\n arguments: toolCall.function.arguments || ''\n };\n yield {\n type: 'tool_call_start',\n content: toolCall.function.name,\n toolCallId: toolCall.id,\n ...raw\n };\n } else if (toolCall.function?.arguments && currentToolCall) {\n currentToolCall.arguments += toolCall.function.arguments;\n yield {\n type: 'tool_call_delta',\n content: toolCall.function.arguments,\n toolCallId: currentToolCall.id,\n ...raw\n };\n }\n }\n }\n }\n\n // 处理完成\n if (choice.finish_reason === 'tool_calls' && currentToolCall) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: currentToolCall.id,\n name: currentToolCall.name,\n arguments: this.safeParseJSON(currentToolCall.arguments)\n },\n ...raw\n };\n currentToolCall = null;\n }\n\n // 处理元数据\n if (data.usage) {\n yield {\n type: 'metadata',\n usagePhase: 'output',\n metadata: {\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens\n }\n },\n ...raw\n };\n }\n } catch {\n // 跳过解析错误\n }\n }\n }\n\n // 处理剩余的工具调用\n if (currentToolCall) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: currentToolCall.id,\n name: currentToolCall.name,\n arguments: this.safeParseJSON(currentToolCall.arguments)\n },\n ...(params.includeRawStreamEvents ? { providerRaw: { trailing: true } } : {})\n };\n }\n\n yield { type: 'done' };\n } finally {\n reader.releaseLock();\n }\n }\n\n async complete(params: ModelParams): Promise<CompletionResult> {\n const body = this.buildRequestBody(params, false);\n const response = await this.fetch('/chat/completions', body);\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`OpenAI API error: ${response.status} - ${error}`);\n }\n\n const data = await response.json() as any;\n const choice = data.choices?.[0];\n if (!choice) {\n throw new Error('No completion choice returned');\n }\n\n const result: CompletionResult = {\n content: choice.message?.content || ''\n };\n\n // 处理工具调用\n if (choice.message?.tool_calls) {\n result.toolCalls = choice.message.tool_calls.map((tc: any) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: this.safeParseJSON(tc.function.arguments)\n }));\n }\n\n // 处理使用统计\n if (data.usage) {\n result.usage = {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens\n };\n }\n\n return result;\n }\n\n private buildRequestBody(params: ModelParams, stream: boolean): unknown {\n const messages = this.transformMessages(params.messages);\n const body: Record<string, unknown> = {\n model: this.model,\n messages,\n stream,\n ...(stream && { stream_options: { include_usage: true } }),\n ...(params.temperature !== undefined && { temperature: params.temperature }),\n ...(params.maxTokens !== undefined && { max_tokens: params.maxTokens }),\n ...(params.stopSequences && { stop: params.stopSequences })\n };\n\n // 添加工具\n if (params.tools && params.tools.length > 0) {\n body.tools = toolsToModelSchema(params.tools).map(tool => ({\n type: 'function',\n function: tool\n }));\n }\n\n return body;\n }\n\n private async fetch(path: string, body: unknown, signal?: AbortSignal): Promise<Response> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`\n };\n\n if (this.organization) {\n headers['OpenAI-Organization'] = this.organization;\n }\n\n return globalThis.fetch(`${this.baseUrl}${path}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal\n });\n }\n\n private safeParseJSON(str: string): unknown {\n try {\n return JSON.parse(str);\n } catch {\n return str;\n }\n }\n}\n\n/**\n * 创建 OpenAI 适配器\n */\nexport function createOpenAI(config?: OpenAIConfig): OpenAIAdapter {\n return new OpenAIAdapter(config);\n}\n","import type {\n ModelParams,\n ModelCapabilities,\n StreamChunk,\n CompletionResult\n} from '../core/types.js';\nimport { BaseModelAdapter, toolsToModelSchema } from './base.js';\n\n/**\n * Anthropic 模型能力映射\n */\nconst ANTHROPIC_CAPABILITIES: Record<string, ModelCapabilities> = {\n 'claude-sonnet-4-20250514': { contextLength: 200_000, maxOutputTokens: 16_384 },\n 'claude-haiku': { contextLength: 200_000, maxOutputTokens: 8_192 },\n 'claude-3-5-sonnet-20241022': { contextLength: 200_000, maxOutputTokens: 8_192 },\n 'claude-3-haiku-20240307': { contextLength: 200_000, maxOutputTokens: 4_096 },\n};\n\n/**\n * Anthropic 配置\n */\nexport interface AnthropicConfig {\n apiKey?: string;\n baseUrl?: string;\n model?: string;\n version?: string;\n /** 自定义模型能力 (覆盖默认值) */\n capabilities?: ModelCapabilities;\n}\n\n/**\n * Anthropic 模型适配器\n */\nexport class AnthropicAdapter extends BaseModelAdapter {\n readonly name: string;\n private apiKey: string;\n private baseUrl: string;\n private model: string;\n private version: string;\n\n constructor(config: AnthropicConfig = {}) {\n super();\n this.apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY || '';\n this.baseUrl = config.baseUrl || process.env.ANTHROPIC_BASE_URL || 'https://api.anthropic.com';\n this.model = config.model || 'claude-sonnet-4-20250514';\n this.version = config.version || '2023-06-01';\n\n if (!this.apiKey) {\n throw new Error('Anthropic API key is required. Set ANTHROPIC_API_KEY environment variable or pass apiKey in config.');\n }\n\n this.name = `anthropic/${this.model}`;\n\n // 设置模型能力\n this.capabilities = config.capabilities\n ?? ANTHROPIC_CAPABILITIES[this.model]\n ?? { contextLength: 200_000, maxOutputTokens: 4_096 };\n }\n\n async *stream(params: ModelParams): AsyncIterable<StreamChunk> {\n const body = this.buildRequestBody(params, true);\n const response = await this.fetch('/v1/messages', body, params.signal);\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Anthropic API error: ${response.status} - ${error}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let currentToolCall: { id: string; name: string; input: string } | null = null;\n let currentThinkingBlock: { signature?: string } | null = null;\n\n try {\n while (true) {\n if (params.signal?.aborted) {\n reader.cancel();\n break;\n }\n\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith('data:')) continue;\n // 跳过 'data:' 前缀,可能有空格\n let jsonStart = 5;\n if (trimmed.length > 5 && trimmed[5] === ' ') {\n jsonStart = 6;\n }\n const jsonStr = trimmed.slice(jsonStart);\n\n try {\n const data = JSON.parse(jsonStr);\n const raw = params.includeRawStreamEvents ? { providerRaw: data as unknown } : {};\n\n switch (data.type) {\n case 'content_block_start':\n if (data.content_block?.type === 'tool_use') {\n currentToolCall = {\n id: data.content_block.id,\n name: data.content_block.name,\n input: ''\n };\n yield {\n type: 'tool_call_start',\n toolCall: {\n id: data.content_block.id,\n name: data.content_block.name,\n arguments: {}\n },\n ...raw\n };\n } else if (data.content_block?.type === 'thinking') {\n currentThinkingBlock = {\n signature: data.content_block.signature\n };\n yield {\n type: 'thinking',\n content: data.content_block.thinking,\n signature: currentThinkingBlock.signature,\n ...raw\n };\n }\n break;\n\n case 'content_block_delta':\n if (data.delta?.type === 'text_delta') {\n yield { type: 'text', content: data.delta.text, ...raw };\n } else if (data.delta?.type === 'thinking_delta') {\n yield {\n type: 'thinking',\n content: data.delta.thinking,\n signature: currentThinkingBlock?.signature,\n ...raw\n };\n } else if (data.delta?.type === 'input_json_delta' && currentToolCall) {\n currentToolCall.input += data.delta.partial_json;\n yield {\n type: 'tool_call_delta',\n content: data.delta.partial_json,\n toolCallId: currentToolCall.id,\n ...raw\n };\n }\n break;\n\n case 'content_block_stop':\n if (currentToolCall) {\n yield {\n type: 'tool_call',\n toolCall: {\n id: currentToolCall.id,\n name: currentToolCall.name,\n arguments: this.safeParseJSON(currentToolCall.input)\n },\n ...raw\n };\n currentToolCall = null;\n }\n if (currentThinkingBlock) {\n currentThinkingBlock = null;\n }\n break;\n\n case 'message_start':\n if (data.message?.usage) {\n const usage = data.message.usage;\n // Anthropic 的 input_tokens 已扣除缓存命中的部分\n // 完整的上下文大小 = input_tokens + cache_read_input_tokens\n const actualInputTokens = usage.input_tokens + (usage.cache_read_input_tokens || 0);\n yield {\n type: 'metadata',\n usagePhase: 'input',\n metadata: {\n usage: {\n promptTokens: actualInputTokens,\n completionTokens: 0,\n totalTokens: actualInputTokens,\n // 传递缓存信息\n cacheReadTokens: usage.cache_read_input_tokens || 0,\n cacheWriteTokens: usage.cache_creation_input_tokens || 0\n }\n },\n ...raw\n };\n }\n break;\n\n case 'message_delta':\n if (data.usage) {\n yield {\n type: 'metadata',\n usagePhase: 'output',\n metadata: {\n usage: {\n promptTokens: 0,\n completionTokens: data.usage.output_tokens,\n totalTokens: data.usage.output_tokens\n }\n },\n ...raw\n };\n }\n break;\n }\n } catch {\n // 跳过解析错误\n }\n }\n }\n\n yield { type: 'done' };\n } finally {\n reader.releaseLock();\n }\n }\n\n async complete(params: ModelParams): Promise<CompletionResult> {\n const body = this.buildRequestBody(params, false);\n const response = await this.fetch('/v1/messages', body);\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Anthropic API error: ${response.status} - ${error}`);\n }\n\n const data = await response.json() as any;\n const result: CompletionResult = {\n content: ''\n };\n\n // 处理内容块\n const toolCalls: any[] = [];\n for (const block of data.content || []) {\n if (block.type === 'text') {\n result.content += block.text;\n } else if (block.type === 'tool_use') {\n toolCalls.push({\n id: block.id,\n name: block.name,\n arguments: block.input\n });\n }\n }\n\n if (toolCalls.length > 0) {\n result.toolCalls = toolCalls;\n }\n\n // 处理使用统计\n if (data.usage) {\n const usage = data.usage;\n // Anthropic 的 input_tokens 已扣除缓存命中的部分\n // 完整的上下文大小 = input_tokens + cache_read_input_tokens\n const actualInputTokens = usage.input_tokens + (usage.cache_read_input_tokens || 0);\n result.usage = {\n promptTokens: actualInputTokens,\n completionTokens: usage.output_tokens,\n totalTokens: actualInputTokens + usage.output_tokens\n };\n }\n\n return result;\n }\n\n private buildRequestBody(params: ModelParams, stream: boolean): unknown {\n const { system, messages } = this.extractSystemMessage(params.messages);\n const transformedMessages = this.transformAnthropicMessages(messages);\n\n const body: Record<string, unknown> = {\n model: this.model,\n max_tokens: params.maxTokens || 4096,\n messages: transformedMessages,\n stream,\n ...(system && { system }),\n ...(params.temperature !== undefined && { temperature: params.temperature })\n };\n\n // 添加工具\n if (params.tools && params.tools.length > 0) {\n body.tools = toolsToModelSchema(params.tools).map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.parameters\n }));\n }\n\n return body;\n }\n\n private extractSystemMessage(messages: ModelParams['messages']): {\n system?: string;\n messages: ModelParams['messages'];\n } {\n const systemMessages = messages.filter(m => m.role === 'system');\n const otherMessages = messages.filter(m => m.role !== 'system');\n\n // 合并多条 system 消息为一条\n const combinedSystem = systemMessages.length > 0\n ? systemMessages.map(m => m.content as string).join('\\n\\n')\n : undefined;\n\n return {\n system: combinedSystem,\n messages: otherMessages\n };\n }\n\n private transformAnthropicMessages(messages: ModelParams['messages']): unknown[] {\n return messages.map(msg => {\n const transformed: Record<string, unknown> = {\n role: msg.role === 'assistant' ? 'assistant' : 'user',\n content: []\n };\n\n if (typeof msg.content === 'string') {\n transformed.content = [{ type: 'text', text: msg.content }];\n } else if (Array.isArray(msg.content)) {\n // 处理 ContentPart 数组\n const contentParts: any[] = [];\n for (const part of msg.content) {\n if (part.type === 'thinking') {\n contentParts.push(part);\n } else if (part.type === 'text') {\n contentParts.push({ type: 'text', text: (part as any).text });\n } else {\n contentParts.push(part);\n }\n }\n transformed.content = contentParts;\n\n // 如果过滤后为空,设置空字符串\n if (contentParts.length === 0) {\n transformed.content = '';\n }\n }\n\n // 处理工具调用\n if (msg.toolCalls && msg.role === 'assistant') {\n for (const tc of msg.toolCalls) {\n (transformed.content as any[]).push({\n type: 'tool_use',\n id: tc.id,\n name: tc.name,\n input: tc.arguments\n });\n }\n }\n\n // 处理工具结果\n if (msg.role === 'tool' && msg.toolCallId) {\n transformed.role = 'user';\n transformed.content = [{\n type: 'tool_result',\n tool_use_id: msg.toolCallId,\n content: msg.content\n }];\n }\n\n return transformed;\n });\n }\n\n private async fetch(path: string, body: unknown, signal?: AbortSignal): Promise<Response> {\n return globalThis.fetch(`${this.baseUrl}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n 'anthropic-version': this.version\n },\n body: JSON.stringify(body),\n signal\n });\n }\n\n private safeParseJSON(str: string): unknown {\n try {\n return JSON.parse(str);\n } catch {\n return str;\n }\n }\n}\n\n/**\n * 创建 Anthropic 适配器\n */\nexport function createAnthropic(config?: AnthropicConfig): AnthropicAdapter {\n return new AnthropicAdapter(config);\n}\n","import type {\n ModelParams,\n ModelCapabilities,\n StreamChunk,\n CompletionResult,\n ContentPart\n} from '../core/types.js';\nimport { BaseModelAdapter, toolsToModelSchema } from './base.js';\n\n/**\n * Ollama `/api/chat` `think` parameter (see https://docs.ollama.com/capabilities/thinking).\n */\nexport type OllamaThinkOption = boolean | 'low' | 'medium' | 'high';\n\n/**\n * Ollama 常见模型能力映射\n */\nconst OLLAMA_CAPABILITIES: Record<string, ModelCapabilities> = {\n 'qwen3.5:0.8b': { contextLength: 32_768, maxOutputTokens: 4_096 },\n 'minimax-m2.7:cloud': { contextLength: 128_000, maxOutputTokens: 16_384 },\n 'nemotron-3-super:cloud': { contextLength: 128_000, maxOutputTokens: 16_384 },\n 'glm-5:cloud': { contextLength: 128_000, maxOutputTokens: 16_384 },\n};\n\n/**\n * Ollama 配置\n */\nexport interface OllamaConfig {\n baseUrl?: string;\n model?: string;\n /** 自定义模型能力 (覆盖默认值) */\n capabilities?: ModelCapabilities;\n /**\n * When set, sent as top-level `think` on `/api/chat`.\n * Omit to use the server default for the model.\n */\n think?: OllamaThinkOption;\n}\n\n/**\n * Map one Ollama `/api/chat` stream JSON object to stream chunks (thinking before text).\n * @internal Exported for unit tests.\n */\nexport function ollamaStreamChunksFromChatData(\n data: Record<string, unknown>,\n parseToolArguments: (args: unknown) => Record<string, unknown>,\n nextToolCallId: () => string\n): StreamChunk[] {\n const chunks: StreamChunk[] = [];\n const msg = data.message as Record<string, unknown> | undefined;\n if (!msg) return chunks;\n\n const thinking = msg.thinking;\n if (typeof thinking === 'string' && thinking.length > 0) {\n chunks.push({ type: 'thinking', content: thinking });\n }\n\n const content = msg.content;\n if (typeof content === 'string' && content.length > 0) {\n chunks.push({ type: 'text', content });\n }\n\n const toolCalls = msg.tool_calls as unknown[] | undefined;\n if (toolCalls && Array.isArray(toolCalls)) {\n for (const tc of toolCalls) {\n const t = tc as Record<string, unknown>;\n const fn = t.function as Record<string, unknown> | undefined;\n chunks.push({\n type: 'tool_call',\n toolCall: {\n id: nextToolCallId(),\n name: (typeof fn?.name === 'string' ? fn.name : '') || '',\n arguments: parseToolArguments(fn?.arguments)\n }\n });\n }\n }\n\n return chunks;\n}\n\n/**\n * Ollama `/api/chat` requires string `content` on each message. The Agent may persist assistant\n * turns as `ContentPart[]` (e.g. thinking + text); replay only `text` parts so the JSON matches\n * Ollama's schema (thinking is not re-sent; the model produces a new trace each request).\n */\nexport function ollamaMessageContentToApiString(content: string | ContentPart[]): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n const texts: string[] = [];\n for (const part of content) {\n if (part.type === 'text') {\n texts.push(part.text);\n }\n }\n return texts.join('\\n\\n');\n}\n\n/** Stable unique id for tool calls in a single adapter response (non-stream complete). */\nfunction uniqueOllamaToolCallId(batchMs: number, index: number): string {\n return `ollama_${batchMs}_${index}_${Math.random().toString(36).slice(2, 11)}`;\n}\n\n/**\n * Ollama 模型适配器 (本地模型)\n */\nexport class OllamaAdapter extends BaseModelAdapter {\n readonly name: string;\n private baseUrl: string;\n private model: string;\n private readonly think: OllamaThinkOption | undefined;\n\n constructor(config: OllamaConfig = {}) {\n super();\n this.baseUrl = config.baseUrl || process.env.OLLAMA_BASE_URL || 'http://localhost:11434';\n this.model = config.model || 'qwen3.5:0.8b';\n this.think = config.think;\n\n this.name = `ollama/${this.model}`;\n\n // 设置模型能力 (Ollama 默认使用较小的上下文)\n this.capabilities = config.capabilities\n ?? OLLAMA_CAPABILITIES[this.model]\n ?? { contextLength: 4_096, maxOutputTokens: 2_048 };\n }\n\n async *stream(params: ModelParams): AsyncIterable<StreamChunk> {\n const body = this.buildRequestBody(params, true);\n const response = await this.fetch('/api/chat', body, params.signal);\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Ollama API error: ${response.status} - ${error}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n const nextToolCallId = (): string => `ollama_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n\n try {\n while (true) {\n if (params.signal?.aborted) {\n reader.cancel();\n break;\n }\n\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n try {\n const data = JSON.parse(trimmed) as Record<string, unknown>;\n const raw = params.includeRawStreamEvents ? { providerRaw: data as unknown } : {};\n\n const messageChunks = ollamaStreamChunksFromChatData(\n data,\n (args) => this.parseToolArguments(args),\n nextToolCallId\n );\n for (const chunk of messageChunks) {\n yield { ...chunk, ...raw };\n }\n\n // 处理完成\n if (data.done) {\n if (data.prompt_eval_count || data.eval_count) {\n yield {\n type: 'metadata',\n usagePhase: 'output',\n metadata: {\n usage: {\n promptTokens: (data.prompt_eval_count as number) || 0,\n completionTokens: (data.eval_count as number) || 0,\n totalTokens:\n ((data.prompt_eval_count as number) || 0) + ((data.eval_count as number) || 0)\n }\n },\n ...raw\n };\n }\n yield { type: 'done', ...raw };\n }\n } catch {\n // 跳过解析错误\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async complete(params: ModelParams): Promise<CompletionResult> {\n const body = this.buildRequestBody(params, false);\n const response = await this.fetch('/api/chat', body);\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Ollama API error: ${response.status} - ${error}`);\n }\n\n const data = await response.json() as any;\n const result: CompletionResult = {\n content: data.message?.content || ''\n };\n\n const thinking = data.message?.thinking;\n if (typeof thinking === 'string' && thinking.length > 0) {\n result.thinking = thinking;\n }\n\n // 处理工具调用(同一毫秒内多条也需唯一 id)\n if (data.message?.tool_calls) {\n const batchMs = Date.now();\n result.toolCalls = data.message.tool_calls.map((tc: any, index: number) => ({\n id: uniqueOllamaToolCallId(batchMs, index),\n name: tc.function?.name || '',\n arguments: this.parseToolArguments(tc.function?.arguments)\n }));\n }\n\n // 处理使用统计\n if (data.prompt_eval_count || data.eval_count) {\n result.usage = {\n promptTokens: data.prompt_eval_count || 0,\n completionTokens: data.eval_count || 0,\n totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0)\n };\n }\n\n return result;\n }\n\n private parseToolArguments(args: unknown): Record<string, unknown> {\n if (args == null) return {};\n if (typeof args === 'object' && !Array.isArray(args)) return args as Record<string, unknown>;\n if (typeof args === 'string') {\n try {\n const parsed = JSON.parse(args);\n return typeof parsed === 'object' && parsed !== null ? parsed : { value: parsed };\n } catch {\n return {};\n }\n }\n return {};\n }\n\n /**\n * Ollama 要求 tool_calls.function.arguments 为对象,而非 JSON 字符串。\n * 工具结果消息使用 tool_name(见 https://docs.ollama.com/capabilities/tool-calling ),非 OpenAI 的 tool_call_id。\n */\n protected override transformMessages(messages: ModelParams['messages']): unknown[] {\n const toolCallIdToName = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role === 'assistant' && msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n toolCallIdToName.set(tc.id, tc.name);\n }\n }\n }\n\n return messages.map(msg => {\n if (msg.role === 'tool' && msg.toolCallId) {\n const toolName = toolCallIdToName.get(msg.toolCallId) ?? msg.name;\n return {\n role: 'tool' as const,\n content: ollamaMessageContentToApiString(msg.content as string | ContentPart[]),\n ...(toolName && { tool_name: toolName })\n };\n }\n\n return {\n role: msg.role,\n content: ollamaMessageContentToApiString(msg.content),\n ...(msg.toolCalls && { tool_calls: msg.toolCalls.map(tc => ({\n id: tc.id,\n type: 'function',\n function: {\n name: tc.name,\n arguments: this.parseToolArguments(tc.arguments)\n }\n }))})\n };\n });\n }\n\n private buildRequestBody(params: ModelParams, stream: boolean): unknown {\n const body: Record<string, unknown> = {\n model: this.model,\n messages: this.transformMessages(params.messages),\n stream,\n ...(params.temperature !== undefined && { options: { temperature: params.temperature } })\n };\n\n if (this.think !== undefined) {\n body.think = this.think;\n }\n\n // 与 OpenAI 一致:每项为 { type: 'function', function: { name, description, parameters } }\n // 参见 https://docs.ollama.com/api/chat ToolDefinition\n if (params.tools && params.tools.length > 0) {\n body.tools = toolsToModelSchema(params.tools).map(tool => ({\n type: 'function' as const,\n function: tool\n }));\n }\n\n return body;\n }\n\n private async fetch(path: string, body: unknown, signal?: AbortSignal): Promise<Response> {\n return globalThis.fetch(`${this.baseUrl}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body),\n signal\n });\n }\n}\n\n/**\n * 创建 Ollama 模型适配器\n */\nexport function createOllama(config?: OllamaConfig): OllamaAdapter {\n return new OllamaAdapter(config);\n}\n","// Model adapters\nexport { BaseModelAdapter, zodToJsonSchema, toolsToModelSchema, mergeTokenUsage } from './base.js';\nexport { OpenAIAdapter, createOpenAI } from './openai.js';\nexport type { OpenAIConfig } from './openai.js';\nexport { AnthropicAdapter, createAnthropic } from './anthropic.js';\nexport type { AnthropicConfig } from './anthropic.js';\nexport { OllamaAdapter, createOllama } from './ollama.js';\nexport type { OllamaConfig, OllamaThinkOption } from './ollama.js';\nexport { ollamaStreamChunksFromChatData, ollamaMessageContentToApiString } from './ollama.js';\n\nimport type { ModelAdapter } from '../core/types.js';\nimport { OpenAIAdapter } from './openai.js';\nimport { AnthropicAdapter } from './anthropic.js';\nimport { OllamaAdapter } from './ollama.js';\nimport type { OllamaThinkOption } from './ollama.js';\n\nexport type ModelProvider = 'openai' | 'anthropic' | 'ollama';\n\nexport interface CreateModelConfig {\n provider: ModelProvider;\n apiKey?: string;\n baseUrl?: string;\n model?: string;\n /** Ollama only: passed as `think` on `/api/chat`. */\n think?: OllamaThinkOption;\n}\n\n/**\n * 创建模型适配器工厂函数\n */\nexport function createModel(config: CreateModelConfig): ModelAdapter {\n switch (config.provider) {\n case 'openai':\n return new OpenAIAdapter({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n model: config.model\n });\n case 'anthropic':\n return new AnthropicAdapter({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n model: config.model\n });\n case 'ollama':\n return new OllamaAdapter({\n baseUrl: config.baseUrl,\n model: config.model,\n think: config.think\n });\n default:\n throw new Error(`Unknown model provider: ${config.provider}`);\n }\n}\n"]}
|