@langchain/langgraph-sdk 1.12.1 → 1.12.3

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.
Files changed (55) hide show
  1. package/dist/client/assistants/index.cjs +10 -9
  2. package/dist/client/assistants/index.cjs.map +1 -1
  3. package/dist/client/assistants/index.d.cts.map +1 -1
  4. package/dist/client/assistants/index.d.ts.map +1 -1
  5. package/dist/client/assistants/index.js +11 -10
  6. package/dist/client/assistants/index.js.map +1 -1
  7. package/dist/client/base.cjs +11 -1
  8. package/dist/client/base.cjs.map +1 -1
  9. package/dist/client/base.d.cts.map +1 -1
  10. package/dist/client/base.d.ts.map +1 -1
  11. package/dist/client/base.js +11 -2
  12. package/dist/client/base.js.map +1 -1
  13. package/dist/client/crons/index.cjs +3 -3
  14. package/dist/client/crons/index.cjs.map +1 -1
  15. package/dist/client/crons/index.js +4 -4
  16. package/dist/client/crons/index.js.map +1 -1
  17. package/dist/client/runs/index.cjs +9 -9
  18. package/dist/client/runs/index.cjs.map +1 -1
  19. package/dist/client/runs/index.d.cts.map +1 -1
  20. package/dist/client/runs/index.d.ts.map +1 -1
  21. package/dist/client/runs/index.js +10 -10
  22. package/dist/client/runs/index.js.map +1 -1
  23. package/dist/client/stream/transport/http.cjs +4 -3
  24. package/dist/client/stream/transport/http.cjs.map +1 -1
  25. package/dist/client/stream/transport/http.d.cts.map +1 -1
  26. package/dist/client/stream/transport/http.d.ts.map +1 -1
  27. package/dist/client/stream/transport/http.js +4 -3
  28. package/dist/client/stream/transport/http.js.map +1 -1
  29. package/dist/client/stream/transport/utils.cjs +2 -2
  30. package/dist/client/stream/transport/utils.cjs.map +1 -1
  31. package/dist/client/stream/transport/utils.js +2 -2
  32. package/dist/client/stream/transport/utils.js.map +1 -1
  33. package/dist/client/stream/transport/websocket.cjs +2 -1
  34. package/dist/client/stream/transport/websocket.cjs.map +1 -1
  35. package/dist/client/stream/transport/websocket.d.cts.map +1 -1
  36. package/dist/client/stream/transport/websocket.d.ts.map +1 -1
  37. package/dist/client/stream/transport/websocket.js +2 -1
  38. package/dist/client/stream/transport/websocket.js.map +1 -1
  39. package/dist/client/threads/index.cjs +11 -11
  40. package/dist/client/threads/index.cjs.map +1 -1
  41. package/dist/client/threads/index.d.cts.map +1 -1
  42. package/dist/client/threads/index.d.ts.map +1 -1
  43. package/dist/client/threads/index.js +12 -12
  44. package/dist/client/threads/index.js.map +1 -1
  45. package/dist/client/ui-internal/index.cjs +1 -1
  46. package/dist/client/ui-internal/index.cjs.map +1 -1
  47. package/dist/client/ui-internal/index.js +2 -2
  48. package/dist/client/ui-internal/index.js.map +1 -1
  49. package/dist/index.d.cts +2 -2
  50. package/dist/index.d.ts +2 -2
  51. package/dist/types.d.cts +10 -1
  52. package/dist/types.d.cts.map +1 -1
  53. package/dist/types.d.ts +10 -1
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","names":["#performFetch","#performFetchWithResponse"],"sources":["../../src/client/base.ts"],"sourcesContent":["import { AsyncCaller, AsyncCallerParams } from \"../utils/async_caller.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\nimport { mergeSignals } from \"../utils/signals.js\";\nimport { BytesLineDecoder, SSEDecoder } from \"../utils/sse.js\";\nimport {\n streamWithRetry,\n idleReconnectStream,\n type IdleReconnectMode,\n StreamRequestParams,\n DEFAULT_IDLE_RECONNECT,\n} from \"../utils/stream.js\";\nimport { DEFAULT_MAX_RECONNECT_ATTEMPTS } from \"../utils/reconnect.js\";\nimport type { StreamProtocol } from \"../types.js\";\n\nexport type HeaderValue = string | undefined | null;\n\nexport function* iterateHeaders(\n headers: HeadersInit | Record<string, HeaderValue>\n): IterableIterator<[string, string | null]> {\n let iter: Iterable<(HeaderValue | HeaderValue | null[])[]>;\n let shouldClear = false;\n\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (headers instanceof Headers) {\n const entries: [string, string][] = [];\n headers.forEach((value, name) => {\n entries.push([name, value]);\n });\n iter = entries;\n } else if (Array.isArray(headers)) {\n iter = headers;\n } else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n\n for (const item of iter) {\n const name = item[0];\n if (typeof name !== \"string\")\n throw new TypeError(\n `Expected header name to be a string, got ${typeof name}`\n );\n const values = Array.isArray(item[1]) ? item[1] : [item[1]];\n let didClear = false;\n\n for (const value of values) {\n if (value === undefined) continue;\n\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\n\nexport function mergeHeaders(\n ...headerObjects: (\n | HeadersInit\n | Record<string, HeaderValue>\n | undefined\n | null\n )[]\n) {\n const outputHeaders = new Headers();\n for (const headers of headerObjects) {\n if (!headers) continue;\n for (const [name, value] of iterateHeaders(headers)) {\n if (value === null) outputHeaders.delete(name);\n else outputHeaders.append(name, value);\n }\n }\n const headerEntries: [string, string][] = [];\n outputHeaders.forEach((value, name) => {\n headerEntries.push([name, value]);\n });\n return Object.fromEntries(headerEntries);\n}\n\n/**\n * Get the API key from the environment.\n * Precedence:\n * 1. explicit argument (if string)\n * 2. LANGGRAPH_API_KEY\n * 3. LANGSMITH_API_KEY\n * 4. LANGCHAIN_API_KEY\n *\n * @param apiKey - API key provided as an argument. If null, skips environment lookup. If undefined, tries environment.\n * @returns The API key if found, otherwise undefined\n */\nexport function getApiKey(apiKey?: string | null): string | undefined {\n if (apiKey === null) {\n return undefined;\n }\n\n if (apiKey) {\n return apiKey;\n }\n\n const prefixes = [\"LANGGRAPH\", \"LANGSMITH\", \"LANGCHAIN\"];\n\n for (const prefix of prefixes) {\n const envKey = getEnvironmentVariable(`${prefix}_API_KEY`);\n if (envKey) {\n return envKey.trim().replace(/^[\"']|[\"']$/g, \"\");\n }\n }\n\n return undefined;\n}\n\nexport type RequestHook = (\n url: URL,\n init: RequestInit\n) => Promise<RequestInit> | RequestInit;\n\n/**\n * Configuration for {@link BaseClient} and the exported LangGraph SDK\n * {@link Client}.\n */\nexport interface ClientConfig {\n /**\n * Base URL of the LangGraph API server.\n *\n * Defaults to `http://localhost:8123`, unless the runtime provides a\n * `langgraph_api:url` global override.\n */\n apiUrl?: string;\n /**\n * API key for authentication.\n * - If a string is provided, that key will be used\n * - If undefined (default), the key will be auto-loaded from environment variables (LANGGRAPH_API_KEY, LANGSMITH_API_KEY, or LANGCHAIN_API_KEY)\n * - If null, no API key will be set (skips auto-loading)\n */\n apiKey?: string | null;\n /**\n * Options forwarded to the internal {@link AsyncCaller}, such as retry,\n * concurrency, or custom `fetch` behavior.\n */\n callerOptions?: AsyncCallerParams;\n /**\n * Default timeout, in milliseconds, applied to client requests.\n *\n * Per-request `timeoutMs` values override this default. Passing `null`\n * at the request level disables the configured timeout for that request.\n */\n timeoutMs?: number;\n /**\n * Headers applied to every request.\n *\n * The configured API key, when present, is added as the `x-api-key`\n * header after these defaults are initialized.\n */\n defaultHeaders?: Record<string, HeaderValue>;\n /**\n * Hook for inspecting or mutating a request before it is sent.\n *\n * Receives the resolved URL and prepared `RequestInit`; return the\n * original init or a replacement object to continue the request.\n */\n onRequest?: RequestHook;\n /**\n * Streaming protocol used by stream-capable endpoints.\n *\n * Defaults to `\"legacy\"` for backwards compatibility.\n */\n streamProtocol?: StreamProtocol;\n}\n\nexport class BaseClient {\n protected asyncCaller: AsyncCaller;\n\n protected timeoutMs: number | undefined;\n\n protected apiUrl: string;\n\n protected defaultHeaders: Record<string, HeaderValue>;\n\n protected onRequest?: RequestHook;\n\n protected streamProtocol: StreamProtocol;\n\n constructor(config?: ClientConfig) {\n const callerOptions = {\n maxRetries: 4,\n maxConcurrency: 4,\n ...config?.callerOptions,\n };\n\n let defaultApiUrl = \"http://localhost:8123\";\n if (\n !config?.apiUrl &&\n typeof globalThis === \"object\" &&\n globalThis != null\n ) {\n const fetchSmb = Symbol.for(\"langgraph_api:fetch\");\n const urlSmb = Symbol.for(\"langgraph_api:url\");\n\n const global = globalThis as unknown as {\n [fetchSmb]?: typeof fetch;\n [urlSmb]?: string;\n };\n\n if (global[fetchSmb]) callerOptions.fetch ??= global[fetchSmb];\n if (global[urlSmb]) defaultApiUrl = global[urlSmb];\n }\n\n this.asyncCaller = new AsyncCaller(callerOptions);\n this.timeoutMs = config?.timeoutMs;\n\n this.apiUrl = config?.apiUrl?.replace(/\\/$/, \"\") || defaultApiUrl;\n this.defaultHeaders = config?.defaultHeaders || {};\n this.onRequest = config?.onRequest;\n this.streamProtocol = config?.streamProtocol ?? \"legacy\";\n const apiKey = getApiKey(config?.apiKey);\n if (apiKey) {\n this.defaultHeaders[\"x-api-key\"] = apiKey;\n }\n }\n\n protected prepareFetchOptions(\n path: string,\n options?: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n withResponse?: boolean;\n dedupe?: boolean;\n }\n ): [url: URL, init: RequestInit] {\n const mutatedOptions = {\n ...options,\n headers: mergeHeaders(this.defaultHeaders, options?.headers),\n };\n\n if (mutatedOptions.json) {\n mutatedOptions.body = JSON.stringify(mutatedOptions.json);\n mutatedOptions.headers = mergeHeaders(mutatedOptions.headers, {\n \"content-type\": \"application/json\",\n });\n delete mutatedOptions.json;\n }\n\n if (mutatedOptions.withResponse) {\n delete mutatedOptions.withResponse;\n }\n\n if (\"dedupe\" in mutatedOptions) {\n delete mutatedOptions.dedupe;\n }\n\n let timeoutSignal: AbortSignal | null = null;\n if (typeof options?.timeoutMs !== \"undefined\") {\n if (options.timeoutMs != null) {\n timeoutSignal = AbortSignal.timeout(options.timeoutMs);\n }\n } else if (this.timeoutMs != null) {\n timeoutSignal = AbortSignal.timeout(this.timeoutMs);\n }\n\n mutatedOptions.signal = mergeSignals(timeoutSignal, mutatedOptions.signal);\n const targetUrl = new URL(`${this.apiUrl}${path}`);\n\n if (mutatedOptions.params) {\n for (const [key, value] of Object.entries(mutatedOptions.params)) {\n if (value == null) continue;\n\n // Send each array element as its own repeated key=value pair.\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item == null) continue;\n targetUrl.searchParams.append(\n key,\n typeof item === \"string\" || typeof item === \"number\"\n ? item.toString()\n : JSON.stringify(item)\n );\n }\n continue;\n }\n\n const strValue =\n typeof value === \"string\" || typeof value === \"number\"\n ? value.toString()\n : JSON.stringify(value);\n\n targetUrl.searchParams.append(key, strValue);\n }\n delete mutatedOptions.params;\n }\n\n return [targetUrl, mutatedOptions];\n }\n\n protected async fetch<T>(\n path: string,\n options: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n signal: AbortSignal | undefined;\n withResponse: true;\n }\n ): Promise<[T, Response]>;\n\n protected async fetch<T>(\n path: string,\n options?: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n signal: AbortSignal | undefined;\n withResponse?: false;\n dedupe?: boolean;\n }\n ): Promise<T>;\n\n protected async fetch<T>(\n path: string,\n options?: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n signal: AbortSignal | undefined;\n withResponse?: boolean;\n dedupe?: boolean;\n }\n ): Promise<T | [T, Response]> {\n const [url, init] = this.prepareFetchOptions(path, options);\n\n /**\n * Coalesce concurrent, identical idempotent reads onto a single\n * in-flight request. Only engaged when the caller opts in\n * (`dedupe: true`), is not asking for the raw `Response`, did not\n * supply its own `AbortSignal` (sharing a request across consumers\n * must never let one consumer's abort cancel another's), and no\n * `onRequest` hook is configured.\n *\n * `onRequest` is excluded because it can inject per-request headers\n * (e.g. a freshly-minted `Authorization` bearer) that are not\n * visible until *after* it runs — i.e. after the dedupe key is\n * computed — so two requests that look identical here could be sent\n * with different credentials. Coalescing them would let one\n * consumer receive a response fetched with another's auth.\n */\n const canDedupe =\n options?.dedupe === true &&\n options?.withResponse !== true &&\n options?.signal == null &&\n this.onRequest == null;\n\n if (canDedupe) {\n const body = typeof init.body === \"string\" ? init.body : \"\";\n /**\n * The key must capture the FULL request identity, including every\n * prepared header. `inFlightReads` is module-scoped across all\n * `Client` instances, so omitting headers would let two clients\n * pointed at the same URL/thread but using different credentials\n * (Authorization, custom auth headers, tenant-scoping defaults, …)\n * share one in-flight promise — a cross-tenant data leak.\n */\n const headers = serializeHeaders(init.headers);\n const key = `${init.method ?? \"GET\"} ${url.toString()} ${body} ${headers}`;\n const existing = inFlightReads.get(key);\n if (existing != null) return existing as Promise<T>;\n\n const promise = this.#performFetch<T>(url, init);\n inFlightReads.set(key, promise);\n const clear = () => {\n if (inFlightReads.get(key) === promise) inFlightReads.delete(key);\n };\n promise.then(clear, clear);\n return promise;\n }\n\n const [body, response] = await this.#performFetchWithResponse<T>(url, init);\n if (options?.withResponse) {\n return [body, response];\n }\n return body;\n }\n\n /**\n * Issue the prepared request (applying the `onRequest` hook) and\n * resolve the parsed body. Shared by the deduped and direct paths.\n */\n async #performFetch<T>(url: URL, init: RequestInit): Promise<T> {\n const [body] = await this.#performFetchWithResponse<T>(url, init);\n return body;\n }\n\n async #performFetchWithResponse<T>(\n url: URL,\n init: RequestInit\n ): Promise<[T, Response]> {\n let finalInit = init;\n if (this.onRequest) {\n finalInit = await this.onRequest(url, init);\n }\n\n const response = await this.asyncCaller.fetch(url.toString(), finalInit);\n\n const body = await (async () => {\n if (response.status === 202 || response.status === 204) {\n return undefined as T;\n }\n return response.json() as Promise<T>;\n })();\n\n return [body, response];\n }\n\n protected async *streamWithRetry<\n T extends { id?: string; event: string; data: unknown },\n >(config: {\n endpoint: string;\n method?: string;\n signal?: AbortSignal;\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n json?: unknown;\n maxRetries?: number;\n idleReconnect?: IdleReconnectMode;\n onReconnect?: (options: {\n attempt: number;\n lastEventId?: string;\n cause: unknown;\n }) => void;\n onInitialResponse?: (response: Response) => void | Promise<void>;\n }): AsyncGenerator<T> {\n const makeRequest = async (reconnectParams?: StreamRequestParams) => {\n const requestEndpoint = reconnectParams?.reconnectPath || config.endpoint;\n\n const isReconnect = !!reconnectParams?.reconnectPath;\n const method = isReconnect ? \"GET\" : config.method || \"GET\";\n\n const requestHeaders =\n isReconnect && reconnectParams?.lastEventId\n ? { ...config.headers, \"Last-Event-ID\": reconnectParams.lastEventId }\n : config.headers;\n\n // oxlint-disable-next-line prefer-const -- init is reassigned by onRequest hook\n let [url, init] = this.prepareFetchOptions(requestEndpoint, {\n method,\n timeoutMs: null,\n signal: config.signal,\n headers: requestHeaders,\n params: config.params,\n json: isReconnect ? undefined : config.json,\n });\n\n if (this.onRequest != null) {\n init = await this.onRequest(url, init);\n }\n\n const response = await this.asyncCaller.fetch(url.toString(), init);\n if (!response.body) {\n throw new Error(\"Expected response body from stream endpoint\");\n }\n\n if (!isReconnect && config.onInitialResponse) {\n await config.onInitialResponse(response);\n }\n\n // Insert the idle watchdog on the line stream (between the byte-line\n // decoder and the SSE decoder) so it can both reset on any line and\n // recognise `:` keep-alive heartbeats to drive `\"auto\"` mode. The SSE\n // decoder downstream discards those comment lines.\n const idleMode = config.idleReconnect ?? DEFAULT_IDLE_RECONNECT;\n const enableIdle = idleMode === \"auto\" || idleMode > 0;\n\n const lines = response.body.pipeThrough(BytesLineDecoder());\n const watched = enableIdle\n ? lines.pipeThrough(idleReconnectStream({ mode: idleMode }))\n : lines;\n const stream: ReadableStream<T> = watched.pipeThrough(\n SSEDecoder()\n ) as ReadableStream<T>;\n\n return { response, stream };\n };\n\n yield* streamWithRetry(makeRequest, {\n maxRetries: config.maxRetries ?? DEFAULT_MAX_RECONNECT_ATTEMPTS,\n signal: config.signal,\n onReconnect: config.onReconnect,\n });\n }\n}\n\nexport const REGEX_RUN_METADATA =\n /(\\/threads\\/(?<thread_id>.+))?\\/runs\\/(?<run_id>.+)/;\n\nexport function getRunMetadataFromResponse(\n response: Response\n): { run_id: string; thread_id?: string } | undefined {\n const contentLocation = response.headers.get(\"Content-Location\");\n if (!contentLocation) return undefined;\n\n const match = REGEX_RUN_METADATA.exec(contentLocation);\n\n if (!match?.groups?.run_id) return undefined;\n return {\n run_id: match.groups.run_id,\n thread_id: match.groups.thread_id || undefined,\n };\n}\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\n/**\n * Module-scoped, in-flight-only coalescing map for idempotent reads.\n *\n * Two independently-constructed clients (e.g. a React component that\n * remounts under Suspense / a reachability state flip, each minting a\n * fresh `Client`) can fire the *same* `getState` / `getHistory` read a\n * few milliseconds apart, before the first has resolved. Without\n * coalescing each pays the full round-trip — the duplicate\n * `threads/{id}/state` and `threads/{id}/history` requests seen on\n * reconnect.\n *\n * Keyed by `method + url + body + auth`, entries live only while a\n * request is in flight and are removed the moment it settles. This is\n * deliberately *not* a result cache: there is no TTL and no stored\n * payload, so it cannot serve stale data — it only ever shares a\n * promise that is already on the wire. Opt-in per call via\n * `{ dedupe: true }`, and skipped whenever the caller supplies its own\n * `AbortSignal` (so one consumer aborting can never cancel another's\n * read).\n */\nconst inFlightReads = new Map<string, Promise<unknown>>();\n\n/**\n * Deterministically serialize a prepared request's headers into a\n * stable string for use in the {@link inFlightReads} dedupe key. Header\n * names are normalized and sorted so ordering differences never produce\n * a different key, and every header (not just `x-api-key`) is included\n * so requests carrying different credentials never collide.\n */\nfunction serializeHeaders(headers: RequestInit[\"headers\"]): string {\n const normalized = mergeHeaders(\n headers as Record<string, HeaderValue> | undefined\n );\n return Object.keys(normalized)\n .sort()\n .map((name) => `${name}:${normalized[name]}`)\n .join(\"\\n\");\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"base.js","names":["#performFetch","#performFetchWithResponse"],"sources":["../../src/client/base.ts"],"sourcesContent":["import { AsyncCaller, AsyncCallerParams } from \"../utils/async_caller.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\nimport { mergeSignals } from \"../utils/signals.js\";\nimport { BytesLineDecoder, SSEDecoder } from \"../utils/sse.js\";\nimport {\n streamWithRetry,\n idleReconnectStream,\n type IdleReconnectMode,\n StreamRequestParams,\n DEFAULT_IDLE_RECONNECT,\n} from \"../utils/stream.js\";\nimport { DEFAULT_MAX_RECONNECT_ATTEMPTS } from \"../utils/reconnect.js\";\nimport type { StreamProtocol } from \"../types.js\";\n\nexport type HeaderValue = string | undefined | null;\n\nexport function* iterateHeaders(\n headers: HeadersInit | Record<string, HeaderValue>\n): IterableIterator<[string, string | null]> {\n let iter: Iterable<(HeaderValue | HeaderValue | null[])[]>;\n let shouldClear = false;\n\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (headers instanceof Headers) {\n const entries: [string, string][] = [];\n headers.forEach((value, name) => {\n entries.push([name, value]);\n });\n iter = entries;\n } else if (Array.isArray(headers)) {\n iter = headers;\n } else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n\n for (const item of iter) {\n const name = item[0];\n if (typeof name !== \"string\")\n throw new TypeError(\n `Expected header name to be a string, got ${typeof name}`\n );\n const values = Array.isArray(item[1]) ? item[1] : [item[1]];\n let didClear = false;\n\n for (const value of values) {\n if (value === undefined) continue;\n\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\n\nexport function mergeHeaders(\n ...headerObjects: (\n | HeadersInit\n | Record<string, HeaderValue>\n | undefined\n | null\n )[]\n) {\n const outputHeaders = new Headers();\n for (const headers of headerObjects) {\n if (!headers) continue;\n for (const [name, value] of iterateHeaders(headers)) {\n if (value === null) outputHeaders.delete(name);\n else outputHeaders.append(name, value);\n }\n }\n const headerEntries: [string, string][] = [];\n outputHeaders.forEach((value, name) => {\n headerEntries.push([name, value]);\n });\n return Object.fromEntries(headerEntries);\n}\n\n/**\n * Get the API key from the environment.\n * Precedence:\n * 1. explicit argument (if string)\n * 2. LANGGRAPH_API_KEY\n * 3. LANGSMITH_API_KEY\n * 4. LANGCHAIN_API_KEY\n *\n * @param apiKey - API key provided as an argument. If null, skips environment lookup. If undefined, tries environment.\n * @returns The API key if found, otherwise undefined\n */\nexport function getApiKey(apiKey?: string | null): string | undefined {\n if (apiKey === null) {\n return undefined;\n }\n\n if (apiKey) {\n return apiKey;\n }\n\n const prefixes = [\"LANGGRAPH\", \"LANGSMITH\", \"LANGCHAIN\"];\n\n for (const prefix of prefixes) {\n const envKey = getEnvironmentVariable(`${prefix}_API_KEY`);\n if (envKey) {\n return envKey.trim().replace(/^[\"']|[\"']$/g, \"\");\n }\n }\n\n return undefined;\n}\n\n/**\n * Encode an identifier as a single URL path segment so it can't change the\n * request's path or query. `.` and `..` are rejected since `new URL()` would\n * resolve them as dot segments.\n */\nexport function encodePathSegment(value: string): string {\n if (value === \".\" || value === \"..\") {\n throw new Error(`Invalid path segment: ${JSON.stringify(value)}`);\n }\n return encodeURIComponent(value);\n}\n\nexport type RequestHook = (\n url: URL,\n init: RequestInit\n) => Promise<RequestInit> | RequestInit;\n\n/**\n * Configuration for {@link BaseClient} and the exported LangGraph SDK\n * {@link Client}.\n */\nexport interface ClientConfig {\n /**\n * Base URL of the LangGraph API server.\n *\n * Defaults to `http://localhost:8123`, unless the runtime provides a\n * `langgraph_api:url` global override.\n */\n apiUrl?: string;\n /**\n * API key for authentication.\n * - If a string is provided, that key will be used\n * - If undefined (default), the key will be auto-loaded from environment variables (LANGGRAPH_API_KEY, LANGSMITH_API_KEY, or LANGCHAIN_API_KEY)\n * - If null, no API key will be set (skips auto-loading)\n */\n apiKey?: string | null;\n /**\n * Options forwarded to the internal {@link AsyncCaller}, such as retry,\n * concurrency, or custom `fetch` behavior.\n */\n callerOptions?: AsyncCallerParams;\n /**\n * Default timeout, in milliseconds, applied to client requests.\n *\n * Per-request `timeoutMs` values override this default. Passing `null`\n * at the request level disables the configured timeout for that request.\n */\n timeoutMs?: number;\n /**\n * Headers applied to every request.\n *\n * The configured API key, when present, is added as the `x-api-key`\n * header after these defaults are initialized.\n */\n defaultHeaders?: Record<string, HeaderValue>;\n /**\n * Hook for inspecting or mutating a request before it is sent.\n *\n * Receives the resolved URL and prepared `RequestInit`; return the\n * original init or a replacement object to continue the request.\n */\n onRequest?: RequestHook;\n /**\n * Streaming protocol used by stream-capable endpoints.\n *\n * Defaults to `\"legacy\"` for backwards compatibility.\n */\n streamProtocol?: StreamProtocol;\n}\n\nexport class BaseClient {\n protected asyncCaller: AsyncCaller;\n\n protected timeoutMs: number | undefined;\n\n protected apiUrl: string;\n\n protected defaultHeaders: Record<string, HeaderValue>;\n\n protected onRequest?: RequestHook;\n\n protected streamProtocol: StreamProtocol;\n\n constructor(config?: ClientConfig) {\n const callerOptions = {\n maxRetries: 4,\n maxConcurrency: 4,\n ...config?.callerOptions,\n };\n\n let defaultApiUrl = \"http://localhost:8123\";\n if (\n !config?.apiUrl &&\n typeof globalThis === \"object\" &&\n globalThis != null\n ) {\n const fetchSmb = Symbol.for(\"langgraph_api:fetch\");\n const urlSmb = Symbol.for(\"langgraph_api:url\");\n\n const global = globalThis as unknown as {\n [fetchSmb]?: typeof fetch;\n [urlSmb]?: string;\n };\n\n if (global[fetchSmb]) callerOptions.fetch ??= global[fetchSmb];\n if (global[urlSmb]) defaultApiUrl = global[urlSmb];\n }\n\n this.asyncCaller = new AsyncCaller(callerOptions);\n this.timeoutMs = config?.timeoutMs;\n\n this.apiUrl = config?.apiUrl?.replace(/\\/$/, \"\") || defaultApiUrl;\n this.defaultHeaders = mergeHeaders(config?.defaultHeaders);\n this.onRequest = config?.onRequest;\n this.streamProtocol = config?.streamProtocol ?? \"legacy\";\n const apiKey = getApiKey(config?.apiKey);\n if (apiKey) {\n this.defaultHeaders[\"x-api-key\"] = apiKey;\n }\n }\n\n protected prepareFetchOptions(\n path: string,\n options?: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n withResponse?: boolean;\n dedupe?: boolean;\n }\n ): [url: URL, init: RequestInit] {\n const mutatedOptions = {\n ...options,\n headers: mergeHeaders(this.defaultHeaders, options?.headers),\n };\n\n if (mutatedOptions.json) {\n mutatedOptions.body = JSON.stringify(mutatedOptions.json);\n mutatedOptions.headers = mergeHeaders(mutatedOptions.headers, {\n \"content-type\": \"application/json\",\n });\n delete mutatedOptions.json;\n }\n\n if (mutatedOptions.withResponse) {\n delete mutatedOptions.withResponse;\n }\n\n if (\"dedupe\" in mutatedOptions) {\n delete mutatedOptions.dedupe;\n }\n\n let timeoutSignal: AbortSignal | null = null;\n if (typeof options?.timeoutMs !== \"undefined\") {\n if (options.timeoutMs != null) {\n timeoutSignal = AbortSignal.timeout(options.timeoutMs);\n }\n } else if (this.timeoutMs != null) {\n timeoutSignal = AbortSignal.timeout(this.timeoutMs);\n }\n\n mutatedOptions.signal = mergeSignals(timeoutSignal, mutatedOptions.signal);\n const targetUrl = new URL(`${this.apiUrl}${path}`);\n\n if (mutatedOptions.params) {\n for (const [key, value] of Object.entries(mutatedOptions.params)) {\n if (value == null) continue;\n\n // Send each array element as its own repeated key=value pair.\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item == null) continue;\n targetUrl.searchParams.append(\n key,\n typeof item === \"string\" || typeof item === \"number\"\n ? item.toString()\n : JSON.stringify(item)\n );\n }\n continue;\n }\n\n const strValue =\n typeof value === \"string\" || typeof value === \"number\"\n ? value.toString()\n : JSON.stringify(value);\n\n targetUrl.searchParams.append(key, strValue);\n }\n delete mutatedOptions.params;\n }\n\n return [targetUrl, mutatedOptions];\n }\n\n protected async fetch<T>(\n path: string,\n options: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n signal: AbortSignal | undefined;\n withResponse: true;\n }\n ): Promise<[T, Response]>;\n\n protected async fetch<T>(\n path: string,\n options?: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n signal: AbortSignal | undefined;\n withResponse?: false;\n dedupe?: boolean;\n }\n ): Promise<T>;\n\n protected async fetch<T>(\n path: string,\n options?: RequestInit & {\n json?: unknown;\n params?: Record<string, unknown>;\n timeoutMs?: number | null;\n signal: AbortSignal | undefined;\n withResponse?: boolean;\n dedupe?: boolean;\n }\n ): Promise<T | [T, Response]> {\n const [url, init] = this.prepareFetchOptions(path, options);\n\n /**\n * Coalesce concurrent, identical idempotent reads onto a single\n * in-flight request. Only engaged when the caller opts in\n * (`dedupe: true`), is not asking for the raw `Response`, did not\n * supply its own `AbortSignal` (sharing a request across consumers\n * must never let one consumer's abort cancel another's), and no\n * `onRequest` hook is configured.\n *\n * `onRequest` is excluded because it can inject per-request headers\n * (e.g. a freshly-minted `Authorization` bearer) that are not\n * visible until *after* it runs — i.e. after the dedupe key is\n * computed — so two requests that look identical here could be sent\n * with different credentials. Coalescing them would let one\n * consumer receive a response fetched with another's auth.\n */\n const canDedupe =\n options?.dedupe === true &&\n options?.withResponse !== true &&\n options?.signal == null &&\n this.onRequest == null;\n\n if (canDedupe) {\n const body = typeof init.body === \"string\" ? init.body : \"\";\n /**\n * The key must capture the FULL request identity, including every\n * prepared header. `inFlightReads` is module-scoped across all\n * `Client` instances, so omitting headers would let two clients\n * pointed at the same URL/thread but using different credentials\n * (Authorization, custom auth headers, tenant-scoping defaults, …)\n * share one in-flight promise — a cross-tenant data leak.\n */\n const headers = serializeHeaders(init.headers);\n const key = `${init.method ?? \"GET\"} ${url.toString()} ${body} ${headers}`;\n const existing = inFlightReads.get(key);\n if (existing != null) return existing as Promise<T>;\n\n const promise = this.#performFetch<T>(url, init);\n inFlightReads.set(key, promise);\n const clear = () => {\n if (inFlightReads.get(key) === promise) inFlightReads.delete(key);\n };\n promise.then(clear, clear);\n return promise;\n }\n\n const [body, response] = await this.#performFetchWithResponse<T>(url, init);\n if (options?.withResponse) {\n return [body, response];\n }\n return body;\n }\n\n /**\n * Issue the prepared request (applying the `onRequest` hook) and\n * resolve the parsed body. Shared by the deduped and direct paths.\n */\n async #performFetch<T>(url: URL, init: RequestInit): Promise<T> {\n const [body] = await this.#performFetchWithResponse<T>(url, init);\n return body;\n }\n\n async #performFetchWithResponse<T>(\n url: URL,\n init: RequestInit\n ): Promise<[T, Response]> {\n let finalInit = init;\n if (this.onRequest) {\n finalInit = await this.onRequest(url, init);\n }\n\n const response = await this.asyncCaller.fetch(url.toString(), finalInit);\n\n const body = await (async () => {\n if (response.status === 202 || response.status === 204) {\n return undefined as T;\n }\n return response.json() as Promise<T>;\n })();\n\n return [body, response];\n }\n\n protected async *streamWithRetry<\n T extends { id?: string; event: string; data: unknown },\n >(config: {\n endpoint: string;\n method?: string;\n signal?: AbortSignal;\n headers?: Record<string, string>;\n params?: Record<string, unknown>;\n json?: unknown;\n maxRetries?: number;\n idleReconnect?: IdleReconnectMode;\n onReconnect?: (options: {\n attempt: number;\n lastEventId?: string;\n cause: unknown;\n }) => void;\n onInitialResponse?: (response: Response) => void | Promise<void>;\n }): AsyncGenerator<T> {\n const makeRequest = async (reconnectParams?: StreamRequestParams) => {\n const requestEndpoint = reconnectParams?.reconnectPath || config.endpoint;\n\n const isReconnect = !!reconnectParams?.reconnectPath;\n const method = isReconnect ? \"GET\" : config.method || \"GET\";\n\n const requestHeaders =\n isReconnect && reconnectParams?.lastEventId\n ? { ...config.headers, \"Last-Event-ID\": reconnectParams.lastEventId }\n : config.headers;\n\n // oxlint-disable-next-line prefer-const -- init is reassigned by onRequest hook\n let [url, init] = this.prepareFetchOptions(requestEndpoint, {\n method,\n timeoutMs: null,\n signal: config.signal,\n headers: requestHeaders,\n params: config.params,\n json: isReconnect ? undefined : config.json,\n });\n\n if (this.onRequest != null) {\n init = await this.onRequest(url, init);\n }\n\n const response = await this.asyncCaller.fetch(url.toString(), init);\n if (!response.body) {\n throw new Error(\"Expected response body from stream endpoint\");\n }\n\n if (!isReconnect && config.onInitialResponse) {\n await config.onInitialResponse(response);\n }\n\n // Insert the idle watchdog on the line stream (between the byte-line\n // decoder and the SSE decoder) so it can both reset on any line and\n // recognise `:` keep-alive heartbeats to drive `\"auto\"` mode. The SSE\n // decoder downstream discards those comment lines.\n const idleMode = config.idleReconnect ?? DEFAULT_IDLE_RECONNECT;\n const enableIdle = idleMode === \"auto\" || idleMode > 0;\n\n const lines = response.body.pipeThrough(BytesLineDecoder());\n const watched = enableIdle\n ? lines.pipeThrough(idleReconnectStream({ mode: idleMode }))\n : lines;\n const stream: ReadableStream<T> = watched.pipeThrough(\n SSEDecoder()\n ) as ReadableStream<T>;\n\n return { response, stream };\n };\n\n yield* streamWithRetry(makeRequest, {\n maxRetries: config.maxRetries ?? DEFAULT_MAX_RECONNECT_ATTEMPTS,\n signal: config.signal,\n onReconnect: config.onReconnect,\n });\n }\n}\n\nexport const REGEX_RUN_METADATA =\n /(\\/threads\\/(?<thread_id>.+))?\\/runs\\/(?<run_id>.+)/;\n\nexport function getRunMetadataFromResponse(\n response: Response\n): { run_id: string; thread_id?: string } | undefined {\n const contentLocation = response.headers.get(\"Content-Location\");\n if (!contentLocation) return undefined;\n\n const match = REGEX_RUN_METADATA.exec(contentLocation);\n\n if (!match?.groups?.run_id) return undefined;\n return {\n run_id: match.groups.run_id,\n thread_id: match.groups.thread_id || undefined,\n };\n}\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\n/**\n * Module-scoped, in-flight-only coalescing map for idempotent reads.\n *\n * Two independently-constructed clients (e.g. a React component that\n * remounts under Suspense / a reachability state flip, each minting a\n * fresh `Client`) can fire the *same* `getState` / `getHistory` read a\n * few milliseconds apart, before the first has resolved. Without\n * coalescing each pays the full round-trip — the duplicate\n * `threads/{id}/state` and `threads/{id}/history` requests seen on\n * reconnect.\n *\n * Keyed by `method + url + body + auth`, entries live only while a\n * request is in flight and are removed the moment it settles. This is\n * deliberately *not* a result cache: there is no TTL and no stored\n * payload, so it cannot serve stale data — it only ever shares a\n * promise that is already on the wire. Opt-in per call via\n * `{ dedupe: true }`, and skipped whenever the caller supplies its own\n * `AbortSignal` (so one consumer aborting can never cancel another's\n * read).\n */\nconst inFlightReads = new Map<string, Promise<unknown>>();\n\n/**\n * Deterministically serialize a prepared request's headers into a\n * stable string for use in the {@link inFlightReads} dedupe key. Header\n * names are normalized and sorted so ordering differences never produce\n * a different key, and every header (not just `x-api-key`) is included\n * so requests carrying different credentials never collide.\n */\nfunction serializeHeaders(headers: RequestInit[\"headers\"]): string {\n const normalized = mergeHeaders(\n headers as Record<string, HeaderValue> | undefined\n );\n return Object.keys(normalized)\n .sort()\n .map((name) => `${name}:${normalized[name]}`)\n .join(\"\\n\");\n}\n"],"mappings":"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"}
@@ -30,7 +30,7 @@ var CronsClient = class extends require_base.BaseClient {
30
30
  end_time: payload?.endTime,
31
31
  on_run_completed: payload?.onRunCompleted
32
32
  };
33
- return this.fetch(`/threads/${threadId}/runs/crons`, {
33
+ return this.fetch(`/threads/${require_base.encodePathSegment(threadId)}/runs/crons`, {
34
34
  method: "POST",
35
35
  json,
36
36
  signal: payload?.signal
@@ -97,7 +97,7 @@ var CronsClient = class extends require_base.BaseClient {
97
97
  stream_resumable: payload?.streamResumable,
98
98
  durability: payload?.durability
99
99
  };
100
- return this.fetch(`/runs/crons/${cronId}`, {
100
+ return this.fetch(`/runs/crons/${require_base.encodePathSegment(cronId)}`, {
101
101
  method: "PATCH",
102
102
  json,
103
103
  signal: payload?.signal
@@ -110,7 +110,7 @@ var CronsClient = class extends require_base.BaseClient {
110
110
  * @param options Optional parameters for the request.
111
111
  */
112
112
  async delete(cronId, options) {
113
- await this.fetch(`/runs/crons/${cronId}`, {
113
+ await this.fetch(`/runs/crons/${require_base.encodePathSegment(cronId)}`, {
114
114
  method: "DELETE",
115
115
  signal: options?.signal
116
116
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["BaseClient"],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n Metadata,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${threadId}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n timezone: payload?.timezone,\n // `null` clears a set end time; `undefined` (omitted) leaves it unchanged.\n end_time: payload?.endTime,\n input: payload?.input,\n metadata: payload?.metadata,\n config: payload?.config,\n context: payload?.context,\n webhook: payload?.webhook,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n on_run_completed: payload?.onRunCompleted,\n enabled: payload?.enabled,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n durability: payload?.durability,\n };\n\n return this.fetch<Cron>(`/runs/crons/${cronId}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${cronId}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":";;AAYA,IAAa,cAAb,cAAiCA,aAAAA,WAAW;;;;;;;;CAQ1C,MAAM,gBACJ,UACA,aACA,SACsC;EACtC,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACnB,kBAAkB,SAAS;GAC5B;AACD,SAAO,KAAK,MACV,YAAY,SAAS,cACrB;GACE,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CACF;;;;;;;;CASH,MAAM,OACJ,aACA,SAC6B;EAC7B,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACpB;AACD,SAAO,KAAK,MAA0B,eAAe;GACnD,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;;CAWJ,MAAM,OAAO,QAAgB,SAA6C;EACxE,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,UAAU,SAAS;GAEnB,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,UAAU,SAAS;GACnB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,kBAAkB,SAAS;GAC3B,SAAS,SAAS;GAClB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,YAAY,SAAS;GACtB;AAED,SAAO,KAAK,MAAY,eAAe,UAAU;GAC/C,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;CASJ,MAAM,OACJ,QACA,SACe;AACf,QAAM,KAAK,MAAY,eAAe,UAAU;GAC9C,QAAQ;GACR,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;CAUJ,MAAM,OAAO,OAWO;AAClB,SAAO,KAAK,MAAc,sBAAsB;GAC9C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,SAAS,OAAO,WAAW,KAAA;IAC3B,OAAO,OAAO,SAAS;IACvB,QAAQ,OAAO,UAAU;IACzB,SAAS,OAAO,UAAU,KAAA;IAC1B,YAAY,OAAO,aAAa,KAAA;IAChC,QAAQ,OAAO,UAAU,KAAA;IACzB,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC;;;;;;;;;;;CAYJ,MAAM,MAAM,OAKQ;AAClB,SAAO,KAAK,MAAc,qBAAqB;GAC7C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC"}
1
+ {"version":3,"file":"index.cjs","names":["BaseClient","encodePathSegment"],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n Metadata,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient, encodePathSegment } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${encodePathSegment(threadId)}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n timezone: payload?.timezone,\n // `null` clears a set end time; `undefined` (omitted) leaves it unchanged.\n end_time: payload?.endTime,\n input: payload?.input,\n metadata: payload?.metadata,\n config: payload?.config,\n context: payload?.context,\n webhook: payload?.webhook,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n on_run_completed: payload?.onRunCompleted,\n enabled: payload?.enabled,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n durability: payload?.durability,\n };\n\n return this.fetch<Cron>(`/runs/crons/${encodePathSegment(cronId)}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${encodePathSegment(cronId)}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":";;AAYA,IAAa,cAAb,cAAiCA,aAAAA,WAAW;;;;;;;;CAQ1C,MAAM,gBACJ,UACA,aACA,SACsC;EACtC,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACnB,kBAAkB,SAAS;GAC5B;AACD,SAAO,KAAK,MACV,YAAYC,aAAAA,kBAAkB,SAAS,CAAC,cACxC;GACE,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CACF;;;;;;;;CASH,MAAM,OACJ,aACA,SAC6B;EAC7B,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACpB;AACD,SAAO,KAAK,MAA0B,eAAe;GACnD,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;;CAWJ,MAAM,OAAO,QAAgB,SAA6C;EACxE,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,UAAU,SAAS;GAEnB,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,UAAU,SAAS;GACnB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,kBAAkB,SAAS;GAC3B,SAAS,SAAS;GAClB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,YAAY,SAAS;GACtB;AAED,SAAO,KAAK,MAAY,eAAeA,aAAAA,kBAAkB,OAAO,IAAI;GAClE,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;CASJ,MAAM,OACJ,QACA,SACe;AACf,QAAM,KAAK,MAAY,eAAeA,aAAAA,kBAAkB,OAAO,IAAI;GACjE,QAAQ;GACR,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;CAUJ,MAAM,OAAO,OAWO;AAClB,SAAO,KAAK,MAAc,sBAAsB;GAC9C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,SAAS,OAAO,WAAW,KAAA;IAC3B,OAAO,OAAO,SAAS;IACvB,QAAQ,OAAO,UAAU;IACzB,SAAS,OAAO,UAAU,KAAA;IAC1B,YAAY,OAAO,aAAa,KAAA;IAChC,QAAQ,OAAO,UAAU,KAAA;IACzB,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC;;;;;;;;;;;CAYJ,MAAM,MAAM,OAKQ;AAClB,SAAO,KAAK,MAAc,qBAAqB;GAC7C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { BaseClient } from "../base.js";
1
+ import { BaseClient, encodePathSegment } from "../base.js";
2
2
  //#region src/client/crons/index.ts
3
3
  var CronsClient = class extends BaseClient {
4
4
  /**
@@ -30,7 +30,7 @@ var CronsClient = class extends BaseClient {
30
30
  end_time: payload?.endTime,
31
31
  on_run_completed: payload?.onRunCompleted
32
32
  };
33
- return this.fetch(`/threads/${threadId}/runs/crons`, {
33
+ return this.fetch(`/threads/${encodePathSegment(threadId)}/runs/crons`, {
34
34
  method: "POST",
35
35
  json,
36
36
  signal: payload?.signal
@@ -97,7 +97,7 @@ var CronsClient = class extends BaseClient {
97
97
  stream_resumable: payload?.streamResumable,
98
98
  durability: payload?.durability
99
99
  };
100
- return this.fetch(`/runs/crons/${cronId}`, {
100
+ return this.fetch(`/runs/crons/${encodePathSegment(cronId)}`, {
101
101
  method: "PATCH",
102
102
  json,
103
103
  signal: payload?.signal
@@ -110,7 +110,7 @@ var CronsClient = class extends BaseClient {
110
110
  * @param options Optional parameters for the request.
111
111
  */
112
112
  async delete(cronId, options) {
113
- await this.fetch(`/runs/crons/${cronId}`, {
113
+ await this.fetch(`/runs/crons/${encodePathSegment(cronId)}`, {
114
114
  method: "DELETE",
115
115
  signal: options?.signal
116
116
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n Metadata,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${threadId}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n timezone: payload?.timezone,\n // `null` clears a set end time; `undefined` (omitted) leaves it unchanged.\n end_time: payload?.endTime,\n input: payload?.input,\n metadata: payload?.metadata,\n config: payload?.config,\n context: payload?.context,\n webhook: payload?.webhook,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n on_run_completed: payload?.onRunCompleted,\n enabled: payload?.enabled,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n durability: payload?.durability,\n };\n\n return this.fetch<Cron>(`/runs/crons/${cronId}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${cronId}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":";;AAYA,IAAa,cAAb,cAAiC,WAAW;;;;;;;;CAQ1C,MAAM,gBACJ,UACA,aACA,SACsC;EACtC,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACnB,kBAAkB,SAAS;GAC5B;AACD,SAAO,KAAK,MACV,YAAY,SAAS,cACrB;GACE,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CACF;;;;;;;;CASH,MAAM,OACJ,aACA,SAC6B;EAC7B,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACpB;AACD,SAAO,KAAK,MAA0B,eAAe;GACnD,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;;CAWJ,MAAM,OAAO,QAAgB,SAA6C;EACxE,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,UAAU,SAAS;GAEnB,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,UAAU,SAAS;GACnB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,kBAAkB,SAAS;GAC3B,SAAS,SAAS;GAClB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,YAAY,SAAS;GACtB;AAED,SAAO,KAAK,MAAY,eAAe,UAAU;GAC/C,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;CASJ,MAAM,OACJ,QACA,SACe;AACf,QAAM,KAAK,MAAY,eAAe,UAAU;GAC9C,QAAQ;GACR,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;CAUJ,MAAM,OAAO,OAWO;AAClB,SAAO,KAAK,MAAc,sBAAsB;GAC9C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,SAAS,OAAO,WAAW,KAAA;IAC3B,OAAO,OAAO,SAAS;IACvB,QAAQ,OAAO,UAAU;IACzB,SAAS,OAAO,UAAU,KAAA;IAC1B,YAAY,OAAO,aAAa,KAAA;IAChC,QAAQ,OAAO,UAAU,KAAA;IACzB,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC;;;;;;;;;;;CAYJ,MAAM,MAAM,OAKQ;AAClB,SAAO,KAAK,MAAc,qBAAqB;GAC7C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/client/crons/index.ts"],"sourcesContent":["import {\n Cron,\n CronSelectField,\n CronCreateForThreadResponse,\n CronCreateResponse,\n CronSortBy,\n Metadata,\n SortOrder,\n} from \"../../schema.js\";\nimport type { CronsCreatePayload, CronsUpdatePayload } from \"../../types.js\";\nimport { BaseClient, encodePathSegment } from \"../base.js\";\n\nexport class CronsClient extends BaseClient {\n /**\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns The created background run.\n */\n async createForThread(\n threadId: string,\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateForThreadResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n on_run_completed: payload?.onRunCompleted,\n };\n return this.fetch<CronCreateForThreadResponse>(\n `/threads/${encodePathSegment(threadId)}/runs/crons`,\n {\n method: \"POST\",\n json,\n signal: payload?.signal,\n }\n );\n }\n\n /**\n *\n * @param assistantId Assistant ID to use for this cron job.\n * @param payload Payload for creating a cron job.\n * @returns\n */\n async create(\n assistantId: string,\n payload?: CronsCreatePayload\n ): Promise<CronCreateResponse> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n input: payload?.input,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n on_run_completed: payload?.onRunCompleted,\n multitask_strategy: payload?.multitaskStrategy,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n enabled: payload?.enabled,\n timezone: payload?.timezone,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n end_time: payload?.endTime,\n };\n return this.fetch<CronCreateResponse>(`/runs/crons`, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Update a cron job by ID.\n *\n * @param cronId The cron ID to update.\n * @param payload Payload for updating a cron job.\n * @returns The updated cron job.\n * ```\n */\n async update(cronId: string, payload?: CronsUpdatePayload): Promise<Cron> {\n const json: Record<string, unknown> = {\n schedule: payload?.schedule,\n timezone: payload?.timezone,\n // `null` clears a set end time; `undefined` (omitted) leaves it unchanged.\n end_time: payload?.endTime,\n input: payload?.input,\n metadata: payload?.metadata,\n config: payload?.config,\n context: payload?.context,\n webhook: payload?.webhook,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n on_run_completed: payload?.onRunCompleted,\n enabled: payload?.enabled,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n durability: payload?.durability,\n };\n\n return this.fetch<Cron>(`/runs/crons/${encodePathSegment(cronId)}`, {\n method: \"PATCH\",\n json,\n signal: payload?.signal,\n });\n }\n\n /**\n * Delete a cron job by ID.\n *\n * @param cronId Cron ID of Cron job to delete.\n * @param options Optional parameters for the request.\n */\n async delete(\n cronId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n await this.fetch<void>(`/runs/crons/${encodePathSegment(cronId)}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n\n /**\n *\n * @param query Query options.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns List of crons.\n */\n async search(query?: {\n assistantId?: string;\n threadId?: string;\n enabled?: boolean;\n limit?: number;\n offset?: number;\n sortBy?: CronSortBy;\n sortOrder?: SortOrder;\n select?: CronSelectField[];\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<Cron[]> {\n return this.fetch<Cron[]>(\"/runs/crons/search\", {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n enabled: query?.enabled ?? undefined,\n limit: query?.limit ?? 10,\n offset: query?.offset ?? 0,\n sort_by: query?.sortBy ?? undefined,\n sort_order: query?.sortOrder ?? undefined,\n select: query?.select ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n\n /**\n * Count cron jobs matching filters.\n *\n * @param query.assistantId Assistant ID to filter by.\n * @param query.threadId Thread ID to filter by.\n * @param query.metadata Metadata to filter by. Exact match filter for each KV pair.\n * Available in Agent Server version 0.9.0 and later.\n * @returns Number of cron jobs matching the criteria.\n */\n async count(query?: {\n assistantId?: string;\n threadId?: string;\n metadata?: Metadata;\n signal?: AbortSignal;\n }): Promise<number> {\n return this.fetch<number>(`/runs/crons/count`, {\n method: \"POST\",\n json: {\n assistant_id: query?.assistantId ?? undefined,\n thread_id: query?.threadId ?? undefined,\n metadata: query?.metadata ?? undefined,\n },\n signal: query?.signal,\n });\n }\n}\n"],"mappings":";;AAYA,IAAa,cAAb,cAAiC,WAAW;;;;;;;;CAQ1C,MAAM,gBACJ,UACA,aACA,SACsC;EACtC,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACnB,kBAAkB,SAAS;GAC5B;AACD,SAAO,KAAK,MACV,YAAY,kBAAkB,SAAS,CAAC,cACxC;GACE,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CACF;;;;;;;;CASH,MAAM,OACJ,aACA,SAC6B;EAC7B,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,cAAc;GACd,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,oBAAoB,SAAS;GAC7B,mBAAmB,SAAS;GAC5B,YAAY,SAAS;GACrB,SAAS,SAAS;GAClB,UAAU,SAAS;GACnB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,UAAU,SAAS;GACpB;AACD,SAAO,KAAK,MAA0B,eAAe;GACnD,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;;CAWJ,MAAM,OAAO,QAAgB,SAA6C;EACxE,MAAM,OAAgC;GACpC,UAAU,SAAS;GACnB,UAAU,SAAS;GAEnB,UAAU,SAAS;GACnB,OAAO,SAAS;GAChB,UAAU,SAAS;GACnB,QAAQ,SAAS;GACjB,SAAS,SAAS;GAClB,SAAS,SAAS;GAClB,kBAAkB,SAAS;GAC3B,iBAAiB,SAAS;GAC1B,kBAAkB,SAAS;GAC3B,SAAS,SAAS;GAClB,aAAa,SAAS;GACtB,kBAAkB,SAAS;GAC3B,kBAAkB,SAAS;GAC3B,YAAY,SAAS;GACtB;AAED,SAAO,KAAK,MAAY,eAAe,kBAAkB,OAAO,IAAI;GAClE,QAAQ;GACR;GACA,QAAQ,SAAS;GAClB,CAAC;;;;;;;;CASJ,MAAM,OACJ,QACA,SACe;AACf,QAAM,KAAK,MAAY,eAAe,kBAAkB,OAAO,IAAI;GACjE,QAAQ;GACR,QAAQ,SAAS;GAClB,CAAC;;;;;;;;;CAUJ,MAAM,OAAO,OAWO;AAClB,SAAO,KAAK,MAAc,sBAAsB;GAC9C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,SAAS,OAAO,WAAW,KAAA;IAC3B,OAAO,OAAO,SAAS;IACvB,QAAQ,OAAO,UAAU;IACzB,SAAS,OAAO,UAAU,KAAA;IAC1B,YAAY,OAAO,aAAa,KAAA;IAChC,QAAQ,OAAO,UAAU,KAAA;IACzB,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC;;;;;;;;;;;CAYJ,MAAM,MAAM,OAKQ;AAClB,SAAO,KAAK,MAAc,qBAAqB;GAC7C,QAAQ;GACR,MAAM;IACJ,cAAc,OAAO,eAAe,KAAA;IACpC,WAAW,OAAO,YAAY,KAAA;IAC9B,UAAU,OAAO,YAAY,KAAA;IAC9B;GACD,QAAQ,OAAO;GAChB,CAAC"}
@@ -34,7 +34,7 @@ var RunsClient = class extends require_base.BaseClient {
34
34
  durability: payload?.durability
35
35
  };
36
36
  yield* this.streamWithRetry({
37
- endpoint: threadId == null ? `/runs/stream` : `/threads/${threadId}/runs/stream`,
37
+ endpoint: threadId == null ? `/runs/stream` : `/threads/${require_base.encodePathSegment(threadId)}/runs/stream`,
38
38
  method: "POST",
39
39
  json,
40
40
  signal: payload?.signal,
@@ -81,7 +81,7 @@ var RunsClient = class extends require_base.BaseClient {
81
81
  example_id: payload?._langsmithTracer?.exampleId
82
82
  } : void 0
83
83
  };
84
- const endpoint = threadId === null ? "/runs" : `/threads/${threadId}/runs`;
84
+ const endpoint = threadId === null ? "/runs" : `/threads/${require_base.encodePathSegment(threadId)}/runs`;
85
85
  const [run, response] = await this.fetch(endpoint, {
86
86
  method: "POST",
87
87
  json,
@@ -144,7 +144,7 @@ var RunsClient = class extends require_base.BaseClient {
144
144
  example_id: payload?._langsmithTracer?.exampleId
145
145
  } : void 0
146
146
  };
147
- const endpoint = threadId == null ? `/runs/wait` : `/threads/${threadId}/runs/wait`;
147
+ const endpoint = threadId == null ? `/runs/wait` : `/threads/${require_base.encodePathSegment(threadId)}/runs/wait`;
148
148
  const [run, response] = await this.fetch(endpoint, {
149
149
  method: "POST",
150
150
  json,
@@ -165,7 +165,7 @@ var RunsClient = class extends require_base.BaseClient {
165
165
  * @returns List of runs.
166
166
  */
167
167
  async list(threadId, options) {
168
- return this.fetch(`/threads/${threadId}/runs`, {
168
+ return this.fetch(`/threads/${require_base.encodePathSegment(threadId)}/runs`, {
169
169
  params: {
170
170
  limit: options?.limit ?? 10,
171
171
  offset: options?.offset ?? 0,
@@ -183,7 +183,7 @@ var RunsClient = class extends require_base.BaseClient {
183
183
  * @returns The run.
184
184
  */
185
185
  async get(threadId, runId, options) {
186
- return this.fetch(`/threads/${threadId}/runs/${runId}`, { signal: options?.signal });
186
+ return this.fetch(`/threads/${require_base.encodePathSegment(threadId)}/runs/${require_base.encodePathSegment(runId)}`, { signal: options?.signal });
187
187
  }
188
188
  /**
189
189
  * Cancel a run.
@@ -195,7 +195,7 @@ var RunsClient = class extends require_base.BaseClient {
195
195
  * @returns
196
196
  */
197
197
  async cancel(threadId, runId, wait = false, action = "interrupt", options = {}) {
198
- return this.fetch(`/threads/${threadId}/runs/${runId}/cancel`, {
198
+ return this.fetch(`/threads/${require_base.encodePathSegment(threadId)}/runs/${require_base.encodePathSegment(runId)}/cancel`, {
199
199
  method: "POST",
200
200
  params: {
201
201
  wait: wait ? "1" : "0",
@@ -230,7 +230,7 @@ var RunsClient = class extends require_base.BaseClient {
230
230
  * @returns
231
231
  */
232
232
  async join(threadId, runId, options) {
233
- return this.fetch(`/threads/${threadId}/runs/${runId}/join`, {
233
+ return this.fetch(`/threads/${require_base.encodePathSegment(threadId)}/runs/${require_base.encodePathSegment(runId)}/join`, {
234
234
  timeoutMs: null,
235
235
  params: { cancel_on_disconnect: options?.cancelOnDisconnect ? "1" : "0" },
236
236
  signal: options?.signal
@@ -247,7 +247,7 @@ var RunsClient = class extends require_base.BaseClient {
247
247
  async *joinStream(threadId, runId, options) {
248
248
  const opts = typeof options === "object" && options != null && options instanceof AbortSignal ? { signal: options } : options;
249
249
  yield* this.streamWithRetry({
250
- endpoint: threadId != null ? `/threads/${threadId}/runs/${runId}/stream` : `/runs/${runId}/stream`,
250
+ endpoint: threadId != null ? `/threads/${require_base.encodePathSegment(threadId)}/runs/${require_base.encodePathSegment(runId)}/stream` : `/runs/${require_base.encodePathSegment(runId)}/stream`,
251
251
  method: "GET",
252
252
  signal: opts?.signal,
253
253
  idleReconnect: opts?.streamIdleReconnect,
@@ -266,7 +266,7 @@ var RunsClient = class extends require_base.BaseClient {
266
266
  * @returns
267
267
  */
268
268
  async delete(threadId, runId, options) {
269
- return this.fetch(`/threads/${threadId}/runs/${runId}`, {
269
+ return this.fetch(`/threads/${require_base.encodePathSegment(threadId)}/runs/${require_base.encodePathSegment(runId)}`, {
270
270
  method: "DELETE",
271
271
  signal: options?.signal
272
272
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["BaseClient","getRunMetadataFromResponse"],"sources":["../../../src/client/runs/index.ts"],"sourcesContent":["import {\n CancelAction,\n DefaultValues,\n Run,\n RunSelectField,\n RunStatus,\n ThreadState,\n} from \"../../schema.js\";\nimport type {\n RunsCreatePayload,\n RunsStreamPayload,\n RunsWaitPayload,\n StreamEvent,\n} from \"../../types.js\";\nimport type { StreamMode, TypedAsyncGenerator } from \"../../types.stream.js\";\nimport type { IdleReconnectMode } from \"../../utils/stream.js\";\n\nimport { BaseClient, getRunMetadataFromResponse } from \"../base.js\";\n\nexport class RunsClient<\n TStateType = DefaultValues,\n TUpdateType = TStateType,\n TCustomEventType = unknown,\n> extends BaseClient {\n stream<\n TStreamMode extends StreamMode | StreamMode[] = StreamMode,\n TSubgraphs extends boolean = false,\n >(\n threadId: null,\n assistantId: string,\n payload?: Omit<\n RunsStreamPayload<TStreamMode, TSubgraphs>,\n \"multitaskStrategy\" | \"onCompletion\"\n >\n ): TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n >;\n\n stream<\n TStreamMode extends StreamMode | StreamMode[] = StreamMode,\n TSubgraphs extends boolean = false,\n >(\n threadId: string,\n assistantId: string,\n payload?: RunsStreamPayload<TStreamMode, TSubgraphs>\n ): TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n >;\n\n /**\n * Create a run and stream the results.\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this run.\n * @param payload Payload for creating a run.\n */\n async *stream<\n TStreamMode extends StreamMode | StreamMode[] = StreamMode,\n TSubgraphs extends boolean = false,\n >(\n threadId: string | null,\n assistantId: string,\n payload?: RunsStreamPayload<TStreamMode, TSubgraphs>\n ): TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n > {\n const json: Record<string, unknown> = {\n input: payload?.input,\n command: payload?.command,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n feedback_keys: payload?.feedbackKeys,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n checkpoint: payload?.checkpoint,\n checkpoint_id: payload?.checkpointId,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n on_completion: payload?.onCompletion,\n on_disconnect: payload?.onDisconnect,\n after_seconds: payload?.afterSeconds,\n if_not_exists: payload?.ifNotExists,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n };\n\n yield* this.streamWithRetry({\n endpoint:\n threadId == null ? `/runs/stream` : `/threads/${threadId}/runs/stream`,\n method: \"POST\",\n json,\n signal: payload?.signal,\n idleReconnect: payload?.streamIdleReconnect,\n onInitialResponse: (response) => {\n const runMetadata = getRunMetadataFromResponse(response);\n if (runMetadata) payload?.onRunCreated?.(runMetadata);\n },\n }) as TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n >;\n }\n\n /**\n * Create a run.\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this run.\n * @param payload Payload for creating a run.\n * @returns The created run.\n */\n async create(\n threadId: string | null,\n assistantId: string,\n payload?: RunsCreatePayload\n ): Promise<Run> {\n const json: Record<string, unknown> = {\n input: payload?.input,\n command: payload?.command,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n feedback_keys: payload?.feedbackKeys,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n checkpoint: payload?.checkpoint,\n checkpoint_id: payload?.checkpointId,\n multitask_strategy: payload?.multitaskStrategy,\n after_seconds: payload?.afterSeconds,\n if_not_exists: payload?.ifNotExists,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n on_completion: payload?.onCompletion,\n langsmith_tracer: payload?._langsmithTracer\n ? {\n project_name: payload?._langsmithTracer?.projectName,\n example_id: payload?._langsmithTracer?.exampleId,\n }\n : undefined,\n };\n\n const endpoint = threadId === null ? \"/runs\" : `/threads/${threadId}/runs`;\n const [run, response] = await this.fetch<Run>(endpoint, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n withResponse: true,\n });\n\n const runMetadata = getRunMetadataFromResponse(response);\n if (runMetadata) payload?.onRunCreated?.(runMetadata);\n\n return run;\n }\n\n /**\n * Create a batch of stateless background runs.\n *\n * @param payloads An array of payloads for creating runs.\n * @returns An array of created runs.\n */\n async createBatch(\n payloads: (Omit<RunsCreatePayload, \"signal\"> & { assistantId: string })[],\n options?: { signal?: AbortSignal }\n ): Promise<Run[]> {\n const filteredPayloads = payloads\n .map((payload) => ({ ...payload, assistant_id: payload.assistantId }))\n .map((payload) => {\n return Object.fromEntries(\n Object.entries(payload).filter(([_, v]) => v !== undefined)\n );\n });\n\n return this.fetch<Run[]>(\"/runs/batch\", {\n method: \"POST\",\n json: filteredPayloads,\n signal: options?.signal,\n });\n }\n\n async wait(\n threadId: null,\n assistantId: string,\n payload?: Omit<RunsWaitPayload, \"multitaskStrategy\" | \"onCompletion\">\n ): Promise<ThreadState[\"values\"]>;\n\n async wait(\n threadId: string,\n assistantId: string,\n payload?: RunsWaitPayload\n ): Promise<ThreadState[\"values\"]>;\n\n /**\n * Create a run and wait for it to complete.\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this run.\n * @param payload Payload for creating a run.\n * @returns The last values chunk of the thread.\n */\n async wait(\n threadId: string | null,\n assistantId: string,\n payload?: RunsWaitPayload\n ): Promise<ThreadState[\"values\"]> {\n const json: Record<string, unknown> = {\n input: payload?.input,\n command: payload?.command,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n checkpoint: payload?.checkpoint,\n checkpoint_id: payload?.checkpointId,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n on_completion: payload?.onCompletion,\n on_disconnect: payload?.onDisconnect,\n after_seconds: payload?.afterSeconds,\n if_not_exists: payload?.ifNotExists,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n langsmith_tracer: payload?._langsmithTracer\n ? {\n project_name: payload?._langsmithTracer?.projectName,\n example_id: payload?._langsmithTracer?.exampleId,\n }\n : undefined,\n };\n const endpoint =\n threadId == null ? `/runs/wait` : `/threads/${threadId}/runs/wait`;\n const [run, response] = await this.fetch<ThreadState[\"values\"]>(endpoint, {\n method: \"POST\",\n json,\n timeoutMs: null,\n signal: payload?.signal,\n withResponse: true,\n });\n\n const runMetadata = getRunMetadataFromResponse(response);\n if (runMetadata) payload?.onRunCreated?.(runMetadata);\n\n const raiseError =\n payload?.raiseError !== undefined ? payload.raiseError : true;\n if (\n raiseError &&\n \"__error__\" in run &&\n typeof run.__error__ === \"object\" &&\n run.__error__ &&\n \"error\" in run.__error__ &&\n \"message\" in run.__error__\n ) {\n throw new Error(`${run.__error__?.error}: ${run.__error__?.message}`);\n }\n return run;\n }\n\n /**\n * List all runs for a thread.\n *\n * @param threadId The ID of the thread.\n * @param options Filtering and pagination options.\n * @returns List of runs.\n */\n async list(\n threadId: string,\n options?: {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n select?: RunSelectField[];\n signal?: AbortSignal;\n }\n ): Promise<Run[]> {\n return this.fetch<Run[]>(`/threads/${threadId}/runs`, {\n params: {\n limit: options?.limit ?? 10,\n offset: options?.offset ?? 0,\n status: options?.status ?? undefined,\n select: options?.select ?? undefined,\n },\n signal: options?.signal,\n });\n }\n\n /**\n * Get a run by ID.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @returns The run.\n */\n async get(\n threadId: string,\n runId: string,\n options?: { signal?: AbortSignal }\n ): Promise<Run> {\n return this.fetch<Run>(`/threads/${threadId}/runs/${runId}`, {\n signal: options?.signal,\n });\n }\n\n /**\n * Cancel a run.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @param wait Whether to block when canceling\n * @param action Action to take when cancelling the run. Possible values are `interrupt` or `rollback`. Default is `interrupt`.\n * @returns\n */\n async cancel(\n threadId: string,\n runId: string,\n wait: boolean = false,\n action: CancelAction = \"interrupt\",\n options: { signal?: AbortSignal } = {}\n ): Promise<void> {\n return this.fetch<void>(`/threads/${threadId}/runs/${runId}/cancel`, {\n method: \"POST\",\n params: { wait: wait ? \"1\" : \"0\", action },\n signal: options?.signal,\n });\n }\n\n /**\n * Cancel one or more runs.\n *\n * @param options Options for cancelling runs.\n * @returns\n */\n async cancelMany(options: {\n threadId?: string;\n runIds?: string[];\n status?: \"pending\" | \"running\" | \"all\";\n action?: CancelAction;\n signal?: AbortSignal;\n }): Promise<void> {\n return this.fetch<void>(`/runs/cancel`, {\n method: \"POST\",\n json: {\n thread_id: options.threadId,\n run_ids: options.runIds,\n status: options.status,\n },\n params: { action: options.action },\n signal: options.signal,\n });\n }\n\n /**\n * Block until a run is done.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @returns\n */\n async join(\n threadId: string,\n runId: string,\n options?: { cancelOnDisconnect?: boolean; signal?: AbortSignal }\n ): Promise<TStateType> {\n return this.fetch<TStateType>(`/threads/${threadId}/runs/${runId}/join`, {\n timeoutMs: null,\n params: { cancel_on_disconnect: options?.cancelOnDisconnect ? \"1\" : \"0\" },\n signal: options?.signal,\n });\n }\n\n /**\n * Stream output from a run in real-time, until the run is done.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @param options Additional options for controlling the stream behavior.\n * @returns An async generator yielding stream parts.\n */\n async *joinStream(\n threadId: string | undefined | null,\n runId: string,\n options?:\n | {\n signal?: AbortSignal;\n cancelOnDisconnect?: boolean;\n lastEventId?: string;\n streamMode?: StreamMode | StreamMode[];\n /**\n * Idle-reconnect policy.\n *\n * Guards against half-open sockets that hang with no\n * error or close; on idle the read re-joins with the last seen\n * `Last-Event-ID`.\n *\n * - `\"auto\"` (default): arms only once the\n * server's keep-alive heartbeats are observed and sizes the window\n * from their cadence;\n * - a `number`: a fixed idle window in ms;\n * - `0`: disables it.\n */\n streamIdleReconnect?: IdleReconnectMode;\n }\n | AbortSignal\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): AsyncGenerator<{ id?: string; event: StreamEvent; data: any }> {\n const opts =\n typeof options === \"object\" &&\n options != null &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n options instanceof AbortSignal\n ? { signal: options }\n : options;\n\n yield* this.streamWithRetry({\n endpoint:\n threadId != null\n ? `/threads/${threadId}/runs/${runId}/stream`\n : `/runs/${runId}/stream`,\n method: \"GET\",\n signal: opts?.signal,\n idleReconnect: opts?.streamIdleReconnect,\n headers: opts?.lastEventId\n ? { \"Last-Event-ID\": opts.lastEventId }\n : undefined,\n params: {\n cancel_on_disconnect: opts?.cancelOnDisconnect ? \"1\" : \"0\",\n stream_mode: opts?.streamMode,\n },\n });\n }\n\n /**\n * Delete a run.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @returns\n */\n async delete(\n threadId: string,\n runId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n return this.fetch<void>(`/threads/${threadId}/runs/${runId}`, {\n method: \"DELETE\",\n signal: options?.signal,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["BaseClient","encodePathSegment","getRunMetadataFromResponse"],"sources":["../../../src/client/runs/index.ts"],"sourcesContent":["import {\n CancelAction,\n DefaultValues,\n Run,\n RunSelectField,\n RunStatus,\n ThreadState,\n} from \"../../schema.js\";\nimport type {\n RunsCreatePayload,\n RunsStreamPayload,\n RunsWaitPayload,\n StreamEvent,\n} from \"../../types.js\";\nimport type { StreamMode, TypedAsyncGenerator } from \"../../types.stream.js\";\nimport type { IdleReconnectMode } from \"../../utils/stream.js\";\n\nimport {\n BaseClient,\n getRunMetadataFromResponse,\n encodePathSegment,\n} from \"../base.js\";\n\nexport class RunsClient<\n TStateType = DefaultValues,\n TUpdateType = TStateType,\n TCustomEventType = unknown,\n> extends BaseClient {\n stream<\n TStreamMode extends StreamMode | StreamMode[] = StreamMode,\n TSubgraphs extends boolean = false,\n >(\n threadId: null,\n assistantId: string,\n payload?: Omit<\n RunsStreamPayload<TStreamMode, TSubgraphs>,\n \"multitaskStrategy\" | \"onCompletion\"\n >\n ): TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n >;\n\n stream<\n TStreamMode extends StreamMode | StreamMode[] = StreamMode,\n TSubgraphs extends boolean = false,\n >(\n threadId: string,\n assistantId: string,\n payload?: RunsStreamPayload<TStreamMode, TSubgraphs>\n ): TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n >;\n\n /**\n * Create a run and stream the results.\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this run.\n * @param payload Payload for creating a run.\n */\n async *stream<\n TStreamMode extends StreamMode | StreamMode[] = StreamMode,\n TSubgraphs extends boolean = false,\n >(\n threadId: string | null,\n assistantId: string,\n payload?: RunsStreamPayload<TStreamMode, TSubgraphs>\n ): TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n > {\n const json: Record<string, unknown> = {\n input: payload?.input,\n command: payload?.command,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n feedback_keys: payload?.feedbackKeys,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n checkpoint: payload?.checkpoint,\n checkpoint_id: payload?.checkpointId,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n on_completion: payload?.onCompletion,\n on_disconnect: payload?.onDisconnect,\n after_seconds: payload?.afterSeconds,\n if_not_exists: payload?.ifNotExists,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n };\n\n yield* this.streamWithRetry({\n endpoint:\n threadId == null\n ? `/runs/stream`\n : `/threads/${encodePathSegment(threadId)}/runs/stream`,\n method: \"POST\",\n json,\n signal: payload?.signal,\n idleReconnect: payload?.streamIdleReconnect,\n onInitialResponse: (response) => {\n const runMetadata = getRunMetadataFromResponse(response);\n if (runMetadata) payload?.onRunCreated?.(runMetadata);\n },\n }) as TypedAsyncGenerator<\n TStreamMode,\n TSubgraphs,\n TStateType,\n TUpdateType,\n TCustomEventType\n >;\n }\n\n /**\n * Create a run.\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this run.\n * @param payload Payload for creating a run.\n * @returns The created run.\n */\n async create(\n threadId: string | null,\n assistantId: string,\n payload?: RunsCreatePayload\n ): Promise<Run> {\n const json: Record<string, unknown> = {\n input: payload?.input,\n command: payload?.command,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n stream_mode: payload?.streamMode,\n stream_subgraphs: payload?.streamSubgraphs,\n stream_resumable: payload?.streamResumable,\n feedback_keys: payload?.feedbackKeys,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n webhook: payload?.webhook,\n checkpoint: payload?.checkpoint,\n checkpoint_id: payload?.checkpointId,\n multitask_strategy: payload?.multitaskStrategy,\n after_seconds: payload?.afterSeconds,\n if_not_exists: payload?.ifNotExists,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n on_completion: payload?.onCompletion,\n langsmith_tracer: payload?._langsmithTracer\n ? {\n project_name: payload?._langsmithTracer?.projectName,\n example_id: payload?._langsmithTracer?.exampleId,\n }\n : undefined,\n };\n\n const endpoint =\n threadId === null\n ? \"/runs\"\n : `/threads/${encodePathSegment(threadId)}/runs`;\n const [run, response] = await this.fetch<Run>(endpoint, {\n method: \"POST\",\n json,\n signal: payload?.signal,\n withResponse: true,\n });\n\n const runMetadata = getRunMetadataFromResponse(response);\n if (runMetadata) payload?.onRunCreated?.(runMetadata);\n\n return run;\n }\n\n /**\n * Create a batch of stateless background runs.\n *\n * @param payloads An array of payloads for creating runs.\n * @returns An array of created runs.\n */\n async createBatch(\n payloads: (Omit<RunsCreatePayload, \"signal\"> & { assistantId: string })[],\n options?: { signal?: AbortSignal }\n ): Promise<Run[]> {\n const filteredPayloads = payloads\n .map((payload) => ({ ...payload, assistant_id: payload.assistantId }))\n .map((payload) => {\n return Object.fromEntries(\n Object.entries(payload).filter(([_, v]) => v !== undefined)\n );\n });\n\n return this.fetch<Run[]>(\"/runs/batch\", {\n method: \"POST\",\n json: filteredPayloads,\n signal: options?.signal,\n });\n }\n\n async wait(\n threadId: null,\n assistantId: string,\n payload?: Omit<RunsWaitPayload, \"multitaskStrategy\" | \"onCompletion\">\n ): Promise<ThreadState[\"values\"]>;\n\n async wait(\n threadId: string,\n assistantId: string,\n payload?: RunsWaitPayload\n ): Promise<ThreadState[\"values\"]>;\n\n /**\n * Create a run and wait for it to complete.\n *\n * @param threadId The ID of the thread.\n * @param assistantId Assistant ID to use for this run.\n * @param payload Payload for creating a run.\n * @returns The last values chunk of the thread.\n */\n async wait(\n threadId: string | null,\n assistantId: string,\n payload?: RunsWaitPayload\n ): Promise<ThreadState[\"values\"]> {\n const json: Record<string, unknown> = {\n input: payload?.input,\n command: payload?.command,\n config: payload?.config,\n context: payload?.context,\n metadata: payload?.metadata,\n assistant_id: assistantId,\n interrupt_before: payload?.interruptBefore,\n interrupt_after: payload?.interruptAfter,\n checkpoint: payload?.checkpoint,\n checkpoint_id: payload?.checkpointId,\n webhook: payload?.webhook,\n multitask_strategy: payload?.multitaskStrategy,\n on_completion: payload?.onCompletion,\n on_disconnect: payload?.onDisconnect,\n after_seconds: payload?.afterSeconds,\n if_not_exists: payload?.ifNotExists,\n checkpoint_during: payload?.checkpointDuring,\n durability: payload?.durability,\n langsmith_tracer: payload?._langsmithTracer\n ? {\n project_name: payload?._langsmithTracer?.projectName,\n example_id: payload?._langsmithTracer?.exampleId,\n }\n : undefined,\n };\n const endpoint =\n threadId == null\n ? `/runs/wait`\n : `/threads/${encodePathSegment(threadId)}/runs/wait`;\n const [run, response] = await this.fetch<ThreadState[\"values\"]>(endpoint, {\n method: \"POST\",\n json,\n timeoutMs: null,\n signal: payload?.signal,\n withResponse: true,\n });\n\n const runMetadata = getRunMetadataFromResponse(response);\n if (runMetadata) payload?.onRunCreated?.(runMetadata);\n\n const raiseError =\n payload?.raiseError !== undefined ? payload.raiseError : true;\n if (\n raiseError &&\n \"__error__\" in run &&\n typeof run.__error__ === \"object\" &&\n run.__error__ &&\n \"error\" in run.__error__ &&\n \"message\" in run.__error__\n ) {\n throw new Error(`${run.__error__?.error}: ${run.__error__?.message}`);\n }\n return run;\n }\n\n /**\n * List all runs for a thread.\n *\n * @param threadId The ID of the thread.\n * @param options Filtering and pagination options.\n * @returns List of runs.\n */\n async list(\n threadId: string,\n options?: {\n limit?: number;\n offset?: number;\n status?: RunStatus;\n select?: RunSelectField[];\n signal?: AbortSignal;\n }\n ): Promise<Run[]> {\n return this.fetch<Run[]>(`/threads/${encodePathSegment(threadId)}/runs`, {\n params: {\n limit: options?.limit ?? 10,\n offset: options?.offset ?? 0,\n status: options?.status ?? undefined,\n select: options?.select ?? undefined,\n },\n signal: options?.signal,\n });\n }\n\n /**\n * Get a run by ID.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @returns The run.\n */\n async get(\n threadId: string,\n runId: string,\n options?: { signal?: AbortSignal }\n ): Promise<Run> {\n return this.fetch<Run>(\n `/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}`,\n {\n signal: options?.signal,\n }\n );\n }\n\n /**\n * Cancel a run.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @param wait Whether to block when canceling\n * @param action Action to take when cancelling the run. Possible values are `interrupt` or `rollback`. Default is `interrupt`.\n * @returns\n */\n async cancel(\n threadId: string,\n runId: string,\n wait: boolean = false,\n action: CancelAction = \"interrupt\",\n options: { signal?: AbortSignal } = {}\n ): Promise<void> {\n return this.fetch<void>(\n `/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}/cancel`,\n {\n method: \"POST\",\n params: { wait: wait ? \"1\" : \"0\", action },\n signal: options?.signal,\n }\n );\n }\n\n /**\n * Cancel one or more runs.\n *\n * @param options Options for cancelling runs.\n * @returns\n */\n async cancelMany(options: {\n threadId?: string;\n runIds?: string[];\n status?: \"pending\" | \"running\" | \"all\";\n action?: CancelAction;\n signal?: AbortSignal;\n }): Promise<void> {\n return this.fetch<void>(`/runs/cancel`, {\n method: \"POST\",\n json: {\n thread_id: options.threadId,\n run_ids: options.runIds,\n status: options.status,\n },\n params: { action: options.action },\n signal: options.signal,\n });\n }\n\n /**\n * Block until a run is done.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @returns\n */\n async join(\n threadId: string,\n runId: string,\n options?: { cancelOnDisconnect?: boolean; signal?: AbortSignal }\n ): Promise<TStateType> {\n return this.fetch<TStateType>(\n `/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}/join`,\n {\n timeoutMs: null,\n params: {\n cancel_on_disconnect: options?.cancelOnDisconnect ? \"1\" : \"0\",\n },\n signal: options?.signal,\n }\n );\n }\n\n /**\n * Stream output from a run in real-time, until the run is done.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @param options Additional options for controlling the stream behavior.\n * @returns An async generator yielding stream parts.\n */\n async *joinStream(\n threadId: string | undefined | null,\n runId: string,\n options?:\n | {\n signal?: AbortSignal;\n cancelOnDisconnect?: boolean;\n lastEventId?: string;\n streamMode?: StreamMode | StreamMode[];\n /**\n * Idle-reconnect policy.\n *\n * Guards against half-open sockets that hang with no\n * error or close; on idle the read re-joins with the last seen\n * `Last-Event-ID`.\n *\n * - `\"auto\"` (default): arms only once the\n * server's keep-alive heartbeats are observed and sizes the window\n * from their cadence;\n * - a `number`: a fixed idle window in ms;\n * - `0`: disables it.\n */\n streamIdleReconnect?: IdleReconnectMode;\n }\n | AbortSignal\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): AsyncGenerator<{ id?: string; event: StreamEvent; data: any }> {\n const opts =\n typeof options === \"object\" &&\n options != null &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n options instanceof AbortSignal\n ? { signal: options }\n : options;\n\n yield* this.streamWithRetry({\n endpoint:\n threadId != null\n ? `/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}/stream`\n : `/runs/${encodePathSegment(runId)}/stream`,\n method: \"GET\",\n signal: opts?.signal,\n idleReconnect: opts?.streamIdleReconnect,\n headers: opts?.lastEventId\n ? { \"Last-Event-ID\": opts.lastEventId }\n : undefined,\n params: {\n cancel_on_disconnect: opts?.cancelOnDisconnect ? \"1\" : \"0\",\n stream_mode: opts?.streamMode,\n },\n });\n }\n\n /**\n * Delete a run.\n *\n * @param threadId The ID of the thread.\n * @param runId The ID of the run.\n * @returns\n */\n async delete(\n threadId: string,\n runId: string,\n options?: { signal?: AbortSignal }\n ): Promise<void> {\n return this.fetch<void>(\n `/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}`,\n {\n method: \"DELETE\",\n signal: options?.signal,\n }\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/client/runs/index.ts"],"mappings":";;;;;;;cAmBa,UAAA,cACE,aAAA,gBACC,UAAA,sCAEN,UAAA;EACR,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CACR,iBAAA,CAAkB,WAAA,EAAa,UAAA,2CAGhC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAGF,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,UACA,WAAA,UACA,OAAA,GAAU,iBAAA,CAAkB,WAAA,EAAa,UAAA,IACxC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAnCmB;;;;;;;;EAgHf,MAAA,CACJ,QAAA,iBACA,WAAA,UACA,OAAA,GAAU,iBAAA,GACT,OAAA,CAAQ,GAAA;EAxGP;;;;;;EA2JE,WAAA,CACJ,QAAA,GAAW,IAAA,CAAK,iBAAA;IAAiC,WAAA;EAAA,MACjD,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAgBL,IAAA,CACJ,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CAAK,eAAA,0CACd,OAAA,CAAQ,WAAA;EAEL,IAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,eAAA,GACT,OAAA,CAAQ,WAAA;EAvKC;;;;;;;EAmPN,IAAA,CACJ,QAAA,UACA,OAAA;IACE,KAAA;IACA,MAAA;IACA,MAAA,GAAS,SAAA;IACT,MAAA,GAAS,cAAA;IACT,MAAA,GAAS,WAAA;EAAA,IAEV,OAAA,CAAQ,GAAA;EA/GR;;;;;;;EAkIG,GAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAzBE;;;;;;;;;EAwCP,MAAA,CACJ,QAAA,UACA,KAAA,UACA,IAAA,YACA,MAAA,GAAQ,YAAA,EACR,OAAA;IAAW,MAAA,GAAS,WAAA;EAAA,IACnB,OAAA;EA2CkD;;;;;;EA7B/C,UAAA,CAAW,OAAA;IACf,QAAA;IACA,MAAA;IACA,MAAA;IACA,MAAA,GAAS,YAAA;IACT,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;EArVc;;;;;;;EAyWZ,IAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,kBAAA;IAA8B,MAAA,GAAS,WAAA;EAAA,IAClD,OAAA,CAAQ,UAAA;EA3WwB;;;;;;;;EA2X5B,UAAA,CACL,QAAA,6BACA,KAAA,UACA,OAAA;IAEM,MAAA,GAAS,WAAA;IACT,kBAAA;IACA,WAAA;IACA,UAAA,GAAa,UAAA,GAAa,UAAA;IAvXhC;;;;;;;;;;;;;IAqYM,mBAAA,GAAsB,iBAAA;EAAA,IAExB,WAAA,GAEH,cAAA;IAAiB,EAAA;IAAa,KAAA,EAAO,WAAA;IAAa,IAAA;EAAA;EAzXnD;;;;;;;EA2ZI,MAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;AAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/client/runs/index.ts"],"mappings":";;;;;;;cAuBa,UAAA,cACE,aAAA,gBACC,UAAA,sCAEN,UAAA;EACR,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CACR,iBAAA,CAAkB,WAAA,EAAa,UAAA,2CAGhC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAGF,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,UACA,WAAA,UACA,OAAA,GAAU,iBAAA,CAAkB,WAAA,EAAa,UAAA,IACxC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAnCmB;;;;;;;;EAkHf,MAAA,CACJ,QAAA,iBACA,WAAA,UACA,OAAA,GAAU,iBAAA,GACT,OAAA,CAAQ,GAAA;EA1GP;;;;;;EAgKE,WAAA,CACJ,QAAA,GAAW,IAAA,CAAK,iBAAA;IAAiC,WAAA;EAAA,MACjD,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAgBL,IAAA,CACJ,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CAAK,eAAA,0CACd,OAAA,CAAQ,WAAA;EAEL,IAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,eAAA,GACT,OAAA,CAAQ,WAAA;EA5KC;;;;;;;EA0PN,IAAA,CACJ,QAAA,UACA,OAAA;IACE,KAAA;IACA,MAAA;IACA,MAAA,GAAS,SAAA;IACT,MAAA,GAAS,cAAA;IACT,MAAA,GAAS,WAAA;EAAA,IAEV,OAAA,CAAQ,GAAA;EAjHR;;;;;;;EAoIG,GAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAzBE;;;;;;;;;EA2CP,MAAA,CACJ,QAAA,UACA,KAAA,UACA,IAAA,YACA,MAAA,GAAQ,YAAA,EACR,OAAA;IAAW,MAAA,GAAS,WAAA;EAAA,IACnB,OAAA;EA8CkD;;;;;;EA7B/C,UAAA,CAAW,OAAA;IACf,QAAA;IACA,MAAA;IACA,MAAA;IACA,MAAA,GAAS,YAAA;IACT,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;EAlWc;;;;;;;EAsXZ,IAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,kBAAA;IAA8B,MAAA,GAAS,WAAA;EAAA,IAClD,OAAA,CAAQ,UAAA;EAxXwB;;;;;;;;EA6Y5B,UAAA,CACL,QAAA,6BACA,KAAA,UACA,OAAA;IAEM,MAAA,GAAS,WAAA;IACT,kBAAA;IACA,WAAA;IACA,UAAA,GAAa,UAAA,GAAa,UAAA;IAzYhC;;;;;;;;;;;;;IAuZM,mBAAA,GAAsB,iBAAA;EAAA,IAExB,WAAA,GAEH,cAAA;IAAiB,EAAA;IAAa,KAAA,EAAO,WAAA;IAAa,IAAA;EAAA;EA3YnD;;;;;;;EA6aI,MAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/client/runs/index.ts"],"mappings":";;;;;;;cAmBa,UAAA,cACE,aAAA,gBACC,UAAA,sCAEN,UAAA;EACR,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CACR,iBAAA,CAAkB,WAAA,EAAa,UAAA,2CAGhC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAGF,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,UACA,WAAA,UACA,OAAA,GAAU,iBAAA,CAAkB,WAAA,EAAa,UAAA,IACxC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAnCmB;;;;;;;;EAgHf,MAAA,CACJ,QAAA,iBACA,WAAA,UACA,OAAA,GAAU,iBAAA,GACT,OAAA,CAAQ,GAAA;EAxGP;;;;;;EA2JE,WAAA,CACJ,QAAA,GAAW,IAAA,CAAK,iBAAA;IAAiC,WAAA;EAAA,MACjD,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAgBL,IAAA,CACJ,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CAAK,eAAA,0CACd,OAAA,CAAQ,WAAA;EAEL,IAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,eAAA,GACT,OAAA,CAAQ,WAAA;EAvKC;;;;;;;EAmPN,IAAA,CACJ,QAAA,UACA,OAAA;IACE,KAAA;IACA,MAAA;IACA,MAAA,GAAS,SAAA;IACT,MAAA,GAAS,cAAA;IACT,MAAA,GAAS,WAAA;EAAA,IAEV,OAAA,CAAQ,GAAA;EA/GR;;;;;;;EAkIG,GAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAzBE;;;;;;;;;EAwCP,MAAA,CACJ,QAAA,UACA,KAAA,UACA,IAAA,YACA,MAAA,GAAQ,YAAA,EACR,OAAA;IAAW,MAAA,GAAS,WAAA;EAAA,IACnB,OAAA;EA2CkD;;;;;;EA7B/C,UAAA,CAAW,OAAA;IACf,QAAA;IACA,MAAA;IACA,MAAA;IACA,MAAA,GAAS,YAAA;IACT,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;EArVc;;;;;;;EAyWZ,IAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,kBAAA;IAA8B,MAAA,GAAS,WAAA;EAAA,IAClD,OAAA,CAAQ,UAAA;EA3WwB;;;;;;;;EA2X5B,UAAA,CACL,QAAA,6BACA,KAAA,UACA,OAAA;IAEM,MAAA,GAAS,WAAA;IACT,kBAAA;IACA,WAAA;IACA,UAAA,GAAa,UAAA,GAAa,UAAA;IAvXhC;;;;;;;;;;;;;IAqYM,mBAAA,GAAsB,iBAAA;EAAA,IAExB,WAAA,GAEH,cAAA;IAAiB,EAAA;IAAa,KAAA,EAAO,WAAA;IAAa,IAAA;EAAA;EAzXnD;;;;;;;EA2ZI,MAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;AAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/client/runs/index.ts"],"mappings":";;;;;;;cAuBa,UAAA,cACE,aAAA,gBACC,UAAA,sCAEN,UAAA;EACR,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CACR,iBAAA,CAAkB,WAAA,EAAa,UAAA,2CAGhC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAGF,MAAA,qBACsB,UAAA,GAAa,UAAA,KAAe,UAAA,qCAAA,CAGhD,QAAA,UACA,WAAA,UACA,OAAA,GAAU,iBAAA,CAAkB,WAAA,EAAa,UAAA,IACxC,mBAAA,CACD,WAAA,EACA,UAAA,EACA,UAAA,EACA,WAAA,EACA,gBAAA;EAnCmB;;;;;;;;EAkHf,MAAA,CACJ,QAAA,iBACA,WAAA,UACA,OAAA,GAAU,iBAAA,GACT,OAAA,CAAQ,GAAA;EA1GP;;;;;;EAgKE,WAAA,CACJ,QAAA,GAAW,IAAA,CAAK,iBAAA;IAAiC,WAAA;EAAA,MACjD,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAgBL,IAAA,CACJ,QAAA,QACA,WAAA,UACA,OAAA,GAAU,IAAA,CAAK,eAAA,0CACd,OAAA,CAAQ,WAAA;EAEL,IAAA,CACJ,QAAA,UACA,WAAA,UACA,OAAA,GAAU,eAAA,GACT,OAAA,CAAQ,WAAA;EA5KC;;;;;;;EA0PN,IAAA,CACJ,QAAA,UACA,OAAA;IACE,KAAA;IACA,MAAA;IACA,MAAA,GAAS,SAAA;IACT,MAAA,GAAS,cAAA;IACT,MAAA,GAAS,WAAA;EAAA,IAEV,OAAA,CAAQ,GAAA;EAjHR;;;;;;;EAoIG,GAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA,CAAQ,GAAA;EAzBE;;;;;;;;;EA2CP,MAAA,CACJ,QAAA,UACA,KAAA,UACA,IAAA,YACA,MAAA,GAAQ,YAAA,EACR,OAAA;IAAW,MAAA,GAAS,WAAA;EAAA,IACnB,OAAA;EA8CkD;;;;;;EA7B/C,UAAA,CAAW,OAAA;IACf,QAAA;IACA,MAAA;IACA,MAAA;IACA,MAAA,GAAS,YAAA;IACT,MAAA,GAAS,WAAA;EAAA,IACP,OAAA;EAlWc;;;;;;;EAsXZ,IAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,kBAAA;IAA8B,MAAA,GAAS,WAAA;EAAA,IAClD,OAAA,CAAQ,UAAA;EAxXwB;;;;;;;;EA6Y5B,UAAA,CACL,QAAA,6BACA,KAAA,UACA,OAAA;IAEM,MAAA,GAAS,WAAA;IACT,kBAAA;IACA,WAAA;IACA,UAAA,GAAa,UAAA,GAAa,UAAA;IAzYhC;;;;;;;;;;;;;IAuZM,mBAAA,GAAsB,iBAAA;EAAA,IAExB,WAAA,GAEH,cAAA;IAAiB,EAAA;IAAa,KAAA,EAAO,WAAA;IAAa,IAAA;EAAA;EA3YnD;;;;;;;EA6aI,MAAA,CACJ,QAAA,UACA,KAAA,UACA,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACpB,OAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- import { BaseClient, getRunMetadataFromResponse } from "../base.js";
1
+ import { BaseClient, encodePathSegment, getRunMetadataFromResponse } from "../base.js";
2
2
  //#region src/client/runs/index.ts
3
3
  var RunsClient = class extends BaseClient {
4
4
  /**
@@ -34,7 +34,7 @@ var RunsClient = class extends BaseClient {
34
34
  durability: payload?.durability
35
35
  };
36
36
  yield* this.streamWithRetry({
37
- endpoint: threadId == null ? `/runs/stream` : `/threads/${threadId}/runs/stream`,
37
+ endpoint: threadId == null ? `/runs/stream` : `/threads/${encodePathSegment(threadId)}/runs/stream`,
38
38
  method: "POST",
39
39
  json,
40
40
  signal: payload?.signal,
@@ -81,7 +81,7 @@ var RunsClient = class extends BaseClient {
81
81
  example_id: payload?._langsmithTracer?.exampleId
82
82
  } : void 0
83
83
  };
84
- const endpoint = threadId === null ? "/runs" : `/threads/${threadId}/runs`;
84
+ const endpoint = threadId === null ? "/runs" : `/threads/${encodePathSegment(threadId)}/runs`;
85
85
  const [run, response] = await this.fetch(endpoint, {
86
86
  method: "POST",
87
87
  json,
@@ -144,7 +144,7 @@ var RunsClient = class extends BaseClient {
144
144
  example_id: payload?._langsmithTracer?.exampleId
145
145
  } : void 0
146
146
  };
147
- const endpoint = threadId == null ? `/runs/wait` : `/threads/${threadId}/runs/wait`;
147
+ const endpoint = threadId == null ? `/runs/wait` : `/threads/${encodePathSegment(threadId)}/runs/wait`;
148
148
  const [run, response] = await this.fetch(endpoint, {
149
149
  method: "POST",
150
150
  json,
@@ -165,7 +165,7 @@ var RunsClient = class extends BaseClient {
165
165
  * @returns List of runs.
166
166
  */
167
167
  async list(threadId, options) {
168
- return this.fetch(`/threads/${threadId}/runs`, {
168
+ return this.fetch(`/threads/${encodePathSegment(threadId)}/runs`, {
169
169
  params: {
170
170
  limit: options?.limit ?? 10,
171
171
  offset: options?.offset ?? 0,
@@ -183,7 +183,7 @@ var RunsClient = class extends BaseClient {
183
183
  * @returns The run.
184
184
  */
185
185
  async get(threadId, runId, options) {
186
- return this.fetch(`/threads/${threadId}/runs/${runId}`, { signal: options?.signal });
186
+ return this.fetch(`/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}`, { signal: options?.signal });
187
187
  }
188
188
  /**
189
189
  * Cancel a run.
@@ -195,7 +195,7 @@ var RunsClient = class extends BaseClient {
195
195
  * @returns
196
196
  */
197
197
  async cancel(threadId, runId, wait = false, action = "interrupt", options = {}) {
198
- return this.fetch(`/threads/${threadId}/runs/${runId}/cancel`, {
198
+ return this.fetch(`/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}/cancel`, {
199
199
  method: "POST",
200
200
  params: {
201
201
  wait: wait ? "1" : "0",
@@ -230,7 +230,7 @@ var RunsClient = class extends BaseClient {
230
230
  * @returns
231
231
  */
232
232
  async join(threadId, runId, options) {
233
- return this.fetch(`/threads/${threadId}/runs/${runId}/join`, {
233
+ return this.fetch(`/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}/join`, {
234
234
  timeoutMs: null,
235
235
  params: { cancel_on_disconnect: options?.cancelOnDisconnect ? "1" : "0" },
236
236
  signal: options?.signal
@@ -247,7 +247,7 @@ var RunsClient = class extends BaseClient {
247
247
  async *joinStream(threadId, runId, options) {
248
248
  const opts = typeof options === "object" && options != null && options instanceof AbortSignal ? { signal: options } : options;
249
249
  yield* this.streamWithRetry({
250
- endpoint: threadId != null ? `/threads/${threadId}/runs/${runId}/stream` : `/runs/${runId}/stream`,
250
+ endpoint: threadId != null ? `/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}/stream` : `/runs/${encodePathSegment(runId)}/stream`,
251
251
  method: "GET",
252
252
  signal: opts?.signal,
253
253
  idleReconnect: opts?.streamIdleReconnect,
@@ -266,7 +266,7 @@ var RunsClient = class extends BaseClient {
266
266
  * @returns
267
267
  */
268
268
  async delete(threadId, runId, options) {
269
- return this.fetch(`/threads/${threadId}/runs/${runId}`, {
269
+ return this.fetch(`/threads/${encodePathSegment(threadId)}/runs/${encodePathSegment(runId)}`, {
270
270
  method: "DELETE",
271
271
  signal: options?.signal
272
272
  });