@mondaydotcomorg/atp-client 0.19.6 → 0.19.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dist/client.d.ts +23 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +26 -5
- package/dist/client.js.map +1 -1
- package/dist/core/api-operations.d.ts +4 -2
- package/dist/core/api-operations.d.ts.map +1 -1
- package/dist/core/api-operations.js +25 -1
- package/dist/core/api-operations.js.map +1 -1
- package/dist/core/execution-operations.d.ts +4 -2
- package/dist/core/execution-operations.d.ts.map +1 -1
- package/dist/core/execution-operations.js +60 -40
- package/dist/core/execution-operations.js.map +1 -1
- package/dist/core/in-process-session.d.ts +96 -0
- package/dist/core/in-process-session.d.ts.map +1 -0
- package/dist/core/in-process-session.js +175 -0
- package/dist/core/in-process-session.js.map +1 -0
- package/dist/core/index.cjs +1192 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1181 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/session.d.ts +24 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js.map +1 -1
- package/dist/index.cjs +1589 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1577 -6
- package/dist/index.js.map +1 -1
- package/package.json +12 -7
- package/src/client.ts +51 -7
- package/src/core/api-operations.ts +38 -3
- package/src/core/execution-operations.ts +73 -45
- package/src/core/in-process-session.ts +293 -0
- package/src/core/index.ts +1 -0
- package/src/core/session.ts +20 -1
- package/src/index.ts +2 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../src/core/session.ts","../src/core/in-process-session.ts","../src/core/api-operations.ts","../src/errors.ts","../src/core/provenance-registry.ts","../src/core/execution-operations.ts","../src/core/service-providers.ts","../src/tools/types.ts","../src/tools/search-api.ts","../src/tools/fetch-all-apis.ts","../src/tools/execute-code.ts","../src/tools/explore-api.ts","../src/client.ts","../src/generator.ts","../src/tools.ts"],"names":["ClientSession","baseUrl","customHeaders","clientId","clientToken","initPromise","hooks","constructor","headers","init","clientInfo","tools","services","token","expiresAt","tokenRotateAt","url","body","JSON","stringify","prepareHeaders","response","fetch","method","ok","Error","status","statusText","data","json","getClientId","ensureInitialized","getHeaders","getBaseUrl","updateToken","newToken","get","preRequest","result","currentHeaders","abort","abortReason","error","InProcessSession","server","initialized","start","ctx","createContext","path","handleInit","_response","_method","_url","_body","getDefinitions","options","query","apiGroups","join","getRuntimeDefinitions","apis","length","getServerInfo","getInfo","search","handleSearch","explore","handleExplore","execute","code","config","handleExecute","resume","executionId","callbackResult","handleResume","resumeWithBatchResults","batchResults","results","noopLogger","debug","info","warn","logger","responseBody","throw","message","assert","condition","set","APIOperations","session","inProcessSession","apiDefinitions","connect","typescript","serverVersion","version","capabilities","params","URLSearchParams","getTypeDefinitions","searchAPI","exploreAPI","undefined","toString","text","ClientCallbackError","name","ProvenanceTokenRegistry","cache","Map","maxSize","ttl","sequenceCounter","ttlHours","add","evictExpired","size","evictLRU","addedAt","Date","now","sequence","getRecentTokens","maxCount","expiredTokens","entries","Array","from","values","filter","entry","split","push","payload","parse","Buffer","sort","a","b","slice","delete","map","e","clear","toDelete","oldestToken","oldestSequence","Infinity","ExecutionOperations","serviceProviders","tokenRegistry","lastExecutionConfig","executeStream","onProgress","Promise","resolve","reject","fetchImpl","require","then","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","stream","lines","pop","i","line","startsWith","event","substring","trim","j","dataLine","dataStr","fraction","log","catch","hints","detectedClientServices","hasLLM","getLLM","hasApproval","getApproval","hasEmbedding","getEmbedding","hasTools","executionConfig","clientServices","provenanceHints","provenanceTokens","ExecutionStatus","PAUSED","needsCallbacks","handleBatchCallbacksAndResume","needsCallback","handlePauseAndResume","pausedResult","missingServiceIds","Set","cb","hasServiceForCallback","type","id","missingServices","has","explicitlyRequestedMissing","wasServiceExplicitlyRequested","unexpectedMissing","errorMessage","operation","existingCallbacks","existingResults","all","handleCallback","allResults","__error","find","r","String","allErrorResults","callbackCount","wasExplicitlyRequested","callbackType","CallbackType","LLM","APPROVAL","EMBEDDING","TOOL","LLMOperation","CALL","EXTRACT","CLASSIFY","EmbeddingOperation","EMBED","SEARCH","ServiceProviders","providers","toolHandlers","tool","handler","provideLLM","llm","provideApproval","approval","provideEmbedding","embedding","provideTools","getTools","getToolDefinitions","definition","hasAnyServices","calls","call","prompt","extract","schema","classify","categories","contextWithExecutionId","context","request","embed","queryEmbedding","similarity","text1","text2","ToolOperation","toolName","input","ToolNames","SEARCH_API","FETCH_ALL_APIS","EXECUTE_CODE","EXPLORE_API","searchApiInputSchema","z","object","string","describe","createSearchApiTool","client","description","inputSchema","zodToJsonSchema","zodSchema","func","success","apiGroup","functionName","signature","count","fetchAllApisInputSchema","array","optional","createFetchAllApisTool","_input","executeCodeInputSchema","timeout","number","maxMemory","createExecuteCodeTool","COMPLETED","stats","duration","memoryUsed","FAILED","stack","exploreApiInputSchema","createExploreApiTool","items","group","AgentToolProtocolClient","apiOps","execOps","toolDefinitions","getClientTools","getClientToolDefinitions","getATPTools","CodeGenerator","generateCode","intent","parameters","types","typesLength","createToolsFromATPClient"],"mappings":";;;;;;;;;;;;;;;;AAsBO,IAAMA,gBAAN,MAAMA;EAAb;;;AACSC,EAAAA,OAAAA;AACAC,EAAAA,aAAAA;AACAC,EAAAA,QAAAA;AACAC,EAAAA,WAAAA;AACAC,EAAAA,WAAAA;AACAC,EAAAA,KAAAA;EAERC,WAAAA,CAAYN,OAAAA,EAAiBO,SAAkCF,KAAAA,EAAqB;AACnF,IAAA,IAAA,CAAKL,OAAAA,GAAUA,OAAAA;AACf,IAAA,IAAA,CAAKC,aAAAA,GAAgBM,WAAW,EAAC;AACjC,IAAA,IAAA,CAAKF,KAAAA,GAAQA,KAAAA;AACd,EAAA;;;;;;;;;EAUA,MAAMG,IAAAA,CACLC,UAAAA,EACAC,KAAAA,EACAC,QAAAA,EAME;AACF,IAAA,IAAI,KAAKP,WAAAA,EAAa;AACrB,MAAA,MAAM,IAAA,CAAKA,WAAAA;AACX,MAAA,OAAO;AACNF,QAAAA,QAAAA,EAAU,IAAA,CAAKA,QAAAA;AACfU,QAAAA,KAAAA,EAAO,IAAA,CAAKT,WAAAA;QACZU,SAAAA,EAAW,CAAA;QACXC,aAAAA,EAAe;AAChB,OAAA;AACD,IAAA;AAEA,IAAA,IAAA,CAAKV,eAAe,YAAA;AACnB,MAAA,MAAMW,GAAAA,GAAM,CAAA,EAAG,IAAA,CAAKf,OAAO,CAAA,SAAA,CAAA;AAC3B,MAAA,MAAMgB,IAAAA,GAAOC,KAAKC,SAAAA,CAAU;AAC3BT,QAAAA,UAAAA;AACAC,QAAAA,KAAAA,EAAOA,SAAS,EAAA;AAChBC,QAAAA;OACD,CAAA;AACA,MAAA,MAAMJ,UAAU,MAAM,IAAA,CAAKY,cAAAA,CAAe,MAAA,EAAQJ,KAAKC,IAAAA,CAAAA;AAEvD,MAAA,MAAMI,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;QACjCO,MAAAA,EAAQ,MAAA;AACRf,QAAAA,OAAAA;AACAS,QAAAA;OACD,CAAA;AAEA,MAAA,IAAI,CAACI,SAASG,EAAAA,EAAI;AACjB,QAAA,MAAM,IAAIC,MAAM,CAAA,8BAAA,EAAiCJ,QAAAA,CAASK,MAAM,CAAA,CAAA,EAAIL,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AAC1F,MAAA;AAEA,MAAA,MAAMC,IAAAA,GAAQ,MAAMP,QAAAA,CAASQ,IAAAA,EAAI;AAOjC,MAAA,IAAA,CAAK1B,WAAWyB,IAAAA,CAAKzB,QAAAA;AACrB,MAAA,IAAA,CAAKC,cAAcwB,IAAAA,CAAKf,KAAAA;IACzB,CAAA,GAAA;AAEA,IAAA,MAAM,IAAA,CAAKR,WAAAA;AAEX,IAAA,OAAO;AACNF,MAAAA,QAAAA,EAAU,IAAA,CAAKA,QAAAA;AACfU,MAAAA,KAAAA,EAAO,IAAA,CAAKT,WAAAA;MACZU,SAAAA,EAAW,CAAA;MACXC,aAAAA,EAAe;AAChB,KAAA;AACD,EAAA;;;;EAKAe,WAAAA,GAAsB;AACrB,IAAA,IAAI,CAAC,KAAK3B,QAAAA,EAAU;AACnB,MAAA,MAAM,IAAIsB,MAAM,4CAAA,CAAA;AACjB,IAAA;AACA,IAAA,OAAO,IAAA,CAAKtB,QAAAA;AACb,EAAA;;;;AAKA,EAAA,MAAM4B,iBAAAA,GAAmC;AACxC,IAAA,IAAI,CAAC,KAAK5B,QAAAA,EAAU;AACnB,MAAA,MAAM,IAAIsB,MAAM,4CAAA,CAAA;AACjB,IAAA;AACD,EAAA;;;;EAKAO,UAAAA,GAAqC;AACpC,IAAA,MAAMxB,OAAAA,GAAkC;MACvC,cAAA,EAAgB,kBAAA;AAChB,MAAA,GAAG,IAAA,CAAKN;AACT,KAAA;AAEA,IAAA,IAAI,KAAKC,QAAAA,EAAU;AAClBK,MAAAA,OAAAA,CAAQ,aAAA,IAAiB,IAAA,CAAKL,QAAAA;AAC/B,IAAA;AAEA,IAAA,IAAI,KAAKC,WAAAA,EAAa;AACrBI,MAAAA,OAAAA,CAAQ,eAAA,CAAA,GAAmB,CAAA,OAAA,EAAU,IAAA,CAAKJ,WAAW,CAAA,CAAA;AACtD,IAAA;AAEA,IAAA,OAAOI,OAAAA;AACR,EAAA;EAEAyB,UAAAA,GAAqB;AACpB,IAAA,OAAO,IAAA,CAAKhC,OAAAA;AACb,EAAA;;;;AAKAiC,EAAAA,WAAAA,CAAYb,QAAAA,EAA0B;AACrC,IAAA,MAAMc,QAAAA,GAAWd,QAAAA,CAASb,OAAAA,CAAQ4B,GAAAA,CAAI,aAAA,CAAA;AACtC,IAAA,IAAID,QAAAA,EAAU;AACb,MAAA,IAAA,CAAK/B,WAAAA,GAAc+B,QAAAA;AACpB,IAAA;AACD,EAAA;;;;EAKA,MAAMf,cAAAA,CACLG,MAAAA,EACAP,GAAAA,EACAC,IAAAA,EACkC;AAClC,IAAA,IAAIT,OAAAA,GAAkC;MACrC,cAAA,EAAgB,kBAAA;AAChB,MAAA,GAAG,IAAA,CAAKN;AACT,KAAA;AAEA,IAAA,IAAI,KAAKC,QAAAA,EAAU;AAClBK,MAAAA,OAAAA,CAAQ,aAAA,IAAiB,IAAA,CAAKL,QAAAA;AAC/B,IAAA;AAEA,IAAA,IAAI,KAAKC,WAAAA,EAAa;AACrBI,MAAAA,OAAAA,CAAQ,eAAA,CAAA,GAAmB,CAAA,OAAA,EAAU,IAAA,CAAKJ,WAAW,CAAA,CAAA;AACtD,IAAA;AAEA,IAAA,IAAI,IAAA,CAAKE,OAAO+B,UAAAA,EAAY;AAC3B,MAAA,IAAI;AACH,QAAA,MAAMC,MAAAA,GAAS,MAAM,IAAA,CAAKhC,KAAAA,CAAM+B,UAAAA,CAAW;AAC1CrB,UAAAA,GAAAA;AACAO,UAAAA,MAAAA;UACAgB,cAAAA,EAAgB/B,OAAAA;AAChBS,UAAAA;SACD,CAAA;AAEA,QAAA,IAAIqB,OAAOE,KAAAA,EAAO;AACjB,UAAA,MAAM,IAAIf,KAAAA,CAAMa,MAAAA,CAAOG,WAAAA,IAAe,oCAAA,CAAA;AACvC,QAAA;AAEA,QAAA,IAAIH,OAAO9B,OAAAA,EAAS;AACnBA,UAAAA,OAAAA,GAAU8B,MAAAA,CAAO9B,OAAAA;AAClB,QAAA;AACD,MAAA,CAAA,CAAA,OAASkC,KAAAA,EAAO;AACf,QAAA,MAAMA,KAAAA;AACP,MAAA;AACD,IAAA;AAEA,IAAA,OAAOlC,OAAAA;AACR,EAAA;AACD,CAAA;;;ACnKO,IAAMmC,mBAAN,MAAMA;EAAb;;;AACSC,EAAAA,MAAAA;AACAzC,EAAAA,QAAAA;AACAC,EAAAA,WAAAA;EACAyC,WAAAA,GAAuB,KAAA;AACvBxC,EAAAA,WAAAA;AAERE,EAAAA,WAAAA,CAAYqC,MAAAA,EAAyB;AACpC,IAAA,IAAA,CAAKA,MAAAA,GAASA,MAAAA;AACf,EAAA;EAEA,MAAMnC,IAAAA,CACLC,UAAAA,EACAC,KAAAA,EACAC,QAAAA,EAME;AACF,IAAA,IAAI,KAAKP,WAAAA,EAAa;AACrB,MAAA,MAAM,IAAA,CAAKA,WAAAA;AACX,MAAA,OAAO;AACNF,QAAAA,QAAAA,EAAU,IAAA,CAAKA,QAAAA;AACfU,QAAAA,KAAAA,EAAO,IAAA,CAAKT,WAAAA;QACZU,SAAAA,EAAW,CAAA;QACXC,aAAAA,EAAe;AAChB,OAAA;AACD,IAAA;AAEA,IAAA,IAAA,CAAKV,eAAe,YAAA;AACnB,MAAA,MAAM,IAAA,CAAKuC,OAAOE,KAAAA,EAAK;AAEvB,MAAA,MAAMC,GAAAA,GAAM,KAAKC,aAAAA,CAAc;QAC9BzB,MAAAA,EAAQ,MAAA;QACR0B,IAAAA,EAAM,WAAA;QACNhC,IAAAA,EAAM;AACLP,UAAAA,UAAAA;AACAC,UAAAA,KAAAA,EAAOA,SAAS,EAAA;AAChBC,UAAAA;AACD;OACD,CAAA;AAEA,MAAA,MAAM0B,MAAAA,GAAU,MAAM,IAAA,CAAKM,MAAAA,CAAOM,WAAWH,GAAAA,CAAAA;AAO7C,MAAA,IAAA,CAAK5C,WAAWmC,MAAAA,CAAOnC,QAAAA;AACvB,MAAA,IAAA,CAAKC,cAAckC,MAAAA,CAAOzB,KAAAA;AAC1B,MAAA,IAAA,CAAKgC,WAAAA,GAAc,IAAA;IACpB,CAAA,GAAA;AAEA,IAAA,MAAM,IAAA,CAAKxC,WAAAA;AAEX,IAAA,OAAO;AACNF,MAAAA,QAAAA,EAAU,IAAA,CAAKA,QAAAA;AACfU,MAAAA,KAAAA,EAAO,IAAA,CAAKT,WAAAA;MACZU,SAAAA,EAAW,CAAA;MACXC,aAAAA,EAAe;AAChB,KAAA;AACD,EAAA;EAEAe,WAAAA,GAAsB;AACrB,IAAA,IAAI,CAAC,KAAK3B,QAAAA,EAAU;AACnB,MAAA,MAAM,IAAIsB,MAAM,4CAAA,CAAA;AACjB,IAAA;AACA,IAAA,OAAO,IAAA,CAAKtB,QAAAA;AACb,EAAA;AAEA,EAAA,MAAM4B,iBAAAA,GAAmC;AACxC,IAAA,IAAI,CAAC,KAAKc,WAAAA,EAAa;AACtB,MAAA,MAAM,IAAIpB,MAAM,4CAAA,CAAA;AACjB,IAAA;AACD,EAAA;EAEAO,UAAAA,GAAqC;AACpC,IAAA,MAAMxB,OAAAA,GAAkC;MACvC,cAAA,EAAgB;AACjB,KAAA;AAEA,IAAA,IAAI,KAAKL,QAAAA,EAAU;AAClBK,MAAAA,OAAAA,CAAQ,aAAA,IAAiB,IAAA,CAAKL,QAAAA;AAC/B,IAAA;AAEA,IAAA,IAAI,KAAKC,WAAAA,EAAa;AACrBI,MAAAA,OAAAA,CAAQ,eAAA,CAAA,GAAmB,CAAA,OAAA,EAAU,IAAA,CAAKJ,WAAW,CAAA,CAAA;AACtD,IAAA;AAEA,IAAA,OAAOI,OAAAA;AACR,EAAA;EAEAyB,UAAAA,GAAqB;AACpB,IAAA,OAAO,EAAA;AACR,EAAA;AAEAC,EAAAA,WAAAA,CAAYiB,SAAAA,EAA2B;AAEvC,EAAA;EAEA,MAAM/B,cAAAA,CACLgC,OAAAA,EACAC,IAAAA,EACAC,KAAAA,EACkC;AAClC,IAAA,OAAO,KAAKtB,UAAAA,EAAU;AACvB,EAAA;AAEA,EAAA,MAAMuB,eAAeC,OAAAA,EAIlB;AACF,IAAA,MAAM,KAAKzB,iBAAAA,EAAiB;AAE5B,IAAA,MAAMgB,GAAAA,GAAM,KAAKC,aAAAA,CAAc;MAC9BzB,MAAAA,EAAQ,KAAA;MACR0B,IAAAA,EAAM,kBAAA;AACNQ,MAAAA,KAAAA,EAAOD,SAASE,SAAAA,GAAY;QAAEA,SAAAA,EAAWF,OAAAA,CAAQE,SAAAA,CAAUC,IAAAA,CAAK,GAAA;AAAK,OAAA,GAAI;KAC1E,CAAA;AAEA,IAAA,OAAQ,MAAM,IAAA,CAAKf,MAAAA,CAAOW,cAAAA,CAAeR,GAAAA,CAAAA;AAK1C,EAAA;AAEA,EAAA,MAAMa,sBAAsBJ,OAAAA,EAAgD;AAC3E,IAAA,MAAM,KAAKzB,iBAAAA,EAAiB;AAE5B,IAAA,MAAMgB,GAAAA,GAAM,KAAKC,aAAAA,CAAc;MAC9BzB,MAAAA,EAAQ,KAAA;MACR0B,IAAAA,EAAM,cAAA;MACNQ,KAAAA,EAAOD,OAAAA,EAASK,MAAMC,MAAAA,GAAS;QAAED,IAAAA,EAAML,OAAAA,CAAQK,IAAAA,CAAKF,IAAAA,CAAK,GAAA;AAAK,OAAA,GAAI;KACnE,CAAA;AAEA,IAAA,OAAO,MAAM,IAAA,CAAKf,MAAAA,CAAOgB,qBAAAA,CAAsBb,GAAAA,CAAAA;AAChD,EAAA;AAEA,EAAA,MAAMgB,aAAAA,GAGH;AACF,IAAA,MAAM,KAAKhC,iBAAAA,EAAiB;AAC5B,IAAA,OAAO,IAAA,CAAKa,OAAOoB,OAAAA,EAAO;AAI3B,EAAA;EAEA,MAAMC,MAAAA,CAAOR,OAAeD,OAAAA,EAAoE;AAC/F,IAAA,MAAM,KAAKzB,iBAAAA,EAAiB;AAE5B,IAAA,MAAMgB,GAAAA,GAAM,KAAKC,aAAAA,CAAc;MAC9BzB,MAAAA,EAAQ,MAAA;MACR0B,IAAAA,EAAM,aAAA;MACNhC,IAAAA,EAAM;AAAEwC,QAAAA,KAAAA;QAAO,GAAGD;AAAQ;KAC3B,CAAA;AAEA,IAAA,OAAQ,MAAM,IAAA,CAAKZ,MAAAA,CAAOsB,YAAAA,CAAanB,GAAAA,CAAAA;AACxC,EAAA;AAEA,EAAA,MAAMoB,QAAQlB,IAAAA,EAAgC;AAC7C,IAAA,MAAM,KAAKlB,iBAAAA,EAAiB;AAE5B,IAAA,MAAMgB,GAAAA,GAAM,KAAKC,aAAAA,CAAc;MAC9BzB,MAAAA,EAAQ,MAAA;MACR0B,IAAAA,EAAM,cAAA;MACNhC,IAAAA,EAAM;AAAEgC,QAAAA;AAAK;KACd,CAAA;AAEA,IAAA,OAAO,MAAM,IAAA,CAAKL,MAAAA,CAAOwB,aAAAA,CAAcrB,GAAAA,CAAAA;AACxC,EAAA;EAEA,MAAMsB,OAAAA,CAAQC,MAAcC,MAAAA,EAAoD;AAC/E,IAAA,MAAM,KAAKxC,iBAAAA,EAAiB;AAE5B,IAAA,MAAMgB,GAAAA,GAAM,KAAKC,aAAAA,CAAc;MAC9BzB,MAAAA,EAAQ,MAAA;MACR0B,IAAAA,EAAM,cAAA;MACNhC,IAAAA,EAAM;AAAEqD,QAAAA,IAAAA;AAAMC,QAAAA;AAAO;KACtB,CAAA;AAEA,IAAA,OAAO,MAAM,IAAA,CAAK3B,MAAAA,CAAO4B,aAAAA,CAAczB,GAAAA,CAAAA;AACxC,EAAA;EAEA,MAAM0B,MAAAA,CAAOC,aAAqBC,cAAAA,EAA2C;AAC5E,IAAA,MAAM,KAAK5C,iBAAAA,EAAiB;AAE5B,IAAA,MAAMgB,GAAAA,GAAM,KAAKC,aAAAA,CAAc;MAC9BzB,MAAAA,EAAQ,MAAA;AACR0B,MAAAA,IAAAA,EAAM,eAAeyB,WAAAA,CAAAA,CAAAA;MACrBzD,IAAAA,EAAM;QAAEqB,MAAAA,EAAQqC;AAAe;KAChC,CAAA;AAEA,IAAA,OAAO,MAAM,IAAA,CAAK/B,MAAAA,CAAOgC,YAAAA,CAAa7B,KAAK2B,WAAAA,CAAAA;AAC5C,EAAA;EAEA,MAAMG,sBAAAA,CACLH,aACAI,YAAAA,EACmB;AACnB,IAAA,MAAM,KAAK/C,iBAAAA,EAAiB;AAE5B,IAAA,MAAMgB,GAAAA,GAAM,KAAKC,aAAAA,CAAc;MAC9BzB,MAAAA,EAAQ,MAAA;AACR0B,MAAAA,IAAAA,EAAM,eAAeyB,WAAAA,CAAAA,CAAAA;MACrBzD,IAAAA,EAAM;QAAE8D,OAAAA,EAASD;AAAa;KAC/B,CAAA;AAEA,IAAA,OAAO,MAAM,IAAA,CAAKlC,MAAAA,CAAOgC,YAAAA,CAAa7B,KAAK2B,WAAAA,CAAAA;AAC5C,EAAA;AAEQ1B,EAAAA,aAAAA,CAAcQ,OAAAA,EAKM;AAC3B,IAAA,MAAMwB,UAAAA,GAAa;AAClBC,MAAAA,KAAAA,kBAAO,MAAA,CAAA,MAAA;MAAO,CAAA,EAAP,OAAA,CAAA;AACPC,MAAAA,IAAAA,kBAAM,MAAA,CAAA,MAAA;MAAO,CAAA,EAAP,MAAA,CAAA;AACNC,MAAAA,IAAAA,kBAAM,MAAA,CAAA,MAAA;MAAO,CAAA,EAAP,MAAA,CAAA;AACNzC,MAAAA,KAAAA,kBAAO,MAAA,CAAA,MAAA;MAAO,CAAA,EAAP,OAAA;AACR,KAAA;AAEA,IAAA,OAAO;AACNnB,MAAAA,MAAAA,EAAQiC,OAAAA,CAAQjC,MAAAA;AAChB0B,MAAAA,IAAAA,EAAMO,OAAAA,CAAQP,IAAAA;MACdQ,KAAAA,EAAOD,OAAAA,CAAQC,SAAS,EAAC;AACzBjD,MAAAA,OAAAA,EAAS,KAAKwB,UAAAA,EAAU;AACxBf,MAAAA,IAAAA,EAAMuC,OAAAA,CAAQvC,IAAAA;AACdd,MAAAA,QAAAA,EAAU,IAAA,CAAKA,QAAAA;AACfC,MAAAA,WAAAA,EAAa,IAAA,CAAKA,WAAAA;MAClBgF,MAAAA,EAAQJ,UAAAA;MACRtD,MAAAA,EAAQ,GAAA;MACR2D,YAAAA,EAAc,IAAA;MACdC,KAAAA,kBAAO,MAAA,CAAA,CAAC5D,QAAgB6D,OAAAA,KAAAA;AACvB,QAAA,MAAM7C,KAAAA,GAAQ,IAAIjB,KAAAA,CAAM8D,OAAAA,CAAAA;AACvB7C,QAAAA,KAAAA,CAAqChB,MAAAA,GAASA,MAAAA;AAC/C,QAAA,MAAMgB,KAAAA;MACP,CAAA,EAJO,OAAA,CAAA;MAKP8C,MAAAA,kBAAQ,MAAA,CAAA,CAACC,WAAoBF,OAAAA,KAAAA;AAC5B,QAAA,IAAI,CAACE,SAAAA,EAAW;AACf,UAAA,MAAM,IAAIhE,MAAM8D,OAAAA,CAAAA;AACjB,QAAA;MACD,CAAA,EAJQ,QAAA,CAAA;AAKRG,MAAAA,GAAAA,kBAAK,MAAA,CAAA,MAAA;MAAO,CAAA,EAAP,KAAA;AACN,KAAA;AACD,EAAA;AACD;;;AC/RO,IAAMC,gBAAN,MAAMA;EAAb;;;AACSC,EAAAA,OAAAA;AACAC,EAAAA,gBAAAA;AACAC,EAAAA,cAAAA;AAERvF,EAAAA,WAAAA,CAAYqF,SAAmBC,gBAAAA,EAAqC;AACnE,IAAA,IAAA,CAAKD,OAAAA,GAAUA,OAAAA;AACf,IAAA,IAAA,CAAKC,gBAAAA,GAAmBA,gBAAAA;AACzB,EAAA;;;;AAKA,EAAA,MAAME,QAAQvC,OAAAA,EAIX;AACF,IAAA,MAAM,IAAA,CAAKoC,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,IAAI,KAAK8D,gBAAAA,EAAkB;AAC1B,MAAA,MAAMjE,KAAAA,GAAO,MAAM,IAAA,CAAKiE,gBAAAA,CAAiBtC,eAAeC,OAAAA,CAAAA;AACxD,MAAA,IAAA,CAAKsC,iBAAiBlE,KAAAA,CAAKoE,UAAAA;AAC3B,MAAA,OAAO;AACNC,QAAAA,aAAAA,EAAerE,KAAAA,CAAKsE,OAAAA;AACpBC,QAAAA,YAAAA,EAAc,EAAC;AACfzC,QAAAA,SAAAA,EAAW9B,KAAAA,CAAK8B;AACjB,OAAA;AACD,IAAA;AAEA,IAAA,MAAM0C,MAAAA,GAAS,IAAIC,eAAAA,EAAAA;AACnB,IAAA,IAAI7C,SAASE,SAAAA,EAAW;AACvB0C,MAAAA,MAAAA,CAAOV,IAAI,WAAA,EAAalC,OAAAA,CAAQE,SAAAA,CAAUC,IAAAA,CAAK,GAAA,CAAA,CAAA;AAChD,IAAA;AAEA,IAAA,MAAM3C,MAAM,CAAA,EAAG,IAAA,CAAK4E,QAAQ3D,UAAAA,EAAU,oBAAsBmE,MAAAA,CAAAA,CAAAA;AAC5D,IAAA,MAAM5F,UAAU,MAAM,IAAA,CAAKoF,OAAAA,CAAQxE,cAAAA,CAAe,OAAOJ,GAAAA,CAAAA;AAEzD,IAAA,MAAMK,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;AAAER,MAAAA;KAAQ,CAAA;AAE5C,IAAA,IAAI,CAACa,SAASG,EAAAA,EAAI;AACjB,MAAA,MAAM,IAAIC,MAAM,CAAA,mBAAA,EAAsBJ,QAAAA,CAASK,MAAM,CAAA,CAAA,EAAIL,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AAC/E,IAAA;AAEA,IAAA,MAAMC,IAAAA,GAAQ,MAAMP,QAAAA,CAASQ,IAAAA,EAAI;AAKjC,IAAA,IAAA,CAAKiE,iBAAiBlE,IAAAA,CAAKoE,UAAAA;AAE3B,IAAA,OAAO;AACNC,MAAAA,aAAAA,EAAerE,IAAAA,CAAKsE,OAAAA;AACpBC,MAAAA,YAAAA,EAAc,EAAC;AACfzC,MAAAA,SAAAA,EAAW9B,IAAAA,CAAK8B;AACjB,KAAA;AACD,EAAA;;;;EAKA4C,kBAAAA,GAA6B;AAC5B,IAAA,IAAI,CAAC,KAAKR,cAAAA,EAAgB;AACzB,MAAA,MAAM,IAAIrE,MAAM,sCAAA,CAAA;AACjB,IAAA;AACA,IAAA,OAAO,IAAA,CAAKqE,cAAAA;AACb,EAAA;;;;EAKA,MAAMS,SAAAA,CAAU9C,OAAeD,OAAAA,EAAkD;AAChF,IAAA,MAAM,IAAA,CAAKoC,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,IAAI,KAAK8D,gBAAAA,EAAkB;AAC1B,MAAA,MAAMjE,QAAO,MAAM,IAAA,CAAKiE,gBAAAA,CAAiB5B,MAAAA,CACxCR,OACAD,OAAAA,CAAAA;AAED,MAAA,OAAO5B,KAAAA,CAAKmD,OAAAA;AACb,IAAA;AAEA,IAAA,MAAM/D,GAAAA,GAAM,CAAA,EAAG,IAAA,CAAK4E,OAAAA,CAAQ3D,YAAU,CAAA,WAAA,CAAA;AACtC,IAAA,MAAMhB,IAAAA,GAAOC,KAAKC,SAAAA,CAAU;AAAEsC,MAAAA,KAAAA;MAAO,GAAGD;KAAQ,CAAA;AAChD,IAAA,MAAMhD,UAAU,MAAM,IAAA,CAAKoF,QAAQxE,cAAAA,CAAe,MAAA,EAAQJ,KAAKC,IAAAA,CAAAA;AAE/D,IAAA,MAAMI,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;MACjCO,MAAAA,EAAQ,MAAA;AACRf,MAAAA,OAAAA;AACAS,MAAAA;KACD,CAAA;AAEA,IAAA,IAAI,CAACI,SAASG,EAAAA,EAAI;AACjB,MAAA,MAAM,IAAIC,MAAM,CAAA,eAAA,EAAkBJ,QAAAA,CAASK,MAAM,CAAA,CAAA,EAAIL,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AAC3E,IAAA;AAEA,IAAA,MAAMC,IAAAA,GAAQ,MAAMP,QAAAA,CAASQ,IAAAA,EAAI;AACjC,IAAA,OAAOD,IAAAA,CAAKmD,OAAAA;AACb,EAAA;;;;AAKA,EAAA,MAAMyB,WAAWvD,IAAAA,EAAsC;AACtD,IAAA,MAAM,IAAA,CAAK2C,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,IAAI,KAAK8D,gBAAAA,EAAkB;AAC1B,MAAA,OAAQ,MAAM,IAAA,CAAKA,gBAAAA,CAAiB1B,OAAAA,CAAQlB,IAAAA,CAAAA;AAC7C,IAAA;AAEA,IAAA,MAAMjC,GAAAA,GAAM,CAAA,EAAG,IAAA,CAAK4E,OAAAA,CAAQ3D,YAAU,CAAA,YAAA,CAAA;AACtC,IAAA,MAAMhB,IAAAA,GAAOC,KAAKC,SAAAA,CAAU;AAAE8B,MAAAA;KAAK,CAAA;AACnC,IAAA,MAAMzC,UAAU,MAAM,IAAA,CAAKoF,QAAQxE,cAAAA,CAAe,MAAA,EAAQJ,KAAKC,IAAAA,CAAAA;AAE/D,IAAA,MAAMI,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;MACjCO,MAAAA,EAAQ,MAAA;AACRf,MAAAA,OAAAA;AACAS,MAAAA;KACD,CAAA;AAEA,IAAA,IAAI,CAACI,SAASG,EAAAA,EAAI;AACjB,MAAA,MAAM,IAAIC,MAAM,CAAA,gBAAA,EAAmBJ,QAAAA,CAASK,MAAM,CAAA,CAAA,EAAIL,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AAC5E,IAAA;AAEA,IAAA,OAAQ,MAAMN,SAASQ,IAAAA,EAAI;AAC5B,EAAA;;;;AAKA,EAAA,MAAMkC,aAAAA,GAGH;AACF,IAAA,MAAM,IAAA,CAAK6B,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,IAAI,KAAK8D,gBAAAA,EAAkB;AAC1B,MAAA,OAAO,MAAM,IAAA,CAAKA,gBAAAA,CAAiB9B,aAAAA,EAAa;AACjD,IAAA;AAEA,IAAA,MAAM/C,GAAAA,GAAM,CAAA,EAAG,IAAA,CAAK4E,OAAAA,CAAQ3D,YAAU,CAAA,SAAA,CAAA;AACtC,IAAA,MAAMzB,UAAU,MAAM,IAAA,CAAKoF,OAAAA,CAAQxE,cAAAA,CAAe,OAAOJ,GAAAA,CAAAA;AAEzD,IAAA,MAAMK,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;AAAER,MAAAA;KAAQ,CAAA;AAE5C,IAAA,IAAI,CAACa,SAASG,EAAAA,EAAI;AACjB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,2BAAA,EAA8BJ,QAAAA,CAASK,MAAM,CAAA,CAAE,CAAA;AAChE,IAAA;AAEA,IAAA,OAAQ,MAAML,SAASQ,IAAAA,EAAI;AAI5B,EAAA;;;;;;;;;;;;;;AAeA,EAAA,MAAM+B,sBAAsBJ,OAAAA,EAAwD;AACnF,IAAA,MAAM,IAAA,CAAKoC,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,IAAI,KAAK8D,gBAAAA,EAAkB;AAC1B,MAAA,OAAO,MAAM,IAAA,CAAKA,gBAAAA,CAAiBjC,qBAAAA,CAClCJ,SAASK,IAAAA,GAAO;AAAEA,QAAAA,IAAAA,EAAML,OAAAA,CAAQK;AAAK,OAAA,GAAI4C,MAAAA,CAAAA;AAE3C,IAAA;AAEA,IAAA,MAAML,MAAAA,GAAS,IAAIC,eAAAA,EAAAA;AACnB,IAAA,IAAI7C,OAAAA,EAASK,IAAAA,IAAQL,OAAAA,CAAQK,IAAAA,CAAKC,SAAS,CAAA,EAAG;AAC7CsC,MAAAA,MAAAA,CAAOV,IAAI,MAAA,EAAQlC,OAAAA,CAAQK,IAAAA,CAAKF,IAAAA,CAAK,GAAA,CAAA,CAAA;AACtC,IAAA;AAEA,IAAA,MAAM3C,GAAAA,GAAM,CAAA,EAAG,IAAA,CAAK4E,OAAAA,CAAQ3D,UAAAA,EAAU,CAAA,YAAA,EAAiBmE,MAAAA,CAAOM,QAAAA,EAAQ,GAAK,CAAA,CAAA,EAAIN,MAAAA,KAAW,EAAA,CAAA,CAAA;AAC1F,IAAA,MAAM5F,UAAU,MAAM,IAAA,CAAKoF,OAAAA,CAAQxE,cAAAA,CAAe,OAAOJ,GAAAA,CAAAA;AAEzD,IAAA,MAAMK,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;AAAER,MAAAA;KAAQ,CAAA;AAE5C,IAAA,IAAI,CAACa,SAASG,EAAAA,EAAI;AACjB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,mCAAA,EAAsCJ,QAAAA,CAASK,MAAM,CAAA,CAAE,CAAA;AACxE,IAAA;AAEA,IAAA,OAAO,MAAML,SAASsF,IAAAA,EAAI;AAC3B,EAAA;AACD,CAAA;;;ACpLO,IAAMC,mBAAAA,GAAN,cAAkCnF,KAAAA,CAAAA;EAlBzC;;;AAmBClB,EAAAA,WAAAA,CAAYgF,OAAAA,EAAiB;AAC5B,IAAA,KAAA,CAAMA,OAAAA,CAAAA;AACN,IAAA,IAAA,CAAKsB,IAAAA,GAAO,qBAAA;AACb,EAAA;AACD;;;ACXO,IAAMC,0BAAN,MAAMA;EAZb;;;AAaSC,EAAAA,KAAAA,uBAAqCC,GAAAA,EAAAA;AACrCC,EAAAA,OAAAA;AACAC,EAAAA,GAAAA;EACAC,eAAAA,GAA0B,CAAA;EAElC5G,WAAAA,CAAY0G,OAAAA,GAAkB,GAAA,EAAOG,QAAAA,GAAmB,CAAA,EAAG;AAC1D,IAAA,IAAA,CAAKH,OAAAA,GAAUA,OAAAA;AACf,IAAA,IAAA,CAAKC,GAAAA,GAAME,WAAW,IAAA,GAAO,GAAA;AAC9B,EAAA;;;;AAKAC,EAAAA,GAAAA,CAAIxG,KAAAA,EAAqB;AAExB,IAAA,IAAA,CAAKyG,YAAAA,EAAY;AAGjB,IAAA,IAAI,IAAA,CAAKP,KAAAA,CAAMQ,IAAAA,IAAQ,IAAA,CAAKN,OAAAA,EAAS;AACpC,MAAA,IAAA,CAAKO,QAAAA,EAAQ;AACd,IAAA;AAGA,IAAA,IAAA,CAAKT,KAAAA,CAAMrB,IAAI7E,KAAAA,EAAO;AACrBA,MAAAA,KAAAA;AACA4G,MAAAA,OAAAA,EAASC,KAAKC,GAAAA,EAAG;AACjBC,MAAAA,QAAAA,EAAU,IAAA,CAAKT,eAAAA;KAChB,CAAA;AACD,EAAA;;;;;AAMAU,EAAAA,eAAAA,CAAgBC,WAAmB,GAAA,EAAgB;AAClD,IAAA,IAAIA,YAAY,CAAA,EAAG;AAClB,MAAA,OAAO,EAAA;AACR,IAAA;AAEA,IAAA,IAAA,CAAKR,YAAAA,EAAY;AAEjB,IAAA,MAAMK,GAAAA,GAAMD,KAAKC,GAAAA,EAAG;AACpB,IAAA,MAAMI,gBAA0B,EAAA;AAEhC,IAAA,MAAMC,OAAAA,GAAUC,KAAAA,CAAMC,IAAAA,CAAK,IAAA,CAAKnB,KAAAA,CAAMoB,QAAM,CAAA,CAC1CC,MAAAA,CAAO,CAACC,KAAAA,KAAAA;AACR,MAAA,IAAI;AACH,QAAA,MAAM,CAACpH,IAAAA,CAAAA,GAAQoH,KAAAA,CAAMxH,KAAAA,CAAMyH,MAAM,GAAA,CAAA;AACjC,QAAA,IAAI,CAACrH,IAAAA,EAAM;AACV8G,UAAAA,aAAAA,CAAcQ,IAAAA,CAAKF,MAAMxH,KAAK,CAAA;AAC9B,UAAA,OAAO,KAAA;AACR,QAAA;AACA,QAAA,MAAM2H,OAAAA,GAAUtH,KAAKuH,KAAAA,CAAMC,MAAAA,CAAOR,KAAKjH,IAAAA,EAAM,WAAA,CAAA,CAAayF,QAAAA,EAAQ,CAAA;AAClE,QAAA,IAAI,CAAC8B,OAAAA,CAAQ1H,SAAAA,IAAa0H,OAAAA,CAAQ1H,aAAa6G,GAAAA,EAAK;AACnDI,UAAAA,aAAAA,CAAcQ,IAAAA,CAAKF,MAAMxH,KAAK,CAAA;AAC9B,UAAA,OAAO,KAAA;AACR,QAAA;AACA,QAAA,OAAO,IAAA;MACR,CAAA,CAAA,MAAQ;AACPkH,QAAAA,aAAAA,CAAcQ,IAAAA,CAAKF,MAAMxH,KAAK,CAAA;AAC9B,QAAA,OAAO,KAAA;AACR,MAAA;AACD,IAAA,CAAA,CAAA,CACC8H,IAAAA,CAAK,CAACC,CAAAA,EAAGC,CAAAA,KAAMD,CAAAA,CAAEhB,QAAAA,GAAWiB,CAAAA,CAAEjB,QAAQ,CAAA,CACtCkB,KAAAA,CAAM,CAAChB,QAAAA,CAAAA;AAET,IAAA,KAAA,MAAWjH,SAASkH,aAAAA,EAAe;AAClC,MAAA,IAAA,CAAKhB,KAAAA,CAAMgC,OAAOlI,KAAAA,CAAAA;AACnB,IAAA;AAEA,IAAA,OAAOmH,OAAAA,CAAQgB,GAAAA,CAAI,CAACC,CAAAA,KAAMA,EAAEpI,KAAK,CAAA;AAClC,EAAA;;;;EAKAqI,KAAAA,GAAc;AACb,IAAA,IAAA,CAAKnC,MAAMmC,KAAAA,EAAK;AACjB,EAAA;;;;EAKA3B,IAAAA,GAAe;AACd,IAAA,OAAO,KAAKR,KAAAA,CAAMQ,IAAAA;AACnB,EAAA;;;;EAKQD,YAAAA,GAAqB;AAC5B,IAAA,MAAMK,GAAAA,GAAMD,KAAKC,GAAAA,EAAG;AACpB,IAAA,MAAMwB,WAAqB,EAAA;AAE3B,IAAA,KAAA,MAAW,CAACtI,KAAAA,EAAOwH,KAAAA,KAAU,IAAA,CAAKtB,KAAAA,CAAMiB,SAAO,EAAI;AAClD,MAAA,IAAIL,GAAAA,GAAMU,KAAAA,CAAMZ,OAAAA,GAAU,IAAA,CAAKP,GAAAA,EAAK;AACnCiC,QAAAA,QAAAA,CAASZ,KAAK1H,KAAAA,CAAAA;AACf,MAAA;AACD,IAAA;AAEA,IAAA,KAAA,MAAWA,SAASsI,QAAAA,EAAU;AAC7B,MAAA,IAAA,CAAKpC,KAAAA,CAAMgC,OAAOlI,KAAAA,CAAAA;AACnB,IAAA;AACD,EAAA;;;;EAKQ2G,QAAAA,GAAiB;AACxB,IAAA,IAAI4B,WAAAA,GAA6B,IAAA;AACjC,IAAA,IAAIC,cAAAA,GAAiBC,QAAAA;AAErB,IAAA,KAAA,MAAW,CAACzI,KAAAA,EAAOwH,KAAAA,KAAU,IAAA,CAAKtB,KAAAA,CAAMiB,SAAO,EAAI;AAClD,MAAA,IAAIK,KAAAA,CAAMT,WAAWyB,cAAAA,EAAgB;AACpCA,QAAAA,cAAAA,GAAiBhB,KAAAA,CAAMT,QAAAA;AACvBwB,QAAAA,WAAAA,GAAcvI,KAAAA;AACf,MAAA;AACD,IAAA;AAEA,IAAA,IAAIuI,WAAAA,EAAa;AAChB,MAAA,IAAA,CAAKrC,KAAAA,CAAMgC,OAAOK,WAAAA,CAAAA;AACnB,IAAA;AACD,EAAA;AACD,CAAA;;;AC/HO,IAAMG,sBAAN,MAAMA;EARb;;;AASS3D,EAAAA,OAAAA;AACAC,EAAAA,gBAAAA;AACA2D,EAAAA,gBAAAA;AACAC,EAAAA,aAAAA;EACAC,mBAAAA,GAAuD,IAAA;EAE/DnJ,WAAAA,CACCqF,OAAAA,EACA4D,kBACA3D,gBAAAA,EACC;AACD,IAAA,IAAA,CAAKD,OAAAA,GAAUA,OAAAA;AACf,IAAA,IAAA,CAAKC,gBAAAA,GAAmBA,gBAAAA;AACxB,IAAA,IAAA,CAAK2D,gBAAAA,GAAmBA,gBAAAA;AACxB,IAAA,IAAA,CAAKC,aAAAA,GAAgB,IAAI3C,uBAAAA,EAAAA;AAC1B,EAAA;;;;EAKA,MAAM6C,aAAAA,CACLrF,IAAAA,EACAC,MAAAA,EACAqF,UAAAA,EAC2B;AAC3B,IAAA,MAAM,IAAA,CAAKhE,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,MAAMf,GAAAA,GAAM,CAAA,EAAG,IAAA,CAAK4E,OAAAA,CAAQ3D,YAAU,CAAA,mBAAA,CAAA;AACtC,IAAA,MAAMhB,IAAAA,GAAOC,KAAKC,SAAAA,CAAU;AAAEmD,MAAAA,IAAAA;AAAMC,MAAAA;KAAO,CAAA;AAC3C,IAAA,MAAM/D,UAAU,MAAM,IAAA,CAAKoF,QAAQxE,cAAAA,CAAe,MAAA,EAAQJ,KAAKC,IAAAA,CAAAA;AAE/D,IAAA,OAAO,IAAI4I,OAAAA,CAAQ,CAACC,OAAAA,EAASC,MAAAA,KAAAA;AAC5B,MAAA,MAAMC,YAAY,OAAO1I,KAAAA,KAAU,cAAcA,KAAAA,GAAQ2I,SAAAA,CAAQ,QAAA,CAAA,CAAU3I,KAAAA;AAE3E0I,MAAAA,SAAAA,CAAUhJ,GAAAA,EAAK;QACdO,MAAAA,EAAQ,MAAA;AACRf,QAAAA,OAAAA;AACAS,QAAAA;OACD,CAAA,CACEiJ,IAAAA,CAAK,OAAO7I,QAAAA,KAAAA;AACZ,QAAA,IAAI,CAACA,SAASG,EAAAA,EAAI;AACjB,UAAA,MAAM,IAAIC,MAAM,CAAA,KAAA,EAAQJ,QAAAA,CAASK,MAAM,CAAA,EAAA,EAAKL,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AAClE,QAAA;AAEA,QAAA,MAAMwI,MAAAA,GAAS9I,QAAAA,CAASJ,IAAAA,EAAMmJ,SAAAA,EAAAA;AAC9B,QAAA,IAAI,CAACD,MAAAA,EAAQ;AACZ,UAAA,MAAM,IAAI1I,MAAM,+BAAA,CAAA;AACjB,QAAA;AAEA,QAAA,MAAM4I,OAAAA,GAAU,IAAIC,WAAAA,EAAAA;AACpB,QAAA,IAAIC,MAAAA,GAAS,EAAA;AACb,QAAA,IAAIjI,MAAAA,GAAiC,IAAA;AAErC,QAAA,OAAO,IAAA,EAAM;AACZ,UAAA,MAAM,EAAEkI,IAAAA,EAAMC,KAAAA,EAAK,GAAK,MAAMN,OAAOO,IAAAA,EAAI;AAEzC,UAAA,IAAIF,IAAAA,EAAM;AAEVD,UAAAA,MAAAA,IAAUF,OAAAA,CAAQM,OAAOF,KAAAA,EAAO;YAAEG,MAAAA,EAAQ;WAAK,CAAA;AAC/C,UAAA,MAAMC,KAAAA,GAAQN,MAAAA,CAAOjC,KAAAA,CAAM,IAAA,CAAA;AAC3BiC,UAAAA,MAAAA,GAASM,KAAAA,CAAMC,KAAG,IAAM,EAAA;AAExB,UAAA,KAAA,IAASC,CAAAA,GAAI,CAAA,EAAGA,CAAAA,GAAIF,KAAAA,CAAM/G,QAAQiH,CAAAA,EAAAA,EAAK;AACtC,YAAA,MAAMC,IAAAA,GAAOH,MAAME,CAAAA,CAAAA;AAEnB,YAAA,IAAIC,IAAAA,IAAQA,IAAAA,CAAKC,UAAAA,CAAW,QAAA,CAAA,EAAW;AACtC,cAAA,MAAMC,KAAAA,GAAQF,IAAAA,CAAKG,SAAAA,CAAU,CAAA,EAAGC,IAAAA,EAAI;AAEpC,cAAA,KAAA,IAASC,IAAIN,CAAAA,GAAI,CAAA,EAAGM,CAAAA,GAAIR,KAAAA,CAAM/G,QAAQuH,CAAAA,EAAAA,EAAK;AAC1C,gBAAA,MAAMC,QAAAA,GAAWT,MAAMQ,CAAAA,CAAAA;AACvB,gBAAA,IAAIC,QAAAA,IAAYA,QAAAA,CAASL,UAAAA,CAAW,OAAA,CAAA,EAAU;AAC7C,kBAAA,MAAMM,OAAAA,GAAUD,QAAAA,CAASH,SAAAA,CAAU,CAAA,EAAGC,IAAAA,EAAI;AAC1C,kBAAA,IAAIG,OAAAA,EAAS;AACZ,oBAAA,IAAI;AACH,sBAAA,MAAM3J,IAAAA,GAAOV,IAAAA,CAAKuH,KAAAA,CAAM8C,OAAAA,CAAAA;AAExB,sBAAA,IAAIL,KAAAA,KAAU,cAActB,UAAAA,EAAY;AACvCA,wBAAAA,UAAAA,CAAWhI,IAAAA,CAAK2D,OAAAA,EAAS3D,IAAAA,CAAK4J,QAAQ,CAAA;AACvC,sBAAA,CAAA,MAAA,IAAWN,UAAU,QAAA,EAAU;AAC9B5I,wBAAAA,MAAAA,GAASV,IAAAA;AACV,sBAAA,CAAA,MAAA,IAAWsJ,UAAU,OAAA,EAAS;AAC7BnB,wBAAAA,MAAAA,CAAO,IAAItI,KAAAA,CAAMG,IAAAA,CAAK2D,OAAO,CAAA,CAAA;AAC7B,wBAAA;AACD,sBAAA;AACD,oBAAA,CAAA,CAAA,OAAS0D,CAAAA,EAAG;AACXwC,sBAAAA,GAAAA,CAAI/I,MAAM,0BAAA,EAA4B;AAAE6I,wBAAAA,OAAAA;wBAAS7I,KAAAA,EAAOuG;uBAAE,CAAA;AAC3D,oBAAA;AACD,kBAAA;AACA,kBAAA;AACD,gBAAA;AACD,cAAA;AACD,YAAA;AACD,UAAA;AACD,QAAA;AAEA,QAAA,IAAI3G,MAAAA,EAAQ;AACXwH,UAAAA,OAAAA,CAAQxH,MAAAA,CAAAA;QACT,CAAA,MAAO;AACNyH,UAAAA,MAAAA,CAAO,IAAItI,KAAAA,CAAM,gCAAA,CAAA,CAAA;AAClB,QAAA;MACD,CAAA,CAAA,CACCiK,MAAM3B,MAAAA,CAAAA;IACT,CAAA,CAAA;AACD,EAAA;;;;EAKA,MAAM1F,OAAAA,CAAQC,MAAcC,MAAAA,EAA6D;AACxF,IAAA,MAAM,IAAA,CAAKqB,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,MAAM4J,KAAAA,GAAQ,IAAA,CAAKlC,aAAAA,CAAc5B,eAAAA,CAAgB,GAAA,CAAA;AAEjD,IAAA,MAAM+D,sBAAAA,GAAyB;AAC9BC,MAAAA,MAAAA,EAAQ,CAAC,CAAC,IAAA,CAAKrC,gBAAAA,CAAiBsC,MAAAA,EAAM;AACtCC,MAAAA,WAAAA,EAAa,CAAC,CAAC,IAAA,CAAKvC,gBAAAA,CAAiBwC,WAAAA,EAAW;AAChDC,MAAAA,YAAAA,EAAc,CAAC,CAAC,IAAA,CAAKzC,gBAAAA,CAAiB0C,YAAAA,EAAY;MAClDC,QAAAA,EAAU,IAAA,CAAK3C,iBAAiB2C,QAAAA;AACjC,KAAA;AAEA,IAAA,MAAMC,eAAAA,GAAkB;MACvB,GAAG7H,MAAAA;MACH8H,cAAAA,EAAgB;QACf,GAAGT,sBAAAA;QACH,GAAIrH,MAAAA,EAAQ8H,kBAAkB;AAC/B,OAAA;MACAC,eAAAA,EAAiBX,KAAAA,CAAM7H,MAAAA,GAAS,CAAA,GAAI6H,KAAAA,GAAQlF;AAC7C,KAAA;AAEA,IAAA,IAAA,CAAKiD,mBAAAA,GAAsB0C,eAAAA;AAE3B,IAAA,IAAI9J,MAAAA;AAEJ,IAAA,IAAI,KAAKuD,gBAAAA,EAAkB;AAC1BvD,MAAAA,MAAAA,GAAU,MAAM,IAAA,CAAKuD,gBAAAA,CAAiBxB,OAAAA,CAAQC,MAAM8H,eAAAA,CAAAA;IACrD,CAAA,MAAO;AACN,MAAA,MAAMpL,GAAAA,GAAM,CAAA,EAAG,IAAA,CAAK4E,OAAAA,CAAQ3D,YAAU,CAAA,YAAA,CAAA;AACtC,MAAA,MAAMhB,IAAAA,GAAOC,KAAKC,SAAAA,CAAU;AAAEmD,QAAAA,IAAAA;QAAMC,MAAAA,EAAQ6H;OAAgB,CAAA;AAC5D,MAAA,MAAM5L,UAAU,MAAM,IAAA,CAAKoF,QAAQxE,cAAAA,CAAe,MAAA,EAAQJ,KAAKC,IAAAA,CAAAA;AAE/D,MAAA,MAAMI,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;QACjCO,MAAAA,EAAQ,MAAA;AACRf,QAAAA,OAAAA;AACAS,QAAAA;OACD,CAAA;AAEA,MAAA,IAAA,CAAK2E,OAAAA,CAAQ1D,YAAYb,QAAAA,CAAAA;AAEzB,MAAA,IAAI,CAACA,SAASG,EAAAA,EAAI;AACjB,QAAA,MAAMkB,KAAAA,GAAS,MAAMrB,QAAAA,CAASQ,IAAAA,EAAI;AAClC,QAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAA,kBAAA,EAAqBiB,MAAMA,KAAAA,IAASrB,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AAC1E,MAAA;AAEAW,MAAAA,MAAAA,GAAU,MAAMjB,SAASQ,IAAAA,EAAI;AAC9B,IAAA;AAEA,IAAA,IAAIS,MAAAA,CAAOiK,gBAAAA,IAAoBjK,MAAAA,CAAOiK,gBAAAA,CAAiBzI,SAAS,CAAA,EAAG;AAClE,MAAA,KAAA,MAAW,EAAEjD,KAAAA,EAAK,IAAMyB,MAAAA,CAAOiK,gBAAAA,EAAkB;AAChD,QAAA,IAAA,CAAK9C,aAAAA,CAAcpC,IAAIxG,KAAAA,CAAAA;AACxB,MAAA;AACD,IAAA;AAEA,IAAA,IAAIyB,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgBC,MAAAA,IAAUnK,OAAOoK,cAAAA,EAAgB;AACtE,MAAA,OAAO,MAAM,IAAA,CAAKC,6BAAAA,CAA8BrK,MAAAA,CAAAA;AACjD,IAAA;AAEA,IAAA,IAAIA,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgBC,MAAAA,IAAUnK,OAAOsK,aAAAA,EAAe;AACrE,MAAA,OAAO,MAAM,IAAA,CAAKC,oBAAAA,CAAqBvK,MAAAA,CAAAA;AACxC,IAAA;AAEA,IAAA,OAAOA,MAAAA;AACR,EAAA;;;;AAKA,EAAA,MAAcqK,8BACbG,YAAAA,EAC2B;AAC3B,IAAA,IAAI,CAACA,YAAAA,CAAaJ,cAAAA,IAAkBI,YAAAA,CAAaJ,cAAAA,CAAe5I,WAAW,CAAA,EAAG;AAC7E,MAAA,MAAM,IAAIrC,MAAM,gDAAA,CAAA;AACjB,IAAA;AAEA,IAAA,MAAMsL,iBAAAA,GAAoB,IAAIC,GAAAA,CAC7BF,YAAAA,CAAaJ,eACXtE,MAAAA,CAAO,CAAC6E,OAAO,CAAC,IAAA,CAAKzD,iBAAiB0D,qBAAAA,CAAsBD,EAAAA,CAAGE,IAAI,CAAA,CAAA,CACnEnE,IAAI,CAACiE,EAAAA,KAAOA,EAAAA,CAAGG,EAAE,CAAA,CAAA;AAGpB,IAAA,IAAIL,iBAAAA,CAAkBxF,OAAO,CAAA,EAAG;AAC/B,MAAA,MAAM8F,eAAAA,GAAkBP,YAAAA,CAAaJ,cAAAA,CAAetE,MAAAA,CAAO,CAAC6E,OAC3DF,iBAAAA,CAAkBO,GAAAA,CAAIL,EAAAA,CAAGG,EAAE,CAAA,CAAA;AAE5B,MAAA,MAAMG,0BAAAA,GAA6BF,gBAAgBjF,MAAAA,CAAO,CAAC6E,OAC1D,IAAA,CAAKO,6BAAAA,CAA8BP,EAAAA,CAAGE,IAAI,CAAA,CAAA;AAE3C,MAAA,MAAMM,iBAAAA,GAAoBJ,eAAAA,CAAgBjF,MAAAA,CACzC,CAAC6E,EAAAA,KAAO,CAAC,IAAA,CAAKO,6BAAAA,CAA8BP,EAAAA,CAAGE,IAAI,CAAA,CAAA;AAGpD,MAAA,IAAII,0BAAAA,CAA2BzJ,SAAS,CAAA,EAAG;AAC1C,QAAA,OAAOgJ,YAAAA;AACR,MAAA;AAEA,MAAA,MAAMY,YAAAA,GAAe,CAAA,8CAAA,EAAiDD,iBAAAA,CAAkBzE,GAAAA,CAAI,CAACiE,EAAAA,KAAOA,EAAAA,CAAGE,IAAI,CAAA,CAAExJ,IAAAA,CAAK,IAAA,CAAA,CAAA,CAAA;AAClH8H,MAAAA,GAAAA,CAAI/I,KAAAA,CAAM,CAAA,gEAAA,EAAmEgL,YAAAA,CAAAA,CAAAA,EAAgB;AAC5FhJ,QAAAA,WAAAA,EAAaoI,YAAAA,CAAapI,WAAAA;QAC1B2I,eAAAA,EAAiBI,iBAAAA,CAAkBzE,GAAAA,CAAI,CAACiE,EAAAA,MAAQ;AAC/CE,UAAAA,IAAAA,EAAMF,EAAAA,CAAGE,IAAAA;AACTQ,UAAAA,SAAAA,EAAWV,EAAAA,CAAGU,SAAAA;AACdP,UAAAA,EAAAA,EAAIH,EAAAA,CAAGG;SACR,CAAA;OACD,CAAA;AAEA,MAAA,MAAMQ,iBAAAA,GAAoBd,YAAAA,CAAaJ,cAAAA,CAAetE,MAAAA,CACrD,CAAC6E,EAAAA,KAAO,CAACF,iBAAAA,CAAkBO,GAAAA,CAAIL,EAAAA,CAAGG,EAAE,CAAA,CAAA;AAGrC,MAAA,IAAIQ,iBAAAA,CAAkB9J,SAAS,CAAA,EAAG;AACjC,QAAA,IAAI;AACH,UAAA,MAAM+J,kBAAkB,MAAMhE,OAAAA,CAAQiE,IACrCF,iBAAAA,CAAkB5E,GAAAA,CAAI,OAAOiE,EAAAA,KAAAA;AAC5B,YAAA,MAAMtI,iBAAiB,MAAM,IAAA,CAAK6E,gBAAAA,CAAiBuE,cAAAA,CAAed,GAAGE,IAAAA,EAAM;AAC1E,cAAA,GAAGF,EAAAA,CAAGzE,OAAAA;AACNmF,cAAAA,SAAAA,EAAWV,EAAAA,CAAGU;aACf,CAAA;AACA,YAAA,OAAO;AAAEP,cAAAA,EAAAA,EAAIH,EAAAA,CAAGG,EAAAA;cAAI9K,MAAAA,EAAQqC;AAAe,aAAA;AAC5C,UAAA,CAAA,CAAA,CAAA;AAGD,UAAA,MAAMqJ,UAAAA,GAAalB,YAAAA,CAAaJ,cAAAA,CAAe1D,GAAAA,CAAI,CAACiE,EAAAA,KAAAA;AACnD,YAAA,IAAIF,iBAAAA,CAAkBO,GAAAA,CAAIL,EAAAA,CAAGG,EAAE,CAAA,EAAG;AACjC,cAAA,OAAO;AACNA,gBAAAA,EAAAA,EAAIH,EAAAA,CAAGG,EAAAA;gBACP9K,MAAAA,EAAQ;kBACP2L,OAAAA,EAAS,IAAA;kBACT1I,OAAAA,EAAS,CAAA,EAAG0H,GAAGE,IAAI,CAAA,+BAAA;AACpB;AACD,eAAA;AACD,YAAA;AACA,YAAA,OAAOU,gBAAgBK,IAAAA,CAAK,CAACC,MAAMA,CAAAA,CAAEf,EAAAA,KAAOH,GAAGG,EAAE,CAAA;UAClD,CAAA,CAAA;AAEA,UAAA,OAAO,MAAM,IAAA,CAAKvI,sBAAAA,CAAuBiI,YAAAA,CAAapI,aAAasJ,UAAAA,CAAAA;AACpE,QAAA,CAAA,CAAA,OAAStL,KAAAA,EAAO;AACf,UAAA,MAAMgL,gBAAehL,KAAAA,YAAiBjB,KAAAA,GAAQiB,KAAAA,CAAM6C,OAAAA,GAAU6I,OAAO1L,KAAAA,CAAAA;AACrE+I,UAAAA,GAAAA,CAAI/I,KAAAA,CAAM,CAAA,2CAAA,EAA8CgL,aAAAA,CAAAA,CAAAA,EAAgB;AACvEhJ,YAAAA,WAAAA,EAAaoI,YAAAA,CAAapI;WAC3B,CAAA;AACA,UAAA,MAAM2J,eAAAA,GAAkBvB,YAAAA,CAAaJ,cAAAA,CAAe1D,GAAAA,CAAI,CAACiE,EAAAA,MAAQ;AAChEG,YAAAA,EAAAA,EAAIH,EAAAA,CAAGG,EAAAA;YACP9K,MAAAA,EAAQ;cACP2L,OAAAA,EAAS,IAAA;cACT1I,OAAAA,EAASwH,iBAAAA,CAAkBO,IAAIL,EAAAA,CAAGG,EAAE,IACjC,CAAA,EAAGH,EAAAA,CAAGE,IAAI,CAAA,+BAAA,CAAA,GACVO;AACJ;WACD,CAAA,CAAA;AACA,UAAA,OAAO,MAAM,IAAA,CAAK7I,sBAAAA,CAAuBiI,YAAAA,CAAapI,aAAa2J,eAAAA,CAAAA;AACpE,QAAA;MACD,CAAA,MAAO;AACN,QAAA,MAAMA,eAAAA,GAAkBvB,YAAAA,CAAaJ,cAAAA,CAAe1D,GAAAA,CAAI,CAACiE,EAAAA,MAAQ;AAChEG,UAAAA,EAAAA,EAAIH,EAAAA,CAAGG,EAAAA;UACP9K,MAAAA,EAAQ;YACP2L,OAAAA,EAAS,IAAA;YACT1I,OAAAA,EAAS,CAAA,EAAG0H,GAAGE,IAAI,CAAA,+BAAA;AACpB;SACD,CAAA,CAAA;AACA,QAAA,OAAO,MAAM,IAAA,CAAKtI,sBAAAA,CAAuBiI,YAAAA,CAAapI,aAAa2J,eAAAA,CAAAA;AACpE,MAAA;AACD,IAAA;AAEA,IAAA,IAAI;AACH,MAAA,MAAMvJ,YAAAA,GAAe,MAAM+E,OAAAA,CAAQiE,GAAAA,CAClChB,aAAaJ,cAAAA,CAAe1D,GAAAA,CAAI,OAAOiE,EAAAA,KAAAA;AACtC,QAAA,MAAMtI,iBAAiB,MAAM,IAAA,CAAK6E,gBAAAA,CAAiBuE,cAAAA,CAAed,GAAGE,IAAAA,EAAM;AAC1E,UAAA,GAAGF,EAAAA,CAAGzE,OAAAA;AACNmF,UAAAA,SAAAA,EAAWV,EAAAA,CAAGU;SACf,CAAA;AACA,QAAA,OAAO;AAAEP,UAAAA,EAAAA,EAAIH,EAAAA,CAAGG,EAAAA;UAAI9K,MAAAA,EAAQqC;AAAe,SAAA;AAC5C,MAAA,CAAA,CAAA,CAAA;AAGD,MAAA,OAAO,MAAM,IAAA,CAAKE,sBAAAA,CAAuBiI,YAAAA,CAAapI,aAAaI,YAAAA,CAAAA;AACpE,IAAA,CAAA,CAAA,OAASpC,KAAAA,EAAO;AACf,MAAA,MAAMgL,eAAehL,KAAAA,YAAiBjB,KAAAA,GAAQiB,KAAAA,CAAM6C,OAAAA,GAAU6I,OAAO1L,KAAAA,CAAAA;AACrE+I,MAAAA,GAAAA,CAAI/I,KAAAA,CAAM,CAAA,gCAAA,EAAmCgL,YAAAA,CAAAA,CAAAA,EAAgB;AAC5DhJ,QAAAA,WAAAA,EAAaoI,YAAAA,CAAapI,WAAAA;AAC1B4J,QAAAA,aAAAA,EAAexB,aAAaJ,cAAAA,CAAe5I;OAC5C,CAAA;AAEA,MAAA,MAAMuK,eAAAA,GAAkBvB,YAAAA,CAAaJ,cAAAA,CAAe1D,GAAAA,CAAI,CAACiE,EAAAA,MAAQ;AAChEG,QAAAA,EAAAA,EAAIH,EAAAA,CAAGG,EAAAA;QACP9K,MAAAA,EAAQ;UACP2L,OAAAA,EAAS,IAAA;UACT1I,OAAAA,EAASmI;AACV;OACD,CAAA,CAAA;AACA,MAAA,OAAO,MAAM,IAAA,CAAK7I,sBAAAA,CAAuBiI,YAAAA,CAAapI,aAAa2J,eAAAA,CAAAA;AACpE,IAAA;AACD,EAAA;;;;AAKA,EAAA,MAAcxB,qBAAqBC,YAAAA,EAAyD;AAC3F,IAAA,IAAI,CAACA,aAAaF,aAAAA,EAAe;AAChC,MAAA,MAAM,IAAInL,MAAM,yCAAA,CAAA;AACjB,IAAA;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK+H,gBAAAA,CAAiB0D,sBAAsBJ,YAAAA,CAAaF,aAAAA,CAAcO,IAAI,CAAA,EAAG;AAClF,MAAA,MAAMoB,sBAAAA,GAAyB,IAAA,CAAKf,6BAAAA,CACnCV,YAAAA,CAAaF,cAAcO,IAAI,CAAA;AAGhC,MAAA,IAAIoB,sBAAAA,EAAwB;AAC3B,QAAA,OAAOzB,YAAAA;AACR,MAAA;AAEA,MAAA,MAAMY,YAAAA,GAAe,CAAA,EAAGZ,YAAAA,CAAaF,aAAAA,CAAcO,IAAI,CAAA,+BAAA,CAAA;AACvD1B,MAAAA,GAAAA,CAAI/I,KAAAA,CAAM,CAAA,yDAAA,EAA4DgL,YAAAA,CAAAA,CAAAA,EAAgB;AACrFhJ,QAAAA,WAAAA,EAAaoI,YAAAA,CAAapI,WAAAA;AAC1B8J,QAAAA,YAAAA,EAAc1B,aAAaF,aAAAA,CAAcO,IAAAA;AACzCQ,QAAAA,SAAAA,EAAWb,aAAaF,aAAAA,CAAce;OACvC,CAAA;AAEA,MAAA,OAAO,MAAM,IAAA,CAAKlJ,MAAAA,CAAOqI,YAAAA,CAAapI,WAAAA,EAAa;QAClDuJ,OAAAA,EAAS,IAAA;QACT1I,OAAAA,EAASmI;OACV,CAAA;AACD,IAAA;AAEA,IAAA,IAAI;AACH,MAAA,MAAM/I,iBAAiB,MAAM,IAAA,CAAK6E,iBAAiBuE,cAAAA,CAClDjB,YAAAA,CAAaF,cAAcO,IAAAA,EAC3B;AACC,QAAA,GAAGL,aAAaF,aAAAA,CAAcpE,OAAAA;AAC9BmF,QAAAA,SAAAA,EAAWb,aAAaF,aAAAA,CAAce,SAAAA;AACtCjJ,QAAAA,WAAAA,EAAaoI,YAAAA,CAAapI;OAC3B,CAAA;AAGD,MAAA,OAAO,MAAM,IAAA,CAAKD,MAAAA,CAAOqI,YAAAA,CAAapI,aAAaC,cAAAA,CAAAA;AACpD,IAAA,CAAA,CAAA,OAASjC,KAAAA,EAAO;AACf,MAAA,IAAIA,iBAAiBkE,mBAAAA,EAAqB;AACzC,QAAA,MAAMlE,KAAAA;AACP,MAAA;AACA,MAAA,MAAMgL,eAAehL,KAAAA,YAAiBjB,KAAAA,GAAQiB,KAAAA,CAAM6C,OAAAA,GAAU6I,OAAO1L,KAAAA,CAAAA;AACrE+I,MAAAA,GAAAA,CAAI/I,KAAAA,CAAM,CAAA,yBAAA,EAA4BgL,YAAAA,CAAAA,CAAAA,EAAgB;AACrDhJ,QAAAA,WAAAA,EAAaoI,YAAAA,CAAapI,WAAAA;AAC1B8J,QAAAA,YAAAA,EAAc1B,aAAaF,aAAAA,CAAcO,IAAAA;AACzCQ,QAAAA,SAAAA,EAAWb,aAAaF,aAAAA,CAAce;OACvC,CAAA;AACA,MAAA,OAAO,MAAM,IAAA,CAAKlJ,MAAAA,CAAOqI,YAAAA,CAAapI,WAAAA,EAAa;QAClDuJ,OAAAA,EAAS,IAAA;QACT1I,OAAAA,EAASmI;OACV,CAAA;AACD,IAAA;AACD,EAAA;;;;AAKQF,EAAAA,6BAAAA,CAA8BgB,YAAAA,EAAqC;AAC1E,IAAA,IAAI,CAAC,IAAA,CAAK9E,mBAAAA,EAAqB2C,cAAAA,EAAgB;AAC9C,MAAA,OAAO,KAAA;AACR,IAAA;AAEA,IAAA,QAAQmC,YAAAA;AACP,MAAA,KAAKC,YAAAA,CAAaC,GAAAA;AACjB,QAAA,OAAO,IAAA,CAAKhF,oBAAoB2C,cAAAA,CAAeR,MAAAA;AAChD,MAAA,KAAK4C,YAAAA,CAAaE,QAAAA;AACjB,QAAA,OAAO,IAAA,CAAKjF,oBAAoB2C,cAAAA,CAAeN,WAAAA;AAChD,MAAA,KAAK0C,YAAAA,CAAaG,SAAAA;AACjB,QAAA,OAAO,IAAA,CAAKlF,oBAAoB2C,cAAAA,CAAeJ,YAAAA;AAChD,MAAA,KAAKwC,YAAAA,CAAaI,IAAAA;AACjB,QAAA,OAAO,IAAA,CAAKnF,oBAAoB2C,cAAAA,CAAeF,QAAAA;AAChD,MAAA;AACC,QAAA,OAAO,KAAA;AACT;AACD,EAAA;;;;EAKA,MAAM1H,MAAAA,CAAOC,aAAqBC,cAAAA,EAAmD;AACpF,IAAA,MAAM,IAAA,CAAKiB,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,IAAIO,MAAAA;AAEJ,IAAA,IAAI,KAAKuD,gBAAAA,EAAkB;AAC1BvD,MAAAA,MAAAA,GAAU,MAAM,IAAA,CAAKuD,gBAAAA,CAAiBpB,MAAAA,CAAOC,aAAaC,cAAAA,CAAAA;IAC3D,CAAA,MAAO;AACN,MAAA,MAAM3D,MAAM,CAAA,EAAG,IAAA,CAAK4E,QAAQ3D,UAAAA,EAAU,eAAiByC,WAAAA,CAAAA,CAAAA;AACvD,MAAA,MAAMzD,IAAAA,GAAOC,KAAKC,SAAAA,CAAU;QAAEmB,MAAAA,EAAQqC;OAAe,CAAA;AACrD,MAAA,MAAMnE,UAAU,MAAM,IAAA,CAAKoF,QAAQxE,cAAAA,CAAe,MAAA,EAAQJ,KAAKC,IAAAA,CAAAA;AAE/D,MAAA,MAAMI,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;QACjCO,MAAAA,EAAQ,MAAA;AACRf,QAAAA,OAAAA;AACAS,QAAAA;OACD,CAAA;AAEA,MAAA,IAAA,CAAK2E,OAAAA,CAAQ1D,YAAYb,QAAAA,CAAAA;AAEzB,MAAA,IAAI,CAACA,SAASG,EAAAA,EAAI;AACjB,QAAA,MAAMkB,KAAAA,GAAS,MAAMrB,QAAAA,CAASQ,IAAAA,EAAI;AAClC,QAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAA,eAAA,EAAkBiB,MAAMA,KAAAA,IAASrB,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AACvE,MAAA;AAEAW,MAAAA,MAAAA,GAAU,MAAMjB,SAASQ,IAAAA,EAAI;AAC9B,IAAA;AAEA,IAAA,IAAIS,MAAAA,CAAOiK,gBAAAA,IAAoBjK,MAAAA,CAAOiK,gBAAAA,CAAiBzI,SAAS,CAAA,EAAG;AAClE,MAAA,KAAA,MAAW,EAAEjD,KAAAA,EAAK,IAAMyB,MAAAA,CAAOiK,gBAAAA,EAAkB;AAChD,QAAA,IAAA,CAAK9C,aAAAA,CAAcpC,IAAIxG,KAAAA,CAAAA;AACxB,MAAA;AACD,IAAA;AAEA,IAAA,IAAIyB,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgBC,MAAAA,IAAUnK,OAAOoK,cAAAA,EAAgB;AACtE,MAAA,OAAO,MAAM,IAAA,CAAKC,6BAAAA,CAA8BrK,MAAAA,CAAAA;AACjD,IAAA;AAEA,IAAA,IAAIA,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgBC,MAAAA,IAAUnK,OAAOsK,aAAAA,EAAe;AACrE,MAAA,OAAO,MAAM,IAAA,CAAKC,oBAAAA,CAAqBvK,MAAAA,CAAAA;AACxC,IAAA;AAEA,IAAA,OAAOA,MAAAA;AACR,EAAA;;;;EAKA,MAAcuC,sBAAAA,CACbH,aACAI,YAAAA,EAC2B;AAC3B,IAAA,MAAM,IAAA,CAAKc,QAAQ7D,iBAAAA,EAAiB;AAEpC,IAAA,IAAIO,MAAAA;AAEJ,IAAA,IAAI,KAAKuD,gBAAAA,EAAkB;AAC1BvD,MAAAA,MAAAA,GAAU,MAAM,IAAA,CAAKuD,gBAAAA,CAAiBhB,sBAAAA,CACrCH,aACAI,YAAAA,CAAAA;IAEF,CAAA,MAAO;AACN,MAAA,MAAM9D,MAAM,CAAA,EAAG,IAAA,CAAK4E,QAAQ3D,UAAAA,EAAU,eAAiByC,WAAAA,CAAAA,CAAAA;AACvD,MAAA,MAAMzD,IAAAA,GAAOC,KAAKC,SAAAA,CAAU;QAAE4D,OAAAA,EAASD;OAAa,CAAA;AACpD,MAAA,MAAMtE,UAAU,MAAM,IAAA,CAAKoF,QAAQxE,cAAAA,CAAe,MAAA,EAAQJ,KAAKC,IAAAA,CAAAA;AAE/D,MAAA,MAAMI,QAAAA,GAAW,MAAMC,KAAAA,CAAMN,GAAAA,EAAK;QACjCO,MAAAA,EAAQ,MAAA;AACRf,QAAAA,OAAAA;AACAS,QAAAA;OACD,CAAA;AAEA,MAAA,IAAA,CAAK2E,OAAAA,CAAQ1D,YAAYb,QAAAA,CAAAA;AAEzB,MAAA,IAAI,CAACA,SAASG,EAAAA,EAAI;AACjB,QAAA,MAAMkB,KAAAA,GAAS,MAAMrB,QAAAA,CAASQ,IAAAA,EAAI;AAClC,QAAA,MAAM,IAAIJ,KAAAA,CAAM,CAAA,qBAAA,EAAwBiB,MAAMA,KAAAA,IAASrB,QAAAA,CAASM,UAAU,CAAA,CAAE,CAAA;AAC7E,MAAA;AAEAW,MAAAA,MAAAA,GAAU,MAAMjB,SAASQ,IAAAA,EAAI;AAC9B,IAAA;AAEA,IAAA,IAAIS,MAAAA,CAAOiK,gBAAAA,IAAoBjK,MAAAA,CAAOiK,gBAAAA,CAAiBzI,SAAS,CAAA,EAAG;AAClE,MAAA,KAAA,MAAW,EAAEjD,KAAAA,EAAK,IAAMyB,MAAAA,CAAOiK,gBAAAA,EAAkB;AAChD,QAAA,IAAA,CAAK9C,aAAAA,CAAcpC,IAAIxG,KAAAA,CAAAA;AACxB,MAAA;AACD,IAAA;AAEA,IAAA,IAAIyB,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgBC,MAAAA,IAAUnK,OAAOoK,cAAAA,EAAgB;AACtE,MAAA,OAAO,MAAM,IAAA,CAAKC,6BAAAA,CAA8BrK,MAAAA,CAAAA;AACjD,IAAA;AAEA,IAAA,IAAIA,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgBC,MAAAA,IAAUnK,OAAOsK,aAAAA,EAAe;AACrE,MAAA,OAAO,MAAM,IAAA,CAAKC,oBAAAA,CAAqBvK,MAAAA,CAAAA;AACxC,IAAA;AAEA,IAAA,OAAOA,MAAAA;AACR,EAAA;AACD,CAAA;ACleA,IAAMwM,YAAAA,GAAe;EACpBC,IAAAA,EAAM,MAAA;EACNC,OAAAA,EAAS,SAAA;EACTC,QAAAA,EAAU;AACX,CAAA;AAEA,IAAMC,kBAAAA,GAAqB;EAC1BC,KAAAA,EAAO,OAAA;EACPC,MAAAA,EAAQ;AACT,CAAA;AAEO,IAAMC,mBAAN,MAAMA;EAtBb;;;AAuBSC,EAAAA,SAAAA,GAAoC,EAAC;AACrCC,EAAAA,YAAAA,uBAAmDvI,GAAAA,EAAAA;AAE3DzG,EAAAA,WAAAA,CAAY+O,SAAAA,EAAoC;AAC/C,IAAA,IAAA,CAAKA,SAAAA,GAAYA,aAAa,EAAC;AAE/B,IAAA,IAAIA,WAAW3O,KAAAA,EAAO;AACrB,MAAA,KAAA,MAAW6O,IAAAA,IAAQF,UAAU3O,KAAAA,EAAO;AACnC,QAAA,IAAA,CAAK4O,YAAAA,CAAa7J,GAAAA,CAAI8J,IAAAA,CAAK3I,IAAAA,EAAM2I,KAAKC,OAAO,CAAA;AAC9C,MAAA;AACD,IAAA;AACD,EAAA;AAEAC,EAAAA,UAAAA,CAAWD,OAAAA,EAAiC;AAC3C,IAAA,IAAA,CAAKH,UAAUK,GAAAA,GAAMF,OAAAA;AACtB,EAAA;AAEAG,EAAAA,eAAAA,CAAgBH,OAAAA,EAAsC;AACrD,IAAA,IAAA,CAAKH,UAAUO,QAAAA,GAAWJ,OAAAA;AAC3B,EAAA;AAEAK,EAAAA,gBAAAA,CAAiBL,OAAAA,EAAuC;AACvD,IAAA,IAAA,CAAKH,UAAUS,SAAAA,GAAYN,OAAAA;AAC5B,EAAA;AAEAO,EAAAA,YAAAA,CAAarP,KAAAA,EAA2B;AACvC,IAAA,IAAA,CAAK2O,UAAU3O,KAAAA,GAAQA,KAAAA;AACvB,IAAA,KAAA,MAAW6O,QAAQ7O,KAAAA,EAAO;AACzB,MAAA,IAAA,CAAK4O,YAAAA,CAAa7J,GAAAA,CAAI8J,IAAAA,CAAK3I,IAAAA,EAAM2I,KAAKC,OAAO,CAAA;AAC9C,IAAA;AACD,EAAA;EAEA3D,MAAAA,GAAuC;AACtC,IAAA,OAAO,KAAKwD,SAAAA,CAAUK,GAAAA;AACvB,EAAA;EAEA3D,WAAAA,GAAiD;AAChD,IAAA,OAAO,KAAKsD,SAAAA,CAAUO,QAAAA;AACvB,EAAA;EAEA3D,YAAAA,GAAmD;AAClD,IAAA,OAAO,KAAKoD,SAAAA,CAAUS,SAAAA;AACvB,EAAA;EAEAE,QAAAA,GAAqC;AACpC,IAAA,OAAO,KAAKX,SAAAA,CAAU3O,KAAAA;AACvB,EAAA;;;;EAKAuP,kBAAAA,GAA6C;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAKZ,SAAAA,CAAU3O,KAAAA,EAAO;AAC1B,MAAA,OAAO,EAAA;AACR,IAAA;AAEA,IAAA,OAAO,IAAA,CAAK2O,SAAAA,CAAU3O,KAAAA,CAAMqI,GAAAA,CAAI,CAACwG,IAAAA,KAAAA;AAChC,MAAA,MAAM,EAAEC,OAAAA,EAAS,GAAGU,UAAAA,EAAAA,GAAeX,IAAAA;AACnC,MAAA,OAAOW,UAAAA;IACR,CAAA,CAAA;AACD,EAAA;;;;EAKAhE,QAAAA,GAAoB;AACnB,IAAA,OAAO,CAAC,EAAE,IAAA,CAAKmD,SAAAA,CAAU3O,SAAS,IAAA,CAAK2O,SAAAA,CAAU3O,MAAMmD,MAAAA,GAAS,CAAA,CAAA;AACjE,EAAA;;;;EAKAsM,cAAAA,GAA0B;AACzB,IAAA,OAAO,CAAC,EACP,IAAA,CAAKd,SAAAA,CAAUK,GAAAA,IACf,IAAA,CAAKL,SAAAA,CAAUO,QAAAA,IACf,IAAA,CAAKP,SAAAA,CAAUS,SAAAA,IACf,IAAA,CAAK5D,QAAAA,EAAQ,CAAA;AAEf,EAAA;;;;AAKAe,EAAAA,qBAAAA,CAAsBsB,YAAAA,EAAqC;AAC1D,IAAA,QAAQA,YAAAA;AACP,MAAA,KAAKC,YAAAA,CAAaC,GAAAA;AACjB,QAAA,OAAO,CAAC,CAAC,IAAA,CAAKY,SAAAA,CAAUK,GAAAA;AACzB,MAAA,KAAKlB,YAAAA,CAAaE,QAAAA;AACjB,QAAA,OAAO,CAAC,CAAC,IAAA,CAAKW,SAAAA,CAAUO,QAAAA;AACzB,MAAA,KAAKpB,YAAAA,CAAaG,SAAAA;AACjB,QAAA,OAAO,CAAC,CAAC,IAAA,CAAKU,SAAAA,CAAUS,SAAAA;AACzB,MAAA,KAAKtB,YAAAA,CAAaI,IAAAA;AACjB,QAAA,OAAO,KAAK1C,QAAAA,EAAQ;AACrB,MAAA;AACC,QAAA,OAAO,KAAA;AACT;AACD,EAAA;EAEA,MAAM4B,cAAAA,CAAeS,cAA4BhG,OAAAA,EAA4B;AAC5E,IAAA,IAAIA,OAAAA,CAAQmF,SAAAA,KAAc,gBAAA,IAAoBnF,OAAAA,CAAQ6H,KAAAA,EAAO;AAC5D,MAAA,OAAO,MAAMxG,OAAAA,CAAQiE,GAAAA,CACpBtF,QAAQ6H,KAAAA,CAAMrH,GAAAA,CAAI,OAAOsH,IAAAA,KAAAA;AACxB,QAAA,OAAO,MAAM,IAAA,CAAKvC,cAAAA,CAAeuC,IAAAA,CAAKnD,IAAAA,EAAM;AAC3C,UAAA,GAAGmD,IAAAA,CAAK9H,OAAAA;AACRmF,UAAAA,SAAAA,EAAW2C,IAAAA,CAAK3C;SACjB,CAAA;AACD,MAAA,CAAA,CAAA,CAAA;AAEF,IAAA;AAEA,IAAA,QAAQa,YAAAA;AACP,MAAA,KAAKC,YAAAA,CAAaC,GAAAA;AACjB,QAAA,IAAI,CAAC,IAAA,CAAKY,SAAAA,CAAUK,GAAAA,EAAK;AACxB,UAAA,MAAM,IAAIlO,MAAM,oCAAA,CAAA;AACjB,QAAA;AACA,QAAA,IAAI+G,OAAAA,CAAQmF,SAAAA,KAAcmB,YAAAA,CAAaC,IAAAA,EAAM;AAC5C,UAAA,OAAO,MAAM,KAAKO,SAAAA,CAAUK,GAAAA,CAAIW,KAAK9H,OAAAA,CAAQ+H,MAAAA,EAAQ/H,QAAQhF,OAAO,CAAA;AACrE,QAAA,CAAA,MAAA,IAAWgF,QAAQmF,SAAAA,KAAcmB,YAAAA,CAAaE,WAAW,IAAA,CAAKM,SAAAA,CAAUK,IAAIa,OAAAA,EAAS;AACpF,UAAA,OAAO,MAAM,IAAA,CAAKlB,SAAAA,CAAUK,GAAAA,CAAIa,OAAAA,CAAQhI,QAAQ+H,MAAAA,EAAQ/H,OAAAA,CAAQiI,MAAAA,EAAQjI,OAAAA,CAAQhF,OAAO,CAAA;AACxF,QAAA,CAAA,MAAA,IAAWgF,QAAQmF,SAAAA,KAAcmB,YAAAA,CAAaG,YAAY,IAAA,CAAKK,SAAAA,CAAUK,IAAIe,QAAAA,EAAU;AACtF,UAAA,OAAO,MAAM,IAAA,CAAKpB,SAAAA,CAAUK,GAAAA,CAAIe,QAAAA,CAC/BlI,QAAQ7B,IAAAA,EACR6B,OAAAA,CAAQmI,UAAAA,EACRnI,OAAAA,CAAQhF,OAAO,CAAA;AAEjB,QAAA;AACA,QAAA,MAAM,IAAI/B,KAAAA,CAAM,CAAA,2BAAA,EAA8B+G,OAAAA,CAAQmF,SAAS,CAAA,CAAE,CAAA;AAElE,MAAA,KAAKc,YAAAA,CAAaE,QAAAA;AACjB,QAAA,IAAI,CAAC,IAAA,CAAKW,SAAAA,CAAUO,QAAAA,EAAU;AAC7B,UAAA,MAAM,IAAIpO,MAAM,yCAAA,CAAA;AACjB,QAAA;AACA,QAAA,MAAMmP,sBAAAA,GAAyBpI,QAAQqI,OAAAA,GACpC;AAAE,UAAA,GAAGrI,OAAAA,CAAQqI,OAAAA;AAASnM,UAAAA,WAAAA,EAAa8D,OAAAA,CAAQ9D;SAAY,GACvD;AAAEA,UAAAA,WAAAA,EAAa8D,OAAAA,CAAQ9D;AAAY,SAAA;AACtC,QAAA,OAAO,MAAM,IAAA,CAAK4K,SAAAA,CAAUO,SAASiB,OAAAA,CAAQtI,OAAAA,CAAQjD,SAASqL,sBAAAA,CAAAA;AAE/D,MAAA,KAAKnC,YAAAA,CAAaG,SAAAA;AACjB,QAAA,IAAI,CAAC,IAAA,CAAKU,SAAAA,CAAUS,SAAAA,EAAW;AAC9B,UAAA,MAAM,IAAItO,MAAM,0CAAA,CAAA;AACjB,QAAA;AACA,QAAA,IAAI+G,OAAAA,CAAQmF,SAAAA,KAAcuB,kBAAAA,CAAmBC,KAAAA,EAAO;AACnD,UAAA,OAAO,MAAM,IAAA,CAAKG,SAAAA,CAAUS,SAAAA,CAAUgB,KAAAA,CAAMvI,QAAQ7B,IAAI,CAAA;QACzD,CAAA,MAAA,IAAW6B,OAAAA,CAAQmF,SAAAA,KAAcuB,kBAAAA,CAAmBE,MAAAA,EAAQ;AAC3D,UAAA,MAAM4B,iBAAiB,MAAM,IAAA,CAAK1B,UAAUS,SAAAA,CAAUgB,KAAAA,CAAMvI,QAAQ/E,KAAK,CAAA;AACzE,UAAA,OAAOuN,cAAAA;AACR,QAAA,CAAA,MAAA,IAAWxI,QAAQmF,SAAAA,KAAc,YAAA,IAAgB,IAAA,CAAK2B,SAAAA,CAAUS,UAAUkB,UAAAA,EAAY;AACrF,UAAA,OAAO,MAAM,KAAK3B,SAAAA,CAAUS,SAAAA,CAAUkB,WAAWzI,OAAAA,CAAQ0I,KAAAA,EAAO1I,QAAQ2I,KAAK,CAAA;AAC9E,QAAA;AACA,QAAA,MAAM,IAAI1P,KAAAA,CAAM,CAAA,iCAAA,EAAoC+G,OAAAA,CAAQmF,SAAS,CAAA,CAAE,CAAA;AAExE,MAAA,KAAKc,YAAAA,CAAaI,IAAAA;AACjB,QAAA,IAAIrG,OAAAA,CAAQmF,SAAAA,KAAcyD,aAAAA,CAAcrC,IAAAA,EAAM;AAC7C,UAAA,MAAMsC,WAAW7I,OAAAA,CAAQ6I,QAAAA;AACzB,UAAA,MAAM5B,OAAAA,GAAU,IAAA,CAAKF,YAAAA,CAAanN,GAAAA,CAAIiP,QAAAA,CAAAA;AAEtC,UAAA,IAAI,CAAC5B,OAAAA,EAAS;AACb,YAAA,MAAM,IAAIhO,KAAAA,CAAM,CAAA,MAAA,EAAS4P,QAAAA,CAAAA,2BAAAA,CAAqC,CAAA;AAC/D,UAAA;AAEA,UAAA,MAAM/O,MAAAA,GAAS,MAAMmN,OAAAA,CAAQjH,OAAAA,CAAQ8I,KAAK,CAAA;AAC1C,UAAA,OAAOhP,MAAAA;AACR,QAAA;AACA,QAAA,MAAM,IAAIb,KAAAA,CAAM,CAAA,4BAAA,EAA+B+G,OAAAA,CAAQmF,SAAS,CAAA,CAAE,CAAA;AAEnE,MAAA;AACC,QAAA,MAAM,IAAIlM,KAAAA,CAAM,CAAA,uBAAA,EAA0B+M,YAAAA,CAAAA,CAAc,CAAA;AAC1D;AACD,EAAA;AACD,CAAA;;;ACjMO,IAAM+C,SAAAA,GAAY;EACxBC,UAAAA,EAAY,YAAA;EACZC,cAAAA,EAAgB,gBAAA;EAChBC,YAAAA,EAAc,cAAA;EACdC,WAAAA,EAAa;AACd;ACAA,IAAMC,oBAAAA,GAAuBC,EAAEC,MAAAA,CAAO;AACrCrO,EAAAA,KAAAA,EAAOoO,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,QAAAA,CAAS,qBAAA;AAC5B,CAAA,CAAA;AAIO,SAASC,oBAAoBC,MAAAA,EAA+B;AAClE,EAAA,OAAO;AACNrL,IAAAA,IAAAA,EAAM0K,SAAAA,CAAUC,UAAAA;IAChBW,WAAAA,EACC,4FAAA;AACDC,IAAAA,WAAAA,EAAaC,gBAAgBT,oBAAAA,CAAAA;IAC7BU,SAAAA,EAAWV,oBAAAA;AACXW,IAAAA,IAAAA,gCAAajB,KAAAA,KAAAA;AACZ,MAAA,IAAI;AACH,QAAA,MAAMvM,OAAAA,GAAU,MAAMmN,MAAAA,CAAO3L,SAAAA,CAAU+K,MAAM7N,KAAK,CAAA;AAClD,QAAA,OAAOvC,KAAKC,SAAAA,CACX;UACCqR,OAAAA,EAAS,IAAA;UACTzN,OAAAA,EAASA,OAAAA,CAAQiE,GAAAA,CAAI,CAACmF,CAAAA,MAAO;AAC5BsE,YAAAA,QAAAA,EAAUtE,CAAAA,CAAEsE,QAAAA;AACZC,YAAAA,YAAAA,EAAcvE,CAAAA,CAAEuE,YAAAA;AAChBP,YAAAA,WAAAA,EAAahE,CAAAA,CAAEgE,WAAAA;AACfQ,YAAAA,SAAAA,EAAWxE,CAAAA,CAAEwE;WACd,CAAA,CAAA;AACAC,UAAAA,KAAAA,EAAO7N,OAAAA,CAAQjB;AAChB,SAAA,EACA,MACA,CAAA,CAAA;AAEF,MAAA,CAAA,CAAA,OAASpB,KAAAA,EAAY;AACpB,QAAA,OAAOxB,KAAKC,SAAAA,CACX;UACCqR,OAAAA,EAAS,KAAA;AACT9P,UAAAA,KAAAA,EAAOA,KAAAA,CAAM6C;AACd,SAAA,EACA,MACA,CAAA,CAAA;AAEF,MAAA;IACD,CAAA,EA3BM,MAAA;AA4BP,GAAA;AACD;AApCgB0M,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;ACNhB,IAAMY,uBAAAA,GAA0BhB,EAAEC,MAAAA,CAAO;EACxCpO,SAAAA,EAAWmO,CAAAA,CAAEiB,MAAMjB,CAAAA,CAAEE,MAAAA,EAAM,CAAA,CAAIgB,QAAAA,EAAQ,CAAGf,QAAAA,CAAS,0CAAA;AACpD,CAAA,CAAA;AAIO,SAASgB,uBAAuBd,MAAAA,EAA+B;AACrE,EAAA,OAAO;AACNrL,IAAAA,IAAAA,EAAM0K,SAAAA,CAAUE,cAAAA;IAChBU,WAAAA,EACC,mGAAA;AACDC,IAAAA,WAAAA,EAAaC,gBAAgBQ,uBAAAA,CAAAA;IAC7BP,SAAAA,EAAWO,uBAAAA;AACXN,IAAAA,IAAAA,gCAAaU,MAAAA,KAAAA;AACZ,MAAA,IAAI;AACH,QAAA,MAAMjN,UAAAA,GAAakM,OAAO5L,kBAAAA,EAAkB;AAC5C,QAAA,OAAOpF,KAAKC,SAAAA,CACX;UACCqR,OAAAA,EAAS,IAAA;AACTxM,UAAAA,UAAAA;UACAT,OAAAA,EAAS;AACV,SAAA,EACA,MACA,CAAA,CAAA;AAEF,MAAA,CAAA,CAAA,OAAS7C,KAAAA,EAAY;AACpB,QAAA,OAAOxB,KAAKC,SAAAA,CACX;UACCqR,OAAAA,EAAS,KAAA;AACT9P,UAAAA,KAAAA,EAAOA,KAAAA,CAAM6C;AACd,SAAA,EACA,MACA,CAAA,CAAA;AAEF,MAAA;IACD,CAAA,EAtBM,MAAA;AAuBP,GAAA;AACD;AA/BgByN,MAAAA,CAAAA,sBAAAA,EAAAA,wBAAAA,CAAAA;ACLhB,IAAME,sBAAAA,GAAyBrB,EAAEC,MAAAA,CAAO;AACvCxN,EAAAA,IAAAA,EAAMuN,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,QAAAA,CAAS,2CAAA,CAAA;AAC1BmB,EAAAA,OAAAA,EAAStB,EAAEuB,MAAAA,EAAM,CAAGL,QAAAA,EAAQ,CAAGf,SAAS,oDAAA,CAAA;AACxCqB,EAAAA,SAAAA,EAAWxB,EAAEuB,MAAAA,EAAM,CAAGL,QAAAA,EAAQ,CAAGf,SAAS,0CAAA;AAC3C,CAAA,CAAA;AAIO,SAASsB,sBAAsBpB,MAAAA,EAA+B;AACpE,EAAA,OAAO;AACNrL,IAAAA,IAAAA,EAAM0K,SAAAA,CAAUG,YAAAA;IAChBS,WAAAA,EACC,qSAAA;AACDC,IAAAA,WAAAA,EAAaC,gBAAgBa,sBAAAA,CAAAA;IAC7BZ,SAAAA,EAAWY,sBAAAA;AACXX,IAAAA,IAAAA,gCAAajB,KAAAA,KAAAA;AACZ,MAAA,IAAI;AACH,QAAA,MAAMhP,MAAAA,GAAS,MAAM4P,MAAAA,CAAO7N,OAAAA,CAAQiN,MAAMhN,IAAAA,EAAM;AAC/C6O,UAAAA,OAAAA,EAAS7B,KAAAA,CAAM6B,OAAAA;AACfE,UAAAA,SAAAA,EAAW/B,KAAAA,CAAM+B;SAClB,CAAA;AAEA,QAAA,IAAI/Q,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgB+G,SAAAA,EAAW;AAChD,UAAA,OAAOrS,KAAKC,SAAAA,CACX;YACCqR,OAAAA,EAAS,IAAA;AACTlQ,YAAAA,MAAAA,EAAQA,MAAAA,CAAOA,MAAAA;YACfkR,KAAAA,EAAO;AACNC,cAAAA,QAAAA,EAAUnR,OAAOkR,KAAAA,CAAMC,QAAAA;AACvBC,cAAAA,UAAAA,EAAYpR,OAAOkR,KAAAA,CAAME;AAC1B;AACD,WAAA,EACA,MACA,CAAA,CAAA;QAEF,CAAA,MAAA,IAAWpR,MAAAA,CAAOZ,MAAAA,KAAW8K,eAAAA,CAAgBmH,MAAAA,EAAQ;AACpD,UAAA,OAAOzS,KAAKC,SAAAA,CACX;YACCqR,OAAAA,EAAS,KAAA;YACT9P,KAAAA,EAAOJ,MAAAA,CAAOI,OAAO6C,OAAAA,IAAW,kBAAA;AAChCqO,YAAAA,KAAAA,EAAOtR,OAAOI,KAAAA,EAAOkR,KAAAA;YACrBrO,OAAAA,EAAS;AACV,WAAA,EACA,MACA,CAAA,CAAA;QAEF,CAAA,MAAO;AACN,UAAA,OAAOrE,KAAKC,SAAAA,CACX;YACCqR,OAAAA,EAAS,KAAA;YACT9P,KAAAA,EAAO,qBAAA;YACP6C,OAAAA,EAAS;AACV,WAAA,EACA,MACA,CAAA,CAAA;AAEF,QAAA;AACD,MAAA,CAAA,CAAA,OAAS7C,KAAAA,EAAY;AACpB,QAAA,OAAOxB,KAAKC,SAAAA,CACX;UACCqR,OAAAA,EAAS,KAAA;AACT9P,UAAAA,KAAAA,EAAOA,KAAAA,CAAM6C,OAAAA;UACbA,OAAAA,EAAS;AACV,SAAA,EACA,MACA,CAAA,CAAA;AAEF,MAAA;IACD,CAAA,EArDM,MAAA;AAsDP,GAAA;AACD;AA9DgB+N,MAAAA,CAAAA,qBAAAA,EAAAA,uBAAAA,CAAAA;ACThB,IAAMO,qBAAAA,GAAwBhC,EAAEC,MAAAA,CAAO;AACtC7O,EAAAA,IAAAA,EAAM4O,CAAAA,CACJE,MAAAA,EAAM,CACNC,QAAAA,CAAS,6EAAA;AACZ,CAAA,CAAA;AAIO,SAAS8B,qBAAqB5B,MAAAA,EAA+B;AACnE,EAAA,OAAO;AACNrL,IAAAA,IAAAA,EAAM0K,SAAAA,CAAUI,WAAAA;IAChBQ,WAAAA,EACC,sOAAA;AACDC,IAAAA,WAAAA,EAAaC,gBAAgBwB,qBAAAA,CAAAA;IAC7BvB,SAAAA,EAAWuB,qBAAAA;AACXtB,IAAAA,IAAAA,gCAAajB,KAAAA,KAAAA;AACZ,MAAA,IAAI;AACH,QAAA,MAAMhP,MAAAA,GAAS,MAAM4P,MAAAA,CAAO1L,UAAAA,CAAW8K,MAAMrO,IAAI,CAAA;AAEjD,QAAA,IAAIX,MAAAA,CAAO6K,SAAS,WAAA,EAAa;AAChC,UAAA,OAAOjM,KAAKC,SAAAA,CACX;YACCqR,OAAAA,EAAS,IAAA;YACTrF,IAAAA,EAAM,WAAA;AACNlK,YAAAA,IAAAA,EAAMX,MAAAA,CAAOW,IAAAA;AACb8Q,YAAAA,KAAAA,EAAOzR,MAAAA,CAAOyR;AACf,WAAA,EACA,MACA,CAAA,CAAA;QAEF,CAAA,MAAO;AACN,UAAA,OAAO7S,KAAKC,SAAAA,CACX;YACCqR,OAAAA,EAAS,IAAA;YACTrF,IAAAA,EAAM,UAAA;AACNtG,YAAAA,IAAAA,EAAMvE,MAAAA,CAAOuE,IAAAA;AACbsL,YAAAA,WAAAA,EAAa7P,MAAAA,CAAO6P,WAAAA;AACpBhC,YAAAA,UAAAA,EAAY7N,MAAAA,CAAO6N,UAAAA;AACnB6D,YAAAA,KAAAA,EAAO1R,MAAAA,CAAO0R,KAAAA;AACd/Q,YAAAA,IAAAA,EAAMX,MAAAA,CAAOW;AACd,WAAA,EACA,MACA,CAAA,CAAA;AAEF,QAAA;AACD,MAAA,CAAA,CAAA,OAASP,KAAAA,EAAY;AACpB,QAAA,OAAOxB,KAAKC,SAAAA,CACX;UACCqR,OAAAA,EAAS,KAAA;AACT9P,UAAAA,KAAAA,EAAOA,KAAAA,CAAM6C;AACd,SAAA,EACA,MACA,CAAA,CAAA;AAEF,MAAA;IACD,CAAA,EAxCM,MAAA;AAyCP,GAAA;AACD;AAjDgBuO,MAAAA,CAAAA,oBAAAA,EAAAA,sBAAAA,CAAAA;;;ACmDT,IAAMG,0BAAN,MAAMA;EArDb;;;AAsDSrO,EAAAA,OAAAA;AACAC,EAAAA,gBAAAA;AACAqO,EAAAA,MAAAA;AACAC,EAAAA,OAAAA;AACA3K,EAAAA,gBAAAA;;;;;;;;;;;;;;;;;;;;;;;;AAyBRjJ,EAAAA,WAAAA,CAAYiD,OAAAA,EAAyC;AACpD,IAAA,MAAM,EAAEvD,OAAAA,EAAS2C,MAAAA,EAAQpC,OAAAA,EAASgJ,gBAAAA,EAAkBlJ,OAAK,GAAKkD,OAAAA;AAE9D,IAAA,IAAI,CAACvD,OAAAA,IAAW,CAAC2C,MAAAA,EAAQ;AACxB,MAAA,MAAM,IAAInB,MAAM,2CAAA,CAAA;AACjB,IAAA;AAEA,IAAA,IAAIxB,WAAW2C,MAAAA,EAAQ;AACtB,MAAA,MAAM,IAAInB,MAAM,wCAAA,CAAA;AACjB,IAAA;AAEA,IAAA,IAAA,CAAK+H,gBAAAA,GAAmB,IAAI6F,gBAAAA,CAAiB7F,gBAAAA,CAAAA;AAE7C,IAAA,IAAI5G,MAAAA,EAAQ;AACX,MAAA,IAAA,CAAKiD,gBAAAA,GAAmB,IAAIlD,gBAAAA,CAAiBC,MAAAA,CAAAA;AAC7C,MAAA,IAAA,CAAKgD,UAAU,IAAA,CAAKC,gBAAAA;AACpB,MAAA,IAAA,CAAKqO,SAAS,IAAIvO,aAAAA,CAAc,IAAA,CAAKC,OAAAA,EAAS,KAAKC,gBAAgB,CAAA;AACnE,MAAA,IAAA,CAAKsO,OAAAA,GAAU,IAAI5K,mBAAAA,CAClB,IAAA,CAAK3D,SACL,IAAA,CAAK4D,gBAAAA,EACL,KAAK3D,gBAAgB,CAAA;IAEvB,CAAA,MAAO;AACN,MAAA,IAAA,CAAKD,OAAAA,GAAU,IAAI5F,aAAAA,CAAcC,OAAAA,EAAUO,SAASF,KAAAA,CAAAA;AACpD,MAAA,IAAA,CAAK4T,MAAAA,GAAS,IAAIvO,aAAAA,CAAc,IAAA,CAAKC,OAAO,CAAA;AAC5C,MAAA,IAAA,CAAKuO,UAAU,IAAI5K,mBAAAA,CAAoB,IAAA,CAAK3D,OAAAA,EAAS,KAAK4D,gBAAgB,CAAA;AAC3E,IAAA;AACD,EAAA;;;;;AAMA,EAAA,MAAM/I,KAAKC,UAAAA,EAKR;AACF,IAAA,MAAM0T,eAAAA,GAAkB,IAAA,CAAK5K,gBAAAA,CAAiB0G,kBAAAA,EAAkB;AAChE,IAAA,MAAMtP,QAAAA,GAAW;AAChBiL,MAAAA,MAAAA,EAAQ,CAAC,CAAC,IAAA,CAAKrC,gBAAAA,CAAiBsC,MAAAA,EAAM;AACtCC,MAAAA,WAAAA,EAAa,CAAC,CAAC,IAAA,CAAKvC,gBAAAA,CAAiBwC,WAAAA,EAAW;AAChDC,MAAAA,YAAAA,EAAc,CAAC,CAAC,IAAA,CAAKzC,gBAAAA,CAAiB0C,YAAAA,EAAY;MAClDC,QAAAA,EAAU,IAAA,CAAK3C,iBAAiB2C,QAAAA;AACjC,KAAA;AACA,IAAA,OAAO,MAAM,IAAA,CAAKvG,OAAAA,CAAQnF,IAAAA,CAAKC,UAAAA,EAAY0T,iBAAiBxT,QAAAA,CAAAA;AAC7D,EAAA;;;;EAKAkB,WAAAA,GAAsB;AACrB,IAAA,OAAO,IAAA,CAAK8D,QAAQ9D,WAAAA,EAAW;AAChC,EAAA;;;;AAKA4N,EAAAA,UAAAA,CAAWD,OAAAA,EAAiC;AAC3C,IAAA,IAAA,CAAKjG,gBAAAA,CAAiBkG,WAAWD,OAAAA,CAAAA;AAClC,EAAA;;;;AAKAG,EAAAA,eAAAA,CAAgBH,OAAAA,EAAsC;AACrD,IAAA,IAAA,CAAKjG,gBAAAA,CAAiBoG,gBAAgBH,OAAAA,CAAAA;AACvC,EAAA;;;;AAKAK,EAAAA,gBAAAA,CAAiBL,OAAAA,EAAuC;AACvD,IAAA,IAAA,CAAKjG,gBAAAA,CAAiBsG,iBAAiBL,OAAAA,CAAAA;AACxC,EAAA;;;;;AAMAO,EAAAA,YAAAA,CAAarP,KAAAA,EAA2B;AACvC,IAAA,IAAA,CAAK6I,gBAAAA,CAAiBwG,aAAarP,KAAAA,CAAAA;AACpC,EAAA;;;;;EAMA0T,cAAAA,GAA+B;AAC9B,IAAA,OAAO,IAAA,CAAK7K,gBAAAA,CAAiByG,QAAAA,EAAQ,IAAM,EAAA;AAC5C,EAAA;;;;;EAMAqE,wBAAAA,GAAmD;AAClD,IAAA,OAAO,IAAA,CAAK9K,iBAAiB0G,kBAAAA,EAAkB;AAChD,EAAA;;;;;;;;;;;;;;;;EAiBAqE,WAAAA,GAAsB;AACrB,IAAA,OAAO;AACNtC,MAAAA,mBAAAA,CAAoB,IAAI,CAAA;AACxBe,MAAAA,sBAAAA,CAAuB,IAAI,CAAA;AAC3BM,MAAAA,qBAAAA,CAAsB,IAAI,CAAA;AAC1BQ,MAAAA,oBAAAA,CAAqB,IAAI;;AAE3B,EAAA;;;;AAKA,EAAA,MAAM/N,QAAQvC,OAAAA,EAIX;AACF,IAAA,OAAO,MAAM,IAAA,CAAK0Q,MAAAA,CAAOnO,OAAAA,CAAQvC,OAAAA,CAAAA;AAClC,EAAA;;;;EAKA8C,kBAAAA,GAA6B;AAC5B,IAAA,OAAO,IAAA,CAAK4N,OAAO5N,kBAAAA,EAAkB;AACtC,EAAA;;;;EAKA,MAAMC,SAAAA,CAAU9C,OAAeD,OAAAA,EAAkD;AAChF,IAAA,OAAO,MAAM,IAAA,CAAK0Q,MAAAA,CAAO3N,SAAAA,CAAU9C,OAAOD,OAAAA,CAAAA;AAC3C,EAAA;;;;AAKA,EAAA,MAAMgD,WAAWvD,IAAAA,EAAsC;AACtD,IAAA,OAAO,MAAM,IAAA,CAAKiR,MAAAA,CAAO1N,UAAAA,CAAWvD,IAAAA,CAAAA;AACrC,EAAA;;;;EAKA,MAAM0G,aAAAA,CACLrF,IAAAA,EACAC,MAAAA,EACAqF,UAAAA,EAC2B;AAC3B,IAAA,OAAO,MAAM,IAAA,CAAKuK,OAAAA,CAAQxK,aAAAA,CAAcrF,IAAAA,EAAMC,QAAQqF,UAAAA,CAAAA;AACvD,EAAA;;;;EAKA,MAAMvF,OAAAA,CAAQC,MAAcC,MAAAA,EAA6D;AACxF,IAAA,OAAO,MAAM,IAAA,CAAK4P,OAAAA,CAAQ9P,OAAAA,CAAQC,MAAMC,MAAAA,CAAAA;AACzC,EAAA;;;;EAKA,MAAME,MAAAA,CAAOC,aAAqBC,cAAAA,EAAmD;AACpF,IAAA,OAAO,MAAM,IAAA,CAAKwP,OAAAA,CAAQ1P,MAAAA,CAAOC,aAAaC,cAAAA,CAAAA;AAC/C,EAAA;;;;EAKA,MAAMoJ,cAAAA,CAAeS,cAA4BhG,OAAAA,EAA4B;AAC5E,IAAA,OAAO,MAAM,IAAA,CAAKgB,gBAAAA,CAAiBuE,cAAAA,CAAeS,cAAchG,OAAAA,CAAAA;AACjE,EAAA;;;;AAKA,EAAA,MAAMzE,aAAAA,GAGH;AACF,IAAA,OAAO,MAAM,IAAA,CAAKmQ,MAAAA,CAAOnQ,aAAAA,EAAa;AACvC,EAAA;;;;;;;;;;;;;;AAeA,EAAA,MAAMH,sBAAsBJ,OAAAA,EAAwD;AACnF,IAAA,OAAO,MAAM,IAAA,CAAK0Q,MAAAA,CAAOtQ,qBAAAA,CAAsBJ,OAAAA,CAAAA;AAChD,EAAA;AACD;AClTO,IAAMgR,gBAAN,MAAMA;EAFb;;;AAGStC,EAAAA,MAAAA;AAER3R,EAAAA,WAAAA,CAAY2R,MAAAA,EAAiC;AAC5C,IAAA,IAAA,CAAKA,MAAAA,GAASA,MAAAA;AACf,EAAA;EAEA,MAAMuC,YAAAA,CAAaC,QAAgBC,UAAAA,EAAuC;AACzE,IAAA,MAAMC,KAAAA,GAAQ,IAAA,CAAK1C,MAAAA,CAAO5L,kBAAAA,EAAkB;AAC5CmF,IAAAA,GAAAA,CAAIxG,MAAM,4BAAA,EAA8B;AAAEyP,MAAAA,MAAAA;AAAQC,MAAAA,UAAAA;AAAYE,MAAAA,WAAAA,EAAaD,KAAAA,CAAM9Q;KAAO,CAAA;AACxF,IAAA,OAAO,mBAAA;AACR,EAAA;AACD;;;ACFO,SAASgR,yBAAyB5C,MAAAA,EAA+B;AACvE,EAAA,OAAO;AACND,IAAAA,mBAAAA,CAAoBC,MAAAA,CAAAA;AACpBc,IAAAA,sBAAAA,CAAuBd,MAAAA,CAAAA;AACvBoB,IAAAA,qBAAAA,CAAsBpB,MAAAA,CAAAA;AACtB4B,IAAAA,oBAAAA,CAAqB5B,MAAAA;;AAEvB;AAPgB4C,MAAAA,CAAAA,wBAAAA,EAAAA,0BAAAA,CAAAA","file":"index.js","sourcesContent":["import type { ClientHooks } from './types.js';\nimport type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\n\nexport interface ISession {\n\tinit(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<{\n\t\tclientId: string;\n\t\ttoken: string;\n\t\texpiresAt: number;\n\t\ttokenRotateAt: number;\n\t}>;\n\tgetClientId(): string;\n\tensureInitialized(): Promise<void>;\n\tgetHeaders(): Record<string, string>;\n\tgetBaseUrl(): string;\n\tupdateToken(response: Response): void;\n\tprepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n}\n\nexport class ClientSession implements ISession {\n\tprivate baseUrl: string;\n\tprivate customHeaders: Record<string, string>;\n\tprivate clientId?: string;\n\tprivate clientToken?: string;\n\tprivate initPromise?: Promise<void>;\n\tprivate hooks?: ClientHooks;\n\n\tconstructor(baseUrl: string, headers?: Record<string, string>, hooks?: ClientHooks) {\n\t\tthis.baseUrl = baseUrl;\n\t\tthis.customHeaders = headers || {};\n\t\tthis.hooks = hooks;\n\t}\n\n\t/**\n\t * Initializes the client session with the server.\n\t * This MUST be called before any other operations.\n\t * The server generates and returns a unique client ID and token.\n\t * @param clientInfo - Optional client information\n\t * @param tools - Optional client tool definitions to register with the server\n\t * @param services - Optional client service capabilities (LLM, approval, embedding)\n\t */\n\tasync init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<{\n\t\tclientId: string;\n\t\ttoken: string;\n\t\texpiresAt: number;\n\t\ttokenRotateAt: number;\n\t}> {\n\t\tif (this.initPromise) {\n\t\t\tawait this.initPromise;\n\t\t\treturn {\n\t\t\t\tclientId: this.clientId!,\n\t\t\t\ttoken: this.clientToken!,\n\t\t\t\texpiresAt: 0,\n\t\t\t\ttokenRotateAt: 0,\n\t\t\t};\n\t\t}\n\n\t\tthis.initPromise = (async () => {\n\t\t\tconst url = `${this.baseUrl}/api/init`;\n\t\t\tconst body = JSON.stringify({\n\t\t\t\tclientInfo,\n\t\t\t\ttools: tools || [],\n\t\t\t\tservices,\n\t\t\t});\n\t\t\tconst headers = await this.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`Client initialization failed: ${response.status} ${response.statusText}`);\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as {\n\t\t\t\tclientId: string;\n\t\t\t\ttoken: string;\n\t\t\t\texpiresAt: number;\n\t\t\t\ttokenRotateAt: number;\n\t\t\t};\n\n\t\t\tthis.clientId = data.clientId;\n\t\t\tthis.clientToken = data.token;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn {\n\t\t\tclientId: this.clientId!,\n\t\t\ttoken: this.clientToken!,\n\t\t\texpiresAt: 0,\n\t\t\ttokenRotateAt: 0,\n\t\t};\n\t}\n\n\t/**\n\t * Gets the unique client ID.\n\t */\n\tgetClientId(): string {\n\t\tif (!this.clientId) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t\treturn this.clientId;\n\t}\n\n\t/**\n\t * Ensures the client is initialized before making requests.\n\t */\n\tasync ensureInitialized(): Promise<void> {\n\t\tif (!this.clientId) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\t/**\n\t * Creates HTTP headers for requests.\n\t */\n\tgetHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...this.customHeaders,\n\t\t};\n\n\t\tif (this.clientId) {\n\t\t\theaders['X-Client-ID'] = this.clientId;\n\t\t}\n\n\t\tif (this.clientToken) {\n\t\t\theaders['Authorization'] = `Bearer ${this.clientToken}`;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\tgetBaseUrl(): string {\n\t\treturn this.baseUrl;\n\t}\n\n\t/**\n\t * Updates the client token from response headers (token refresh).\n\t */\n\tupdateToken(response: Response): void {\n\t\tconst newToken = response.headers.get('X-ATP-Token');\n\t\tif (newToken) {\n\t\t\tthis.clientToken = newToken;\n\t\t}\n\t}\n\n\t/**\n\t * Prepares headers for a request, calling preRequest hook if configured\n\t */\n\tasync prepareHeaders(\n\t\tmethod: string,\n\t\turl: string,\n\t\tbody?: unknown\n\t): Promise<Record<string, string>> {\n\t\tlet headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...this.customHeaders,\n\t\t};\n\n\t\tif (this.clientId) {\n\t\t\theaders['X-Client-ID'] = this.clientId;\n\t\t}\n\n\t\tif (this.clientToken) {\n\t\t\theaders['Authorization'] = `Bearer ${this.clientToken}`;\n\t\t}\n\n\t\tif (this.hooks?.preRequest) {\n\t\t\ttry {\n\t\t\t\tconst result = await this.hooks.preRequest({\n\t\t\t\t\turl,\n\t\t\t\t\tmethod,\n\t\t\t\t\tcurrentHeaders: headers,\n\t\t\t\t\tbody,\n\t\t\t\t});\n\n\t\t\t\tif (result.abort) {\n\t\t\t\t\tthrow new Error(result.abortReason || 'Request aborted by preRequest hook');\n\t\t\t\t}\n\n\t\t\t\tif (result.headers) {\n\t\t\t\t\theaders = result.headers;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn headers;\n\t}\n}\n","import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { ISession } from './session.js';\n\ninterface InProcessServer {\n\tstart(): Promise<void>;\n\thandleInit(ctx: InProcessRequestContext): Promise<unknown>;\n\tgetDefinitions(ctx?: InProcessRequestContext): Promise<unknown>;\n\tgetRuntimeDefinitions(ctx?: InProcessRequestContext): Promise<string>;\n\tgetInfo(): unknown;\n\thandleSearch(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleExplore(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleExecute(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleResume(ctx: InProcessRequestContext, executionId: string): Promise<unknown>;\n}\n\ninterface InProcessRequestContext {\n\tmethod: string;\n\tpath: string;\n\tquery: Record<string, string>;\n\theaders: Record<string, string>;\n\tbody: unknown;\n\tclientId?: string;\n\tclientToken?: string;\n\tuserId?: string;\n\tuser?: unknown;\n\texecutionId?: string;\n\tcode?: string;\n\tvalidation?: unknown;\n\tresult?: unknown;\n\terror?: Error;\n\tlogger: { debug: () => void; info: () => void; warn: () => void; error: () => void };\n\tstatus: number;\n\tresponseBody: unknown;\n\tthrow(status: number, message: string): never;\n\tassert(condition: boolean, message: string): asserts condition;\n\tset(header: string, value: string): void;\n}\n\nexport class InProcessSession implements ISession {\n\tprivate server: InProcessServer;\n\tprivate clientId?: string;\n\tprivate clientToken?: string;\n\tprivate initialized: boolean = false;\n\tprivate initPromise?: Promise<void>;\n\n\tconstructor(server: InProcessServer) {\n\t\tthis.server = server;\n\t}\n\n\tasync init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<{\n\t\tclientId: string;\n\t\ttoken: string;\n\t\texpiresAt: number;\n\t\ttokenRotateAt: number;\n\t}> {\n\t\tif (this.initPromise) {\n\t\t\tawait this.initPromise;\n\t\t\treturn {\n\t\t\t\tclientId: this.clientId!,\n\t\t\t\ttoken: this.clientToken!,\n\t\t\t\texpiresAt: 0,\n\t\t\t\ttokenRotateAt: 0,\n\t\t\t};\n\t\t}\n\n\t\tthis.initPromise = (async () => {\n\t\t\tawait this.server.start();\n\n\t\t\tconst ctx = this.createContext({\n\t\t\t\tmethod: 'POST',\n\t\t\t\tpath: '/api/init',\n\t\t\t\tbody: {\n\t\t\t\t\tclientInfo,\n\t\t\t\t\ttools: tools || [],\n\t\t\t\t\tservices,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst result = (await this.server.handleInit(ctx)) as {\n\t\t\t\tclientId: string;\n\t\t\t\ttoken: string;\n\t\t\t\texpiresAt: number;\n\t\t\t\ttokenRotateAt: number;\n\t\t\t};\n\n\t\t\tthis.clientId = result.clientId;\n\t\t\tthis.clientToken = result.token;\n\t\t\tthis.initialized = true;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn {\n\t\t\tclientId: this.clientId!,\n\t\t\ttoken: this.clientToken!,\n\t\t\texpiresAt: 0,\n\t\t\ttokenRotateAt: 0,\n\t\t};\n\t}\n\n\tgetClientId(): string {\n\t\tif (!this.clientId) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t\treturn this.clientId;\n\t}\n\n\tasync ensureInitialized(): Promise<void> {\n\t\tif (!this.initialized) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\tgetHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t'content-type': 'application/json',\n\t\t};\n\n\t\tif (this.clientId) {\n\t\t\theaders['x-client-id'] = this.clientId;\n\t\t}\n\n\t\tif (this.clientToken) {\n\t\t\theaders['authorization'] = `Bearer ${this.clientToken}`;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\tgetBaseUrl(): string {\n\t\treturn '';\n\t}\n\n\tupdateToken(_response: Response): void {\n\t\t// No-op for in-process - tokens are managed directly\n\t}\n\n\tasync prepareHeaders(\n\t\t_method: string,\n\t\t_url: string,\n\t\t_body?: unknown\n\t): Promise<Record<string, string>> {\n\t\treturn this.getHeaders();\n\t}\n\n\tasync getDefinitions(options?: { apiGroups?: string[] }): Promise<{\n\t\ttypescript: string;\n\t\tversion: string;\n\t\tapiGroups: string[];\n\t}> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = this.createContext({\n\t\t\tmethod: 'GET',\n\t\t\tpath: '/api/definitions',\n\t\t\tquery: options?.apiGroups ? { apiGroups: options.apiGroups.join(',') } : {},\n\t\t});\n\n\t\treturn (await this.server.getDefinitions(ctx)) as {\n\t\t\ttypescript: string;\n\t\t\tversion: string;\n\t\t\tapiGroups: string[];\n\t\t};\n\t}\n\n\tasync getRuntimeDefinitions(options?: { apis?: string[] }): Promise<string> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = this.createContext({\n\t\t\tmethod: 'GET',\n\t\t\tpath: '/api/runtime',\n\t\t\tquery: options?.apis?.length ? { apis: options.apis.join(',') } : {},\n\t\t});\n\n\t\treturn await this.server.getRuntimeDefinitions(ctx);\n\t}\n\n\tasync getServerInfo(): Promise<{\n\t\tversion: string;\n\t\tcapabilities: Record<string, boolean>;\n\t}> {\n\t\tawait this.ensureInitialized();\n\t\treturn this.server.getInfo() as {\n\t\t\tversion: string;\n\t\t\tcapabilities: Record<string, boolean>;\n\t\t};\n\t}\n\n\tasync search(query: string, options?: Record<string, unknown>): Promise<{ results: unknown[] }> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/search',\n\t\t\tbody: { query, ...options },\n\t\t});\n\n\t\treturn (await this.server.handleSearch(ctx)) as { results: unknown[] };\n\t}\n\n\tasync explore(path: string): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/explore',\n\t\t\tbody: { path },\n\t\t});\n\n\t\treturn await this.server.handleExplore(ctx);\n\t}\n\n\tasync execute(code: string, config?: Record<string, unknown>): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/execute',\n\t\t\tbody: { code, config },\n\t\t});\n\n\t\treturn await this.server.handleExecute(ctx);\n\t}\n\n\tasync resume(executionId: string, callbackResult: unknown): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: `/api/resume/${executionId}`,\n\t\t\tbody: { result: callbackResult },\n\t\t});\n\n\t\treturn await this.server.handleResume(ctx, executionId);\n\t}\n\n\tasync resumeWithBatchResults(\n\t\texecutionId: string,\n\t\tbatchResults: Array<{ id: string; result: unknown }>\n\t): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: `/api/resume/${executionId}`,\n\t\t\tbody: { results: batchResults },\n\t\t});\n\n\t\treturn await this.server.handleResume(ctx, executionId);\n\t}\n\n\tprivate createContext(options: {\n\t\tmethod: string;\n\t\tpath: string;\n\t\tquery?: Record<string, string>;\n\t\tbody?: unknown;\n\t}): InProcessRequestContext {\n\t\tconst noopLogger = {\n\t\t\tdebug: () => {},\n\t\t\tinfo: () => {},\n\t\t\twarn: () => {},\n\t\t\terror: () => {},\n\t\t};\n\n\t\treturn {\n\t\t\tmethod: options.method,\n\t\t\tpath: options.path,\n\t\t\tquery: options.query || {},\n\t\t\theaders: this.getHeaders(),\n\t\t\tbody: options.body,\n\t\t\tclientId: this.clientId,\n\t\t\tclientToken: this.clientToken,\n\t\t\tlogger: noopLogger,\n\t\t\tstatus: 200,\n\t\t\tresponseBody: null,\n\t\t\tthrow: (status: number, message: string) => {\n\t\t\t\tconst error = new Error(message);\n\t\t\t\t(error as Error & { status: number }).status = status;\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\tassert: (condition: boolean, message: string) => {\n\t\t\t\tif (!condition) {\n\t\t\t\t\tthrow new Error(message);\n\t\t\t\t}\n\t\t\t},\n\t\t\tset: () => {},\n\t\t};\n\t}\n}\n","import type { SearchOptions, SearchResult, ExploreResult } from '@mondaydotcomorg/atp-protocol';\nimport type { RuntimeAPIName } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './session.js';\nimport type { InProcessSession } from './in-process-session.js';\n\nexport class APIOperations {\n\tprivate session: ISession;\n\tprivate inProcessSession?: InProcessSession;\n\tprivate apiDefinitions?: string;\n\n\tconstructor(session: ISession, inProcessSession?: InProcessSession) {\n\t\tthis.session = session;\n\t\tthis.inProcessSession = inProcessSession;\n\t}\n\n\t/**\n\t * Connects to the server and retrieves API definitions.\n\t */\n\tasync connect(options?: { apiGroups?: string[] }): Promise<{\n\t\tserverVersion: string;\n\t\tcapabilities: unknown;\n\t\tapiGroups: string[];\n\t}> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\tconst data = await this.inProcessSession.getDefinitions(options);\n\t\t\tthis.apiDefinitions = data.typescript;\n\t\t\treturn {\n\t\t\t\tserverVersion: data.version,\n\t\t\t\tcapabilities: {},\n\t\t\t\tapiGroups: data.apiGroups,\n\t\t\t};\n\t\t}\n\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.apiGroups) {\n\t\t\tparams.set('apiGroups', options.apiGroups.join(','));\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/definitions?${params}`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Connection failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as {\n\t\t\ttypescript: string;\n\t\t\tversion: string;\n\t\t\tapiGroups: string[];\n\t\t};\n\t\tthis.apiDefinitions = data.typescript;\n\n\t\treturn {\n\t\t\tserverVersion: data.version,\n\t\t\tcapabilities: {},\n\t\t\tapiGroups: data.apiGroups,\n\t\t};\n\t}\n\n\t/**\n\t * Gets the TypeScript type definitions for available APIs.\n\t */\n\tgetTypeDefinitions(): string {\n\t\tif (!this.apiDefinitions) {\n\t\t\tthrow new Error('Not connected. Call connect() first.');\n\t\t}\n\t\treturn this.apiDefinitions;\n\t}\n\n\t/**\n\t * Searches for available API functions.\n\t */\n\tasync searchAPI(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\tconst data = await this.inProcessSession.search(\n\t\t\t\tquery,\n\t\t\t\toptions as unknown as Record<string, unknown>\n\t\t\t);\n\t\t\treturn data.results as SearchResult[];\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/search`;\n\t\tconst body = JSON.stringify({ query, ...options });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Search failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as { results: SearchResult[] };\n\t\treturn data.results;\n\t}\n\n\t/**\n\t * Explores the API filesystem at the given path.\n\t */\n\tasync exploreAPI(path: string): Promise<ExploreResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn (await this.inProcessSession.explore(path)) as ExploreResult;\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/explore`;\n\t\tconst body = JSON.stringify({ path });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Explore failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\treturn (await response.json()) as ExploreResult;\n\t}\n\n\t/**\n\t * Gets information about the server.\n\t */\n\tasync getServerInfo(): Promise<{\n\t\tversion: string;\n\t\tcapabilities: Record<string, boolean>;\n\t}> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn await this.inProcessSession.getServerInfo();\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/info`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to get server info: ${response.status}`);\n\t\t}\n\n\t\treturn (await response.json()) as {\n\t\t\tversion: string;\n\t\t\tcapabilities: Record<string, boolean>;\n\t\t};\n\t}\n\n\t/**\n\t * Gets ATP runtime API definitions as TypeScript declarations.\n\t * Returns the full TypeScript definitions for atp.llm.*, atp.cache.*, etc.\n\t * These are the APIs available during code execution.\n\t *\n\t * Behavior:\n\t * - No options: Returns APIs based on client capabilities (default filtering)\n\t * - apis: ['llm', 'cache']: Returns only specified APIs (intersection with client capabilities)\n\t * - apis: []: Returns all APIs regardless of client capabilities\n\t *\n\t * @param options - Optional filtering options\n\t * @param options.apis - Specific APIs to include (e.g., ['llm', 'cache', 'approval'])\n\t */\n\tasync getRuntimeDefinitions(options?: { apis?: RuntimeAPIName[] }): Promise<string> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn await this.inProcessSession.getRuntimeDefinitions(\n\t\t\t\toptions?.apis ? { apis: options.apis } : undefined\n\t\t\t);\n\t\t}\n\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.apis && options.apis.length > 0) {\n\t\t\tparams.set('apis', options.apis.join(','));\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/runtime${params.toString() ? `?${params}` : ''}`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to get runtime definitions: ${response.status}`);\n\t\t}\n\n\t\treturn await response.text();\n\t}\n}\n","/**\n * Base error class for exceptions thrown by client callbacks that should\n * be propagated through the execution flow rather than being caught and\n * converted to error results.\n *\n * Use this when client-side service providers need to interrupt normal\n * execution flow (e.g., for human-in-the-loop workflows, custom control flow).\n *\n * @example\n * ```typescript\n * class CustomInterruptException extends ClientCallbackError {\n * constructor(message: string, public data: any) {\n * super(message);\n * this.name = 'CustomInterruptException';\n * }\n * }\n * ```\n */\nexport class ClientCallbackError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'ClientCallbackError';\n\t}\n}\n","/**\n * Provenance Token Registry for Client\n *\n * Stores and manages provenance tokens for multi-step tracking\n */\n\nexport interface TokenEntry {\n\ttoken: string;\n\taddedAt: number;\n\tsequence: number;\n}\n\nexport class ProvenanceTokenRegistry {\n\tprivate cache: Map<string, TokenEntry> = new Map();\n\tprivate maxSize: number;\n\tprivate ttl: number;\n\tprivate sequenceCounter: number = 0;\n\n\tconstructor(maxSize: number = 10000, ttlHours: number = 1) {\n\t\tthis.maxSize = maxSize;\n\t\tthis.ttl = ttlHours * 3600 * 1000;\n\t}\n\n\t/**\n\t * Add a token to the registry\n\t */\n\tadd(token: string): void {\n\t\t// Evict expired tokens first\n\t\tthis.evictExpired();\n\n\t\t// Check if at capacity and evict LRU if needed\n\t\tif (this.cache.size >= this.maxSize) {\n\t\t\tthis.evictLRU();\n\t\t}\n\n\t\t// Store token with sequence number for stable ordering\n\t\tthis.cache.set(token, {\n\t\t\ttoken,\n\t\t\taddedAt: Date.now(),\n\t\t\tsequence: this.sequenceCounter++,\n\t\t});\n\t}\n\n\t/**\n\t * Get recent tokens (non-expired, sorted by age, limited)\n\t * Returns tokens in chronological order (oldest first, most recent last)\n\t */\n\tgetRecentTokens(maxCount: number = 1000): string[] {\n\t\tif (maxCount <= 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tthis.evictExpired();\n\n\t\tconst now = Date.now();\n\t\tconst expiredTokens: string[] = [];\n\n\t\tconst entries = Array.from(this.cache.values())\n\t\t\t.filter((entry) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst [body] = entry.token.split('.');\n\t\t\t\t\tif (!body) {\n\t\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst payload = JSON.parse(Buffer.from(body, 'base64url').toString());\n\t\t\t\t\tif (!payload.expiresAt || payload.expiresAt <= now) {\n\t\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} catch {\n\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.sort((a, b) => a.sequence - b.sequence)\n\t\t\t.slice(-maxCount);\n\n\t\tfor (const token of expiredTokens) {\n\t\t\tthis.cache.delete(token);\n\t\t}\n\n\t\treturn entries.map((e) => e.token);\n\t}\n\n\t/**\n\t * Clear all tokens\n\t */\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n\n\t/**\n\t * Get registry size\n\t */\n\tsize(): number {\n\t\treturn this.cache.size;\n\t}\n\n\t/**\n\t * Evict expired tokens\n\t */\n\tprivate evictExpired(): void {\n\t\tconst now = Date.now();\n\t\tconst toDelete: string[] = [];\n\n\t\tfor (const [token, entry] of this.cache.entries()) {\n\t\t\tif (now - entry.addedAt > this.ttl) {\n\t\t\t\ttoDelete.push(token);\n\t\t\t}\n\t\t}\n\n\t\tfor (const token of toDelete) {\n\t\t\tthis.cache.delete(token);\n\t\t}\n\t}\n\n\t/**\n\t * Evict least recently used (oldest) token\n\t */\n\tprivate evictLRU(): void {\n\t\tlet oldestToken: string | null = null;\n\t\tlet oldestSequence = Infinity;\n\n\t\tfor (const [token, entry] of this.cache.entries()) {\n\t\t\tif (entry.sequence < oldestSequence) {\n\t\t\t\toldestSequence = entry.sequence;\n\t\t\t\toldestToken = token;\n\t\t\t}\n\t\t}\n\n\t\tif (oldestToken) {\n\t\t\tthis.cache.delete(oldestToken);\n\t\t}\n\t}\n}\n","import type { ExecutionResult, ExecutionConfig } from '@mondaydotcomorg/atp-protocol';\nimport { ExecutionStatus, CallbackType } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './session.js';\nimport type { InProcessSession } from './in-process-session.js';\nimport type { ServiceProviders } from './service-providers';\nimport { ClientCallbackError } from '../errors.js';\nimport { ProvenanceTokenRegistry } from './provenance-registry.js';\n\nexport class ExecutionOperations {\n\tprivate session: ISession;\n\tprivate inProcessSession?: InProcessSession;\n\tprivate serviceProviders: ServiceProviders;\n\tprivate tokenRegistry: ProvenanceTokenRegistry;\n\tprivate lastExecutionConfig: Partial<ExecutionConfig> | null = null;\n\n\tconstructor(\n\t\tsession: ISession,\n\t\tserviceProviders: ServiceProviders,\n\t\tinProcessSession?: InProcessSession\n\t) {\n\t\tthis.session = session;\n\t\tthis.inProcessSession = inProcessSession;\n\t\tthis.serviceProviders = serviceProviders;\n\t\tthis.tokenRegistry = new ProvenanceTokenRegistry();\n\t}\n\n\t/**\n\t * Executes code on the server with real-time progress updates via SSE.\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonProgress?: (message: string, fraction: number) => void\n\t): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/execute/stream`;\n\t\tconst body = JSON.stringify({ code, config });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst fetchImpl = typeof fetch !== 'undefined' ? fetch : require('undici').fetch;\n\n\t\t\tfetchImpl(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t})\n\t\t\t\t.then(async (response: Response) => {\n\t\t\t\t\tif (!response.ok) {\n\t\t\t\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst reader = response.body?.getReader();\n\t\t\t\t\tif (!reader) {\n\t\t\t\t\t\tthrow new Error('Response body is not readable');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst decoder = new TextDecoder();\n\t\t\t\t\tlet buffer = '';\n\t\t\t\t\tlet result: ExecutionResult | null = null;\n\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst { done, value } = await reader.read();\n\n\t\t\t\t\t\tif (done) break;\n\n\t\t\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\t\t\tconst lines = buffer.split('\\n');\n\t\t\t\t\t\tbuffer = lines.pop() || '';\n\n\t\t\t\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\t\t\t\tconst line = lines[i];\n\n\t\t\t\t\t\t\tif (line && line.startsWith('event:')) {\n\t\t\t\t\t\t\t\tconst event = line.substring(6).trim();\n\n\t\t\t\t\t\t\t\tfor (let j = i + 1; j < lines.length; j++) {\n\t\t\t\t\t\t\t\t\tconst dataLine = lines[j];\n\t\t\t\t\t\t\t\t\tif (dataLine && dataLine.startsWith('data:')) {\n\t\t\t\t\t\t\t\t\t\tconst dataStr = dataLine.substring(5).trim();\n\t\t\t\t\t\t\t\t\t\tif (dataStr) {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tconst data = JSON.parse(dataStr);\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (event === 'progress' && onProgress) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tonProgress(data.message, data.fraction);\n\t\t\t\t\t\t\t\t\t\t\t\t} else if (event === 'result') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult = data as ExecutionResult;\n\t\t\t\t\t\t\t\t\t\t\t\t} else if (event === 'error') {\n\t\t\t\t\t\t\t\t\t\t\t\t\treject(new Error(data.message));\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\t\tlog.error('Failed to parse SSE data', { dataStr, error: e });\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(new Error('No result received from server'));\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t}\n\n\t/**\n\t * Executes code on the server in a sandboxed environment.\n\t */\n\tasync execute(code: string, config?: Partial<ExecutionConfig>): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tconst hints = this.tokenRegistry.getRecentTokens(1000);\n\n\t\tconst detectedClientServices = {\n\t\t\thasLLM: !!this.serviceProviders.getLLM(),\n\t\t\thasApproval: !!this.serviceProviders.getApproval(),\n\t\t\thasEmbedding: !!this.serviceProviders.getEmbedding(),\n\t\t\thasTools: this.serviceProviders.hasTools(),\n\t\t};\n\n\t\tconst executionConfig = {\n\t\t\t...config,\n\t\t\tclientServices: {\n\t\t\t\t...detectedClientServices,\n\t\t\t\t...(config?.clientServices || {}),\n\t\t\t},\n\t\t\tprovenanceHints: hints.length > 0 ? hints : undefined,\n\t\t};\n\n\t\tthis.lastExecutionConfig = executionConfig;\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.execute(code, executionConfig)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/execute`;\n\t\t\tconst body = JSON.stringify({ code, config: executionConfig });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tthis.session.updateToken(response);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Execution failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Handles batch callbacks by executing them in parallel and resuming.\n\t */\n\tprivate async handleBatchCallbacksAndResume(\n\t\tpausedResult: ExecutionResult\n\t): Promise<ExecutionResult> {\n\t\tif (!pausedResult.needsCallbacks || pausedResult.needsCallbacks.length === 0) {\n\t\t\tthrow new Error('No batch callback requests in paused execution');\n\t\t}\n\n\t\tconst missingServiceIds = new Set(\n\t\t\tpausedResult.needsCallbacks\n\t\t\t\t.filter((cb) => !this.serviceProviders.hasServiceForCallback(cb.type))\n\t\t\t\t.map((cb) => cb.id)\n\t\t);\n\n\t\tif (missingServiceIds.size > 0) {\n\t\t\tconst missingServices = pausedResult.needsCallbacks.filter((cb) =>\n\t\t\t\tmissingServiceIds.has(cb.id)\n\t\t\t);\n\t\t\tconst explicitlyRequestedMissing = missingServices.filter((cb) =>\n\t\t\t\tthis.wasServiceExplicitlyRequested(cb.type)\n\t\t\t);\n\t\t\tconst unexpectedMissing = missingServices.filter(\n\t\t\t\t(cb) => !this.wasServiceExplicitlyRequested(cb.type)\n\t\t\t);\n\n\t\t\tif (explicitlyRequestedMissing.length > 0) {\n\t\t\t\treturn pausedResult;\n\t\t\t}\n\n\t\t\tconst errorMessage = `Missing service providers for callback types: ${unexpectedMissing.map((cb) => cb.type).join(', ')}`;\n\t\t\tlog.error(`Auto-handling batch paused execution without service providers: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tmissingServices: unexpectedMissing.map((cb) => ({\n\t\t\t\t\ttype: cb.type,\n\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\tid: cb.id,\n\t\t\t\t})),\n\t\t\t});\n\n\t\t\tconst existingCallbacks = pausedResult.needsCallbacks.filter(\n\t\t\t\t(cb) => !missingServiceIds.has(cb.id)\n\t\t\t);\n\n\t\t\tif (existingCallbacks.length > 0) {\n\t\t\t\ttry {\n\t\t\t\t\tconst existingResults = await Promise.all(\n\t\t\t\t\t\texistingCallbacks.map(async (cb) => {\n\t\t\t\t\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(cb.type, {\n\t\t\t\t\t\t\t\t...cb.payload,\n\t\t\t\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn { id: cb.id, result: callbackResult };\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tconst allResults = pausedResult.needsCallbacks.map((cb) => {\n\t\t\t\t\t\tif (missingServiceIds.has(cb.id)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: cb.id,\n\t\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\t\t\t\tmessage: `${cb.type} service not provided by client`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn existingResults.find((r) => r.id === cb.id)!;\n\t\t\t\t\t});\n\n\t\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allResults);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tlog.error(`Error handling existing services in batch: ${errorMessage}`, {\n\t\t\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\t\t});\n\t\t\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\t\t\tid: cb.id,\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\t\tmessage: missingServiceIds.has(cb.id)\n\t\t\t\t\t\t\t\t? `${cb.type} service not provided by client`\n\t\t\t\t\t\t\t\t: errorMessage,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\t\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\t\tid: cb.id,\n\t\t\t\t\tresult: {\n\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\tmessage: `${cb.type} service not provided by client`,\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst batchResults = await Promise.all(\n\t\t\t\tpausedResult.needsCallbacks.map(async (cb) => {\n\t\t\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(cb.type, {\n\t\t\t\t\t\t...cb.payload,\n\t\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\t});\n\t\t\t\t\treturn { id: cb.id, result: callbackResult };\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, batchResults);\n\t\t} catch (error) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tlog.error(`Error handling batch callbacks: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackCount: pausedResult.needsCallbacks.length,\n\t\t\t});\n\n\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\tid: cb.id,\n\t\t\t\tresult: {\n\t\t\t\t\t__error: true,\n\t\t\t\t\tmessage: errorMessage,\n\t\t\t\t},\n\t\t\t}));\n\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t}\n\t}\n\n\t/**\n\t * Handles a paused execution by processing the callback and resuming.\n\t */\n\tprivate async handlePauseAndResume(pausedResult: ExecutionResult): Promise<ExecutionResult> {\n\t\tif (!pausedResult.needsCallback) {\n\t\t\tthrow new Error('No callback request in paused execution');\n\t\t}\n\n\t\tif (!this.serviceProviders.hasServiceForCallback(pausedResult.needsCallback.type)) {\n\t\t\tconst wasExplicitlyRequested = this.wasServiceExplicitlyRequested(\n\t\t\t\tpausedResult.needsCallback.type\n\t\t\t);\n\n\t\t\tif (wasExplicitlyRequested) {\n\t\t\t\treturn pausedResult;\n\t\t\t}\n\n\t\t\tconst errorMessage = `${pausedResult.needsCallback.type} service not provided by client`;\n\t\t\tlog.error(`Auto-handling paused execution without service provider: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackType: pausedResult.needsCallback.type,\n\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t});\n\n\t\t\treturn await this.resume(pausedResult.executionId, {\n\t\t\t\t__error: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(\n\t\t\t\tpausedResult.needsCallback.type,\n\t\t\t\t{\n\t\t\t\t\t...pausedResult.needsCallback.payload,\n\t\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn await this.resume(pausedResult.executionId, callbackResult);\n\t\t} catch (error) {\n\t\t\tif (error instanceof ClientCallbackError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tlog.error(`Error handling callback: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackType: pausedResult.needsCallback.type,\n\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t});\n\t\t\treturn await this.resume(pausedResult.executionId, {\n\t\t\t\t__error: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Check if a service was explicitly requested in clientServices config\n\t */\n\tprivate wasServiceExplicitlyRequested(callbackType: CallbackType): boolean {\n\t\tif (!this.lastExecutionConfig?.clientServices) {\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasLLM;\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasApproval;\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasEmbedding;\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasTools;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Resumes a paused execution with a callback result.\n\t */\n\tasync resume(executionId: string, callbackResult: unknown): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.resume(executionId, callbackResult)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/resume/${executionId}`;\n\t\t\tconst body = JSON.stringify({ result: callbackResult });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tthis.session.updateToken(response);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Resume failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Resumes a paused execution with batch callback results.\n\t */\n\tprivate async resumeWithBatchResults(\n\t\texecutionId: string,\n\t\tbatchResults: Array<{ id: string; result: unknown }>\n\t): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.resumeWithBatchResults(\n\t\t\t\texecutionId,\n\t\t\t\tbatchResults\n\t\t\t)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/resume/${executionId}`;\n\t\t\tconst body = JSON.stringify({ results: batchResults });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tthis.session.updateToken(response);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Batch resume failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","import { CallbackType, ToolOperation } from '@mondaydotcomorg/atp-protocol';\nimport type {\n\tClientLLMHandler,\n\tClientApprovalHandler,\n\tClientEmbeddingHandler,\n\tClientServiceProviders,\n\tClientTool,\n\tClientToolDefinition,\n\tClientToolHandler,\n} from '@mondaydotcomorg/atp-protocol';\n\nconst LLMOperation = {\n\tCALL: 'call',\n\tEXTRACT: 'extract',\n\tCLASSIFY: 'classify',\n} as const;\n\nconst EmbeddingOperation = {\n\tEMBED: 'embed',\n\tSEARCH: 'search',\n} as const;\n\nexport class ServiceProviders {\n\tprivate providers: ClientServiceProviders = {};\n\tprivate toolHandlers: Map<string, ClientToolHandler> = new Map();\n\n\tconstructor(providers?: ClientServiceProviders) {\n\t\tthis.providers = providers || {};\n\n\t\tif (providers?.tools) {\n\t\t\tfor (const tool of providers.tools) {\n\t\t\t\tthis.toolHandlers.set(tool.name, tool.handler);\n\t\t\t}\n\t\t}\n\t}\n\n\tprovideLLM(handler: ClientLLMHandler): void {\n\t\tthis.providers.llm = handler;\n\t}\n\n\tprovideApproval(handler: ClientApprovalHandler): void {\n\t\tthis.providers.approval = handler;\n\t}\n\n\tprovideEmbedding(handler: ClientEmbeddingHandler): void {\n\t\tthis.providers.embedding = handler;\n\t}\n\n\tprovideTools(tools: ClientTool[]): void {\n\t\tthis.providers.tools = tools;\n\t\tfor (const tool of tools) {\n\t\t\tthis.toolHandlers.set(tool.name, tool.handler);\n\t\t}\n\t}\n\n\tgetLLM(): ClientLLMHandler | undefined {\n\t\treturn this.providers.llm;\n\t}\n\n\tgetApproval(): ClientApprovalHandler | undefined {\n\t\treturn this.providers.approval;\n\t}\n\n\tgetEmbedding(): ClientEmbeddingHandler | undefined {\n\t\treturn this.providers.embedding;\n\t}\n\n\tgetTools(): ClientTool[] | undefined {\n\t\treturn this.providers.tools;\n\t}\n\n\t/**\n\t * Get tool definitions (without handlers) for sending to server\n\t */\n\tgetToolDefinitions(): ClientToolDefinition[] {\n\t\tif (!this.providers.tools) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn this.providers.tools.map((tool) => {\n\t\t\tconst { handler, ...definition } = tool;\n\t\t\treturn definition;\n\t\t});\n\t}\n\n\t/**\n\t * Check if client has tools\n\t */\n\thasTools(): boolean {\n\t\treturn !!(this.providers.tools && this.providers.tools.length > 0);\n\t}\n\n\t/**\n\t * Check if client has any services or tools\n\t */\n\thasAnyServices(): boolean {\n\t\treturn !!(\n\t\t\tthis.providers.llm ||\n\t\t\tthis.providers.approval ||\n\t\t\tthis.providers.embedding ||\n\t\t\tthis.hasTools()\n\t\t);\n\t}\n\n\t/**\n\t * Check if client has a service for a specific callback type\n\t */\n\thasServiceForCallback(callbackType: CallbackType): boolean {\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\treturn !!this.providers.llm;\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\treturn !!this.providers.approval;\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\treturn !!this.providers.embedding;\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\treturn this.hasTools();\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync handleCallback(callbackType: CallbackType, payload: any): Promise<any> {\n\t\tif (payload.operation === 'batch_parallel' && payload.calls) {\n\t\t\treturn await Promise.all(\n\t\t\t\tpayload.calls.map(async (call: any) => {\n\t\t\t\t\treturn await this.handleCallback(call.type, {\n\t\t\t\t\t\t...call.payload,\n\t\t\t\t\t\toperation: call.operation,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\tif (!this.providers.llm) {\n\t\t\t\t\tthrow new Error('LLM service not provided by client');\n\t\t\t\t}\n\t\t\t\tif (payload.operation === LLMOperation.CALL) {\n\t\t\t\t\treturn await this.providers.llm.call(payload.prompt, payload.options);\n\t\t\t\t} else if (payload.operation === LLMOperation.EXTRACT && this.providers.llm.extract) {\n\t\t\t\t\treturn await this.providers.llm.extract(payload.prompt, payload.schema, payload.options);\n\t\t\t\t} else if (payload.operation === LLMOperation.CLASSIFY && this.providers.llm.classify) {\n\t\t\t\t\treturn await this.providers.llm.classify(\n\t\t\t\t\t\tpayload.text,\n\t\t\t\t\t\tpayload.categories,\n\t\t\t\t\t\tpayload.options\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported LLM operation: ${payload.operation}`);\n\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\tif (!this.providers.approval) {\n\t\t\t\t\tthrow new Error('Approval service not provided by client');\n\t\t\t\t}\n\t\t\t\tconst contextWithExecutionId = payload.context\n\t\t\t\t\t? { ...payload.context, executionId: payload.executionId }\n\t\t\t\t\t: { executionId: payload.executionId };\n\t\t\t\treturn await this.providers.approval.request(payload.message, contextWithExecutionId);\n\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\tif (!this.providers.embedding) {\n\t\t\t\t\tthrow new Error('Embedding service not provided by client');\n\t\t\t\t}\n\t\t\t\tif (payload.operation === EmbeddingOperation.EMBED) {\n\t\t\t\t\treturn await this.providers.embedding.embed(payload.text);\n\t\t\t\t} else if (payload.operation === EmbeddingOperation.SEARCH) {\n\t\t\t\t\tconst queryEmbedding = await this.providers.embedding.embed(payload.query);\n\t\t\t\t\treturn queryEmbedding;\n\t\t\t\t} else if (payload.operation === 'similarity' && this.providers.embedding.similarity) {\n\t\t\t\t\treturn await this.providers.embedding.similarity(payload.text1, payload.text2);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported embedding operation: ${payload.operation}`);\n\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\tif (payload.operation === ToolOperation.CALL) {\n\t\t\t\t\tconst toolName = payload.toolName;\n\t\t\t\t\tconst handler = this.toolHandlers.get(toolName);\n\n\t\t\t\t\tif (!handler) {\n\t\t\t\t\t\tthrow new Error(`Tool '${toolName}' not found in client tools`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = await handler(payload.input);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported tool operation: ${payload.operation}`);\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown callback type: ${callbackType}`);\n\t\t}\n\t}\n}\n","export const ToolNames = {\n\tSEARCH_API: 'search_api',\n\tFETCH_ALL_APIS: 'fetch_all_apis',\n\tEXECUTE_CODE: 'execute_code',\n\tEXPLORE_API: 'explore_api',\n} as const;\n\nexport type ToolName = (typeof ToolNames)[keyof typeof ToolNames];\n\n/**\n * Tool definition following MCP (Model Context Protocol) convention\n * with added execution function\n */\nexport interface Tool<TInput = any> {\n\tname: string;\n\tdescription?: string;\n\tinputSchema: {\n\t\ttype: string;\n\t\tproperties?: Record<string, unknown>;\n\t\trequired?: string[];\n\t};\n\tzodSchema?: any;\n\tfunc: (input: TInput) => Promise<string>;\n}\n","import { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { AgentToolProtocolClient } from '../client.js';\nimport { ToolNames, type Tool } from './types.js';\n\nconst searchApiInputSchema = z.object({\n\tquery: z.string().describe('Search query string'),\n});\n\ntype SearchApiInput = z.infer<typeof searchApiInputSchema>;\n\nexport function createSearchApiTool(client: AgentToolProtocolClient): Tool<SearchApiInput> {\n\treturn {\n\t\tname: ToolNames.SEARCH_API,\n\t\tdescription:\n\t\t\t'Search for APIs by keyword. Provide search term as string like \"add\", \"math\", \"user\", etc.',\n\t\tinputSchema: zodToJsonSchema(searchApiInputSchema) as any,\n\t\tzodSchema: searchApiInputSchema,\n\t\tfunc: async (input: SearchApiInput) => {\n\t\t\ttry {\n\t\t\t\tconst results = await client.searchAPI(input.query);\n\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tresults: results.map((r) => ({\n\t\t\t\t\t\t\tapiGroup: r.apiGroup,\n\t\t\t\t\t\t\tfunctionName: r.functionName,\n\t\t\t\t\t\t\tdescription: r.description,\n\t\t\t\t\t\t\tsignature: r.signature,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcount: results.length,\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2\n\t\t\t\t);\n\t\t\t} catch (error: any) {\n\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: error.message,\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n}\n","import { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { AgentToolProtocolClient } from '../client.js';\nimport { ToolNames, type Tool } from './types.js';\n\nconst fetchAllApisInputSchema = z.object({\n\tapiGroups: z.array(z.string()).optional().describe('Optional: Specific API groups to include'),\n});\n\ntype FetchAllApisInput = z.infer<typeof fetchAllApisInputSchema>;\n\nexport function createFetchAllApisTool(client: AgentToolProtocolClient): Tool<FetchAllApisInput> {\n\treturn {\n\t\tname: ToolNames.FETCH_ALL_APIS,\n\t\tdescription:\n\t\t\t'Get TypeScript definitions of all available APIs. Returns code showing api.add, api.getTodo, etc.',\n\t\tinputSchema: zodToJsonSchema(fetchAllApisInputSchema) as any,\n\t\tzodSchema: fetchAllApisInputSchema,\n\t\tfunc: async (_input: FetchAllApisInput) => {\n\t\t\ttry {\n\t\t\t\tconst typescript = client.getTypeDefinitions();\n\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\ttypescript,\n\t\t\t\t\t\tmessage: 'Use this TypeScript to understand available api.* functions',\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2\n\t\t\t\t);\n\t\t\t} catch (error: any) {\n\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: error.message,\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n}\n","import { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport { ExecutionStatus } from '@mondaydotcomorg/atp-protocol';\nimport type { AgentToolProtocolClient } from '../client.js';\nimport { ToolNames, type Tool } from './types.js';\n\nconst executeCodeInputSchema = z.object({\n\tcode: z.string().describe('The JavaScript/TypeScript code to execute'),\n\ttimeout: z.number().optional().describe('Execution timeout in milliseconds (default: 30000)'),\n\tmaxMemory: z.number().optional().describe('Maximum memory in bytes (default: 128MB)'),\n});\n\ntype ExecuteCodeInput = z.infer<typeof executeCodeInputSchema>;\n\nexport function createExecuteCodeTool(client: AgentToolProtocolClient): Tool<ExecuteCodeInput> {\n\treturn {\n\t\tname: ToolNames.EXECUTE_CODE,\n\t\tdescription:\n\t\t\t\"Execute JavaScript/TypeScript code to call APIs. IMPORTANT: Code MUST use 'return' statement to see results. Examples: 'return api.groupName.functionName({})' or 'const result = api.group.func({}); return result'. Use bracket notation for dynamic names: api['groupName']['functionName']({}).\",\n\t\tinputSchema: zodToJsonSchema(executeCodeInputSchema) as any,\n\t\tzodSchema: executeCodeInputSchema,\n\t\tfunc: async (input: ExecuteCodeInput) => {\n\t\t\ttry {\n\t\t\t\tconst result = await client.execute(input.code, {\n\t\t\t\t\ttimeout: input.timeout,\n\t\t\t\t\tmaxMemory: input.maxMemory,\n\t\t\t\t});\n\n\t\t\t\tif (result.status === ExecutionStatus.COMPLETED) {\n\t\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\tresult: result.result,\n\t\t\t\t\t\t\tstats: {\n\t\t\t\t\t\t\t\tduration: result.stats.duration,\n\t\t\t\t\t\t\t\tmemoryUsed: result.stats.memoryUsed,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2\n\t\t\t\t\t);\n\t\t\t\t} else if (result.status === ExecutionStatus.FAILED) {\n\t\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: result.error?.message || 'Execution failed',\n\t\t\t\t\t\t\tstack: result.error?.stack,\n\t\t\t\t\t\t\tmessage: 'Code execution failed. Check syntax and fix errors.',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: 'Execution timed out',\n\t\t\t\t\t\t\tmessage: 'Code took too long. Simplify or optimize.',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error: any) {\n\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: error.message,\n\t\t\t\t\t\tmessage: 'Failed to execute code',\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n}\n","import { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { AgentToolProtocolClient } from '../client.js';\nimport { ToolNames, type Tool } from './types.js';\n\nconst exploreApiInputSchema = z.object({\n\tpath: z\n\t\t.string()\n\t\t.describe('Path to explore (e.g., \"/\", \"/openapi/github\", \"/mcp/filesystem/read_file\")'),\n});\n\ntype ExploreApiInput = z.infer<typeof exploreApiInputSchema>;\n\nexport function createExploreApiTool(client: AgentToolProtocolClient): Tool<ExploreApiInput> {\n\treturn {\n\t\tname: ToolNames.EXPLORE_API,\n\t\tdescription:\n\t\t\t'Explore APIs using filesystem-like navigation. Navigate through directories to discover available functions. Provide path as string like \"/\", \"/openapi\", \"/openapi/github\", or \"/openapi/github/repos/createRepo\" to see functions.',\n\t\tinputSchema: zodToJsonSchema(exploreApiInputSchema) as any,\n\t\tzodSchema: exploreApiInputSchema,\n\t\tfunc: async (input: ExploreApiInput) => {\n\t\t\ttry {\n\t\t\t\tconst result = await client.exploreAPI(input.path);\n\n\t\t\t\tif (result.type === 'directory') {\n\t\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\ttype: 'directory',\n\t\t\t\t\t\t\tpath: result.path,\n\t\t\t\t\t\t\titems: result.items,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\ttype: 'function',\n\t\t\t\t\t\t\tname: result.name,\n\t\t\t\t\t\t\tdescription: result.description,\n\t\t\t\t\t\t\tdefinition: result.definition,\n\t\t\t\t\t\t\tgroup: result.group,\n\t\t\t\t\t\t\tpath: result.path,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (error: any) {\n\t\t\t\treturn JSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: error.message,\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n}\n","import type {\n\tExecutionResult,\n\tExecutionConfig,\n\tSearchOptions,\n\tSearchResult,\n\tClientTool,\n\tClientToolDefinition,\n\tExploreResult,\n} from '@mondaydotcomorg/atp-protocol';\nimport type { RuntimeAPIName } from '@mondaydotcomorg/atp-runtime';\nimport { CallbackType } from '@mondaydotcomorg/atp-protocol';\nimport {\n\ttype ClientLLMHandler,\n\ttype ClientApprovalHandler,\n\ttype ClientEmbeddingHandler,\n\ttype ClientServiceProviders,\n\ttype ClientHooks,\n\ttype ISession,\n\tClientSession,\n\tInProcessSession,\n\tAPIOperations,\n\tExecutionOperations,\n\tServiceProviders,\n} from './core/index.js';\nimport {\n\ttype Tool,\n\tcreateSearchApiTool,\n\tcreateFetchAllApisTool,\n\tcreateExecuteCodeTool,\n\tcreateExploreApiTool,\n} from './tools/index.js';\n\ninterface InProcessServer {\n\tstart(): Promise<void>;\n\thandleInit(ctx: unknown): Promise<unknown>;\n\tgetDefinitions(ctx?: unknown): Promise<unknown>;\n\tgetRuntimeDefinitions(ctx?: unknown): Promise<string>;\n\tgetInfo(): unknown;\n\thandleSearch(ctx: unknown): Promise<unknown>;\n\thandleExplore(ctx: unknown): Promise<unknown>;\n\thandleExecute(ctx: unknown): Promise<unknown>;\n\thandleResume(ctx: unknown, executionId: string): Promise<unknown>;\n}\n\n/**\n * Options for creating an AgentToolProtocolClient\n */\nexport interface AgentToolProtocolClientOptions {\n\t/** Base URL of the Agent Tool Protocol server (HTTP mode) */\n\tbaseUrl?: string;\n\t/** Server instance for in-process mode (no HTTP, no port binding) */\n\tserver?: InProcessServer;\n\t/** Optional headers for authentication (e.g., { Authorization: 'Bearer token' }) */\n\theaders?: Record<string, string>;\n\t/** Optional client-provided services (LLM, approval, embedding) */\n\tserviceProviders?: ClientServiceProviders;\n\t/** Optional hooks for intercepting and modifying client behavior */\n\thooks?: ClientHooks;\n}\n\n/**\n * AgentToolProtocolClient provides a client interface for connecting to\n * Agent Tool Protocol servers and executing code.\n */\nexport class AgentToolProtocolClient {\n\tprivate session: ISession;\n\tprivate inProcessSession?: InProcessSession;\n\tprivate apiOps: APIOperations;\n\tprivate execOps: ExecutionOperations;\n\tprivate serviceProviders: ServiceProviders;\n\n\t/**\n\t * Creates a new client instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * // HTTP mode\n\t * const client = new AgentToolProtocolClient({\n\t * baseUrl: 'http://localhost:3333',\n\t * headers: { Authorization: 'Bearer token' },\n\t * hooks: {\n\t * preRequest: async (context) => {\n\t * const token = await refreshToken();\n\t * return { headers: { ...context.currentHeaders, Authorization: `Bearer ${token}` } };\n\t * }\n\t * }\n\t * });\n\t *\n\t * // In-process mode (no port binding)\n\t * const server = createServer();\n\t * server.use(myApiGroup);\n\t * const client = new AgentToolProtocolClient({ server });\n\t * ```\n\t */\n\tconstructor(options: AgentToolProtocolClientOptions) {\n\t\tconst { baseUrl, server, headers, serviceProviders, hooks } = options;\n\n\t\tif (!baseUrl && !server) {\n\t\t\tthrow new Error('Either baseUrl or server must be provided');\n\t\t}\n\n\t\tif (baseUrl && server) {\n\t\t\tthrow new Error('Cannot provide both baseUrl and server');\n\t\t}\n\n\t\tthis.serviceProviders = new ServiceProviders(serviceProviders);\n\n\t\tif (server) {\n\t\t\tthis.inProcessSession = new InProcessSession(server);\n\t\t\tthis.session = this.inProcessSession;\n\t\t\tthis.apiOps = new APIOperations(this.session, this.inProcessSession);\n\t\t\tthis.execOps = new ExecutionOperations(\n\t\t\t\tthis.session,\n\t\t\t\tthis.serviceProviders,\n\t\t\t\tthis.inProcessSession\n\t\t\t);\n\t\t} else {\n\t\t\tthis.session = new ClientSession(baseUrl!, headers, hooks);\n\t\t\tthis.apiOps = new APIOperations(this.session);\n\t\t\tthis.execOps = new ExecutionOperations(this.session, this.serviceProviders);\n\t\t}\n\t}\n\n\t/**\n\t * Initializes the client session with the server.\n\t * Automatically registers any client-provided tools and services with the server.\n\t */\n\tasync init(clientInfo?: { name?: string; version?: string; [key: string]: unknown }): Promise<{\n\t\tclientId: string;\n\t\ttoken: string;\n\t\texpiresAt: number;\n\t\ttokenRotateAt: number;\n\t}> {\n\t\tconst toolDefinitions = this.serviceProviders.getToolDefinitions();\n\t\tconst services = {\n\t\t\thasLLM: !!this.serviceProviders.getLLM(),\n\t\t\thasApproval: !!this.serviceProviders.getApproval(),\n\t\t\thasEmbedding: !!this.serviceProviders.getEmbedding(),\n\t\t\thasTools: this.serviceProviders.hasTools(),\n\t\t};\n\t\treturn await this.session.init(clientInfo, toolDefinitions, services);\n\t}\n\n\t/**\n\t * Gets the unique client ID.\n\t */\n\tgetClientId(): string {\n\t\treturn this.session.getClientId();\n\t}\n\n\t/**\n\t * Provides an LLM implementation for server to use during execution.\n\t */\n\tprovideLLM(handler: ClientLLMHandler): void {\n\t\tthis.serviceProviders.provideLLM(handler);\n\t}\n\n\t/**\n\t * Provides an approval handler for server to request human approval.\n\t */\n\tprovideApproval(handler: ClientApprovalHandler): void {\n\t\tthis.serviceProviders.provideApproval(handler);\n\t}\n\n\t/**\n\t * Provides an embedding model for server to use.\n\t */\n\tprovideEmbedding(handler: ClientEmbeddingHandler): void {\n\t\tthis.serviceProviders.provideEmbedding(handler);\n\t}\n\n\t/**\n\t * Provides custom tools that execute on the client side.\n\t * Note: Must be called before init() or re-initialize after calling this.\n\t */\n\tprovideTools(tools: ClientTool[]): void {\n\t\tthis.serviceProviders.provideTools(tools);\n\t}\n\n\t/**\n\t * Gets all client-provided tools (registered via provideTools).\n\t * Returns the full tool objects including handlers.\n\t */\n\tgetClientTools(): ClientTool[] {\n\t\treturn this.serviceProviders.getTools() || [];\n\t}\n\n\t/**\n\t * Gets client-provided tool definitions (without handlers).\n\t * Useful for sending tool metadata to servers.\n\t */\n\tgetClientToolDefinitions(): ClientToolDefinition[] {\n\t\treturn this.serviceProviders.getToolDefinitions();\n\t}\n\n\t/**\n\t * Gets the ATP tools (execute_code, explore_api, search_api, fetch_all_apis).\n\t * These are ready-to-use tools that can be exposed to MCP or other frameworks.\n\t *\n\t * @example\n\t * ```typescript\n\t * const tools = client.getATPTools();\n\t * for (const tool of tools) {\n\t * mcpServer.tool(tool.name, tool.description, tool.inputSchema, async (args) => {\n\t * const result = await tool.func(args);\n\t * return { content: [{ type: 'text', text: result }] };\n\t * });\n\t * }\n\t * ```\n\t */\n\tgetATPTools(): Tool[] {\n\t\treturn [\n\t\t\tcreateSearchApiTool(this),\n\t\t\tcreateFetchAllApisTool(this),\n\t\t\tcreateExecuteCodeTool(this),\n\t\t\tcreateExploreApiTool(this),\n\t\t];\n\t}\n\n\t/**\n\t * Connects to the server and retrieves API definitions.\n\t */\n\tasync connect(options?: { apiGroups?: string[] }): Promise<{\n\t\tserverVersion: string;\n\t\tcapabilities: unknown;\n\t\tapiGroups: string[];\n\t}> {\n\t\treturn await this.apiOps.connect(options);\n\t}\n\n\t/**\n\t * Gets the TypeScript type definitions for available APIs.\n\t */\n\tgetTypeDefinitions(): string {\n\t\treturn this.apiOps.getTypeDefinitions();\n\t}\n\n\t/**\n\t * Searches for available API functions.\n\t */\n\tasync searchAPI(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n\t\treturn await this.apiOps.searchAPI(query, options);\n\t}\n\n\t/**\n\t * Explores the API filesystem at the given path.\n\t */\n\tasync exploreAPI(path: string): Promise<ExploreResult> {\n\t\treturn await this.apiOps.exploreAPI(path);\n\t}\n\n\t/**\n\t * Executes code on the server with real-time progress updates via SSE.\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonProgress?: (message: string, fraction: number) => void\n\t): Promise<ExecutionResult> {\n\t\treturn await this.execOps.executeStream(code, config, onProgress);\n\t}\n\n\t/**\n\t * Executes code on the server in a sandboxed environment.\n\t */\n\tasync execute(code: string, config?: Partial<ExecutionConfig>): Promise<ExecutionResult> {\n\t\treturn await this.execOps.execute(code, config);\n\t}\n\n\t/**\n\t * Resumes a paused execution with a callback result.\n\t */\n\tasync resume(executionId: string, callbackResult: unknown): Promise<ExecutionResult> {\n\t\treturn await this.execOps.resume(executionId, callbackResult);\n\t}\n\n\t/**\n\t * Handles a callback request from the server during execution.\n\t */\n\tasync handleCallback(callbackType: CallbackType, payload: any): Promise<any> {\n\t\treturn await this.serviceProviders.handleCallback(callbackType, payload);\n\t}\n\n\t/**\n\t * Gets information about the server.\n\t */\n\tasync getServerInfo(): Promise<{\n\t\tversion: string;\n\t\tcapabilities: Record<string, boolean>;\n\t}> {\n\t\treturn await this.apiOps.getServerInfo();\n\t}\n\n\t/**\n\t * Gets ATP runtime API definitions as TypeScript declarations.\n\t * Returns the full TypeScript definitions for atp.llm.*, atp.cache.*, etc.\n\t * These are the APIs available during code execution.\n\t *\n\t * Behavior:\n\t * - No options: Returns APIs based on client capabilities (default filtering)\n\t * - apis: ['llm', 'cache']: Returns only specified APIs (intersection with client capabilities)\n\t * - apis: []: Returns all APIs regardless of client capabilities\n\t *\n\t * @param options - Optional filtering options\n\t * @param options.apis - Specific APIs to include (e.g., ['llm', 'cache', 'approval'])\n\t */\n\tasync getRuntimeDefinitions(options?: { apis?: RuntimeAPIName[] }): Promise<string> {\n\t\treturn await this.apiOps.getRuntimeDefinitions(options);\n\t}\n}\n","import { AgentToolProtocolClient } from './client.js';\nimport { log } from '@mondaydotcomorg/atp-runtime';\n\nexport class CodeGenerator {\n\tprivate client: AgentToolProtocolClient;\n\n\tconstructor(client: AgentToolProtocolClient) {\n\t\tthis.client = client;\n\t}\n\n\tasync generateCode(intent: string, parameters?: unknown): Promise<string> {\n\t\tconst types = this.client.getTypeDefinitions();\n\t\tlog.debug('Generating code for intent', { intent, parameters, typesLength: types.length });\n\t\treturn '// Generated code';\n\t}\n}\n","import type { AgentToolProtocolClient } from './client.js';\nimport {\n\ttype Tool,\n\tcreateSearchApiTool,\n\tcreateFetchAllApisTool,\n\tcreateExecuteCodeTool,\n\tcreateExploreApiTool,\n} from './tools/index.js';\n\n/**\n * Creates MCP-compliant tool definitions with execution handlers\n * These tools work with any LLM/agent framework\n */\nexport function createToolsFromATPClient(client: AgentToolProtocolClient): Tool[] {\n\treturn [\n\t\tcreateSearchApiTool(client),\n\t\tcreateFetchAllApisTool(client),\n\t\tcreateExecuteCodeTool(client),\n\t\tcreateExploreApiTool(client),\n\t];\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mondaydotcomorg/atp-client",
|
|
3
|
-
"version": "0.19.
|
|
3
|
+
"version": "0.19.8",
|
|
4
4
|
"description": "Client SDK for Agent Tool Protocol",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./dist/index.
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
7
8
|
"types": "./dist/index.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": {
|
|
10
11
|
"types": "./dist/index.d.ts",
|
|
11
|
-
"import": "./dist/index.js"
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
12
14
|
},
|
|
13
15
|
"./core": {
|
|
14
16
|
"types": "./dist/core/index.d.ts",
|
|
15
|
-
"import": "./dist/core/index.js"
|
|
17
|
+
"import": "./dist/core/index.js",
|
|
18
|
+
"require": "./dist/core/index.cjs"
|
|
16
19
|
}
|
|
17
20
|
},
|
|
18
21
|
"repository": {
|
|
@@ -25,7 +28,8 @@
|
|
|
25
28
|
"src"
|
|
26
29
|
],
|
|
27
30
|
"scripts": {
|
|
28
|
-
"build": "tsc
|
|
31
|
+
"build": "npx tsc --build tsconfig.json && tsup",
|
|
32
|
+
"build:tsc": "tsc -p tsconfig.json",
|
|
29
33
|
"dev": "tsc -p tsconfig.json --watch",
|
|
30
34
|
"clean": "rm -rf dist *.tsbuildinfo",
|
|
31
35
|
"test": "vitest run",
|
|
@@ -44,8 +48,8 @@
|
|
|
44
48
|
},
|
|
45
49
|
"license": "MIT",
|
|
46
50
|
"dependencies": {
|
|
47
|
-
"@mondaydotcomorg/atp-protocol": "0.19.
|
|
48
|
-
"@mondaydotcomorg/atp-runtime": "0.19.
|
|
51
|
+
"@mondaydotcomorg/atp-protocol": "0.19.8",
|
|
52
|
+
"@mondaydotcomorg/atp-runtime": "0.19.8",
|
|
49
53
|
"undici": "*",
|
|
50
54
|
"zod-to-json-schema": "^3.24.6"
|
|
51
55
|
},
|
|
@@ -53,6 +57,7 @@
|
|
|
53
57
|
"zod": "^3.25.0"
|
|
54
58
|
},
|
|
55
59
|
"devDependencies": {
|
|
60
|
+
"tsup": "^8.5.1",
|
|
56
61
|
"typescript": "^5.3.3",
|
|
57
62
|
"vitest": "^1.2.1",
|
|
58
63
|
"zod": "^3.25.0"
|
package/src/client.ts
CHANGED
|
@@ -15,7 +15,9 @@ import {
|
|
|
15
15
|
type ClientEmbeddingHandler,
|
|
16
16
|
type ClientServiceProviders,
|
|
17
17
|
type ClientHooks,
|
|
18
|
+
type ISession,
|
|
18
19
|
ClientSession,
|
|
20
|
+
InProcessSession,
|
|
19
21
|
APIOperations,
|
|
20
22
|
ExecutionOperations,
|
|
21
23
|
ServiceProviders,
|
|
@@ -28,12 +30,26 @@ import {
|
|
|
28
30
|
createExploreApiTool,
|
|
29
31
|
} from './tools/index.js';
|
|
30
32
|
|
|
33
|
+
interface InProcessServer {
|
|
34
|
+
start(): Promise<void>;
|
|
35
|
+
handleInit(ctx: unknown): Promise<unknown>;
|
|
36
|
+
getDefinitions(ctx?: unknown): Promise<unknown>;
|
|
37
|
+
getRuntimeDefinitions(ctx?: unknown): Promise<string>;
|
|
38
|
+
getInfo(): unknown;
|
|
39
|
+
handleSearch(ctx: unknown): Promise<unknown>;
|
|
40
|
+
handleExplore(ctx: unknown): Promise<unknown>;
|
|
41
|
+
handleExecute(ctx: unknown): Promise<unknown>;
|
|
42
|
+
handleResume(ctx: unknown, executionId: string): Promise<unknown>;
|
|
43
|
+
}
|
|
44
|
+
|
|
31
45
|
/**
|
|
32
46
|
* Options for creating an AgentToolProtocolClient
|
|
33
47
|
*/
|
|
34
48
|
export interface AgentToolProtocolClientOptions {
|
|
35
|
-
/** Base URL of the Agent Tool Protocol server */
|
|
36
|
-
baseUrl
|
|
49
|
+
/** Base URL of the Agent Tool Protocol server (HTTP mode) */
|
|
50
|
+
baseUrl?: string;
|
|
51
|
+
/** Server instance for in-process mode (no HTTP, no port binding) */
|
|
52
|
+
server?: InProcessServer;
|
|
37
53
|
/** Optional headers for authentication (e.g., { Authorization: 'Bearer token' }) */
|
|
38
54
|
headers?: Record<string, string>;
|
|
39
55
|
/** Optional client-provided services (LLM, approval, embedding) */
|
|
@@ -47,7 +63,8 @@ export interface AgentToolProtocolClientOptions {
|
|
|
47
63
|
* Agent Tool Protocol servers and executing code.
|
|
48
64
|
*/
|
|
49
65
|
export class AgentToolProtocolClient {
|
|
50
|
-
private session:
|
|
66
|
+
private session: ISession;
|
|
67
|
+
private inProcessSession?: InProcessSession;
|
|
51
68
|
private apiOps: APIOperations;
|
|
52
69
|
private execOps: ExecutionOperations;
|
|
53
70
|
private serviceProviders: ServiceProviders;
|
|
@@ -57,6 +74,7 @@ export class AgentToolProtocolClient {
|
|
|
57
74
|
*
|
|
58
75
|
* @example
|
|
59
76
|
* ```typescript
|
|
77
|
+
* // HTTP mode
|
|
60
78
|
* const client = new AgentToolProtocolClient({
|
|
61
79
|
* baseUrl: 'http://localhost:3333',
|
|
62
80
|
* headers: { Authorization: 'Bearer token' },
|
|
@@ -67,14 +85,40 @@ export class AgentToolProtocolClient {
|
|
|
67
85
|
* }
|
|
68
86
|
* }
|
|
69
87
|
* });
|
|
88
|
+
*
|
|
89
|
+
* // In-process mode (no port binding)
|
|
90
|
+
* const server = createServer();
|
|
91
|
+
* server.use(myApiGroup);
|
|
92
|
+
* const client = new AgentToolProtocolClient({ server });
|
|
70
93
|
* ```
|
|
71
94
|
*/
|
|
72
95
|
constructor(options: AgentToolProtocolClientOptions) {
|
|
73
|
-
const { baseUrl, headers, serviceProviders, hooks } = options;
|
|
74
|
-
|
|
96
|
+
const { baseUrl, server, headers, serviceProviders, hooks } = options;
|
|
97
|
+
|
|
98
|
+
if (!baseUrl && !server) {
|
|
99
|
+
throw new Error('Either baseUrl or server must be provided');
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (baseUrl && server) {
|
|
103
|
+
throw new Error('Cannot provide both baseUrl and server');
|
|
104
|
+
}
|
|
105
|
+
|
|
75
106
|
this.serviceProviders = new ServiceProviders(serviceProviders);
|
|
76
|
-
|
|
77
|
-
|
|
107
|
+
|
|
108
|
+
if (server) {
|
|
109
|
+
this.inProcessSession = new InProcessSession(server);
|
|
110
|
+
this.session = this.inProcessSession;
|
|
111
|
+
this.apiOps = new APIOperations(this.session, this.inProcessSession);
|
|
112
|
+
this.execOps = new ExecutionOperations(
|
|
113
|
+
this.session,
|
|
114
|
+
this.serviceProviders,
|
|
115
|
+
this.inProcessSession
|
|
116
|
+
);
|
|
117
|
+
} else {
|
|
118
|
+
this.session = new ClientSession(baseUrl!, headers, hooks);
|
|
119
|
+
this.apiOps = new APIOperations(this.session);
|
|
120
|
+
this.execOps = new ExecutionOperations(this.session, this.serviceProviders);
|
|
121
|
+
}
|
|
78
122
|
}
|
|
79
123
|
|
|
80
124
|
/**
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { SearchOptions, SearchResult, ExploreResult } from '@mondaydotcomorg/atp-protocol';
|
|
2
2
|
import type { RuntimeAPIName } from '@mondaydotcomorg/atp-runtime';
|
|
3
|
-
import type {
|
|
3
|
+
import type { ISession } from './session.js';
|
|
4
|
+
import type { InProcessSession } from './in-process-session.js';
|
|
4
5
|
|
|
5
6
|
export class APIOperations {
|
|
6
|
-
private session:
|
|
7
|
+
private session: ISession;
|
|
8
|
+
private inProcessSession?: InProcessSession;
|
|
7
9
|
private apiDefinitions?: string;
|
|
8
10
|
|
|
9
|
-
constructor(session:
|
|
11
|
+
constructor(session: ISession, inProcessSession?: InProcessSession) {
|
|
10
12
|
this.session = session;
|
|
13
|
+
this.inProcessSession = inProcessSession;
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
/**
|
|
@@ -20,6 +23,16 @@ export class APIOperations {
|
|
|
20
23
|
}> {
|
|
21
24
|
await this.session.ensureInitialized();
|
|
22
25
|
|
|
26
|
+
if (this.inProcessSession) {
|
|
27
|
+
const data = await this.inProcessSession.getDefinitions(options);
|
|
28
|
+
this.apiDefinitions = data.typescript;
|
|
29
|
+
return {
|
|
30
|
+
serverVersion: data.version,
|
|
31
|
+
capabilities: {},
|
|
32
|
+
apiGroups: data.apiGroups,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
23
36
|
const params = new URLSearchParams();
|
|
24
37
|
if (options?.apiGroups) {
|
|
25
38
|
params.set('apiGroups', options.apiGroups.join(','));
|
|
@@ -64,6 +77,14 @@ export class APIOperations {
|
|
|
64
77
|
async searchAPI(query: string, options?: SearchOptions): Promise<SearchResult[]> {
|
|
65
78
|
await this.session.ensureInitialized();
|
|
66
79
|
|
|
80
|
+
if (this.inProcessSession) {
|
|
81
|
+
const data = await this.inProcessSession.search(
|
|
82
|
+
query,
|
|
83
|
+
options as unknown as Record<string, unknown>
|
|
84
|
+
);
|
|
85
|
+
return data.results as SearchResult[];
|
|
86
|
+
}
|
|
87
|
+
|
|
67
88
|
const url = `${this.session.getBaseUrl()}/api/search`;
|
|
68
89
|
const body = JSON.stringify({ query, ...options });
|
|
69
90
|
const headers = await this.session.prepareHeaders('POST', url, body);
|
|
@@ -88,6 +109,10 @@ export class APIOperations {
|
|
|
88
109
|
async exploreAPI(path: string): Promise<ExploreResult> {
|
|
89
110
|
await this.session.ensureInitialized();
|
|
90
111
|
|
|
112
|
+
if (this.inProcessSession) {
|
|
113
|
+
return (await this.inProcessSession.explore(path)) as ExploreResult;
|
|
114
|
+
}
|
|
115
|
+
|
|
91
116
|
const url = `${this.session.getBaseUrl()}/api/explore`;
|
|
92
117
|
const body = JSON.stringify({ path });
|
|
93
118
|
const headers = await this.session.prepareHeaders('POST', url, body);
|
|
@@ -114,6 +139,10 @@ export class APIOperations {
|
|
|
114
139
|
}> {
|
|
115
140
|
await this.session.ensureInitialized();
|
|
116
141
|
|
|
142
|
+
if (this.inProcessSession) {
|
|
143
|
+
return await this.inProcessSession.getServerInfo();
|
|
144
|
+
}
|
|
145
|
+
|
|
117
146
|
const url = `${this.session.getBaseUrl()}/api/info`;
|
|
118
147
|
const headers = await this.session.prepareHeaders('GET', url);
|
|
119
148
|
|
|
@@ -145,6 +174,12 @@ export class APIOperations {
|
|
|
145
174
|
async getRuntimeDefinitions(options?: { apis?: RuntimeAPIName[] }): Promise<string> {
|
|
146
175
|
await this.session.ensureInitialized();
|
|
147
176
|
|
|
177
|
+
if (this.inProcessSession) {
|
|
178
|
+
return await this.inProcessSession.getRuntimeDefinitions(
|
|
179
|
+
options?.apis ? { apis: options.apis } : undefined
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
148
183
|
const params = new URLSearchParams();
|
|
149
184
|
if (options?.apis && options.apis.length > 0) {
|
|
150
185
|
params.set('apis', options.apis.join(','));
|