@mondaydotcomorg/atp-client 0.23.1 → 0.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/base-session.ts","../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":["BaseSession","clientId","clientToken","tokenExpiresAt","tokenRotateAt","initPromise","refreshPromise","storedInitParams","tokenRefreshConfig","enabled","bufferMs","doRefreshToken","Error","undefined","init","clientInfo","tools","services","getClientId","setTokenRefreshConfig","config","needsTokenRefresh","now","Date","refreshTokenIfNeeded","updateTokenState","credentials","token","expiresAt","shouldSkipRefreshForUrl","url","includes","ClientSession","baseUrl","customHeaders","hooks","constructor","headers","initResult","body","JSON","stringify","prepareHeaders","response","fetch","method","ok","status","statusText","data","json","ensureInitialized","getHeaders","getBaseUrl","preRequest","result","currentHeaders","abort","abortReason","InProcessSession","server","initialized","start","ctx","createContext","path","handleInit","_method","_body","getDefinitions","options","query","apiGroups","join","getRuntimeDefinitions","apis","length","getServerInfo","getInfo","search","handleSearch","explore","handleExplore","execute","code","handleExecute","resume","executionId","callbackResult","handleResume","resumeWithBatchResults","batchResults","results","noopLogger","debug","info","warn","error","logger","responseBody","throw","message","assert","condition","set","APIOperations","session","inProcessSession","apiDefinitions","connect","typescript","serverVersion","version","capabilities","params","URLSearchParams","getTypeDefinitions","searchAPI","exploreAPI","toString","text","ClientCallbackError","name","ProvenanceTokenRegistry","cache","Map","maxSize","ttl","sequenceCounter","ttlHours","add","evictExpired","size","evictLRU","addedAt","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","onEvent","onProgress","Promise","resolve","reject","fetchImpl","require","then","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","stream","lines","pop","i","line","startsWith","eventType","substring","trim","j","dataLine","dataStr","event","type","timestamp","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","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","get","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","paths","union","min","normalizePaths","isArray","createExploreApiTool","pathsToExplore","items","group","AgentToolProtocolClient","apiOps","execOps","tokenRefresh","toolDefinitions","getClientTools","getClientToolDefinitions","getATPTools","CodeGenerator","generateCode","intent","parameters","types","typesLength","createToolsFromATPClient"],"mappings":"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","file":"index.js","sourcesContent":["import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { TokenRefreshConfig } from './types.js';\n\n/**\n * Token credentials returned from init and refresh operations\n */\nexport interface TokenCredentials {\n\tclientId: string;\n\ttoken: string;\n\texpiresAt: number;\n\ttokenRotateAt: number;\n}\n\n/**\n * Session interface for ATP client operations\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<TokenCredentials>;\n\tgetClientId(): string;\n\tensureInitialized(): Promise<void>;\n\tgetHeaders(): Record<string, string>;\n\tgetBaseUrl(): string;\n\tprepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\trefreshTokenIfNeeded(): Promise<void>;\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void;\n}\n\n/**\n * Stored init parameters for re-initialization during token refresh.\n */\nexport interface StoredInitParams {\n\tclientInfo?: { name?: string; version?: string; [key: string]: unknown };\n\ttools?: ClientToolDefinition[];\n\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean };\n}\n\n/**\n * Base session class with shared token management logic.\n * Subclasses implement the transport-specific operations (HTTP vs in-process).\n */\nexport abstract class BaseSession implements ISession {\n\tprotected clientId?: string;\n\tprotected clientToken?: string;\n\tprotected tokenExpiresAt?: number;\n\tprotected tokenRotateAt?: number;\n\tprotected initPromise?: Promise<void>;\n\tprotected refreshPromise?: Promise<void>;\n\tprotected storedInitParams?: StoredInitParams;\n\tprotected tokenRefreshConfig: TokenRefreshConfig = {\n\t\tenabled: true,\n\t\tbufferMs: 1000,\n\t};\n\n\tprotected constructor(tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tif (tokenRefreshConfig) {\n\t\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...tokenRefreshConfig };\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the session - must be implemented by subclass\n\t */\n\tabstract 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<TokenCredentials>;\n\n\t/**\n\t * Get headers for requests - must be implemented by subclass\n\t */\n\tabstract getHeaders(): Record<string, string>;\n\n\t/**\n\t * Get base URL - must be implemented by subclass\n\t */\n\tabstract getBaseUrl(): string;\n\n\t/**\n\t * Ensure client is initialized - must be implemented by subclass\n\t */\n\tabstract ensureInitialized(): Promise<void>;\n\n\t/**\n\t * Prepare headers for a request - must be implemented by subclass\n\t */\n\tabstract prepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\n\t/**\n\t * Perform token refresh by re-initializing the session.\n\t * Resets the init guard and calls init() again with the stored params,\n\t * effectively creating a fresh session without depending on the old\n\t * session still existing in the server's cache.\n\t */\n\tprotected async doRefreshToken(): Promise<void> {\n\t\tif (!this.storedInitParams) {\n\t\t\tthrow new Error('Cannot refresh token: init params not stored. Was init() called?');\n\t\t}\n\n\t\t// Reset the init guard so init() runs a fresh handshake\n\t\tthis.initPromise = undefined;\n\n\t\tawait this.init(\n\t\t\tthis.storedInitParams.clientInfo,\n\t\t\tthis.storedInitParams.tools,\n\t\t\tthis.storedInitParams.services,\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 * Configure automatic token refresh behavior\n\t */\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void {\n\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...config };\n\t}\n\n\t/**\n\t * Check if token needs refresh based on current time and config\n\t */\n\tprotected needsTokenRefresh(): boolean {\n\t\tconst now = Date.now();\n\t\treturn (\n\t\t\t(this.tokenRotateAt !== undefined && now >= this.tokenRotateAt - this.tokenRefreshConfig.bufferMs) ||\n\t\t\t(this.tokenExpiresAt !== undefined && now >= this.tokenExpiresAt)\n\t\t);\n\t}\n\n\t/**\n\t * Refresh token if needed (past rotateAt time or expired).\n\t * This is called automatically before requests when autoRefresh is enabled.\n\t * Uses a shared promise to prevent concurrent refresh requests.\n\t *\n\t * Refresh works by re-initializing the session (calling init() again),\n\t * so it does not depend on the old session still existing in the server's cache.\n\t */\n\tasync refreshTokenIfNeeded(): Promise<void> {\n\t\t// Skip if auto-refresh is disabled\n\t\tif (!this.tokenRefreshConfig.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if not initialized\n\t\tif (!this.clientId || !this.clientToken) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if we need to refresh\n\t\tif (!this.needsTokenRefresh()) {\n\t\t\treturn; // Token is still fresh\n\t\t}\n\n\t\t// Prevent concurrent refresh requests\n\t\tif (this.refreshPromise) {\n\t\t\tawait this.refreshPromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refreshPromise = this.doRefreshToken();\n\n\t\ttry {\n\t\t\tawait this.refreshPromise;\n\t\t} finally {\n\t\t\tthis.refreshPromise = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Update token state after successful init or refresh\n\t */\n\tprotected updateTokenState(credentials: TokenCredentials): void {\n\t\tthis.clientId = credentials.clientId;\n\t\tthis.clientToken = credentials.token;\n\t\tthis.tokenExpiresAt = credentials.expiresAt;\n\t\tthis.tokenRotateAt = credentials.tokenRotateAt;\n\t}\n\n\t/**\n\t * Check if URL should skip token refresh (to avoid infinite recursion).\n\t * Since refresh now calls init(), we only need to guard the init path.\n\t */\n\tprotected shouldSkipRefreshForUrl(url: string): boolean {\n\t\treturn url.includes('/api/init');\n\t}\n}\n","import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { ClientHooks, TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * HTTP-based session for connecting to remote ATP servers.\n */\nexport class ClientSession extends BaseSession {\n\tprivate baseUrl: string;\n\tprivate customHeaders: Record<string, string>;\n\tprivate hooks?: ClientHooks;\n\n\tconstructor(\n\t\tbaseUrl: string,\n\t\theaders?: Record<string, string>,\n\t\thooks?: ClientHooks,\n\t\ttokenRefreshConfig?: Partial<TokenRefreshConfig>\n\t) {\n\t\tsuper(tokenRefreshConfig);\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 */\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<TokenCredentials> {\n\t\t// Store init params so doRefreshToken() can re-init with the same data\n\t\tthis.storedInitParams = { clientInfo, tools, services };\n\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: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\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\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 TokenCredentials;\n\t\t\tthis.updateTokenState(data);\n\t\t\tinitResult = data;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\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 * Prepares headers for a request, refreshing token if needed and 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\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\n\t\tlet headers = this.getHeaders();\n\n\t\tif (this.hooks?.preRequest) {\n\t\t\tconst result = await this.hooks.preRequest({\n\t\t\t\turl,\n\t\t\t\tmethod,\n\t\t\t\tcurrentHeaders: headers,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (result.abort) {\n\t\t\t\tthrow new Error(result.abortReason || 'Request aborted by preRequest hook');\n\t\t\t}\n\n\t\t\tif (result.headers) {\n\t\t\t\theaders = result.headers;\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 { TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * Server interface for in-process communication\n */\nexport interface 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\n/**\n * Request context for in-process server calls\n */\nexport interface 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\n/**\n * In-process session for direct server communication without HTTP.\n * Used when the client and server run in the same process.\n */\nexport class InProcessSession extends BaseSession {\n\tprivate server: InProcessServer;\n\tprivate initialized: boolean = false;\n\n\tconstructor(server: InProcessServer, tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tsuper(tokenRefreshConfig);\n\t\tthis.server = server;\n\t}\n\n\t/**\n\t * Initializes the client session with the in-process server.\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<TokenCredentials> {\n\t\t// Store init params so doRefreshToken() can re-init with the same data\n\t\tthis.storedInitParams = { clientInfo, tools, services };\n\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: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\n\n\t\tthis.initPromise = (async () => {\n\t\t\tawait this.server.start();\n\n\t\t\tconst ctx = await 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 TokenCredentials;\n\t\t\tthis.updateTokenState(result);\n\t\t\tthis.initialized = true;\n\t\t\tinitResult = result;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\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.initialized) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\t/**\n\t * Creates headers for in-process requests (lowercase for consistency with Node.js)\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};\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\t/**\n\t * Prepares headers for a request, refreshing token if needed\n\t */\n\tasync prepareHeaders(\n\t\t_method: string,\n\t\turl: string,\n\t\t_body?: unknown\n\t): Promise<Record<string, string>> {\n\t\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\t\treturn this.getHeaders();\n\t}\n\n\t// ============================================\n\t// In-process specific methods for direct server calls\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 = await 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 = await 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 = await 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, options?: Record<string, unknown>): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/explore',\n\t\t\tbody: { path, ...options },\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 = await 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 = await 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 = await 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\t/**\n\t * Creates a request context for in-process server calls\n\t */\n\tprivate async createContext(options: {\n\t\tmethod: string;\n\t\tpath: string;\n\t\tquery?: Record<string, string>;\n\t\tbody?: unknown;\n\t}): Promise<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: await this.prepareHeaders(options.method, options.path, options.body),\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, ApiGroupRules } from '@mondaydotcomorg/atp-protocol';\nimport type { RuntimeAPIName } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-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, options?: { toolRules?: ApiGroupRules }): Promise<ExploreResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn (await this.inProcessSession.explore(path, options)) as ExploreResult;\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/explore`;\n\t\tconst body = JSON.stringify({ path, ...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(`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, ATPEvent } from '@mondaydotcomorg/atp-protocol';\nimport { ExecutionStatus, CallbackType } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-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 streaming events via SSE.\n\t *\n\t * @param code - TypeScript code to execute\n\t * @param config - Optional execution configuration\n\t * @param onEvent - Callback for all streaming events (thinking, tool_start, tool_end, text, source, etc.)\n\t * @param onProgress - Legacy callback for progress events only (deprecated, use onEvent instead)\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonEvent?: (event: ATPEvent) => void,\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 eventType = 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 (onEvent) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst event: ATPEvent = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (eventType === '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 (eventType === '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 (eventType === '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\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\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\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\nexport const 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\nexport const 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\nexport const 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\nexport const exploreApiInputSchema = z.object({\n\tpaths: z\n\t\t.union([z.string(), z.array(z.string()).min(1)])\n\t\t.describe(\n\t\t\t'Path(s) to explore. Can be a single string like \"/\" or an array like [\"/openapi/github\", \"/mcp/filesystem\"]'\n\t\t),\n});\n\ntype ExploreApiInput = z.infer<typeof exploreApiInputSchema>;\n\ninterface ExploreResult {\n\tsuccess: boolean;\n\tpath: string;\n\ttype?: 'directory' | 'function';\n\titems?: Array<{ name: string; type: string }>;\n\tname?: string;\n\tdescription?: string;\n\tdefinition?: unknown;\n\tgroup?: string;\n\terror?: string;\n}\n\nfunction normalizePaths(paths: string | string[]): string[] {\n\treturn Array.isArray(paths) ? paths : [paths];\n}\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 a string like \"/\" or paths as an array like [\"/openapi\", \"/mcp\"] to explore multiple at once.',\n\t\tinputSchema: zodToJsonSchema(exploreApiInputSchema) as any,\n\t\tzodSchema: exploreApiInputSchema,\n\t\tfunc: async (input: ExploreApiInput) => {\n\t\t\tconst pathsToExplore = normalizePaths(input.paths);\n\n\t\t\tconst results: ExploreResult[] = await Promise.all(\n\t\t\t\tpathsToExplore.map(async (path) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await client.exploreAPI(path);\n\n\t\t\t\t\t\tif (result.type === 'directory') {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\ttype: 'directory' as const,\n\t\t\t\t\t\t\t\tpath: result.path,\n\t\t\t\t\t\t\t\titems: result.items,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\t\ttype: 'function' as const,\n\t\t\t\t\t\t\t\tname: result.name,\n\t\t\t\t\t\t\t\tdescription: result.description,\n\t\t\t\t\t\t\t\tdefinition: result.definition,\n\t\t\t\t\t\t\t\tgroup: result.group,\n\t\t\t\t\t\t\t\tpath: result.path,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\terror: message,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn JSON.stringify(results, null, 2);\n\t\t},\n\t};\n}\n","import type {\n\tExecutionResult,\n\tExecutionConfig,\n\tSearchOptions,\n\tSearchResult,\n\tClientTool,\n\tClientToolDefinition,\n\tExploreResult,\n\tATPEvent,\n\tApiGroupRules,\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\ttype TokenRefreshConfig,\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\t/**\n\t * Configuration for automatic token refresh behavior.\n\t * By default, ATP client automatically refreshes tokens before they expire.\n\t * Set `enabled: false` to disable and manage tokens manually via preRequest hook.\n\t *\n\t * @default { enabled: true, bufferMs: 1000 }\n\t */\n\ttokenRefresh?: Partial<TokenRefreshConfig>;\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 with automatic token refresh (default)\n\t * const client = new AgentToolProtocolClient({\n\t * baseUrl: 'http://localhost:3333',\n\t * headers: { Authorization: 'Bearer token' },\n\t * });\n\t *\n\t * // HTTP mode with custom token refresh behavior\n\t * const client = new AgentToolProtocolClient({\n\t * baseUrl: 'http://localhost:3333',\n\t * tokenRefresh: { enabled: true, bufferMs: 5000 }, // Refresh 5s before rotateAt\n\t * });\n\t *\n\t * // Disable automatic token refresh (use preRequest hook instead)\n\t * const client = new AgentToolProtocolClient({\n\t * baseUrl: 'http://localhost:3333',\n\t * tokenRefresh: { enabled: false },\n\t * hooks: {\n\t * preRequest: async (context) => {\n\t * const token = await myCustomRefresh();\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, tokenRefresh } = 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, tokenRefresh);\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, tokenRefresh);\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 * Configures automatic token refresh behavior.\n\t * Call this to enable/disable auto-refresh or adjust timing.\n\t */\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void {\n\t\tthis.session.setTokenRefreshConfig(config);\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, options?: { toolRules?: ApiGroupRules }): Promise<ExploreResult> {\n\t\treturn await this.apiOps.exploreAPI(path, options);\n\t}\n\n\t/**\n\t * Executes code on the server with real-time streaming events via SSE.\n\t *\n\t * @param code - TypeScript code to execute\n\t * @param config - Optional execution configuration\n\t * @param onEvent - Callback for all streaming events (thinking, tool_start, tool_end, text, source, etc.)\n\t * @param onProgress - Legacy callback for progress events only (deprecated, use onEvent instead)\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.executeStream(\n\t * code,\n\t * {},\n\t * (event) => {\n\t * if (event.type === 'thinking') console.log('Thinking:', event.data.content);\n\t * if (event.type === 'text') console.log('Text:', event.data.text);\n\t * if (event.type === 'tool_start') console.log('Tool started:', event.data.toolName);\n\t * }\n\t * );\n\t * ```\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonEvent?: (event: ATPEvent) => void,\n\t\tonProgress?: (message: string, fraction: number) => void\n\t): Promise<ExecutionResult> {\n\t\treturn await this.execOps.executeStream(code, config, onEvent, 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"]}
1
+ {"version":3,"sources":["../src/core/base-session.ts","../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":["BaseSession","clientId","clientToken","tokenExpiresAt","tokenRotateAt","initPromise","refreshPromise","storedInitParams","tokenRefreshConfig","enabled","bufferMs","doRefreshToken","Error","undefined","init","clientInfo","tools","services","getClientId","setTokenRefreshConfig","config","needsTokenRefresh","now","Date","refreshTokenIfNeeded","updateTokenState","credentials","token","expiresAt","shouldSkipRefreshForUrl","url","includes","ClientSession","baseUrl","customHeaders","hooks","constructor","headers","initResult","body","JSON","stringify","prepareHeaders","response","fetch","method","ok","status","statusText","data","json","ensureInitialized","getHeaders","getBaseUrl","preRequest","result","currentHeaders","abort","abortReason","InProcessSession","server","initialized","start","ctx","createContext","path","handleInit","_method","_body","getDefinitions","options","query","apiGroups","join","getRuntimeDefinitions","apis","length","getServerInfo","getInfo","search","handleSearch","explore","handleExplore","execute","code","handleExecute","resume","executionId","callbackResult","handleResume","resumeWithBatchResults","batchResults","results","noopLogger","debug","info","warn","error","logger","responseBody","throw","message","assert","condition","set","APIOperations","session","inProcessSession","apiDefinitions","connect","typescript","serverVersion","version","capabilities","params","URLSearchParams","getTypeDefinitions","searchAPI","exploreAPI","toString","text","ClientCallbackError","name","ProvenanceTokenRegistry","cache","Map","maxSize","ttl","sequenceCounter","ttlHours","add","evictExpired","size","evictLRU","addedAt","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","onEvent","onProgress","Promise","resolve","reject","fetchImpl","require","then","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","stream","lines","pop","i","line","startsWith","eventType","substring","trim","j","dataLine","dataStr","event","type","timestamp","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","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","get","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","paths","union","min","normalizePaths","isArray","createExploreApiTool","pathsToExplore","AgentToolProtocolClient","apiOps","execOps","tokenRefresh","toolDefinitions","getClientTools","getClientToolDefinitions","getATPTools","CodeGenerator","generateCode","intent","parameters","types","typesLength","createToolsFromATPClient"],"mappings":"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","file":"index.js","sourcesContent":["import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { TokenRefreshConfig } from './types.js';\n\n/**\n * Token credentials returned from init and refresh operations\n */\nexport interface TokenCredentials {\n\tclientId: string;\n\ttoken: string;\n\texpiresAt: number;\n\ttokenRotateAt: number;\n}\n\n/**\n * Session interface for ATP client operations\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<TokenCredentials>;\n\tgetClientId(): string;\n\tensureInitialized(): Promise<void>;\n\tgetHeaders(): Record<string, string>;\n\tgetBaseUrl(): string;\n\tprepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\trefreshTokenIfNeeded(): Promise<void>;\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void;\n}\n\n/**\n * Stored init parameters for re-initialization during token refresh.\n */\nexport interface StoredInitParams {\n\tclientInfo?: { name?: string; version?: string; [key: string]: unknown };\n\ttools?: ClientToolDefinition[];\n\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean };\n}\n\n/**\n * Base session class with shared token management logic.\n * Subclasses implement the transport-specific operations (HTTP vs in-process).\n */\nexport abstract class BaseSession implements ISession {\n\tprotected clientId?: string;\n\tprotected clientToken?: string;\n\tprotected tokenExpiresAt?: number;\n\tprotected tokenRotateAt?: number;\n\tprotected initPromise?: Promise<void>;\n\tprotected refreshPromise?: Promise<void>;\n\tprotected storedInitParams?: StoredInitParams;\n\tprotected tokenRefreshConfig: TokenRefreshConfig = {\n\t\tenabled: true,\n\t\tbufferMs: 1000,\n\t};\n\n\tprotected constructor(tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tif (tokenRefreshConfig) {\n\t\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...tokenRefreshConfig };\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the session - must be implemented by subclass\n\t */\n\tabstract 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<TokenCredentials>;\n\n\t/**\n\t * Get headers for requests - must be implemented by subclass\n\t */\n\tabstract getHeaders(): Record<string, string>;\n\n\t/**\n\t * Get base URL - must be implemented by subclass\n\t */\n\tabstract getBaseUrl(): string;\n\n\t/**\n\t * Ensure client is initialized - must be implemented by subclass\n\t */\n\tabstract ensureInitialized(): Promise<void>;\n\n\t/**\n\t * Prepare headers for a request - must be implemented by subclass\n\t */\n\tabstract prepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\n\t/**\n\t * Perform token refresh by re-initializing the session.\n\t * Resets the init guard and calls init() again with the stored params,\n\t * effectively creating a fresh session without depending on the old\n\t * session still existing in the server's cache.\n\t */\n\tprotected async doRefreshToken(): Promise<void> {\n\t\tif (!this.storedInitParams) {\n\t\t\tthrow new Error('Cannot refresh token: init params not stored. Was init() called?');\n\t\t}\n\n\t\t// Reset the init guard so init() runs a fresh handshake\n\t\tthis.initPromise = undefined;\n\n\t\tawait this.init(\n\t\t\tthis.storedInitParams.clientInfo,\n\t\t\tthis.storedInitParams.tools,\n\t\t\tthis.storedInitParams.services,\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 * Configure automatic token refresh behavior\n\t */\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void {\n\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...config };\n\t}\n\n\t/**\n\t * Check if token needs refresh based on current time and config\n\t */\n\tprotected needsTokenRefresh(): boolean {\n\t\tconst now = Date.now();\n\t\treturn (\n\t\t\t(this.tokenRotateAt !== undefined && now >= this.tokenRotateAt - this.tokenRefreshConfig.bufferMs) ||\n\t\t\t(this.tokenExpiresAt !== undefined && now >= this.tokenExpiresAt)\n\t\t);\n\t}\n\n\t/**\n\t * Refresh token if needed (past rotateAt time or expired).\n\t * This is called automatically before requests when autoRefresh is enabled.\n\t * Uses a shared promise to prevent concurrent refresh requests.\n\t *\n\t * Refresh works by re-initializing the session (calling init() again),\n\t * so it does not depend on the old session still existing in the server's cache.\n\t */\n\tasync refreshTokenIfNeeded(): Promise<void> {\n\t\t// Skip if auto-refresh is disabled\n\t\tif (!this.tokenRefreshConfig.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if not initialized\n\t\tif (!this.clientId || !this.clientToken) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if we need to refresh\n\t\tif (!this.needsTokenRefresh()) {\n\t\t\treturn; // Token is still fresh\n\t\t}\n\n\t\t// Prevent concurrent refresh requests\n\t\tif (this.refreshPromise) {\n\t\t\tawait this.refreshPromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refreshPromise = this.doRefreshToken();\n\n\t\ttry {\n\t\t\tawait this.refreshPromise;\n\t\t} finally {\n\t\t\tthis.refreshPromise = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Update token state after successful init or refresh\n\t */\n\tprotected updateTokenState(credentials: TokenCredentials): void {\n\t\tthis.clientId = credentials.clientId;\n\t\tthis.clientToken = credentials.token;\n\t\tthis.tokenExpiresAt = credentials.expiresAt;\n\t\tthis.tokenRotateAt = credentials.tokenRotateAt;\n\t}\n\n\t/**\n\t * Check if URL should skip token refresh (to avoid infinite recursion).\n\t * Since refresh now calls init(), we only need to guard the init path.\n\t */\n\tprotected shouldSkipRefreshForUrl(url: string): boolean {\n\t\treturn url.includes('/api/init');\n\t}\n}\n","import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { ClientHooks, TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * HTTP-based session for connecting to remote ATP servers.\n */\nexport class ClientSession extends BaseSession {\n\tprivate baseUrl: string;\n\tprivate customHeaders: Record<string, string>;\n\tprivate hooks?: ClientHooks;\n\n\tconstructor(\n\t\tbaseUrl: string,\n\t\theaders?: Record<string, string>,\n\t\thooks?: ClientHooks,\n\t\ttokenRefreshConfig?: Partial<TokenRefreshConfig>\n\t) {\n\t\tsuper(tokenRefreshConfig);\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 */\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<TokenCredentials> {\n\t\t// Store init params so doRefreshToken() can re-init with the same data\n\t\tthis.storedInitParams = { clientInfo, tools, services };\n\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: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\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\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 TokenCredentials;\n\t\t\tthis.updateTokenState(data);\n\t\t\tinitResult = data;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\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 * Prepares headers for a request, refreshing token if needed and 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\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\n\t\tlet headers = this.getHeaders();\n\n\t\tif (this.hooks?.preRequest) {\n\t\t\tconst result = await this.hooks.preRequest({\n\t\t\t\turl,\n\t\t\t\tmethod,\n\t\t\t\tcurrentHeaders: headers,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (result.abort) {\n\t\t\t\tthrow new Error(result.abortReason || 'Request aborted by preRequest hook');\n\t\t\t}\n\n\t\t\tif (result.headers) {\n\t\t\t\theaders = result.headers;\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 { TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * Server interface for in-process communication\n */\nexport interface 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\n/**\n * Request context for in-process server calls\n */\nexport interface 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\n/**\n * In-process session for direct server communication without HTTP.\n * Used when the client and server run in the same process.\n */\nexport class InProcessSession extends BaseSession {\n\tprivate server: InProcessServer;\n\tprivate initialized: boolean = false;\n\n\tconstructor(server: InProcessServer, tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tsuper(tokenRefreshConfig);\n\t\tthis.server = server;\n\t}\n\n\t/**\n\t * Initializes the client session with the in-process server.\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<TokenCredentials> {\n\t\t// Store init params so doRefreshToken() can re-init with the same data\n\t\tthis.storedInitParams = { clientInfo, tools, services };\n\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: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\n\n\t\tthis.initPromise = (async () => {\n\t\t\tawait this.server.start();\n\n\t\t\tconst ctx = await 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 TokenCredentials;\n\t\t\tthis.updateTokenState(result);\n\t\t\tthis.initialized = true;\n\t\t\tinitResult = result;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\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.initialized) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\t/**\n\t * Creates headers for in-process requests (lowercase for consistency with Node.js)\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};\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\t/**\n\t * Prepares headers for a request, refreshing token if needed\n\t */\n\tasync prepareHeaders(\n\t\t_method: string,\n\t\turl: string,\n\t\t_body?: unknown\n\t): Promise<Record<string, string>> {\n\t\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\t\treturn this.getHeaders();\n\t}\n\n\t// ============================================\n\t// In-process specific methods for direct server calls\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 = await 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 = await 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 = await 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, options?: Record<string, unknown>): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/explore',\n\t\t\tbody: { path, ...options },\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 = await 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 = await 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 = await 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\t/**\n\t * Creates a request context for in-process server calls\n\t */\n\tprivate async createContext(options: {\n\t\tmethod: string;\n\t\tpath: string;\n\t\tquery?: Record<string, string>;\n\t\tbody?: unknown;\n\t}): Promise<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: await this.prepareHeaders(options.method, options.path, options.body),\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, ApiGroupRules } from '@mondaydotcomorg/atp-protocol';\nimport type { RuntimeAPIName } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-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, options?: { toolRules?: ApiGroupRules }): Promise<ExploreResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn (await this.inProcessSession.explore(path, options)) as ExploreResult;\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/explore`;\n\t\tconst body = JSON.stringify({ path, ...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(`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, ATPEvent } from '@mondaydotcomorg/atp-protocol';\nimport { ExecutionStatus, CallbackType } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-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 streaming events via SSE.\n\t *\n\t * @param code - TypeScript code to execute\n\t * @param config - Optional execution configuration\n\t * @param onEvent - Callback for all streaming events (thinking, tool_start, tool_end, text, source, etc.)\n\t * @param onProgress - Legacy callback for progress events only (deprecated, use onEvent instead)\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonEvent?: (event: ATPEvent) => void,\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 eventType = 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 (onEvent) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst event: ATPEvent = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (eventType === '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 (eventType === '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 (eventType === '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\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\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\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\nexport const 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\nexport const 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\nexport const 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\nexport const exploreApiInputSchema = z.object({\n\tpaths: z\n\t\t.union([z.string(), z.array(z.string()).min(1)])\n\t\t.describe(\n\t\t\t'Path(s) to explore. Can be a single string like \"/\" or an array like [\"/openapi/github\", \"/mcp/filesystem\"]'\n\t\t),\n});\n\ntype ExploreApiInput = z.infer<typeof exploreApiInputSchema>;\n\nfunction normalizePaths(paths: string | string[]): string[] {\n\treturn Array.isArray(paths) ? paths : [paths];\n}\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 a string like \"/\" or paths as an array like [\"/openapi\", \"/mcp\"] to explore multiple at once.',\n\t\tinputSchema: zodToJsonSchema(exploreApiInputSchema) as any,\n\t\tzodSchema: exploreApiInputSchema,\n\t\tfunc: async (input: ExploreApiInput) => {\n\t\t\tconst pathsToExplore = normalizePaths(input.paths);\n\n\t\t\tconst results = await Promise.all(\n\t\t\t\tpathsToExplore.map(async (path) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await client.exploreAPI(path);\n\t\t\t\t\t\treturn { success: true, ...result };\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\treturn { success: false, path, error: message };\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn JSON.stringify(results, null, 2);\n\t\t},\n\t};\n}\n","import type {\n\tExecutionResult,\n\tExecutionConfig,\n\tSearchOptions,\n\tSearchResult,\n\tClientTool,\n\tClientToolDefinition,\n\tExploreResult,\n\tATPEvent,\n\tApiGroupRules,\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\ttype TokenRefreshConfig,\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\t/**\n\t * Configuration for automatic token refresh behavior.\n\t * By default, ATP client automatically refreshes tokens before they expire.\n\t * Set `enabled: false` to disable and manage tokens manually via preRequest hook.\n\t *\n\t * @default { enabled: true, bufferMs: 1000 }\n\t */\n\ttokenRefresh?: Partial<TokenRefreshConfig>;\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 with automatic token refresh (default)\n\t * const client = new AgentToolProtocolClient({\n\t * baseUrl: 'http://localhost:3333',\n\t * headers: { Authorization: 'Bearer token' },\n\t * });\n\t *\n\t * // HTTP mode with custom token refresh behavior\n\t * const client = new AgentToolProtocolClient({\n\t * baseUrl: 'http://localhost:3333',\n\t * tokenRefresh: { enabled: true, bufferMs: 5000 }, // Refresh 5s before rotateAt\n\t * });\n\t *\n\t * // Disable automatic token refresh (use preRequest hook instead)\n\t * const client = new AgentToolProtocolClient({\n\t * baseUrl: 'http://localhost:3333',\n\t * tokenRefresh: { enabled: false },\n\t * hooks: {\n\t * preRequest: async (context) => {\n\t * const token = await myCustomRefresh();\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, tokenRefresh } = 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, tokenRefresh);\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, tokenRefresh);\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 * Configures automatic token refresh behavior.\n\t * Call this to enable/disable auto-refresh or adjust timing.\n\t */\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void {\n\t\tthis.session.setTokenRefreshConfig(config);\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, options?: { toolRules?: ApiGroupRules }): Promise<ExploreResult> {\n\t\treturn await this.apiOps.exploreAPI(path, options);\n\t}\n\n\t/**\n\t * Executes code on the server with real-time streaming events via SSE.\n\t *\n\t * @param code - TypeScript code to execute\n\t * @param config - Optional execution configuration\n\t * @param onEvent - Callback for all streaming events (thinking, tool_start, tool_end, text, source, etc.)\n\t * @param onProgress - Legacy callback for progress events only (deprecated, use onEvent instead)\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.executeStream(\n\t * code,\n\t * {},\n\t * (event) => {\n\t * if (event.type === 'thinking') console.log('Thinking:', event.data.content);\n\t * if (event.type === 'text') console.log('Text:', event.data.text);\n\t * if (event.type === 'tool_start') console.log('Tool started:', event.data.toolName);\n\t * }\n\t * );\n\t * ```\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonEvent?: (event: ATPEvent) => void,\n\t\tonProgress?: (message: string, fraction: number) => void\n\t): Promise<ExecutionResult> {\n\t\treturn await this.execOps.executeStream(code, config, onEvent, 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"]}