{"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"],"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","callerHeaders","handleExplore","execute","code","rc","requestContext","handleExecute","resume","executionId","callbackResult","handleResume","resumeWithBatchResults","batchResults","results","noopLogger","debug","info","warn","error","sessionHeaders","mergedHeaders","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"],"mappings":"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","file":"index.cjs","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\t// Per-call `headers` pulled out of options so it can merge into ctx.headers\n\t\t// (where the server's toolRulesProvider reads from). Stripped from the body\n\t\t// to avoid duplicating it alongside `path` + `toolRules`.\n\t\tconst { headers: callerHeaders, ...body } = (options ?? {}) as {\n\t\t\theaders?: Record<string, string>;\n\t\t\t[k: string]: unknown;\n\t\t};\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/explore',\n\t\t\tbody: { path, ...body },\n\t\t\theaders: callerHeaders,\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\t// `requestContext.headers` is the documented entry point for per-call\n\t\t// header forwarding (consumed by openapi-loader headerProvider). Also\n\t\t// merge those into ctx.headers so the server-level toolRulesProvider\n\t\t// sees the same values.\n\t\tconst rc = (config?.requestContext ?? {}) as { headers?: Record<string, string> };\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\theaders: rc.headers,\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\theaders?: Record<string, string>;\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\t// Merge per-call headers (if any) on top of session-level headers.\n\t\t// Session auth keys (`x-client-id`, `authorization`) still survive\n\t\t// because `prepareHeaders` produces them first and the caller would\n\t\t// rarely override them; when they do, the caller's choice wins here —\n\t\t// match that with the RequestContext.headers convention.\n\t\tconst sessionHeaders = await this.prepareHeaders(options.method, options.path, options.body);\n\t\tconst mergedHeaders = options.headers\n\t\t\t? { ...sessionHeaders, ...options.headers }\n\t\t\t: sessionHeaders;\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: mergedHeaders,\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"]}