@flexkit/studio 0.2.19 → 0.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activity-nav-button-7RLCHOFV.js +2 -0
- package/dist/{activity-nav-button-V5DFHADL.js.map → activity-nav-button-7RLCHOFV.js.map} +1 -1
- package/dist/chat-page-QKSMDM7A.js +4 -0
- package/dist/chat-page-QKSMDM7A.js.map +1 -0
- package/dist/chunk-3TAYSYYW.js +7 -0
- package/dist/{chunk-XNHSHVG2.js.map → chunk-3TAYSYYW.js.map} +1 -1
- package/dist/{chunk-ME55YNBF.js → chunk-4PUMSUJL.js} +2 -2
- package/dist/{chunk-ME55YNBF.js.map → chunk-4PUMSUJL.js.map} +1 -1
- package/dist/{chunk-BMX4URYN.js → chunk-7ERLYAPR.js} +2 -2
- package/dist/{chunk-BMX4URYN.js.map → chunk-7ERLYAPR.js.map} +1 -1
- package/dist/chunk-7KLXWCDS.js +3 -0
- package/dist/chunk-7KLXWCDS.js.map +1 -0
- package/dist/{chunk-4IEOAKKK.js → chunk-7KRDPQXX.js} +2 -2
- package/dist/{chunk-4IEOAKKK.js.map → chunk-7KRDPQXX.js.map} +1 -1
- package/dist/{chunk-HCJAM5LG.js → chunk-AFLZA2R5.js} +2 -2
- package/dist/{chunk-HCJAM5LG.js.map → chunk-AFLZA2R5.js.map} +1 -1
- package/dist/chunk-AHR2EZGG.js +4 -0
- package/dist/{chunk-VMWUMFUL.js.map → chunk-AHR2EZGG.js.map} +1 -1
- package/dist/chunk-BXUW6OXZ.js +2 -0
- package/dist/{chunk-ZKA2HKNI.js.map → chunk-BXUW6OXZ.js.map} +1 -1
- package/dist/chunk-DZS344SD.js +378 -0
- package/dist/chunk-DZS344SD.js.map +1 -0
- package/dist/chunk-ELOJGLAR.js +2 -0
- package/dist/chunk-ELOJGLAR.js.map +1 -0
- package/dist/chunk-HKN6BX5U.js +2 -0
- package/dist/chunk-HKN6BX5U.js.map +1 -0
- package/dist/{chunk-DFLAX7EE.js → chunk-I4INIJFN.js} +2 -2
- package/dist/{chunk-DFLAX7EE.js.map → chunk-I4INIJFN.js.map} +1 -1
- package/dist/{chunk-QWQHXMXW.js → chunk-MJICM7YP.js} +2 -2
- package/dist/{chunk-QWQHXMXW.js.map → chunk-MJICM7YP.js.map} +1 -1
- package/dist/chunk-MLHXPTBT.js +2 -0
- package/dist/chunk-MLHXPTBT.js.map +1 -0
- package/dist/{chunk-H2RWSC56.js → chunk-PLZUH56T.js} +3 -3
- package/dist/{chunk-H2RWSC56.js.map → chunk-PLZUH56T.js.map} +1 -1
- package/dist/{chunk-UOR437J2.js → chunk-QCVQJN5O.js} +2 -2
- package/dist/{chunk-UOR437J2.js.map → chunk-QCVQJN5O.js.map} +1 -1
- package/dist/{chunk-DHVKE36X.js → chunk-SY67F62K.js} +3 -3
- package/dist/{chunk-DHVKE36X.js.map → chunk-SY67F62K.js.map} +1 -1
- package/dist/chunk-T2DOW23R.js +3 -0
- package/dist/chunk-T2DOW23R.js.map +1 -0
- package/dist/{chunk-6RRB47OZ.js → chunk-YBLY77TV.js} +5 -5
- package/dist/{chunk-6RRB47OZ.js.map → chunk-YBLY77TV.js.map} +1 -1
- package/dist/{chunk-V6RB45UU.js → chunk-YJM2RPTA.js} +2 -2
- package/dist/{chunk-V6RB45UU.js.map → chunk-YJM2RPTA.js.map} +1 -1
- package/dist/{entry-3JSFO4OU.js → entry-BKWT63OH.js} +2 -2
- package/dist/{entry-3JSFO4OU.js.map → entry-BKWT63OH.js.map} +1 -1
- package/dist/index.css +24 -0
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/list-F2MN4VI4.js +3 -0
- package/dist/{list-SY3L2ACH.js.map → list-F2MN4VI4.js.map} +1 -1
- package/dist/list-RFIARR7J.js +2 -0
- package/dist/{list-Z2C74QDN.js.map → list-RFIARR7J.js.map} +1 -1
- package/dist/{pages-INCA54HE.js → pages-6YG37BSV.js} +3 -3
- package/dist/{pages-INCA54HE.js.map → pages-6YG37BSV.js.map} +1 -1
- package/dist/plugin-pages-R5QCB5GZ.js +2 -0
- package/dist/{plugin-pages-WO3MCJKC.js.map → plugin-pages-R5QCB5GZ.js.map} +1 -1
- package/dist/record-links-BACU2DWS.js +2 -0
- package/dist/{record-links-CTB4SC4J.js.map → record-links-BACU2DWS.js.map} +1 -1
- package/dist/root-6FML7PJC.js +23 -0
- package/dist/{root-DOOWSYWY.js.map → root-6FML7PJC.js.map} +1 -1
- package/dist/{root-XHXX3SZG.js → root-FCO3MQTE.js} +3 -3
- package/dist/{root-XHXX3SZG.js.map → root-FCO3MQTE.js.map} +1 -1
- package/dist/{root-JA2LFGNX.js → root-MQ5FZRMQ.js} +2 -2
- package/dist/{root-JA2LFGNX.js.map → root-MQ5FZRMQ.js.map} +1 -1
- package/dist/root-MTJAYVPT.js +14 -0
- package/dist/root-MTJAYVPT.js.map +1 -0
- package/dist/{root-6MSWGFZX.js → root-U4QMDA3Q.js} +2 -2
- package/dist/{root-6MSWGFZX.js.map → root-U4QMDA3Q.js.map} +1 -1
- package/dist/root-UCQDMHDV.js +2 -0
- package/dist/{root-OGX4DUTM.js.map → root-UCQDMHDV.js.map} +1 -1
- package/dist/{search-Z4M4R4NJ.js → search-7DVZZIZ6.js} +2 -2
- package/dist/{search-Z4M4R4NJ.js.map → search-7DVZZIZ6.js.map} +1 -1
- package/dist/skills-pages-EPIBHZVO.js +2 -0
- package/dist/skills-pages-EPIBHZVO.js.map +1 -0
- package/dist/source-F6B2UBWX.js +2 -0
- package/dist/{source-5J56KIFA.js.map → source-F6B2UBWX.js.map} +1 -1
- package/package.json +4 -1
- package/dist/activity-nav-button-V5DFHADL.js +0 -2
- package/dist/chat-page-LAK4TFN4.js +0 -4
- package/dist/chat-page-LAK4TFN4.js.map +0 -1
- package/dist/chunk-A7XHA2P6.js +0 -3
- package/dist/chunk-A7XHA2P6.js.map +0 -1
- package/dist/chunk-BMO7JFAX.js +0 -2
- package/dist/chunk-BMO7JFAX.js.map +0 -1
- package/dist/chunk-OOYCTZ3C.js +0 -379
- package/dist/chunk-OOYCTZ3C.js.map +0 -1
- package/dist/chunk-VMWUMFUL.js +0 -4
- package/dist/chunk-XNHSHVG2.js +0 -7
- package/dist/chunk-ZKA2HKNI.js +0 -2
- package/dist/list-SY3L2ACH.js +0 -3
- package/dist/list-Z2C74QDN.js +0 -2
- package/dist/plugin-pages-WO3MCJKC.js +0 -2
- package/dist/record-links-CTB4SC4J.js +0 -2
- package/dist/root-B4D3C37Q.js +0 -2
- package/dist/root-B4D3C37Q.js.map +0 -1
- package/dist/root-DOOWSYWY.js +0 -23
- package/dist/root-OGX4DUTM.js +0 -2
- package/dist/skills-pages-TP2XQPCQ.js +0 -2
- package/dist/skills-pages-TP2XQPCQ.js.map +0 -1
- package/dist/source-5J56KIFA.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/apps/ai/agent/dictation.ts","../src/apps/ai/api.ts"],"names":["appendDictatedText","existing","transcript","dictated","convertRecordedAudioToPcm","blob","AudioContextCtor","arrayBuffer","audioContext","audioBuffer","mono","mixToMono","resampled","resample","pcm","floatToPcm16","durationSeconds","buffer","length","channelCount","index","sum","channel","samples","sourceRate","targetRate","ratio","outputLength","output","sourceIndex","left","right","fraction","leftSample","rightSample","view","sample","sha256Hex","file","digest","byte","AgentUploadError","status","message","code","getApiRootDomain","getDesktop","flexkitDomain","hostname","getPlatformOrigin","getWebhookTriggerUrl","projectId","token","createApiClient","projectBasePath","automationsBasePath","skillsBasePath","agentChatsBasePath","request","url","init","response","data","error","input","id","runId","chatId","workflowRunId","title","pluginId","questionId","result","attachments","content","modelId","messageId","monitorId","audio","signal","formData","tokenResponse","sha256","getKnowledgeFileProblem","tokenData","put","approvalId","ids","itemId","state","automationId","skillId","artifactId","options","suffix","provider","connectionId","FetcherError","fetcher","paths","basePath","filter","limit","offset","params","since","query","enabled","search","visibility","value","trimmedSearch","scope","spaceId"],"mappings":"2IAIO,SAASA,CAAAA,CAAmBC,CAAAA,CAAkBC,CAAAA,CAA4B,CAC/E,IAAMC,CAAAA,CAAWD,CAAAA,CAAW,IAAA,EAAK,CAEjC,OAAKC,CAAAA,CAIAF,CAAAA,CAAS,IAAA,EAAK,CAIf,KAAA,CAAM,IAAA,CAAKA,CAAQ,CAAA,EAAK,WAAA,CAAY,IAAA,CAAKE,CAAQ,CAAA,CAC5C,CAAA,EAAGF,CAAQ,CAAA,EAAGE,CAAQ,CAAA,CAAA,CAGxB,CAAA,EAAGF,CAAQ,CAAA,CAAA,EAAIE,CAAQ,CAAA,CAAA,CAPrBF,CAAAA,CAAS,MAAA,GAAW,CAAA,CAAIE,CAAAA,CAAW,CAAA,EAAGF,CAAQ,CAAA,EAAGE,CAAQ,CAAA,CAAA,CAJzDF,CAYX,CAEA,eAAsBG,CAAAA,CAA0BC,EAA6D,CAC3G,GAAI,OAAO,MAAA,CAAW,GAAA,CACpB,MAAM,IAAI,KAAA,CAAM,6CAA6C,CAAA,CAG/D,IAAMC,CAAAA,CAAmB,MAAA,CAAO,YAAA,EAAgB,MAAA,CAAO,kBAAA,CAEvD,GAAI,CAACA,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAG9D,IAAMC,CAAAA,CAAc,MAAMF,CAAAA,CAAK,WAAA,EAAY,CACrCG,CAAAA,CAAe,IAAIF,CAAAA,CAEzB,GAAI,CACF,IAAMG,CAAAA,CAAc,MAAMD,CAAAA,CAAa,eAAA,CAAgBD,CAAAA,CAAY,KAAA,CAAM,CAAC,CAAC,CAAA,CACrEG,CAAAA,CAAOC,CAAAA,CAAUF,CAAW,CAAA,CAC5BG,EAAYC,CAAAA,CAASH,CAAAA,CAAMD,CAAAA,CAAY,UAAA,CAAY,IAAqB,CAAA,CACxEK,CAAAA,CAAMC,CAAAA,CAAaH,CAAS,CAAA,CAC5BI,CAAAA,CAAkBJ,CAAAA,CAAU,MAAA,CAAS,IAAA,CAE3C,GAAII,CAAAA,CAAkB,IACpB,MAAM,IAAI,KAAA,CAAM,oCAAoC,CAAA,CAGtD,GAAIA,CAAAA,CAAkB,EAAA,CACpB,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,MAAA,CAAO,EAA8B,CAAC,CAAA,SAAA,CAAW,EAG9F,OAAO,CACL,eAAA,CAAAA,CAAAA,CACA,GAAA,CAAK,IAAI,IAAA,CAAK,CAACF,CAAG,CAAA,CAAG,CAAE,IAAA,CAAM,WAAY,CAAC,CAC5C,CACF,CAAA,OAAE,CACA,MAAMN,CAAAA,CAAa,KAAA,GACrB,CACF,CAEA,SAASG,CAAAA,CAAUM,CAAAA,CAAmC,CACpD,GAAM,CAAE,MAAA,CAAAC,CAAAA,CAAQ,iBAAkBC,CAAa,CAAA,CAAIF,CAAAA,CAEnD,GAAIE,CAAAA,GAAiB,CAAA,CACnB,OAAOF,CAAAA,CAAO,cAAA,CAAe,CAAC,CAAA,CAAE,KAAA,EAAM,CAGxC,IAAMP,CAAAA,CAAO,IAAI,aAAaQ,CAAM,CAAA,CAEpC,IAAA,IAASE,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQF,CAAAA,CAAQE,CAAAA,EAAS,CAAA,CAAG,CAC9C,IAAIC,CAAAA,CAAM,CAAA,CAEV,IAAA,IAASC,CAAAA,CAAU,CAAA,CAAGA,EAAUH,CAAAA,CAAcG,CAAAA,EAAW,CAAA,CACvDD,CAAAA,EAAOJ,CAAAA,CAAO,cAAA,CAAeK,CAAO,CAAA,CAAEF,CAAK,CAAA,EAAK,CAAA,CAGlDV,CAAAA,CAAKU,CAAK,CAAA,CAAIC,CAAAA,CAAMF,EACtB,CAEA,OAAOT,CACT,CAEA,SAASG,CAAAA,CAASU,CAAAA,CAAuBC,CAAAA,CAAoBC,CAAAA,CAAkC,CAC7F,GAAID,CAAAA,GAAeC,CAAAA,CACjB,OAAOF,CAAAA,CAGT,IAAMG,CAAAA,CAAQF,EAAaC,CAAAA,CACrBE,CAAAA,CAAe,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,KAAA,CAAMJ,CAAAA,CAAQ,MAAA,CAASG,CAAK,CAAC,CAAA,CAC7DE,CAAAA,CAAS,IAAI,YAAA,CAAaD,CAAY,EAE5C,IAAA,IAASP,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQO,CAAAA,CAAcP,CAAAA,EAAS,CAAA,CAAG,CACpD,IAAMS,CAAAA,CAAcT,CAAAA,CAAQM,CAAAA,CACtBI,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMD,CAAW,EAC7BE,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAO,CAAA,CAAGP,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAC7CS,CAAAA,CAAWH,CAAAA,CAAcC,CAAAA,CACzBG,CAAAA,CAAaV,CAAAA,CAAQO,CAAI,CAAA,EAAK,CAAA,CAC9BI,CAAAA,CAAcX,CAAAA,CAAQQ,CAAK,CAAA,EAAK,CAAA,CACtCH,CAAAA,CAAOR,CAAK,CAAA,CAAIa,CAAAA,CAAAA,CAAcC,CAAAA,CAAcD,CAAAA,EAAcD,EAC5D,CAEA,OAAOJ,CACT,CAEA,SAASb,CAAAA,CAAaQ,CAAAA,CAAoC,CACxD,IAAMN,CAAAA,CAAS,IAAI,WAAA,CAAYM,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAC3CY,CAAAA,CAAO,IAAI,QAAA,CAASlB,CAAM,EAEhC,IAAA,IAASG,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQG,CAAAA,CAAQ,MAAA,CAAQH,CAAAA,EAAS,CAAA,CAAG,CACtD,IAAMgB,CAAAA,CAAS,IAAA,CAAK,GAAA,CAAI,EAAA,CAAI,IAAA,CAAK,GAAA,CAAI,EAAGb,CAAAA,CAAQH,CAAK,CAAA,EAAK,CAAC,CAAC,CAAA,CAC5De,CAAAA,CAAK,QAAA,CAASf,CAAAA,CAAQ,CAAA,CAAGgB,CAAAA,CAAS,CAAA,CAAIA,CAAAA,CAAS,KAAA,CAASA,CAAAA,CAAS,KAAA,CAAQ,IAAI,EAC/E,CAEA,OAAOnB,CACT,CC7DA,eAAeoB,CAAAA,CAAUC,CAAAA,CAAyC,CAChE,GAAI,EAAA,OAAO,OAAW,GAAA,EAAe,CAAC,MAAA,CAAO,MAAA,CAAA,CAI7C,GAAI,CACF,IAAMC,CAAAA,CAAS,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAW,MAAMD,CAAAA,CAAK,WAAA,EAAa,CAAA,CAE7E,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,UAAA,CAAWC,CAAM,CAAA,CAAIC,CAAAA,EAASA,CAAAA,CAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CACjG,CAAA,KAAQ,CACN,MACF,CACF,CAGO,IAAMC,CAAAA,CAAN,cAA+B,KAAM,CAC1C,IAAA,CACA,MAAA,CAEA,WAAA,CAAYC,CAAAA,CAAgBC,CAAAA,CAAiBC,CAAAA,CAAsB,IAAA,CAAM,CACvE,KAAA,CAAMD,CAAO,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,kBAAA,CACZ,IAAA,CAAK,IAAA,CAAOC,CAAAA,CACZ,IAAA,CAAK,OAASF,EAChB,CACF,CAAA,CA2FA,SAASG,CAAAA,EAA2B,CAClC,GAAI,OAAO,MAAA,CAAW,GAAA,CACpB,OAAO,YAAA,CAKT,GAAIC,GAAAA,EAAW,CACb,OAAOC,EAGT,GAAM,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAI,MAAA,CAAO,QAAA,CAO5B,OALEA,CAAAA,GAAa,WAAA,EACbA,CAAAA,GAAa,WAAA,EACbA,CAAAA,GAAa,cAAA,EACbA,CAAAA,CAAS,QAAA,CAAS,eAAe,CAAA,CAEhB,cAAA,CAAiB,YACtC,CAGO,SAASC,CAAAA,EAA4B,CAC1C,OAAO,CAAA,QAAA,EAAWJ,CAAAA,EAAkB,CAAA,CACtC,CAGO,SAASK,CAAAA,CAAqBC,CAAAA,CAAmBC,EAAuB,CAC7E,OAAO,CAAA,QAAA,EAAWD,CAAS,CAAA,KAAA,EAAQN,CAAAA,EAAkB,CAAA,qBAAA,EAAwB,kBAAA,CAAmBO,CAAK,CAAC,CAAA,CACxG,CAEO,SAASC,CAAAA,CAAgBF,CAAAA,CAA8B,CAC5D,IAAMG,CAAAA,CAAkB,CAAA,aAAA,EAAgBH,CAAS,CAAA,CAAA,CAC3CI,CAAAA,CAAsB,CAAA,EAAGD,CAAe,CAAA,YAAA,CAAA,CACxCE,CAAAA,CAAiB,CAAA,EAAGF,CAAe,CAAA,OAAA,CAAA,CACnCG,CAAAA,CAAqB,CAAA,EAAGH,CAAe,eAE7C,eAAeI,CAAAA,CAAWC,CAAAA,CAAaC,CAAAA,CAAgC,CACrE,IAAMC,CAAAA,CAAW,MAAM,KAAA,CAAMF,CAAAA,CAAK,CAChC,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CACP,cAAA,CAAgB,mBAChB,GAAIC,CAAAA,EAAM,OAAA,EAAW,EACvB,CAAA,CACA,GAAGA,CACL,CAAC,CAAA,CACKE,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAElC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAME,CAAAA,CAAQD,CAAAA,EAAQ,OAAOA,CAAAA,EAAS,QAAA,EAAY,OAAA,GAAWA,CAAAA,CAAO,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,iBAEzF,MAAM,IAAI,KAAA,CAAMC,CAAK,CACvB,CAEA,OAAOD,CACT,CAEA,OAAO,CACL,cAAA,CAAiBE,CAAAA,EACfN,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,mBAAoB,CAAE,MAAA,CAAQ,MAAA,CAAQ,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUU,CAAK,CAAE,CAAC,CAAA,CAC/F,iBAAA,CAAoBC,CAAAA,EAAOP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,4BAAA,EAA+B,mBAAmBW,CAAE,CAAC,CAAA,CAAE,CAAA,CAC5G,sBAAA,CAAwB,CAACA,CAAAA,CAAID,CAAAA,GAC3BN,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,oBAAA,EAAuB,kBAAA,CAAmBW,CAAE,CAAC,CAAA,CAAA,CAAI,CACzE,MAAA,CAAQ,OAAA,CACR,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUD,CAAK,CAC5B,CAAC,CAAA,CACH,gBAAA,CAAmBC,CAAAA,EACjBP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,oBAAA,EAAuB,mBAAmBW,CAAE,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,CAAA,CACjG,aAAA,CAAgBA,CAAAA,EACdP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,SAAA,EAAY,kBAAA,CAAmBW,CAAE,CAAC,CAAA,aAAA,CAAA,CAAiB,CAC3E,MAAA,CAAQ,KAAA,CACR,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,EAAE,CACzB,CAAC,CAAA,CACH,eAAA,CAAiB,CAACA,CAAAA,CAAID,CAAAA,GACpBN,EAAQ,CAAA,EAAGJ,CAAe,CAAA,SAAA,EAAY,kBAAA,CAAmBW,CAAE,CAAC,CAAA,OAAA,CAAA,CAAW,CACrE,MAAA,CAAQ,OAAA,CACR,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUD,CAAK,CAC5B,CAAC,CAAA,CACH,kBAAA,CAAqBC,CAAAA,EACnBP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,oBAAA,EAAuB,kBAAA,CAAmBW,CAAE,CAAC,CAAA,cAAA,CAAA,CAAkB,CAAE,MAAA,CAAQ,MAAO,CAAC,CAAA,CAC7G,UAAW,MAAOC,CAAAA,EAChBR,CAAAA,CAAwB,CAAA,EAAGH,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBW,CAAK,CAAC,CAAA,OAAA,CAAA,CAAW,CAAE,MAAA,CAAQ,MAAO,CAAC,CAAA,CAC/G,eAAA,CAAiB,MAAOF,CAAAA,EACtBN,CAAAA,CAA6BD,CAAAA,CAAoB,CAC/C,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,OAAA,CAASO,CAAAA,EAAO,OAAA,EAAW,IAAK,CAAC,CAAA,CACxD,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,eAAA,CAAiB,MAAOG,CAAAA,EACtBT,CAAAA,CAA8B,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,EAC3G,qBAAA,CAAuB,CAACA,CAAAA,CAAQC,CAAAA,GAC9B,CAAA,EAAGX,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,sBAAA,EAAyB,kBAAA,CAAmBC,CAAa,CAAC,CAAA,CAAA,CAC/G,eAAA,CAAiB,MAAOD,CAAAA,CAAQE,CAAAA,GAC9BX,CAAAA,CAA6B,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,CAAA,CAAI,CAClF,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,KAAA,CAAAE,CAAM,CAAC,CAAA,CAC9B,MAAA,CAAQ,OACV,CAAC,CAAA,CACH,oBAAA,CAAsB,MAAOF,CAAAA,CAAQH,CAAAA,GACnCN,CAAAA,CAAuB,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,SAAA,CAAA,CAAa,CACrF,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUH,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,uBAAA,CAAyB,MAAOG,CAAAA,CAAQG,CAAAA,GACtCZ,CAAAA,CAAQ,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,iBAAA,CAAA,CAAqB,CAC9E,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,QAAA,CAAAG,CAAS,CAAC,CAAA,CACjC,OAAQ,MACV,CAAC,CAAA,CACH,qBAAA,CAAuB,MAAOH,CAAAA,CAAQH,CAAAA,GACpCN,CAAAA,CAAiC,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,WAAA,CAAA,CAAe,CACjG,KAAM,IAAA,CAAK,SAAA,CAAUH,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,uBAAA,CAAyB,MAAOG,CAAAA,CAAQI,CAAAA,CAAYV,CAAAA,GAAa,CAC/D,IAAMW,CAAAA,CAAS,MAAM,KAAA,CACnB,CAAA,EAAGf,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,WAAA,EAAc,kBAAA,CAAmBI,CAAU,CAAC,CAAA,OAAA,CAAA,CAC/F,CACE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUV,CAAQ,CAAA,CAC7B,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,MAAA,CAAQ,MACV,CACF,CAAA,CACMC,CAAAA,CAAQ,MAAMU,CAAAA,CAAO,MAAK,CAGhC,GAAI,CAACA,CAAAA,CAAO,EAAA,EAAM,CAACV,CAAAA,CAAK,QAAA,CACtB,MAAM,IAAI,KAAA,CAAMA,CAAAA,CAAK,YAAA,EAAgBA,CAAAA,CAAK,KAAA,EAAS,gBAAgB,EAGrE,OAAO,CAAE,YAAA,CAAcU,CAAAA,CAAO,EAAA,CAAK,MAAA,CAAYV,CAAAA,CAAK,YAAA,CAAc,QAAA,CAAUA,CAAAA,CAAK,QAAS,CAC5F,CAAA,CACA,cAAA,CAAgB,MAAO,CAAE,YAAAW,CAAAA,CAAa,OAAA,CAAAC,CAAAA,CAAS,OAAA,CAAAC,CAAQ,CAAA,GACrDjB,CAAAA,CAA8BD,CAAAA,CAAoB,CAChD,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,OAAA,CAAS,CAAE,WAAA,CAAAgB,CAAAA,CAAa,OAAA,CAAAC,CAAQ,CAAA,CAAG,OAAA,CAASC,CAAAA,EAAW,IAAK,CAAC,CAAA,CACpF,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,2BAAA,CAA6B,MAAOR,CAAAA,CAAQS,IAC1ClB,CAAAA,CACE,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,YAAA,EAAe,kBAAA,CAAmBS,CAAS,CAAC,CAAA,MAAA,CAAA,CAC/F,CAAE,MAAA,CAAQ,MAAO,CACnB,EACF,aAAA,CAAe,MAAOT,CAAAA,EACpBT,CAAAA,CAAuC,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,KAAA,CAAA,CAAS,CACjG,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,qBAAsB,MAAOA,CAAAA,CAAQU,CAAAA,GACnCnB,CAAAA,CACE,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmBU,CAAS,CAAC,CAAA,KAAA,CAAA,CAC7F,CAAE,OAAQ,MAAO,CACnB,CAAA,CACF,oBAAA,CAAsB,MAAOC,CAAAA,CAAOC,CAAAA,GAAW,CAC7C,GAAM,CAAE,eAAA,CAAA/D,CAAAA,CAAiB,GAAA,CAAAF,CAAI,CAAA,CAAI,MAAMV,EAA0B0E,CAAK,CAAA,CAChEE,CAAAA,CAAW,IAAI,QAAA,CACrBA,CAAAA,CAAS,MAAA,CAAO,MAAA,CAAQlE,CAAAA,CAAK,WAAW,CAAA,CACxCkE,CAAAA,CAAS,MAAA,CAAO,iBAAA,CAAmB,MAAA,CAAOhE,CAAe,CAAC,CAAA,CAE1D,IAAM6C,CAAAA,CAAW,MAAM,KAAA,CAAM,CAAA,EAAGP,CAAe,CAAA,iBAAA,CAAA,CAAqB,CAClE,IAAA,CAAM0B,CAAAA,CACN,WAAA,CAAa,SAAA,CACb,MAAA,CAAQ,MAAA,CACR,MAAA,CAAAD,CACF,CAAC,CAAA,CACKjB,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAElC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAME,CAAAA,CAAQD,CAAAA,EAAQ,OAAOA,CAAAA,EAAS,QAAA,EAAYA,CAAAA,CAAK,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,gBAAA,CAEpF,MAAM,IAAI,KAAA,CAAMC,CAAK,CACvB,CAEA,GAAI,CAACD,CAAAA,CAAK,IAAA,EAAM,IAAA,EAAK,CACnB,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA,CAGxD,OAAO,CAAE,IAAA,CAAMA,CAAAA,CAAK,IAAK,CAC3B,CAAA,CACA,0BAA2B,MAAOxB,CAAAA,CAAMyC,CAAAA,GAAW,CAMjD,GAAM,CAACE,CAAAA,CAAeC,CAAM,CAAA,CAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAChD,KAAA,CAAM,CAAA,EAAG5B,CAAe,iBAAkB,CACxC,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,QAAA,CAAUhB,CAAAA,CAAK,IAAA,CAAM,SAAA,CAAWA,CAAAA,CAAK,IAAA,EAAQ,IAAA,CAAM,SAAA,CAAWA,CAAAA,CAAK,IAAK,CAAC,CAAA,CAChG,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,MAAA,CAAQ,MAAA,CACR,MAAA,CAAAyC,CACF,CAAC,CAAA,CAEDI,CAAAA,CAAwB,CAAE,KAAM7C,CAAAA,CAAK,IAAA,CAAM,IAAA,CAAMA,CAAAA,CAAK,IAAK,CAAC,CAAA,GAAM,IAAA,CAAOD,CAAAA,CAAUC,CAAI,CAAA,CAAI,MAC7F,CAAC,CAAA,CACK8C,CAAAA,CAAa,MAAMH,EAAc,IAAA,EAAK,CAQ5C,GAAI,CAACA,CAAAA,CAAc,EAAA,EAAM,CAACG,CAAAA,CAAU,QAAA,EAAY,CAACA,CAAAA,CAAU,KAAA,EAAS,CAACA,CAAAA,CAAU,SAAA,CAC7E,MAAM,IAAI3C,CAAAA,CACRwC,CAAAA,CAAc,MAAA,CACdG,CAAAA,CAAU,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAU,KAAK,CAAA,CAAI,iCAAA,CAC5CA,CAAAA,CAAU,IAAA,EAAQ,IACpB,CAAA,CAGF,IAAM/E,CAAAA,CAAO,MAAMgF,GAAAA,CAAID,CAAAA,CAAU,QAAA,CAAU9C,CAAAA,CAAM,CAC/C,WAAA,CAAayC,CAAAA,CACb,MAAA,CAAQ,QAAA,CACR,WAAA,CAAaK,CAAAA,CAAU,SAAA,CACvB,KAAA,CAAOA,CAAAA,CAAU,KACnB,CAAC,CAAA,CAED,OAAO,CACL,QAAA,CAAU9C,CAAAA,CAAK,IAAA,CACf,SAAA,CAAW8C,CAAAA,CAAU,SAAA,CACrB,SAAA,CAAW9C,CAAAA,CAAK,IAAA,CAChB,GAAA,CAAKjC,CAAAA,CAAK,GAAA,CACV,GAAI6E,EAAS,CAAE,MAAA,CAAAA,CAAO,CAAA,CAAI,EAC5B,CACF,CAAA,CACA,cAAA,CAAgB,MAAOI,CAAAA,CAAYtB,CAAAA,GAAU,CAC3C,IAAMH,CAAAA,CAAW,MAAM,MAAM,CAAA,EAAGN,CAAmB,CAAA,WAAA,EAAc,kBAAA,CAAmB+B,CAAU,CAAC,CAAA,OAAA,CAAA,CAAW,CACxG,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUtB,CAAK,CAAA,CAC1B,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CACP,cAAA,CAAgB,kBAClB,CAAA,CACA,MAAA,CAAQ,MACV,CAAC,CAAA,CACKF,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAIlC,GAAI,CAACA,CAAAA,CAAS,EAAA,EAAM,OAAOC,CAAAA,CAAK,OAAA,EAAY,SAAA,CAC1C,MAAM,IAAI,KAAA,CAAMA,CAAAA,CAAK,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,gBAAgB,CAAA,CAGpE,OAAOA,CACT,EACA,gBAAA,CAAkB,MAAOyB,CAAAA,EACvB7B,CAAAA,CAA8B,CAAA,EAAGJ,CAAe,CAAA,cAAA,CAAA,CAAkB,CAChE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUiC,CAAAA,GAAQ,KAAA,CAAQ,CAAE,GAAA,CAAK,IAAK,EAAI,CAAE,GAAA,CAAAA,CAAI,CAAC,CAAA,CAC5D,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,oBAAA,CAAsB,MAAOC,CAAAA,CAAQC,CAAAA,GACnC/B,CAAAA,CAAgC,CAAA,EAAGJ,CAAe,CAAA,UAAA,EAAa,kBAAA,CAAmBkC,CAAM,CAAC,CAAA,CAAA,CAAI,CAC3F,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,KAAA,CAAAC,CAAM,CAAC,CAAA,CAC9B,MAAA,CAAQ,OACV,CAAC,CAAA,CACH,gBAAA,CAAkB,MAAOzB,CAAAA,EACvBN,CAAAA,CAAsDH,CAAAA,CAAqB,CACzE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUS,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,YAAa,MAAOA,CAAAA,EAClBN,CAAAA,CAA4CF,CAAAA,CAAgB,CAC1D,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUQ,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,gBAAA,CAAkB,MAAO0B,GACvBhC,CAAAA,CAAwB,CAAA,EAAGH,CAAmB,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAY,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,CAAA,CAC5G,WAAA,CAAa,MAAOC,CAAAA,EAClBjC,CAAAA,CAAwB,CAAA,EAAGF,CAAc,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAO,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,CAAA,CAClG,cAAA,CAAgB,CAACC,CAAAA,CAAYC,IAAY,CACvC,IAAMC,CAAAA,CAASD,CAAAA,EAAS,QAAA,CAAW,aAAA,CAAgB,EAAA,CAEnD,OAAO,CAAA,EAAGtC,CAAmB,CAAA,WAAA,EAAc,kBAAA,CAAmBqC,CAAU,CAAC,CAAA,QAAA,EAAWE,CAAM,EAC5F,CAAA,CACA,eAAA,CAAiB,MAAO1B,CAAAA,EACtBV,CAAAA,CACE,CAAA,EAAGH,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBa,CAAa,CAAC,CAAA,UAAA,CAClE,CAAA,CAAE,IAAA,CAAMP,CAAAA,EAAaA,CAAAA,CAAS,SAAS,CAAA,CACzC,YAAA,CAAeO,CAAAA,EAAkB,CAAA,EAAGb,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBa,CAAa,CAAC,CAAA,OAAA,CAAA,CACjG,gBAAA,CAAmBF,CAAAA,EAAU,CAAA,EAAGX,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBW,CAAK,CAAC,CAAA,WAAA,CAAA,CACrF,YAAA,CAAc,MAAO6B,CAAAA,CAAUC,CAAAA,GAAiB,CAC9C,IAAMrC,CAAAA,CAAMqC,CAAAA,CACR,CAAA,EAAG1C,CAAe,CAAA,oBAAA,EAAuB,kBAAA,CAAmB0C,CAAY,CAAC,CAAA,SAAA,CAAA,CACzE,CAAA,EAAG1C,CAAe,CAAA,SAAA,EAAYyC,CAAQ,CAAA,SAAA,CAAA,CACpClC,CAAAA,CAAW,MAAM,KAAA,CAAMF,CAAAA,CAAK,CAChC,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CACP,cAAA,CAAgB,kBAClB,CACF,CAAC,CAAA,CACKG,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAOlC,GAAIA,CAAAA,CAAS,EAAA,CACX,OAAO,CACL,QAAA,CAAUC,CAAAA,CAAK,QAAA,EAAY,EAAC,CAC5B,YAAA,CAAcA,CAAAA,CAAK,YAAA,CACnB,OAAA,CAASA,CAAAA,CAAK,OAAA,EAAW,IAC3B,CAAA,CAGF,GAAIA,CAAAA,CAAK,OAAA,GAAY,KAAA,CACnB,OAAO,CACL,QAAA,CAAUA,EAAK,QAAA,EAAY,EAAC,CAC5B,YAAA,CAAcA,CAAAA,CAAK,YAAA,EAAgB,CAAA,eAAA,EAAkBiC,CAAAA,GAAa,OAAA,CAAU,OAAA,CAAU,OAAO,CAAA,UAAA,CAAA,CAC7F,OAAA,CAAS,KACX,CAAA,CAGF,IAAMhC,EAAQD,CAAAA,CAAK,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,gBAAA,CAEhD,MAAM,IAAI,KAAA,CAAMC,CAAK,CACvB,CAAA,CACA,aAAA,CAAe,MAAO2B,CAAAA,EACpBhC,EAA6C,CAAA,EAAGH,CAAmB,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAY,CAAC,CAAA,KAAA,CAAA,CAAS,CAC9G,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,gBAAA,CAAkB,MAAOA,CAAAA,CAAc1B,CAAAA,GACrCN,EACE,CAAA,EAAGH,CAAmB,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAY,CAAC,CAAA,CAAA,CAC1D,CACE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU1B,CAAK,CAAA,CAC1B,MAAA,CAAQ,OACV,CACF,CAAA,CACF,WAAA,CAAa,MAAO2B,CAAAA,CAAS3B,CAAAA,GAC3BN,CAAAA,CAA4C,CAAA,EAAGF,CAAc,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAO,CAAC,CAAA,CAAA,CAAI,CAC9F,IAAA,CAAM,IAAA,CAAK,UAAU3B,CAAK,CAAA,CAC1B,MAAA,CAAQ,OACV,CAAC,CACL,CACF,CAEO,IAAMiC,CAAAA,CAAN,cAA2B,KAAM,CACtC,MAAA,CAEA,WAAA,CAAYvD,CAAAA,CAAgBC,EAAU,gBAAA,CAAkB,CACtD,KAAA,CAAMA,CAAO,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,cAAA,CACZ,IAAA,CAAK,MAAA,CAASD,EAChB,CACF,CAAA,CAEawD,CAAAA,CAAU,MAAUvC,CAAAA,EAA4B,CAC3D,IAAME,CAAAA,CAAW,MAAM,KAAA,CAAMF,CAAAA,CAAK,CAAE,WAAA,CAAa,SAAU,CAAC,CAAA,CAE5D,GAAI,CAACE,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAIoC,CAAAA,CAAapC,CAAAA,CAAS,MAAM,CAAA,CAGxC,OAAQ,MAAMA,CAAAA,CAAS,IAAA,EACzB,EAEO,SAASsC,CAAAA,CAAMhD,CAAAA,CAyCpB,CACA,IAAMiD,CAAAA,CAAW,gBAAgBjD,CAAS,CAAA,YAAA,CAAA,CACpCK,CAAAA,CAAiB,CAAA,aAAA,EAAgBL,CAAS,CAAA,OAAA,CAAA,CAC1CM,CAAAA,CAAqB,CAAA,aAAA,EAAgBN,CAAS,CAAA,YAAA,CAAA,CAEpD,OAAO,CACL,QAAA,CAAU,CAAC0C,CAAAA,CAAU,KAAO,CAC1B,GAAM,CAAE,MAAA,CAAAQ,CAAAA,CAAS,KAAA,CAAO,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CAAI,MAAA,CAAAC,CAAAA,CAAS,CAAE,CAAA,CAAIV,CAAAA,CAC7CW,CAAAA,CAAS,IAAI,gBAAgB,CAAE,MAAA,CAAAH,CAAAA,CAAQ,KAAA,CAAOC,CAAAA,CAAM,QAAA,EAAS,CAAG,MAAA,CAAQC,CAAAA,CAAO,QAAA,EAAW,CAAC,CAAA,CAEjG,OAAO,CAAA,aAAA,EAAgBpD,CAAS,CAAA,UAAA,EAAaqD,CAAAA,CAAO,QAAA,EAAU,CAAA,CAChE,CAAA,CACA,YAAA,CAAehB,CAAAA,EAAW,CAAA,aAAA,EAAgBrC,CAAS,CAAA,UAAA,EAAa,kBAAA,CAAmBqC,CAAM,CAAC,CAAA,CAAA,CAC1F,eAAA,CAAkBiB,GAChBA,CAAAA,CACI,CAAA,aAAA,EAAgBtD,CAAS,CAAA,wBAAA,EAA2B,kBAAA,CAAmBsD,CAAK,CAAC,CAAA,CAAA,CAC7E,CAAA,aAAA,EAAgBtD,CAAS,CAAA,iBAAA,CAAA,CAC/B,SAAA,CAAYgB,CAAAA,EAAW,CAAA,EAAGV,CAAkB,CAAA,CAAA,EAAI,mBAAmBU,CAAM,CAAC,CAAA,CAAA,CAC1E,eAAA,CAAkBuC,CAAAA,EAAU,CAAA,EAAGjD,CAAkB,CAAA,UAAA,EAAa,kBAAA,CAAmBiD,CAAK,CAAC,CAAA,CAAA,CACvF,UAAA,CAAY,CAACH,CAAAA,CAAS,CAAA,GAAM,GAAG9C,CAAkB,CAAA,QAAA,EAAW8C,CAAAA,CAAO,QAAA,EAAU,CAAA,CAAA,CAC7E,YAAA,CAAc,IAAM,CAAA,aAAA,EAAgBpD,CAAS,CAAA,cAAA,CAAA,CAC7C,QAAA,CAAWmC,CAAAA,EAAe,CAAA,EAAGc,CAAQ,CAAA,WAAA,EAAc,mBAAmBd,CAAU,CAAC,CAAA,CAAA,CACjF,SAAA,CAAW,CAACO,CAAAA,CAAU,EAAC,GAAM,CAC3B,GAAM,CAAE,KAAA,CAAAS,CAAAA,CAAQ,EAAA,CAAI,MAAA,CAAAC,CAAAA,CAAS,EAAG,KAAA,CAAArC,CAAAA,CAAO,MAAA,CAAAxB,CAAO,CAAA,CAAImD,CAAAA,CAC5CW,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,KAAA,CAAOF,CAAAA,CAAM,QAAA,EAAS,CACtB,MAAA,CAAQC,CAAAA,CAAO,UACjB,CAAC,CAAA,CAED,OAAI7D,CAAAA,EACF8D,CAAAA,CAAO,GAAA,CAAI,QAAA,CAAU9D,CAAM,CAAA,CAGzBwB,CAAAA,EACFsC,CAAAA,CAAO,GAAA,CAAI,OAAA,CAAStC,CAAK,CAAA,CAGpB,GAAGkC,CAAQ,CAAA,WAAA,EAAcI,CAAAA,CAAO,QAAA,EAAU,CAAA,CACnD,CAAA,CACA,cAAA,CAAgB,CAAA,EAAGJ,CAAQ,CAAA,kBAAA,CAAA,CAC3B,UAAA,CAAaV,CAAAA,EAAiB,CAAA,EAAGU,CAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmBV,CAAY,CAAC,CAAA,CAAA,CAC7E,cAAA,CAAgB,CAACA,CAAAA,CAAca,CAAAA,CAAS,CAAA,CAAGD,CAAAA,CAAQ,EAAA,GACjD,CAAA,EAAGF,CAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmBV,CAAY,CAAC,CAAA,aAAA,EAAgBa,CAAAA,CAAO,QAAA,EAAU,CAAA,OAAA,EAAUD,CAAAA,CAAM,QAAA,EAAU,CAAA,CAAA,CAC5G,WAAA,CAAa,CAACT,CAAAA,CAAU,EAAC,GAAM,CAC7B,GAAM,CAAE,OAAA,CAAAc,CAAAA,CAAS,KAAA,CAAAL,CAAAA,CAAQ,EAAA,CAAI,MAAA,CAAAC,CAAAA,CAAS,CAAA,CAAG,MAAA,CAAAK,CAAAA,CAAQ,UAAA,CAAAC,CAAW,CAAA,CAAIhB,CAAAA,CAC1DW,CAAAA,CAAS,IAAI,gBAAgB,CACjC,KAAA,CAAOF,CAAAA,CAAM,QAAA,EAAS,CACtB,MAAA,CAAQC,CAAAA,CAAO,QAAA,EACjB,CAAC,CAAA,CAEGI,CAAAA,EAAWA,CAAAA,CAAQ,MAAA,CAAS,CAAA,EAC9BH,CAAAA,CAAO,IAAI,SAAA,CAAWG,CAAAA,CAAQ,GAAA,CAAKG,CAAAA,EAAWA,CAAAA,CAAQ,MAAA,CAAS,OAAQ,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAGhFD,CAAAA,EAAcA,CAAAA,CAAW,MAAA,CAAS,CAAA,EACpCL,EAAO,GAAA,CAAI,YAAA,CAAcK,CAAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAG/C,IAAME,CAAAA,CAAgBH,CAAAA,EAAQ,IAAA,EAAK,CAEnC,OAAIG,CAAAA,EACFP,CAAAA,CAAO,GAAA,CAAI,IAAKO,CAAa,CAAA,CAGxB,CAAA,EAAGX,CAAQ,CAAA,CAAA,EAAII,CAAAA,CAAO,QAAA,EAAU,CAAA,CACzC,CAAA,CACA,aAAA,CAAe,CAAA,EAAGJ,CAAQ,CAAA,QAAA,CAAA,CAC1B,QAAA,CAAU,CAAA,EAAGA,CAAQ,CAAA,SAAA,CAAA,CACrB,GAAA,CAAMlC,CAAAA,EAAU,CAAA,EAAGkC,CAAQ,CAAA,MAAA,EAAS,kBAAA,CAAmBlC,CAAK,CAAC,CAAA,CAAA,CAC7D,UAAA,CAAY,CAAC8C,CAAAA,CAAOT,CAAAA,CAAS,CAAA,CAAGD,CAAAA,CAAQ,EAAA,GACtC,CAAA,EAAGF,CAAQ,CAAA,YAAA,EAAeY,CAAK,CAAA,QAAA,EAAWT,CAAAA,CAAO,QAAA,EAAU,CAAA,OAAA,EAAUD,CAAAA,CAAM,QAAA,EAAU,CAAA,CAAA,CACvF,KAAA,CAAQX,CAAAA,EAAY,GAAGnC,CAAc,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAO,CAAC,CAAA,CAAA,CACpE,MAAA,CAAQ,CAACE,CAAAA,CAAU,EAAC,GAAM,CACxB,GAAM,CAAE,KAAA,CAAAS,CAAAA,CAAQ,GAAI,MAAA,CAAAC,CAAAA,CAAS,CAAA,CAAG,MAAA,CAAAK,CAAAA,CAAQ,UAAA,CAAAC,CAAW,CAAA,CAAIhB,CAAAA,CACjDW,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,KAAA,CAAOF,CAAAA,CAAM,QAAA,GACb,MAAA,CAAQC,CAAAA,CAAO,QAAA,EACjB,CAAC,CAAA,CAEGM,CAAAA,EAAcA,CAAAA,CAAW,MAAA,CAAS,CAAA,EACpCL,CAAAA,CAAO,GAAA,CAAI,YAAA,CAAcK,CAAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAG/C,IAAME,CAAAA,CAAgBH,CAAAA,EAAQ,IAAA,EAAK,CAEnC,OAAIG,CAAAA,EACFP,CAAAA,CAAO,GAAA,CAAI,GAAA,CAAKO,CAAa,CAAA,CAGxB,CAAA,EAAGvD,CAAc,CAAA,CAAA,EAAIgD,EAAO,QAAA,EAAU,CAAA,CAC/C,CAAA,CACA,MAAA,CAAQ,CAAA,aAAA,EAAgBrD,CAAS,CAAA,OAAA,CAAA,CACjC,OAAA,CAAU8D,CAAAA,EACRA,CAAAA,CACI,CAAA,aAAA,EAAgB9D,CAAS,CAAA,iBAAA,EAAoB,kBAAA,CAAmB8D,CAAO,CAAC,CAAA,CAAA,CACxE,CAAA,aAAA,EAAgB9D,CAAS,CAAA,QAAA,CAAA,CAC/B,KAAA,CAAQuC,CAAAA,EACNA,CAAAA,CAAe,CAAA,EAAGU,CAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmBV,CAAY,CAAC,CAAA,MAAA,CAAA,CAAW,CAAA,EAAGU,CAAQ,QACxF,CACF","file":"chunk-DHVKE36X.js","sourcesContent":["export const DICTATION_SAMPLE_RATE = 24_000;\nexport const DICTATION_MAX_DURATION_SECONDS = 60;\nexport const DICTATION_MIN_DURATION_SECONDS = 0.25;\n\nexport function appendDictatedText(existing: string, transcript: string): string {\n const dictated = transcript.trim();\n\n if (!dictated) {\n return existing;\n }\n\n if (!existing.trim()) {\n return existing.length === 0 ? dictated : `${existing}${dictated}`;\n }\n\n if (/\\s$/.test(existing) || /^[.,!?;:]/.test(dictated)) {\n return `${existing}${dictated}`;\n }\n\n return `${existing} ${dictated}`;\n}\n\nexport async function convertRecordedAudioToPcm(blob: Blob): Promise<{ durationSeconds: number; pcm: Blob }> {\n if (typeof window === 'undefined') {\n throw new Error('Dictation is only available in the browser.');\n }\n\n const AudioContextCtor = window.AudioContext ?? window.webkitAudioContext;\n\n if (!AudioContextCtor) {\n throw new Error('This browser cannot decode recorded audio.');\n }\n\n const arrayBuffer = await blob.arrayBuffer();\n const audioContext = new AudioContextCtor();\n\n try {\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer.slice(0));\n const mono = mixToMono(audioBuffer);\n const resampled = resample(mono, audioBuffer.sampleRate, DICTATION_SAMPLE_RATE);\n const pcm = floatToPcm16(resampled);\n const durationSeconds = resampled.length / DICTATION_SAMPLE_RATE;\n\n if (durationSeconds < DICTATION_MIN_DURATION_SECONDS) {\n throw new Error('No speech was captured. Try again.');\n }\n\n if (durationSeconds > DICTATION_MAX_DURATION_SECONDS) {\n throw new Error(`Dictation is limited to ${String(DICTATION_MAX_DURATION_SECONDS)} seconds.`);\n }\n\n return {\n durationSeconds,\n pcm: new Blob([pcm], { type: 'audio/pcm' }),\n };\n } finally {\n await audioContext.close();\n }\n}\n\nfunction mixToMono(buffer: AudioBuffer): Float32Array {\n const { length, numberOfChannels: channelCount } = buffer;\n\n if (channelCount === 1) {\n return buffer.getChannelData(0).slice();\n }\n\n const mono = new Float32Array(length);\n\n for (let index = 0; index < length; index += 1) {\n let sum = 0;\n\n for (let channel = 0; channel < channelCount; channel += 1) {\n sum += buffer.getChannelData(channel)[index] ?? 0;\n }\n\n mono[index] = sum / channelCount;\n }\n\n return mono;\n}\n\nfunction resample(samples: Float32Array, sourceRate: number, targetRate: number): Float32Array {\n if (sourceRate === targetRate) {\n return samples;\n }\n\n const ratio = sourceRate / targetRate;\n const outputLength = Math.max(1, Math.round(samples.length / ratio));\n const output = new Float32Array(outputLength);\n\n for (let index = 0; index < outputLength; index += 1) {\n const sourceIndex = index * ratio;\n const left = Math.floor(sourceIndex);\n const right = Math.min(left + 1, samples.length - 1);\n const fraction = sourceIndex - left;\n const leftSample = samples[left] ?? 0;\n const rightSample = samples[right] ?? 0;\n output[index] = leftSample + (rightSample - leftSample) * fraction;\n }\n\n return output;\n}\n\nfunction floatToPcm16(samples: Float32Array): ArrayBuffer {\n const buffer = new ArrayBuffer(samples.length * 2);\n const view = new DataView(buffer);\n\n for (let index = 0; index < samples.length; index += 1) {\n const sample = Math.max(-1, Math.min(1, samples[index] ?? 0));\n view.setInt16(index * 2, sample < 0 ? sample * 0x8000 : sample * 0x7fff, true);\n }\n\n return buffer;\n}\n\ndeclare global {\n interface Window {\n webkitAudioContext?: typeof AudioContext;\n }\n}\n","import { getKnowledgeFileProblem } from '../knowledge/knowledge';\nimport type { PluginConnection, PluginScope, PluginTools } from './plugin-types';\nimport { put } from '@vercel/blob/client';\nimport { convertRecordedAudioToPcm } from './agent/dictation';\nimport { getDesktop } from '../../core/desktop';\nimport { flexkitDomain } from '../../core/domains';\nimport type {\n ActivityItem,\n ActivityItemState,\n AgentChat,\n AgentChatAttachment,\n AgentChatFollowUpResult,\n AgentChatMessage,\n AgentChatMonitor,\n AgentChatQuestion,\n AgentChatQuestionResponse,\n AgentChatTurn,\n Automation,\n AutomationApproval,\n AutomationApprovalStatus,\n AutomationArtifact,\n AutomationInput,\n AutomationToolChannel,\n AutomationToolProvider,\n AutomationVisibility,\n MutationResult,\n Skill,\n SkillInput,\n} from './types';\n\nexport interface DecideApprovalInput {\n /** Approve and always allow this plugin tool for the automation. */\n remember?: boolean;\n approved: boolean;\n /** For a proposed automation: the approver's edited instructions and whether to run it once now. */\n automationEdits?: { instructions?: string; runOnce?: boolean };\n force?: boolean;\n reason?: string;\n}\n\nexport interface SendAgentChatMessageInput {\n attachments?: AgentChatAttachment[];\n content: string;\n modelId?: string | null;\n}\n\n/** A new chat and its first turn, started by one request. */\nexport interface StartAgentChatResult {\n chat: AgentChat;\n turn: AgentChatTurn;\n}\n\n/** Lowercase hex SHA-256 of a file, or undefined where the browser cannot hash (insecure contexts). */\nasync function sha256Hex(file: File): Promise<string | undefined> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n return undefined;\n }\n\n try {\n const digest = await crypto.subtle.digest('SHA-256', await file.arrayBuffer());\n\n return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, '0')).join('');\n } catch {\n return undefined;\n }\n}\n\n/** Thrown when the API refuses an upload; `code` lets the UI tailor the message. */\nexport class AgentUploadError extends Error {\n code: string | null;\n status: number;\n\n constructor(status: number, message: string, code: string | null = null) {\n super(message);\n this.name = 'AgentUploadError';\n this.code = code;\n this.status = status;\n }\n}\n\nexport interface ApiClient {\n /** Starts OAuth for a new account, or for `connectionId` to reconnect that specific account. */\n connectPlugins: (_input: {\n pluginId: string;\n scope: PluginScope;\n studioOrigin: string;\n connectionId?: string;\n }) => Promise<{ transactionId: string; authorizeUrl: string; completionOrigin: string; launchTicket: string }>;\n /** Renames (label null resets to the provider name) or makes a connection primary. */\n updatePluginConnection: (\n _id: string,\n _input: { label?: string | null; primary?: true }\n ) => Promise<{ connection: PluginConnection }>;\n pluginOAuthStatus: (\n _id: string\n ) => Promise<{ id: string; status: 'pending' | 'exchanging' | 'complete' | 'failed'; expires_at: string }>;\n disconnectPlugin: (_id: string) => Promise<{ success: boolean }>;\n installPlugin: (_id: string) => Promise<unknown>;\n setPluginPolicy: (_id: string, _input: { enabled: boolean; allowPersonal: boolean }) => Promise<{ success: boolean }>;\n refreshPluginTools: (_id: string) => Promise<PluginTools>;\n\n cancelRun: (_runId: string) => Promise<MutationResult>;\n createAgentChat: (_input?: { modelId?: string | null }) => Promise<{ chat: AgentChat }>;\n deleteAgentChat: (_chatId: string) => Promise<{ success: boolean }>;\n getAgentChatStreamUrl: (_chatId: string, _workflowRunId: string) => string;\n renameAgentChat: (_chatId: string, _title: string) => Promise<{ chat: AgentChat }>;\n sendAgentChatMessage: (_chatId: string, _input: SendAgentChatMessageInput) => Promise<AgentChatTurn>;\n /**\n * Sends a message while the chat's turn is running. The platform decides\n * whether it steers that turn or waits as the next one; if the turn has\n * meanwhile ended, the message starts the next turn.\n */\n sendAgentChatFollowUp: (_chatId: string, _input: SendAgentChatMessageInput) => Promise<AgentChatFollowUpResult>;\n /** The user connected a plugin from the chat's connect card: starts the turn that uses it, or queues it. */\n announcePluginConnected: (\n _chatId: string,\n _pluginId: string\n ) => Promise<Extract<AgentChatFollowUpResult, { followUp: unknown } | { turn: unknown }>>;\n /** Answers (or dismisses) the questions a chat turn waits on; a settled question comes back with an error. */\n answerAgentChatQuestion: (\n _chatId: string,\n _questionId: string,\n _response: AgentChatQuestionResponse\n ) => Promise<{ errorMessage?: string; question?: AgentChatQuestion }>;\n /** Creates a chat and sends its first message in one request. */\n startAgentChat: (_input: SendAgentChatMessageInput) => Promise<StartAgentChatResult>;\n /** Starts the next turn from a queued follow-up once the previous turn has ended. */\n startQueuedAgentChatMessage: (_chatId: string, _messageId: string) => Promise<AgentChatTurn>;\n stopAgentChat: (_chatId: string) => Promise<{ message: AgentChatMessage }>;\n stopAgentChatMonitor: (_chatId: string, _monitorId: string) => Promise<{ monitor: AgentChatMonitor }>;\n transcribeAgentAudio: (_audio: Blob, _signal?: AbortSignal) => Promise<{ text: string }>;\n /** Uploads a chat attachment straight to the platform file store. */\n uploadAgentChatAttachment: (_file: File, _signal?: AbortSignal) => Promise<AgentChatAttachment>;\n decideApproval: (\n _approvalId: string,\n _input: DecideApprovalInput\n ) => Promise<MutationResult & { approval?: AutomationApproval }>;\n createAutomation: (_input: AutomationInput) => Promise<MutationResult & { automation?: Automation }>;\n createSkill: (_input: SkillInput) => Promise<MutationResult & { skill?: Skill }>;\n deleteAutomation: (_automationId: string) => Promise<MutationResult>;\n deleteSkill: (_skillId: string) => Promise<MutationResult>;\n getArtifactUrl: (_artifactId: string, _options?: { download?: boolean }) => string;\n getRunArtifacts: (_workflowRunId: string) => Promise<AutomationArtifact[]>;\n getStreamUrl: (_workflowRunId: string) => string;\n /** JSON transcript of a finished run (owners and developers). */\n getTranscriptUrl: (_runId: string) => string;\n /** Lists delivery channels of `connectionId`, or of the provider's primary project account when omitted. */\n listChannels: (\n _provider: AutomationToolProvider,\n _connectionId?: string | null\n ) => Promise<{\n channels: AutomationToolChannel[];\n errorMessage?: string;\n success: boolean;\n }>;\n runAutomation: (_automationId: string) => Promise<MutationResult & { runId?: string }>;\n updateAutomation: (\n _automationId: string,\n _input: AutomationInput\n ) => Promise<MutationResult & { automation?: Automation }>;\n updateSkill: (_skillId: string, _input: SkillInput) => Promise<MutationResult & { skill?: Skill }>;\n /** Marks the caller's Activity items read; `'all'` marks every unread item. */\n markActivityRead: (_ids: string[] | 'all') => Promise<{ success: boolean }>;\n setActivityItemState: (\n _itemId: string,\n _state: Extract<ActivityItemState, 'unread' | 'read' | 'dismissed'>\n ) => Promise<{ item: ActivityItem }>;\n}\n\nfunction getApiRootDomain(): string {\n if (typeof window === 'undefined') {\n return 'flexkit.io';\n }\n\n // The desktop app serves the Studio on its own scheme (`flexkit://app`), so\n // its page hostname says nothing; the backend it was built for does.\n if (getDesktop()) {\n return flexkitDomain;\n }\n\n const { hostname } = window.location;\n const isDevHost =\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === 'flexkit.test' ||\n hostname.endsWith('.flexkit.test');\n\n return isDevHost ? 'flexkit.test' : 'flexkit.io';\n}\n\n/** Origin that hosts plugin OAuth start and completion. */\nexport function getPlatformOrigin(): string {\n return `https://${getApiRootDomain()}`;\n}\n\n/** Public URL an external system calls to fire a webhook trigger. */\nexport function getWebhookTriggerUrl(projectId: string, token: string): string {\n return `https://${projectId}.api.${getApiRootDomain()}/automations/webhook/${encodeURIComponent(token)}`;\n}\n\nexport function createApiClient(projectId: string): ApiClient {\n const projectBasePath = `/api/flexkit/${projectId}`;\n const automationsBasePath = `${projectBasePath}/automations`;\n const skillsBasePath = `${projectBasePath}/skills`;\n const agentChatsBasePath = `${projectBasePath}/agent/chats`;\n\n async function request<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n ...(init?.headers ?? {}),\n },\n ...init,\n });\n const data = (await response.json()) as T;\n\n if (!response.ok) {\n const error = data && typeof data === 'object' && 'error' in data ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n }\n\n return data;\n }\n\n return {\n connectPlugins: (input) =>\n request(`${projectBasePath}/plugins/connect`, { method: 'POST', body: JSON.stringify(input) }),\n pluginOAuthStatus: (id) => request(`${projectBasePath}/plugins/oauth-transactions/${encodeURIComponent(id)}`),\n updatePluginConnection: (id, input) =>\n request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n }),\n disconnectPlugin: (id) =>\n request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}`, { method: 'DELETE' }),\n installPlugin: (id) =>\n request(`${projectBasePath}/plugins/${encodeURIComponent(id)}/installation`, {\n method: 'PUT',\n body: JSON.stringify({}),\n }),\n setPluginPolicy: (id, input) =>\n request(`${projectBasePath}/plugins/${encodeURIComponent(id)}/policy`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n }),\n refreshPluginTools: (id) =>\n request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}/tools/refresh`, { method: 'POST' }),\n cancelRun: async (runId) =>\n request<MutationResult>(`${automationsBasePath}/runs/${encodeURIComponent(runId)}/cancel`, { method: 'POST' }),\n createAgentChat: async (input) =>\n request<{ chat: AgentChat }>(agentChatsBasePath, {\n body: JSON.stringify({ modelId: input?.modelId ?? null }),\n method: 'POST',\n }),\n deleteAgentChat: async (chatId) =>\n request<{ success: boolean }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}`, { method: 'DELETE' }),\n getAgentChatStreamUrl: (chatId, workflowRunId) =>\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/stream?workflowRunId=${encodeURIComponent(workflowRunId)}`,\n renameAgentChat: async (chatId, title) =>\n request<{ chat: AgentChat }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}`, {\n body: JSON.stringify({ title }),\n method: 'PATCH',\n }),\n sendAgentChatMessage: async (chatId, input) =>\n request<AgentChatTurn>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/messages`, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n announcePluginConnected: async (chatId, pluginId) =>\n request(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/plugin-connected`, {\n body: JSON.stringify({ pluginId }),\n method: 'POST',\n }),\n sendAgentChatFollowUp: async (chatId, input) =>\n request<AgentChatFollowUpResult>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/follow-ups`, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n answerAgentChatQuestion: async (chatId, questionId, response) => {\n const result = await fetch(\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/questions/${encodeURIComponent(questionId)}/answer`,\n {\n body: JSON.stringify(response),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n }\n );\n const data = (await result.json()) as { errorMessage?: string; error?: string; question?: AgentChatQuestion };\n\n // A question settled elsewhere (409) comes back with its final state for the card to show.\n if (!result.ok && !data.question) {\n throw new Error(data.errorMessage ?? data.error ?? 'Request failed');\n }\n\n return { errorMessage: result.ok ? undefined : data.errorMessage, question: data.question };\n },\n startAgentChat: async ({ attachments, content, modelId }) =>\n request<StartAgentChatResult>(agentChatsBasePath, {\n body: JSON.stringify({ message: { attachments, content }, modelId: modelId ?? null }),\n method: 'POST',\n }),\n startQueuedAgentChatMessage: async (chatId, messageId) =>\n request<AgentChatTurn>(\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/follow-ups/${encodeURIComponent(messageId)}/start`,\n { method: 'POST' }\n ),\n stopAgentChat: async (chatId) =>\n request<{ message: AgentChatMessage }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/stop`, {\n method: 'POST',\n }),\n stopAgentChatMonitor: async (chatId, monitorId) =>\n request<{ monitor: AgentChatMonitor }>(\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/monitors/${encodeURIComponent(monitorId)}/stop`,\n { method: 'POST' }\n ),\n transcribeAgentAudio: async (audio, signal) => {\n const { durationSeconds, pcm } = await convertRecordedAudioToPcm(audio);\n const formData = new FormData();\n formData.append('file', pcm, 'audio.pcm');\n formData.append('durationSeconds', String(durationSeconds));\n\n const response = await fetch(`${projectBasePath}/agent/transcribe`, {\n body: formData,\n credentials: 'include',\n method: 'POST',\n signal,\n });\n const data = (await response.json()) as { error?: string; text?: string };\n\n if (!response.ok) {\n const error = data && typeof data === 'object' && data.error ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n }\n\n if (!data.text?.trim()) {\n throw new Error('No speech was recognized. Try again.');\n }\n\n return { text: data.text };\n },\n uploadAgentChatAttachment: async (file, signal) => {\n // The platform issues a token scoped to one pathname, type and size; the\n // browser then writes the bytes to the store directly, so large files\n // never pass through the API function body limit. The hash is computed\n // alongside: Knowledge documents are keyed by it, so the platform can tell\n // later whether this file is already one.\n const [tokenResponse, sha256] = await Promise.all([\n fetch(`${projectBasePath}/agent/uploads`, {\n body: JSON.stringify({ filename: file.name, mediaType: file.type || null, sizeBytes: file.size }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal,\n }),\n // Only files Knowledge can index are worth hashing; a screenshot never matches a document.\n getKnowledgeFileProblem({ name: file.name, size: file.size }) === null ? sha256Hex(file) : undefined,\n ]);\n const tokenData = (await tokenResponse.json()) as {\n code?: string;\n error?: string;\n mediaType?: string;\n pathname?: string;\n token?: string;\n };\n\n if (!tokenResponse.ok || !tokenData.pathname || !tokenData.token || !tokenData.mediaType) {\n throw new AgentUploadError(\n tokenResponse.status,\n tokenData.error ? String(tokenData.error) : 'The file could not be uploaded.',\n tokenData.code ?? null\n );\n }\n\n const blob = await put(tokenData.pathname, file, {\n abortSignal: signal,\n access: 'public',\n contentType: tokenData.mediaType,\n token: tokenData.token,\n });\n\n return {\n filename: file.name,\n mediaType: tokenData.mediaType,\n sizeBytes: file.size,\n url: blob.url,\n ...(sha256 ? { sha256 } : {}),\n };\n },\n decideApproval: async (approvalId, input) => {\n const response = await fetch(`${automationsBasePath}/approvals/${encodeURIComponent(approvalId)}/decide`, {\n body: JSON.stringify(input),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n });\n const data = (await response.json()) as MutationResult & { approval?: AutomationApproval; error?: string };\n\n // Business errors (stale_preview, already_decided) come back as 400\n // with a structured body the caller must be able to inspect.\n if (!response.ok && typeof data.success !== 'boolean') {\n throw new Error(data.error ? String(data.error) : 'Request failed');\n }\n\n return data;\n },\n markActivityRead: async (ids) =>\n request<{ success: boolean }>(`${projectBasePath}/activity/read`, {\n body: JSON.stringify(ids === 'all' ? { all: true } : { ids }),\n method: 'POST',\n }),\n setActivityItemState: async (itemId, state) =>\n request<{ item: ActivityItem }>(`${projectBasePath}/activity/${encodeURIComponent(itemId)}`, {\n body: JSON.stringify({ state }),\n method: 'PATCH',\n }),\n createAutomation: async (input) =>\n request<MutationResult & { automation?: Automation }>(automationsBasePath, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n createSkill: async (input) =>\n request<MutationResult & { skill?: Skill }>(skillsBasePath, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n deleteAutomation: async (automationId) =>\n request<MutationResult>(`${automationsBasePath}/${encodeURIComponent(automationId)}`, { method: 'DELETE' }),\n deleteSkill: async (skillId) =>\n request<MutationResult>(`${skillsBasePath}/${encodeURIComponent(skillId)}`, { method: 'DELETE' }),\n getArtifactUrl: (artifactId, options) => {\n const suffix = options?.download ? '?download=1' : '';\n\n return `${automationsBasePath}/artifacts/${encodeURIComponent(artifactId)}/content${suffix}`;\n },\n getRunArtifacts: async (workflowRunId) =>\n request<{ artifacts: AutomationArtifact[] }>(\n `${automationsBasePath}/runs/${encodeURIComponent(workflowRunId)}/artifacts`\n ).then((response) => response.artifacts),\n getStreamUrl: (workflowRunId) => `${automationsBasePath}/runs/${encodeURIComponent(workflowRunId)}/stream`,\n getTranscriptUrl: (runId) => `${automationsBasePath}/runs/${encodeURIComponent(runId)}/transcript`,\n listChannels: async (provider, connectionId) => {\n const url = connectionId\n ? `${projectBasePath}/plugin-connections/${encodeURIComponent(connectionId)}/channels`\n : `${projectBasePath}/plugins/${provider}/channels`;\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n const data = (await response.json()) as {\n channels?: AutomationToolChannel[];\n error?: string;\n errorMessage?: string;\n success?: boolean;\n };\n\n if (response.ok) {\n return {\n channels: data.channels ?? [],\n errorMessage: data.errorMessage,\n success: data.success ?? true,\n };\n }\n\n if (data.success === false) {\n return {\n channels: data.channels ?? [],\n errorMessage: data.errorMessage ?? `Failed to load ${provider === 'slack' ? 'Slack' : 'Teams'} channels.`,\n success: false,\n };\n }\n\n const error = data.error ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n },\n runAutomation: async (automationId) =>\n request<MutationResult & { runId?: string }>(`${automationsBasePath}/${encodeURIComponent(automationId)}/runs`, {\n method: 'POST',\n }),\n updateAutomation: async (automationId, input) =>\n request<MutationResult & { automation?: Automation }>(\n `${automationsBasePath}/${encodeURIComponent(automationId)}`,\n {\n body: JSON.stringify(input),\n method: 'PATCH',\n }\n ),\n updateSkill: async (skillId, input) =>\n request<MutationResult & { skill?: Skill }>(`${skillsBasePath}/${encodeURIComponent(skillId)}`, {\n body: JSON.stringify(input),\n method: 'PATCH',\n }),\n };\n}\n\nexport class FetcherError extends Error {\n status: number;\n\n constructor(status: number, message = 'Request failed') {\n super(message);\n this.name = 'FetcherError';\n this.status = status;\n }\n}\n\nexport const fetcher = async <T>(url: string): Promise<T> => {\n const response = await fetch(url, { credentials: 'include' });\n\n if (!response.ok) {\n throw new FetcherError(response.status);\n }\n\n return (await response.json()) as T;\n};\n\nexport function paths(projectId: string): {\n activity: (_options?: { filter?: 'all' | 'needs_action'; limit?: number; offset?: number }) => string;\n activityItem: (_itemId: string) => string;\n /** Badge counts; with `since`, also the unread items created after it. */\n activitySummary: (_since?: string | null) => string;\n agentChat: (_chatId: string) => string;\n agentChatSearch: (_query: string) => string;\n agentChats: (_offset?: number) => string;\n agentProfile: () => string;\n approval: (_approvalId: string) => string;\n approvals: (_options?: {\n limit?: number;\n offset?: number;\n runId?: string;\n status?: AutomationApprovalStatus;\n }) => string;\n approvalsCount: string;\n automation: (_automationId: string) => string;\n automationRuns: (_automationId: string, _offset?: number, _limit?: number) => string;\n automations: (_options?: {\n enabled?: boolean[];\n limit?: number;\n offset?: number;\n search?: string;\n visibility?: AutomationVisibility[];\n }) => string;\n creditBalance: string;\n entities: string;\n run: (_runId: string) => string;\n runHistory: (_scope: 'mine' | 'team', _offset?: number, _limit?: number) => string;\n skill: (_skillId: string) => string;\n skills: (_options?: {\n limit?: number;\n offset?: number;\n search?: string;\n visibility?: AutomationVisibility[];\n }) => string;\n spaces: string;\n /** Members for pickers; with a space id, only members who can see that space. */\n members: (_spaceId?: string | null) => string;\n tools: (_automationId?: string) => string;\n} {\n const basePath = `/api/flexkit/${projectId}/automations`;\n const skillsBasePath = `/api/flexkit/${projectId}/skills`;\n const agentChatsBasePath = `/api/flexkit/${projectId}/agent/chats`;\n\n return {\n activity: (options = {}) => {\n const { filter = 'all', limit = 25, offset = 0 } = options;\n const params = new URLSearchParams({ filter, limit: limit.toString(), offset: offset.toString() });\n\n return `/api/flexkit/${projectId}/activity?${params.toString()}`;\n },\n activityItem: (itemId) => `/api/flexkit/${projectId}/activity/${encodeURIComponent(itemId)}`,\n activitySummary: (since) =>\n since\n ? `/api/flexkit/${projectId}/activity/summary?since=${encodeURIComponent(since)}`\n : `/api/flexkit/${projectId}/activity/summary`,\n agentChat: (chatId) => `${agentChatsBasePath}/${encodeURIComponent(chatId)}`,\n agentChatSearch: (query) => `${agentChatsBasePath}/search?q=${encodeURIComponent(query)}`,\n agentChats: (offset = 0) => `${agentChatsBasePath}?offset=${offset.toString()}`,\n agentProfile: () => `/api/flexkit/${projectId}/agent/profile`,\n approval: (approvalId) => `${basePath}/approvals/${encodeURIComponent(approvalId)}`,\n approvals: (options = {}) => {\n const { limit = 25, offset = 0, runId, status } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (status) {\n params.set('status', status);\n }\n\n if (runId) {\n params.set('runId', runId);\n }\n\n return `${basePath}/approvals?${params.toString()}`;\n },\n approvalsCount: `${basePath}/approvals?limit=1`,\n automation: (automationId) => `${basePath}/${encodeURIComponent(automationId)}`,\n automationRuns: (automationId, offset = 0, limit = 25) =>\n `${basePath}/${encodeURIComponent(automationId)}/runs?offset=${offset.toString()}&limit=${limit.toString()}`,\n automations: (options = {}) => {\n const { enabled, limit = 25, offset = 0, search, visibility } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (enabled && enabled.length > 0) {\n params.set('enabled', enabled.map((value) => (value ? 'true' : 'false')).join(','));\n }\n\n if (visibility && visibility.length > 0) {\n params.set('visibility', visibility.join(','));\n }\n\n const trimmedSearch = search?.trim();\n\n if (trimmedSearch) {\n params.set('q', trimmedSearch);\n }\n\n return `${basePath}?${params.toString()}`;\n },\n creditBalance: `${basePath}/credits`,\n entities: `${basePath}/entities`,\n run: (runId) => `${basePath}/runs/${encodeURIComponent(runId)}`,\n runHistory: (scope, offset = 0, limit = 25) =>\n `${basePath}/runs?scope=${scope}&offset=${offset.toString()}&limit=${limit.toString()}`,\n skill: (skillId) => `${skillsBasePath}/${encodeURIComponent(skillId)}`,\n skills: (options = {}) => {\n const { limit = 25, offset = 0, search, visibility } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (visibility && visibility.length > 0) {\n params.set('visibility', visibility.join(','));\n }\n\n const trimmedSearch = search?.trim();\n\n if (trimmedSearch) {\n params.set('q', trimmedSearch);\n }\n\n return `${skillsBasePath}?${params.toString()}`;\n },\n spaces: `/api/flexkit/${projectId}/spaces`,\n members: (spaceId) =>\n spaceId\n ? `/api/flexkit/${projectId}/members?spaceId=${encodeURIComponent(spaceId)}`\n : `/api/flexkit/${projectId}/members`,\n tools: (automationId) =>\n automationId ? `${basePath}/${encodeURIComponent(automationId)}/tools` : `${basePath}/tools`,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/apps/ai/agent/dictation.ts","../src/apps/ai/api.ts"],"names":["appendDictatedText","existing","transcript","dictated","convertRecordedAudioToPcm","blob","AudioContextCtor","arrayBuffer","audioContext","audioBuffer","mono","mixToMono","resampled","resample","pcm","floatToPcm16","durationSeconds","buffer","length","channelCount","index","sum","channel","samples","sourceRate","targetRate","ratio","outputLength","output","sourceIndex","left","right","fraction","leftSample","rightSample","view","sample","sha256Hex","file","digest","byte","AgentUploadError","status","message","code","getApiRootDomain","getDesktop","flexkitDomain","hostname","getPlatformOrigin","getWebhookTriggerUrl","projectId","token","createApiClient","projectBasePath","automationsBasePath","skillsBasePath","agentChatsBasePath","request","url","init","response","data","error","input","id","runId","chatId","workflowRunId","title","pluginId","questionId","result","attachments","content","modelId","messageId","monitorId","audio","signal","formData","tokenResponse","sha256","getKnowledgeFileProblem","tokenData","put","approvalId","ids","itemId","state","automationId","skillId","artifactId","options","suffix","provider","connectionId","FetcherError","fetcher","paths","basePath","filter","limit","offset","params","since","query","enabled","search","visibility","value","trimmedSearch","scope","spaceId"],"mappings":"2IAIO,SAASA,CAAAA,CAAmBC,CAAAA,CAAkBC,CAAAA,CAA4B,CAC/E,IAAMC,CAAAA,CAAWD,CAAAA,CAAW,IAAA,EAAK,CAEjC,OAAKC,CAAAA,CAIAF,CAAAA,CAAS,IAAA,EAAK,CAIf,KAAA,CAAM,IAAA,CAAKA,CAAQ,CAAA,EAAK,WAAA,CAAY,IAAA,CAAKE,CAAQ,CAAA,CAC5C,CAAA,EAAGF,CAAQ,CAAA,EAAGE,CAAQ,CAAA,CAAA,CAGxB,CAAA,EAAGF,CAAQ,CAAA,CAAA,EAAIE,CAAQ,CAAA,CAAA,CAPrBF,CAAAA,CAAS,MAAA,GAAW,CAAA,CAAIE,CAAAA,CAAW,CAAA,EAAGF,CAAQ,CAAA,EAAGE,CAAQ,CAAA,CAAA,CAJzDF,CAYX,CAEA,eAAsBG,CAAAA,CAA0BC,EAA6D,CAC3G,GAAI,OAAO,MAAA,CAAW,GAAA,CACpB,MAAM,IAAI,KAAA,CAAM,6CAA6C,CAAA,CAG/D,IAAMC,CAAAA,CAAmB,MAAA,CAAO,YAAA,EAAgB,MAAA,CAAO,kBAAA,CAEvD,GAAI,CAACA,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAG9D,IAAMC,CAAAA,CAAc,MAAMF,CAAAA,CAAK,WAAA,EAAY,CACrCG,CAAAA,CAAe,IAAIF,CAAAA,CAEzB,GAAI,CACF,IAAMG,CAAAA,CAAc,MAAMD,CAAAA,CAAa,eAAA,CAAgBD,CAAAA,CAAY,KAAA,CAAM,CAAC,CAAC,CAAA,CACrEG,CAAAA,CAAOC,CAAAA,CAAUF,CAAW,CAAA,CAC5BG,EAAYC,CAAAA,CAASH,CAAAA,CAAMD,CAAAA,CAAY,UAAA,CAAY,IAAqB,CAAA,CACxEK,CAAAA,CAAMC,CAAAA,CAAaH,CAAS,CAAA,CAC5BI,CAAAA,CAAkBJ,CAAAA,CAAU,MAAA,CAAS,IAAA,CAE3C,GAAII,CAAAA,CAAkB,IACpB,MAAM,IAAI,KAAA,CAAM,oCAAoC,CAAA,CAGtD,GAAIA,CAAAA,CAAkB,EAAA,CACpB,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,MAAA,CAAO,EAA8B,CAAC,CAAA,SAAA,CAAW,EAG9F,OAAO,CACL,eAAA,CAAAA,CAAAA,CACA,GAAA,CAAK,IAAI,IAAA,CAAK,CAACF,CAAG,CAAA,CAAG,CAAE,IAAA,CAAM,WAAY,CAAC,CAC5C,CACF,CAAA,OAAE,CACA,MAAMN,CAAAA,CAAa,KAAA,GACrB,CACF,CAEA,SAASG,CAAAA,CAAUM,CAAAA,CAAmC,CACpD,GAAM,CAAE,MAAA,CAAAC,CAAAA,CAAQ,iBAAkBC,CAAa,CAAA,CAAIF,CAAAA,CAEnD,GAAIE,CAAAA,GAAiB,CAAA,CACnB,OAAOF,CAAAA,CAAO,cAAA,CAAe,CAAC,CAAA,CAAE,KAAA,EAAM,CAGxC,IAAMP,CAAAA,CAAO,IAAI,aAAaQ,CAAM,CAAA,CAEpC,IAAA,IAASE,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQF,CAAAA,CAAQE,CAAAA,EAAS,CAAA,CAAG,CAC9C,IAAIC,CAAAA,CAAM,CAAA,CAEV,IAAA,IAASC,CAAAA,CAAU,CAAA,CAAGA,EAAUH,CAAAA,CAAcG,CAAAA,EAAW,CAAA,CACvDD,CAAAA,EAAOJ,CAAAA,CAAO,cAAA,CAAeK,CAAO,CAAA,CAAEF,CAAK,CAAA,EAAK,CAAA,CAGlDV,CAAAA,CAAKU,CAAK,CAAA,CAAIC,CAAAA,CAAMF,EACtB,CAEA,OAAOT,CACT,CAEA,SAASG,CAAAA,CAASU,CAAAA,CAAuBC,CAAAA,CAAoBC,CAAAA,CAAkC,CAC7F,GAAID,CAAAA,GAAeC,CAAAA,CACjB,OAAOF,CAAAA,CAGT,IAAMG,CAAAA,CAAQF,EAAaC,CAAAA,CACrBE,CAAAA,CAAe,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,KAAA,CAAMJ,CAAAA,CAAQ,MAAA,CAASG,CAAK,CAAC,CAAA,CAC7DE,CAAAA,CAAS,IAAI,YAAA,CAAaD,CAAY,EAE5C,IAAA,IAASP,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQO,CAAAA,CAAcP,CAAAA,EAAS,CAAA,CAAG,CACpD,IAAMS,CAAAA,CAAcT,CAAAA,CAAQM,CAAAA,CACtBI,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMD,CAAW,EAC7BE,CAAAA,CAAQ,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAO,CAAA,CAAGP,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAC7CS,CAAAA,CAAWH,CAAAA,CAAcC,CAAAA,CACzBG,CAAAA,CAAaV,CAAAA,CAAQO,CAAI,CAAA,EAAK,CAAA,CAC9BI,CAAAA,CAAcX,CAAAA,CAAQQ,CAAK,CAAA,EAAK,CAAA,CACtCH,CAAAA,CAAOR,CAAK,CAAA,CAAIa,CAAAA,CAAAA,CAAcC,CAAAA,CAAcD,CAAAA,EAAcD,EAC5D,CAEA,OAAOJ,CACT,CAEA,SAASb,CAAAA,CAAaQ,CAAAA,CAAoC,CACxD,IAAMN,CAAAA,CAAS,IAAI,WAAA,CAAYM,CAAAA,CAAQ,MAAA,CAAS,CAAC,CAAA,CAC3CY,CAAAA,CAAO,IAAI,QAAA,CAASlB,CAAM,EAEhC,IAAA,IAASG,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQG,CAAAA,CAAQ,MAAA,CAAQH,CAAAA,EAAS,CAAA,CAAG,CACtD,IAAMgB,CAAAA,CAAS,IAAA,CAAK,GAAA,CAAI,EAAA,CAAI,IAAA,CAAK,GAAA,CAAI,EAAGb,CAAAA,CAAQH,CAAK,CAAA,EAAK,CAAC,CAAC,CAAA,CAC5De,CAAAA,CAAK,QAAA,CAASf,CAAAA,CAAQ,CAAA,CAAGgB,CAAAA,CAAS,CAAA,CAAIA,CAAAA,CAAS,KAAA,CAASA,CAAAA,CAAS,KAAA,CAAQ,IAAI,EAC/E,CAEA,OAAOnB,CACT,CC7DA,eAAeoB,CAAAA,CAAUC,CAAAA,CAAyC,CAChE,GAAI,EAAA,OAAO,OAAW,GAAA,EAAe,CAAC,MAAA,CAAO,MAAA,CAAA,CAI7C,GAAI,CACF,IAAMC,CAAAA,CAAS,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAW,MAAMD,CAAAA,CAAK,WAAA,EAAa,CAAA,CAE7E,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,UAAA,CAAWC,CAAM,CAAA,CAAIC,CAAAA,EAASA,CAAAA,CAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CACjG,CAAA,KAAQ,CACN,MACF,CACF,CAGO,IAAMC,CAAAA,CAAN,cAA+B,KAAM,CAC1C,IAAA,CACA,MAAA,CAEA,WAAA,CAAYC,CAAAA,CAAgBC,CAAAA,CAAiBC,CAAAA,CAAsB,IAAA,CAAM,CACvE,KAAA,CAAMD,CAAO,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,kBAAA,CACZ,IAAA,CAAK,IAAA,CAAOC,CAAAA,CACZ,IAAA,CAAK,OAASF,EAChB,CACF,CAAA,CA2FA,SAASG,CAAAA,EAA2B,CAClC,GAAI,OAAO,MAAA,CAAW,GAAA,CACpB,OAAO,YAAA,CAKT,GAAIC,GAAAA,EAAW,CACb,OAAOC,EAGT,GAAM,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAI,MAAA,CAAO,QAAA,CAO5B,OALEA,CAAAA,GAAa,WAAA,EACbA,CAAAA,GAAa,WAAA,EACbA,CAAAA,GAAa,cAAA,EACbA,CAAAA,CAAS,QAAA,CAAS,eAAe,CAAA,CAEhB,cAAA,CAAiB,YACtC,CAGO,SAASC,CAAAA,EAA4B,CAC1C,OAAO,CAAA,QAAA,EAAWJ,CAAAA,EAAkB,CAAA,CACtC,CAGO,SAASK,CAAAA,CAAqBC,CAAAA,CAAmBC,EAAuB,CAC7E,OAAO,CAAA,QAAA,EAAWD,CAAS,CAAA,KAAA,EAAQN,CAAAA,EAAkB,CAAA,qBAAA,EAAwB,kBAAA,CAAmBO,CAAK,CAAC,CAAA,CACxG,CAEO,SAASC,CAAAA,CAAgBF,CAAAA,CAA8B,CAC5D,IAAMG,CAAAA,CAAkB,CAAA,aAAA,EAAgBH,CAAS,CAAA,CAAA,CAC3CI,CAAAA,CAAsB,CAAA,EAAGD,CAAe,CAAA,YAAA,CAAA,CACxCE,CAAAA,CAAiB,CAAA,EAAGF,CAAe,CAAA,OAAA,CAAA,CACnCG,CAAAA,CAAqB,CAAA,EAAGH,CAAe,eAE7C,eAAeI,CAAAA,CAAWC,CAAAA,CAAaC,CAAAA,CAAgC,CACrE,IAAMC,CAAAA,CAAW,MAAM,KAAA,CAAMF,CAAAA,CAAK,CAChC,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CACP,cAAA,CAAgB,mBAChB,GAAIC,CAAAA,EAAM,OAAA,EAAW,EACvB,CAAA,CACA,GAAGA,CACL,CAAC,CAAA,CACKE,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAElC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAME,CAAAA,CAAQD,CAAAA,EAAQ,OAAOA,CAAAA,EAAS,QAAA,EAAY,OAAA,GAAWA,CAAAA,CAAO,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,iBAEzF,MAAM,IAAI,KAAA,CAAMC,CAAK,CACvB,CAEA,OAAOD,CACT,CAEA,OAAO,CACL,cAAA,CAAiBE,CAAAA,EACfN,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,mBAAoB,CAAE,MAAA,CAAQ,MAAA,CAAQ,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUU,CAAK,CAAE,CAAC,CAAA,CAC/F,iBAAA,CAAoBC,CAAAA,EAAOP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,4BAAA,EAA+B,mBAAmBW,CAAE,CAAC,CAAA,CAAE,CAAA,CAC5G,sBAAA,CAAwB,CAACA,CAAAA,CAAID,CAAAA,GAC3BN,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,oBAAA,EAAuB,kBAAA,CAAmBW,CAAE,CAAC,CAAA,CAAA,CAAI,CACzE,MAAA,CAAQ,OAAA,CACR,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUD,CAAK,CAC5B,CAAC,CAAA,CACH,gBAAA,CAAmBC,CAAAA,EACjBP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,oBAAA,EAAuB,mBAAmBW,CAAE,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,CAAA,CACjG,aAAA,CAAgBA,CAAAA,EACdP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,SAAA,EAAY,kBAAA,CAAmBW,CAAE,CAAC,CAAA,aAAA,CAAA,CAAiB,CAC3E,MAAA,CAAQ,KAAA,CACR,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,EAAE,CACzB,CAAC,CAAA,CACH,eAAA,CAAiB,CAACA,CAAAA,CAAID,CAAAA,GACpBN,EAAQ,CAAA,EAAGJ,CAAe,CAAA,SAAA,EAAY,kBAAA,CAAmBW,CAAE,CAAC,CAAA,OAAA,CAAA,CAAW,CACrE,MAAA,CAAQ,OAAA,CACR,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUD,CAAK,CAC5B,CAAC,CAAA,CACH,kBAAA,CAAqBC,CAAAA,EACnBP,CAAAA,CAAQ,CAAA,EAAGJ,CAAe,CAAA,oBAAA,EAAuB,kBAAA,CAAmBW,CAAE,CAAC,CAAA,cAAA,CAAA,CAAkB,CAAE,MAAA,CAAQ,MAAO,CAAC,CAAA,CAC7G,UAAW,MAAOC,CAAAA,EAChBR,CAAAA,CAAwB,CAAA,EAAGH,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBW,CAAK,CAAC,CAAA,OAAA,CAAA,CAAW,CAAE,MAAA,CAAQ,MAAO,CAAC,CAAA,CAC/G,eAAA,CAAiB,MAAOF,CAAAA,EACtBN,CAAAA,CAA6BD,CAAAA,CAAoB,CAC/C,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,OAAA,CAASO,CAAAA,EAAO,OAAA,EAAW,IAAK,CAAC,CAAA,CACxD,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,eAAA,CAAiB,MAAOG,CAAAA,EACtBT,CAAAA,CAA8B,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,EAC3G,qBAAA,CAAuB,CAACA,CAAAA,CAAQC,CAAAA,GAC9B,CAAA,EAAGX,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,sBAAA,EAAyB,kBAAA,CAAmBC,CAAa,CAAC,CAAA,CAAA,CAC/G,eAAA,CAAiB,MAAOD,CAAAA,CAAQE,CAAAA,GAC9BX,CAAAA,CAA6B,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,CAAA,CAAI,CAClF,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,KAAA,CAAAE,CAAM,CAAC,CAAA,CAC9B,MAAA,CAAQ,OACV,CAAC,CAAA,CACH,oBAAA,CAAsB,MAAOF,CAAAA,CAAQH,CAAAA,GACnCN,CAAAA,CAAuB,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,SAAA,CAAA,CAAa,CACrF,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUH,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,uBAAA,CAAyB,MAAOG,CAAAA,CAAQG,CAAAA,GACtCZ,CAAAA,CAAQ,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,iBAAA,CAAA,CAAqB,CAC9E,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,QAAA,CAAAG,CAAS,CAAC,CAAA,CACjC,OAAQ,MACV,CAAC,CAAA,CACH,qBAAA,CAAuB,MAAOH,CAAAA,CAAQH,CAAAA,GACpCN,CAAAA,CAAiC,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,WAAA,CAAA,CAAe,CACjG,KAAM,IAAA,CAAK,SAAA,CAAUH,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,uBAAA,CAAyB,MAAOG,CAAAA,CAAQI,CAAAA,CAAYV,CAAAA,GAAa,CAC/D,IAAMW,CAAAA,CAAS,MAAM,KAAA,CACnB,CAAA,EAAGf,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,WAAA,EAAc,kBAAA,CAAmBI,CAAU,CAAC,CAAA,OAAA,CAAA,CAC/F,CACE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUV,CAAQ,CAAA,CAC7B,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,MAAA,CAAQ,MACV,CACF,CAAA,CACMC,CAAAA,CAAQ,MAAMU,CAAAA,CAAO,MAAK,CAGhC,GAAI,CAACA,CAAAA,CAAO,EAAA,EAAM,CAACV,CAAAA,CAAK,QAAA,CACtB,MAAM,IAAI,KAAA,CAAMA,CAAAA,CAAK,YAAA,EAAgBA,CAAAA,CAAK,KAAA,EAAS,gBAAgB,EAGrE,OAAO,CAAE,YAAA,CAAcU,CAAAA,CAAO,EAAA,CAAK,MAAA,CAAYV,CAAAA,CAAK,YAAA,CAAc,QAAA,CAAUA,CAAAA,CAAK,QAAS,CAC5F,CAAA,CACA,cAAA,CAAgB,MAAO,CAAE,YAAAW,CAAAA,CAAa,OAAA,CAAAC,CAAAA,CAAS,OAAA,CAAAC,CAAQ,CAAA,GACrDjB,CAAAA,CAA8BD,CAAAA,CAAoB,CAChD,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,OAAA,CAAS,CAAE,WAAA,CAAAgB,CAAAA,CAAa,OAAA,CAAAC,CAAQ,CAAA,CAAG,OAAA,CAASC,CAAAA,EAAW,IAAK,CAAC,CAAA,CACpF,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,2BAAA,CAA6B,MAAOR,CAAAA,CAAQS,IAC1ClB,CAAAA,CACE,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,YAAA,EAAe,kBAAA,CAAmBS,CAAS,CAAC,CAAA,MAAA,CAAA,CAC/F,CAAE,MAAA,CAAQ,MAAO,CACnB,EACF,aAAA,CAAe,MAAOT,CAAAA,EACpBT,CAAAA,CAAuC,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,KAAA,CAAA,CAAS,CACjG,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,qBAAsB,MAAOA,CAAAA,CAAQU,CAAAA,GACnCnB,CAAAA,CACE,CAAA,EAAGD,CAAkB,CAAA,CAAA,EAAI,kBAAA,CAAmBU,CAAM,CAAC,CAAA,UAAA,EAAa,kBAAA,CAAmBU,CAAS,CAAC,CAAA,KAAA,CAAA,CAC7F,CAAE,OAAQ,MAAO,CACnB,CAAA,CACF,oBAAA,CAAsB,MAAOC,CAAAA,CAAOC,CAAAA,GAAW,CAC7C,GAAM,CAAE,eAAA,CAAA/D,CAAAA,CAAiB,GAAA,CAAAF,CAAI,CAAA,CAAI,MAAMV,EAA0B0E,CAAK,CAAA,CAChEE,CAAAA,CAAW,IAAI,QAAA,CACrBA,CAAAA,CAAS,MAAA,CAAO,MAAA,CAAQlE,CAAAA,CAAK,WAAW,CAAA,CACxCkE,CAAAA,CAAS,MAAA,CAAO,iBAAA,CAAmB,MAAA,CAAOhE,CAAe,CAAC,CAAA,CAE1D,IAAM6C,CAAAA,CAAW,MAAM,KAAA,CAAM,CAAA,EAAGP,CAAe,CAAA,iBAAA,CAAA,CAAqB,CAClE,IAAA,CAAM0B,CAAAA,CACN,WAAA,CAAa,SAAA,CACb,MAAA,CAAQ,MAAA,CACR,MAAA,CAAAD,CACF,CAAC,CAAA,CACKjB,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAElC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAME,CAAAA,CAAQD,CAAAA,EAAQ,OAAOA,CAAAA,EAAS,QAAA,EAAYA,CAAAA,CAAK,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,gBAAA,CAEpF,MAAM,IAAI,KAAA,CAAMC,CAAK,CACvB,CAEA,GAAI,CAACD,CAAAA,CAAK,IAAA,EAAM,IAAA,EAAK,CACnB,MAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA,CAGxD,OAAO,CAAE,IAAA,CAAMA,CAAAA,CAAK,IAAK,CAC3B,CAAA,CACA,0BAA2B,MAAOxB,CAAAA,CAAMyC,GAAAA,GAAW,CAMjD,GAAM,CAACE,CAAAA,CAAeC,CAAM,CAAA,CAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAChD,KAAA,CAAM,CAAA,EAAG5B,CAAe,iBAAkB,CACxC,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,QAAA,CAAUhB,CAAAA,CAAK,IAAA,CAAM,SAAA,CAAWA,CAAAA,CAAK,IAAA,EAAQ,IAAA,CAAM,SAAA,CAAWA,CAAAA,CAAK,IAAK,CAAC,CAAA,CAChG,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,CAAA,CAC9C,MAAA,CAAQ,MAAA,CACR,MAAA,CAAAyC,GACF,CAAC,CAAA,CAEDI,CAAAA,CAAwB,CAAE,KAAM7C,CAAAA,CAAK,IAAA,CAAM,IAAA,CAAMA,CAAAA,CAAK,IAAK,CAAC,CAAA,GAAM,IAAA,CAAOD,CAAAA,CAAUC,CAAI,CAAA,CAAI,MAC7F,CAAC,CAAA,CACK8C,CAAAA,CAAa,MAAMH,EAAc,IAAA,EAAK,CAQ5C,GAAI,CAACA,CAAAA,CAAc,EAAA,EAAM,CAACG,CAAAA,CAAU,QAAA,EAAY,CAACA,CAAAA,CAAU,KAAA,EAAS,CAACA,CAAAA,CAAU,SAAA,CAC7E,MAAM,IAAI3C,CAAAA,CACRwC,CAAAA,CAAc,MAAA,CACdG,CAAAA,CAAU,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAU,KAAK,CAAA,CAAI,iCAAA,CAC5CA,CAAAA,CAAU,IAAA,EAAQ,IACpB,CAAA,CAGF,IAAM/E,CAAAA,CAAO,MAAMgF,GAAAA,CAAID,CAAAA,CAAU,QAAA,CAAU9C,CAAAA,CAAM,CAC/C,WAAA,CAAayC,GAAAA,CACb,MAAA,CAAQ,QAAA,CACR,WAAA,CAAaK,CAAAA,CAAU,SAAA,CACvB,KAAA,CAAOA,CAAAA,CAAU,KACnB,CAAC,CAAA,CAED,OAAO,CACL,QAAA,CAAU9C,CAAAA,CAAK,IAAA,CACf,SAAA,CAAW8C,CAAAA,CAAU,SAAA,CACrB,SAAA,CAAW9C,CAAAA,CAAK,IAAA,CAChB,GAAA,CAAKjC,CAAAA,CAAK,GAAA,CACV,GAAI6E,EAAS,CAAE,MAAA,CAAAA,CAAO,CAAA,CAAI,EAC5B,CACF,CAAA,CACA,cAAA,CAAgB,MAAOI,CAAAA,CAAYtB,CAAAA,GAAU,CAC3C,IAAMH,CAAAA,CAAW,MAAM,MAAM,CAAA,EAAGN,CAAmB,CAAA,WAAA,EAAc,kBAAA,CAAmB+B,CAAU,CAAC,CAAA,OAAA,CAAA,CAAW,CACxG,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUtB,CAAK,CAAA,CAC1B,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CACP,cAAA,CAAgB,kBAClB,CAAA,CACA,MAAA,CAAQ,MACV,CAAC,CAAA,CACKF,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAIlC,GAAI,CAACA,CAAAA,CAAS,EAAA,EAAM,OAAOC,CAAAA,CAAK,OAAA,EAAY,SAAA,CAC1C,MAAM,IAAI,KAAA,CAAMA,CAAAA,CAAK,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,gBAAgB,CAAA,CAGpE,OAAOA,CACT,EACA,gBAAA,CAAkB,MAAOyB,CAAAA,EACvB7B,CAAAA,CAA8B,CAAA,EAAGJ,CAAe,CAAA,cAAA,CAAA,CAAkB,CAChE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUiC,CAAAA,GAAQ,KAAA,CAAQ,CAAE,GAAA,CAAK,IAAK,EAAI,CAAE,GAAA,CAAAA,CAAI,CAAC,CAAA,CAC5D,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,oBAAA,CAAsB,MAAOC,CAAAA,CAAQC,CAAAA,GACnC/B,CAAAA,CAAgC,CAAA,EAAGJ,CAAe,CAAA,UAAA,EAAa,kBAAA,CAAmBkC,CAAM,CAAC,CAAA,CAAA,CAAI,CAC3F,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAE,KAAA,CAAAC,CAAM,CAAC,CAAA,CAC9B,MAAA,CAAQ,OACV,CAAC,CAAA,CACH,gBAAA,CAAkB,MAAOzB,CAAAA,EACvBN,CAAAA,CAAsDH,CAAAA,CAAqB,CACzE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUS,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,YAAa,MAAOA,CAAAA,EAClBN,CAAAA,CAA4CF,CAAAA,CAAgB,CAC1D,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUQ,CAAK,CAAA,CAC1B,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,gBAAA,CAAkB,MAAO0B,GACvBhC,CAAAA,CAAwB,CAAA,EAAGH,CAAmB,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAY,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,CAAA,CAC5G,WAAA,CAAa,MAAOC,CAAAA,EAClBjC,CAAAA,CAAwB,CAAA,EAAGF,CAAc,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAO,CAAC,CAAA,CAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAC,CAAA,CAClG,cAAA,CAAgB,CAACC,CAAAA,CAAYC,IAAY,CACvC,IAAMC,CAAAA,CAASD,CAAAA,EAAS,QAAA,CAAW,aAAA,CAAgB,EAAA,CAEnD,OAAO,CAAA,EAAGtC,CAAmB,CAAA,WAAA,EAAc,kBAAA,CAAmBqC,CAAU,CAAC,CAAA,QAAA,EAAWE,CAAM,EAC5F,CAAA,CACA,eAAA,CAAiB,MAAO1B,CAAAA,EACtBV,CAAAA,CACE,CAAA,EAAGH,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBa,CAAa,CAAC,CAAA,UAAA,CAClE,CAAA,CAAE,IAAA,CAAMP,CAAAA,EAAaA,CAAAA,CAAS,SAAS,CAAA,CACzC,YAAA,CAAeO,CAAAA,EAAkB,CAAA,EAAGb,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBa,CAAa,CAAC,CAAA,OAAA,CAAA,CACjG,gBAAA,CAAmBF,CAAAA,EAAU,CAAA,EAAGX,CAAmB,CAAA,MAAA,EAAS,kBAAA,CAAmBW,CAAK,CAAC,CAAA,WAAA,CAAA,CACrF,YAAA,CAAc,MAAO6B,CAAAA,CAAUC,CAAAA,GAAiB,CAC9C,IAAMrC,CAAAA,CAAMqC,CAAAA,CACR,CAAA,EAAG1C,CAAe,CAAA,oBAAA,EAAuB,kBAAA,CAAmB0C,CAAY,CAAC,CAAA,SAAA,CAAA,CACzE,CAAA,EAAG1C,CAAe,CAAA,SAAA,EAAYyC,CAAQ,CAAA,SAAA,CAAA,CACpClC,CAAAA,CAAW,MAAM,KAAA,CAAMF,CAAAA,CAAK,CAChC,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,CACP,cAAA,CAAgB,kBAClB,CACF,CAAC,CAAA,CACKG,CAAAA,CAAQ,MAAMD,CAAAA,CAAS,IAAA,EAAK,CAOlC,GAAIA,CAAAA,CAAS,EAAA,CACX,OAAO,CACL,QAAA,CAAUC,CAAAA,CAAK,QAAA,EAAY,EAAC,CAC5B,YAAA,CAAcA,CAAAA,CAAK,YAAA,CACnB,OAAA,CAASA,CAAAA,CAAK,OAAA,EAAW,IAC3B,CAAA,CAGF,GAAIA,CAAAA,CAAK,OAAA,GAAY,KAAA,CACnB,OAAO,CACL,QAAA,CAAUA,EAAK,QAAA,EAAY,EAAC,CAC5B,YAAA,CAAcA,CAAAA,CAAK,YAAA,EAAgB,CAAA,eAAA,EAAkBiC,CAAAA,GAAa,OAAA,CAAU,OAAA,CAAU,OAAO,CAAA,UAAA,CAAA,CAC7F,OAAA,CAAS,KACX,CAAA,CAGF,IAAMhC,EAAQD,CAAAA,CAAK,KAAA,CAAQ,MAAA,CAAOA,CAAAA,CAAK,KAAK,CAAA,CAAI,gBAAA,CAEhD,MAAM,IAAI,KAAA,CAAMC,CAAK,CACvB,CAAA,CACA,aAAA,CAAe,MAAO2B,CAAAA,EACpBhC,EAA6C,CAAA,EAAGH,CAAmB,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAY,CAAC,CAAA,KAAA,CAAA,CAAS,CAC9G,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,gBAAA,CAAkB,MAAOA,CAAAA,CAAc1B,CAAAA,GACrCN,EACE,CAAA,EAAGH,CAAmB,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAY,CAAC,CAAA,CAAA,CAC1D,CACE,IAAA,CAAM,IAAA,CAAK,SAAA,CAAU1B,CAAK,CAAA,CAC1B,MAAA,CAAQ,OACV,CACF,CAAA,CACF,WAAA,CAAa,MAAO2B,CAAAA,CAAS3B,CAAAA,GAC3BN,CAAAA,CAA4C,CAAA,EAAGF,CAAc,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAO,CAAC,CAAA,CAAA,CAAI,CAC9F,IAAA,CAAM,IAAA,CAAK,UAAU3B,CAAK,CAAA,CAC1B,MAAA,CAAQ,OACV,CAAC,CACL,CACF,CAEO,IAAMiC,CAAAA,CAAN,cAA2B,KAAM,CACtC,MAAA,CAEA,WAAA,CAAYvD,CAAAA,CAAgBC,EAAU,gBAAA,CAAkB,CACtD,KAAA,CAAMA,CAAO,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,cAAA,CACZ,IAAA,CAAK,MAAA,CAASD,EAChB,CACF,CAAA,CAEawD,CAAAA,CAAU,MAAUvC,CAAAA,EAA4B,CAC3D,IAAME,CAAAA,CAAW,MAAM,KAAA,CAAMF,CAAAA,CAAK,CAAE,WAAA,CAAa,SAAU,CAAC,CAAA,CAE5D,GAAI,CAACE,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAIoC,CAAAA,CAAapC,CAAAA,CAAS,MAAM,CAAA,CAGxC,OAAQ,MAAMA,CAAAA,CAAS,IAAA,EACzB,EAEO,SAASsC,CAAAA,CAAMhD,CAAAA,CAyCpB,CACA,IAAMiD,CAAAA,CAAW,gBAAgBjD,CAAS,CAAA,YAAA,CAAA,CACpCK,CAAAA,CAAiB,CAAA,aAAA,EAAgBL,CAAS,CAAA,OAAA,CAAA,CAC1CM,CAAAA,CAAqB,CAAA,aAAA,EAAgBN,CAAS,CAAA,YAAA,CAAA,CAEpD,OAAO,CACL,QAAA,CAAU,CAAC0C,CAAAA,CAAU,KAAO,CAC1B,GAAM,CAAE,MAAA,CAAAQ,CAAAA,CAAS,KAAA,CAAO,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CAAI,MAAA,CAAAC,CAAAA,CAAS,CAAE,CAAA,CAAIV,CAAAA,CAC7CW,CAAAA,CAAS,IAAI,gBAAgB,CAAE,MAAA,CAAAH,CAAAA,CAAQ,KAAA,CAAOC,CAAAA,CAAM,QAAA,EAAS,CAAG,MAAA,CAAQC,CAAAA,CAAO,QAAA,EAAW,CAAC,CAAA,CAEjG,OAAO,CAAA,aAAA,EAAgBpD,CAAS,CAAA,UAAA,EAAaqD,CAAAA,CAAO,QAAA,EAAU,CAAA,CAChE,CAAA,CACA,YAAA,CAAehB,CAAAA,EAAW,CAAA,aAAA,EAAgBrC,CAAS,CAAA,UAAA,EAAa,kBAAA,CAAmBqC,CAAM,CAAC,CAAA,CAAA,CAC1F,eAAA,CAAkBiB,GAChBA,CAAAA,CACI,CAAA,aAAA,EAAgBtD,CAAS,CAAA,wBAAA,EAA2B,kBAAA,CAAmBsD,CAAK,CAAC,CAAA,CAAA,CAC7E,CAAA,aAAA,EAAgBtD,CAAS,CAAA,iBAAA,CAAA,CAC/B,SAAA,CAAYgB,CAAAA,EAAW,CAAA,EAAGV,CAAkB,CAAA,CAAA,EAAI,mBAAmBU,CAAM,CAAC,CAAA,CAAA,CAC1E,eAAA,CAAkBuC,CAAAA,EAAU,CAAA,EAAGjD,CAAkB,CAAA,UAAA,EAAa,kBAAA,CAAmBiD,CAAK,CAAC,CAAA,CAAA,CACvF,UAAA,CAAY,CAACH,CAAAA,CAAS,CAAA,GAAM,GAAG9C,CAAkB,CAAA,QAAA,EAAW8C,CAAAA,CAAO,QAAA,EAAU,CAAA,CAAA,CAC7E,YAAA,CAAc,IAAM,CAAA,aAAA,EAAgBpD,CAAS,CAAA,cAAA,CAAA,CAC7C,QAAA,CAAWmC,CAAAA,EAAe,CAAA,EAAGc,CAAQ,CAAA,WAAA,EAAc,mBAAmBd,CAAU,CAAC,CAAA,CAAA,CACjF,SAAA,CAAW,CAACO,CAAAA,CAAU,EAAC,GAAM,CAC3B,GAAM,CAAE,KAAA,CAAAS,CAAAA,CAAQ,EAAA,CAAI,MAAA,CAAAC,CAAAA,CAAS,EAAG,KAAA,CAAArC,CAAAA,CAAO,MAAA,CAAAxB,CAAO,CAAA,CAAImD,CAAAA,CAC5CW,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,KAAA,CAAOF,CAAAA,CAAM,QAAA,EAAS,CACtB,MAAA,CAAQC,CAAAA,CAAO,UACjB,CAAC,CAAA,CAED,OAAI7D,CAAAA,EACF8D,CAAAA,CAAO,GAAA,CAAI,QAAA,CAAU9D,CAAM,CAAA,CAGzBwB,CAAAA,EACFsC,CAAAA,CAAO,GAAA,CAAI,OAAA,CAAStC,CAAK,CAAA,CAGpB,GAAGkC,CAAQ,CAAA,WAAA,EAAcI,CAAAA,CAAO,QAAA,EAAU,CAAA,CACnD,CAAA,CACA,cAAA,CAAgB,CAAA,EAAGJ,CAAQ,CAAA,kBAAA,CAAA,CAC3B,UAAA,CAAaV,CAAAA,EAAiB,CAAA,EAAGU,CAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmBV,CAAY,CAAC,CAAA,CAAA,CAC7E,cAAA,CAAgB,CAACA,CAAAA,CAAca,CAAAA,CAAS,CAAA,CAAGD,CAAAA,CAAQ,EAAA,GACjD,CAAA,EAAGF,CAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmBV,CAAY,CAAC,CAAA,aAAA,EAAgBa,CAAAA,CAAO,QAAA,EAAU,CAAA,OAAA,EAAUD,CAAAA,CAAM,QAAA,EAAU,CAAA,CAAA,CAC5G,WAAA,CAAa,CAACT,CAAAA,CAAU,EAAC,GAAM,CAC7B,GAAM,CAAE,OAAA,CAAAc,CAAAA,CAAS,KAAA,CAAAL,CAAAA,CAAQ,EAAA,CAAI,MAAA,CAAAC,CAAAA,CAAS,CAAA,CAAG,MAAA,CAAAK,CAAAA,CAAQ,UAAA,CAAAC,CAAW,CAAA,CAAIhB,CAAAA,CAC1DW,CAAAA,CAAS,IAAI,gBAAgB,CACjC,KAAA,CAAOF,CAAAA,CAAM,QAAA,EAAS,CACtB,MAAA,CAAQC,CAAAA,CAAO,QAAA,EACjB,CAAC,CAAA,CAEGI,CAAAA,EAAWA,CAAAA,CAAQ,MAAA,CAAS,CAAA,EAC9BH,CAAAA,CAAO,IAAI,SAAA,CAAWG,CAAAA,CAAQ,GAAA,CAAKG,CAAAA,EAAWA,CAAAA,CAAQ,MAAA,CAAS,OAAQ,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAGhFD,CAAAA,EAAcA,CAAAA,CAAW,MAAA,CAAS,CAAA,EACpCL,EAAO,GAAA,CAAI,YAAA,CAAcK,CAAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAG/C,IAAME,CAAAA,CAAgBH,CAAAA,EAAQ,IAAA,EAAK,CAEnC,OAAIG,CAAAA,EACFP,CAAAA,CAAO,GAAA,CAAI,IAAKO,CAAa,CAAA,CAGxB,CAAA,EAAGX,CAAQ,CAAA,CAAA,EAAII,CAAAA,CAAO,QAAA,EAAU,CAAA,CACzC,CAAA,CACA,aAAA,CAAe,CAAA,EAAGJ,CAAQ,CAAA,QAAA,CAAA,CAC1B,QAAA,CAAU,CAAA,EAAGA,CAAQ,CAAA,SAAA,CAAA,CACrB,GAAA,CAAMlC,CAAAA,EAAU,CAAA,EAAGkC,CAAQ,CAAA,MAAA,EAAS,kBAAA,CAAmBlC,CAAK,CAAC,CAAA,CAAA,CAC7D,UAAA,CAAY,CAAC8C,CAAAA,CAAOT,CAAAA,CAAS,CAAA,CAAGD,CAAAA,CAAQ,EAAA,GACtC,CAAA,EAAGF,CAAQ,CAAA,YAAA,EAAeY,CAAK,CAAA,QAAA,EAAWT,CAAAA,CAAO,QAAA,EAAU,CAAA,OAAA,EAAUD,CAAAA,CAAM,QAAA,EAAU,CAAA,CAAA,CACvF,KAAA,CAAQX,CAAAA,EAAY,GAAGnC,CAAc,CAAA,CAAA,EAAI,kBAAA,CAAmBmC,CAAO,CAAC,CAAA,CAAA,CACpE,MAAA,CAAQ,CAACE,CAAAA,CAAU,EAAC,GAAM,CACxB,GAAM,CAAE,KAAA,CAAAS,CAAAA,CAAQ,GAAI,MAAA,CAAAC,CAAAA,CAAS,CAAA,CAAG,MAAA,CAAAK,CAAAA,CAAQ,UAAA,CAAAC,CAAW,CAAA,CAAIhB,CAAAA,CACjDW,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,KAAA,CAAOF,CAAAA,CAAM,QAAA,GACb,MAAA,CAAQC,CAAAA,CAAO,QAAA,EACjB,CAAC,CAAA,CAEGM,CAAAA,EAAcA,CAAAA,CAAW,MAAA,CAAS,CAAA,EACpCL,CAAAA,CAAO,GAAA,CAAI,YAAA,CAAcK,CAAAA,CAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAG/C,IAAME,CAAAA,CAAgBH,CAAAA,EAAQ,IAAA,EAAK,CAEnC,OAAIG,CAAAA,EACFP,CAAAA,CAAO,GAAA,CAAI,GAAA,CAAKO,CAAa,CAAA,CAGxB,CAAA,EAAGvD,CAAc,CAAA,CAAA,EAAIgD,EAAO,QAAA,EAAU,CAAA,CAC/C,CAAA,CACA,MAAA,CAAQ,CAAA,aAAA,EAAgBrD,CAAS,CAAA,OAAA,CAAA,CACjC,OAAA,CAAU8D,CAAAA,EACRA,CAAAA,CACI,CAAA,aAAA,EAAgB9D,CAAS,CAAA,iBAAA,EAAoB,kBAAA,CAAmB8D,CAAO,CAAC,CAAA,CAAA,CACxE,CAAA,aAAA,EAAgB9D,CAAS,CAAA,QAAA,CAAA,CAC/B,KAAA,CAAQuC,CAAAA,EACNA,CAAAA,CAAe,CAAA,EAAGU,CAAQ,CAAA,CAAA,EAAI,kBAAA,CAAmBV,CAAY,CAAC,CAAA,MAAA,CAAA,CAAW,CAAA,EAAGU,CAAQ,QACxF,CACF","file":"chunk-SY67F62K.js","sourcesContent":["export const DICTATION_SAMPLE_RATE = 24_000;\nexport const DICTATION_MAX_DURATION_SECONDS = 60;\nexport const DICTATION_MIN_DURATION_SECONDS = 0.25;\n\nexport function appendDictatedText(existing: string, transcript: string): string {\n const dictated = transcript.trim();\n\n if (!dictated) {\n return existing;\n }\n\n if (!existing.trim()) {\n return existing.length === 0 ? dictated : `${existing}${dictated}`;\n }\n\n if (/\\s$/.test(existing) || /^[.,!?;:]/.test(dictated)) {\n return `${existing}${dictated}`;\n }\n\n return `${existing} ${dictated}`;\n}\n\nexport async function convertRecordedAudioToPcm(blob: Blob): Promise<{ durationSeconds: number; pcm: Blob }> {\n if (typeof window === 'undefined') {\n throw new Error('Dictation is only available in the browser.');\n }\n\n const AudioContextCtor = window.AudioContext ?? window.webkitAudioContext;\n\n if (!AudioContextCtor) {\n throw new Error('This browser cannot decode recorded audio.');\n }\n\n const arrayBuffer = await blob.arrayBuffer();\n const audioContext = new AudioContextCtor();\n\n try {\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer.slice(0));\n const mono = mixToMono(audioBuffer);\n const resampled = resample(mono, audioBuffer.sampleRate, DICTATION_SAMPLE_RATE);\n const pcm = floatToPcm16(resampled);\n const durationSeconds = resampled.length / DICTATION_SAMPLE_RATE;\n\n if (durationSeconds < DICTATION_MIN_DURATION_SECONDS) {\n throw new Error('No speech was captured. Try again.');\n }\n\n if (durationSeconds > DICTATION_MAX_DURATION_SECONDS) {\n throw new Error(`Dictation is limited to ${String(DICTATION_MAX_DURATION_SECONDS)} seconds.`);\n }\n\n return {\n durationSeconds,\n pcm: new Blob([pcm], { type: 'audio/pcm' }),\n };\n } finally {\n await audioContext.close();\n }\n}\n\nfunction mixToMono(buffer: AudioBuffer): Float32Array {\n const { length, numberOfChannels: channelCount } = buffer;\n\n if (channelCount === 1) {\n return buffer.getChannelData(0).slice();\n }\n\n const mono = new Float32Array(length);\n\n for (let index = 0; index < length; index += 1) {\n let sum = 0;\n\n for (let channel = 0; channel < channelCount; channel += 1) {\n sum += buffer.getChannelData(channel)[index] ?? 0;\n }\n\n mono[index] = sum / channelCount;\n }\n\n return mono;\n}\n\nfunction resample(samples: Float32Array, sourceRate: number, targetRate: number): Float32Array {\n if (sourceRate === targetRate) {\n return samples;\n }\n\n const ratio = sourceRate / targetRate;\n const outputLength = Math.max(1, Math.round(samples.length / ratio));\n const output = new Float32Array(outputLength);\n\n for (let index = 0; index < outputLength; index += 1) {\n const sourceIndex = index * ratio;\n const left = Math.floor(sourceIndex);\n const right = Math.min(left + 1, samples.length - 1);\n const fraction = sourceIndex - left;\n const leftSample = samples[left] ?? 0;\n const rightSample = samples[right] ?? 0;\n output[index] = leftSample + (rightSample - leftSample) * fraction;\n }\n\n return output;\n}\n\nfunction floatToPcm16(samples: Float32Array): ArrayBuffer {\n const buffer = new ArrayBuffer(samples.length * 2);\n const view = new DataView(buffer);\n\n for (let index = 0; index < samples.length; index += 1) {\n const sample = Math.max(-1, Math.min(1, samples[index] ?? 0));\n view.setInt16(index * 2, sample < 0 ? sample * 0x8000 : sample * 0x7fff, true);\n }\n\n return buffer;\n}\n\ndeclare global {\n interface Window {\n webkitAudioContext?: typeof AudioContext;\n }\n}\n","import { getKnowledgeFileProblem } from '../knowledge/knowledge';\nimport type { PluginConnection, PluginScope, PluginTools } from './plugin-types';\nimport { put } from '@vercel/blob/client';\nimport { convertRecordedAudioToPcm } from './agent/dictation';\nimport { getDesktop } from '../../core/desktop';\nimport { flexkitDomain } from '../../core/domains';\nimport type {\n ActivityItem,\n ActivityItemState,\n AgentChat,\n AgentChatAttachment,\n AgentChatFollowUpResult,\n AgentChatMessage,\n AgentChatMonitor,\n AgentChatQuestion,\n AgentChatQuestionResponse,\n AgentChatTurn,\n Automation,\n AutomationApproval,\n AutomationApprovalStatus,\n AutomationArtifact,\n AutomationInput,\n AutomationToolChannel,\n AutomationToolProvider,\n AutomationVisibility,\n MutationResult,\n Skill,\n SkillInput,\n} from './types';\n\nexport interface DecideApprovalInput {\n /** Approve and always allow this plugin tool for the automation. */\n remember?: boolean;\n approved: boolean;\n /** For a proposed automation: the approver's edited instructions and whether to run it once now. */\n automationEdits?: { instructions?: string; runOnce?: boolean };\n force?: boolean;\n reason?: string;\n}\n\nexport interface SendAgentChatMessageInput {\n attachments?: AgentChatAttachment[];\n content: string;\n modelId?: string | null;\n}\n\n/** A new chat and its first turn, started by one request. */\nexport interface StartAgentChatResult {\n chat: AgentChat;\n turn: AgentChatTurn;\n}\n\n/** Lowercase hex SHA-256 of a file, or undefined where the browser cannot hash (insecure contexts). */\nasync function sha256Hex(file: File): Promise<string | undefined> {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n return undefined;\n }\n\n try {\n const digest = await crypto.subtle.digest('SHA-256', await file.arrayBuffer());\n\n return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, '0')).join('');\n } catch {\n return undefined;\n }\n}\n\n/** Thrown when the API refuses an upload; `code` lets the UI tailor the message. */\nexport class AgentUploadError extends Error {\n code: string | null;\n status: number;\n\n constructor(status: number, message: string, code: string | null = null) {\n super(message);\n this.name = 'AgentUploadError';\n this.code = code;\n this.status = status;\n }\n}\n\nexport interface ApiClient {\n /** Starts OAuth for a new account, or for `connectionId` to reconnect that specific account. */\n connectPlugins: (_input: {\n pluginId: string;\n scope: PluginScope;\n studioOrigin: string;\n connectionId?: string;\n }) => Promise<{ transactionId: string; authorizeUrl: string; completionOrigin: string; launchTicket: string }>;\n /** Renames (label null resets to the provider name) or makes a connection primary. */\n updatePluginConnection: (\n _id: string,\n _input: { label?: string | null; primary?: true }\n ) => Promise<{ connection: PluginConnection }>;\n pluginOAuthStatus: (\n _id: string\n ) => Promise<{ id: string; status: 'pending' | 'exchanging' | 'complete' | 'failed'; expires_at: string }>;\n disconnectPlugin: (_id: string) => Promise<{ success: boolean }>;\n installPlugin: (_id: string) => Promise<unknown>;\n setPluginPolicy: (_id: string, _input: { enabled: boolean; allowPersonal: boolean }) => Promise<{ success: boolean }>;\n refreshPluginTools: (_id: string) => Promise<PluginTools>;\n\n cancelRun: (_runId: string) => Promise<MutationResult>;\n createAgentChat: (_input?: { modelId?: string | null }) => Promise<{ chat: AgentChat }>;\n deleteAgentChat: (_chatId: string) => Promise<{ success: boolean }>;\n getAgentChatStreamUrl: (_chatId: string, _workflowRunId: string) => string;\n renameAgentChat: (_chatId: string, _title: string) => Promise<{ chat: AgentChat }>;\n sendAgentChatMessage: (_chatId: string, _input: SendAgentChatMessageInput) => Promise<AgentChatTurn>;\n /**\n * Sends a message while the chat's turn is running. The platform decides\n * whether it steers that turn or waits as the next one; if the turn has\n * meanwhile ended, the message starts the next turn.\n */\n sendAgentChatFollowUp: (_chatId: string, _input: SendAgentChatMessageInput) => Promise<AgentChatFollowUpResult>;\n /** The user connected a plugin from the chat's connect card: starts the turn that uses it, or queues it. */\n announcePluginConnected: (\n _chatId: string,\n _pluginId: string\n ) => Promise<Extract<AgentChatFollowUpResult, { followUp: unknown } | { turn: unknown }>>;\n /** Answers (or dismisses) the questions a chat turn waits on; a settled question comes back with an error. */\n answerAgentChatQuestion: (\n _chatId: string,\n _questionId: string,\n _response: AgentChatQuestionResponse\n ) => Promise<{ errorMessage?: string; question?: AgentChatQuestion }>;\n /** Creates a chat and sends its first message in one request. */\n startAgentChat: (_input: SendAgentChatMessageInput) => Promise<StartAgentChatResult>;\n /** Starts the next turn from a queued follow-up once the previous turn has ended. */\n startQueuedAgentChatMessage: (_chatId: string, _messageId: string) => Promise<AgentChatTurn>;\n stopAgentChat: (_chatId: string) => Promise<{ message: AgentChatMessage }>;\n stopAgentChatMonitor: (_chatId: string, _monitorId: string) => Promise<{ monitor: AgentChatMonitor }>;\n transcribeAgentAudio: (_audio: Blob, _signal?: AbortSignal) => Promise<{ text: string }>;\n /** Uploads a chat attachment straight to the platform file store. */\n uploadAgentChatAttachment: (_file: File, _signal?: AbortSignal) => Promise<AgentChatAttachment>;\n decideApproval: (\n _approvalId: string,\n _input: DecideApprovalInput\n ) => Promise<MutationResult & { approval?: AutomationApproval }>;\n createAutomation: (_input: AutomationInput) => Promise<MutationResult & { automation?: Automation }>;\n createSkill: (_input: SkillInput) => Promise<MutationResult & { skill?: Skill }>;\n deleteAutomation: (_automationId: string) => Promise<MutationResult>;\n deleteSkill: (_skillId: string) => Promise<MutationResult>;\n getArtifactUrl: (_artifactId: string, _options?: { download?: boolean }) => string;\n getRunArtifacts: (_workflowRunId: string) => Promise<AutomationArtifact[]>;\n getStreamUrl: (_workflowRunId: string) => string;\n /** JSON transcript of a finished run (owners and developers). */\n getTranscriptUrl: (_runId: string) => string;\n /** Lists delivery channels of `connectionId`, or of the provider's primary project account when omitted. */\n listChannels: (\n _provider: AutomationToolProvider,\n _connectionId?: string | null\n ) => Promise<{\n channels: AutomationToolChannel[];\n errorMessage?: string;\n success: boolean;\n }>;\n runAutomation: (_automationId: string) => Promise<MutationResult & { runId?: string }>;\n updateAutomation: (\n _automationId: string,\n _input: AutomationInput\n ) => Promise<MutationResult & { automation?: Automation }>;\n updateSkill: (_skillId: string, _input: SkillInput) => Promise<MutationResult & { skill?: Skill }>;\n /** Marks the caller's Activity items read; `'all'` marks every unread item. */\n markActivityRead: (_ids: string[] | 'all') => Promise<{ success: boolean }>;\n setActivityItemState: (\n _itemId: string,\n _state: Extract<ActivityItemState, 'unread' | 'read' | 'dismissed'>\n ) => Promise<{ item: ActivityItem }>;\n}\n\nfunction getApiRootDomain(): string {\n if (typeof window === 'undefined') {\n return 'flexkit.io';\n }\n\n // The desktop app serves the Studio on its own scheme (`flexkit://app`), so\n // its page hostname says nothing; the backend it was built for does.\n if (getDesktop()) {\n return flexkitDomain;\n }\n\n const { hostname } = window.location;\n const isDevHost =\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === 'flexkit.test' ||\n hostname.endsWith('.flexkit.test');\n\n return isDevHost ? 'flexkit.test' : 'flexkit.io';\n}\n\n/** Origin that hosts plugin OAuth start and completion. */\nexport function getPlatformOrigin(): string {\n return `https://${getApiRootDomain()}`;\n}\n\n/** Public URL an external system calls to fire a webhook trigger. */\nexport function getWebhookTriggerUrl(projectId: string, token: string): string {\n return `https://${projectId}.api.${getApiRootDomain()}/automations/webhook/${encodeURIComponent(token)}`;\n}\n\nexport function createApiClient(projectId: string): ApiClient {\n const projectBasePath = `/api/flexkit/${projectId}`;\n const automationsBasePath = `${projectBasePath}/automations`;\n const skillsBasePath = `${projectBasePath}/skills`;\n const agentChatsBasePath = `${projectBasePath}/agent/chats`;\n\n async function request<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n ...(init?.headers ?? {}),\n },\n ...init,\n });\n const data = (await response.json()) as T;\n\n if (!response.ok) {\n const error = data && typeof data === 'object' && 'error' in data ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n }\n\n return data;\n }\n\n return {\n connectPlugins: (input) =>\n request(`${projectBasePath}/plugins/connect`, { method: 'POST', body: JSON.stringify(input) }),\n pluginOAuthStatus: (id) => request(`${projectBasePath}/plugins/oauth-transactions/${encodeURIComponent(id)}`),\n updatePluginConnection: (id, input) =>\n request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n }),\n disconnectPlugin: (id) =>\n request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}`, { method: 'DELETE' }),\n installPlugin: (id) =>\n request(`${projectBasePath}/plugins/${encodeURIComponent(id)}/installation`, {\n method: 'PUT',\n body: JSON.stringify({}),\n }),\n setPluginPolicy: (id, input) =>\n request(`${projectBasePath}/plugins/${encodeURIComponent(id)}/policy`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n }),\n refreshPluginTools: (id) =>\n request(`${projectBasePath}/plugin-connections/${encodeURIComponent(id)}/tools/refresh`, { method: 'POST' }),\n cancelRun: async (runId) =>\n request<MutationResult>(`${automationsBasePath}/runs/${encodeURIComponent(runId)}/cancel`, { method: 'POST' }),\n createAgentChat: async (input) =>\n request<{ chat: AgentChat }>(agentChatsBasePath, {\n body: JSON.stringify({ modelId: input?.modelId ?? null }),\n method: 'POST',\n }),\n deleteAgentChat: async (chatId) =>\n request<{ success: boolean }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}`, { method: 'DELETE' }),\n getAgentChatStreamUrl: (chatId, workflowRunId) =>\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/stream?workflowRunId=${encodeURIComponent(workflowRunId)}`,\n renameAgentChat: async (chatId, title) =>\n request<{ chat: AgentChat }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}`, {\n body: JSON.stringify({ title }),\n method: 'PATCH',\n }),\n sendAgentChatMessage: async (chatId, input) =>\n request<AgentChatTurn>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/messages`, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n announcePluginConnected: async (chatId, pluginId) =>\n request(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/plugin-connected`, {\n body: JSON.stringify({ pluginId }),\n method: 'POST',\n }),\n sendAgentChatFollowUp: async (chatId, input) =>\n request<AgentChatFollowUpResult>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/follow-ups`, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n answerAgentChatQuestion: async (chatId, questionId, response) => {\n const result = await fetch(\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/questions/${encodeURIComponent(questionId)}/answer`,\n {\n body: JSON.stringify(response),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n }\n );\n const data = (await result.json()) as { errorMessage?: string; error?: string; question?: AgentChatQuestion };\n\n // A question settled elsewhere (409) comes back with its final state for the card to show.\n if (!result.ok && !data.question) {\n throw new Error(data.errorMessage ?? data.error ?? 'Request failed');\n }\n\n return { errorMessage: result.ok ? undefined : data.errorMessage, question: data.question };\n },\n startAgentChat: async ({ attachments, content, modelId }) =>\n request<StartAgentChatResult>(agentChatsBasePath, {\n body: JSON.stringify({ message: { attachments, content }, modelId: modelId ?? null }),\n method: 'POST',\n }),\n startQueuedAgentChatMessage: async (chatId, messageId) =>\n request<AgentChatTurn>(\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/follow-ups/${encodeURIComponent(messageId)}/start`,\n { method: 'POST' }\n ),\n stopAgentChat: async (chatId) =>\n request<{ message: AgentChatMessage }>(`${agentChatsBasePath}/${encodeURIComponent(chatId)}/stop`, {\n method: 'POST',\n }),\n stopAgentChatMonitor: async (chatId, monitorId) =>\n request<{ monitor: AgentChatMonitor }>(\n `${agentChatsBasePath}/${encodeURIComponent(chatId)}/monitors/${encodeURIComponent(monitorId)}/stop`,\n { method: 'POST' }\n ),\n transcribeAgentAudio: async (audio, signal) => {\n const { durationSeconds, pcm } = await convertRecordedAudioToPcm(audio);\n const formData = new FormData();\n formData.append('file', pcm, 'audio.pcm');\n formData.append('durationSeconds', String(durationSeconds));\n\n const response = await fetch(`${projectBasePath}/agent/transcribe`, {\n body: formData,\n credentials: 'include',\n method: 'POST',\n signal,\n });\n const data = (await response.json()) as { error?: string; text?: string };\n\n if (!response.ok) {\n const error = data && typeof data === 'object' && data.error ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n }\n\n if (!data.text?.trim()) {\n throw new Error('No speech was recognized. Try again.');\n }\n\n return { text: data.text };\n },\n uploadAgentChatAttachment: async (file, signal) => {\n // The platform issues a token scoped to one pathname, type and size; the\n // browser then writes the bytes to the store directly, so large files\n // never pass through the API function body limit. The hash is computed\n // alongside: Knowledge documents are keyed by it, so the platform can tell\n // later whether this file is already one.\n const [tokenResponse, sha256] = await Promise.all([\n fetch(`${projectBasePath}/agent/uploads`, {\n body: JSON.stringify({ filename: file.name, mediaType: file.type || null, sizeBytes: file.size }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal,\n }),\n // Only files Knowledge can index are worth hashing; a screenshot never matches a document.\n getKnowledgeFileProblem({ name: file.name, size: file.size }) === null ? sha256Hex(file) : undefined,\n ]);\n const tokenData = (await tokenResponse.json()) as {\n code?: string;\n error?: string;\n mediaType?: string;\n pathname?: string;\n token?: string;\n };\n\n if (!tokenResponse.ok || !tokenData.pathname || !tokenData.token || !tokenData.mediaType) {\n throw new AgentUploadError(\n tokenResponse.status,\n tokenData.error ? String(tokenData.error) : 'The file could not be uploaded.',\n tokenData.code ?? null\n );\n }\n\n const blob = await put(tokenData.pathname, file, {\n abortSignal: signal,\n access: 'public',\n contentType: tokenData.mediaType,\n token: tokenData.token,\n });\n\n return {\n filename: file.name,\n mediaType: tokenData.mediaType,\n sizeBytes: file.size,\n url: blob.url,\n ...(sha256 ? { sha256 } : {}),\n };\n },\n decideApproval: async (approvalId, input) => {\n const response = await fetch(`${automationsBasePath}/approvals/${encodeURIComponent(approvalId)}/decide`, {\n body: JSON.stringify(input),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n });\n const data = (await response.json()) as MutationResult & { approval?: AutomationApproval; error?: string };\n\n // Business errors (stale_preview, already_decided) come back as 400\n // with a structured body the caller must be able to inspect.\n if (!response.ok && typeof data.success !== 'boolean') {\n throw new Error(data.error ? String(data.error) : 'Request failed');\n }\n\n return data;\n },\n markActivityRead: async (ids) =>\n request<{ success: boolean }>(`${projectBasePath}/activity/read`, {\n body: JSON.stringify(ids === 'all' ? { all: true } : { ids }),\n method: 'POST',\n }),\n setActivityItemState: async (itemId, state) =>\n request<{ item: ActivityItem }>(`${projectBasePath}/activity/${encodeURIComponent(itemId)}`, {\n body: JSON.stringify({ state }),\n method: 'PATCH',\n }),\n createAutomation: async (input) =>\n request<MutationResult & { automation?: Automation }>(automationsBasePath, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n createSkill: async (input) =>\n request<MutationResult & { skill?: Skill }>(skillsBasePath, {\n body: JSON.stringify(input),\n method: 'POST',\n }),\n deleteAutomation: async (automationId) =>\n request<MutationResult>(`${automationsBasePath}/${encodeURIComponent(automationId)}`, { method: 'DELETE' }),\n deleteSkill: async (skillId) =>\n request<MutationResult>(`${skillsBasePath}/${encodeURIComponent(skillId)}`, { method: 'DELETE' }),\n getArtifactUrl: (artifactId, options) => {\n const suffix = options?.download ? '?download=1' : '';\n\n return `${automationsBasePath}/artifacts/${encodeURIComponent(artifactId)}/content${suffix}`;\n },\n getRunArtifacts: async (workflowRunId) =>\n request<{ artifacts: AutomationArtifact[] }>(\n `${automationsBasePath}/runs/${encodeURIComponent(workflowRunId)}/artifacts`\n ).then((response) => response.artifacts),\n getStreamUrl: (workflowRunId) => `${automationsBasePath}/runs/${encodeURIComponent(workflowRunId)}/stream`,\n getTranscriptUrl: (runId) => `${automationsBasePath}/runs/${encodeURIComponent(runId)}/transcript`,\n listChannels: async (provider, connectionId) => {\n const url = connectionId\n ? `${projectBasePath}/plugin-connections/${encodeURIComponent(connectionId)}/channels`\n : `${projectBasePath}/plugins/${provider}/channels`;\n const response = await fetch(url, {\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n const data = (await response.json()) as {\n channels?: AutomationToolChannel[];\n error?: string;\n errorMessage?: string;\n success?: boolean;\n };\n\n if (response.ok) {\n return {\n channels: data.channels ?? [],\n errorMessage: data.errorMessage,\n success: data.success ?? true,\n };\n }\n\n if (data.success === false) {\n return {\n channels: data.channels ?? [],\n errorMessage: data.errorMessage ?? `Failed to load ${provider === 'slack' ? 'Slack' : 'Teams'} channels.`,\n success: false,\n };\n }\n\n const error = data.error ? String(data.error) : 'Request failed';\n\n throw new Error(error);\n },\n runAutomation: async (automationId) =>\n request<MutationResult & { runId?: string }>(`${automationsBasePath}/${encodeURIComponent(automationId)}/runs`, {\n method: 'POST',\n }),\n updateAutomation: async (automationId, input) =>\n request<MutationResult & { automation?: Automation }>(\n `${automationsBasePath}/${encodeURIComponent(automationId)}`,\n {\n body: JSON.stringify(input),\n method: 'PATCH',\n }\n ),\n updateSkill: async (skillId, input) =>\n request<MutationResult & { skill?: Skill }>(`${skillsBasePath}/${encodeURIComponent(skillId)}`, {\n body: JSON.stringify(input),\n method: 'PATCH',\n }),\n };\n}\n\nexport class FetcherError extends Error {\n status: number;\n\n constructor(status: number, message = 'Request failed') {\n super(message);\n this.name = 'FetcherError';\n this.status = status;\n }\n}\n\nexport const fetcher = async <T>(url: string): Promise<T> => {\n const response = await fetch(url, { credentials: 'include' });\n\n if (!response.ok) {\n throw new FetcherError(response.status);\n }\n\n return (await response.json()) as T;\n};\n\nexport function paths(projectId: string): {\n activity: (_options?: { filter?: 'all' | 'needs_action'; limit?: number; offset?: number }) => string;\n activityItem: (_itemId: string) => string;\n /** Badge counts; with `since`, also the unread items created after it. */\n activitySummary: (_since?: string | null) => string;\n agentChat: (_chatId: string) => string;\n agentChatSearch: (_query: string) => string;\n agentChats: (_offset?: number) => string;\n agentProfile: () => string;\n approval: (_approvalId: string) => string;\n approvals: (_options?: {\n limit?: number;\n offset?: number;\n runId?: string;\n status?: AutomationApprovalStatus;\n }) => string;\n approvalsCount: string;\n automation: (_automationId: string) => string;\n automationRuns: (_automationId: string, _offset?: number, _limit?: number) => string;\n automations: (_options?: {\n enabled?: boolean[];\n limit?: number;\n offset?: number;\n search?: string;\n visibility?: AutomationVisibility[];\n }) => string;\n creditBalance: string;\n entities: string;\n run: (_runId: string) => string;\n runHistory: (_scope: 'mine' | 'team', _offset?: number, _limit?: number) => string;\n skill: (_skillId: string) => string;\n skills: (_options?: {\n limit?: number;\n offset?: number;\n search?: string;\n visibility?: AutomationVisibility[];\n }) => string;\n spaces: string;\n /** Members for pickers; with a space id, only members who can see that space. */\n members: (_spaceId?: string | null) => string;\n tools: (_automationId?: string) => string;\n} {\n const basePath = `/api/flexkit/${projectId}/automations`;\n const skillsBasePath = `/api/flexkit/${projectId}/skills`;\n const agentChatsBasePath = `/api/flexkit/${projectId}/agent/chats`;\n\n return {\n activity: (options = {}) => {\n const { filter = 'all', limit = 25, offset = 0 } = options;\n const params = new URLSearchParams({ filter, limit: limit.toString(), offset: offset.toString() });\n\n return `/api/flexkit/${projectId}/activity?${params.toString()}`;\n },\n activityItem: (itemId) => `/api/flexkit/${projectId}/activity/${encodeURIComponent(itemId)}`,\n activitySummary: (since) =>\n since\n ? `/api/flexkit/${projectId}/activity/summary?since=${encodeURIComponent(since)}`\n : `/api/flexkit/${projectId}/activity/summary`,\n agentChat: (chatId) => `${agentChatsBasePath}/${encodeURIComponent(chatId)}`,\n agentChatSearch: (query) => `${agentChatsBasePath}/search?q=${encodeURIComponent(query)}`,\n agentChats: (offset = 0) => `${agentChatsBasePath}?offset=${offset.toString()}`,\n agentProfile: () => `/api/flexkit/${projectId}/agent/profile`,\n approval: (approvalId) => `${basePath}/approvals/${encodeURIComponent(approvalId)}`,\n approvals: (options = {}) => {\n const { limit = 25, offset = 0, runId, status } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (status) {\n params.set('status', status);\n }\n\n if (runId) {\n params.set('runId', runId);\n }\n\n return `${basePath}/approvals?${params.toString()}`;\n },\n approvalsCount: `${basePath}/approvals?limit=1`,\n automation: (automationId) => `${basePath}/${encodeURIComponent(automationId)}`,\n automationRuns: (automationId, offset = 0, limit = 25) =>\n `${basePath}/${encodeURIComponent(automationId)}/runs?offset=${offset.toString()}&limit=${limit.toString()}`,\n automations: (options = {}) => {\n const { enabled, limit = 25, offset = 0, search, visibility } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (enabled && enabled.length > 0) {\n params.set('enabled', enabled.map((value) => (value ? 'true' : 'false')).join(','));\n }\n\n if (visibility && visibility.length > 0) {\n params.set('visibility', visibility.join(','));\n }\n\n const trimmedSearch = search?.trim();\n\n if (trimmedSearch) {\n params.set('q', trimmedSearch);\n }\n\n return `${basePath}?${params.toString()}`;\n },\n creditBalance: `${basePath}/credits`,\n entities: `${basePath}/entities`,\n run: (runId) => `${basePath}/runs/${encodeURIComponent(runId)}`,\n runHistory: (scope, offset = 0, limit = 25) =>\n `${basePath}/runs?scope=${scope}&offset=${offset.toString()}&limit=${limit.toString()}`,\n skill: (skillId) => `${skillsBasePath}/${encodeURIComponent(skillId)}`,\n skills: (options = {}) => {\n const { limit = 25, offset = 0, search, visibility } = options;\n const params = new URLSearchParams({\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (visibility && visibility.length > 0) {\n params.set('visibility', visibility.join(','));\n }\n\n const trimmedSearch = search?.trim();\n\n if (trimmedSearch) {\n params.set('q', trimmedSearch);\n }\n\n return `${skillsBasePath}?${params.toString()}`;\n },\n spaces: `/api/flexkit/${projectId}/spaces`,\n members: (spaceId) =>\n spaceId\n ? `/api/flexkit/${projectId}/members?spaceId=${encodeURIComponent(spaceId)}`\n : `/api/flexkit/${projectId}/members`,\n tools: (automationId) =>\n automationId ? `${basePath}/${encodeURIComponent(automationId)}/tools` : `${basePath}/tools`,\n };\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import'./index.css';import {f as f$1}from'./chunk-PLZUH56T.js';import {ApolloClient,InMemoryCache,defaultDataIdFromObject,from,HttpLink}from'@apollo/client';import {ApolloProvider}from'@apollo/client/react';import {ErrorLink}from'@apollo/client/link/error';import {ServerError,CombinedGraphQLErrors,CombinedProtocolErrors}from'@apollo/client/errors';import {createContext,useContext,useState,useMemo,useReducer}from'react';import {jsx}from'react/jsx-runtime';import {uniqBy,props}from'ramda';function A(r){return r?"cause"in r:false}function f(r){if(!r)return null;if(ServerError.is(r))return r;if(A(r)){let e=r.cause;if(ServerError.is(e))return e}return null}function L(r){if(!r||typeof r!="object")return null;let{message:e}=r;return typeof e=="string"?e:null}function d(r){if(!r)return null;try{return JSON.parse(r)}catch{return null}}function k(r){if(!r)return null;let e=C(r).filter(t=>!I(t));return e.length===0?null:["The deployed schema is out of sync with your local Flexkit schema.","Run `flexkit deploy` using the CLI to apply your latest schema changes.",...e.map(t=>`- ${t}`)].join(`
|
|
2
|
+
`)}function er(r,e){return r?C(r).some(t=>t.includes(`Cannot query field "${e}"`)):false}function C(r){if(CombinedGraphQLErrors.is(r))return r.errors.filter(y).map(({message:o})=>o);let e=L(r);if(e&&a(e))return [e];let t=f(r);if(t?.statusCode!==400)return [];let n=d(t.bodyText)??P(t)??b(r);return n?Array.isArray(n.errors)?n.errors.filter(y).map(o=>o.message):typeof n.message=="string"&&a(n.message)?[n.message]:typeof n.error=="string"&&a(n.error)?[n.error]:[]:[]}function P(r){let{result:e}=r;return !e||typeof e!="object"?null:e}function b(r){if(!A(r))return null;let{cause:e}=r,t=L(e);if(t&&a(t))return {message:t};if(!e||typeof e!="object")return null;let{result:n}=e;return n&&typeof n=="object"?n:null}function y(r){if(!r||typeof r!="object")return false;let{extensions:e,message:t}=r;return e?.code==="GRAPHQL_VALIDATION_FAILED"&&typeof t=="string"?true:typeof t=="string"&&a(t)}function a(r){return r.startsWith("Cannot query field ")||r.startsWith("Unknown type ")||r.startsWith('Cannot query field "')||r.includes("GRAPHQL_VALIDATION_FAILED")}function I(r){return /Cannot query field "[_A-Za-z][_0-9A-Za-z]*Total" on type "Query"/.test(r)}var U=ApolloProvider,v=createContext(void 0);function pr(){let r=useContext(v);if(!r)throw new Error("useGraphQLError must be used within GraphQLProvider");return r}var fr={userQuery:true};function H(r){return new ErrorLink(({error:e,operation:t})=>{if(t.getContext().userQuery===true)return;let n=k(e);if(n){r(n);return}CombinedGraphQLErrors.is(e)?e.errors.forEach(({message:s,locations:i,path:c})=>{console.warn(`[GraphQL error]: Message: ${s}, Location: ${i}, Path: ${c}`);}):CombinedProtocolErrors.is(e)&&e.errors.forEach(({message:s,extensions:i})=>{console.warn(`[Protocol error]: Message: ${s}, Extensions: ${JSON.stringify(i)}`);});let o=f(e);if(o?.statusCode===400){let s=d(o.bodyText),i=null;if(s&&typeof s=="object"){let{error:c,errors:g,message:E}=s;if(typeof E=="string")i=E;else if(Array.isArray(g)){let[p]=g;if(p&&typeof p.message=="string"){let{message:D}=p;i=D;}}else typeof c=="string"?i=c:i=JSON.stringify(s);}else i=o.bodyText;r(i??"There is an error in the deployed Flexkit schema. Fix flexkit.config.ts and run flexkit deploy.");}if(o){console.warn(`[Network error]: ${o.message}`);return}e&&console.warn(`[Network error]: ${e.message}`);})}function z(r,e){return from([H(e),new HttpLink({uri:`/api/flexkit/${r}/graphql`})])}function Z(r,e){return new ApolloClient({link:z(r??"",e),cache:new InMemoryCache({dataIdFromObject:t=>t._id?t._id:defaultDataIdFromObject(t)})})}function dr({children:r}){let{currentProjectId:e}=f$1(),[t,n]=useState(null),o=useMemo(()=>({schemaErrorMessage:t,setSchemaErrorMessage:n}),[t]),s=useMemo(()=>Z(e,n),[e]);return jsx(v.Provider,{value:o,children:jsx(U,{client:s,children:r})})}var G=createContext([]),M=createContext(()=>{});function K(r,e){let t=e.type;switch(e._id||(e._id=Date.now().toString()),t){case "DeleteEntity":return uniqBy(props(["type","_id"]),[...r,e]);case "AddEntity":return uniqBy(props(["type","_id"]),[...r,e]);case "EditEntity":return uniqBy(props(["type","_id"]),[...r,e]);case "EditRelationship":return uniqBy(props(["type","_id"]),[...r,e]);case "AlertDialog":return uniqBy(props(["type","_id"]),[...r,e]);case "Dismiss":return r.filter(n=>n._id!==e._id);default:throw Error(`Unknown action: ${t}`)}}function yr({children:r}){let[e,t]=useReducer(K,[]);return jsx(G.Provider,{value:e,children:jsx(M.Provider,{value:t,children:r})})}function Ar(){return useContext(G)}function Lr(){return useContext(M)}export{f as a,d as b,k as c,er as d,pr as e,fr as f,dr as g,yr as h,Ar as i,Lr as j};//# sourceMappingURL=chunk-T2DOW23R.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-T2DOW23R.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphql-client/error-utils.ts","../src/graphql-client/graphql-context.tsx","../src/entities/actions-context.tsx"],"names":["hasCause","error","getServerError","ServerError","possibleServerError","getErrorMessage","message","parseErrorBody","bodyText","getGraphQLSchemaMismatchMessage","messages","getGraphQLValidationMessages","isMissingCountStoreFieldMessage","isMissingGraphQLFieldError","fieldName","CombinedGraphQLErrors","isSchemaValidationError","directMessage","isSchemaValidationMessage","serverError","responseBody","getServerErrorResult","getErrorCauseResponse","item","result","cause","causeMessage","extensions","ApolloProviderCompat","ApolloProvider","GraphQLErrorContext","createContext","useGraphQLError","ctx","useContext","USER_QUERY_CONTEXT","createErrorLink","setSchemaErrorMessage","ErrorLink","operation","schemaMismatchMessage","locations","path","CombinedProtocolErrors","responseError","errors","responseMessage","firstError","firstErrorMessage","additiveLink","currentProjectId","from","HttpLink","client","ApolloClient","InMemoryCache","responseObject","defaultDataIdFromObject","GraphQLProvider","children","useConfig","schemaErrorMessage","useState","useMemo","apolloClient","jsx","ActionsContext","EntityDispatchContext","actionsReducer","actions","action","actionType","uniqBy","props","ActionsProvider","entityActions","dispatchEntityActions","useReducer","useActions","useDispatch"],"mappings":"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","file":"chunk-T2DOW23R.js","sourcesContent":["import type { ErrorLike } from '@apollo/client';\nimport { CombinedGraphQLErrors, ServerError } from '@apollo/client/errors';\n\ntype ErrorWithCause = ErrorLike & { cause?: unknown };\ntype ErrorWithMessage = {\n message?: unknown;\n};\ntype ServerErrorWithResult = ServerError & {\n result?: unknown;\n};\ntype GraphQLErrorResponse = {\n error?: unknown;\n errors?: unknown;\n message?: unknown;\n};\ntype GraphQLErrorItem = {\n extensions?: {\n code?: unknown;\n };\n message?: unknown;\n};\n\nfunction hasCause(error: ErrorLike): error is ErrorWithCause {\n if (!error) {\n return false;\n }\n\n return 'cause' in (error as ErrorWithCause);\n}\n\nexport function getServerError(error?: ErrorLike): ServerError | null {\n if (!error) {\n return null;\n }\n\n if (ServerError.is(error)) {\n return error;\n }\n\n if (hasCause(error)) {\n const possibleServerError = error.cause;\n\n if (ServerError.is(possibleServerError)) {\n return possibleServerError;\n }\n }\n\n return null;\n}\n\nfunction getErrorMessage(error: unknown): string | null {\n if (!error || typeof error !== 'object') {\n return null;\n }\n\n const { message } = error as ErrorWithMessage;\n\n return typeof message === 'string' ? message : null;\n}\n\nexport function parseErrorBody<T>(bodyText: string | undefined): T | null {\n if (!bodyText) {\n return null;\n }\n\n try {\n return JSON.parse(bodyText) as T;\n } catch {\n return null;\n }\n}\n\nexport function getGraphQLSchemaMismatchMessage(error?: ErrorLike): string | null {\n if (!error) {\n return null;\n }\n\n const messages = getGraphQLValidationMessages(error).filter((message) => !isMissingCountStoreFieldMessage(message));\n\n if (messages.length === 0) {\n return null;\n }\n\n return [\n 'The deployed schema is out of sync with your local Flexkit schema.',\n 'Run `flexkit deploy` using the CLI to apply your latest schema changes.',\n ...messages.map((message) => `- ${message}`),\n ].join('\\n');\n}\n\nexport function isMissingGraphQLFieldError(error: ErrorLike | undefined, fieldName: string): boolean {\n if (!error) {\n return false;\n }\n\n return getGraphQLValidationMessages(error).some((message) => {\n return message.includes(`Cannot query field \"${fieldName}\"`);\n });\n}\n\nfunction getGraphQLValidationMessages(error: ErrorLike): string[] {\n if (CombinedGraphQLErrors.is(error)) {\n return error.errors.filter(isSchemaValidationError).map(({ message }) => message);\n }\n\n const directMessage = getErrorMessage(error);\n\n if (directMessage && isSchemaValidationMessage(directMessage)) {\n return [directMessage];\n }\n\n const serverError = getServerError(error);\n\n if (serverError?.statusCode !== 400) {\n return [];\n }\n\n const responseBody =\n parseErrorBody<GraphQLErrorResponse>(serverError.bodyText) ??\n getServerErrorResult(serverError) ??\n getErrorCauseResponse(error);\n\n if (!responseBody) {\n return [];\n }\n\n if (Array.isArray(responseBody.errors)) {\n return responseBody.errors.filter(isSchemaValidationError).map((item) => item.message);\n }\n\n if (typeof responseBody.message === 'string' && isSchemaValidationMessage(responseBody.message)) {\n return [responseBody.message];\n }\n\n if (typeof responseBody.error === 'string' && isSchemaValidationMessage(responseBody.error)) {\n return [responseBody.error];\n }\n\n return [];\n}\n\nfunction getServerErrorResult(serverError: ServerError): GraphQLErrorResponse | null {\n const { result } = serverError as ServerErrorWithResult;\n\n if (!result || typeof result !== 'object') {\n return null;\n }\n\n return result as GraphQLErrorResponse;\n}\n\nfunction getErrorCauseResponse(error: ErrorLike): GraphQLErrorResponse | null {\n if (!hasCause(error)) {\n return null;\n }\n\n const { cause } = error;\n const causeMessage = getErrorMessage(cause);\n\n if (causeMessage && isSchemaValidationMessage(causeMessage)) {\n return { message: causeMessage };\n }\n\n if (!cause || typeof cause !== 'object') {\n return null;\n }\n\n const { result } = cause as { result?: unknown };\n\n if (result && typeof result === 'object') {\n return result as GraphQLErrorResponse;\n }\n\n return null;\n}\n\nfunction isSchemaValidationError(error: unknown): error is GraphQLErrorItem & { message: string } {\n if (!error || typeof error !== 'object') {\n return false;\n }\n\n const { extensions, message } = error as GraphQLErrorItem;\n const code = extensions?.code;\n\n if (code === 'GRAPHQL_VALIDATION_FAILED' && typeof message === 'string') {\n return true;\n }\n\n return typeof message === 'string' && isSchemaValidationMessage(message);\n}\n\nfunction isSchemaValidationMessage(message: string): boolean {\n return (\n message.startsWith('Cannot query field ') ||\n message.startsWith('Unknown type ') ||\n message.startsWith('Cannot query field \"') ||\n message.includes('GRAPHQL_VALIDATION_FAILED')\n );\n}\n\nfunction isMissingCountStoreFieldMessage(message: string): boolean {\n return /Cannot query field \"[_A-Za-z][_0-9A-Za-z]*Total\" on type \"Query\"/.test(message);\n}\n","'use client';\n\nimport type { JSX } from 'react';\nimport { ApolloClient, InMemoryCache, defaultDataIdFromObject, from, HttpLink } from '@apollo/client';\nimport type { ApolloLink } from '@apollo/client';\nimport { ApolloProvider } from '@apollo/client/react';\nimport { ErrorLink } from '@apollo/client/link/error';\nimport { CombinedGraphQLErrors, CombinedProtocolErrors } from '@apollo/client/errors';\nimport { getGraphQLSchemaMismatchMessage, getServerError, parseErrorBody } from './error-utils';\nimport { useConfig } from '../core/config/config-context';\nimport React, { createContext, useContext, useMemo, useState } from 'react';\n\nconst ApolloProviderCompat = ApolloProvider as unknown as React.ComponentType<{\n children?: React.ReactNode;\n client: ApolloClient;\n}>;\n\ntype GraphQLErrorContextValue = {\n schemaErrorMessage: string | null;\n setSchemaErrorMessage: React.Dispatch<React.SetStateAction<string | null>>;\n};\n\nconst GraphQLErrorContext = createContext<GraphQLErrorContextValue | undefined>(undefined);\n\nfunction useGraphQLError(): GraphQLErrorContextValue {\n const ctx = useContext(GraphQLErrorContext);\n\n if (!ctx) {\n throw new Error('useGraphQLError must be used within GraphQLProvider');\n }\n\n return ctx;\n}\n\n/**\n * Context flag for operations the user writes themselves (the Graph app's\n * Query view): any error there, a mismatch or a 400, is a typo, not a\n * deployment that drifted from the local schema, so it must not raise the\n * schema banner. The caller shows the error itself.\n */\nexport const USER_QUERY_CONTEXT = { userQuery: true } as const;\n\nfunction createErrorLink(setSchemaErrorMessage: (msg: string | null) => void): ApolloLink {\n return new ErrorLink(({ error, operation }) => {\n if (operation.getContext().userQuery === true) {\n return;\n }\n\n const schemaMismatchMessage = getGraphQLSchemaMismatchMessage(error);\n\n if (schemaMismatchMessage) {\n setSchemaErrorMessage(schemaMismatchMessage);\n\n return;\n }\n\n if (CombinedGraphQLErrors.is(error)) {\n error.errors.forEach(({ message, locations, path }) => {\n console.warn(`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`);\n });\n } else if (CombinedProtocolErrors.is(error)) {\n error.errors.forEach(({ message, extensions }) => {\n console.warn(`[Protocol error]: Message: ${message}, Extensions: ${JSON.stringify(extensions)}`);\n });\n }\n\n const serverError = getServerError(error);\n\n if (serverError?.statusCode === 400) {\n const responseBody = parseErrorBody<Record<string, unknown>>(serverError.bodyText);\n let message: string | null = null;\n\n if (responseBody && typeof responseBody === 'object') {\n const {\n error: responseError,\n errors,\n message: responseMessage,\n } = responseBody as {\n error?: unknown;\n errors?: unknown;\n message?: unknown;\n };\n\n if (typeof responseMessage === 'string') {\n message = responseMessage;\n } else if (Array.isArray(errors)) {\n const [firstError] = errors as { message?: unknown }[];\n\n if (firstError && typeof firstError.message === 'string') {\n const { message: firstErrorMessage } = firstError;\n message = firstErrorMessage;\n }\n } else if (typeof responseError === 'string') {\n message = responseError;\n } else {\n message = JSON.stringify(responseBody);\n }\n } else {\n message = serverError.bodyText;\n }\n\n setSchemaErrorMessage(\n message ?? 'There is an error in the deployed Flexkit schema. Fix flexkit.config.ts and run flexkit deploy.'\n );\n }\n\n if (serverError) {\n console.warn(`[Network error]: ${serverError.message}`);\n\n return;\n }\n\n if (error) {\n console.warn(`[Network error]: ${error.message}`);\n }\n });\n}\n\nfunction additiveLink(currentProjectId: string, setSchemaErrorMessage: (msg: string | null) => void): ApolloLink {\n return from([\n createErrorLink(setSchemaErrorMessage),\n new HttpLink({ uri: `/api/flexkit/${currentProjectId}/graphql` }),\n ]);\n}\n\nfunction client(\n currentProjectId: string | undefined,\n setSchemaErrorMessage: (msg: string | null) => void\n): ApolloClient {\n return new ApolloClient({\n link: additiveLink(currentProjectId ?? '', setSchemaErrorMessage),\n cache: new InMemoryCache({\n dataIdFromObject: (responseObject) => {\n return responseObject._id ? (responseObject._id as string) : defaultDataIdFromObject(responseObject);\n },\n }),\n });\n}\n\nexport function GraphQLProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const { currentProjectId } = useConfig();\n const [schemaErrorMessage, setSchemaErrorMessage] = useState<string | null>(null);\n const ctx = useMemo(() => ({ schemaErrorMessage, setSchemaErrorMessage }), [schemaErrorMessage]);\n const apolloClient = useMemo(() => client(currentProjectId, setSchemaErrorMessage), [currentProjectId]);\n\n return (\n <GraphQLErrorContext.Provider value={ctx}>\n <ApolloProviderCompat client={apolloClient}>{children}</ApolloProviderCompat>\n </GraphQLErrorContext.Provider>\n );\n}\n\nexport { useGraphQLError };\n","'use client';\n\nimport { createContext, useContext, useReducer } from 'react';\nimport type { Dispatch, JSX, ReactNode } from 'react';\nimport { props, uniqBy } from 'ramda';\nimport type {\n Action,\n ActionAddEntity,\n ActionAlertDialog,\n ActionDeleteEntity,\n ActionEditEntity,\n ActionEditRelationship,\n} from './types';\n\nconst ActionsContext = createContext<Action[] | []>([]);\nconst EntityDispatchContext = createContext<Dispatch<Action>>(() => undefined);\n\nfunction actionsReducer(actions: Action[], action: Action): Action[] {\n const actionType = action.type;\n\n if (!action._id) {\n action._id = Date.now().toString();\n }\n\n switch (actionType) {\n case 'DeleteEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionDeleteEntity[]), action]);\n }\n case 'AddEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAddEntity[]), action]);\n }\n case 'EditEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditEntity[]), action]);\n }\n case 'EditRelationship': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditRelationship[]), action]);\n }\n case 'AlertDialog': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAlertDialog[]), action]);\n }\n case 'Dismiss': {\n return actions.filter((item) => item._id !== action._id);\n }\n default: {\n throw Error(`Unknown action: ${actionType as string}`);\n }\n }\n}\n\nfunction ActionsProvider({ children }: { children: ReactNode }): JSX.Element {\n const [entityActions, dispatchEntityActions] = useReducer(actionsReducer, []);\n\n return (\n <ActionsContext.Provider value={entityActions}>\n <EntityDispatchContext.Provider value={dispatchEntityActions}>{children}</EntityDispatchContext.Provider>\n </ActionsContext.Provider>\n );\n}\n\nfunction useActions(): Action[] {\n return useContext(ActionsContext);\n}\n\nfunction useDispatch(): Dispatch<Action> {\n return useContext(EntityDispatchContext);\n}\n\nexport { ActionsProvider, useActions, useDispatch };\n"]}
|