@beakr/sdk 0.1.0 → 0.1.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/http-date.ts","../src/errors.ts","../src/sources.ts","../src/answers.ts","../src/node-builtins.ts","../src/service-account.ts","../src/cli-login.ts","../src/sha256.ts","../src/cli-token.ts","../src/redact.ts","../src/replay.ts","../src/version.ts","../src/core.ts","../src/paths.ts","../src/resources/base.ts","../src/resources/runs.ts","../src/generated/operations.ts","../src/resources/conversations.ts","../src/resources/external-users.ts","../src/resources/end-user-tokens.ts","../src/resources/engine.ts","../src/resources/files.ts","../src/resources/integrations.ts","../src/resources/interviews.ts","../src/resources/jobs.ts","../src/resources/knowledge.ts","../src/resources/labels.ts","../src/resources/me.ts","../src/resources/members.ts","../src/capabilities.ts","../src/resources/meta.ts","../src/resources/org-admin.ts","../src/resources/knowledge-readiness.ts","../src/resources/model-refusals.ts","../src/resources/projects.ts","../src/resources/skills.ts","../src/resources/file-types.ts","../src/resources/folder-upload.ts","../src/resources/batch-upload.ts","../src/resources/uploads.ts","../src/client.ts"],"sourcesContent":["export { Beakr } from \"./client.js\";\nexport {\n DEFAULT_BASE_URL,\n type ClientOptions,\n type FetchLike,\n type RequestOptions,\n type TokenPair,\n} from \"./core.js\";\nexport * from \"./errors.js\";\nexport { CAPABILITIES_TTL_MS, Capabilities, forgetCapabilities } from \"./capabilities.js\";\nexport {\n QUICK_RESEARCH_TIMEOUT_MS,\n RESEARCH_TIMEOUT_MS,\n resultText,\n type KnowledgeResult,\n type KnowledgeWriteResult,\n type ProposalFiledBy,\n type StagedProposal,\n type WikiProposal,\n type WikiProposalPage,\n type ListedWikiProposal,\n type ResearchOptions,\n type ResearchResult,\n type DocumentsResult,\n type DocumentsSearchOptions,\n type RowsOptions,\n} from \"./resources/knowledge.js\";\nexport type {\n ConversationClient,\n SourceRead,\n ConversationHit,\n ConversationImported,\n ConversationPage,\n ConversationSummary,\n ImportOptions,\n ImportedMessage,\n SearchConversationsOptions,\n} from \"./resources/conversations.js\";\nexport type { MintKeyOptions } from \"./resources/org-admin.js\";\nexport type {\n AnswerOptions,\n RunEvent,\n RunStatus,\n StartRunOptions,\n StartedRun,\n ThreadSummary,\n} from \"./resources/runs.js\";\nexport type { AgentContext, ContextOptions } from \"./resources/engine.js\";\nexport {\n AnswerBuilder,\n RunFailedError,\n RunNeedsInputError,\n TextStream,\n numberCitations,\n type Answer,\n type RunQuestion,\n} from \"./answers.js\";\nexport {\n downloadHint,\n publicSource,\n UPLOAD_PROVIDER,\n sourceWhere,\n type SourceEvidence,\n type SourceExcerpt,\n type SourceLocation,\n type SourceRecord,\n type SourceSection,\n type SourceStatus,\n} from \"./sources.js\";\nexport type {\n EndUserToken,\n EndUserTokenPage,\n MintEndUserTokenOptions,\n} from \"./resources/end-user-tokens.js\";\nexport type { ExternalUser, ExternalUserPage } from \"./resources/external-users.js\";\nexport type {\n IntegrationTool,\n IntegrationToolPage,\n IntegrationToolResult,\n ToolsQuery,\n} from \"./resources/integrations.js\";\nexport type {\n CreateLinkOptions,\n InterviewLink,\n InterviewResult,\n SendableInterviewPage,\n SendableLink,\n} from \"./resources/interviews.js\";\nexport type { Label, LabelPage } from \"./resources/labels.js\";\nexport {\n SKILL_MD,\n SkillProposals,\n Skills,\n bundleSha256,\n readSkillFolder,\n type CreateSkillOptions,\n type CreatedSkill,\n type ListSkillsQuery,\n type Skill,\n type SkillBundle,\n type SkillDetail,\n type SkillFiles,\n type SkillOrigin,\n type SkillOwner,\n type SkillPage,\n type SkillProposal,\n type SkillVisibility,\n type UploadBundleOptions,\n} from \"./resources/skills.js\";\nexport {\n KnowledgeFailedError,\n KnowledgeTimeoutError,\n alreadyUploadedOutcome,\n waitForFilesKnowledge,\n waitForKnowledge,\n type AlreadyUploaded,\n type KnowledgeWaitOptions,\n} from \"./resources/knowledge-readiness.js\";\nexport type {\n KnowledgeFailedFile,\n KnowledgeRetryResult,\n ProjectKnowledgeStatus,\n ProjectKnowledgeProfile,\n ProjectKnowledgeProfileInput,\n ProjectKnowledgeProfilePatch,\n} from \"./resources/projects.js\";\nexport {\n ModelRefusals,\n type ModelRefusalEvents,\n type ModelRefusalFiles,\n type ModelRefusalSummary,\n type ModelRefusalWindow,\n} from \"./resources/model-refusals.js\";\nexport {\n JobFailedError,\n JobTimeoutError,\n TERMINAL_JOB_STATUSES,\n jobIdOf,\n type Job,\n type JobReference,\n type JobWaitOptions,\n} from \"./resources/jobs.js\";\nexport {\n MULTIPART_THRESHOLD,\n UploadInterruptedError,\n type BatchStatus,\n type FileBody,\n type UploadComplete,\n type UploadManyResult,\n type UploadFileOptions,\n type UploadSession,\n type UploadedPart,\n} from \"./resources/uploads.js\";\nexport {\n type FolderEntry,\n type UploadFolderOptions,\n type UploadedFolderFile,\n} from \"./resources/folder-upload.js\";\nexport {\n MAX_BATCH_FILES,\n type BatchUpload,\n type UploadManyOptions,\n} from \"./resources/batch-upload.js\";\nexport { detectArtifactType, guessMimeType } from \"./resources/file-types.js\";\nexport type {\n DownloadLink,\n DownloadLocation,\n DownloadedFile,\n DownloadedReference,\n FileRead,\n ReadFileOptions,\n} from \"./resources/files.js\";\nexport type {\n BodyOf,\n JsonObject,\n Page,\n ResponseOf,\n components,\n operations,\n paths,\n} from \"./types.js\";\nexport { VERSION } from \"./version.js\";\nexport {\n parseServiceAccountCredentials,\n readServiceAccountFile,\n SERVICE_ACCOUNT_FILE_ENV,\n SERVICE_ACCOUNT_FILE_TYPE,\n type ServiceAccountCredentials,\n} from \"./service-account.js\";\nexport { OPERATIONS, BeakrApi, type OperationName } from \"./generated/operations.js\";\nexport type { CallOptions, OperationResponse } from \"./operation-types.js\";\nexport type {\n QueryAggregate,\n QueryAggregateFn,\n QueryAsOfCondition,\n QueryCondition,\n QueryConnectedToCondition,\n QueryEntityCondition,\n QueryEntityTypeCondition,\n QueryFieldCondition,\n QueryFieldMatch,\n QueryFromTable,\n QueryJoin,\n QueryLinkOp,\n QueryOrderBy,\n QuerySemantic,\n QuerySpec,\n QueryTable,\n QueryTextOp,\n QueryToCondition,\n QueryValueCondition,\n QueryValueOp,\n QueryWhenCondition,\n} from \"./resources/query-spec.js\";\n","/**\n * Parse an HTTP-date (RFC 9110 section 5.6.7).\n *\n * A `Retry-After` header may carry an HTTP-date instead of a number of seconds\n * (RFC 9110 section 10.2.3). Senders must use IMF-fixdate, but recipients must\n * also accept the two obsolete forms, RFC 850 and ANSI C `asctime()`:\n *\n * Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate\n * Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format\n * Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format\n *\n * The grammar is matched here rather than with `Date.parse`, whose handling of\n * anything but IMF-fixdate is implementation-defined (and which would accept a\n * non-GMT zone or an ISO 8601 string). The Python SDK\n * (beakr-python's `src/beakr_sdk/_http_date.py`) implements the same grammar so\n * both SDKs agree on every header.\n */\n\nconst MONTHS = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\nconst DAY = \"(?:mon|tue|wed|thu|fri|sat|sun)\";\nconst DAY_LONG = \"(?:monday|tuesday|wednesday|thursday|friday|saturday|sunday)\";\nconst MONTH = `(?<month>${MONTHS.join(\"|\")})`;\nconst TIME = \"(?<hour>\\\\d{2}):(?<minute>\\\\d{2}):(?<second>\\\\d{2})\";\n\nconst IMF_FIXDATE = new RegExp(`^${DAY}, (?<day>\\\\d{2}) ${MONTH} (?<year>\\\\d{4}) ${TIME} GMT$`, \"i\");\nconst RFC850 = new RegExp(`^${DAY_LONG}, (?<day>\\\\d{2})-${MONTH}-(?<year>\\\\d{2}) ${TIME} GMT$`, \"i\");\nconst ASCTIME = new RegExp(`^${DAY} ${MONTH} (?<day>\\\\d{2}| \\\\d) ${TIME} (?<year>\\\\d{4})$`, \"i\");\n\n/**\n * The epoch milliseconds an HTTP-date names, or `undefined` when it is not one.\n *\n * `nowMs` resolves the RFC 850 two-digit year: a year that would land more than\n * 50 years after now is the most recent past year with those digits.\n */\nexport function parseHttpDate(value: string, nowMs: number): number | undefined {\n const text = value.trim();\n for (const pattern of [IMF_FIXDATE, RFC850, ASCTIME]) {\n const groups = pattern.exec(text)?.groups;\n if (!groups) continue;\n let year = Number(groups[\"year\"]);\n if (pattern === RFC850) year = expandTwoDigitYear(year, new Date(nowMs).getUTCFullYear());\n const month = MONTHS.indexOf(groups[\"month\"]!.toLowerCase());\n const day = Number(groups[\"day\"]);\n const hour = Number(groups[\"hour\"]);\n const minute = Number(groups[\"minute\"]);\n // RFC 9110 allows second 60 for a leap second; Date does not.\n const parsedSecond = Number(groups[\"second\"]);\n const second = parsedSecond === 60 ? 59 : parsedSecond;\n const ms = Date.UTC(year, month, day, hour, minute, second);\n // Date.UTC rolls out-of-range fields over (Feb 30 -> Mar 2); those are not dates.\n const check = new Date(ms);\n if (\n check.getUTCFullYear() !== year ||\n check.getUTCMonth() !== month ||\n check.getUTCDate() !== day ||\n check.getUTCHours() !== hour ||\n check.getUTCMinutes() !== minute ||\n check.getUTCSeconds() !== second\n ) {\n return undefined;\n }\n return ms;\n }\n return undefined;\n}\n\nfunction expandTwoDigitYear(twoDigits: number, nowYear: number): number {\n let year = nowYear - (nowYear % 100) + twoDigits;\n if (year > nowYear + 50) year -= 100;\n return year;\n}\n","/**\n * Typed errors. Every error carries the HTTP status, the machine-readable\n * `code` from the error envelope, a message and the request id the server\n * logged the call under.\n *\n * The envelope is `{detail: <legacy>, error: {code, message, fix, details,\n * request_id}}`. `details` holds structured context (`required_scope`,\n * `expected_base_index`, and for a validation error every failing field under\n * `errors`) and is exposed as `BeakrError.details`. Servers before it existed\n * put those fields beside `code` (they still do, for compatibility), so\n * `required_scope` is read from `details` first and the envelope second.\n * Routes that predate the envelope send `detail` only, so each field falls\n * back: the message to `detail`, the request id to the `X-Request-ID` header,\n * the code to one derived from the status.\n *\n * A body that is not JSON is never the message as it is: an HTML page (a web\n * app, a proxy or a server that is not Beakr, at a wrong base URL) is named by\n * its title, with a fix that says to check the API URL, and other text is cut\n * to a short excerpt. A success whose body is an HTML page where JSON was\n * expected throws `UnexpectedResponseError`.\n */\nimport { parseHttpDate } from \"./http-date.js\";\n\nexport interface BeakrErrorOptions {\n status?: number;\n code?: string;\n requestId?: string;\n body?: unknown;\n details?: Record<string, unknown>;\n cause?: unknown;\n /** The API origin the failed request was sent to. */\n baseUrl?: string;\n /** How to correct the call (`error.fix`), when the server said. */\n fix?: string;\n}\n\nexport class BeakrError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly requestId: string | undefined;\n readonly body: unknown;\n /** Structured context from `error.details` (`{}` when none was sent). */\n readonly details: Record<string, unknown>;\n /**\n * The API origin the request went to. Named in the message too, so a key\n * sent to the wrong host (a dev key against production) reads as that.\n */\n readonly baseUrl: string | undefined;\n /** How to correct the call (`error.fix`), when the server said; also in the message. */\n readonly fix: string | undefined;\n\n constructor(message: string, options: BeakrErrorOptions = {}) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = new.target.name;\n this.status = options.status;\n this.code = options.code;\n this.requestId = options.requestId;\n this.body = options.body;\n this.details = options.details ?? {};\n this.baseUrl = options.baseUrl;\n this.fix = options.fix;\n }\n}\n\n/**\n * `12 of 10 uploads per day; resets 2026-10-14T00:00:00Z` from a limit's details.\n *\n * A `quota_exceeded` refusal names the limit, its window and when it resets in\n * `error.details`; without them the message (\"Uploads limit reached\") does not\n * say how long to wait. The Python SDK's `quota_text` reads the same fields.\n */\nexport function quotaText(details: Record<string, unknown>): string | undefined {\n const limit = details[\"limit\"];\n if (limit === undefined || limit === null) return undefined;\n const resource = String(details[\"resource\"] ?? \"\").replace(/_/g, \" \");\n const current = details[\"current\"];\n let text = current !== undefined && current !== null ? `${current} of ${limit}` : `limit ${limit}`;\n if (resource) text += ` ${resource}`;\n if (details[\"window\"]) text += ` per ${details[\"window\"]}`;\n if (details[\"resets_at\"]) text += `; resets ${details[\"resets_at\"]}`;\n return text;\n}\n\n/** The request never produced an HTTP response (DNS, refused, timeout, abort). */\nexport class APIConnectionError extends BeakrError {}\n\n/** 401, or no credential was configured. */\nexport class AuthenticationError extends BeakrError {}\n\n/** 403. `requiredScope` is set when a scoped credential lacks the route's scope. */\nexport class PermissionDeniedError extends BeakrError {\n readonly requiredScope: string | undefined;\n constructor(message: string, options: BeakrErrorOptions & { requiredScope?: string } = {}) {\n super(message, options);\n this.requiredScope = options.requiredScope;\n }\n}\n\n/**\n * 403 `person_review_required`: the project (or organization) requires a\n * person to accept proposals and commit Knowledge\n * (`GET /v1/knowledge/agent-review`), and this API key or token may not. A\n * signed-in person, or a key holding the `proposals:accept` scope, can; staging\n * the proposal stays open to the key.\n */\nexport class PersonReviewRequiredError extends PermissionDeniedError {}\n\nexport class NotFoundError extends BeakrError {}\n\n/**\n * 409. For a refused incremental conversation import, `expectedBaseIndex` is\n * the stored message count to resend from.\n */\nexport class ConflictError extends BeakrError {\n get expectedBaseIndex(): number | undefined {\n const body = this.body as Record<string, unknown> | undefined;\n for (const key of [\"error\", \"detail\"] as const) {\n const container = body?.[key] as Record<string, unknown> | undefined;\n const value = container?.[\"expected_base_index\"];\n if (typeof value === \"number\" && Number.isInteger(value)) return value;\n }\n return undefined;\n }\n}\n\n/** 400 or 422: the request was malformed or failed validation. */\nexport class ValidationError extends BeakrError {}\n\n/** 429. `retryAfter` is the server's hint in seconds, when it sent one. */\nexport class RateLimitError extends BeakrError {\n readonly retryAfter: number | undefined;\n constructor(message: string, options: BeakrErrorOptions & { retryAfter?: number } = {}) {\n super(message, options);\n this.retryAfter = options.retryAfter;\n }\n}\n\n/** 5xx. */\nexport class ServerError extends BeakrError {}\n\n/**\n * A success whose body is an HTML page where the operation answers JSON. Most\n * often the base URL is not a Beakr API: a web app or a proxy answers 200 with\n * a page for any path. `status` is that status.\n */\nexport class UnexpectedResponseError extends BeakrError {}\n\n/**\n * A Knowledge command or write answered HTTP 200 with `outcome.status ===\n * \"error\"` (an unknown page, a refused write). `result` keeps the full reply.\n */\n/**\n * The Knowledge door answered 200 but reported `outcome.status: \"error\"`. It\n * carries the response's `status` and `requestId` like every other error, and\n * the door's own `outcome.error_code` (`invalid_arguments`, `unknown_command`,\n * `scope_not_found`, `citation_not_citeable`, ...) as `code` when it named one,\n * else `knowledge_command_error`.\n */\nexport class KnowledgeCommandError extends BeakrError {\n readonly result: Record<string, unknown>;\n constructor(\n message: string,\n result: Record<string, unknown>,\n options: Omit<BeakrErrorOptions, \"body\"> = {},\n ) {\n super(message, { code: \"knowledge_command_error\", ...options, body: result });\n this.result = result;\n }\n}\n\n\nconst DEFAULT_CODES: Record<number, string> = {\n 400: \"bad_request\",\n 401: \"unauthorized\",\n 403: \"forbidden\",\n 404: \"not_found\",\n 409: \"conflict\",\n 422: \"validation_error\",\n 429: \"rate_limited\",\n};\n\n/**\n * Seconds to wait from a `Retry-After` header, or `undefined` when absent or\n * malformed.\n *\n * The header is either a number of seconds or an HTTP-date (RFC 9110 section\n * 10.2.3); a date becomes the seconds from `nowMs` (default: `Date.now()`)\n * until it. A date already past means \"retry now\" (`0`), never a negative\n * wait. A value that is neither is ignored, so the caller falls back to its own\n * backoff.\n */\nexport function parseRetryAfter(\n value: string | null | undefined,\n nowMs: number = Date.now(),\n): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds)) return Math.max(0, seconds);\n const deadline = parseHttpDate(value, nowMs);\n return deadline === undefined ? undefined : Math.max(0, (deadline - nowMs) / 1000);\n}\n\n/** How much of a body that is not JSON an error message keeps. */\nconst EXCERPT_CHARS = 200;\nconst TITLE_CHARS = 80;\n/**\n * A page's title is near its start: only this much of the body is searched,\n * and the pattern itself is bounded, so a huge body costs no more than a small one.\n */\nconst TITLE_SEARCH_CHARS = 4096;\nconst HTML_TITLE = /<title[^>]{0,200}>([\\s\\S]{0,500}?)<\\/title>/i;\n/** Control, format and other non-printable characters (an ANSI escape sequence). */\nconst NOT_PRINTABLE = /[\\p{C}\\p{Zl}\\p{Zp}]/gu;\nconst HTML_ENTITIES: Record<string, string> = { amp: \"&\", lt: \"<\", gt: \">\", quot: '\"', \"#39\": \"'\", apos: \"'\" };\n\n/**\n * `text` as one short printable line. The text is the server's, and the\n * message reaches a terminal: non-printable characters are removed.\n */\nfunction oneLine(text: string, limit: number): string {\n const line = text.split(/\\s+/).filter(Boolean).join(\" \").replace(NOT_PRINTABLE, \"\");\n return line.length <= limit ? line : `${line.slice(0, limit - 3).trimEnd()}...`;\n}\n\n/** Whether a body (with its `Content-Type`) is an HTML page. */\nexport function isHtmlPage(contentType: string | null | undefined, text: string): boolean {\n return (contentType ?? \"\").toLowerCase().includes(\"html\") || text.trimStart().startsWith(\"<\");\n}\n\n/**\n * The message and fix for an HTML page where a Beakr API answer was expected:\n * the base URL points somewhere else (or, for a 5xx, a proxy in front of the\n * API answered). The page itself is never the message: it is long, and it says\n * nothing about Beakr.\n */\nfunction htmlPageReason(status: number, text: string): { reason: string; fix: string } {\n const title = HTML_TITLE.exec(text.slice(0, TITLE_SEARCH_CHARS))?.[1];\n const named = title\n ? oneLine(title.replace(/&(amp|lt|gt|quot|#39|apos);/g, (_, name: string) => HTML_ENTITIES[name] ?? \"\"), TITLE_CHARS)\n : \"\";\n const page = named ? `an HTML page (\"${named}\")` : \"an HTML page\";\n const fix =\n status >= 500\n ? \"If the API URL (baseUrl, or BEAKR_BASE_URL) is right, a proxy in front of the API answered: retry shortly.\"\n : \"Check the API URL (baseUrl, or BEAKR_BASE_URL): it must be a Beakr API, such as https://api.thebeakr.com.\";\n return { reason: `The server answered with ${page}, not a Beakr API response`, fix };\n}\n\n/** The error for a success whose body is an HTML page where JSON was expected. */\nexport function unexpectedPageError(\n status: number,\n headers: Headers,\n text: string,\n baseUrl?: string,\n): UnexpectedResponseError {\n const { reason, fix } = htmlPageReason(status, text);\n const options: BeakrErrorOptions = { status, code: \"unexpected_response\", body: text, fix };\n const requestId = headers.get(\"x-request-id\");\n if (requestId) options.requestId = requestId;\n if (baseUrl !== undefined) options.baseUrl = baseUrl;\n const called = baseUrl ? ` (called ${shownUrl(baseUrl)})` : \"\";\n return new UnexpectedResponseError(`${reason}${called} To fix: ${fix}`, options);\n}\n\n/**\n * `baseUrl` as a message names it: scheme, host, port and path only. A base URL\n * can carry a user name and password (`https://user:pass@host`) or a token in\n * its query, and an error message is printed and logged.\n */\nfunction shownUrl(baseUrl: string): string {\n try {\n const url = new URL(baseUrl);\n return `${url.protocol}//${url.host}${url.pathname === \"/\" ? \"\" : url.pathname}`;\n } catch {\n return baseUrl;\n }\n}\n\nfunction detailMessage(detail: unknown): string | undefined {\n if (detail === undefined || detail === null) return undefined;\n if (typeof detail === \"string\") return detail;\n // FastAPI validation errors are a list of {loc, msg}; keep them readable.\n if (Array.isArray(detail)) {\n return detail\n .map((item) => {\n if (item && typeof item === \"object\" && \"msg\" in item) {\n const loc = Array.isArray((item as { loc?: unknown[] }).loc)\n ? ((item as { loc: unknown[] }).loc.filter((p) => p !== \"body\").join(\".\"))\n : \"\";\n const msg = String((item as { msg: unknown }).msg);\n return loc ? `${loc}: ${msg}` : msg;\n }\n return String(item);\n })\n .join(\"; \");\n }\n return JSON.stringify(detail);\n}\n\n/**\n * Map a non-2xx response (status, headers, parsed body) to the matching error.\n * `nowMs` is the clock an HTTP-date `Retry-After` is measured from. `baseUrl`,\n * when given, is the API the request was sent to; the message ends with\n * `(called <baseUrl>)` and the error keeps it as `baseUrl`.\n */\nexport function errorFromResponse(\n status: number,\n headers: Headers,\n body: unknown,\n statusText = \"\",\n nowMs: number = Date.now(),\n baseUrl?: string,\n): BeakrError {\n const record = body && typeof body === \"object\" ? (body as Record<string, unknown>) : undefined;\n const rawEnvelope = record?.[\"error\"];\n const envelope =\n rawEnvelope && typeof rawEnvelope === \"object\" ? (rawEnvelope as Record<string, unknown>) : {};\n const detail = record ? record[\"detail\"] : body;\n\n let code = (envelope[\"code\"] as string | undefined) ?? DEFAULT_CODES[status];\n if (code === undefined && status >= 500) code = \"internal_error\";\n // Not JSON: an HTML page (a wrong base URL, a proxy) or bare text.\n const page = typeof body === \"string\" && isHtmlPage(headers.get(\"content-type\"), body) ? htmlPageReason(status, body) : undefined;\n const text = typeof body === \"string\" && !page ? oneLine(body, EXCERPT_CHARS) : undefined;\n const reason =\n page?.reason ??\n text ??\n (envelope[\"message\"] as string | undefined) ??\n detailMessage(detail) ??\n (statusText || `HTTP ${status}`);\n const rawDetailsForMessage = envelope[\"details\"];\n const quota =\n rawDetailsForMessage && typeof rawDetailsForMessage === \"object\" && !Array.isArray(rawDetailsForMessage)\n ? quotaText(rawDetailsForMessage as Record<string, unknown>)\n : undefined;\n const fix =\n page?.fix ??\n (typeof envelope[\"fix\"] === \"string\" && envelope[\"fix\"] ? (envelope[\"fix\"] as string) : undefined);\n let message = baseUrl ? `${reason} (called ${shownUrl(baseUrl)})` : reason;\n if (quota) message += ` (${quota})`;\n if (fix) message += ` To fix: ${fix}`;\n const requestId =\n (envelope[\"request_id\"] as string | undefined) ?? headers.get(\"x-request-id\") ?? undefined;\n const rawDetails = envelope[\"details\"];\n const details =\n rawDetails && typeof rawDetails === \"object\" && !Array.isArray(rawDetails)\n ? (rawDetails as Record<string, unknown>)\n : {};\n const common: BeakrErrorOptions = { status, body, details };\n if (fix !== undefined) common.fix = fix;\n if (baseUrl !== undefined) common.baseUrl = baseUrl;\n if (code !== undefined) common.code = code;\n if (requestId !== undefined) common.requestId = requestId;\n\n if (status === 400 || status === 422) return new ValidationError(message, common);\n if (status === 401) return new AuthenticationError(message, common);\n if (status === 403) {\n const requiredScope =\n (details[\"required_scope\"] as string | undefined) ??\n (envelope[\"required_scope\"] as string | undefined);\n const Refusal = code === \"person_review_required\" ? PersonReviewRequiredError : PermissionDeniedError;\n return new Refusal(message, requiredScope === undefined ? common : { ...common, requiredScope });\n }\n if (status === 404) return new NotFoundError(message, common);\n if (status === 409) return new ConflictError(message, common);\n if (status === 429) {\n const retryAfter = parseRetryAfter(headers.get(\"retry-after\"), nowMs);\n return new RateLimitError(message, retryAfter === undefined ? common : { ...common, retryAfter });\n }\n if (status >= 500) return new ServerError(message, common);\n return new BeakrError(message, common);\n}\n","/**\n * The public source record: where a cited source lives and what it says.\n *\n * One shape for every surface that shows a source -- `knowledge.pages.sources()`,\n * `runs.answer()`, the CLI's `kb sources`/`kb cat` and the MCP server -- so a\n * program reads `filename`, `provider` and `location` the same way wherever the\n * source came from. A port of the Python SDK's `beakr_sdk/sources.py`; keep the\n * two in step. Empty fields are left out, and backend row fields (internal unit,\n * connector or version ids, hashes) are never forwarded.\n */\n\n/** Where the original is: a provider URL or path, or Beakr's own copy (`file_id`). */\nexport interface SourceLocation {\n url?: string;\n /** Where the source lives (`deals/acme/memo.pdf`); `files.read` takes it, with ` › <unit>`. */\n display_path?: string;\n /** Where the cited passage sits in it: `p. 7`, `slide 3`, `sheet 2, B4:D9`. */\n unit_locator?: string;\n /** The uploader's relative path, when recorded and different from `display_path`. */\n upload_path?: string;\n provider_item_id?: string;\n /** Beakr's copy of the document: `beakr.files.download(file_id)`. */\n file_id?: string;\n /** The version of Beakr's copy the passage was read from. */\n version_id?: string;\n}\n\nexport interface SourceEvidence {\n excerpt?: string;\n locator?: string;\n fidelity?: string;\n evidence_kind?: string;\n anchor_status?: string;\n}\n\n/** One cited passage of a compact record's document. */\nexport interface SourceExcerpt {\n citation_key?: string;\n section_id?: string;\n unit_locator?: string;\n text?: string;\n}\n\nexport interface SourceStatus {\n observed_at?: string;\n availability?: string;\n changed_since_cited?: boolean;\n}\n\nexport interface SourceSection {\n id?: string;\n title?: string;\n event_start?: string;\n event_end?: string;\n date_precision?: string;\n}\n\nexport interface SourceRecord {\n /** Opaque; reuse it in a Knowledge write citation. */\n source_ref?: string;\n /** The `{{key}}` token in page or answer text. */\n citation_key?: string;\n name: string;\n filename?: string;\n /** The connector it came from; absent for an uploaded file. */\n provider?: string;\n source_kind?: string;\n /** Page sources: how the source bears on the section (support, qualifies, contradicts). */\n stance?: string;\n location?: SourceLocation;\n evidence?: SourceEvidence;\n status?: SourceStatus;\n section?: SourceSection;\n /** Compact reads: the document's cited passages, each with its token and place. */\n excerpts?: SourceExcerpt[];\n /** Compact reads: how many passages of the document the page cites. */\n cited_passages?: number;\n retrieval?: { tool: string; arguments: { handle: string } };\n}\n\ntype Row = Record<string, unknown>;\n\nconst isEmpty = (value: unknown): boolean =>\n value === undefined || value === null || value === \"\" || (Array.isArray(value) && value.length === 0);\n\nconst asRow = (value: unknown): Row =>\n value && typeof value === \"object\" && !Array.isArray(value) ? (value as Row) : {};\n\nfunction cleaned<T extends object>(value: Record<string, unknown>): T | undefined {\n const kept = Object.fromEntries(\n Object.entries(value).filter(([, v]) => v !== undefined && v !== null && v !== \"\"),\n );\n return Object.keys(kept).length ? (kept as T) : undefined;\n}\n\nfunction basename(path: string): string {\n const parts = path.replace(/\\/+$/, \"\").split(\"/\");\n return parts[parts.length - 1] ?? path;\n}\n\n/** Keep only the public source contract; never forward backend row fields. */\n/** `provider` of a source uploaded to Beakr rather than synced from a connector. */\nexport const UPLOAD_PROVIDER = \"upload\";\n\nexport function publicSource(source: Row, citationKey?: string): SourceRecord {\n const meta = asRow(source[\"meta\"]);\n const location = asRow(source[\"location\"]);\n const evidence = asRow(source[\"evidence\"]);\n const status = asRow(source[\"status\"]);\n const section = asRow(source[\"section\"]);\n const retrieval = asRow(source[\"retrieval\"]);\n\n const first = (...keys: string[]): unknown => {\n for (const key of keys) {\n if (!isEmpty(source[key])) return source[key];\n if (!isEmpty(meta[key])) return meta[key];\n }\n return undefined;\n };\n const str = (value: unknown): string | undefined => (isEmpty(value) ? undefined : String(value));\n\n const name = String(first(\"name\", \"source_title\", \"title\") ?? \"Untitled source\");\n const kind = str(first(\"source_kind\", \"unit_kind\", \"type\", \"source_type\"));\n const path = str(location[\"display_path\"] ?? first(\"display_path\", \"path\", \"local_path\"));\n let filename = str(first(\"filename\", \"file_name\"));\n if (!filename && path) filename = basename(path);\n if (!filename && [\"file\", \"document\", \"artifact\"].includes((kind ?? \"\").toLowerCase())) filename = name;\n const fileIdValue = first(\"artifact_id\");\n // Every document Beakr holds (uploaded or synced) is a file whose bytes\n // files.download(id) returns; its artifact_id is that public id.\n const fileId = str(location[\"file_id\"] ?? (typeof fileIdValue === \"string\" ? fileIdValue : undefined));\n const url = str(location[\"url\"] ?? first(\"url\", \"web_view_url\", \"full_text_url\", \"pdf_url\"));\n let provider = str(first(\"provider\", \"source_provider\"));\n // A file Beakr holds itself: no connector to name, no original elsewhere.\n if (!provider && (first(\"origin\") === \"upload\" || (fileId && !url))) provider = UPLOAD_PROVIDER;\n\n const item: Record<string, unknown> = {\n source_ref: str(first(\"source_ref\")),\n citation_key: citationKey ?? str(first(\"citation_key\", \"key\")),\n name,\n filename,\n provider,\n source_kind: kind,\n stance: typeof source[\"stance\"] === \"string\" ? source[\"stance\"] : undefined,\n location: cleaned<SourceLocation>({\n url,\n display_path: path,\n unit_locator: str(location[\"unit_locator\"]),\n upload_path: str(location[\"upload_path\"]),\n provider_item_id: str(location[\"provider_item_id\"] ?? first(\"provider_file_id\", \"remote_file_id\")),\n file_id: fileId,\n version_id: fileId ? str(location[\"version_id\"]) : undefined,\n }),\n evidence: cleaned<SourceEvidence>({\n excerpt: str(evidence[\"excerpt\"] ?? first(\"excerpt\", \"excerpt_text\", \"quote\")),\n locator: str(evidence[\"locator\"] ?? first(\"locator\", \"chunk_ref\")),\n fidelity: str(evidence[\"fidelity\"] ?? first(\"fidelity\")),\n evidence_kind: str(evidence[\"evidence_kind\"] ?? first(\"evidence_kind\")),\n anchor_status: str(evidence[\"anchor_status\"] ?? first(\"anchor_status\")),\n }),\n status: cleaned<SourceStatus>({\n observed_at: str(status[\"observed_at\"] ?? first(\"observed_at\")),\n availability: str(status[\"availability\"] ?? first(\"source_availability\")),\n changed_since_cited:\n \"changed_since_cited\" in status ? status[\"changed_since_cited\"] : first(\"source_moved\"),\n }),\n section: cleaned<SourceSection>({\n id: str(section[\"id\"] ?? source[\"section_id\"]),\n title: str(section[\"title\"] ?? first(\"section_title\")),\n event_start: str(section[\"event_start\"] ?? first(\"event_start\")),\n event_end: str(section[\"event_end\"] ?? first(\"event_end\")),\n date_precision: str(section[\"date_precision\"] ?? first(\"date_precision\")),\n }),\n };\n // A compact record carries its document's passages as `excerpts`, each with\n // its token and where it sits, and how many it cites. Dropping them left a\n // Sources listing with no excerpt for compact reads.\n const excerpts = (Array.isArray(source[\"excerpts\"]) ? source[\"excerpts\"] : [])\n .map(asRow)\n .filter((excerpt) => !isEmpty(excerpt[\"text\"]))\n .map((excerpt) =>\n Object.fromEntries(\n ([\"citation_key\", \"section_id\", \"unit_locator\", \"text\"] as const)\n .filter((key) => !isEmpty(excerpt[key]))\n .map((key) => [key, String(excerpt[key])]),\n ) as SourceExcerpt,\n );\n if (excerpts.length) item[\"excerpts\"] = excerpts;\n if (typeof source[\"cited_passages\"] === \"number\" && Number.isInteger(source[\"cited_passages\"])) {\n item[\"cited_passages\"] = source[\"cited_passages\"];\n }\n const args = asRow(retrieval[\"arguments\"]);\n if (typeof retrieval[\"tool\"] === \"string\" && retrieval[\"tool\"] && typeof args[\"handle\"] === \"string\" && args[\"handle\"]) {\n item[\"retrieval\"] = { tool: retrieval[\"tool\"], arguments: { handle: args[\"handle\"] } };\n }\n return Object.fromEntries(Object.entries(item).filter(([, v]) => !isEmpty(v))) as unknown as SourceRecord;\n}\n\n/**\n * The command that fetches a source's bytes when it has no original to link to.\n * A connector file's original lives with its provider (`location.url`); an\n * uploaded file exists only in Beakr, so it is read back by its file id.\n */\nexport function downloadHint(record: SourceRecord): string | undefined {\n const location = record.location ?? {};\n if (!location.file_id || location.url) return undefined;\n return `beakr files download ${location.file_id}`;\n}\n\n/** One line saying where a source lives: `filename · provider · url-or-path`. */\nexport function sourceWhere(record: SourceRecord): string {\n const location = record.location ?? {};\n const label = record.filename ?? record.name;\n const parts = [label, record.provider].filter(Boolean) as string[];\n if (location.url) parts.push(location.url);\n // A path that is just the filename again says nothing new.\n else if (location.display_path && location.display_path !== label) parts.push(location.display_path);\n const hint = downloadHint(record);\n if (hint) parts.push(`file ${location.file_id} (\\`${hint}\\`)`);\n return parts.join(\" · \");\n}\n","/**\n * Turn an agent run's event stream into an answer a program can show.\n *\n * A run streams `content_delta` events (some marked `is_thinking`), `sources`\n * events keyed by citation key, and a closing `stream_complete` carrying the\n * final text. Its citations are `{{key}}` tokens. `AnswerBuilder` folds those\n * events into `{text, sources, run_id}`. Once the run has finished, the answer\n * is the engine's own rendering from `GET /v1/runs/{run_id}`: each citation\n * shown as the readable reference in parentheses (`(memo.pdf › p. 7)`), and\n * one public source record per cited document in order of first use. Only a\n * server that does not send that rendering gets the answer assembled from the\n * stream, with each `{{key}}` numbered `[n]` and `sources[n-1]` behind it.\n * `TextStream` numbers streamed deltas `[n]` per citation key, for showing an\n * answer as it is written. A port of the Python SDK's `beakr_sdk/answers.py`;\n * keep the two in step.\n */\nimport { BeakrError } from \"./errors.js\";\nimport { publicSource, type SourceRecord } from \"./sources.js\";\n\n/** What `runs.answer()` returns. */\nexport interface Answer {\n /**\n * The answer, each citation shown as the readable reference in parentheses\n * (`(memo.pdf › p. 7)`, `(Page Title › Section)`). From a server that does\n * not render answers, the citations are numbered `[n]` instead.\n */\n text: string;\n /**\n * The cited documents in order of first use, as public source records: one\n * per document, however many of its passages the text cites. With `[n]`\n * citations, `sources[n-1]` is the record behind `[n]`.\n */\n sources: SourceRecord[];\n run_id: string;\n}\n\n/** The run ended without an answer (`error`, `failed` or `cancelled`). */\nexport class RunFailedError extends BeakrError {}\n\n/** What a parked run asks the person: `GET /v1/runs/{run_id}`'s `question`. */\nexport interface RunQuestion {\n text?: string;\n options?: unknown[];\n context?: unknown;\n [key: string]: unknown;\n}\n\n/**\n * The run stopped to ask the person something (status `interrupted`) instead\n * of answering, and sent no answer text. Answer `question` by starting a run in\n * `threadId`.\n */\nexport class RunNeedsInputError extends RunFailedError {\n constructor(\n message: string,\n readonly runId: string,\n readonly threadId: string | undefined,\n readonly question: RunQuestion | undefined,\n readonly interruptKind: string | undefined,\n ) {\n super(message, { code: \"interrupted\" });\n }\n}\n\nconst CITATION_TOKEN = /\\{\\{([^}]+)\\}\\}/g;\n\n/**\n * A citation key is short; text held back waiting for a closing `}}` longer\n * than this is ordinary text and is released rather than stalling the stream.\n */\nconst MAX_PENDING = 256;\n\nconst FAILED = new Set([\"error\", \"failed\", \"cancelled\"]);\n\ninterface StreamedEvent {\n type: string;\n data?: unknown;\n [key: string]: unknown;\n}\n\nconst dataOf = (event: StreamedEvent): Record<string, unknown> =>\n event.data && typeof event.data === \"object\" ? (event.data as Record<string, unknown>) : {};\n\n/**\n * Turn `{{key}}` citation tokens into `[n]` in order of first use. `order`\n * collects each key the first time it is seen; pass the same array across calls\n * (a streamed answer) to keep the numbering stable.\n */\nexport function numberCitations(text: string, order: string[]): string {\n return text.replace(CITATION_TOKEN, (_match, key: string) => {\n if (!order.includes(key)) order.push(key);\n return `[${order.indexOf(key) + 1}]`;\n });\n}\n\n/**\n * Numbers citations in streamed text even when a token spans deltas. Only the\n * shortest suffix that could still start an unfinished `{{key}}` is held back.\n */\nexport class TextStream {\n private pending = \"\";\n constructor(readonly order: string[] = []) {}\n\n feed(delta: string): string {\n const text = numberCitations(this.pending + delta, this.order);\n let cut = text.length;\n const opening = text.lastIndexOf(\"{{\");\n if (opening !== -1 && !text.slice(opening).includes(\"}}\")) cut = opening;\n else if (text.endsWith(\"{\")) cut = text.length - 1;\n if (text.length - cut > MAX_PENDING) cut = text.length;\n this.pending = text.slice(cut);\n return text.slice(0, cut);\n }\n\n finish(): string {\n const rest = this.pending;\n this.pending = \"\";\n return rest;\n }\n}\n\n/** The visible answer text an event adds (empty for thinking and other events). */\nexport function answerDelta(event: StreamedEvent): string {\n const data = dataOf(event);\n if (event.type === \"content_delta\" && !data[\"is_thinking\"]) return String(data[\"delta\"] ?? \"\");\n return \"\";\n}\n\n/** Folds a run's events into `{text, sources, run_id}`. */\nexport class AnswerBuilder {\n private readonly deltas: string[] = [];\n private finalText: string | undefined;\n private readonly sources = new Map<string, Record<string, unknown>>();\n private status = \"completed\";\n private error: string | undefined;\n threadId: string | undefined;\n interruptKind: string | undefined;\n\n constructor(readonly runId: string) {}\n\n /** The run parked on a question for the person instead of answering. */\n get interrupted(): boolean {\n return this.status === \"interrupted\";\n }\n\n feed(event: StreamedEvent): void {\n const data = dataOf(event);\n const threadId = (event as { thread_id?: unknown }).thread_id;\n if (threadId) this.threadId = String(threadId);\n const delta = answerDelta(event);\n if (delta) {\n this.deltas.push(delta);\n } else if (event.type === \"sources\") {\n const list = Array.isArray(data[\"sources\"]) ? data[\"sources\"] : [];\n for (const source of list) {\n if (!source || typeof source !== \"object\") continue;\n const key = (source as Record<string, unknown>)[\"key\"];\n if (!key) continue;\n // A later event for the same key carries more (quote, path).\n this.sources.set(String(key), { ...(this.sources.get(String(key)) ?? {}), ...(source as Record<string, unknown>) });\n }\n } else if (event.type === \"error\") {\n this.error = String(data[\"message\"] ?? data[\"error\"] ?? \"the run failed\");\n } else if (event.type === \"stream_complete\") {\n if (data[\"status\"]) this.status = String(data[\"status\"]);\n if (data[\"interrupt_kind\"]) this.interruptKind = String(data[\"interrupt_kind\"]);\n if (typeof data[\"final_text\"] === \"string\") this.finalText = data[\"final_text\"];\n }\n }\n\n /**\n * The answer; throws `RunFailedError` when the run ended without one, and\n * `RunNeedsInputError` (with `question`, read from the run by the caller)\n * when it parked on a question rather than returning an empty answer.\n */\n result(run?: Record<string, unknown>): Answer {\n // `run` is GET /v1/runs/{run_id} after the stream ended. Its `answer` (the\n // engine's own rendering) is the answer when present; streamed sources only\n // fill in what its records leave out (a document's file id). Without it (an\n // older server) the answer is assembled from the stream.\n const state = run ?? {};\n const status = String(state[\"status\"] ?? this.status);\n if (this.interrupted || status === \"interrupted\") {\n const question = (state[\"question\"] && typeof state[\"question\"] === \"object\" ? state[\"question\"] : undefined) as\n | RunQuestion\n | undefined;\n const asked = question?.text;\n throw new RunNeedsInputError(\n `Run ${this.runId} is waiting for an answer` + (asked ? `: ${asked}` : \" (it asked the person a question)\"),\n this.runId,\n this.threadId ?? (typeof state[\"thread_id\"] === \"string\" ? state[\"thread_id\"] : undefined),\n question,\n this.interruptKind ?? (typeof state[\"interrupt_kind\"] === \"string\" ? state[\"interrupt_kind\"] : undefined),\n );\n }\n if (this.error !== undefined || FAILED.has(this.status) || FAILED.has(status)) {\n const reason = this.error ?? `the run ended ${FAILED.has(status) ? status : this.status}`;\n throw new RunFailedError(`Run ${this.runId}: ${reason}`, { code: status });\n }\n const answer = state[\"answer\"] as { text?: unknown; sources?: unknown } | null | undefined;\n if (answer && typeof answer.text === \"string\") {\n const records = Array.isArray(answer.sources) ? answer.sources : [];\n return {\n text: answer.text.trim(),\n sources: records\n .filter((r): r is Record<string, unknown> => !!r && typeof r === \"object\")\n .map((record) => {\n const key = typeof record[\"citation_key\"] === \"string\" ? record[\"citation_key\"] : undefined;\n const streamed = key ? (this.sources.get(key) ?? {}) : {};\n return publicSource({ ...streamed, ...record }, key);\n }),\n run_id: this.runId,\n };\n }\n const raw = this.finalText ?? this.deltas.join(\"\");\n const order: string[] = [];\n const text = numberCitations(raw, order);\n const sources = order.map((key) => publicSource(this.sources.get(key) ?? { key }, key));\n return { text: text.trim(), sources, run_id: this.runId };\n }\n}\n","/**\n * Load a Node built-in at run time, invisibly to browser bundlers.\n *\n * Node-only helpers (directories, files on disk, streaming hashes) must not\n * stop the SDK from bundling for a browser or an edge runtime. A literal\n * ``import(\"node:fs\")`` is resolved by bundlers even when it is dynamic, so\n * this uses ``process.getBuiltinModule`` (Node 20.16+, 22.3+) and, on older\n * Node, a dynamic import whose specifier is not a literal.\n */\nexport async function nodeBuiltin<T>(id: string): Promise<T> {\n const proc = (globalThis as { process?: { getBuiltinModule?: (id: string) => unknown } }).process;\n const loaded = proc?.getBuiltinModule?.(id);\n if (loaded) return loaded as T;\n const specifier: string = id;\n return (await import(/* @vite-ignore */ /* webpackIgnore: true */ specifier)) as T;\n}\n\n/** Built-ins loaded by `preloadNodeBuiltins`, for synchronous callers on older Node. */\nconst preloaded = new Map<string, unknown>();\n\n/** Whether this is Node.js (or a runtime that implements its `process`, such as Bun or Deno). */\nexport function isNodeRuntime(): boolean {\n const proc = (globalThis as { process?: { versions?: { node?: unknown } } }).process;\n return typeof proc?.versions?.node === \"string\";\n}\n\n/**\n * A Node built-in for synchronous code, or undefined when it is not available\n * yet: `process.getBuiltinModule` where it exists, else a module a previous\n * `preloadNodeBuiltins` loaded (the only way on Node 18 and 20 before 20.16,\n * whose ES modules cannot load a built-in synchronously).\n */\nexport function nodeBuiltinSync<T>(id: string): T | undefined {\n const proc = (globalThis as { process?: { getBuiltinModule?: (id: string) => unknown } }).process;\n try {\n const loaded = proc?.getBuiltinModule?.(id);\n if (loaded) return loaded as T;\n } catch {\n // Fall through to a preloaded copy.\n }\n return preloaded.get(id) as T | undefined;\n}\n\n/**\n * Load built-ins once so `nodeBuiltinSync` finds them on Node without\n * `getBuiltinModule`. Outside Node this does nothing, and a built-in the\n * runtime refuses is skipped.\n */\nexport async function preloadNodeBuiltins(ids: readonly string[]): Promise<void> {\n if (!isNodeRuntime()) return;\n for (const id of ids) {\n if (nodeBuiltinSync(id) !== undefined) continue;\n try {\n preloaded.set(id, await nodeBuiltin(id));\n } catch {\n // No such built-in here; synchronous readers find nothing and move on.\n }\n }\n}\n","/**\n * Service-account credentials files (developer platform W6.1).\n *\n * A CI job or server authenticates as an organization's service account with a\n * JSON file written by `beakr org service-accounts key --credentials-file`:\n *\n * {\"type\": \"beakr_service_account\", \"api_key\": \"bk_live_...\",\n * \"base_url\": \"https://api.thebeakr.com\", \"org_id\": \"...\",\n * \"service_account_id\": \"...\", \"key_id\": \"...\", \"name\": \"deploy\"}\n *\n * Only `type` and `api_key` are required. `base_url`, when present, binds the\n * key to that API: a client pointed at another one refuses it rather than\n * sending the key elsewhere. The same format is read by the Python SDK.\n */\nimport { AuthenticationError } from \"./errors.js\";\nimport { nodeBuiltinSync } from \"./node-builtins.js\";\n\nexport const SERVICE_ACCOUNT_FILE_TYPE = \"beakr_service_account\";\nexport const SERVICE_ACCOUNT_FILE_ENV = \"BEAKR_SERVICE_ACCOUNT_FILE\";\n\nexport interface ServiceAccountCredentials {\n apiKey: string;\n baseUrl?: string;\n orgId?: string;\n serviceAccountId?: string;\n keyId?: string;\n name?: string;\n}\n\nfunction invalid(message: string): AuthenticationError {\n return new AuthenticationError(message, { code: \"unauthorized\" });\n}\n\n/** Parse the file's text (or its already-parsed JSON). Throws `AuthenticationError` when unusable. */\nexport function parseServiceAccountCredentials(\n content: string | Record<string, unknown>,\n source = \"the service account file\",\n): ServiceAccountCredentials {\n let data: unknown = content;\n if (typeof content === \"string\") {\n try {\n data = JSON.parse(content);\n } catch {\n throw invalid(`${source} is not valid JSON.`);\n }\n }\n if (!data || typeof data !== \"object\" || (data as { type?: unknown }).type !== SERVICE_ACCOUNT_FILE_TYPE) {\n throw invalid(\n `${source} is not a Beakr service account file (expected \"type\": \"${SERVICE_ACCOUNT_FILE_TYPE}\").`,\n );\n }\n const record = data as Record<string, unknown>;\n const apiKey = record.api_key;\n if (typeof apiKey !== \"string\" || !/^bk_(live|test)_/.test(apiKey)) {\n throw invalid(`${source} has no api_key (bk_live_... or bk_test_...).`);\n }\n const text = (name: string) => {\n const value = record[name];\n return typeof value === \"string\" && value ? value : undefined;\n };\n return {\n apiKey,\n baseUrl: text(\"base_url\"),\n orgId: text(\"org_id\"),\n serviceAccountId: text(\"service_account_id\"),\n keyId: text(\"key_id\"),\n name: text(\"name\"),\n };\n}\n\ntype ReadFileSync = (path: string, encoding: \"utf8\") => string;\n\nfunction nodeReadFileSync(): ReadFileSync | undefined {\n return nodeBuiltinSync<{ readFileSync?: ReadFileSync }>(\"node:fs\")?.readFileSync;\n}\n\n/**\n * Read a credentials file from disk (Node.js; on Node without\n * `process.getBuiltinModule`, after the client has preloaded `node:fs`). In a runtime\n * without file access, read the file yourself and pass its text to\n * `parseServiceAccountCredentials`, then the result as `serviceAccount`.\n */\nexport function readServiceAccountFile(path: string, readFile?: ReadFileSync): ServiceAccountCredentials {\n const read = readFile ?? nodeReadFileSync();\n if (!read) {\n throw invalid(\n \"Reading a service account file needs Node.js file access; pass `serviceAccount` \" +\n \"with the parsed file instead.\",\n );\n }\n let content: string;\n try {\n content = read(path, \"utf8\");\n } catch (error) {\n throw invalid(`Cannot read the service account file ${path}: ${(error as Error).message}.`);\n }\n return parseServiceAccountCredentials(content, `The service account file ${path}`);\n}\n\n/** `scheme://host[:port]`, lower case, default port dropped: what a key is bound to. */\nexport function normalizeOrigin(url: string): string {\n const parsed = new URL(url.includes(\"://\") ? url : `https://${url}`);\n const defaultPort = parsed.protocol === \"http:\" ? \"80\" : parsed.protocol === \"https:\" ? \"443\" : \"\";\n const port = parsed.port && parsed.port !== defaultPort ? `:${parsed.port}` : \"\";\n return `${parsed.protocol}//${parsed.hostname.toLowerCase()}${port}`;\n}\n","/**\n * The Beakr CLI's stored sign-in, read from disk (developer platform W6.1.4).\n *\n * `beakr auth login` keeps one login per API origin. In Node.js the SDK reads\n * the file copy, `~/.beakr/credentials` (or `$BEAKR_HOME/credentials`), and the\n * key saved by `beakr auth login --with-api-key` in `~/.beakr/config.json` -- the\n * same files, payload and origin binding the Python SDK reads\n * (`beakr_sdk/credentials.py`). A stored credential is only offered to a client\n * pointed at the API that issued it.\n *\n * This file is the fast path. What it cannot do is delegated to the CLI itself\n * (`cli-token.ts`, `beakr auth token --json`):\n *\n * - The OS keychain. The CLI keeps the login there when one is available (the\n * default on macOS), through Python's `keyring`; Node has no portable way to\n * read those entries.\n * - Refreshing. Refreshing rotates the pair, and every Beakr process that\n * refreshes it does so under the CLI's `flock` on `credentials.lock`, which\n * Node cannot take; refreshing outside it can present a spent refresh token\n * and revoke the login for every process. So nothing here ever refreshes:\n * the CLI does, under its own lock.\n *\n * File access goes through `nodeBuiltinSync`, so it works on Node 18 once the\n * transport has preloaded `node:fs` and `node:os` (`prepareCliLoginFiles`). In\n * a runtime without file access (browsers, edge runtimes) every read here\n * finds nothing and the chain moves on.\n */\n\nimport { nodeBuiltinSync, preloadNodeBuiltins } from \"./node-builtins.js\";\nimport { normalizeOrigin } from \"./service-account.js\";\n\n/** Seconds before expiry at which a stored access token is treated as expired (the CLI's skew). */\nconst REFRESH_SKEW_SECONDS = 60;\nconst DEFAULT_BASE_URL = \"https://api.thebeakr.com\";\n\n/** A usable stored sign-in: the access token the CLI last saved for one origin. */\nexport interface CliLogin {\n accessToken: string;\n /** Epoch milliseconds when the access token expires, when the CLI recorded it. */\n expiresAt?: number;\n}\n\ninterface NodeFs {\n readFileSync(path: string, encoding: \"utf8\"): string;\n existsSync(path: string): boolean;\n}\n\ninterface NodeOs {\n homedir(): string;\n}\n\nfunction builtin<T>(id: string): T | undefined {\n return nodeBuiltinSync<T>(id);\n}\n\n/**\n * Make the synchronous file reads here work on Node without\n * `process.getBuiltinModule` (Node 18, Node 20 before 20.16). A no-op elsewhere.\n */\nexport function prepareCliLoginFiles(): Promise<void> {\n return preloadNodeBuiltins([\"node:fs\", \"node:os\"]);\n}\n\nfunction env(name: string): string | undefined {\n const proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n const value = proc?.env?.[name];\n return value === undefined || value === \"\" ? undefined : value;\n}\n\n/** `$BEAKR_HOME`, else `~/.beakr`; undefined without file access. */\nexport function beakrHome(): string | undefined {\n const override = env(\"BEAKR_HOME\");\n if (override) return override;\n const home = builtin<NodeOs>(\"node:os\")?.homedir();\n return home ? `${home.replace(/[\\\\/]+$/, \"\")}/.beakr` : undefined;\n}\n\nfunction readJson(name: string): unknown {\n const home = beakrHome();\n const fs = builtin<NodeFs>(\"node:fs\");\n if (!home || !fs) return undefined;\n try {\n return JSON.parse(fs.readFileSync(`${home}/${name}`, \"utf8\"));\n } catch {\n return undefined;\n }\n}\n\n/** An origin to compare by, or undefined for a value that is not a URL. */\nfunction originOf(url: string): string | undefined {\n try {\n return normalizeOrigin(url);\n } catch {\n return undefined;\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\n/** The CLI's `config.json` (empty when absent or unreadable). */\nfunction cliConfig(): Record<string, unknown> {\n return record(readJson(\"config.json\")) ?? {};\n}\n\n/** The API the CLI is configured for: `BEAKR_BASE_URL`, `BEAKR_API_URL`, the config, then production. */\nfunction configuredBaseUrl(): string {\n const configured = cliConfig()[\"api_url\"];\n return env(\"BEAKR_BASE_URL\") ?? env(\"BEAKR_API_URL\") ?? (typeof configured === \"string\" && configured ? configured : DEFAULT_BASE_URL);\n}\n\nfunction loginFrom(entry: unknown): (CliLogin & { baseUrl?: string }) | undefined {\n const data = record(entry);\n const accessToken = data?.[\"access_token\"];\n if (typeof accessToken !== \"string\" || !accessToken) return undefined;\n const login: CliLogin & { baseUrl?: string } = { accessToken };\n const expiresAt = data?.[\"expires_at\"];\n if (typeof expiresAt === \"number\") login.expiresAt = expiresAt * 1000;\n const baseUrl = data?.[\"base_url\"];\n if (typeof baseUrl === \"string\" && baseUrl) login.baseUrl = baseUrl;\n return login;\n}\n\n/**\n * Origins a logout recorded while the stored logins could not be rewritten\n * (`credentials.barriers`, `{origin: {nonce, at}}`). A stored copy keeps such\n * an origin's login only when it declares it was written after that barrier.\n */\nfunction originBarriers(): Record<string, string> {\n const barriers: Record<string, string> = {};\n for (const [origin, barrier] of Object.entries(record(readJson(\"credentials.barriers\")) ?? {})) {\n const nonce = record(barrier)?.[\"nonce\"];\n if (typeof nonce === \"string\") barriers[origin] = nonce;\n }\n return barriers;\n}\n\n/** The CLI's sign-in for `origin` from `credentials`, or undefined. */\nexport function readCliLogin(origin: string): CliLogin | undefined {\n const data = record(readJson(\"credentials\"));\n if (!data) return undefined;\n const wanted = originOf(origin);\n if (!wanted) return undefined;\n let found: CliLogin | undefined;\n const logins = record(data[\"logins\"]);\n if (logins) {\n for (const [stored, entry] of Object.entries(logins)) {\n if (originOf(stored) === wanted) found = loginFrom(entry);\n }\n } else if (!(\"logins\" in data)) {\n // A version-1 payload: one bare pair, filed under the origin it records\n // or, recording none, under the configured API.\n const legacy = loginFrom(data);\n if (legacy && originOf(legacy.baseUrl ?? configuredBaseUrl()) === wanted) found = legacy;\n }\n if (!found) return undefined;\n const barrier = originBarriers()[wanted];\n if (barrier !== undefined && record(data[\"origin_after\"])?.[wanted] !== barrier) return undefined;\n return { accessToken: found.accessToken, ...(found.expiresAt !== undefined ? { expiresAt: found.expiresAt } : {}) };\n}\n\n/** Whether the stored access token is past (or within the CLI's skew of) its expiry. */\nexport function cliLoginExpired(login: CliLogin, now = Date.now()): boolean {\n return login.expiresAt !== undefined && now >= login.expiresAt - REFRESH_SKEW_SECONDS * 1000;\n}\n\n/** The API key saved by `beakr auth login --with-api-key`, when it was saved for `origin`. */\nexport function readCliSavedKey(origin: string): string | undefined {\n const config = cliConfig();\n const key = config[\"api_key\"];\n if (typeof key !== \"string\" || !key) return undefined;\n const apiUrl = typeof config[\"api_url\"] === \"string\" && config[\"api_url\"] ? config[\"api_url\"] : DEFAULT_BASE_URL;\n const wanted = originOf(origin);\n return wanted !== undefined && originOf(apiUrl) === wanted ? key : undefined;\n}\n\n/** `~/.beakr/service-account.json` when it exists (the chain's default service account file). */\nexport function defaultServiceAccountFile(): string | undefined {\n const home = beakrHome();\n const fs = builtin<NodeFs>(\"node:fs\");\n if (!home || !fs) return undefined;\n const path = `${home}/service-account.json`;\n try {\n return fs.existsSync(path) ? path : undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * SHA-256 of a Blob, read as a stream, as hex: the ``content_hash`` an upload\n * declares (Python's ``hashlib.sha256``, read in blocks).\n *\n * Web Crypto has no incremental digest, and hashing a multipart-sized file\n * through ``crypto.subtle.digest`` would hold all of it in memory. Node uses\n * its own streaming hash (loaded lazily, so edge bundles never import it);\n * other runtimes use the small incremental implementation below.\n */\n\nimport { nodeBuiltin } from \"./node-builtins.js\";\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\n/** Incremental SHA-256 (FIPS 180-4) for runtimes without a streaming digest. */\nexport class Sha256 {\n private readonly state = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ]);\n private readonly block = new Uint8Array(64);\n private readonly words = new Uint32Array(64);\n private buffered = 0;\n private length = 0;\n\n update(data: Uint8Array): this {\n let offset = 0;\n this.length += data.length;\n if (this.buffered > 0) {\n const take = Math.min(64 - this.buffered, data.length);\n this.block.set(data.subarray(0, take), this.buffered);\n this.buffered += take;\n offset = take;\n if (this.buffered < 64) return this;\n this.compress(this.block, 0);\n this.buffered = 0;\n }\n for (; offset + 64 <= data.length; offset += 64) this.compress(data, offset);\n if (offset < data.length) {\n this.block.set(data.subarray(offset), 0);\n this.buffered = data.length - offset;\n }\n return this;\n }\n\n hex(): string {\n const bits = this.length * 8;\n const tail = new Uint8Array(this.buffered < 56 ? 64 : 128);\n tail.set(this.block.subarray(0, this.buffered));\n tail[this.buffered] = 0x80;\n const view = new DataView(tail.buffer);\n view.setUint32(tail.length - 8, Math.floor(bits / 0x100000000));\n view.setUint32(tail.length - 4, bits >>> 0);\n for (let offset = 0; offset < tail.length; offset += 64) this.compress(tail, offset);\n return Array.from(this.state, (word) => word.toString(16).padStart(8, \"0\")).join(\"\");\n }\n\n private compress(data: Uint8Array, offset: number): void {\n const w = this.words;\n for (let i = 0; i < 16; i += 1) {\n const j = offset + i * 4;\n w[i] = ((data[j]! << 24) | (data[j + 1]! << 16) | (data[j + 2]! << 8) | data[j + 3]!) >>> 0;\n }\n for (let i = 16; i < 64; i += 1) {\n const a = w[i - 15]!;\n const b = w[i - 2]!;\n const s0 = ((a >>> 7) | (a << 25)) ^ ((a >>> 18) | (a << 14)) ^ (a >>> 3);\n const s1 = ((b >>> 17) | (b << 15)) ^ ((b >>> 19) | (b << 13)) ^ (b >>> 10);\n w[i] = (w[i - 16]! + s0 + w[i - 7]! + s1) >>> 0;\n }\n let [a, b, c, d, e, f, g, h] = this.state as unknown as number[];\n for (let i = 0; i < 64; i += 1) {\n const S1 = ((e! >>> 6) | (e! << 26)) ^ ((e! >>> 11) | (e! << 21)) ^ ((e! >>> 25) | (e! << 7));\n const ch = (e! & f!) ^ (~e! & g!);\n const t1 = (h! + S1 + ch + K[i]! + w[i]!) >>> 0;\n const S0 = ((a! >>> 2) | (a! << 30)) ^ ((a! >>> 13) | (a! << 19)) ^ ((a! >>> 22) | (a! << 10));\n const maj = (a! & b!) ^ (a! & c!) ^ (b! & c!);\n const t2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d! + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) >>> 0;\n }\n const s = this.state;\n s[0] = (s[0]! + a!) >>> 0;\n s[1] = (s[1]! + b!) >>> 0;\n s[2] = (s[2]! + c!) >>> 0;\n s[3] = (s[3]! + d!) >>> 0;\n s[4] = (s[4]! + e!) >>> 0;\n s[5] = (s[5]! + f!) >>> 0;\n s[6] = (s[6]! + g!) >>> 0;\n s[7] = (s[7]! + h!) >>> 0;\n }\n}\n\nasync function* chunks(blob: Blob): AsyncGenerator<Uint8Array> {\n const reader = blob.stream().getReader();\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) return;\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nasync function nodeHash(): Promise<{ update(data: Uint8Array): void; digest(enc: \"hex\"): string } | null> {\n if (typeof process === \"undefined\" || !process.versions?.node) return null;\n try {\n const crypto = await nodeBuiltin<typeof import(\"node:crypto\")>(\"node:crypto\");\n return crypto.createHash(\"sha256\");\n } catch {\n return null;\n }\n}\n\n/** Hex SHA-256 of ``blob``, read as a stream. */\nexport async function sha256Hex(blob: Blob): Promise<string> {\n const node = await nodeHash();\n if (node) {\n for await (const chunk of chunks(blob)) node.update(chunk);\n return node.digest(\"hex\");\n }\n const hash = new Sha256();\n for await (const chunk of chunks(blob)) hash.update(chunk);\n return hash.hex();\n}\n","/**\n * The Beakr CLI's sign-in, asked of the CLI itself (`beakr auth token --json`).\n *\n * The credentials file (`cli-login.ts`) is the fast path, but it cannot serve\n * every login: the CLI keeps the login in the OS keychain when one is\n * available, and an expired login has to be refreshed under the CLI's\n * cross-process lock, which Node cannot take. For both, the SDK runs the\n * installed CLI, which reads the keychain or the file exactly as every `beakr`\n * command does and refreshes through its own locked path. The SDK therefore\n * never rotates the stored pair and never sees a refresh token, so it cannot\n * spend one twice or bring back a login `beakr auth logout` cleared.\n *\n * Node.js only. `node:child_process` is loaded when the CLI is first run, never\n * at import time, so the module bundles for browsers and edge runtimes, where\n * `runCliToken` reports the CLI as unavailable without trying.\n */\n\nimport type { CliLogin } from \"./cli-login.js\";\nimport { isNodeRuntime, nodeBuiltin } from \"./node-builtins.js\";\nimport { Sha256 } from \"./sha256.js\";\n\n/** Long enough for the CLI to wait out another process's refresh (its lock times out at 60s). */\nconst CLI_TIMEOUT_MS = 90_000;\n\n/** What running the CLI produced. `notFound` when the executable is not installed. */\nexport interface CliRunResult {\n exitCode: number | null;\n stdout: string;\n stderr: string;\n notFound?: boolean;\n}\n\n/** Runs `beakr` with `args` and collects its output. Injectable for tests. */\nexport type CliRunner = (args: readonly string[], options: { timeoutMs: number }) => Promise<CliRunResult>;\n\n/** A token the CLI handed out. `source` is the CLI's credential source (`cli_tokens` for a sign-in). */\nexport interface CliToken extends CliLogin {\n source: string;\n}\n\nexport type CliTokenOutcome =\n | { ok: true; token: CliToken }\n | {\n ok: false;\n /**\n * `unavailable`: no CLI to ask (not installed, too old for `auth token`,\n * or not Node.js). `unauthenticated`: the CLI has no credential for this\n * API, or its sign-in could not be refreshed. `failed`: anything else.\n */\n reason: \"unavailable\" | \"unauthenticated\" | \"failed\";\n code?: string;\n message: string;\n };\n\ninterface ChildProcessModule {\n execFile(\n file: string,\n args: readonly string[],\n options: { timeout: number; windowsHide: boolean; maxBuffer: number; env?: Record<string, string | undefined> },\n callback: (error: (Error & { code?: unknown }) | null, stdout: string, stderr: string) => void,\n ): unknown;\n}\n\nlet runnerOverride: CliRunner | undefined;\n\n/**\n * Replace how the CLI is run (tests), or restore the default with no argument.\n * Not part of the public API.\n */\nexport function setCliRunner(runner?: CliRunner): void {\n runnerOverride = runner;\n}\n\nfunction env(name: string): string | undefined {\n const proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n const value = proc?.env?.[name];\n return value === undefined || value === \"\" ? undefined : value;\n}\n\n/** Run the installed CLI: `BEAKR_CLI_PATH`, else `beakr` on the PATH. */\nconst defaultRunner: CliRunner = async (args, { timeoutMs }) => {\n const childProcess = await nodeBuiltin<ChildProcessModule>(\"node:child_process\");\n const executable = env(\"BEAKR_CLI_PATH\") ?? \"beakr\";\n return new Promise<CliRunResult>((resolve) => {\n childProcess.execFile(\n executable,\n args,\n { timeout: timeoutMs, windowsHide: true, maxBuffer: 1024 * 1024 },\n (error, stdout, stderr) => {\n if (error && error.code === \"ENOENT\") {\n resolve({ exitCode: null, stdout: \"\", stderr: String(stderr ?? \"\"), notFound: true });\n return;\n }\n const exitCode = error ? (typeof error.code === \"number\" ? error.code : null) : 0;\n resolve({ exitCode, stdout: String(stdout ?? \"\"), stderr: String(stderr ?? \"\") });\n },\n );\n });\n};\n\n/** Hex SHA-256 of a token, so a refused token is named without putting it on a command line. */\nexport function tokenDigest(token: string): string {\n return new Sha256().update(new TextEncoder().encode(token)).hex();\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Ask the CLI for the access token for `baseUrl`, refreshed if it was about to\n * expire. With `rejectedToken` (a token the API just refused), the CLI\n * refreshes the sign-in if that token is still the stored one, and otherwise\n * returns the newer token another process already saved.\n */\nexport async function runCliToken(baseUrl: string, options: { rejectedToken?: string } = {}): Promise<CliTokenOutcome> {\n const runner = runnerOverride ?? (isNodeRuntime() ? defaultRunner : undefined);\n if (!runner) return { ok: false, reason: \"unavailable\", message: \"The Beakr CLI can only be run from Node.js.\" };\n const args = [\"auth\", \"token\", \"--json\", \"--api-url\", baseUrl];\n if (options.rejectedToken !== undefined) args.push(\"--rejected-sha256\", tokenDigest(options.rejectedToken));\n let result: CliRunResult;\n try {\n result = await runner(args, { timeoutMs: CLI_TIMEOUT_MS });\n } catch (error) {\n return { ok: false, reason: \"unavailable\", message: `Could not run the Beakr CLI: ${String(error)}` };\n }\n if (result.notFound) {\n return { ok: false, reason: \"unavailable\", message: \"The Beakr CLI (`beakr`) is not installed or not on the PATH.\" };\n }\n const body = parseJson(result.stdout);\n if (result.exitCode === 0) {\n const accessToken = body?.[\"access_token\"];\n if (typeof accessToken !== \"string\" || !accessToken) {\n return { ok: false, reason: \"failed\", message: \"`beakr auth token` printed no access token.\" };\n }\n const token: CliToken = { accessToken, source: typeof body?.[\"source\"] === \"string\" ? (body[\"source\"] as string) : \"cli\" };\n const expiresAt = body?.[\"expires_at\"];\n if (typeof expiresAt === \"number\") token.expiresAt = expiresAt * 1000;\n return { ok: true, token };\n }\n const error = body?.[\"error\"] as { code?: unknown; message?: unknown } | undefined;\n const code = typeof error?.code === \"string\" ? error.code : undefined;\n const message = typeof error?.message === \"string\" ? error.message : result.stderr.trim() || \"no output\";\n if (result.exitCode === 3) return { ok: false, reason: \"unauthenticated\", ...(code ? { code } : {}), message };\n if (!error) {\n // A CLI from before `beakr auth token` exits 2 with a usage error.\n return { ok: false, reason: \"unavailable\", message: `The installed Beakr CLI cannot hand out a token (${message}); run \\`beakr update\\`.` };\n }\n return { ok: false, reason: \"failed\", ...(code ? { code } : {}), message };\n}\n","/**\n * Keep secrets out of what a client prints of itself.\n *\n * Mirrors the Python SDK's `mask`: a secret keeps only its kind (`bk_live_`)\n * and at most its last four characters (`bk_live_...a1b2`). A short secret is\n * masked whole.\n */\n\n/** Prefixes of Beakr secrets; kept in a masked value because they name its kind. */\nconst SECRET_PREFIXES = [\"bk_live_\", \"bk_test_\", \"bk_at_\", \"bk_rt_\"] as const;\n\n/** A secret shorter than this past its prefix is masked whole. */\nconst MIN_TAIL_LENGTH = 16;\n\n/** `bk_live_...a1b2` for `bk_live_<secret>a1b2`; `undefined` and `\"\"` unchanged. */\nexport function maskSecret(secret: string | undefined): string | undefined {\n if (!secret) return secret;\n const prefix = SECRET_PREFIXES.find((candidate) => secret.startsWith(candidate)) ?? \"\";\n const body = secret.slice(prefix.length);\n if (body.length < MIN_TAIL_LENGTH) return `${prefix}***`;\n return `${prefix}...${body.slice(-4)}`;\n}\n","/**\n * Which documented creates replay a resend that carries the same `Idempotency-Key`.\n *\n * The engine guarantees (developer platform W1.2) that a create retried with\n * the same key and body yields exactly one resource and the original response,\n * even when the first attempt failed after committing. Its test\n * `tests/api/test_public_create_idempotency.py` classifies every public POST as\n * a keyed create or as a POST that is not a create; only the keyed creates of\n * the documented contract are listed here, as this package sends no other\n * route. The Python SDK (beakr-python) carries the same list\n * (`beakr_sdk/_replay.py`), and its `tests/test_replaying_creates.py` compares\n * both with the engine.\n *\n * A POST that is not listed (a decision such as `accept`, a token exchange, a\n * read with a body) is not resent after an ambiguous failure: some are refused\n * on a repeat, and a token refresh resent with the same refresh token is\n * treated as theft and revokes the session.\n *\n * The public contract does not yet mark these operations, so the list is\n * curated from the engine's classification rather than generated.\n */\n\n/** POST path templates whose handler replays a keyed resend (canonical paths and their aliases). */\nexport const REPLAYING_CREATES: readonly string[] = [\n \"/v1/bulk/complete\",\n \"/v1/conversations/import\",\n \"/v1/folders\",\n \"/v1/interview/links\",\n \"/v1/interview/sendables\",\n \"/v1/interview/sendables/{sendable_id}/links\",\n \"/v1/knowledge/wiki/write\",\n \"/v1/labels\",\n \"/v1/labels/{label_id}/members\",\n \"/v1/labels/{label_id}/projects\",\n \"/v1/me/api-keys\",\n \"/v1/organizations/{org_id}/external-users\",\n \"/v1/organizations/{org_id}/members\",\n \"/v1/organizations/{org_id}/service-accounts\",\n \"/v1/organizations/{org_id}/service-accounts/{account_id}/keys\",\n \"/v1/projects\",\n \"/v1/projects/{project_id}/invite\",\n \"/v1/projects/{project_id}/members\",\n \"/v1/runs\",\n \"/v1/skills\",\n \"/v1/uploads\",\n \"/v1/uploads/{upload_id}/complete\",\n];\n\n/**\n * Conflict codes a keyed create answers while an earlier attempt with the same\n * key still holds the claim (or was taken over). Both mean \"retry to receive\n * the result\" and carry `Retry-After`.\n */\nexport const IDEMPOTENCY_RETRY_CODES: ReadonlySet<string> = new Set([\n \"idempotency_in_progress\",\n \"idempotency_superseded\",\n]);\n\nfunction escapeRegExp(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst PATTERNS = REPLAYING_CREATES.map(\n (template) => new RegExp(`^${template.split(/\\{[^}]+\\}/).map(escapeRegExp).join(\"[^/]+\")}/?$`),\n);\n\n/** Whether a keyed `method path` (a concrete path, no query) replays a resend. */\nexport function replaysIdempotencyKey(method: string, path: string): boolean {\n if (method.toUpperCase() !== \"POST\") return false;\n const bare = path.split(\"?\", 1)[0]!;\n return PATTERNS.some((pattern) => pattern.test(bare));\n}\n","export const VERSION = \"0.1.0\";\n","/**\n * The transport: request building, credentials, retries, token refresh and\n * pagination. Resources describe requests; this sends them.\n *\n * Retry policy (same as the Python SDK; spec W6.1.3, \"429 and 5xx\"):\n * - 429 is retried for every method: the server refused before doing the work;\n * except `credits_exhausted` and `quota_exceeded`, which no retry soon can fix.\n * - 500, 502, 503, 504 and connection errors are retried only when a resend\n * cannot duplicate an effect: GET, HEAD, PUT, DELETE, a create the engine\n * replays on its Idempotency-Key (`replay.ts`; the same key is resent), or a\n * route that deduplicates resends itself. Any other POST is not resent after\n * an ambiguous failure. 501 and 505 are never retried.\n * - A keyed create's 409 `idempotency_in_progress` / `idempotency_superseded`\n * (an earlier attempt still holds the key) is waited out the same way.\n * - `Retry-After` (seconds or an HTTP-date) is honored up to 60 seconds; beyond\n * that the error is returned.\n * - Other 4xx are never retried.\n */\nimport {\n APIConnectionError,\n AuthenticationError,\n BeakrError,\n errorFromResponse,\n isHtmlPage,\n parseRetryAfter,\n unexpectedPageError,\n} from \"./errors.js\";\nimport {\n type CliLogin,\n cliLoginExpired,\n defaultServiceAccountFile,\n prepareCliLoginFiles,\n readCliLogin,\n readCliSavedKey,\n} from \"./cli-login.js\";\nimport { type CliTokenOutcome, runCliToken } from \"./cli-token.js\";\nimport { isNodeRuntime, nodeBuiltinSync } from \"./node-builtins.js\";\nimport {\n normalizeOrigin,\n readServiceAccountFile,\n SERVICE_ACCOUNT_FILE_ENV,\n type ServiceAccountCredentials,\n} from \"./service-account.js\";\nimport { maskSecret } from \"./redact.js\";\nimport { IDEMPOTENCY_RETRY_CODES, replaysIdempotencyKey } from \"./replay.js\";\nimport type { Page } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\n\nexport const DEFAULT_BASE_URL = \"https://api.thebeakr.com\";\nexport const DEFAULT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_MAX_RETRIES = 2;\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n/** 429 refusals that waiting a few seconds cannot fix (out of credits, quota spent). */\nconst NOT_RETRIED_429_CODES = new Set([\"credits_exhausted\", \"quota_exceeded\"]);\nconst RETRY_SAFE_METHODS = new Set([\"GET\", \"HEAD\", \"PUT\", \"DELETE\", \"OPTIONS\"]);\nconst BACKOFF_BASE_MS = 500;\nconst BACKOFF_CAP_MS = 8_000;\nconst MAX_RETRY_AFTER_SECONDS = 60;\nconst REFRESH_SKEW_MS = 30_000;\n\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\n/** An OAuth access/refresh pair (the Beakr CLI's sign-in, or one your app obtained). */\nexport interface TokenPair {\n accessToken: string;\n refreshToken?: string;\n /** Epoch milliseconds when the access token expires. */\n expiresAt?: number;\n /**\n * The OAuth issuer's token endpoint the pair refreshes at, and the public\n * client id it was issued to. A pair without them is not refreshed: a 401\n * surfaces as AuthenticationError.\n */\n tokenEndpoint?: string;\n clientId?: string;\n}\n\n/**\n * Where a client's credential comes from, first match wins (the Python SDK's\n * order, spec W6.1.4):\n *\n * 1. `apiKey` or `tokens` passed to the client (an explicit `apiKey: \"\"` ends\n * the chain with no credential);\n * 2. `BEAKR_API_KEY`;\n * 3. `serviceAccount` passed to the client (TypeScript only: an explicit\n * choice outranks a stored one);\n * 4. the Beakr CLI's sign-in for this API (Node.js): from\n * `~/.beakr/credentials` when it holds a current one, else from the\n * installed CLI (`beakr auth token --json`), which reads the OS keychain\n * and refreshes an expired login under its own lock (`cli-token.ts`);\n * 5. the API key saved by `beakr auth login --with-api-key`, when saved for this API;\n * 6. the service account file named by `BEAKR_SERVICE_ACCOUNT_FILE`, else\n * `~/.beakr/service-account.json` when it exists.\n *\n * Links 4 to 6 read files (and may run the CLI); they are resolved at the\n * first request, and skipped in runtimes without file access. `cliLogin: false`\n * skips 4 and 5.\n */\nexport interface ClientOptions {\n /** An API key (`bk_live_...`). Defaults to `BEAKR_API_KEY` when a process env exists. */\n apiKey?: string;\n /** An OAuth token pair. Refreshed at its `tokenEndpoint` before expiry and on a 401. */\n tokens?: TokenPair;\n /**\n * A service account's credentials, parsed or as a file path. Used only when\n * no `apiKey`, `tokens` or `BEAKR_API_KEY` is set. Without it, the file named\n * by `BEAKR_SERVICE_ACCOUNT_FILE` (or `~/.beakr/service-account.json`) is used\n * after the CLI's stored sign-in. A file bound to another API is refused.\n */\n serviceAccount?: ServiceAccountCredentials | string;\n /**\n * Use the Beakr CLI's stored sign-in (`beakr auth login`) for this API when no\n * explicit credential, `BEAKR_API_KEY` or `serviceAccount` is given: the\n * credentials file, else the installed CLI (`BEAKR_CLI_PATH`, else `beakr` on\n * the PATH), which also covers a login kept in the OS keychain and refreshes\n * an expired one. Node.js only; default true.\n */\n cliLogin?: boolean;\n /** Called with every rotated token pair; persist it, the old refresh token is dead. */\n onTokens?: (tokens: TokenPair) => void | Promise<void>;\n /**\n * Defaults to `BEAKR_BASE_URL`, then `BEAKR_API_URL` (the name the CLI and\n * the Python SDK also read, in the same order), then https://api.thebeakr.com.\n */\n baseUrl?: string;\n /** Sent as `X-Beakr-Client` (attribution only). */\n clientName?: string;\n /** Sent as `X-Beakr-Agent` (attribution only). */\n agent?: string;\n /** Sent as `X-Org-Id` to select an organization for session-like credentials. */\n orgId?: string;\n timeoutMs?: number;\n maxRetries?: number;\n defaultHeaders?: Record<string, string>;\n /** Injectable for tests and custom runtimes. Defaults to global `fetch`. */\n fetch?: FetchLike;\n /** Injectable for tests. */\n sleep?: (ms: number) => Promise<void>;\n /**\n * Injectable for tests: the clock (epoch milliseconds) an HTTP-date\n * `Retry-After` is measured from. Defaults to `Date.now`.\n */\n now?: () => number;\n}\n\nexport type QueryValue = string | number | boolean | null | undefined | readonly string[];\n\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n path: string;\n query?: Record<string, QueryValue>;\n /** A JSON value, or a `FormData` sent as multipart (fetch sets its boundary). */\n body?: unknown;\n /** Send the credential (off for anonymous routes). */\n authenticated?: boolean;\n /** Attach an `Idempotency-Key`, stable across this call's retries. */\n idempotent?: boolean;\n /** Use this key instead of a fresh one, so the caller's own retries replay too. */\n idempotencyKey?: string;\n /** The route deduplicates a resend itself, so ambiguous failures may be retried. */\n serverDeduplicated?: boolean;\n /** How to decode a success body. */\n responseType?: \"json\" | \"text\" | \"bytes\" | \"none\";\n headers?: Record<string, string>;\n signal?: AbortSignal;\n /**\n * Wait at least this long for the response, even when the client's own\n * timeout is shorter (a route that is slow by design, like research).\n */\n minTimeoutMs?: number;\n /**\n * Told the status and request id of the successful response, before its body\n * is decoded: for a route that reports a refusal inside a 200 body (the\n * Knowledge door), so the error built from that body can name both.\n */\n onResponse?: (meta: ResponseMeta) => void;\n}\n\n/** What a successful response said about itself, for {@link RequestOptions.onResponse}. */\nexport interface ResponseMeta {\n status: number;\n requestId: string | undefined;\n}\n\nfunction env(name: string): string | undefined {\n const proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n const value = proc?.env?.[name];\n return value === undefined || value === \"\" ? undefined : value;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\nexport function buildQuery(query: Record<string, QueryValue> | undefined): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const item of value) params.append(key, item);\n } else {\n params.append(key, String(value));\n }\n }\n const text = params.toString();\n return text ? `?${text}` : \"\";\n}\n\nfunction isFormData(body: unknown): body is FormData {\n return typeof FormData !== \"undefined\" && body instanceof FormData;\n}\n\n/** A request body: multipart as is, anything else as JSON. */\nfunction encodeBody(body: unknown): BodyInit {\n return isFormData(body) ? body : JSON.stringify(body);\n}\n\n/** Drop undefined fields from a JSON body, so omitted options are not sent as null. */\nexport function cleanBody<T extends Record<string, unknown>>(body: T): Partial<T> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined) out[key] = value;\n }\n return out as Partial<T>;\n}\n\n/** Chain links that need file access, waiting for the first request. */\ninterface FileLinks {\n step: \"files\";\n serviceAccount: string | undefined;\n cliLogin: boolean;\n}\n\n/** The CLI's sign-in, to ask the CLI for (the file has none for this API, or an expired one). */\ninterface CliLinks {\n step: \"cli\";\n fileLoginExpired: boolean;\n}\n\ntype PendingLinks = FileLinks | CliLinks;\n\n/** Node's hook for `util.inspect` and `console.log`; a plain symbol everywhere else. */\nexport const INSPECT_CUSTOM = Symbol.for(\"nodejs.util.inspect.custom\");\n\n/** The parts of a transport that are safe to print. */\nexport interface TransportDescription {\n baseUrl: string;\n orgId: string | undefined;\n /** The credential in use, masked (`bk_live_...a1b2`), or \"unresolved\". */\n credential: string;\n}\n\nexport class Transport {\n readonly baseUrl: string;\n readonly clientName: string;\n readonly agent: string | undefined;\n orgId: string | undefined;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n // The credential lives in #private fields: a TypeScript `private` field is an\n // ordinary enumerable property, so `console.log(beakr)`, `util.inspect` and\n // `JSON.stringify` printed the full key. Inspection shows it masked instead.\n #apiKey: string | undefined;\n #tokens: TokenPair | undefined;\n /** The CLI's sign-in, when that is the credential (never refreshed here: the CLI refreshes it). */\n #cliLogin: CliLogin | undefined;\n /** Credential-chain links still to resolve at the first request (see `settleCredential`). */\n private pendingLinks: PendingLinks | undefined;\n private settling: Promise<void> | undefined;\n /** In-flight `beakr auth token` runs, keyed by the refused token (\"\" for none). */\n private readonly cliRuns = new Map<string, Promise<CliTokenOutcome>>();\n private readonly onTokens: ClientOptions[\"onTokens\"];\n /** May carry an `Authorization` header, so it is kept off the object like the key. */\n readonly #defaultHeaders: Record<string, string>;\n private readonly fetchImpl: FetchLike;\n private readonly sleep: (ms: number) => Promise<void>;\n private readonly now: () => number;\n private refreshing: Promise<void> | undefined;\n private activeOrg: Promise<string> | undefined;\n\n constructor(options: ClientOptions = {}) {\n this.baseUrl = (options.baseUrl ?? env(\"BEAKR_BASE_URL\") ?? env(\"BEAKR_API_URL\") ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n this.clientName = options.clientName ?? `sdk-typescript/${VERSION}`;\n this.agent = options.agent;\n this.orgId = options.orgId ?? env(\"BEAKR_ORG_ID\");\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxRetries = Math.max(0, options.maxRetries ?? DEFAULT_MAX_RETRIES);\n this.#tokens = options.tokens;\n this.#apiKey = options.tokens ? options.apiKey : this.resolveApiKey(options);\n this.onTokens = options.onTokens;\n this.#defaultHeaders = { ...(options.defaultHeaders ?? {}) };\n const globalFetch = (globalThis as { fetch?: FetchLike }).fetch;\n const fetchImpl = options.fetch ?? globalFetch?.bind(globalThis);\n if (!fetchImpl) throw new BeakrError(\"No fetch implementation available; pass `fetch`.\");\n this.fetchImpl = fetchImpl;\n this.sleep = options.sleep ?? defaultSleep;\n this.now = options.now ?? Date.now;\n }\n\n /**\n * Walk the credential chain (see `ClientOptions`) when no token pair is\n * given. Links that need files are resolved here when the runtime can read\n * them synchronously; on Node without `process.getBuiltinModule` they wait\n * for the first request, which loads `node:fs` first.\n */\n private resolveApiKey(options: ClientOptions): string | undefined {\n if (options.apiKey !== undefined) return options.apiKey;\n const envKey = env(\"BEAKR_API_KEY\");\n if (envKey !== undefined) return envKey;\n if (options.serviceAccount !== undefined && typeof options.serviceAccount !== \"string\") {\n return this.serviceAccountKey(options.serviceAccount);\n }\n const links: FileLinks = { step: \"files\", serviceAccount: options.serviceAccount, cliLogin: options.cliLogin !== false };\n if (isNodeRuntime() && nodeBuiltinSync(\"node:fs\") === undefined) {\n this.pendingLinks = links;\n return undefined;\n }\n return this.resolveFileLinks(links);\n }\n\n /**\n * Links 3 (a service account file path) to 6, with file access. Sets\n * `cliLogin` when the credentials file holds a current sign-in for this API,\n * and leaves the CLI to ask (`pendingLinks`) when it holds none or an expired\n * one: the login may be in the keychain, or need the CLI's locked refresh.\n */\n private resolveFileLinks(links: FileLinks): string | undefined {\n if (links.serviceAccount !== undefined) return this.serviceAccountKey(links.serviceAccount);\n if (!links.cliLogin) return this.serviceAccountKey(undefined);\n const login = readCliLogin(normalizeOrigin(this.baseUrl));\n if (login && !cliLoginExpired(login)) {\n this.#cliLogin = login;\n return undefined;\n }\n if (isNodeRuntime()) {\n this.pendingLinks = { step: \"cli\", fileLoginExpired: login !== undefined };\n return undefined;\n }\n return this.keyAfterCliLogin();\n }\n\n /** Links 5 and 6: the CLI's saved key for this API, then the service account file. */\n private keyAfterCliLogin(): string | undefined {\n const saved = readCliSavedKey(normalizeOrigin(this.baseUrl));\n if (saved !== undefined) return saved;\n return this.serviceAccountKey(undefined);\n }\n\n /** Finish the credential chain before the first authenticated request. */\n private async settleCredential(): Promise<void> {\n if (this.pendingLinks === undefined) return;\n this.settling ??= this.settleLinks().finally(() => {\n this.settling = undefined;\n });\n await this.settling;\n }\n\n /**\n * A link that fails is left pending, so the next request tries it again (the\n * CLI may be installed or signed in by then) and reports the same error.\n */\n private async settleLinks(): Promise<void> {\n for (let links = this.pendingLinks; links !== undefined; links = this.pendingLinks) {\n if (links.step === \"files\") {\n await prepareCliLoginFiles();\n const key = this.resolveFileLinks(links);\n if (this.pendingLinks === links) this.pendingLinks = undefined;\n this.#apiKey = key;\n continue;\n }\n const outcome = await this.askCli();\n if (outcome.ok) {\n this.#cliLogin = outcome.token;\n this.pendingLinks = undefined;\n return;\n }\n if (links.fileLoginExpired || outcome.reason === \"failed\") throw this.cliLoginError(outcome);\n // No CLI, or the CLI has no credential for this API: the rest of the chain.\n this.#apiKey = this.keyAfterCliLogin();\n this.pendingLinks = undefined;\n }\n }\n\n /** Run `beakr auth token` once at a time per refused token. */\n private askCli(rejectedToken?: string): Promise<CliTokenOutcome> {\n const key = rejectedToken ?? \"\";\n let run = this.cliRuns.get(key);\n if (!run) {\n run = runCliToken(this.baseUrl, rejectedToken !== undefined ? { rejectedToken } : {}).finally(() => {\n this.cliRuns.delete(key);\n });\n this.cliRuns.set(key, run);\n }\n return run;\n }\n\n /** The error for a CLI sign-in that is expired and that the CLI could not refresh. */\n private cliLoginError(outcome: Exclude<CliTokenOutcome, { ok: true }>): BeakrError {\n const origin = normalizeOrigin(this.baseUrl);\n if (outcome.reason === \"unavailable\") {\n return new AuthenticationError(\n `The Beakr CLI sign-in for ${origin} has expired, and the SDK refreshes it only through ` +\n `the CLI, which could not be run (${outcome.message}). Install the CLI or set ` +\n \"BEAKR_CLI_PATH, run `beakr auth token` to refresh it, or `beakr auth login`.\",\n { code: \"cli_login_expired\" },\n );\n }\n if (outcome.reason === \"unauthenticated\") {\n return new AuthenticationError(`The Beakr CLI sign-in for ${origin} is not usable: ${outcome.message}`, {\n code: outcome.code ?? \"cli_login_expired\",\n });\n }\n return new BeakrError(`The Beakr CLI could not provide a token for ${origin}: ${outcome.message}`, {\n code: outcome.code ?? \"cli_token_failed\",\n });\n }\n\n /**\n * The service-account link of the chain. A file named explicitly that cannot\n * be used fails here, at construction, not on the first request.\n */\n private serviceAccountKey(option: ClientOptions[\"serviceAccount\"]): string | undefined {\n const named = option ?? env(SERVICE_ACCOUNT_FILE_ENV) ?? defaultServiceAccountFile();\n if (named === undefined) return undefined;\n const account = typeof named === \"string\" ? readServiceAccountFile(named) : named;\n if (account.baseUrl && normalizeOrigin(account.baseUrl) !== normalizeOrigin(this.baseUrl)) {\n throw new AuthenticationError(\n `The service account key is for ${normalizeOrigin(account.baseUrl)}, not ` +\n `${normalizeOrigin(this.baseUrl)}; a key is only sent to the API that issued it.`,\n { code: \"unauthorized\" },\n );\n }\n return account.apiKey;\n }\n\n /** What the client may show of itself: where it talks to and its credential, masked. */\n describe(): TransportDescription {\n return {\n baseUrl: this.baseUrl,\n orgId: this.orgId,\n credential: maskSecret(this.#tokens?.accessToken ?? this.#apiKey ?? this.#cliLogin?.accessToken) ?? \"unresolved\",\n };\n }\n\n toJSON(): TransportDescription {\n return this.describe();\n }\n\n [INSPECT_CUSTOM](): string {\n return `Transport ${JSON.stringify(this.describe())}`;\n }\n\n /** The current token pair (after any refresh), when the client uses one. */\n get currentTokens(): TokenPair | undefined {\n return this.#tokens ? { ...this.#tokens } : undefined;\n }\n\n private authHeader(): Record<string, string> {\n const token = this.#tokens?.accessToken ?? this.#apiKey ?? this.#cliLogin?.accessToken;\n if (!token) {\n throw new AuthenticationError(\n \"No credential configured: pass `apiKey` or `tokens`, set BEAKR_API_KEY or \" +\n \"BEAKR_SERVICE_ACCOUNT_FILE, or sign in with `beakr auth login`.\",\n { code: \"no_credential\" },\n );\n }\n return { Authorization: `Bearer ${token}` };\n }\n\n private headersFor(options: RequestOptions, idempotencyKey: string | undefined): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"X-Beakr-Client\": this.clientName,\n ...this.#defaultHeaders,\n };\n if (this.agent) headers[\"X-Beakr-Agent\"] = this.agent;\n if (this.orgId) headers[\"X-Org-Id\"] = this.orgId;\n if (options.authenticated !== false) Object.assign(headers, this.authHeader());\n if (idempotencyKey) headers[\"Idempotency-Key\"] = idempotencyKey;\n if (options.body !== undefined && !isFormData(options.body)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n Object.assign(headers, options.headers ?? {});\n return headers;\n }\n\n /**\n * Before an authenticated request: finish the credential chain, then, on the\n * CLI's sign-in, replace an expired access token -- with a current one from\n * the credentials file when the CLI has already refreshed it, else by asking\n * the CLI, which refreshes it under its lock.\n */\n private async prepareCredential(options: RequestOptions): Promise<void> {\n if (options.authenticated === false) return;\n await this.settleCredential();\n if (!this.#cliLogin || !cliLoginExpired(this.#cliLogin)) return;\n const stored = readCliLogin(normalizeOrigin(this.baseUrl));\n if (stored && !cliLoginExpired(stored)) {\n this.#cliLogin = stored;\n return;\n }\n const outcome = await this.askCli();\n if (!outcome.ok) throw this.cliLoginError(outcome);\n this.#cliLogin = outcome.token;\n }\n\n /**\n * After a 401 on the CLI's sign-in: adopt a newer pair from the credentials\n * file, else ask the CLI, which refreshes the login if the refused token is\n * still the stored one. True when there is a different token to resend with.\n */\n private async recoverCliLogin(): Promise<boolean> {\n const current = this.#cliLogin;\n if (!current) return false;\n const stored = readCliLogin(normalizeOrigin(this.baseUrl));\n if (stored && stored.accessToken !== current.accessToken && !cliLoginExpired(stored)) {\n this.#cliLogin = stored;\n return true;\n }\n const outcome = await this.askCli(current.accessToken);\n if (!outcome.ok || outcome.token.accessToken === current.accessToken) return false;\n this.#cliLogin = outcome.token;\n return true;\n }\n\n private canRefresh(): boolean {\n return Boolean(this.#tokens?.refreshToken && this.#tokens.tokenEndpoint);\n }\n\n private needsProactiveRefresh(): boolean {\n const expiresAt = this.#tokens?.expiresAt;\n return this.canRefresh() && expiresAt !== undefined && Date.now() >= expiresAt - REFRESH_SKEW_MS;\n }\n\n /** Rotate the token pair once, even when several requests notice at the same time. */\n async refreshTokens(): Promise<void> {\n if (!this.refreshing) {\n this.refreshing = this.doRefresh().finally(() => {\n this.refreshing = undefined;\n });\n }\n return this.refreshing;\n }\n\n /** Refresh at the OAuth issuer's token endpoint (RFC 6749 section 6). */\n private async doRefresh(): Promise<void> {\n const previous = this.#tokens;\n if (!previous?.refreshToken || !previous.tokenEndpoint) {\n throw new AuthenticationError(\"No refresh token and token endpoint to refresh with.\");\n }\n const data = await this.postExternalForm<Record<string, unknown>>(previous.tokenEndpoint, {\n grant_type: \"refresh_token\",\n refresh_token: previous.refreshToken,\n client_id: previous.clientId ?? \"\",\n });\n this.#tokens = tokenPairFromResponse(data, previous);\n await this.onTokens?.({ ...this.#tokens });\n }\n\n /** Send a request, applying refresh and the retry policy. */\n async request<T = unknown>(options: RequestOptions): Promise<T> {\n return this.send<T>(options, { allowRefresh: true });\n }\n\n private async send<T>(options: RequestOptions, { allowRefresh }: { allowRefresh: boolean }): Promise<T> {\n if (allowRefresh && options.authenticated !== false && this.needsProactiveRefresh()) {\n await this.refreshTokens();\n }\n await this.prepareCredential(options);\n const idempotencyKey =\n options.idempotencyKey ?? (options.idempotent ? globalThis.crypto.randomUUID() : undefined);\n const replaysKey = idempotencyKey !== undefined && replaysIdempotencyKey(options.method, options.path);\n const retrySafe = options.serverDeduplicated || replaysKey || RETRY_SAFE_METHODS.has(options.method);\n let refreshed = false;\n let attempt = 0;\n\n for (;;) {\n const url = `${this.baseUrl}${options.path}${buildQuery(options.query)}`;\n const init: RequestInit = {\n method: options.method,\n headers: this.headersFor(options, idempotencyKey),\n };\n if (options.body !== undefined) init.body = encodeBody(options.body);\n const timeoutMs = Math.max(this.timeoutMs, options.minTimeoutMs ?? 0);\n init.signal = combineSignals(options.signal, AbortSignal.timeout(timeoutMs));\n\n let response: Response;\n try {\n response = await this.fetchImpl(url, init);\n } catch (cause) {\n if (options.signal?.aborted) throw cause;\n if (retrySafe && attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n attempt += 1;\n continue;\n }\n throw new APIConnectionError(`Could not reach ${this.baseUrl}: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n baseUrl: this.baseUrl,\n });\n }\n\n if (response.ok) {\n options.onResponse?.({\n status: response.status,\n requestId: response.headers.get(\"x-request-id\") ?? undefined,\n });\n return (await decode(response, options.responseType ?? \"json\", this.baseUrl)) as T;\n }\n\n const body = await readBody(response);\n if (\n response.status === 401 &&\n allowRefresh &&\n !refreshed &&\n options.authenticated !== false &&\n this.canRefresh()\n ) {\n refreshed = true;\n await this.refreshTokens();\n continue;\n }\n if (response.status === 401 && !refreshed && options.authenticated !== false && (await this.recoverCliLogin())) {\n refreshed = true;\n continue;\n }\n const keyStillHeld =\n response.status === 409 && replaysKey && IDEMPOTENCY_RETRY_CODES.has(errorCode(body) ?? \"\");\n if ((RETRY_STATUSES.has(response.status) || keyStillHeld) && attempt < this.maxRetries) {\n const retryable =\n (response.status === 429 && !NOT_RETRIED_429_CODES.has(errorCode(body) ?? \"\")) ||\n (response.status !== 429 && (keyStillHeld || retrySafe));\n const retryAfter = parseRetryAfter(response.headers.get(\"retry-after\"), this.now());\n if (retryable && (retryAfter === undefined || retryAfter <= MAX_RETRY_AFTER_SECONDS)) {\n await this.sleep(retryAfter !== undefined ? retryAfter * 1000 : backoffMs(attempt));\n attempt += 1;\n continue;\n }\n }\n throw errorFromResponse(response.status, response.headers, body, response.statusText, this.now(), this.baseUrl);\n }\n }\n\n /**\n * PUT bytes to a presigned storage URL (an upload part). No Beakr headers and\n * no credential are sent: the URL's signature is the authorization, and a\n * bearer token sent to a storage host is a leaked credential. A PUT is safe to\n * resend, so network failures and retryable statuses are retried. Returns the\n * response so the caller can read headers such as `ETag`.\n */\n /**\n * A form-encoded POST to a third-party OAuth endpoint (the issuer's token endpoint).\n * The issuer is not the Beakr API, so no Beakr headers or credential are\n * sent; the request authenticates with its own form fields. A refusal is\n * raised with the endpoint's body, whose RFC 6749 `error` names the reason.\n */\n async postExternalForm<T = unknown>(url: string, form: Record<string, string>): Promise<T> {\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\", Accept: \"application/json\" },\n body: new URLSearchParams(form),\n signal: AbortSignal.timeout(this.timeoutMs),\n });\n } catch (cause) {\n throw new APIConnectionError(`Could not reach the sign-in issuer: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n });\n }\n const body = await readBody(response);\n if (!response.ok) throw errorFromResponse(response.status, response.headers, body, response.statusText, this.now(), new URL(url).origin);\n return body as T;\n }\n\n /** GET bytes from a presigned storage URL, with no Beakr credential (retried like PUTs). */\n async getExternalBytes(url: string, options: { signal?: AbortSignal } = {}): Promise<Uint8Array> {\n for (let attempt = 0; ; attempt += 1) {\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"GET\",\n signal: combineSignals(options.signal, AbortSignal.timeout(this.timeoutMs)),\n });\n } catch (cause) {\n if (options.signal?.aborted) throw cause;\n if (attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw new APIConnectionError(`Could not reach the storage host: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n });\n }\n if (response.ok) return new Uint8Array(await response.arrayBuffer());\n if (RETRY_STATUSES.has(response.status) && attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw errorFromResponse(response.status, response.headers, await readBody(response), response.statusText, this.now());\n }\n }\n\n async putExternal(\n url: string,\n body: Uint8Array | Blob,\n options: { headers?: Record<string, string>; signal?: AbortSignal } = {},\n ): Promise<Response> {\n for (let attempt = 0; ; attempt += 1) {\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"PUT\",\n headers: options.headers ?? {},\n body: body as BodyInit,\n signal: combineSignals(options.signal, AbortSignal.timeout(this.timeoutMs)),\n });\n } catch (cause) {\n if (options.signal?.aborted) throw cause;\n if (attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw new APIConnectionError(`Could not reach the storage host: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n });\n }\n if (response.ok) return response;\n if (RETRY_STATUSES.has(response.status) && attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw errorFromResponse(response.status, response.headers, await readBody(response), response.statusText, this.now());\n }\n }\n\n /**\n * One authenticated request whose body the caller reads itself (a stream).\n * No retries; a 401 is refreshed once when tokens allow. Non-2xx rejects.\n */\n async raw(options: RequestOptions): Promise<Response> {\n if (options.authenticated !== false && this.needsProactiveRefresh()) await this.refreshTokens();\n await this.prepareCredential(options);\n for (let refreshed = false; ; refreshed = true) {\n const init: RequestInit = { method: options.method, headers: this.headersFor(options, undefined) };\n if (options.body !== undefined) init.body = encodeBody(options.body);\n if (options.signal) init.signal = options.signal;\n let response: Response;\n try {\n response = await this.fetchImpl(`${this.baseUrl}${options.path}${buildQuery(options.query)}`, init);\n } catch (cause) {\n throw new APIConnectionError(`Could not reach ${this.baseUrl}: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n baseUrl: this.baseUrl,\n });\n }\n if (response.ok) return response;\n const body = await readBody(response);\n if (response.status === 401 && !refreshed && this.canRefresh()) {\n await this.refreshTokens();\n continue;\n }\n if (response.status === 401 && !refreshed && options.authenticated !== false && (await this.recoverCliLogin())) {\n continue;\n }\n throw errorFromResponse(response.status, response.headers, body, response.statusText, this.now(), this.baseUrl);\n }\n }\n\n /**\n * The org id for org-addressed routes: configured `orgId`, else the\n * caller's active org, looked up once and shared by every resource.\n */\n async resolveOrgId(): Promise<string> {\n if (this.orgId) return this.orgId;\n this.activeOrg ??= this.request<{ id?: unknown }>({ method: \"GET\", path: \"/v1/me/organization\" })\n .then((org) => {\n if (typeof org?.id !== \"string\" || !org.id) {\n throw new BeakrError(\"Could not determine the active organization.\", { code: \"no_active_org\", body: org });\n }\n return org.id;\n })\n .catch((error: unknown) => {\n // A failed lookup is not cached; the next call tries again.\n this.activeOrg = undefined;\n throw error;\n });\n return this.activeOrg;\n }\n\n /** Every item of a cursor-paginated list (`{data, next_cursor, has_more}`). */\n async *paginate<T>(options: RequestOptions, pageSize?: number): AsyncGenerator<T> {\n let cursor = options.query?.[\"cursor\"] as string | undefined;\n for (;;) {\n const query: Record<string, QueryValue> = { ...(options.query ?? {}), cursor };\n if (pageSize !== undefined) query[\"limit\"] = pageSize;\n const page = await this.request<Page<T> | T[]>({ ...options, query });\n if (Array.isArray(page)) {\n // An older route answering a bare list is one whole page.\n yield* page;\n return;\n }\n yield* page.data ?? [];\n if (!page.has_more || !page.next_cursor) return;\n cursor = page.next_cursor;\n }\n }\n\n get sleeper(): (ms: number) => Promise<void> {\n return this.sleep;\n }\n}\n\n/** Abort when either signal aborts. `AbortSignal.any` exists only from Node 20.3. */\nfunction combineSignals(caller: AbortSignal | undefined, timeout: AbortSignal): AbortSignal {\n if (!caller) return timeout;\n const any = (AbortSignal as { any?: (signals: AbortSignal[]) => AbortSignal }).any;\n if (any) return any([caller, timeout]);\n const controller = new AbortController();\n const abort = (signal: AbortSignal) => () => controller.abort(signal.reason);\n if (caller.aborted) controller.abort(caller.reason);\n caller.addEventListener(\"abort\", abort(caller), { once: true });\n timeout.addEventListener(\"abort\", abort(timeout), { once: true });\n return controller.signal;\n}\n\n/** Exponential backoff with full jitter: ~0.5s, 1s, 2s ... capped at 8s. */\nexport function backoffMs(attempt: number): number {\n const ceiling = Math.min(BACKOFF_CAP_MS, BACKOFF_BASE_MS * 2 ** attempt);\n return ceiling / 2 + Math.random() * (ceiling / 2);\n}\n\n/**\n * A pair from an OAuth token response. `previous` carries the refresh token\n * (an issuer may not rotate it) and where the pair refreshes.\n */\nexport function tokenPairFromResponse(data: Record<string, unknown>, previous?: TokenPair): TokenPair {\n const accessToken = data[\"access_token\"];\n if (typeof accessToken !== \"string\") {\n throw new AuthenticationError(\"Token response carried no access_token.\", { body: data });\n }\n const pair: TokenPair = { accessToken };\n const refresh = typeof data[\"refresh_token\"] === \"string\" ? data[\"refresh_token\"] : previous?.refreshToken;\n if (refresh) pair.refreshToken = refresh;\n if (previous?.tokenEndpoint) pair.tokenEndpoint = previous.tokenEndpoint;\n if (previous?.clientId) pair.clientId = previous.clientId;\n const expiresIn = data[\"expires_in\"];\n if (typeof expiresIn === \"number\") pair.expiresAt = Date.now() + expiresIn * 1000;\n return pair;\n}\n\n/** The error code of a refusal body: the envelope's, else a structured `detail`'s. */\nfunction errorCode(body: unknown): string | undefined {\n if (!body || typeof body !== \"object\") return undefined;\n const record = body as Record<string, unknown>;\n for (const holder of [record[\"error\"], record[\"detail\"]]) {\n if (holder && typeof holder === \"object\") {\n const code = (holder as Record<string, unknown>)[\"code\"];\n if (typeof code === \"string\") return code;\n }\n }\n return undefined;\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nasync function decode(\n response: Response,\n type: NonNullable<RequestOptions[\"responseType\"]>,\n baseUrl: string,\n): Promise<unknown> {\n if (type === \"none\" || response.status === 204) return undefined;\n if (type === \"bytes\") return new Uint8Array(await response.arrayBuffer());\n if (type === \"text\") return response.text();\n // A JSON-typed call that receives a file (an older contract, or an\n // undeclared media type) must not be decoded as text: that corrupts bytes.\n const contentType = (response.headers.get(\"content-type\") ?? \"\").toLowerCase();\n if (contentType && !isTextual(contentType)) return new Uint8Array(await response.arrayBuffer());\n const body = await readBody(response);\n // An HTML page answering 200 for any path: the base URL is not a Beakr API.\n if (typeof body === \"string\" && isHtmlPage(contentType, body)) {\n throw unexpectedPageError(response.status, response.headers, body, baseUrl);\n }\n return body;\n}\n\nfunction isTextual(contentType: string): boolean {\n return (\n contentType.includes(\"json\") ||\n contentType.startsWith(\"text/\") ||\n contentType.includes(\"xml\") ||\n contentType.includes(\"x-www-form-urlencoded\")\n );\n}\n","/**\n * One URL path segment from a caller-supplied value (an ID, a slug).\n *\n * `encodeURIComponent` leaves `.` and `..` unchanged, and URL parsing then\n * normalises them away, so `projects.get(\"..\")` would silently call a\n * different route (audit C057). Those values, and an empty one, are refused\n * before any request is built; everything else is encoded as one segment.\n */\nexport function segment(value: string | number): string {\n const text = String(value);\n if (text === \"\" || text === \".\" || text === \"..\") {\n throw new TypeError(`Invalid path value ${JSON.stringify(text)}: it is not a resource identifier.`);\n }\n return encodeURIComponent(text);\n}\n\n/**\n * Whether a download destination names a directory: one that already exists,\n * or a path written with a trailing separator (`\"downloads/\"`), which says\n * \"a folder\" even before it exists. Without the second rule a missing\n * `\"downloads/\"` was written as a file named `downloads`.\n */\nexport function namesDirectory(destination: string, existsAsDirectory: boolean): boolean {\n return existsAsDirectory || destination.endsWith(\"/\") || destination.endsWith(\"\\\\\");\n}\n\n/**\n * One file or folder name taken from a server reply (a skill's slug, a file's\n * original name), made safe to join onto a local directory. Refused: empty,\n * `.`, `..`, any separator, a drive prefix (`C:`), a NUL byte. A server reply\n * is never trusted to name a path, so a hostile or corrupted one cannot write\n * outside the folder the caller chose.\n */\nexport function safePathComponent(value: unknown, what: string): string {\n const text = typeof value === \"string\" ? value : \"\";\n if (\n text === \"\" ||\n text === \".\" ||\n text === \"..\" ||\n /[\\\\/]/.test(text) ||\n text.includes(\"\\0\") ||\n /^[A-Za-z]:/.test(text)\n ) {\n throw new TypeError(`Refusing to write ${what} ${JSON.stringify(value)}: it is not a single file or folder name.`);\n }\n return text;\n}\n\n/**\n * Throw unless `target` resolves inside `root` (or is `root`). The second check\n * behind {@link safePathComponent}: it holds whatever the names were.\n */\nexport function assertInside(\n nodePath: typeof import(\"node:path\"),\n root: string,\n target: string,\n what: string,\n): void {\n const base = nodePath.resolve(root);\n const resolved = nodePath.resolve(target);\n if (resolved !== base && !resolved.startsWith(base + nodePath.sep)) {\n throw new TypeError(`Refusing to write ${what}: ${JSON.stringify(target)} leaves ${JSON.stringify(root)}.`);\n }\n}\n","import { segment } from \"../paths.js\";\nimport type { Transport } from \"../core.js\";\n\nexport abstract class Resource {\n constructor(protected readonly transport: Transport) {}\n}\n\n/** Org-addressed resources: an explicit org id, else the transport's shared resolution. */\nexport abstract class OrgScoped extends Resource {\n protected async orgBase(orgId?: string): Promise<string> {\n return `/v1/organizations/${segment(orgId ?? (await this.transport.resolveOrgId()))}`;\n }\n}\n\nexport const enc = segment;\n\n/**\n * The client a new key records: `explicit`, else this SDK's own name without\n * its version (`sdk-typescript/1.2.0` records `sdk-typescript`). The API\n * requires every key to record one and refuses a blank one.\n */\nexport function credentialClient(explicit: string | undefined, transportClient: string): string {\n const name = (explicit ?? transportClient.split(\"/\", 1)[0] ?? \"\").trim();\n if (!name) throw new TypeError(\"clientName must name the client the key is for\");\n return name;\n}\n","import { AnswerBuilder, TextStream, answerDelta, type Answer } from \"../answers.js\";\nimport { cleanBody } from \"../core.js\";\nimport { ValidationError } from \"../errors.js\";\nimport type { ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport interface RunEvent {\n type: string;\n event_id?: string;\n [key: string]: unknown;\n}\n\n/**\n * The events of a `text/event-stream` response, yielded as they arrive and\n * ending at `stream_complete`. Used by the generated streaming operations.\n */\nexport async function* eventStream(\n response: Response,\n): AsyncGenerator<RunEvent> {\n if (!response.body) return;\n for await (const event of parseSse(response.body)) {\n yield event;\n if (event.type === \"stream_complete\") return;\n }\n}\n\n/**\n * Parse a text/event-stream body into events (`data:` lines joined, `id:` kept).\n * `onId` hears every `id:` line, including an id sent with no data.\n * However iteration ends (the consumer stops, `stream_complete`, an error), the\n * HTTP body is cancelled unless it already ended and its reader is released.\n */\nexport async function* parseSse(\n body: ReadableStream<Uint8Array>,\n onId?: (id: string) => void,\n): AsyncGenerator<RunEvent> {\n const decoder = new TextDecoder();\n const reader = body.getReader();\n let buffer = \"\";\n let data: string[] = [];\n let eventName: string | undefined;\n let id: string | undefined;\n const flush = (): RunEvent | undefined => {\n if (data.length === 0) return undefined;\n const raw = data.join(\"\\n\");\n data = [];\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n parsed = { data: raw };\n }\n const event: RunEvent =\n parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? {\n type: eventName ?? \"message\",\n ...(parsed as Record<string, unknown>),\n }\n : { type: eventName ?? \"message\", data: parsed };\n if (id !== undefined) event.event_id = id;\n eventName = undefined;\n return event;\n };\n let finished = false;\n try {\n for (;;) {\n const { done, value } = await reader.read();\n buffer += done\n ? decoder.decode()\n : decoder.decode(value, { stream: true });\n let newline = buffer.search(/\\r?\\n/);\n while (newline >= 0) {\n const line = buffer.slice(0, newline);\n buffer = buffer.slice(\n buffer[newline] === \"\\r\" ? newline + 2 : newline + 1,\n );\n if (line === \"\") {\n const event = flush();\n if (event) yield event;\n } else if (!line.startsWith(\":\")) {\n const colon = line.indexOf(\":\");\n const field = colon < 0 ? line : line.slice(0, colon);\n const value =\n colon < 0 ? \"\" : line.slice(colon + 1).replace(/^ /, \"\");\n if (field === \"data\") data.push(value);\n else if (field === \"event\") eventName = value;\n else if (field === \"id\") {\n id = value;\n // An id with no data still moves the resume point (as EventSource does).\n onId?.(value);\n }\n }\n newline = buffer.search(/\\r?\\n/);\n }\n if (done) {\n finished = true;\n const event = flush();\n if (event) yield event;\n return;\n }\n }\n } finally {\n if (!finished) await reader.cancel().catch(() => undefined);\n reader.releaseLock();\n }\n}\n\nexport interface StartRunOptions {\n threadId?: string;\n projectId?: string;\n mode?: string;\n model?: string;\n timezone?: string;\n /**\n * Ids of files you can read, given to the agent the way files attached in\n * Beakr's chat are; the start fails with `not_found` if any is not readable.\n */\n files?: string[];\n /**\n * Let the agent read the organization's Knowledge (its wiki) while it\n * answers. The server treats a run that does not ask for it as one with\n * Knowledge turned off, so it is on unless `false`.\n */\n knowledge?: boolean;\n /** Deduplicates resends of the same start; generated when omitted. */\n idempotencyKey?: string;\n}\n\n/** What `runs.start()` returns: `run_id`, `thread_id`, `status`, `stream_url`, `status_url`, ... */\nexport type StartedRun = ResponseOf<\"/v1/runs\", \"post\">;\n\n/** A run as `runs.get()` reports it: `status`, and `answer` once completed or `question` while it waits. */\nexport type RunStatus = ResponseOf<\"/v1/runs/{run_id}\", \"get\">;\n\n/** One of the caller's threads, as `runs.threads()` lists it. */\nexport type ThreadSummary = ResponseOf<\"/v1/me/threads\", \"get\">[\"data\"][number];\n\n/** `runs.answer()`: the question plus the same options as `runs.start()`. */\nexport interface AnswerOptions extends StartRunOptions {\n question: string;\n signal?: AbortSignal;\n}\n\n/** Agent runs: start, follow, cancel. */\nexport class Runs extends Resource {\n /** Start a run (a new thread unless `threadId`). Returns `{run_id, thread_id, ...}`. */\n start(message: string, options: StartRunOptions = {}): Promise<StartedRun> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/runs\",\n // The route returns the existing run for the same body key, so resends are safe.\n serverDeduplicated: true,\n body: cleanBody({\n idempotency_key:\n options.idempotencyKey ??\n globalThis.crypto.randomUUID().replace(/-/g, \"\"),\n message,\n thread_id: options.threadId,\n home_project_id: options.projectId,\n scope: {\n knowledge_graph: options.knowledge ?? true,\n ...(options.projectId ? { projects: [{ id: options.projectId }] } : {}),\n },\n mode: options.mode,\n model: options.model,\n timezone: options.timezone,\n files: options.files?.length ? [...options.files] : undefined,\n }),\n });\n }\n\n /**\n * Ask the agent and wait for the whole answer:\n * `const { text, sources, run_id } = await beakr.runs.answer(\"question\", { projectId })`\n * (or `runs.answer({ question, projectId })`). An empty question throws\n * `ValidationError` without sending a request.\n * `text` shows each citation as the readable reference in parentheses\n * (`(memo.pdf › p. 7)`), as the engine renders it, and `sources` lists the\n * cited documents in order of first use as public source records. Throws\n * `RunFailedError` when the run ends `error`, `failed` or `cancelled`.\n */\n async answer(question: string, options?: Omit<AnswerOptions, \"question\">): Promise<Answer>;\n async answer(options: AnswerOptions): Promise<Answer>;\n async answer(\n questionOrOptions: string | AnswerOptions,\n maybeOptions: Omit<AnswerOptions, \"question\"> = {},\n ): Promise<Answer> {\n const { question, signal, ...start } =\n typeof questionOrOptions === \"string\"\n ? { ...maybeOptions, question: questionOrOptions }\n : questionOrOptions;\n if (typeof question !== \"string\" || !question.trim()) {\n // Refused here rather than sent: the API would answer 422 after a round trip.\n throw new ValidationError(\"runs.answer needs a non-empty question.\", { code: \"validation_error\" });\n }\n const run = await this.start(question, start);\n const runId = String(run.run_id);\n const builder = new AnswerBuilder(runId);\n for await (const event of this.stream(runId, signal ? { signal } : {})) builder.feed(event);\n // The run as the server reports it once the stream ends: its rendered\n // answer, or the question it parked on.\n return builder.result(await this.get(runId));\n }\n\n /**\n * The visible answer text of a run as it is written, thinking left out and\n * each citation key numbered `[n]` in order of first use:\n * `for await (const chunk of beakr.runs.streamText(runId)) process.stdout.write(chunk)`.\n * The numbers are for showing the text while it streams; they do not index\n * {@link answer}'s `sources`, which has one record per cited document and\n * whose `text` shows readable references instead.\n */\n async *streamText(\n runId: string,\n options: { lastEventId?: string; signal?: AbortSignal } = {},\n ): AsyncGenerator<string> {\n const citations = new TextStream();\n for await (const event of this.stream(runId, options)) {\n const chunk = citations.feed(answerDelta(event));\n if (chunk) yield chunk;\n }\n const rest = citations.finish();\n if (rest) yield rest;\n }\n\n get(runId: string): Promise<RunStatus> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/runs/${enc(runId)}`,\n });\n }\n\n cancel(runId: string): Promise<void> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/runs/${enc(runId)}/cancel`,\n responseType: \"none\",\n });\n }\n\n /**\n * The run's events as they happen, until `stream_complete`. Each item is the\n * parsed `data` of one server-sent event, with its `id` as `event_id`; pass\n * the last `event_id` as `lastEventId` to resume after a disconnect.\n */\n async *stream(\n runId: string,\n options: { lastEventId?: string; signal?: AbortSignal } = {},\n ): AsyncGenerator<RunEvent> {\n const response = await this.transport.raw({\n method: \"GET\",\n path: `/v1/runs/${enc(runId)}/events`,\n query: { last_event_id: options.lastEventId },\n headers: { Accept: \"text/event-stream\" },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n if (!response.body) return;\n for await (const event of parseSse(response.body)) {\n yield event;\n if (event.type === \"stream_complete\") return;\n }\n }\n\n /** One page of the caller's threads; {@link iterThreads} follows every page. */\n threads(query: ListThreadsQuery = {}): Promise<ResponseOf<\"/v1/me/threads\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me/threads\", query: threadsQuery(query) });\n }\n\n /** Every thread of the caller's matching the filters, following cursors. */\n iterThreads(query: Omit<ListThreadsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<ThreadSummary> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/me/threads\", query: threadsQuery(query) }, pageSize);\n }\n}\n\n/** The filters and paging `GET /v1/me/threads` takes. */\nexport interface ListThreadsQuery {\n /** Search thread titles. */\n q?: string;\n /** Only threads attached to these projects. */\n projectIds?: readonly string[];\n /** `only`: just the conversations a notification opened; `exclude`: leave them out. */\n notifications?: \"only\" | \"exclude\";\n cursor?: string;\n limit?: number;\n}\n\nfunction threadsQuery(query: ListThreadsQuery): Record<string, string | number | readonly string[] | undefined> {\n return {\n q: query.q,\n project_ids: query.projectIds,\n notifications: query.notifications,\n cursor: query.cursor,\n limit: query.limit,\n };\n}\n","// Generated by scripts/generate.mjs from the Beakr public OpenAPI document. Do not edit.\n// One typed method per public operation, grouped by area: beakr.api.<area>.<method>().\nimport type { QueryValue, RequestOptions, Transport } from \"../core.js\";\nimport type { CallOptions, OperationResponse, PageItem } from \"../operation-types.js\";\nimport type { operations } from \"./schema.js\";\nimport { eventStream, type RunEvent } from \"../resources/runs.js\";\nimport { segment as enc } from \"../paths.js\";\n\n/** Every public operation: SDK name -> HTTP method and contract path. */\nexport const OPERATIONS = {\n \"files.listArtifacts\": { method: \"GET\", path: \"/v1/artifacts\" },\n \"files.getArtifact\": { method: \"GET\", path: \"/v1/artifacts/{artifact_id}\" },\n \"files.updateArtifact\": { method: \"PATCH\", path: \"/v1/artifacts/{artifact_id}\" },\n \"files.deleteArtifact\": { method: \"DELETE\", path: \"/v1/artifacts/{artifact_id}\" },\n \"files.getArtifactContent\": { method: \"GET\", path: \"/v1/artifacts/{artifact_id}/content\" },\n \"files.createKnowledgeFromArtifact\": { method: \"POST\", path: \"/v1/artifacts/{artifact_id}/knowledge\" },\n \"files.approveArtifactKnowledge\": { method: \"POST\", path: \"/v1/artifacts/{artifact_id}/knowledge/approve\" },\n \"files.moveArtifact\": { method: \"POST\", path: \"/v1/artifacts/{artifact_id}/move\" },\n \"files.downloadUrl\": { method: \"POST\", path: \"/v1/artifacts/download-url\" },\n \"files.readFile\": { method: \"POST\", path: \"/v1/artifacts/read\" },\n \"uploads.getDownloadUrl\": { method: \"GET\", path: \"/v1/artifacts/versions/{version_id}/download-url\" },\n \"endUserTokens.listEndUserTokens\": { method: \"GET\", path: \"/v1/auth/end-user-tokens\" },\n \"endUserTokens.mintEndUserToken\": { method: \"POST\", path: \"/v1/auth/end-user-tokens\" },\n \"endUserTokens.revokeEndUserToken\": { method: \"DELETE\", path: \"/v1/auth/end-user-tokens/{token_id}\" },\n \"uploads.getBulkUploadStatus\": { method: \"GET\", path: \"/v1/bulk/{batch_id}/status\" },\n \"uploads.completeBulkUpload\": { method: \"POST\", path: \"/v1/bulk/complete\" },\n \"uploads.prepareBulkUpload\": { method: \"POST\", path: \"/v1/bulk/prepare\" },\n \"conversations.compound\": { method: \"POST\", path: \"/v1/compound\" },\n \"conversations.cancelCompound\": { method: \"POST\", path: \"/v1/compound/cancel\" },\n \"conversations.agentContext\": { method: \"POST\", path: \"/v1/context\" },\n \"conversations.listConversations\": { method: \"GET\", path: \"/v1/conversations\" },\n \"conversations.getConversation\": { method: \"GET\", path: \"/v1/conversations/{conversation_id}\" },\n \"conversations.deleteConversation\": { method: \"DELETE\", path: \"/v1/conversations/{conversation_id}\" },\n \"conversations.importConversation\": { method: \"POST\", path: \"/v1/conversations/import\" },\n \"conversations.search\": { method: \"GET\", path: \"/v1/conversations/search\" },\n \"folders.listFolders\": { method: \"GET\", path: \"/v1/folders\" },\n \"folders.createFolder\": { method: \"POST\", path: \"/v1/folders\" },\n \"folders.getFolder\": { method: \"GET\", path: \"/v1/folders/{folder_id}\" },\n \"folders.updateFolder\": { method: \"PATCH\", path: \"/v1/folders/{folder_id}\" },\n \"folders.deleteFolder\": { method: \"DELETE\", path: \"/v1/folders/{folder_id}\" },\n \"folders.listFolderResources\": { method: \"GET\", path: \"/v1/folders/{folder_id}/resources\" },\n \"integrations.listIntegrations\": { method: \"GET\", path: \"/v1/integrations\" },\n \"integrations.disconnectIntegration\": { method: \"DELETE\", path: \"/v1/integrations/{connector_id}\" },\n \"integrations.integrationStatus\": { method: \"GET\", path: \"/v1/integrations/{connector_id}/status\" },\n \"integrations.connectIntegration\": { method: \"POST\", path: \"/v1/integrations/{provider}/connect\" },\n \"integrations.listIntegrationTools\": { method: \"GET\", path: \"/v1/integrations/tools\" },\n \"integrations.callIntegrationTool\": { method: \"POST\", path: \"/v1/integrations/tools/{tool_name}/call\" },\n \"interviews.createInterviewLink\": { method: \"POST\", path: \"/v1/interview/links\" },\n \"interviews.listSendableInterviews\": { method: \"GET\", path: \"/v1/interview/sendables\" },\n \"interviews.createSendableInterview\": { method: \"POST\", path: \"/v1/interview/sendables\" },\n \"interviews.createLink\": { method: \"POST\", path: \"/v1/interview/sendables/{sendable_id}/links\" },\n \"interviews.sendLinkToKnowledge\": { method: \"POST\", path: \"/v1/interview/sendables/links/{link_id}/knowledge\" },\n \"interviews.linkResult\": { method: \"GET\", path: \"/v1/interview/sendables/links/{link_id}/result\" },\n \"interviews.revokeLink\": { method: \"POST\", path: \"/v1/interview/sendables/links/{link_id}/revoke\" },\n \"jobs.getJob\": { method: \"GET\", path: \"/v1/jobs/{job_id}\" },\n \"knowledge.getAgentReviewSettings\": { method: \"GET\", path: \"/v1/knowledge/agent-review\" },\n \"knowledge.setOrgAgentReview\": { method: \"PUT\", path: \"/v1/knowledge/agent-review\" },\n \"knowledge.setProjectAgentReview\": { method: \"PUT\", path: \"/v1/knowledge/agent-review/projects/{project_id}\" },\n \"knowledge.documents\": { method: \"POST\", path: \"/v1/knowledge/documents\" },\n \"knowledge.research\": { method: \"POST\", path: \"/v1/knowledge/research\" },\n \"knowledge.runWikiCommand\": { method: \"POST\", path: \"/v1/knowledge/wiki/command\" },\n \"knowledge.listWikiPages\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages\" },\n \"knowledge.getWikiPage\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/{page_id}\" },\n \"knowledge.getWikiPageRevisions\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/{page_id}/revisions\" },\n \"knowledge.getWikiPageSources\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/{page_id}/sources\" },\n \"knowledge.getWikiPageByTitle\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/by-title\" },\n \"knowledge.listProposals\": { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\" },\n \"knowledge.createProposal\": { method: \"POST\", path: \"/v1/knowledge/wiki/proposals\" },\n \"knowledge.getProposal\": { method: \"GET\", path: \"/v1/knowledge/wiki/proposals/{proposal_id}\" },\n \"knowledge.acceptProposal\": { method: \"POST\", path: \"/v1/knowledge/wiki/proposals/{proposal_id}/accept\" },\n \"knowledge.dismissProposal\": { method: \"POST\", path: \"/v1/knowledge/wiki/proposals/{proposal_id}/dismiss\" },\n \"knowledge.searchWikiPages\": { method: \"GET\", path: \"/v1/knowledge/wiki/search\" },\n \"knowledge.runWikiWrite\": { method: \"POST\", path: \"/v1/knowledge/wiki/write\" },\n \"labels.listLabels\": { method: \"GET\", path: \"/v1/labels\" },\n \"labels.createLabel\": { method: \"POST\", path: \"/v1/labels\" },\n \"labels.getLabel\": { method: \"GET\", path: \"/v1/labels/{label_id}\" },\n \"labels.updateLabel\": { method: \"PATCH\", path: \"/v1/labels/{label_id}\" },\n \"labels.deleteLabel\": { method: \"DELETE\", path: \"/v1/labels/{label_id}\" },\n \"labels.listLabelMembers\": { method: \"GET\", path: \"/v1/labels/{label_id}/members\" },\n \"labels.addLabelMember\": { method: \"POST\", path: \"/v1/labels/{label_id}/members\" },\n \"labels.removeLabelMember\": { method: \"DELETE\", path: \"/v1/labels/{label_id}/members/{user_id}\" },\n \"labels.listLabelProjects\": { method: \"GET\", path: \"/v1/labels/{label_id}/projects\" },\n \"labels.attachLabelProject\": { method: \"POST\", path: \"/v1/labels/{label_id}/projects\" },\n \"labels.updateLabelProject\": { method: \"PATCH\", path: \"/v1/labels/{label_id}/projects/{project_id}\" },\n \"labels.detachLabelProject\": { method: \"DELETE\", path: \"/v1/labels/{label_id}/projects/{project_id}\" },\n \"account.whoami\": { method: \"GET\", path: \"/v1/me\" },\n \"apiKeys.listApiKeys\": { method: \"GET\", path: \"/v1/me/api-keys\" },\n \"apiKeys.createApiKey\": { method: \"POST\", path: \"/v1/me/api-keys\" },\n \"apiKeys.revokeApiKey\": { method: \"DELETE\", path: \"/v1/me/api-keys/{key_id}\" },\n \"apiKeys.listScopes\": { method: \"GET\", path: \"/v1/me/api-keys/scopes\" },\n \"organizations.getActiveOrg\": { method: \"GET\", path: \"/v1/me/organization\" },\n \"skills.installSkill\": { method: \"POST\", path: \"/v1/me/skills/library/{skill_id}\" },\n \"skills.uninstallSkill\": { method: \"DELETE\", path: \"/v1/me/skills/library/{skill_id}\" },\n \"skills.listMinedSkillProposals\": { method: \"GET\", path: \"/v1/me/skills/proposals\" },\n \"skills.acceptMinedSkillProposal\": { method: \"POST\", path: \"/v1/me/skills/proposals/{proposal_id}/accept\" },\n \"skills.dismissMinedSkillProposal\": { method: \"POST\", path: \"/v1/me/skills/proposals/{proposal_id}/dismiss\" },\n \"threads.listMyThreads\": { method: \"GET\", path: \"/v1/me/threads\" },\n \"organizations.listOrgs\": { method: \"GET\", path: \"/v1/organizations\" },\n \"organizations.getOrg\": { method: \"GET\", path: \"/v1/organizations/{org_id}\" },\n \"externalUsers.listExternalUsers\": { method: \"GET\", path: \"/v1/organizations/{org_id}/external-users\" },\n \"externalUsers.createExternalUser\": { method: \"POST\", path: \"/v1/organizations/{org_id}/external-users\" },\n \"externalUsers.getExternalUser\": { method: \"GET\", path: \"/v1/organizations/{org_id}/external-users/{user_id}\" },\n \"externalUsers.updateExternalUser\": { method: \"PATCH\", path: \"/v1/organizations/{org_id}/external-users/{user_id}\" },\n \"externalUsers.deleteExternalUser\": { method: \"DELETE\", path: \"/v1/organizations/{org_id}/external-users/{user_id}\" },\n \"organizations.listMembers\": { method: \"GET\", path: \"/v1/organizations/{org_id}/members\" },\n \"organizations.addMember\": { method: \"POST\", path: \"/v1/organizations/{org_id}/members\" },\n \"organizations.updateMemberRole\": { method: \"PATCH\", path: \"/v1/organizations/{org_id}/members/{user_id}\" },\n \"organizations.removeMember\": { method: \"DELETE\", path: \"/v1/organizations/{org_id}/members/{user_id}\" },\n \"serviceAccounts.listServiceAccounts\": { method: \"GET\", path: \"/v1/organizations/{org_id}/service-accounts\" },\n \"serviceAccounts.createServiceAccount\": { method: \"POST\", path: \"/v1/organizations/{org_id}/service-accounts\" },\n \"serviceAccounts.disableServiceAccount\": { method: \"POST\", path: \"/v1/organizations/{org_id}/service-accounts/{account_id}/disable\" },\n \"serviceAccounts.mintServiceAccountKey\": { method: \"POST\", path: \"/v1/organizations/{org_id}/service-accounts/{account_id}/keys\" },\n \"projects.listProjects\": { method: \"GET\", path: \"/v1/projects\" },\n \"projects.createProject\": { method: \"POST\", path: \"/v1/projects\" },\n \"projects.getProject\": { method: \"GET\", path: \"/v1/projects/{project_id}\" },\n \"projects.updateProject\": { method: \"PATCH\", path: \"/v1/projects/{project_id}\" },\n \"projects.deleteProject\": { method: \"DELETE\", path: \"/v1/projects/{project_id}\" },\n \"projects.createProjectMembershipInvitation\": { method: \"POST\", path: \"/v1/projects/{project_id}/invite\" },\n \"projects.getProjectKnowledgeProfile\": { method: \"GET\", path: \"/v1/projects/{project_id}/knowledge-profile\" },\n \"projects.putProjectKnowledgeProfile\": { method: \"PUT\", path: \"/v1/projects/{project_id}/knowledge-profile\" },\n \"projects.patchProjectKnowledgeProfile\": { method: \"PATCH\", path: \"/v1/projects/{project_id}/knowledge-profile\" },\n \"projects.getProjectKnowledgeStatus\": { method: \"GET\", path: \"/v1/projects/{project_id}/knowledge-summary\" },\n \"projects.listKnowledgeFailedFiles\": { method: \"GET\", path: \"/v1/projects/{project_id}/knowledge/failed-files\" },\n \"projects.retryFailedKnowledge\": { method: \"POST\", path: \"/v1/projects/{project_id}/knowledge/retry-failed\" },\n \"projects.listMembers\": { method: \"GET\", path: \"/v1/projects/{project_id}/members\" },\n \"projects.addMember\": { method: \"POST\", path: \"/v1/projects/{project_id}/members\" },\n \"projects.removeMember\": { method: \"DELETE\", path: \"/v1/projects/{project_id}/members/{principal_type}/{principal_id}\" },\n \"projects.listModelRefusals\": { method: \"GET\", path: \"/v1/projects/{project_id}/model-refusals\" },\n \"projects.listModelRefusalFiles\": { method: \"GET\", path: \"/v1/projects/{project_id}/model-refusals/files\" },\n \"projects.getModelRefusalSummary\": { method: \"GET\", path: \"/v1/projects/{project_id}/model-refusals/summary\" },\n \"projects.listProjectPendingInvitations\": { method: \"GET\", path: \"/v1/projects/{project_id}/pending-invitations\" },\n \"projects.revokeProjectMembershipInvitation\": { method: \"DELETE\", path: \"/v1/projects/{project_id}/pending-invitations/{invitation_id}\" },\n \"threads.listSharedThreads\": { method: \"GET\", path: \"/v1/projects/{project_id}/threads\" },\n \"openapi.publicOpenapi\": { method: \"GET\", path: \"/v1/public/openapi.json\" },\n \"runs.startChatRun\": { method: \"POST\", path: \"/v1/runs\" },\n \"runs.getRunStatus\": { method: \"GET\", path: \"/v1/runs/{run_id}\" },\n \"runs.cancelRun\": { method: \"POST\", path: \"/v1/runs/{run_id}/cancel\" },\n \"runs.streamRunEvents\": { method: \"GET\", path: \"/v1/runs/{run_id}/events\" },\n \"skills.listSkills\": { method: \"GET\", path: \"/v1/skills\" },\n \"skills.createSkill\": { method: \"POST\", path: \"/v1/skills\" },\n \"skills.getSkill\": { method: \"GET\", path: \"/v1/skills/{skill_id}\" },\n \"skills.deleteSkill\": { method: \"DELETE\", path: \"/v1/skills/{skill_id}\" },\n \"skills.getSkillBundle\": { method: \"GET\", path: \"/v1/skills/{skill_id}/bundle\" },\n \"skills.replaceSkillBundle\": { method: \"PUT\", path: \"/v1/skills/{skill_id}/bundle\" },\n \"skills.downloadSkillBundleZip\": { method: \"GET\", path: \"/v1/skills/{skill_id}/bundle.zip\" },\n \"threads.getThreadDetail\": { method: \"GET\", path: \"/v1/threads/{thread_id}\" },\n \"uploads.createUpload\": { method: \"POST\", path: \"/v1/uploads\" },\n \"uploads.getUpload\": { method: \"GET\", path: \"/v1/uploads/{upload_id}\" },\n \"uploads.abortUpload\": { method: \"DELETE\", path: \"/v1/uploads/{upload_id}\" },\n \"uploads.completeUpload\": { method: \"POST\", path: \"/v1/uploads/{upload_id}/complete\" },\n \"uploads.presignUploadParts\": { method: \"POST\", path: \"/v1/uploads/{upload_id}/parts\" },\n} as const;\n\nexport type OperationName = keyof typeof OPERATIONS;\n\n/** Public operations tagged account. */\nexport class AccountApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me (Get the signed-in person) */\n whoami(options?: CallOptions): Promise<OperationResponse<operations[\"whoami_v1_me_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged apiKeys. */\nexport class ApiKeysApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me/api-keys (List API keys) */\n listApiKeys(args?: { query?: NonNullable<operations[\"list_api_keys_v1_me_api_keys_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_api_keys_v1_me_api_keys_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/api-keys\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/me/api-keys, following its cursor. */\n listApiKeysAll(args?: { query?: NonNullable<operations[\"list_api_keys_v1_me_api_keys_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_api_keys_v1_me_api_keys_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/api-keys\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/me/api-keys (Create an API key) */\n createApiKey(args: { body: NonNullable<operations[\"create_api_key_v1_me_api_keys_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_api_key_v1_me_api_keys_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/me/api-keys\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/me/api-keys/{key_id} (Revoke an API key) */\n revokeApiKey(args: { path: operations[\"revoke_api_key_v1_me_api_keys__key_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/me/api-keys/${enc(String(args.path.key_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/me/api-keys/scopes (List API key scopes) */\n listScopes(options?: CallOptions): Promise<OperationResponse<operations[\"list_scopes_v1_me_api_keys_scopes_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/api-keys/scopes\", authenticated: false, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged conversations. */\nexport class ConversationsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/compound (Compound a conversation into Knowledge) */\n compound(args: { body: NonNullable<operations[\"compound_v1_compound_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"compound_v1_compound_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/compound\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/compound/cancel (Cancel compounding a conversation) */\n cancelCompound(args: { body: NonNullable<operations[\"cancel_compound_route_v1_compound_cancel_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"cancel_compound_route_v1_compound_cancel_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/compound/cancel\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/context (Get context for an agent session) */\n agentContext(args: { body: NonNullable<operations[\"agent_context_v1_context_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"agent_context_v1_context_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/context\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/conversations (List conversations) */\n listConversations(args?: { query?: NonNullable<operations[\"list_conversations_v1_conversations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_conversations_v1_conversations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/conversations, following its cursor. */\n listConversationsAll(args?: { query?: NonNullable<operations[\"list_conversations_v1_conversations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_conversations_v1_conversations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/conversations/{conversation_id} (Get a conversation) */\n getConversation(args: { path: operations[\"get_conversation_v1_conversations__conversation_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_conversation_v1_conversations__conversation_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/conversations/${enc(String(args.path.conversation_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/conversations/{conversation_id} (Delete a conversation) */\n deleteConversation(args: { path: operations[\"delete_conversation_v1_conversations__conversation_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/conversations/${enc(String(args.path.conversation_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/conversations/import (Import an agent conversation) */\n importConversation(args: { body: NonNullable<operations[\"import_conversation_route_v1_conversations_import_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"import_conversation_route_v1_conversations_import_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/conversations/import\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/conversations/search (Search your conversations) */\n search(args: { query: NonNullable<operations[\"search_route_v1_conversations_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"search_route_v1_conversations_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/conversations/search, following its cursor. */\n searchAll(args: { query: NonNullable<operations[\"search_route_v1_conversations_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"search_route_v1_conversations_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n}\n\n/** Public operations tagged endUserTokens. */\nexport class EndUserTokensApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/auth/end-user-tokens (List end-user tokens) */\n listEndUserTokens(args?: { query?: NonNullable<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/auth/end-user-tokens\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/auth/end-user-tokens, following its cursor. */\n listEndUserTokensAll(args?: { query?: NonNullable<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/auth/end-user-tokens\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/auth/end-user-tokens (Mint an end-user token) */\n mintEndUserToken(args: { body: NonNullable<operations[\"mint_end_user_token_v1_auth_end_user_tokens_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"mint_end_user_token_v1_auth_end_user_tokens_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/auth/end-user-tokens\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/auth/end-user-tokens/{token_id} (Revoke an end-user token) */\n revokeEndUserToken(args: { path: operations[\"revoke_end_user_token_v1_auth_end_user_tokens__token_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/auth/end-user-tokens/${enc(String(args.path.token_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged externalUsers. */\nexport class ExternalUsersApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/organizations/{org_id}/external-users (List external users) */\n listExternalUsers(args: { path: operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations/{org_id}/external-users, following its cursor. */\n listExternalUsersAll(args: { path: operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/organizations/{org_id}/external-users (Create an external user) */\n createExternalUser(args: { path: operations[\"create_external_user_v1_organizations__org_id__external_users_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_external_user_v1_organizations__org_id__external_users_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_external_user_v1_organizations__org_id__external_users_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/organizations/{org_id}/external-users/{user_id} (Get an external user) */\n getExternalUser(args: { path: operations[\"get_external_user_v1_organizations__org_id__external_users__user_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_external_user_v1_organizations__org_id__external_users__user_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users/${enc(String(args.path.user_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/organizations/{org_id}/external-users/{user_id} (Update an external user) */\n updateExternalUser(args: { path: operations[\"update_external_user_v1_organizations__org_id__external_users__user_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_external_user_v1_organizations__org_id__external_users__user_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_external_user_v1_organizations__org_id__external_users__user_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users/${enc(String(args.path.user_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/organizations/{org_id}/external-users/{user_id} (Delete an external user) */\n deleteExternalUser(args: { path: operations[\"delete_external_user_v1_organizations__org_id__external_users__user_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users/${enc(String(args.path.user_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged files. */\nexport class FilesApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/artifacts (List files) */\n listArtifacts(args?: { query?: NonNullable<operations[\"list_artifacts_route_v1_artifacts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_artifacts_route_v1_artifacts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/artifacts\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/artifacts, following its cursor. */\n listArtifactsAll(args?: { query?: NonNullable<operations[\"list_artifacts_route_v1_artifacts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_artifacts_route_v1_artifacts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/artifacts\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/artifacts/{artifact_id} (Get a file) */\n getArtifact(args: { path: operations[\"get_artifact_route_v1_artifacts__artifact_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_artifact_route_v1_artifacts__artifact_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/artifacts/{artifact_id} (Update a file) */\n updateArtifact(args: { path: operations[\"update_artifact_route_v1_artifacts__artifact_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_artifact_route_v1_artifacts__artifact_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_artifact_route_v1_artifacts__artifact_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/artifacts/{artifact_id} (Delete a file) */\n deleteArtifact(args: { path: operations[\"delete_artifact_route_v1_artifacts__artifact_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/artifacts/{artifact_id}/content (Get a file's content) */\n getArtifactContent(args: { path: operations[\"get_artifact_content_route_v1_artifacts__artifact_id__content_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_artifact_content_route_v1_artifacts__artifact_id__content_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/content`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/{artifact_id}/knowledge (Compile a file into Knowledge) */\n createKnowledgeFromArtifact(args: { path: operations[\"create_knowledge_from_artifact_route_v1_artifacts__artifact_id__knowledge_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_knowledge_from_artifact_route_v1_artifacts__artifact_id__knowledge_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/knowledge`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/{artifact_id}/knowledge/approve (Approve a file for Knowledge) */\n approveArtifactKnowledge(args: { path: operations[\"approve_artifact_knowledge_route_v1_artifacts__artifact_id__knowledge_approve_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"approve_artifact_knowledge_route_v1_artifacts__artifact_id__knowledge_approve_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/knowledge/approve`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/{artifact_id}/move (Move a file to another project) */\n moveArtifact(args: { path: operations[\"move_artifact_route_v1_artifacts__artifact_id__move_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"move_artifact_route_v1_artifacts__artifact_id__move_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"move_artifact_route_v1_artifacts__artifact_id__move_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/move`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/download-url (Get a download link by reference) */\n downloadUrl(args: { body: NonNullable<operations[\"download_url_route_v1_artifacts_download_url_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"download_url_route_v1_artifacts_download_url_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/artifacts/download-url\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/read (Read a file's text) */\n readFile(args: { body: NonNullable<operations[\"read_file_route_v1_artifacts_read_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"read_file_route_v1_artifacts_read_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/artifacts/read\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged folders. */\nexport class FoldersApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/folders (List folders) */\n listFolders(args?: { query?: NonNullable<operations[\"list_folders_route_v1_folders_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_folders_route_v1_folders_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/folders\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/folders, following its cursor. */\n listFoldersAll(args?: { query?: NonNullable<operations[\"list_folders_route_v1_folders_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_folders_route_v1_folders_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/folders\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/folders (Create a folder) */\n createFolder(args: { body: NonNullable<operations[\"create_folder_route_v1_folders_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_folder_route_v1_folders_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/folders\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/folders/{folder_id} (Get a folder) */\n getFolder(args: { path: operations[\"get_folder_route_v1_folders__folder_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_folder_route_v1_folders__folder_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/folders/${enc(String(args.path.folder_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/folders/{folder_id} (Update a folder) */\n updateFolder(args: { path: operations[\"update_folder_route_v1_folders__folder_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_folder_route_v1_folders__folder_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_folder_route_v1_folders__folder_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/folders/${enc(String(args.path.folder_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/folders/{folder_id} (Delete a folder) */\n deleteFolder(args: { path: operations[\"delete_folder_route_v1_folders__folder_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"delete_folder_route_v1_folders__folder_id__delete\"]>> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/folders/${enc(String(args.path.folder_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/folders/{folder_id}/resources (List a folder's files) */\n listFolderResources(args: { path: operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/folders/${enc(String(args.path.folder_id))}/resources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/folders/{folder_id}/resources, following its cursor. */\n listFolderResourcesAll(args: { path: operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/folders/${enc(String(args.path.folder_id))}/resources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n}\n\n/** Public operations tagged integrations. */\nexport class IntegrationsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/integrations (List connected integrations) */\n listIntegrations(args?: { query?: NonNullable<operations[\"list_integrations_v1_integrations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_integrations_v1_integrations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/integrations, following its cursor. */\n listIntegrationsAll(args?: { query?: NonNullable<operations[\"list_integrations_v1_integrations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_integrations_v1_integrations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** DELETE /v1/integrations/{connector_id} (Disconnect an integration) */\n disconnectIntegration(args: { path: operations[\"disconnect_integration_v1_integrations__connector_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"disconnect_integration_v1_integrations__connector_id__delete\"]>> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/integrations/${enc(String(args.path.connector_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/integrations/{connector_id}/status (Get an integration's status) */\n integrationStatus(args: { path: operations[\"integration_status_v1_integrations__connector_id__status_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"integration_status_v1_integrations__connector_id__status_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/integrations/${enc(String(args.path.connector_id))}/status`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/integrations/{provider}/connect (Get a connect link) */\n connectIntegration(args: { path: operations[\"connect_integration_v1_integrations__provider__connect_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"connect_integration_v1_integrations__provider__connect_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"connect_integration_v1_integrations__provider__connect_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/integrations/${enc(String(args.path.provider))}/connect`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/integrations/tools (List integration tools) */\n listIntegrationTools(args?: { query?: NonNullable<operations[\"list_integration_tools_v1_integrations_tools_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_integration_tools_v1_integrations_tools_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations/tools\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/integrations/tools, following its cursor. */\n listIntegrationToolsAll(args?: { query?: NonNullable<operations[\"list_integration_tools_v1_integrations_tools_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_integration_tools_v1_integrations_tools_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations/tools\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/integrations/tools/{tool_name}/call (Call an integration tool) */\n callIntegrationTool(args: { path: operations[\"call_integration_tool_v1_integrations_tools__tool_name__call_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"call_integration_tool_v1_integrations_tools__tool_name__call_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"call_integration_tool_v1_integrations_tools__tool_name__call_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/integrations/tools/${enc(String(args.path.tool_name))}/call`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged interviews. */\nexport class InterviewsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/interview/links (Create an interview link) */\n createInterviewLink(args: { body: NonNullable<operations[\"create_interview_link_v1_interview_links_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_interview_link_v1_interview_links_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/interview/links\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/interview/sendables (List sendable interviews) */\n listSendableInterviews(args?: { query?: NonNullable<operations[\"list_sendable_interviews_v1_interview_sendables_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_sendable_interviews_v1_interview_sendables_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/interview/sendables\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/interview/sendables, following its cursor. */\n listSendableInterviewsAll(args?: { query?: NonNullable<operations[\"list_sendable_interviews_v1_interview_sendables_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_sendable_interviews_v1_interview_sendables_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/interview/sendables\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/interview/sendables (Create a sendable interview) */\n createSendableInterview(args: { body: NonNullable<operations[\"create_sendable_interview_v1_interview_sendables_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_sendable_interview_v1_interview_sendables_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/interview/sendables\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/interview/sendables/{sendable_id}/links (Add a link to an interview) */\n createLink(args: { path: operations[\"create_link_v1_interview_sendables__sendable_id__links_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_link_v1_interview_sendables__sendable_id__links_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_link_v1_interview_sendables__sendable_id__links_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/interview/sendables/${enc(String(args.path.sendable_id))}/links`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/interview/sendables/links/{link_id}/knowledge (Send an interview to Knowledge) */\n sendLinkToKnowledge(args: { path: operations[\"send_link_to_knowledge_v1_interview_sendables_links__link_id__knowledge_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"send_link_to_knowledge_v1_interview_sendables_links__link_id__knowledge_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"send_link_to_knowledge_v1_interview_sendables_links__link_id__knowledge_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/interview/sendables/links/${enc(String(args.path.link_id))}/knowledge`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/interview/sendables/links/{link_id}/result (Get an interview link's result) */\n linkResult(args: { path: operations[\"link_result_v1_interview_sendables_links__link_id__result_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"link_result_v1_interview_sendables_links__link_id__result_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/interview/sendables/links/${enc(String(args.path.link_id))}/result`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/interview/sendables/links/{link_id}/revoke (Revoke an interview link) */\n revokeLink(args: { path: operations[\"revoke_link_v1_interview_sendables_links__link_id__revoke_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/interview/sendables/links/${enc(String(args.path.link_id))}/revoke`, idempotent: true, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged jobs. */\nexport class JobsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/jobs/{job_id} (Get a job's status) */\n getJob(args: { path: operations[\"get_job_v1_jobs__job_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_job_v1_jobs__job_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/jobs/${enc(String(args.path.job_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged knowledge. */\nexport class KnowledgeApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/knowledge/agent-review (Get the agent review policy) */\n getAgentReviewSettings(args?: { query?: NonNullable<operations[\"get_agent_review_settings_v1_knowledge_agent_review_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_agent_review_settings_v1_knowledge_agent_review_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/agent-review\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/knowledge/agent-review (Set the organization's agent review policy) */\n setOrgAgentReview(args: { body: NonNullable<operations[\"set_org_agent_review_v1_knowledge_agent_review_put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"set_org_agent_review_v1_knowledge_agent_review_put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: \"/v1/knowledge/agent-review\", body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/knowledge/agent-review/projects/{project_id} (Set a project's agent review policy) */\n setProjectAgentReview(args: { path: operations[\"set_project_agent_review_v1_knowledge_agent_review_projects__project_id__put\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"set_project_agent_review_v1_knowledge_agent_review_projects__project_id__put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"set_project_agent_review_v1_knowledge_agent_review_projects__project_id__put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: `/v1/knowledge/agent-review/projects/${enc(String(args.path.project_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/documents (Search and read original documents) */\n documents(args?: { body?: NonNullable<operations[\"documents_v1_knowledge_documents_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"documents_v1_knowledge_documents_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/documents\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/research (Research a question) */\n research(args?: { body?: NonNullable<operations[\"research_v1_knowledge_research_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"research_v1_knowledge_research_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/research\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/wiki/command (Run a Knowledge read command) */\n runWikiCommand(args: { body: NonNullable<operations[\"run_wiki_command_v1_knowledge_wiki_command_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"run_wiki_command_v1_knowledge_wiki_command_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/wiki/command\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/pages (List Knowledge pages) */\n listWikiPages(args?: { query?: NonNullable<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/pages\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/pages, following its cursor. */\n listWikiPagesAll(args?: { query?: NonNullable<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/pages\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/knowledge/wiki/pages/{page_id} (Get a Knowledge page) */\n getWikiPage(args: { path: operations[\"get_wiki_page_v1_knowledge_wiki_pages__page_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_v1_knowledge_wiki_pages__page_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/pages/{page_id}/revisions (List a page's revisions) */\n getWikiPageRevisions(args: { path: operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/revisions`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/pages/{page_id}/revisions, following its cursor. */\n getWikiPageRevisionsAll(args: { path: operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/revisions`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/knowledge/wiki/pages/{page_id}/sources (List a page's sources) */\n getWikiPageSources(args: { path: operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/sources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/pages/{page_id}/sources, following its cursor. */\n getWikiPageSourcesAll(args: { path: operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/sources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/knowledge/wiki/pages/by-title (Get a Knowledge page by title) */\n getWikiPageByTitle(args: { query: NonNullable<operations[\"get_wiki_page_by_title_v1_knowledge_wiki_pages_by_title_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_by_title_v1_knowledge_wiki_pages_by_title_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/pages/by-title\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/proposals (List Knowledge proposals) */\n listProposals(args?: { query?: NonNullable<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/proposals, following its cursor. */\n listProposalsAll(args?: { query?: NonNullable<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/knowledge/wiki/proposals (Create a Knowledge proposal) */\n createProposal(args: { body: NonNullable<operations[\"create_proposal_v1_knowledge_wiki_proposals_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_proposal_v1_knowledge_wiki_proposals_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/wiki/proposals\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/proposals/{proposal_id} (Get a Knowledge proposal) */\n getProposal(args: { path: operations[\"get_proposal_v1_knowledge_wiki_proposals__proposal_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_proposal_v1_knowledge_wiki_proposals__proposal_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/proposals/${enc(String(args.path.proposal_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/wiki/proposals/{proposal_id}/accept (Accept a Knowledge proposal) */\n acceptProposal(args: { path: operations[\"accept_proposal_v1_knowledge_wiki_proposals__proposal_id__accept_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"accept_proposal_v1_knowledge_wiki_proposals__proposal_id__accept_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"accept_proposal_v1_knowledge_wiki_proposals__proposal_id__accept_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/knowledge/wiki/proposals/${enc(String(args.path.proposal_id))}/accept`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/wiki/proposals/{proposal_id}/dismiss (Dismiss a Knowledge proposal) */\n dismissProposal(args: { path: operations[\"dismiss_proposal_v1_knowledge_wiki_proposals__proposal_id__dismiss_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"dismiss_proposal_v1_knowledge_wiki_proposals__proposal_id__dismiss_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/knowledge/wiki/proposals/${enc(String(args.path.proposal_id))}/dismiss`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/search (Search Knowledge pages) */\n searchWikiPages(args: { query: NonNullable<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/search, following its cursor. */\n searchWikiPagesAll(args: { query: NonNullable<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/knowledge/wiki/write (Propose a Knowledge change) */\n runWikiWrite(args: { body: NonNullable<operations[\"run_wiki_write_v1_knowledge_wiki_write_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"run_wiki_write_v1_knowledge_wiki_write_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/wiki/write\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged labels. */\nexport class LabelsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/labels (List labels) */\n listLabels(args?: { query?: NonNullable<operations[\"list_labels_route_v1_labels_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_labels_route_v1_labels_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/labels\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/labels, following its cursor. */\n listLabelsAll(args?: { query?: NonNullable<operations[\"list_labels_route_v1_labels_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_labels_route_v1_labels_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/labels\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/labels (Create a label) */\n createLabel(args: { body: NonNullable<operations[\"create_label_route_v1_labels_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_label_route_v1_labels_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/labels\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/labels/{label_id} (Get a label) */\n getLabel(args: { path: operations[\"get_label_route_v1_labels__label_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_label_route_v1_labels__label_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/labels/{label_id} (Update a label) */\n updateLabel(args: { path: operations[\"update_label_route_v1_labels__label_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_label_route_v1_labels__label_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_label_route_v1_labels__label_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/labels/${enc(String(args.path.label_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/labels/{label_id} (Delete a label) */\n deleteLabel(args: { path: operations[\"delete_label_route_v1_labels__label_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/labels/${enc(String(args.path.label_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/labels/{label_id}/members (List label members) */\n listLabelMembers(args: { path: operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_label_members_route_v1_labels__label_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/labels/{label_id}/members, following its cursor. */\n listLabelMembersAll(args: { path: operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_label_members_route_v1_labels__label_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/labels/{label_id}/members (Add a label member) */\n addLabelMember(args: { path: operations[\"add_label_member_route_v1_labels__label_id__members_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"add_label_member_route_v1_labels__label_id__members_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"add_label_member_route_v1_labels__label_id__members_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/labels/${enc(String(args.path.label_id))}/members`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/labels/{label_id}/members/{user_id} (Remove a label member) */\n removeLabelMember(args: { path: operations[\"remove_label_member_route_v1_labels__label_id__members__user_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/labels/${enc(String(args.path.label_id))}/members/${enc(String(args.path.user_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/labels/{label_id}/projects (List label projects) */\n listLabelProjects(args: { path: operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/labels/{label_id}/projects, following its cursor. */\n listLabelProjectsAll(args: { path: operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/labels/{label_id}/projects (Add a project to a label) */\n attachLabelProject(args: { path: operations[\"attach_label_project_route_v1_labels__label_id__projects_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"attach_label_project_route_v1_labels__label_id__projects_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"attach_label_project_route_v1_labels__label_id__projects_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/labels/{label_id}/projects/{project_id} (Update a label's project) */\n updateLabelProject(args: { path: operations[\"update_label_project_route_v1_labels__label_id__projects__project_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_label_project_route_v1_labels__label_id__projects__project_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_label_project_route_v1_labels__label_id__projects__project_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects/${enc(String(args.path.project_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/labels/{label_id}/projects/{project_id} (Remove a project from a label) */\n detachLabelProject(args: { path: operations[\"detach_label_project_route_v1_labels__label_id__projects__project_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects/${enc(String(args.path.project_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged openapi. */\nexport class OpenapiApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/public/openapi.json (Get the OpenAPI document) */\n publicOpenapi(options?: CallOptions): Promise<OperationResponse<operations[\"public_openapi_v1_public_openapi_json_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/public/openapi.json\", authenticated: false, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged organizations. */\nexport class OrganizationsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me/organization (Get your active organization) */\n getActiveOrg(options?: CallOptions): Promise<OperationResponse<operations[\"get_active_org_route_v1_me_organization_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/organization\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/organizations (List your organizations) */\n listOrgs(args?: { query?: NonNullable<operations[\"list_orgs_route_v1_organizations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_orgs_route_v1_organizations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/organizations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations, following its cursor. */\n listOrgsAll(args?: { query?: NonNullable<operations[\"list_orgs_route_v1_organizations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_orgs_route_v1_organizations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/organizations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/organizations/{org_id} (Get an organization) */\n getOrg(args: { path: operations[\"get_org_route_v1_organizations__org_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_org_route_v1_organizations__org_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/organizations/{org_id}/members (List organization members) */\n listMembers(args: { path: operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_members_route_v1_organizations__org_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations/{org_id}/members, following its cursor. */\n listMembersAll(args: { path: operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_members_route_v1_organizations__org_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/organizations/{org_id}/members (Add an organization member) */\n addMember(args: { path: operations[\"add_member_route_v1_organizations__org_id__members_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"add_member_route_v1_organizations__org_id__members_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"add_member_route_v1_organizations__org_id__members_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/organizations/{org_id}/members/{user_id} (Change a member's role) */\n updateMemberRole(args: { path: operations[\"update_member_role_route_v1_organizations__org_id__members__user_id__patch\"][\"parameters\"][\"path\"]; query: NonNullable<operations[\"update_member_role_route_v1_organizations__org_id__members__user_id__patch\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"update_member_role_route_v1_organizations__org_id__members__user_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members/${enc(String(args.path.user_id))}`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/organizations/{org_id}/members/{user_id} (Remove an organization member) */\n removeMember(args: { path: operations[\"remove_member_route_v1_organizations__org_id__members__user_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members/${enc(String(args.path.user_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged projects. */\nexport class ProjectsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/projects (List projects) */\n listProjects(args?: { query?: NonNullable<operations[\"list_projects_route_v1_projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_projects_route_v1_projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/projects\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects, following its cursor. */\n listProjectsAll(args?: { query?: NonNullable<operations[\"list_projects_route_v1_projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_projects_route_v1_projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/projects\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/projects (Create a project) */\n createProject(args: { body: NonNullable<operations[\"create_project_route_v1_projects_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_project_route_v1_projects_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/projects\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id} (Get a project) */\n getProject(args: { path: operations[\"get_project_route_v1_projects__project_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_project_route_v1_projects__project_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/projects/{project_id} (Update a project) */\n updateProject(args: { path: operations[\"update_project_route_v1_projects__project_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_project_route_v1_projects__project_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_project_route_v1_projects__project_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/projects/${enc(String(args.path.project_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/projects/{project_id} (Delete a project) */\n deleteProject(args: { path: operations[\"delete_project_route_v1_projects__project_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/projects/${enc(String(args.path.project_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/projects/{project_id}/invite (Invite someone by email) */\n createProjectMembershipInvitation(args: { path: operations[\"create_project_membership_invitation_route_v1_projects__project_id__invite_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_project_membership_invitation_route_v1_projects__project_id__invite_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_project_membership_invitation_route_v1_projects__project_id__invite_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/projects/${enc(String(args.path.project_id))}/invite`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/knowledge-profile (Get a project's Knowledge profile) */\n getProjectKnowledgeProfile(args: { path: operations[\"get_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-profile`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/projects/{project_id}/knowledge-profile (Set a project's Knowledge profile) */\n putProjectKnowledgeProfile(args: { path: operations[\"put_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_put\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"put_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"put_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-profile`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/projects/{project_id}/knowledge-profile (Update a project's Knowledge profile) */\n patchProjectKnowledgeProfile(args: { path: operations[\"patch_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"patch_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"patch_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-profile`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/knowledge-summary (Get a project's Knowledge status) */\n getProjectKnowledgeStatus(args: { path: operations[\"get_project_knowledge_status_route_v1_projects__project_id__knowledge_summary_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_project_knowledge_status_route_v1_projects__project_id__knowledge_summary_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_project_knowledge_status_route_v1_projects__project_id__knowledge_summary_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-summary`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/knowledge/failed-files (List failed Knowledge files) */\n listKnowledgeFailedFiles(args: { path: operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge/failed-files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/knowledge/failed-files, following its cursor. */\n listKnowledgeFailedFilesAll(args: { path: operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge/failed-files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/projects/{project_id}/knowledge/retry-failed (Retry failed Knowledge files) */\n retryFailedKnowledge(args: { path: operations[\"retry_failed_knowledge_route_v1_projects__project_id__knowledge_retry_failed_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"retry_failed_knowledge_route_v1_projects__project_id__knowledge_retry_failed_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"retry_failed_knowledge_route_v1_projects__project_id__knowledge_retry_failed_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge/retry-failed`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/members (List project members) */\n listMembers(args: { path: operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_members_route_v1_projects__project_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/members, following its cursor. */\n listMembersAll(args: { path: operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_members_route_v1_projects__project_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/projects/{project_id}/members (Add a project member) */\n addMember(args: { path: operations[\"add_member_route_v1_projects__project_id__members_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"add_member_route_v1_projects__project_id__members_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"add_member_route_v1_projects__project_id__members_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/projects/${enc(String(args.path.project_id))}/members`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/projects/{project_id}/members/{principal_type}/{principal_id} (Remove a project member) */\n removeMember(args: { path: operations[\"remove_member_route_v1_projects__project_id__members__principal_type___principal_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/projects/${enc(String(args.path.project_id))}/members/${enc(String(args.path.principal_type))}/${enc(String(args.path.principal_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/model-refusals (List a project's model refusals) */\n listModelRefusals(args: { path: operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/model-refusals, following its cursor. */\n listModelRefusalsAll(args: { path: operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/projects/{project_id}/model-refusals/files (List files with model refusals) */\n listModelRefusalFiles(args: { path: operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals/files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/model-refusals/files, following its cursor. */\n listModelRefusalFilesAll(args: { path: operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals/files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/projects/{project_id}/model-refusals/summary (Get a project's model refusal counts) */\n getModelRefusalSummary(args: { path: operations[\"get_model_refusal_summary_route_v1_projects__project_id__model_refusals_summary_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_model_refusal_summary_route_v1_projects__project_id__model_refusals_summary_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_model_refusal_summary_route_v1_projects__project_id__model_refusals_summary_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals/summary`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/pending-invitations (List pending invitations) */\n listProjectPendingInvitations(args: { path: operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/pending-invitations`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/pending-invitations, following its cursor. */\n listProjectPendingInvitationsAll(args: { path: operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/pending-invitations`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** DELETE /v1/projects/{project_id}/pending-invitations/{invitation_id} (Revoke a pending invitation) */\n revokeProjectMembershipInvitation(args: { path: operations[\"revoke_project_membership_invitation_route_v1_projects__project_id__pending_invitations__invitation_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/projects/${enc(String(args.path.project_id))}/pending-invitations/${enc(String(args.path.invitation_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged runs. */\nexport class RunsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/runs (Start an agent run) */\n startChatRun(args: { body: NonNullable<operations[\"start_chat_run_v1_runs_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"start_chat_run_v1_runs_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/runs\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/runs/{run_id} (Get a run's status) */\n getRunStatus(args: { path: operations[\"get_run_status_v1_runs__run_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_run_status_v1_runs__run_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/runs/${enc(String(args.path.run_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/runs/{run_id}/cancel (Cancel a run) */\n cancelRun(args: { path: operations[\"cancel_run_v1_runs__run_id__cancel_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/runs/${enc(String(args.path.run_id))}/cancel`, idempotent: true, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/runs/{run_id}/events (Stream a run's events) */\n streamRunEvents(args: { path: operations[\"stream_run_events_v1_runs__run_id__events_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"stream_run_events_v1_runs__run_id__events_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<AsyncGenerator<RunEvent>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/runs/${enc(String(args.path.run_id))}/events`, query: args?.query as Record<string, QueryValue> | undefined, headers: { ...options?.headers, Accept: \"text/event-stream\" }, idempotencyKey: options?.idempotencyKey, signal: options?.signal };\n return this.transport.raw(request).then((response) => eventStream(response));\n }\n}\n\n/** Public operations tagged serviceAccounts. */\nexport class ServiceAccountsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/organizations/{org_id}/service-accounts (List service accounts) */\n listServiceAccounts(args: { path: operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations/{org_id}/service-accounts, following its cursor. */\n listServiceAccountsAll(args: { path: operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/organizations/{org_id}/service-accounts (Create a service account) */\n createServiceAccount(args: { path: operations[\"create_service_account_v1_organizations__org_id__service_accounts_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_service_account_v1_organizations__org_id__service_accounts_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_service_account_v1_organizations__org_id__service_accounts_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/organizations/{org_id}/service-accounts/{account_id}/disable (Disable a service account) */\n disableServiceAccount(args: { path: operations[\"disable_service_account_v1_organizations__org_id__service_accounts__account_id__disable_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"disable_service_account_v1_organizations__org_id__service_accounts__account_id__disable_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts/${enc(String(args.path.account_id))}/disable`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/organizations/{org_id}/service-accounts/{account_id}/keys (Mint a service account key) */\n mintServiceAccountKey(args: { path: operations[\"mint_service_account_key_v1_organizations__org_id__service_accounts__account_id__keys_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"mint_service_account_key_v1_organizations__org_id__service_accounts__account_id__keys_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"mint_service_account_key_v1_organizations__org_id__service_accounts__account_id__keys_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts/${enc(String(args.path.account_id))}/keys`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged skills. */\nexport class SkillsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/me/skills/library/{skill_id} (Install a skill) */\n installSkill(args: { path: operations[\"install_skill_v1_me_skills_library__skill_id__post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"install_skill_v1_me_skills_library__skill_id__post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/me/skills/library/${enc(String(args.path.skill_id))}`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/me/skills/library/{skill_id} (Uninstall a skill) */\n uninstallSkill(args: { path: operations[\"uninstall_skill_v1_me_skills_library__skill_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/me/skills/library/${enc(String(args.path.skill_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/me/skills/proposals (List proposed skills) */\n listMinedSkillProposals(args?: { query?: NonNullable<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/skills/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/me/skills/proposals, following its cursor. */\n listMinedSkillProposalsAll(args?: { query?: NonNullable<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/skills/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/me/skills/proposals/{proposal_id}/accept (Accept a proposed skill) */\n acceptMinedSkillProposal(args: { path: operations[\"accept_mined_skill_proposal_v1_me_skills_proposals__proposal_id__accept_post\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"accept_mined_skill_proposal_v1_me_skills_proposals__proposal_id__accept_post\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"accept_mined_skill_proposal_v1_me_skills_proposals__proposal_id__accept_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/me/skills/proposals/${enc(String(args.path.proposal_id))}/accept`, query: args?.query as Record<string, QueryValue> | undefined, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/me/skills/proposals/{proposal_id}/dismiss (Dismiss a proposed skill) */\n dismissMinedSkillProposal(args: { path: operations[\"dismiss_mined_skill_proposal_v1_me_skills_proposals__proposal_id__dismiss_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"dismiss_mined_skill_proposal_v1_me_skills_proposals__proposal_id__dismiss_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/me/skills/proposals/${enc(String(args.path.proposal_id))}/dismiss`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills (List skills) */\n listSkills(args?: { query?: NonNullable<operations[\"list_skills_route_v1_skills_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_skills_route_v1_skills_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/skills\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/skills, following its cursor. */\n listSkillsAll(args?: { query?: NonNullable<operations[\"list_skills_route_v1_skills_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_skills_route_v1_skills_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/skills\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/skills (Create a skill) */\n createSkill(args: { body: NonNullable<operations[\"create_skill_route_v1_skills_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_skill_route_v1_skills_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/skills\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills/{skill_id} (Get a skill) */\n getSkill(args: { path: operations[\"get_skill_route_v1_skills__skill_id__get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_skill_route_v1_skills__skill_id__get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_skill_route_v1_skills__skill_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/skills/${enc(String(args.path.skill_id))}`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/skills/{skill_id} (Delete a skill) */\n deleteSkill(args: { path: operations[\"delete_skill_v1_skills__skill_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/skills/${enc(String(args.path.skill_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills/{skill_id}/bundle (Download a skill's files) */\n getSkillBundle(args: { path: operations[\"get_skill_bundle_v1_skills__skill_id__bundle_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_skill_bundle_v1_skills__skill_id__bundle_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/skills/${enc(String(args.path.skill_id))}/bundle`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/skills/{skill_id}/bundle (Replace a skill's files) */\n replaceSkillBundle(args: { path: operations[\"replace_skill_bundle_v1_skills__skill_id__bundle_put\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"replace_skill_bundle_v1_skills__skill_id__bundle_put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"replace_skill_bundle_v1_skills__skill_id__bundle_put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: `/v1/skills/${enc(String(args.path.skill_id))}/bundle`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills/{skill_id}/bundle.zip (Download a skill as a zip) */\n downloadSkillBundleZip(args: { path: operations[\"download_skill_bundle_zip_v1_skills__skill_id__bundle_zip_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<Uint8Array> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/skills/${enc(String(args.path.skill_id))}/bundle.zip`, responseType: \"bytes\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged threads. */\nexport class ThreadsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me/threads (List your threads) */\n listMyThreads(args?: { query?: NonNullable<operations[\"list_my_threads_v1_me_threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_my_threads_v1_me_threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/threads\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/me/threads, following its cursor. */\n listMyThreadsAll(args?: { query?: NonNullable<operations[\"list_my_threads_v1_me_threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_my_threads_v1_me_threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/threads\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/projects/{project_id}/threads (List threads shared to a project) */\n listSharedThreads(args: { path: operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/threads`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/threads, following its cursor. */\n listSharedThreadsAll(args: { path: operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/threads`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/threads/{thread_id} (Get a thread you can see) */\n getThreadDetail(args: { path: operations[\"get_thread_detail_v1_threads__thread_id__get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_thread_detail_v1_threads__thread_id__get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_thread_detail_v1_threads__thread_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/threads/${enc(String(args.path.thread_id))}`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged uploads. */\nexport class UploadsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/artifacts/versions/{version_id}/download-url (Get a file download link) */\n getDownloadUrl(args: { path: operations[\"get_download_url_v1_artifacts_versions__version_id__download_url_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_download_url_v1_artifacts_versions__version_id__download_url_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_download_url_v1_artifacts_versions__version_id__download_url_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/artifacts/versions/${enc(String(args.path.version_id))}/download-url`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/bulk/{batch_id}/status (Get a bulk upload's status) */\n getBulkUploadStatus(args: { path: operations[\"get_bulk_upload_status_v1_bulk__batch_id__status_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_bulk_upload_status_v1_bulk__batch_id__status_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/bulk/${enc(String(args.path.batch_id))}/status`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/bulk/complete (Complete a bulk upload) */\n completeBulkUpload(args: { body: NonNullable<operations[\"complete_bulk_upload_v1_bulk_complete_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"complete_bulk_upload_v1_bulk_complete_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/bulk/complete\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/bulk/prepare (Prepare a bulk upload) */\n prepareBulkUpload(args: { body: NonNullable<operations[\"prepare_bulk_upload_v1_bulk_prepare_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"prepare_bulk_upload_v1_bulk_prepare_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/bulk/prepare\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/uploads (Start an upload) */\n createUpload(args: { body: NonNullable<operations[\"create_upload_v1_uploads_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_upload_v1_uploads_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/uploads\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/uploads/{upload_id} (Get an upload) */\n getUpload(args: { path: operations[\"get_upload_v1_uploads__upload_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_upload_v1_uploads__upload_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/uploads/${enc(String(args.path.upload_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/uploads/{upload_id} (Abort an upload) */\n abortUpload(args: { path: operations[\"abort_upload_v1_uploads__upload_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"abort_upload_v1_uploads__upload_id__delete\"]>> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/uploads/${enc(String(args.path.upload_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/uploads/{upload_id}/complete (Complete an upload) */\n completeUpload(args: { path: operations[\"complete_upload_v1_uploads__upload_id__complete_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"complete_upload_v1_uploads__upload_id__complete_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"complete_upload_v1_uploads__upload_id__complete_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/uploads/${enc(String(args.path.upload_id))}/complete`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/uploads/{upload_id}/parts (Get upload part URLs) */\n presignUploadParts(args: { path: operations[\"presign_upload_parts_v1_uploads__upload_id__parts_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"presign_upload_parts_v1_uploads__upload_id__parts_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"presign_upload_parts_v1_uploads__upload_id__parts_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/uploads/${enc(String(args.path.upload_id))}/parts`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** All areas, as exposed on `beakr.api`. */\nexport class BeakrApi {\n readonly account: AccountApi;\n readonly apiKeys: ApiKeysApi;\n readonly conversations: ConversationsApi;\n readonly endUserTokens: EndUserTokensApi;\n readonly externalUsers: ExternalUsersApi;\n readonly files: FilesApi;\n readonly folders: FoldersApi;\n readonly integrations: IntegrationsApi;\n readonly interviews: InterviewsApi;\n readonly jobs: JobsApi;\n readonly knowledge: KnowledgeApi;\n readonly labels: LabelsApi;\n readonly openapi: OpenapiApi;\n readonly organizations: OrganizationsApi;\n readonly projects: ProjectsApi;\n readonly runs: RunsApi;\n readonly serviceAccounts: ServiceAccountsApi;\n readonly skills: SkillsApi;\n readonly threads: ThreadsApi;\n readonly uploads: UploadsApi;\n\n constructor(transport: Transport) {\n this.account = new AccountApi(transport);\n this.apiKeys = new ApiKeysApi(transport);\n this.conversations = new ConversationsApi(transport);\n this.endUserTokens = new EndUserTokensApi(transport);\n this.externalUsers = new ExternalUsersApi(transport);\n this.files = new FilesApi(transport);\n this.folders = new FoldersApi(transport);\n this.integrations = new IntegrationsApi(transport);\n this.interviews = new InterviewsApi(transport);\n this.jobs = new JobsApi(transport);\n this.knowledge = new KnowledgeApi(transport);\n this.labels = new LabelsApi(transport);\n this.openapi = new OpenapiApi(transport);\n this.organizations = new OrganizationsApi(transport);\n this.projects = new ProjectsApi(transport);\n this.runs = new RunsApi(transport);\n this.serviceAccounts = new ServiceAccountsApi(transport);\n this.skills = new SkillsApi(transport);\n this.threads = new ThreadsApi(transport);\n this.uploads = new UploadsApi(transport);\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport interface ImportedMessage {\n role: \"user\" | \"assistant\";\n content: string;\n /** ISO timestamp of the message. */\n at?: string;\n /**\n * Who wrote it: `human` only for a turn the agent host marks as typed by a\n * person, `system` for one the host wrote itself (a background task's\n * report), `agent` for the agent's turns. Omitted: `unknown`. Imported-session\n * learning quotes only `human` user turns.\n */\n author?: \"human\" | \"system\" | \"agent\" | \"unknown\";\n}\n\n/** `chatgpt-export` (a conversation from a ChatGPT data export) is stored as `chatgpt`. */\nexport type ConversationClient =\n | \"claude-code\"\n | \"codex\"\n | \"chatgpt\"\n | \"chatgpt-export\"\n | \"claude\"\n | \"generic\";\n\n/** One tool the session called and how many times so far. */\nexport interface ToolUsed {\n name: string;\n count?: number;\n}\n\nexport interface ImportOptions {\n client: ConversationClient;\n sessionId: string;\n messages: ImportedMessage[];\n /**\n * Position of `messages[0]` in the session. Send it whenever you send only\n * the messages after the ones already imported: without it the batch is read\n * as the whole session from the start. A 409 ConflictError's\n * `expectedBaseIndex` says where to resend from.\n */\n baseIndex?: number;\n projectId?: string;\n title?: string;\n /**\n * What the session was about; kept instead of the transcript. Messages sent\n * with no summary, no `storeFullText`, `compound` or `holdText` are refused\n * (422 `summary_required`); a later batch of a summarised session needs none.\n */\n summary?: string;\n filesTouched?: string[];\n /**\n * What the session read, so freshness can check it later. Send the revision\n * you read for each page; a read without one is listed but not checked.\n */\n sourcesRead?: SourceRead[];\n /**\n * The tools the session called, counted from its transcript: the session's\n * totals so far (a later import's larger count per tool is kept).\n */\n toolsUsed?: ToolUsed[];\n interactive?: boolean;\n /**\n * Keep message text. Omitted: your full-text setting for this client applies\n * (`getSettings`); true or false overrides it. Without full text, `compound`\n * or `holdText`, only the summary and references are stored, and a later\n * compound answers `nothing_to_compound`.\n */\n storeFullText?: boolean;\n /**\n * Compound right after importing. Holds the unread text, for a bounded\n * time, until that capture reads it.\n */\n compound?: boolean;\n /**\n * Hold this batch's text for a compound requested later (a session sent in\n * several batches, or compounded with `engine.compound`), without queuing\n * one now. Released at the same deadline as `compound`.\n */\n holdText?: boolean;\n}\n\n/** What an import stored: `conversation_id`, `created`, `appended`, `revision`, `stored`, ... */\nexport type ConversationImported = ResponseOf<\"/v1/conversations/import\", \"post\">;\n\n/** A page of imported conversations: `{data, next_cursor, has_more}`. */\nexport type ConversationPage = ResponseOf<\"/v1/conversations\", \"get\">;\n\n/** One imported conversation as a {@link ConversationPage} lists it. */\nexport type ConversationSummary = ConversationPage[\"data\"][number];\n\nexport interface ListConversationsQuery {\n client?: string;\n projectId?: string;\n q?: string;\n limit?: number;\n cursor?: string;\n}\n\nexport interface SearchConversationsOptions {\n projectId?: string;\n /** Also search your Beakr chats by title. Default true. */\n includeThreads?: boolean;\n /**\n * \"all\" (default): every word must appear; quotes and `-word` work.\n * \"any\": a natural-language question, ranked by how many of its words match.\n */\n match?: \"all\" | \"any\";\n limit?: number;\n}\n\nexport interface ConversationHit extends JsonObject {\n kind: \"imported\" | \"ask_thread\";\n id: string;\n title: string | null;\n summary: string | null;\n href: string;\n}\n\n/**\n * What a session read: a Knowledge page with the revision it read, a document\n * (file) with the stored version it read, or a source by reference.\n */\nexport type SourceRead =\n | { page_id: string; revision?: number }\n | { document_id: string; version_id?: string }\n | { source_ref: string; version?: string };\n\nexport class Conversations extends Resource {\n /** Import (or append to) a session. Not retried after an ambiguous failure. */\n import(options: ImportOptions): Promise<ConversationImported> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/conversations/import\",\n idempotent: true,\n body: cleanBody({\n client: options.client,\n session_id: options.sessionId,\n base_index: options.baseIndex,\n messages: options.messages,\n project_id: options.projectId,\n title: options.title,\n summary: options.summary,\n files_touched: options.filesTouched,\n sources_read: options.sourcesRead,\n tools_used: options.toolsUsed,\n interactive: options.interactive,\n store_full_text: options.storeFullText,\n compound: options.compound,\n hold_text: options.holdText,\n }),\n });\n }\n\n list(query: ListConversationsQuery = {}): Promise<ConversationPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/conversations\", query: this.query(query) });\n }\n\n /** Every conversation, following cursors. */\n iter(query: Omit<ListConversationsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<ConversationSummary> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/conversations\", query: this.query(query) }, pageSize);\n }\n\n get(conversationId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"GET\", path: `/v1/conversations/${enc(conversationId)}` });\n }\n\n /** Your own conversations about `q` (imported sessions and Beakr chats), best first. */\n search(q: string, options: SearchConversationsOptions = {}): Promise<{ data: ConversationHit[]; query: string }> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/conversations/search\",\n query: {\n q,\n project_id: options.projectId,\n include_threads: options.includeThreads === false ? \"false\" : \"true\",\n match: options.match ?? \"all\",\n limit: options.limit,\n },\n });\n }\n\n delete(conversationId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/conversations/${enc(conversationId)}`,\n responseType: \"none\",\n });\n }\n\n private query(query: ListConversationsQuery) {\n return {\n client: query.client,\n project_id: query.projectId,\n q: query.q,\n limit: query.limit,\n cursor: query.cursor,\n };\n }\n}\n","import { ValidationError } from \"../errors.js\";\nimport type { BodyOf, ResponseOf } from \"../types.js\";\nimport { OrgScoped, enc } from \"./base.js\";\n\nconst USER_ID = /^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$/;\n\n/**\n * `value` as an external user's `user_id`. An `external_id` is unique only within\n * the service account that created the user, so it names no user on its own and\n * is refused before any request.\n */\nexport function userIdOf(value: string): string {\n if (!USER_ID.test(value)) {\n throw new ValidationError(\n `${JSON.stringify(value)} is not a user_id. External users are addressed by their user_id ` +\n `(a uuid from create or list); find it with externalUsers.list({ externalId: ${JSON.stringify(value)} }).`,\n { code: \"validation_error\" },\n );\n }\n return value;\n}\n\nconst BASE = \"/v1/organizations/{org_id}/external-users\" as const;\nconst ONE = \"/v1/organizations/{org_id}/external-users/{user_id}\" as const;\n\nexport type ExternalUser = ResponseOf<typeof ONE, \"get\">;\nexport type ExternalUserPage = ResponseOf<typeof BASE, \"get\">;\n\n/**\n * The users of your own product, mirrored into your organization so tokens\n * minted for them (`endUserTokens.mint({ externalUserId })`) act as them.\n * `create` is idempotent on `external_id`, which is unique per creating service\n * account: `get`, `update`, `delete` and token minting take the `user_id`, and\n * `list({ externalId })` finds the one your credential created. Each method takes\n * the org id last, defaulting to the caller's active organization.\n */\nexport class ExternalUsers extends OrgScoped {\n async list(\n query: { externalId?: string; cursor?: string; limit?: number } = {},\n orgId?: string,\n ): Promise<ExternalUserPage> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/external-users`,\n query: { external_id: query.externalId, cursor: query.cursor, limit: query.limit },\n });\n }\n\n async create(body: BodyOf<typeof BASE, \"post\">, orgId?: string): Promise<ResponseOf<typeof BASE, \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/external-users`,\n idempotent: true,\n body,\n });\n }\n\n async get(userId: string, orgId?: string): Promise<ExternalUser> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/external-users/${enc(userIdOf(userId))}`,\n });\n }\n\n async update(userId: string, body: BodyOf<typeof ONE, \"patch\">, orgId?: string): Promise<ExternalUser> {\n return this.transport.request({\n method: \"PATCH\",\n path: `${await this.orgBase(orgId)}/external-users/${enc(userIdOf(userId))}`,\n body,\n });\n }\n\n /** Remove the user; what they put into projects stays. */\n async delete(userId: string, orgId?: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `${await this.orgBase(orgId)}/external-users/${enc(userIdOf(userId))}`,\n responseType: \"none\",\n });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\nimport { userIdOf } from \"./external-users.js\";\n\nexport type EndUserToken = ResponseOf<\"/v1/auth/end-user-tokens\", \"post\">;\nexport type EndUserTokenPage = ResponseOf<\"/v1/auth/end-user-tokens\", \"get\">;\n\n/**\n * Give either `externalUserId` (the token acts as that external user, and its\n * label and project memberships decide its projects), or `subject` with\n * `projectIds` (the token acts as your service account, confined to those\n * projects). The server refuses both together.\n */\nexport interface MintEndUserTokenOptions {\n /** Who the token acts for in your product; recorded in the audit trail. With `projectIds`. */\n subject?: string;\n /** An external user (see `externalUsers`) the token acts as, by its `user_id`. Without `subject`/`projectIds`. */\n externalUserId?: string;\n /** Scopes, never more than the caller's own. */\n scopes: string[];\n /** Confine the token to these projects. With `subject`. */\n projectIds?: string[];\n /** Lifetime in seconds. */\n ttlSeconds?: number;\n}\n\n/**\n * Short-lived tokens you mint for the users of your own product, so their\n * requests run as them and never with more than your key can do. Mint with an\n * API key (a service account's, for an embedded product).\n */\nexport class EndUserTokens extends Resource {\n /** Mint a token; `token` is shown once. Not retried: a retry mints another. */\n mint(options: MintEndUserTokenOptions): Promise<EndUserToken> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/auth/end-user-tokens\",\n body: cleanBody({\n subject: options.subject,\n external_user_id:\n options.externalUserId === undefined ? undefined : userIdOf(options.externalUserId),\n scopes: options.scopes,\n project_ids: options.projectIds,\n ttl_seconds: options.ttlSeconds,\n }),\n });\n }\n\n /** One page of live end-user tokens, newest first. */\n list(query: { subject?: string; cursor?: string; limit?: number } = {}): Promise<EndUserTokenPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/auth/end-user-tokens\", query });\n }\n\n /** Revoke a token; it stops working immediately. */\n revoke(tokenId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/auth/end-user-tokens/${enc(tokenId)}`,\n responseType: \"none\",\n });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource } from \"./base.js\";\n\n/** Onboarding context: `format`, the rendered `content`, and its `blocks`. */\nexport type AgentContext = ResponseOf<\"/v1/context\", \"post\">;\n\nexport interface ContextOptions {\n projectId?: string;\n question?: string;\n /** ISO timestamp: include what changed since then. */\n since?: string;\n format?: \"json\" | \"markdown\" | \"claude_md\" | \"agents_md\";\n budgetChars?: number;\n /** The agent starting the session (`claude-code`, `codex`); each keeps its own last session. Omitted: the `X-Beakr-Client` header. */\n client?: string;\n}\n\nexport class Engine extends Resource {\n /** Onboarding context for an agent: profiles, memories, recent changes, skills, entities. */\n context(options: ContextOptions = {}): Promise<AgentContext> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/context\",\n body: cleanBody({\n project_id: options.projectId,\n question: options.question,\n since: options.since,\n format: options.format ?? \"markdown\",\n budget_chars: options.budgetChars,\n client: options.client,\n }),\n });\n }\n\n /** Send the not-yet-compounded part of an imported conversation to Knowledge (202). */\n compound(conversationId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"POST\", path: \"/v1/compound\", body: { conversation_id: conversationId } });\n }\n\n /**\n * Stop a queued or running compound of an imported conversation. A batch\n * already being read finishes and its proposals stay; no further batch\n * starts, and the conversation's `compound_status` reads `cancelled`.\n * {@link compound} resumes from where it stopped. Returns\n * `{conversation_id, status, pending_messages}`; `status` is\n * `nothing_to_cancel` when no compound was queued or running.\n */\n cancelCompound(conversationId: string): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/compound/cancel\",\n body: { conversation_id: conversationId },\n // Cancelling twice is cancelling once, so an ambiguous failure may be resent.\n idempotent: true,\n });\n }\n}\n","import { NotFoundError } from \"../errors.js\";\nimport type { BodyOf, JsonObject, ResponseOf } from \"../types.js\";\nimport { assertInside, namesDirectory, safePathComponent } from \"../paths.js\";\nimport { Resource, enc } from \"./base.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\n\nexport interface DownloadLocation {\n url: string;\n artifact: JsonObject;\n}\n\nexport interface DownloadedFile {\n data: Uint8Array;\n /** The original file name (else the title, else the id), with no directory. */\n filename: string;\n artifact: JsonObject;\n}\n\nfunction baseName(name: string): string {\n return name.split(/[\\\\/]/).pop() || name;\n}\n\n/** A signed download of a file's original bytes (`POST /v1/artifacts/download-url`). */\nexport type DownloadLink = ResponseOf<\"/v1/artifacts/download-url\", \"post\">;\n\n/** A file's bytes saved from {@link Files.downloadReference}. */\nexport interface DownloadedReference {\n data: Uint8Array;\n filename: string;\n file: DownloadLink[\"file\"];\n}\n\n/** One window of a file's text (`POST /v1/artifacts/read`). */\nexport type FileRead = ResponseOf<\"/v1/artifacts/read\", \"post\">;\n\nexport interface ReadFileOptions {\n /** The place to read around (`p. 7`, `slide 3`, `sheet 2, B4:D9`, `lines 10-30`). */\n unit?: string;\n /** Without a unit: the first character to return (default 0). */\n offset?: number;\n /** The most characters to return (default and maximum 20,000; a unit's window is at most 6,000). */\n maxChars?: number;\n /**\n * Only open a file in this project (its id or name). A project you cannot read\n * rejects with `NotFoundError`, naming the closest ones.\n */\n project?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Files: reading a file by any reference a Knowledge read hands out, and the\n * download helpers (the Python SDK's `files.read`, `download_url`, `download`).\n */\nexport class Files extends Resource {\n /**\n * Read a file's extracted text by a file id, a version id, a source record's\n * `source_ref` (`beakr-source:v1:...`, from any Knowledge read or research\n * answer), a citation token (`{{artifact:<uuid>-u3}}`) or its path as a Sources\n * line prints it (`deals/acme/Closing/memo.docx`, or a trailing part naming one\n * file). With `unit`, or ` › <unit>` after the reference (`memo.pdf › p. 7`), the\n * window is the text around that place; a token's or source_ref's own passage is\n * its unit. Continue a plain read with `next_offset` as `offset`, a paged unit\n * with `next_reference`. Rejects with `NotFoundError` when the reference reaches\n * no readable file, `ConflictError` (`ambiguous_reference`) when a path names\n * several, and `ValidationError` for a Knowledge page's source_ref\n * (`knowledge_page`: read it with the knowledge_base `cat` command) or a\n * connected item's (`not_a_file`): only uploads and canvases are files.\n */\n read(reference: string, options: ReadFileOptions = {}): Promise<FileRead> {\n const body: BodyOf<\"/v1/artifacts/read\", \"post\"> = {\n reference: options.unit ? `${reference}#${options.unit}` : reference,\n offset: options.offset ?? 0,\n max_chars: options.maxChars ?? 20_000,\n ...(options.project ? { project: options.project } : {}),\n };\n return this.transport.request<FileRead>({\n method: \"POST\",\n path: \"/v1/artifacts/read\",\n body,\n idempotent: true,\n signal: options.signal,\n });\n }\n\n /**\n * A short-lived signed URL for a file's original bytes, by any reference\n * {@link Files.read} takes: a source record's `source_ref` (from a Knowledge\n * read, research answer or documents search), a file or version id, a citation\n * token or a path. A reference that names a version downloads that version; any\n * other, the current one. Rejects with `ValidationError` for a Knowledge page's\n * or connected item's reference (`knowledge_page`, `not_a_file`), `ConflictError`\n * for a Beakr document with no stored original (`no_original_file`) and\n * `NotFoundError` for a file you cannot read.\n */\n downloadLink(\n reference: string,\n options: { inline?: boolean; signal?: AbortSignal } = {},\n ): Promise<DownloadLink> {\n const body: BodyOf<\"/v1/artifacts/download-url\", \"post\"> = {\n reference,\n inline: options.inline ?? false,\n };\n return this.transport.request<DownloadLink>({\n method: \"POST\",\n path: \"/v1/artifacts/download-url\",\n body,\n idempotent: true,\n signal: options.signal,\n });\n }\n\n /** The original bytes and name of the file a reference names, in any runtime. */\n async downloadReference(\n reference: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<DownloadedReference> {\n const link = await this.downloadLink(reference, options);\n const data = await this.transport.getExternalBytes(link.url, options);\n return { data, filename: baseName(String(link.filename || reference)), file: link.file };\n }\n\n /**\n * A short-lived presigned URL for the current version's original bytes.\n * {@link Files.downloadLink} does this in one request, from any reference.\n */\n async downloadUrl(artifactId: string): Promise<DownloadLocation> {\n const artifact = await this.transport.request<JsonObject>({\n method: \"GET\",\n path: `/v1/artifacts/${enc(artifactId)}`,\n });\n const versionId = artifact[\"current_version_id\"];\n if (!versionId) {\n throw new NotFoundError(`File ${artifactId} has no uploaded version to download.`, {\n code: \"not_found\",\n });\n }\n const signed = await this.transport.request<{ url: string }>({\n method: \"GET\",\n path: `/v1/artifacts/versions/${enc(String(versionId))}/download-url`,\n });\n return { url: signed.url, artifact };\n }\n\n /** The original file's bytes and name, in any runtime. */\n async download(artifactId: string, options: { signal?: AbortSignal } = {}): Promise<DownloadedFile> {\n const located = await this.downloadUrl(artifactId);\n const data = await this.transport.getExternalBytes(located.url, options);\n const name = located.artifact[\"original_filename\"] ?? located.artifact[\"title\"] ?? artifactId;\n return { data, filename: baseName(String(name)), artifact: located.artifact };\n }\n\n /**\n * Save the original file (Node). `destination` may be a directory (one that\n * exists, or a path ending in `/`, created if missing), in which case the\n * file keeps its original name. Resolves to the path written.\n */\n async downloadTo(artifactId: string, destination: string): Promise<string> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const file = await this.download(artifactId);\n let target = destination;\n const existing = await fs.stat(destination).catch(() => undefined);\n if (namesDirectory(destination, existing?.isDirectory() ?? false)) {\n // The name comes from the server: one plain file name, kept inside the folder.\n target = nodePath.join(destination, safePathComponent(file.filename, \"the file's name\"));\n assertInside(nodePath, destination, target, \"the downloaded file\");\n }\n await fs.mkdir(nodePath.dirname(target), { recursive: true });\n await fs.writeFile(target, file.data);\n return target;\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { BodyOf, JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type IntegrationToolPage = ResponseOf<\"/v1/integrations/tools\", \"get\">;\nexport type IntegrationTool = IntegrationToolPage[\"data\"][number];\nexport type IntegrationToolResult = ResponseOf<\"/v1/integrations/tools/{tool_name}/call\", \"post\">;\ntype ToolCallBody = NonNullable<BodyOf<\"/v1/integrations/tools/{tool_name}/call\", \"post\">>;\n\nexport interface ToolsQuery {\n /** Only this provider's tools (`slack`, `google-drive`, ...). */\n provider?: string;\n /** Only the tools of this one connection. */\n connectorId?: string;\n cursor?: string;\n limit?: number;\n}\n\n/**\n * Integrations: connect (a browser link; OAuth finishes in the browser), list,\n * status and disconnect, and query what the caller has connected with the\n * same read-only tools Beakr's agent uses (`tools`, `callTool`). Scopes\n * `integrations:read` / `integrations:admin`.\n */\nexport class Integrations extends Resource {\n /** One page of the connections you can see, each with the projects it feeds. */\n list(\n query: { cursor?: string; limit?: number } = {},\n ): Promise<{ data: JsonObject[]; next_cursor?: string | null; has_more?: boolean }> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/integrations\",\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every connection you can see, following cursors. */\n iter(pageSize?: number): AsyncGenerator<JsonObject> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/integrations\" }, pageSize);\n }\n\n /** Returns `connect_url`; open it in a browser to finish connecting. */\n connect(provider: string, options: { scope?: \"user\" | \"org\" } = {}): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/integrations/${enc(provider)}/connect`,\n body: { scope: options.scope ?? \"user\" },\n });\n }\n\n status(connectorId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"GET\", path: `/v1/integrations/${enc(connectorId)}/status` });\n }\n\n /**\n * One page of the read-only tools for the integrations the caller has\n * connected, each with its `input_schema` and the connections it can use.\n */\n tools(query: ToolsQuery = {}): Promise<IntegrationToolPage> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/integrations/tools\",\n query: {\n provider: query.provider,\n connector_id: query.connectorId,\n cursor: query.cursor,\n limit: query.limit,\n },\n });\n }\n\n /** Every tool, following cursors. */\n iterTools(query: Omit<ToolsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<IntegrationTool> {\n return this.transport.paginate(\n {\n method: \"GET\",\n path: \"/v1/integrations/tools\",\n query: { provider: query.provider, connector_id: query.connectorId },\n },\n pageSize,\n );\n }\n\n /**\n * Run one read-only tool against the caller's connected integration and\n * answer its text, the sources it read, and whether it reported a failure.\n * `connectorId` picks the connection when the caller has more than one for\n * the provider. Tools that change data in the connected account are refused.\n */\n callTool(\n toolName: string,\n args: ToolCallBody[\"arguments\"] = {},\n options: { connectorId?: string } = {},\n ): Promise<IntegrationToolResult> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/integrations/tools/${enc(toolName)}/call`,\n body: cleanBody({ arguments: args, connector_id: options.connectorId }),\n });\n }\n\n disconnect(connectorId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"DELETE\", path: `/v1/integrations/${enc(connectorId)}` });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { BodyOf, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type InterviewLink = ResponseOf<\"/v1/interview/links\", \"post\">;\nexport type InterviewLinkBody = BodyOf<\"/v1/interview/links\", \"post\">;\nexport type InterviewResult = ResponseOf<\"/v1/interview/sendables/links/{link_id}/result\", \"get\">;\nexport type SendableInterviewPage = ResponseOf<\"/v1/interview/sendables\", \"get\">;\nexport type SendableInterviewBody = BodyOf<\"/v1/interview/sendables\", \"post\">;\nexport type SendableLink = ResponseOf<\"/v1/interview/sendables/{sendable_id}/links\", \"post\">;\nexport type SendableLinkBody = BodyOf<\"/v1/interview/sendables/{sendable_id}/links\", \"post\">;\n\nexport interface CreateLinkOptions {\n /** What the interview should find out. */\n goal?: string;\n /** Questions to make sure it asks. */\n questions?: InterviewLinkBody[\"questions\"];\n /** Who it is for (`name`, `email`); recorded on the link, nothing is sent. */\n recipient?: InterviewLinkBody[\"recipient\"];\n /** ISO timestamp; the link stops working then. */\n expiresAt?: string;\n}\n\n/**\n * Interviews you send: create one and get a link to hand to anyone, read the\n * result when they finish, and send the finished interview into projects'\n * Knowledge. Scopes `interviews:read` / `interviews:write`.\n */\nexport class Interviews extends Resource {\n /**\n * Create an interview and one link to it in one call. Answers `url` (the\n * link to send; shown once), `link_id`, `sendable_id`, `expires_at` and\n * `result_url`.\n */\n createLink(title: string, options: CreateLinkOptions = {}): Promise<InterviewLink> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/interview/links\",\n idempotent: true,\n body: cleanBody({\n title,\n goal: options.goal,\n questions: options.questions,\n recipient: options.recipient,\n expires_at: options.expiresAt,\n }) as InterviewLinkBody,\n });\n }\n\n /** What happened on a link: `status`, the summary and transcript once finished. */\n linkResult(linkId: string): Promise<InterviewResult> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/interview/sendables/links/${enc(linkId)}/result`,\n });\n }\n\n /** Put a finished interview into one or more projects' Knowledge. */\n sendToProjects(linkId: string, projectIds: string[]): Promise<unknown> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/interview/sendables/links/${enc(linkId)}/knowledge`,\n idempotent: true,\n body: { project_ids: projectIds },\n });\n }\n\n /** Stop a link working; its result so far stays readable. */\n revokeLink(linkId: string): Promise<void> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/interview/sendables/links/${enc(linkId)}/revoke`,\n responseType: \"none\",\n });\n }\n\n /** One page of your sendable interviews, newest first. */\n sendables(query: { cursor?: string; limit?: number } = {}): Promise<SendableInterviewPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/interview/sendables\", query });\n }\n\n /** Create a sendable interview to make links for (`linkFor`). */\n createSendable(body: SendableInterviewBody): Promise<unknown> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/interview/sendables\",\n idempotent: true,\n body,\n });\n }\n\n /** Another link to an existing sendable interview. */\n linkFor(sendableId: string, body: SendableLinkBody = {}): Promise<SendableLink> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/interview/sendables/${enc(sendableId)}/links`,\n idempotent: true,\n body,\n });\n }\n}\n","import type { JsonObject } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\n/**\n * One long operation (`GET /v1/jobs/{job_id}`): an agent or workflow run, a\n * project import, an integration sync, a webpage import, a Knowledge compile or\n * a bulk upload, all in one shape.\n */\nexport interface Job extends JsonObject {\n job_id: string;\n kind: string;\n /** `queued`, `running`, `succeeded`, `failed` or `cancelled`. */\n status: string;\n native_status: string | null;\n progress: { done: number; total: number | null } | null;\n result: JsonObject | null;\n error: { code: string; message: string | null } | null;\n project_id: string | null;\n created_at: string | null;\n finished_at: string | null;\n status_url: string;\n resource_url: string;\n}\n\n/** Anything that names a job: its id, or a response carrying `job_id`. */\nexport type JobReference = string | { job_id?: unknown };\n\nexport interface JobWaitOptions {\n /** First poll interval (default 1000 ms); each later wait is `backoff` times longer. */\n intervalMs?: number;\n /** Longest wait between polls (default 15000 ms). */\n maxIntervalMs?: number;\n /** Growth factor per poll (default 1.5). */\n backoff?: number;\n /** Give up after this long (default 600000 ms). */\n timeoutMs?: number;\n /** Throw {@link JobFailedError} for a `failed` or `cancelled` job. */\n raiseOnFailure?: boolean;\n}\n\n/** Job states that will not change again. */\nexport const TERMINAL_JOB_STATUSES = new Set([\"succeeded\", \"failed\", \"cancelled\"]);\n\nexport class JobTimeoutError extends Error {\n constructor(\n readonly jobId: string,\n readonly last: Job,\n ) {\n super(`Job ${jobId} is still ${JSON.stringify(last.status)}`);\n this.name = \"JobTimeoutError\";\n }\n}\n\nexport class JobFailedError extends Error {\n constructor(readonly job: Job) {\n super(`Job ${job.job_id} ${job.status}: ${job.error?.message ?? job.error?.code ?? job.status}`);\n this.name = \"JobFailedError\";\n }\n}\n\nexport function jobIdOf(job: JobReference): string {\n if (typeof job === \"string\") return job;\n if (job && typeof job.job_id === \"string\" && job.job_id) return job.job_id;\n throw new TypeError(\"This response does not reference a job (no job_id).\");\n}\n\n/** Long operations: read one, or wait for it with backoff. */\nexport class Jobs extends Resource {\n get(job: JobReference): Promise<Job> {\n return this.transport.request({ method: \"GET\", path: `/v1/jobs/${enc(jobIdOf(job))}` });\n }\n\n /** Poll until the job is final and return it; throws {@link JobTimeoutError} at the timeout. */\n async wait(job: JobReference, options: JobWaitOptions = {}): Promise<Job> {\n const backoff = options.backoff ?? 1.5;\n const maxInterval = options.maxIntervalMs ?? 15_000;\n let interval = options.intervalMs ?? 1000;\n if (interval <= 0 || backoff < 1 || maxInterval < interval) {\n throw new RangeError(\"Need intervalMs > 0, backoff >= 1 and maxIntervalMs >= intervalMs.\");\n }\n const jobId = jobIdOf(job);\n const deadline = Date.now() + (options.timeoutMs ?? 600_000);\n for (;;) {\n const state = await this.get(jobId);\n if (TERMINAL_JOB_STATUSES.has(state.status)) {\n if (options.raiseOnFailure && state.status !== \"succeeded\") throw new JobFailedError(state);\n return state;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) throw new JobTimeoutError(jobId, state);\n await this.transport.sleeper(Math.min(interval, remaining));\n interval = Math.min(maxInterval, interval * backoff);\n }\n }\n}\n","import type { QuerySpec } from \"./query-spec.js\";\nimport type { ResponseMeta } from \"../core.js\";\nimport { KnowledgeCommandError } from \"../errors.js\";\nimport { publicSource, type SourceRecord } from \"../sources.js\";\nimport type { JsonObject, ResponseOf, components } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\n/**\n * How long a research call waits for its answer, whatever the client's timeout:\n * the engine gives the research route up to 150s (an agentic loop that reads\n * documents from connected services), so a 60s client would give up first.\n */\nexport const RESEARCH_TIMEOUT_MS = 170_000;\n/** Milliseconds a quick research call waits: the engine ends a quick run within 16s. */\nexport const QUICK_RESEARCH_TIMEOUT_MS = 30_000;\n\n/** A documents command's response; a `search` adds `results`. */\nexport type DocumentsResult = ResponseOf<\"/v1/knowledge/documents\", \"post\">;\n\n/** A research answer: `text`, `answer`, `sources`, `engine`, `stopped_early`, ... */\nexport type ResearchResult = ResponseOf<\"/v1/knowledge/research\", \"post\">;\n\nexport interface DocumentsSearchOptions {\n /** Documents per page (default 8, max 25). */\n limit?: number;\n /** Documents to skip. */\n offset?: number;\n /** Best passages per document (default 2, max 5). */\n passages?: number;\n /** A folder, a glob, or one document's path. */\n path?: string;\n /** Drive-path globs; `!` excludes. */\n glob?: string | string[];\n /** File kinds: pdf, docx, xlsx, csv, pptx, md, txt, email, ... */\n type?: string | string[];\n /** Search inside one document: id, path, title or citation token. */\n document?: string;\n /** A project id or name; omit for everything you can read. */\n projectId?: string;\n}\n\n/** The `rows` command's filters (every map card's Facts, Connections or Findings rows). */\nexport interface RowsOptions {\n /** Card type to read. */\n pageType?: string;\n /** Card titles containing this. */\n entity?: string;\n /** Field name: Facts attribute, Connections relation, Findings kind. */\n attribute?: string;\n /** Rows whose text contains this. */\n query?: string;\n /** Connections only: rows pointing at this page. */\n to?: string;\n /** Only cards linked to this page, in either direction. */\n connectedTo?: string;\n /** Facts only: each card's value on this day (YYYY-MM-DD). */\n asOf?: string;\n /** When window start. */\n startDate?: string;\n /** When window end. */\n endDate?: string;\n /** Facts: the current value per attribute. */\n currentOnly?: boolean;\n /** Counts and totals per group (entity, entity_type, year or a column) instead of rows. */\n groupBy?: string;\n /** Read attribute, to and query as case-insensitive regular expressions. */\n regex?: boolean;\n /**\n * `values` (default), `fields` (field names, counts, examples), `groups`, or\n * `conflicts` (Facts: pairs of rows on one card giving one field different values\n * with overlapping or missing When).\n */\n view?: \"values\" | \"fields\" | \"groups\" | \"conflicts\";\n /** Exactly one field, as the field inventory names it. */\n fieldId?: string;\n /**\n * How `attribute` finds a field and `query` matches values: `meaning` (the default),\n * `similar` (words only) or `exact`.\n */\n match?: \"exact\" | \"similar\" | \"meaning\";\n /** Continue a card scan that stopped at its cap, after this card id. */\n afterCard?: string;\n /** Column to sort by (Facts also `amount` or `date`). */\n orderBy?: string;\n descending?: boolean;\n limit?: number;\n offset?: number;\n includeEvidence?: boolean;\n /** A project name or id. */\n scope?: string;\n}\n\n/** `RowsOptions` keys as the `rows` command names them. */\nconst ROWS_ARGUMENTS: Record<Exclude<keyof RowsOptions, \"scope\">, string> = {\n pageType: \"page_type\",\n entity: \"entity\",\n attribute: \"attribute\",\n query: \"query\",\n to: \"to\",\n connectedTo: \"connected_to\",\n asOf: \"as_of\",\n startDate: \"start_date\",\n endDate: \"end_date\",\n currentOnly: \"current_only\",\n groupBy: \"group_by\",\n regex: \"regex\",\n view: \"view\",\n fieldId: \"field_id\",\n match: \"match\",\n afterCard: \"after_card\",\n orderBy: \"order_by\",\n descending: \"descending\",\n limit: \"limit\",\n offset: \"offset\",\n includeEvidence: \"include_evidence\",\n};\n\n/** Options for {@link Knowledge.research}. */\nexport interface ResearchOptions {\n /** A short cited answer within 15 seconds from one search. */\n quick?: boolean;\n}\n\n/** The door's reply: `{content: [{type, text}], outcome, sources}`; a refusal's `outcome.error_code` names why. */\nexport interface KnowledgeResult extends JsonObject {\n content?: { type: string; text?: string }[];\n outcome?: { status?: string; error_code?: string; [key: string]: unknown };\n sources?: unknown[];\n}\n\n/** Who filed a proposal: the person, and the API credential, client, agent and run used. */\nexport type ProposalFiledBy = components[\"schemas\"][\"ProposalFiledBy\"];\n\n/** The proposal a section or row write staged: its `id`, `content_hash` (an accept's `reviewedHash`) and `filed_by`. */\nexport type StagedProposal = components[\"schemas\"][\"StagedProposalRef\"];\n\n/**\n * A write's reply. A write that stages a proposal for one section or card row\n * (`edit_section`, `add_fact`, `add_connection`, `add_finding`, `edit_rows`)\n * names it in `proposal`, so it can be accepted with its `content_hash` as the\n * reviewed hash.\n */\nexport interface KnowledgeWriteResult extends KnowledgeResult {\n proposal?: StagedProposal | null;\n}\n\n/** One proposal as the proposals routes return it, with who filed it (`filed_by`). */\nexport type WikiProposal = ResponseOf<\"/v1/knowledge/wiki/proposals/{proposal_id}\", \"get\">;\n\n/** A page of proposals: `{data, next_cursor, has_more}`. */\nexport type WikiProposalPage = ResponseOf<\"/v1/knowledge/wiki/proposals\", \"get\">;\n\n/** One proposal as a page of {@link WikiProposalPage} lists it. */\nexport type ListedWikiProposal = WikiProposalPage[\"data\"][number];\n\nexport interface DoorOptions {\n /** A project id or name to read or write in. */\n scope?: string;\n /** Reject with KnowledgeCommandError when the door reports `outcome.status === \"error\"`. Default true. */\n check?: boolean;\n}\n\n/** The text parts of a door reply, joined. */\nexport function resultText(result: KnowledgeResult): string {\n return (result.content ?? [])\n .map((part) => part.text ?? \"\")\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction checked<R extends KnowledgeResult>(result: R, check: boolean, meta?: ResponseMeta): R {\n if (check && result.outcome?.status === \"error\") {\n // The door's outcome protocol (`beakr.wiki_tool_outcome.v1`) names the\n // refusal in `error_code`; `code` is read only as a fallback.\n const outcomeCode = result.outcome[\"error_code\"] ?? result.outcome[\"code\"];\n throw new KnowledgeCommandError(resultText(result) || \"The Knowledge command was refused.\", result, {\n status: meta?.status,\n requestId: meta?.requestId,\n ...(typeof outcomeCode === \"string\" && outcomeCode ? { code: outcomeCode } : {}),\n });\n }\n return result;\n}\n\n/** The filters and paging `GET /v1/knowledge/wiki/proposals` takes. */\nexport interface ListProposalsQuery {\n /** `pending` (the default), `dismissed`, ... */\n status?: string;\n projectId?: string;\n groupId?: string;\n labelId?: string;\n /** The proposals one write batch staged. */\n batchId?: string;\n source?: string;\n cursor?: string;\n limit?: number;\n}\n\nfunction proposalsQuery(query: ListProposalsQuery): Record<string, string | number | undefined> {\n return {\n status: query.status,\n project_id: query.projectId,\n group_id: query.groupId,\n label_id: query.labelId,\n batch_id: query.batchId,\n source: query.source,\n cursor: query.cursor,\n limit: query.limit,\n };\n}\n\nclass Proposals extends Resource {\n /** One page of proposals (pending by default); {@link iter} follows every page. */\n list(query: ListProposalsQuery = {}): Promise<WikiProposalPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: proposalsQuery(query) });\n }\n\n /** Every proposal matching the filters, following cursors. */\n iter(query: Omit<ListProposalsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<ListedWikiProposal> {\n return this.transport.paginate(\n { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: proposalsQuery(query) },\n pageSize,\n );\n }\n\n get(proposalId: string): Promise<WikiProposal> {\n return this.transport.request({ method: \"GET\", path: `/v1/knowledge/wiki/proposals/${enc(proposalId)}` });\n }\n\n /**\n * Apply a proposal. `reviewedHash` is the `content_hash` of the {@link get} you\n * reviewed, sent unchanged: a proposal that changed since is refused (409\n * `proposal_changed`) and nothing is applied, and a proposal that changes a card's\n * table rows can require it (422 `review_required`). This never reads the proposal\n * to fill it in, because a hash from a read made at accept time would bind the\n * accept to whatever the proposal is then rather than to what was reviewed.\n */\n accept(proposalId: string, options: { reviewedHash?: string } = {}): Promise<unknown> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/knowledge/wiki/proposals/${enc(proposalId)}/accept`,\n ...(options.reviewedHash !== undefined ? { body: { reviewed_hash: options.reviewedHash } } : {}),\n });\n }\n\n dismiss(proposalId: string): Promise<unknown> {\n return this.transport.request({ method: \"POST\", path: `/v1/knowledge/wiki/proposals/${enc(proposalId)}/dismiss` });\n }\n}\n\n/** Knowledge pages over REST, as structured records. */\nclass Pages extends Resource {\n /**\n * Every source that fed a page, as public source records: filename,\n * provider, `location` (the original's URL or path, or `file_id` for Beakr's\n * copy), the cited excerpt, its stance and the section it backs.\n */\n async sources(pageId: string): Promise<SourceRecord[]> {\n const records: SourceRecord[] = [];\n for await (const row of this.transport.paginate<Record<string, unknown>>(\n { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(pageId)}/sources` },\n 200,\n )) {\n records.push(publicSource(row));\n }\n return records;\n }\n}\n\n/**\n * Knowledge through the same door Beakr's own agents use: `command` runs a\n * read (`ls`, `cat`, `sections`, `grep`, `rows`, `timeline`, ...), `write`\n * stages a change (`new`, `edit_section`, `add_fact`, ...).\n */\nexport class Knowledge extends Resource {\n readonly proposals = new Proposals(this.transport);\n readonly pages = new Pages(this.transport);\n\n async command(command: string, args: JsonObject = {}, options: DoorOptions = {}): Promise<KnowledgeResult> {\n const body: JsonObject = { ...args, command };\n if (options.scope) body[\"scope\"] = options.scope;\n let meta: ResponseMeta | undefined;\n const result = await this.transport.request<KnowledgeResult>({\n method: \"POST\",\n path: \"/v1/knowledge/wiki/command\",\n body,\n onResponse: (received) => {\n meta = received;\n },\n });\n return checked(result, options.check ?? true, meta);\n }\n\n /**\n * Every action except `page_type` needs a `rationale`. A write that stages a\n * proposal for one section or card row answers with `proposal`.\n */\n async write(action: string, args: JsonObject = {}, options: DoorOptions = {}): Promise<KnowledgeWriteResult> {\n const body: JsonObject = { ...args, action };\n if (options.scope) body[\"scope\"] = options.scope;\n let meta: ResponseMeta | undefined;\n const result = await this.transport.request<KnowledgeWriteResult>({\n method: \"POST\",\n path: \"/v1/knowledge/wiki/write\",\n body,\n onResponse: (received) => {\n meta = received;\n },\n });\n return checked(result, options.check ?? true, meta);\n }\n\n /**\n * Ask a question of every map card's rows (the `query` command), as SQL or a\n * spec. `{ sql }` is one SELECT, such as `SELECT value, COUNT(DISTINCT entity) AS\n * cards FROM facts AS OF CURRENT_DATE WHERE entity_type = 'matter' AND field =\n * 'Current status' GROUP BY value ORDER BY cards DESC`; the engine parses it into\n * a spec and never runs it as SQL (`FROM` facts, connections or findings, up to\n * two `JOIN`s on `SAME_CARD(a)` or `TARGET_CARD(a)`, `WHERE` with AND/OR/NOT,\n * `AS OF` a day, `GROUP BY`, `COUNT`/`MIN`/`MAX`/`SUM`/`AVG`, `ORDER BY`, `LIMIT`).\n * A {@link QuerySpec} is the same query as JSON. Only cards you can read are\n * queried; `scope` narrows them to one project (name or id); `cursor` continues\n * a previous answer. Where enabled for the organization. The answer's text opens\n * with what the query was understood as (for SQL the spec it was translated to,\n * how each name resolved, what was defaulted or applied), then the total and a\n * table; its `query` holds the same as data (`spec`, `columns`, `rows`, `total`,\n * `next_cursor`). A query the engine cannot run throws a `KnowledgeCommandError`\n * (`invalid_arguments`).\n */\n query(\n query: QuerySpec | { sql: string },\n options: { scope?: string; cursor?: string } = {},\n ): Promise<KnowledgeResult> {\n const args: JsonObject =\n \"sql\" in query ? { sql: query.sql } : { spec: query as unknown as JsonObject };\n if (options.cursor) args[\"cursor\"] = options.cursor;\n return this.command(\"query\", args, options.scope ? { scope: options.scope } : {});\n }\n\n /**\n * Every map card's `facts`, `connections` or `findings` rows as one table (the\n * `rows` command), filtered and walked by {@link RowsOptions}.\n */\n rows(table: \"facts\" | \"connections\" | \"findings\" = \"facts\", options: RowsOptions = {}): Promise<KnowledgeResult> {\n const { scope, ...rest } = options;\n const args: JsonObject = { table };\n for (const [key, name] of Object.entries(ROWS_ARGUMENTS)) {\n const value = rest[key as keyof typeof rest];\n if (value !== undefined) args[name] = value as JsonObject[string];\n }\n return this.command(\"rows\", args, scope ? { scope } : {});\n }\n\n /**\n * Search/read/list original indexed documents. Scan notices describe incomplete\n * results. `projectId` is a project id or name; without it a command covers\n * everything you can read.\n */\n documents(\n command: \"grep\" | \"read\" | \"ls\" | \"search\",\n args: JsonObject = {},\n projectId?: string,\n ): Promise<DocumentsResult> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/knowledge/documents\",\n body: { command, arguments: args, ...(projectId ? { project_id: projectId } : {}) },\n });\n }\n\n /**\n * Passages of the original documents ranked by meaning, grouped by document\n * (`documents` `search`). For when you do not know a document's words; `grep`\n * finds and counts every literal mention. The response's `results` is one source\n * record per matching document, best first (`source_ref`, `location` with\n * `display_path`, `file_id` and `version_id`, `match`, `score`, and its best\n * `passages`). Download a result's file with `files.downloadLink(sourceRef)`.\n */\n documentsSearch(query: string, options: DocumentsSearchOptions = {}): Promise<DocumentsResult> {\n const { projectId, ...rest } = options;\n const args: JsonObject = { query };\n for (const [key, value] of Object.entries(rest)) {\n if (value !== undefined) args[key] = value as JsonObject[string];\n }\n return this.documents(\"search\", args, projectId);\n }\n\n /**\n * A cited answer from Knowledge and connected sources. Waits up to\n * {@link RESEARCH_TIMEOUT_MS} (or the client's timeout, if longer): the engine\n * allows research up to 150s. With `{ quick: true }` the engine answers within\n * 15 seconds from one search of Knowledge and uploaded files (no connected\n * sources); the answer's `engine` is `quick`, and `stopped_early` is true when\n * it is the cited results without a written summary.\n */\n research(query: string, projectId?: string, options: ResearchOptions = {}): Promise<ResearchResult> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/knowledge/research\",\n body: {\n query,\n ...(projectId ? { project_id: projectId } : {}),\n ...(options.quick ? { quick: true } : {}),\n },\n minTimeoutMs: options.quick ? QUICK_RESEARCH_TIMEOUT_MS : RESEARCH_TIMEOUT_MS,\n });\n }\n}\n","import type { BodyOf, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type Label = ResponseOf<\"/v1/labels/{label_id}\", \"get\">;\nexport type LabelPage = ResponseOf<\"/v1/labels\", \"get\">;\ntype Paging = { cursor?: string; limit?: number };\n\n/**\n * Labels: named groups of people mapped to projects. A label's members get\n * the role it holds on each attached project.\n */\nexport class Labels extends Resource {\n list(query: Paging = {}): Promise<LabelPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/labels\", query });\n }\n\n create(body: BodyOf<\"/v1/labels\", \"post\">): Promise<Label> {\n return this.transport.request({ method: \"POST\", path: \"/v1/labels\", idempotent: true, body });\n }\n\n get(labelId: string): Promise<Label> {\n return this.transport.request({ method: \"GET\", path: `/v1/labels/${enc(labelId)}` });\n }\n\n update(labelId: string, body: BodyOf<\"/v1/labels/{label_id}\", \"patch\">): Promise<Label> {\n return this.transport.request({ method: \"PATCH\", path: `/v1/labels/${enc(labelId)}`, body });\n }\n\n delete(labelId: string): Promise<void> {\n return this.transport.request({ method: \"DELETE\", path: `/v1/labels/${enc(labelId)}`, responseType: \"none\" });\n }\n\n members(labelId: string, query: Paging = {}): Promise<ResponseOf<\"/v1/labels/{label_id}/members\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: `/v1/labels/${enc(labelId)}/members`, query });\n }\n\n addMember(\n labelId: string,\n body: BodyOf<\"/v1/labels/{label_id}/members\", \"post\">,\n ): Promise<ResponseOf<\"/v1/labels/{label_id}/members\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/labels/${enc(labelId)}/members`,\n idempotent: true,\n body,\n });\n }\n\n removeMember(labelId: string, userId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/labels/${enc(labelId)}/members/${enc(userId)}`,\n responseType: \"none\",\n });\n }\n\n projects(labelId: string, query: Paging = {}): Promise<ResponseOf<\"/v1/labels/{label_id}/projects\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: `/v1/labels/${enc(labelId)}/projects`, query });\n }\n\n attachProject(\n labelId: string,\n body: BodyOf<\"/v1/labels/{label_id}/projects\", \"post\">,\n ): Promise<ResponseOf<\"/v1/labels/{label_id}/projects\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/labels/${enc(labelId)}/projects`,\n idempotent: true,\n body,\n });\n }\n\n setProjectRole(\n labelId: string,\n projectId: string,\n body: BodyOf<\"/v1/labels/{label_id}/projects/{project_id}\", \"patch\">,\n ): Promise<ResponseOf<\"/v1/labels/{label_id}/projects/{project_id}\", \"patch\">> {\n return this.transport.request({\n method: \"PATCH\",\n path: `/v1/labels/${enc(labelId)}/projects/${enc(projectId)}`,\n body,\n });\n }\n\n detachProject(labelId: string, projectId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/labels/${enc(labelId)}/projects/${enc(projectId)}`,\n responseType: \"none\",\n });\n }\n}\n","import type { ResponseOf } from \"../types.js\";\nimport { Resource } from \"./base.js\";\n\nexport class Me extends Resource {\n get(): Promise<ResponseOf<\"/v1/me\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me\" });\n }\n\n /** The organization requests are scoped to. */\n activeOrg(): Promise<ResponseOf<\"/v1/me/organization\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me/organization\" });\n }\n}\n","import type { ResponseOf } from \"../types.js\";\nimport { OrgScoped, enc } from \"./base.js\";\n\nexport type Role = \"owner\" | \"admin\" | \"member\" | \"viewer\";\n\n/** One member as `GET /v1/organizations/{org_id}/members` lists it. */\nexport type OrgMember = NonNullable<ResponseOf<\"/v1/organizations/{org_id}/members\", \"get\">[\"data\"]>[number];\n\nexport class Members extends OrgScoped {\n /** One page of the organization's members; {@link iter} follows every page. */\n async list(\n orgId?: string,\n query: { cursor?: string; limit?: number } = {},\n ): Promise<ResponseOf<\"/v1/organizations/{org_id}/members\", \"get\">> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/members`,\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every member of the organization, following cursors. */\n async *iter(orgId?: string, pageSize?: number): AsyncGenerator<OrgMember> {\n yield* this.transport.paginate<OrgMember>(\n { method: \"GET\", path: `${await this.orgBase(orgId)}/members` },\n pageSize,\n );\n }\n\n /**\n * Change a member's role. The route takes the role as a query parameter.\n * An organization that requires SSO or a fresh second factor refuses this to\n * API keys and tokens (`session_required`); change the role in the web app.\n */\n async setRole(userId: string, role: Role, orgId?: string): Promise<unknown> {\n return this.transport.request({\n method: \"PATCH\",\n path: `${await this.orgBase(orgId)}/members/${enc(userId)}`,\n query: { new_role: role },\n });\n }\n\n async remove(userId: string, orgId?: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `${await this.orgBase(orgId)}/members/${enc(userId)}`,\n responseType: \"none\",\n });\n }\n}\n","/**\n * Which documented operations one Beakr server serves.\n *\n * Not every Beakr installation serves the whole documented contract: a\n * self-hosted installation leaves out the hosted organization administration,\n * embedded-mode and integration routes, and answers a bare 404 for them. Every\n * server describes the operations it actually serves in its own public OpenAPI\n * document (`GET /v1/public/openapi.json`), built from the routes it runs, so a\n * client can tell \"this installation does not provide that\" apart from \"that\n * record does not exist\" without trying the call.\n *\n * {@link Capabilities} reads that document. `beakr.meta.capabilities()` fetches\n * it once per base URL and keeps it for {@link CAPABILITIES_TTL_MS}. A server\n * that publishes no document (an older release) is assumed to serve\n * everything, so the helper can only ever narrow what a client offers, never\n * invent a refusal.\n */\nimport { BeakrError } from \"./errors.js\";\nimport { OPERATIONS } from \"./generated/operations.js\";\n\n/**\n * How long a fetched document is trusted before it is read again. Short: an\n * installation that is upgraded in place gains routes without a client restart.\n */\nexport const CAPABILITIES_TTL_MS = 300_000;\n\nconst METHODS = [\"get\", \"post\", \"put\", \"patch\", \"delete\"] as const;\nconst PARAMETER = /\\{[^{}/]+\\}/;\n\ntype OperationIndex = Map<string, RegExp[]>;\n\n/** A contract path as a regex: each `{parameter}` matches one path segment. */\nfunction pattern(template: string): RegExp {\n const parts = template.split(PARAMETER).map((part) => part.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n return new RegExp(`^${parts.join(\"[^/]+\")}$`);\n}\n\n/** `path` without a query string, fragment or trailing slash (`/v1/projects/`). */\nfunction normalize(path: string): string {\n const bare = path.split(\"?\", 1)[0]!.split(\"#\", 1)[0]!;\n return bare.replace(/\\/+$/, \"\") || \"/\";\n}\n\nfunction indexOf(operations: Iterable<readonly [string, string]>): OperationIndex {\n const index: OperationIndex = new Map();\n for (const [method, template] of operations) {\n const key = method.toUpperCase();\n const patterns = index.get(key) ?? [];\n patterns.push(pattern(normalize(template)));\n index.set(key, patterns);\n }\n return index;\n}\n\nfunction matches(index: OperationIndex, method: string, path: string): boolean {\n const bare = normalize(path);\n return (index.get(method.toUpperCase()) ?? []).some((p) => p.test(bare));\n}\n\n/** Every operation of the documented contract this SDK was generated from. */\nconst CONTRACT = indexOf(Object.values(OPERATIONS).map((op) => [op.method, op.path] as const));\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction documentOperations(document: unknown): [string, string][] {\n if (!isRecord(document) || !isRecord(document[\"paths\"])) return [];\n const operations: [string, string][] = [];\n for (const [path, item] of Object.entries(document[\"paths\"])) {\n if (!isRecord(item)) continue;\n for (const method of METHODS) if (method in item) operations.push([method.toUpperCase(), path]);\n }\n return operations;\n}\n\n/**\n * The documented operations one server serves, read from its OpenAPI document.\n *\n * Get one with `beakr.meta.capabilities()`. `serves` takes a concrete path\n * (`/v1/organizations/<id>/members`) or a contract template\n * (`/v1/organizations/{org_id}/members`).\n */\nexport class Capabilities {\n /** Whether the server published a document. Without one every operation is assumed served. */\n readonly documented: boolean;\n private readonly served: OperationIndex;\n\n constructor(document: unknown) {\n const operations = documentOperations(document);\n this.documented = operations.length > 0;\n this.served = indexOf(operations);\n }\n\n /** For a server that publishes no document: everything is assumed served. */\n static unknown(): Capabilities {\n return new Capabilities(null);\n }\n\n /**\n * Whether this server serves `method path`.\n *\n * `false` only when the server published its document and the operation is\n * part of the documented contract but missing from it. A route outside the\n * documented contract cannot be judged from the document and is assumed\n * served, as is everything on a server without a document.\n */\n serves(method: string, path: string): boolean {\n if (!this.documented) return true;\n if (matches(this.served, method, path)) return true;\n return !matches(CONTRACT, method, path);\n }\n\n /** The `[method, path]` pairs of `operations` this server does not serve. */\n unserved(operations: Iterable<readonly [string, string]>): [string, string][] {\n const missing: [string, string][] = [];\n for (const [method, path] of operations) if (!this.serves(method, path)) missing.push([method, path]);\n return missing;\n }\n}\n\ninterface CacheEntry {\n at: number;\n capabilities: Promise<Capabilities>;\n}\n\nconst cache = new Map<string, CacheEntry>();\n\nfunction cacheKey(baseUrl: string): string {\n return baseUrl.trim().replace(/\\/+$/, \"\").toLowerCase();\n}\n\n/** Drop the cached document for `baseUrl`, or for every server. */\nexport function forgetCapabilities(baseUrl?: string): void {\n if (baseUrl === undefined) cache.clear();\n else cache.delete(cacheKey(baseUrl));\n}\n\n/**\n * `baseUrl`'s {@link Capabilities}, fetched with `fetchDocument` at most once per\n * TTL. Concurrent callers share one fetch. Any failure to read the document (no\n * such route on an older server, the server unreachable) is cached as\n * {@link Capabilities.unknown} for the same TTL, so a client asking before every\n * call does not retry a fetch that cannot succeed.\n */\nexport function cachedCapabilities(\n baseUrl: string,\n fetchDocument: () => Promise<unknown>,\n options: { refresh?: boolean } = {},\n): Promise<Capabilities> {\n const key = cacheKey(baseUrl);\n const cached = cache.get(key);\n if (cached && !options.refresh && Date.now() - cached.at < CAPABILITIES_TTL_MS) return cached.capabilities;\n const entry: CacheEntry = {\n at: Date.now(),\n capabilities: fetchDocument().then(\n (document) => new Capabilities(document),\n (error: unknown) => {\n if (error instanceof BeakrError) return Capabilities.unknown();\n // Not a server answer (a bug, an abort): forget it so the next call tries again.\n if (cache.get(key) === entry) cache.delete(key);\n throw error;\n },\n ),\n };\n cache.set(key, entry);\n // The TTL runs from when the document arrived, not from when it was asked for.\n void entry.capabilities.then(\n () => {\n entry.at = Date.now();\n },\n () => undefined,\n );\n return entry.capabilities;\n}\n","import { cachedCapabilities, type Capabilities } from \"../capabilities.js\";\nimport type { ResponseOf } from \"../types.js\";\nimport { Resource } from \"./base.js\";\n\n/** The API describing itself. */\nexport class Meta extends Resource {\n /** The public OpenAPI document (every operation a key or token may call). */\n openapi(): Promise<ResponseOf<\"/v1/public/openapi.json\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/public/openapi.json\", authenticated: false });\n }\n\n /**\n * Which documented operations this server serves, as a {@link Capabilities}.\n *\n * Read from the server's own OpenAPI document, fetched at most once per base\n * URL every few minutes (`{ refresh: true }` reads it again now). A\n * self-hosted installation serves less than the hosted service:\n * `(await beakr.meta.capabilities()).serves(\"GET\", \"/v1/integrations\")` says\n * whether this one has integrations before a call answers 404.\n */\n capabilities(options: { refresh?: boolean } = {}): Promise<Capabilities> {\n return cachedCapabilities(this.transport.baseUrl, () => this.openapi(), options);\n }\n}\n","import { cleanBody, type Transport } from \"../core.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { OrgScoped, credentialClient, enc } from \"./base.js\";\n\nexport interface MintKeyOptions {\n scopes: string[];\n name?: string;\n projectIds?: string[];\n expiresInDays?: number;\n /**\n * The client the key is for (a CI system, an integration), recorded on the\n * key. The API requires one; it defaults to this SDK's name.\n */\n clientName?: string;\n}\n\nclass ServiceAccounts extends OrgScoped {\n /** One page of the organization's service accounts; {@link iter} follows every page. */\n async list(\n orgId?: string,\n query: { cursor?: string; limit?: number } = {},\n ): Promise<{ data: JsonObject[]; next_cursor?: string | null; has_more?: boolean }> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/service-accounts`,\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every service account of the organization, following cursors. */\n async *iter(orgId?: string, pageSize?: number): AsyncGenerator<JsonObject> {\n yield* this.transport.paginate<JsonObject>(\n { method: \"GET\", path: `${await this.orgBase(orgId)}/service-accounts` },\n pageSize,\n );\n }\n\n /**\n * Web app only: creating a service account needs a signed-in person, so API\n * keys and tokens are refused with `session_required`. Create it under\n * Settings > Organization > Developer, then use its key from your backend.\n */\n async create(\n name: string,\n role: \"member\" | \"admin\" | \"viewer\" = \"member\",\n orgId?: string,\n ): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/service-accounts`,\n body: { name, role },\n });\n }\n\n /**\n * Deactivates the account and revokes its keys. Web app only: API keys and\n * tokens are refused with `session_required`.\n */\n async disable(accountId: string, orgId?: string): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/service-accounts/${enc(accountId)}/disable`,\n });\n }\n\n /**\n * A scoped key owned by the service account; `key` is returned once. Web app\n * only: keys and tokens never create keys, so API keys and tokens are refused\n * with `session_required`.\n */\n async mintKey(\n accountId: string,\n options: MintKeyOptions,\n orgId?: string,\n ): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/service-accounts/${enc(accountId)}/keys`,\n body: cleanBody({\n scopes: options.scopes,\n name: options.name,\n project_ids: options.projectIds,\n expires_in_days: options.expiresInDays,\n client_name: credentialClient(options.clientName, this.transport.clientName),\n }),\n });\n }\n}\n\n/** Organization administration: service accounts (the rest of org administration is not in the documented API). */\nexport class OrgAdmin {\n readonly serviceAccounts: ServiceAccounts;\n\n constructor(transport: Transport) {\n this.serviceAccounts = new ServiceAccounts(transport);\n }\n}\n","/**\n * Wait for Knowledge: a project's, or an upload batch's files' (Python's\n * `beakr_sdk/resources/knowledge_readiness.py`).\n *\n * A file reaches a project's Knowledge in the background after it is indexed.\n * These waits poll until nothing is queued or running and resolve to the last\n * answer, so a program can tell \"ready\" from \"ready, but some files failed\".\n * Failed files never end a wait early; they are in the answer, and\n * {@link KnowledgeFailedError} is thrown for them only with `raiseOnFailure`.\n */\n\nimport type { Transport } from \"../core.js\";\nimport type { JsonObject } from \"../types.js\";\n\nexport interface KnowledgeWaitOptions {\n /** First poll interval (default 5000 ms); each later wait is `backoff` times longer. */\n pollMs?: number;\n /** Longest wait between polls (default 30000 ms). */\n maxIntervalMs?: number;\n /** Growth factor per poll (default 1.5). */\n backoff?: number;\n /** Give up after this long (default 600000 ms). */\n timeoutMs?: number;\n /** Throw {@link KnowledgeFailedError} when the wait ends with failed files. */\n raiseOnFailure?: boolean;\n /** Called with each status read (to show progress). */\n onStatus?: (status: JsonObject) => void;\n}\n\n/** Knowledge was still queued or running when the wait gave up; `last` is the last answer. */\nexport class KnowledgeTimeoutError extends Error {\n constructor(\n what: string,\n readonly last: JsonObject,\n ) {\n const counts = countsOf(last);\n super(\n `Knowledge for ${what} is not ready: ${Number(counts[\"queued\"] ?? 0)} queued, ` +\n `${Number(counts[\"running\"] ?? 0)} running`,\n );\n this.name = \"KnowledgeTimeoutError\";\n }\n}\n\n/** Knowledge finished with failed files (thrown only with `raiseOnFailure`). */\nexport class KnowledgeFailedError extends Error {\n constructor(\n what: string,\n readonly status: JsonObject,\n ) {\n const failed = Number(countsOf(status)[\"failed\"] ?? 0);\n super(`Knowledge for ${what} is ready, but ${failed} ${failed === 1 ? \"file\" : \"files\"} failed`);\n this.name = \"KnowledgeFailedError\";\n }\n}\n\n/** The queued/running/failed counts of a project status or a batch status (`knowledge`). */\nfunction countsOf(answer: JsonObject): Record<string, unknown> {\n const knowledge = answer[\"knowledge\"];\n return knowledge && typeof knowledge === \"object\" && !Array.isArray(knowledge)\n ? (knowledge as Record<string, unknown>)\n : answer;\n}\n\nfunction isReady(answer: JsonObject): boolean {\n const counts = countsOf(answer);\n if (\"ready\" in counts) return Boolean(counts[\"ready\"]);\n return !(Number(counts[\"queued\"] ?? 0) || Number(counts[\"running\"] ?? 0));\n}\n\n/** Poll `read` until nothing is queued or running for Knowledge; resolve to its last answer. */\nexport async function waitForKnowledge<T extends JsonObject>(\n transport: Transport,\n what: string,\n read: () => Promise<T>,\n options: KnowledgeWaitOptions = {},\n): Promise<T> {\n const backoff = options.backoff ?? 1.5;\n const maxInterval = options.maxIntervalMs ?? 30_000;\n let interval = options.pollMs ?? 5000;\n if (interval <= 0 || backoff < 1 || maxInterval < interval) {\n throw new RangeError(\"Need pollMs > 0, backoff >= 1 and maxIntervalMs >= pollMs.\");\n }\n const deadline = Date.now() + (options.timeoutMs ?? 600_000);\n for (;;) {\n const answer = await read();\n options.onStatus?.(answer);\n if (isReady(answer)) {\n if (options.raiseOnFailure && Number(countsOf(answer)[\"failed\"] ?? 0) > 0) {\n throw new KnowledgeFailedError(what, answer);\n }\n return answer;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) throw new KnowledgeTimeoutError(what, answer);\n await transport.sleeper(Math.min(interval, remaining));\n interval = Math.min(maxInterval, interval * backoff);\n }\n}\n\n/** A file the upload duplicated: the batch rejected it and kept `duplicate_of`. */\nexport interface AlreadyUploaded extends JsonObject {\n path: string | null;\n artifact_id: string | null;\n duplicate_of: JsonObject & { artifact_id: string; title?: string | null };\n /** With `wait: \"knowledge\"`: the kept file's Knowledge status once it settled. */\n kept_knowledge_status?: string | null;\n}\n\n/**\n * The batch's duplicate files, and whether they are its only failures.\n *\n * Indexing does not store bytes already in the same place twice: it rejects the\n * new file as `duplicate` and keeps the existing one (`duplicate_of`). That is\n * \"already uploaded\", not a failure, so an upload whose only failed files are\n * duplicates reads `succeeded` (Python's `already_uploaded_outcome`). An engine\n * that counts them in `summary.duplicates` leaves them out of `summary.failed`;\n * an earlier one counted them there.\n */\nexport function alreadyUploadedOutcome(batchStatus: JsonObject): {\n duplicates: AlreadyUploaded[];\n status?: \"succeeded\";\n} {\n const files = (batchStatus[\"artifacts\"] as JsonObject[] | undefined) ?? [];\n const duplicates: AlreadyUploaded[] = [];\n for (const item of files) {\n const keptRef = item[\"duplicate_of\"] as JsonObject | null | undefined;\n if (item[\"error_code\"] !== \"duplicate\" || !keptRef || !keptRef[\"artifact_id\"]) continue;\n duplicates.push({\n path: (item[\"path\"] as string | undefined) ?? null,\n artifact_id: (item[\"id\"] as string | undefined) ?? null,\n duplicate_of: { ...keptRef, artifact_id: String(keptRef[\"artifact_id\"]) },\n });\n }\n const summary = (batchStatus[\"summary\"] as JsonObject | undefined) ?? {};\n const failed = Number(summary[\"failed\"] ?? 0);\n const othersFailed = \"duplicates\" in summary ? failed : failed - duplicates.length;\n return duplicates.length && othersFailed <= 0\n ? { duplicates, status: \"succeeded\" }\n : { duplicates };\n}\n\n/**\n * Poll each file (`GET /v1/artifacts/{id}`) until none is queued or running for\n * Knowledge; resolves to `{ [fileId]: knowledge_status }`. Used for the copy an\n * upload duplicated, which is not one of the batch's files.\n */\nexport async function waitForFilesKnowledge(\n transport: Transport,\n fileIds: string[],\n options: KnowledgeWaitOptions = {},\n): Promise<Record<string, string | null>> {\n const statuses: Record<string, string | null> = {};\n await waitForKnowledge(\n transport,\n `${fileIds.length} kept file(s)`,\n async () => {\n for (const fileId of fileIds) {\n const artifact = await transport.request<JsonObject>({\n method: \"GET\",\n path: `/v1/artifacts/${encodeURIComponent(fileId)}`,\n });\n statuses[fileId] = (artifact[\"knowledge_status\"] as string | null | undefined) ?? null;\n }\n const all = Object.values(statuses);\n const queued = all.filter((s) => s === \"queued\").length;\n const running = all.filter((s) => s === \"running\").length;\n return { queued, running, ready: queued + running === 0, files: { ...statuses } };\n },\n { ...options, raiseOnFailure: false, onStatus: undefined },\n );\n return statuses;\n}\n","import type { ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\n/** One page of refusal events (`GET /v1/projects/{project_id}/model-refusals`). */\nexport type ModelRefusalEvents = ResponseOf<\"/v1/projects/{project_id}/model-refusals\", \"get\">;\n/** Counts for a window (`GET /v1/projects/{project_id}/model-refusals/summary`). */\nexport type ModelRefusalSummary = ResponseOf<\n \"/v1/projects/{project_id}/model-refusals/summary\",\n \"get\"\n>;\n/** One page of per-file counts (`GET /v1/projects/{project_id}/model-refusals/files`). */\nexport type ModelRefusalFiles = ResponseOf<\n \"/v1/projects/{project_id}/model-refusals/files\",\n \"get\"\n>;\n/** The windows the summary and files reads count over. */\nexport type ModelRefusalWindow = \"24h\" | \"7d\" | \"30d\";\n\n/**\n * When a model refused a Knowledge stage in a project, and what happened next\n * (the Python SDK's `projects.model_refusals`). A fallback is the stage moving\n * to the next model in its ladder; each event's `outcome` is `recovered`,\n * `failed` or `skipped`. A file's `model_refusal_count` and\n * `compile_needed_fallback` say the same per file.\n */\nexport class ModelRefusals extends Resource {\n /** One page of refusal events, newest first. */\n list(\n projectId: string,\n options: {\n artifactId?: string;\n outcome?: \"recovered\" | \"failed\" | \"skipped\";\n stage?: string;\n limit?: number;\n cursor?: string;\n } = {},\n ): Promise<ModelRefusalEvents> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/model-refusals`,\n query: {\n artifact_id: options.artifactId,\n outcome: options.outcome,\n stage: options.stage,\n limit: options.limit,\n cursor: options.cursor,\n },\n });\n }\n\n /** Refusal, fallback and outcome counts for `window` (`24h`, `7d` or `30d`). */\n summary(projectId: string, window?: ModelRefusalWindow): Promise<ModelRefusalSummary> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/model-refusals/summary`,\n query: { window },\n });\n }\n\n /** One page of per-file counts for `window`. */\n files(\n projectId: string,\n options: { window?: ModelRefusalWindow; limit?: number; cursor?: string } = {},\n ): Promise<ModelRefusalFiles> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/model-refusals/files`,\n query: { window: options.window, limit: options.limit, cursor: options.cursor },\n });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { BodyOf, JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\nimport { waitForKnowledge, type KnowledgeWaitOptions } from \"./knowledge-readiness.js\";\nimport { ModelRefusals } from \"./model-refusals.js\";\nimport type { Transport } from \"../core.js\";\n\n/** A project's Knowledge status (`GET /v1/projects/{project_id}/knowledge-summary`). */\nexport type ProjectKnowledgeStatus = ResponseOf<\"/v1/projects/{project_id}/knowledge-summary\", \"get\">;\n/** One file whose latest attempt to reach the project's Knowledge failed. */\nexport type KnowledgeFailedFile = NonNullable<ProjectKnowledgeStatus[\"failed_files\"]>[number];\n/** What a retry did (`POST /v1/projects/{project_id}/knowledge/retry-failed`). */\nexport type KnowledgeRetryResult = ResponseOf<\n \"/v1/projects/{project_id}/knowledge/retry-failed\",\n \"post\"\n>;\n\n/** A project's Knowledge profile (`GET /v1/projects/{project_id}/knowledge-profile`). */\nexport type ProjectKnowledgeProfile = ResponseOf<\n \"/v1/projects/{project_id}/knowledge-profile\",\n \"get\"\n>;\n/** The whole profile a {@link Projects.setKnowledgeProfile} call sends. */\nexport type ProjectKnowledgeProfileInput = BodyOf<\n \"/v1/projects/{project_id}/knowledge-profile\",\n \"put\"\n>;\n/** The fields a {@link Projects.updateKnowledgeProfile} call changes. */\nexport type ProjectKnowledgeProfilePatch = BodyOf<\n \"/v1/projects/{project_id}/knowledge-profile\",\n \"patch\"\n>;\n\n/** The filters and paging `GET /v1/projects` takes. */\nexport interface ListProjectsQuery {\n /** Only projects you are a member of, not every project your organization role lets you see. */\n memberOnly?: boolean;\n ownerUserId?: string;\n groupId?: string;\n /** Include each project's Knowledge counts. */\n includeKnowledge?: boolean;\n cursor?: string;\n limit?: number;\n}\n\n/** One project as `GET /v1/projects` lists it. */\nexport type Project = NonNullable<ResponseOf<\"/v1/projects\", \"get\">[\"data\"]>[number];\n/** One project member as `GET /v1/projects/{project_id}/members` lists it. */\nexport type ProjectMember = NonNullable<ResponseOf<\"/v1/projects/{project_id}/members\", \"get\">[\"data\"]>[number];\n\nfunction projectsQuery(options: ListProjectsQuery): Record<string, string | number | boolean | undefined> {\n return {\n member_only: options.memberOnly,\n owner_user_id: options.ownerUserId,\n group_id: options.groupId,\n include_knowledge: options.includeKnowledge,\n cursor: options.cursor,\n limit: options.limit,\n };\n}\n\nexport class Projects extends Resource {\n /** When a model refused a Knowledge stage in a project (`/model-refusals`). */\n readonly modelRefusals: ModelRefusals;\n\n constructor(transport: Transport) {\n super(transport);\n this.modelRefusals = new ModelRefusals(transport);\n }\n\n /**\n * One page of the projects you can see (`{data, next_cursor, has_more}`).\n * Pass `cursor` from the previous page, or use {@link iter} to follow every page.\n */\n list(options: ListProjectsQuery = {}): Promise<ResponseOf<\"/v1/projects\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/projects\", query: projectsQuery(options) });\n }\n\n /** Every project you can see, following cursors. */\n iter(options: Omit<ListProjectsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<Project> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/projects\", query: projectsQuery(options) }, pageSize);\n }\n\n get(\n projectId: string,\n ): Promise<ResponseOf<\"/v1/projects/{project_id}\", \"get\">> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}`,\n });\n }\n\n create(\n body: BodyOf<\"/v1/projects\", \"post\">,\n ): Promise<ResponseOf<\"/v1/projects\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/projects\",\n body,\n idempotent: true,\n });\n }\n\n update(\n projectId: string,\n body: BodyOf<\"/v1/projects/{project_id}\", \"patch\">,\n ): Promise<ResponseOf<\"/v1/projects/{project_id}\", \"patch\">> {\n return this.transport.request({\n method: \"PATCH\",\n path: `/v1/projects/${enc(projectId)}`,\n body: cleanBody(body as Record<string, unknown>),\n });\n }\n\n /**\n * Delete the project permanently; it cannot be restored (archive is reversible).\n * Needs admin access to the project; a personal project cannot be deleted (403).\n * Web app only in practice: API keys and tokens are refused with\n * `session_required` wherever the organization protects sensitive actions,\n * and a session may need a fresh second factor (`mfa_required`).\n */\n delete(projectId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/projects/${enc(projectId)}`,\n responseType: \"none\",\n });\n }\n\n /** One page of the project's members; {@link iterMembers} follows every page. */\n members(\n projectId: string,\n query: { cursor?: string; limit?: number } = {},\n ): Promise<ResponseOf<\"/v1/projects/{project_id}/members\", \"get\">> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/members`,\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every member of the project, following cursors. */\n iterMembers(projectId: string, pageSize?: number): AsyncGenerator<ProjectMember> {\n return this.transport.paginate({ method: \"GET\", path: `/v1/projects/${enc(projectId)}/members` }, pageSize);\n }\n\n /**\n * Whether the project's Knowledge is ready, its coverage, and what failed:\n * `ready` is true when nothing is queued or running, and `failed_files` are\n * the newest failures (`failedLimit`, default 20) with `error_code`,\n * `reason` and `retryable`. Counts cover the files you can read.\n */\n knowledgeStatus(\n projectId: string,\n options: { failedLimit?: number } = {},\n ): Promise<ProjectKnowledgeStatus> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/knowledge-summary`,\n query: { failed_limit: options.failedLimit },\n });\n }\n\n /** Every file whose latest attempt to reach the project's Knowledge failed, newest first. */\n async knowledgeFailures(projectId: string): Promise<KnowledgeFailedFile[]> {\n const files: KnowledgeFailedFile[] = [];\n for await (const file of this.transport.paginate<KnowledgeFailedFile>(\n { method: \"GET\", path: `/v1/projects/${enc(projectId)}/knowledge/failed-files` },\n 200,\n )) {\n files.push(file);\n }\n return files;\n }\n\n /**\n * Poll {@link knowledgeStatus} until nothing is queued or running and resolve\n * to it. Throws `KnowledgeTimeoutError` (with the last status) at the\n * timeout; failed files do not end the wait, and with `raiseOnFailure` throw\n * `KnowledgeFailedError` instead when any remain.\n */\n waitUntilReady(\n projectId: string,\n options: KnowledgeWaitOptions & { failedLimit?: number } = {},\n ): Promise<ProjectKnowledgeStatus> {\n return waitForKnowledge(\n this.transport,\n `project ${projectId}`,\n () => this.knowledgeStatus(projectId, { failedLimit: options.failedLimit }) as Promise<\n ProjectKnowledgeStatus & JsonObject\n >,\n options,\n );\n }\n\n /**\n * Send failed files to Knowledge again: every failed file (up to 500 per\n * call; `has_more` says more remain), or `artifactIds`. Safe to repeat: files\n * already queued or running are left alone. Needs permission to add files to\n * the project.\n */\n retryFailed(projectId: string, artifactIds?: string[]): Promise<KnowledgeRetryResult> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/projects/${enc(projectId)}/knowledge/retry-failed`,\n body: artifactIds === undefined ? {} : { artifact_ids: [...artifactIds] },\n });\n }\n\n /**\n * The project's Knowledge profile. Throws `NotFoundError` with\n * `code === \"knowledge_profile_not_found\"` while the project has none (set\n * one with {@link setKnowledgeProfile}). Project members read it; a viewer is\n * refused.\n */\n knowledgeProfile(projectId: string): Promise<ProjectKnowledgeProfile> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/knowledge-profile`,\n });\n }\n\n /**\n * Set the whole Knowledge profile, creating it when the project has none.\n * Fields left out are set to their empty value. Only the project's owners\n * may set it; Knowledge reads it when it next compiles files.\n */\n setKnowledgeProfile(\n projectId: string,\n profile: ProjectKnowledgeProfileInput,\n ): Promise<ProjectKnowledgeProfile> {\n return this.transport.request({\n method: \"PUT\",\n path: `/v1/projects/${enc(projectId)}/knowledge-profile`,\n body: cleanBody({ ...profile }),\n });\n }\n\n /**\n * Change the fields given; the rest are kept. A list given replaces that\n * list. Throws `NotFoundError` (`knowledge_profile_not_found`) when the\n * project has no profile yet.\n */\n updateKnowledgeProfile(\n projectId: string,\n fields: ProjectKnowledgeProfilePatch,\n ): Promise<ProjectKnowledgeProfile> {\n return this.transport.request({\n method: \"PATCH\",\n path: `/v1/projects/${enc(projectId)}/knowledge-profile`,\n body: cleanBody({ ...fields }),\n });\n }\n}\n","/**\n * Skills: SKILL.md folders your agent loads on demand (`/v1/skills`); Python's\n * `beakr_sdk/resources/skills.py`.\n *\n * One list covers every skill you can use or install, each labelled with its\n * `visibility` (`private`, `org`, `public`), `owner` (`me`, `org`, `system` for\n * built-ins, `anyone` for public skills from outside your organization),\n * `origin` (`created`, `mined`, `imported`, `system`) and whether it is\n * `installed` in your library; every label is also a filter.\n *\n * ```ts\n * const mine = await beakr.skills.list({ owner: \"me\" });\n * const skill = await beakr.skills.createFromFolder(\"skills/plate-reader\");\n * await beakr.skills.download(skill.id, \"exported/\");\n * ```\n */\nimport { cleanBody } from \"../core.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\nimport { Sha256 } from \"../sha256.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { assertInside, namesDirectory, safePathComponent } from \"../paths.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type SkillVisibility = \"private\" | \"org\" | \"public\";\nexport type SkillOwner = \"me\" | \"org\" | \"system\" | \"anyone\";\nexport type SkillOrigin = \"created\" | \"mined\" | \"imported\" | \"system\";\n\n/** One page of skills (`GET /v1/skills`). */\nexport type SkillPage = ResponseOf<\"/v1/skills\", \"get\">;\n/** A skill in the list, with its labels. */\nexport type Skill = SkillPage[\"data\"][number];\n/** A skill with the revision its files are at (`GET /v1/skills/{skill_id}`). */\nexport type SkillDetail = ResponseOf<\"/v1/skills/{skill_id}\", \"get\">;\n/** A skill's SKILL.md folder (`GET /v1/skills/{skill_id}/bundle`). */\nexport type SkillBundle = ResponseOf<\"/v1/skills/{skill_id}/bundle\", \"get\">;\n/** A created skill (`POST /v1/skills`): the same shape `get` answers. */\nexport type CreatedSkill = ResponseOf<\"/v1/skills\", \"post\">;\n/** A skill's files: each path in its folder mapped to its text. */\nexport type SkillFiles = Record<string, string>;\n/** A skill Beakr drafted from repeated work, as `skills.proposals.list()` pages it. */\nexport type SkillProposal = ResponseOf<\"/v1/me/skills/proposals\", \"get\">[\"data\"][number];\n\nexport const SKILL_MD = \"SKILL.md\";\n\ntype OneOrMany<T> = T | readonly T[];\n\nexport interface ListSkillsQuery {\n visibility?: OneOrMany<SkillVisibility>;\n owner?: OneOrMany<SkillOwner>;\n origin?: OneOrMany<SkillOrigin>;\n /** `true` for the skills in your library, `false` for the ones you could install. */\n installed?: boolean;\n search?: string;\n domain?: string;\n /** Add each skill's `files`. */\n includeContent?: boolean;\n cursor?: string;\n limit?: number;\n}\n\nexport interface CreateSkillOptions {\n visibility?: SkillVisibility;\n /** Where the folder came from (`claude-code`, `codex`...); kept with the skill. */\n source?: string;\n /** The handle to give the skill when its SKILL.md does not name one. */\n slugHint?: string;\n}\n\nexport interface UploadBundleOptions {\n /** `false` writes the files given and keeps the rest. Default `true`. */\n replace?: boolean;\n /** The `files_sha256` you read: a change made since is refused with `skill_conflict`. */\n expectedSha256?: string;\n /** Write even when `expectedSha256` no longer matches. */\n force?: boolean;\n}\n\n/** Names a skill folder on disk carries that are not part of the skill. */\nconst IGNORED = new Set([\".DS_Store\", \"__pycache__\", \".git\", \"__MACOSX\"]);\nconst ignored = (part: string) => IGNORED.has(part) || part.startsWith(\".\");\n\nfunction many<T>(value: OneOrMany<T> | undefined): readonly string[] | undefined {\n if (value === undefined) return undefined;\n return (Array.isArray(value) ? value : [value]) as readonly string[];\n}\n\nconst utf8 = new TextEncoder();\n\n/**\n * The digest Beakr reports as a skill's `files_sha256`: SHA-256 over\n * `path\\0sha256(content)` lines in path order, as the server computes it.\n */\nexport function bundleSha256(files: SkillFiles): string {\n const lines = Object.keys(files)\n .sort()\n .map((path) => `${path}\\0${new Sha256().update(utf8.encode(files[path] ?? \"\")).hex()}`);\n return new Sha256().update(utf8.encode(lines.join(\"\\n\"))).hex();\n}\n\n/** `path` as a relative POSIX path inside the skill, or a `TypeError`. */\nfunction safeRelative(path: string): string {\n const parts = path.replace(/\\\\/g, \"/\").split(\"/\");\n if (\n path.startsWith(\"/\") ||\n /^[A-Za-z]:/.test(path) ||\n path.includes(\"\\0\") ||\n parts.includes(\"..\") ||\n !parts.some(Boolean)\n ) {\n throw new TypeError(`Skill file path ${JSON.stringify(path)} leaves the skill folder.`);\n }\n return parts.filter((part) => part && part !== \".\").join(\"/\");\n}\n\nfunction decodeText(name: string, data: Uint8Array): string {\n try {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(data);\n } catch {\n throw new TypeError(\n `${name} is not UTF-8 text; a skill's files are text (SKILL.md, scripts, references, templates).`,\n );\n }\n}\n\n/** The files of a zip archive (stored or deflated entries), by path. */\nasync function unzip(data: Uint8Array): Promise<Map<string, Uint8Array>> {\n const zlib = await nodeBuiltin<typeof import(\"node:zlib\")>(\"node:zlib\");\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n let end = -1;\n for (let at = data.length - 22; at >= Math.max(0, data.length - 22 - 0xffff); at--) {\n if (view.getUint32(at, true) === 0x06054b50) {\n end = at;\n break;\n }\n }\n if (end < 0) throw new TypeError(\"Not a zip archive.\");\n const count = view.getUint16(end + 10, true);\n let at = view.getUint32(end + 16, true);\n const entries = new Map<string, Uint8Array>();\n const names = new TextDecoder();\n for (let index = 0; index < count; index++) {\n if (view.getUint32(at, true) !== 0x02014b50) throw new TypeError(\"Corrupt zip central directory.\");\n const method = view.getUint16(at + 10, true);\n const compressed = view.getUint32(at + 20, true);\n const nameLength = view.getUint16(at + 28, true);\n const extraLength = view.getUint16(at + 30, true);\n const commentLength = view.getUint16(at + 32, true);\n const local = view.getUint32(at + 42, true);\n const name = names.decode(data.subarray(at + 46, at + 46 + nameLength));\n at += 46 + nameLength + extraLength + commentLength;\n if (name.endsWith(\"/\")) continue;\n const start = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);\n const raw = data.subarray(start, start + compressed);\n if (method === 0) entries.set(name, raw);\n else if (method === 8) entries.set(name, new Uint8Array(zlib.inflateRawSync(raw)));\n else throw new TypeError(`${name}: zip compression method ${method} is not supported.`);\n }\n return entries;\n}\n\nasync function zipFiles(data: Uint8Array): Promise<SkillFiles> {\n let entries = new Map<string, Uint8Array>();\n for (const [name, content] of await unzip(data)) {\n if (name.split(\"/\").some(ignored)) continue;\n entries.set(safeRelative(name), content);\n }\n // A zip of the folder (`plate-reader/SKILL.md`), as Beakr's own export and\n // most archivers write it, is read as the folder's contents.\n if (!entries.has(SKILL_MD)) {\n const tops = new Set([...entries.keys()].map((name) => name.split(\"/\")[0]));\n if (tops.size === 1) {\n const [top] = tops;\n entries = new Map([...entries].map(([name, content]) => [name.slice(`${top}/`.length), content]));\n }\n }\n return Object.fromEntries([...entries].map(([name, content]) => [name, decodeText(name, content)]));\n}\n\n/**\n * A SKILL.md folder, a `SKILL.md` file or a `.zip` of a folder, as the\n * `{path: text}` files the API takes (Node). Hidden files are left out; a\n * missing SKILL.md or a file that is not UTF-8 text is a `TypeError`.\n */\nexport async function readSkillFolder(path: string): Promise<SkillFiles> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const stat = await fs.stat(path).catch(() => undefined);\n let files: SkillFiles;\n if (stat?.isDirectory()) {\n files = {};\n const walk = async (dir: string, relative: string[]): Promise<void> => {\n const children = (await fs.readdir(dir, { withFileTypes: true })).sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n );\n for (const child of children) {\n if (ignored(child.name)) continue;\n const parts = [...relative, child.name];\n const full = nodePath.join(dir, child.name);\n if (child.isDirectory()) await walk(full, parts);\n else if (child.isFile()) files[parts.join(\"/\")] = decodeText(parts.join(\"/\"), await fs.readFile(full));\n }\n };\n await walk(path, []);\n } else if (stat?.isFile()) {\n const data = new Uint8Array(await fs.readFile(path));\n const isZip = data.length >= 4 && data[0] === 0x50 && data[1] === 0x4b && data[2] === 0x03 && data[3] === 0x04;\n if (isZip) files = await zipFiles(data);\n else if (nodePath.basename(path) === SKILL_MD) files = { [SKILL_MD]: decodeText(SKILL_MD, data) };\n else throw new TypeError(`${path} is not a skill folder, a SKILL.md or a .zip of one.`);\n } else {\n throw new TypeError(`${path} is not a skill folder, a SKILL.md or a .zip of one.`);\n }\n if (!(SKILL_MD in files)) throw new TypeError(`${path} has no ${SKILL_MD} at its top level.`);\n return files;\n}\n\n/** Skills Beakr drafted from work you repeated, waiting for you to keep or dismiss. */\nexport class SkillProposals extends Resource {\n /** Proposals by `status`: `pending` (the default), `accepted` or `dismissed`. */\n list(\n query: { status?: \"pending\" | \"accepted\" | \"dismissed\"; cursor?: string; limit?: number } = {},\n ): Promise<ResponseOf<\"/v1/me/skills/proposals\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me/skills/proposals\", query });\n }\n\n /** Every proposal of a status, following cursors. */\n iter(\n query: { status?: \"pending\" | \"accepted\" | \"dismissed\" } = {},\n pageSize?: number,\n ): AsyncGenerator<SkillProposal> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/me/skills/proposals\", query }, pageSize);\n }\n\n /**\n * Make the draft a private skill of yours, installed in your library.\n * `force` creates it even when it repeats a skill you have (409\n * `duplicate_candidate` otherwise).\n */\n accept(\n proposalId: string,\n options: { force?: boolean } = {},\n ): Promise<ResponseOf<\"/v1/me/skills/proposals/{proposal_id}/accept\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/me/skills/proposals/${enc(proposalId)}/accept`,\n query: { force: options.force },\n });\n }\n\n dismiss(proposalId: string): Promise<ResponseOf<\"/v1/me/skills/proposals/{proposal_id}/dismiss\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/me/skills/proposals/${enc(proposalId)}/dismiss`,\n });\n }\n}\n\nexport class Skills extends Resource {\n readonly proposals: SkillProposals = new SkillProposals(this.transport);\n\n private query(query: Omit<ListSkillsQuery, \"cursor\" | \"limit\">) {\n return {\n visibility: many(query.visibility),\n owner: many(query.owner),\n origin: many(query.origin),\n installed: query.installed,\n search: query.search,\n domain: query.domain,\n include_content: query.includeContent,\n };\n }\n\n /**\n * One page of the skills you can use or install, by name. Each filter takes\n * one value or several. With `includeContent` a page holds at most 25 skills.\n * Retired skills are not listed.\n */\n list(query: ListSkillsQuery = {}): Promise<SkillPage> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/skills\",\n query: { ...this.query(query), cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every skill matching the filters, following cursors. */\n iter(query: Omit<ListSkillsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<Skill> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/skills\", query: this.query(query) }, pageSize);\n }\n\n /**\n * One skill by id or slug, with `latest_revision`. A slug resolves to your\n * own skill first, then a built-in, then one you installed, then your\n * organization's; pass the id for any other.\n */\n get(skill: string, options: { includeContent?: boolean } = {}): Promise<SkillDetail> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/skills/${enc(skill)}`,\n query: { include_content: options.includeContent },\n });\n }\n\n /** The SKILL.md folder, with `files_sha256` to send back as `expectedSha256`. */\n bundle(skillId: string): Promise<SkillBundle> {\n return this.transport.request({ method: \"GET\", path: `/v1/skills/${enc(skillId)}/bundle` });\n }\n\n /** The SKILL.md folder as zip bytes (any runtime). */\n downloadZip(skillId: string): Promise<Uint8Array> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/skills/${enc(skillId)}/bundle.zip`,\n responseType: \"bytes\",\n });\n }\n\n /**\n * Save a skill's SKILL.md folder, or its zip with `asZip` (Node). When\n * `destination` is a directory (one that exists, or a path ending in `/`,\n * created if missing) the skill is saved inside it, as `<slug>/` or\n * `<slug>.zip`; otherwise `destination` is the folder or the zip file itself,\n * written exactly as named (add `.zip` yourself). Resolves to the path written.\n */\n async download(skillId: string, destination: string, options: { asZip?: boolean } = {}): Promise<string> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const exists = (await fs.stat(destination).catch(() => undefined))?.isDirectory() ?? false;\n const isDir = namesDirectory(destination, exists);\n if (options.asZip) {\n const data = await this.downloadZip(skillId);\n let target = destination;\n if (isDir) {\n const slug = safePathComponent((await this.bundle(skillId)).slug, \"the skill's slug\");\n target = nodePath.join(destination, `${slug}.zip`);\n assertInside(nodePath, destination, target, \"the skill's zip\");\n }\n await fs.mkdir(nodePath.dirname(target), { recursive: true });\n await fs.writeFile(target, data);\n return target;\n }\n const bundle = await this.bundle(skillId);\n let folder = destination;\n if (isDir) {\n folder = nodePath.join(destination, safePathComponent(bundle.slug, \"the skill's slug\"));\n assertInside(nodePath, destination, folder, \"the skill's folder\");\n }\n // Every path is checked before anything is written, so a bundle naming a\n // path outside the folder leaves no partial copy behind.\n const targets = Object.entries(bundle.files ?? {}).map(([name, content]) => {\n const target = nodePath.join(folder, ...safeRelative(name).split(\"/\"));\n assertInside(nodePath, folder, target, `skill file ${JSON.stringify(name)}`);\n return [target, content] as const;\n });\n for (const [target, content] of targets) {\n await fs.mkdir(nodePath.dirname(target), { recursive: true });\n await fs.writeFile(target, content, \"utf8\");\n }\n await fs.mkdir(folder, { recursive: true });\n return folder;\n }\n\n /**\n * Create a skill of yours from its files (with `SKILL.md`). It is installed\n * in your library and private unless `visibility` says otherwise; `\"public\"`\n * publishes it, every file included, to every Beakr organization. A retry\n * replays its `Idempotency-Key`.\n */\n create(files: SkillFiles, options: CreateSkillOptions = {}): Promise<CreatedSkill> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/skills\",\n idempotent: true,\n body: cleanBody({\n files,\n visibility: options.visibility,\n source: options.source,\n slug_hint: options.slugHint,\n }),\n });\n }\n\n /** Create a skill from a SKILL.md folder, a SKILL.md or a `.zip` of a folder (Node). */\n async createFromFolder(path: string, options: CreateSkillOptions = {}): Promise<CreatedSkill> {\n return this.create(await readSkillFolder(path), options);\n }\n\n /**\n * Replace the files of a skill you own, from `{path: text}` or a folder or\n * zip path (Node). A change made since `expectedSha256` is refused with\n * `ConflictError` (`skill_conflict`) unless `force`.\n */\n async uploadBundle(\n skillId: string,\n files: SkillFiles | string,\n options: UploadBundleOptions = {},\n ): Promise<SkillBundle> {\n const payload = typeof files === \"string\" ? await readSkillFolder(files) : files;\n const body: Record<string, unknown> = { files: payload, replace: options.replace ?? true };\n if (\"expectedSha256\" in options && options.expectedSha256 === undefined) {\n // A bundle reports its digest as `files_sha256`; passing `bundle.sha256`\n // (undefined) used to skip the overwrite check silently.\n throw new TypeError(\n \"expectedSha256 is undefined. Pass the bundle's files_sha256 (skills.bundle(id).files_sha256), \" +\n \"or leave the option out to write without the conflict check.\",\n );\n }\n if (options.expectedSha256 !== undefined) body[\"expected_sha256\"] = options.expectedSha256;\n if (options.force) body[\"force\"] = true;\n return this.transport.request({ method: \"PUT\", path: `/v1/skills/${enc(skillId)}/bundle`, body });\n }\n\n /** Add a skill you can see to your library, so your agent is told about it. */\n install(skillId: string): Promise<ResponseOf<\"/v1/me/skills/library/{skill_id}\", \"post\">> {\n return this.transport.request({ method: \"POST\", path: `/v1/me/skills/library/${enc(skillId)}` });\n }\n\n /** Remove a skill from your library; the skill itself is kept. */\n uninstall(skillId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/me/skills/library/${enc(skillId)}`,\n responseType: \"none\",\n });\n }\n\n /** Delete a skill you wrote, for everyone who installed it. */\n delete(skillId: string): Promise<void> {\n return this.transport.request({ method: \"DELETE\", path: `/v1/skills/${enc(skillId)}`, responseType: \"none\" });\n }\n}\n","/**\n * Content type and artifact type for a file name, as the Python SDK and the web\n * app assign them (`beakr_sdk/resources/_upload.py`, beakr-web's\n * `lib/utils/artifact-file-type.ts`), so a TypeScript upload lands as the same\n * kind of file.\n */\n\nconst MIME_BY_EXTENSION: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".txt\": \"text/plain\",\n \".md\": \"text/markdown\",\n \".markdown\": \"text/markdown\",\n \".csv\": \"text/csv\",\n \".tsv\": \"text/tab-separated-values\",\n \".json\": \"application/json\",\n \".html\": \"text/html\",\n \".htm\": \"text/html\",\n \".xml\": \"application/xml\",\n \".yaml\": \"application/yaml\",\n \".yml\": \"application/yaml\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".svg\": \"image/svg+xml\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".mp4\": \"video/mp4\",\n \".mov\": \"video/quicktime\",\n \".webm\": \"video/webm\",\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/x-wav\",\n \".m4a\": \"audio/mp4\",\n \".zip\": \"application/zip\",\n \".doc\": \"application/msword\",\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".ipynb\": \"application/x-ipynb+json\",\n};\n\n/** Extensions the web classifies as scientific data (browsers report them as octet-stream). */\nconst SCIENTIFIC_EXTENSIONS = new Set(\n (\n \".h5ad .loom .fasta .fa .fastq .bam .sam .vcf .bed .gff .gtf .bigwig .bw .gct .gctx \" +\n \".h5 .hdf5 .hdf .sdf .mol .mol2 .smi .pdb .cif .nii .nifty .dcm .edf .nc .nc4 \" +\n \".parquet .feather .mtx .pzfx .pzm .pzt .prism .dna\"\n ).split(\" \"),\n);\n\nfunction extension(name: string): string {\n const base = name.split(\"/\").pop() ?? name;\n const dot = base.lastIndexOf(\".\");\n return dot > 0 ? base.slice(dot).toLowerCase() : \"\";\n}\n\n/** The content type for a file name; `application/octet-stream` when unknown. */\nexport function guessMimeType(name: string): string {\n return MIME_BY_EXTENSION[extension(name)] ?? \"application/octet-stream\";\n}\n\n/** The artifact type the web app would assign (`detectArtifactType`). */\nexport function detectArtifactType(mimeType: string, name: string): string {\n const suffix = extension(name);\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType === \"application/pdf\") return \"doc\";\n if (mimeType.includes(\"spreadsheet\") || mimeType === \"text/csv\") return \"dataset\";\n if (mimeType === \"application/json\") return \"json\";\n if (\n mimeType === \"application/x-ipynb+json\" ||\n mimeType === \"text/x-rmarkdown\" ||\n suffix === \".ipynb\" ||\n suffix === \".rmd\"\n ) {\n return \"notebook\";\n }\n if (SCIENTIFIC_EXTENSIONS.has(suffix)) return \"scientific_data\";\n return \"doc\";\n}\n","/**\n * Upload a tree of files, recreating its folders: the TypeScript counterpart of\n * Python's `files.upload_folder()` (`beakr_sdk/resources/_upload.py`).\n *\n * The core works on entries (`{ path, data }`), so it runs anywhere `fetch`\n * does: a browser `webkitdirectory` file list, an edge function, or Node. Only\n * {@link readDirectoryEntries} touches the file system, and it loads\n * `node:fs/promises` with a dynamic import, so importing the SDK in an edge or\n * browser runtime never pulls in a Node module.\n *\n * Behavior matches Python's:\n * - files go in a stable order (by path segments);\n * - hidden files and anything under a hidden folder (a segment starting with\n * `.`) are skipped unless `includeHidden`;\n * - with `mirrorFolders` (the default) each sub-directory becomes a folder\n * under `folderId`, parents first; a folder of the same name already in the\n * same place is reused (also after the API refuses a duplicate created\n * meanwhile), so two trees sharing sub-folder names, or the same tree again,\n * fill the existing folders; without it every file goes straight into\n * `folderId`;\n * - {@link Uploads.uploadFolder} starts the tree with a folder named after the\n * directory (`rootFolder`, default true), matching each file's recorded path;\n * - each file is uploaded by {@link Uploads.upload} (the resumable upload, one\n * part for a small file); `ingest: false` keeps the files out of Knowledge;\n * - each file records where it sat (`relativePath`, sent on completion): the\n * entry's own `relativePath`, else its `path` when that names directories.\n * {@link Uploads.uploadFolder} sets it to the path from the directory's\n * parent, so it starts with the directory's own name, as Python's does;\n * - the result is `[{ path, ...uploaded }]` in upload order; the first failure\n * rejects the call, and files already uploaded stay uploaded (a resumable\n * one rejects with `UploadInterruptedError`, whose `uploadId` resumes it).\n */\n\nimport { cleanBody, type Transport } from \"../core.js\";\nimport { ValidationError } from \"../errors.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { detectArtifactType, guessMimeType } from \"./file-types.js\";\nimport type { FileBody, UploadFileOptions } from \"./uploads.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\n\n/** One file to upload: its path relative to the tree's root, and its bytes. */\nexport interface FolderEntry {\n /** Relative path with `/` separators, e.g. `reports/2026/q3.pdf`. */\n path: string;\n data: FileBody | ReadableStream<Uint8Array>;\n /** Defaults to the type a `File` carries, else the one its extension implies. */\n contentType?: string;\n /**\n * The path recorded on the file (`docs/guides/a.md`): where it sat on the\n * uploader's machine. Defaults to `path` when that names directories.\n */\n relativePath?: string;\n}\n\n/**\n * The path a file given as `path` records: the path itself when it is relative\n * and names directories (`deals/acme/memo.pdf`), with `/` separators; otherwise\n * `undefined` (a bare name, an absolute path, or one that climbs with `..` say\n * nothing a reader could follow back). Matches Python's `upload_relative_path`.\n */\nexport function uploadRelativePath(path: string): string | undefined {\n const normalized = path.replace(/\\\\/g, \"/\");\n if (normalized.startsWith(\"/\") || /^[A-Za-z]:/.test(normalized)) return undefined;\n const segments = normalized.split(\"/\").filter((segment) => segment !== \"\" && segment !== \".\");\n if (segments.length < 2 || segments.includes(\"..\")) return undefined;\n return segments.join(\"/\");\n}\n\nexport interface UploadFolderOptions {\n projectId: string;\n /** Upload into this folder (the tree's root becomes its contents). */\n folderId?: string;\n /** Recreate sub-directories as folders (default true). */\n mirrorFolders?: boolean;\n /** Include dotfiles and dot-directories (default false). */\n includeHidden?: boolean;\n /** Compile the files into Knowledge (default true). */\n ingest?: boolean;\n /**\n * {@link Uploads.uploadFolder} only: start the folders with one named after the\n * directory (`docs/`), matching each file's recorded path (default true);\n * false puts the directory's contents straight into `folderId`.\n */\n rootFolder?: boolean;\n signal?: AbortSignal;\n}\n\n/** Internal: a folder name to place the whole tree under (set by `uploadFolder`). */\nexport interface UploadEntriesInternal {\n rootName?: string;\n}\n\nexport interface UploadedFolderFile extends JsonObject {\n path: string;\n /** The file's indexing job: `beakr.jobs.wait(file)` waits for it. */\n job_id?: string;\n}\n\ninterface Uploader {\n upload(file: FileBody, options: UploadFileOptions): Promise<JsonObject>;\n}\n\nfunction segmentsOf(path: string): string[] {\n const normalized = path.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n if (normalized.startsWith(\"/\") || /^[A-Za-z]:/.test(normalized)) {\n throw new TypeError(`Folder entry paths are relative to the tree's root: ${JSON.stringify(path)}`);\n }\n const segments = normalized.split(\"/\");\n if (segments.some((segment) => segment === \"\" || segment === \".\" || segment === \"..\")) {\n throw new TypeError(`Invalid folder entry path ${JSON.stringify(path)}`);\n }\n return segments;\n}\n\nfunction compareSegments(a: string[], b: string[]): number {\n for (let i = 0; i < Math.min(a.length, b.length); i += 1) {\n if (a[i] !== b[i]) return a[i]! < b[i]! ? -1 : 1;\n }\n return a.length - b.length;\n}\n\nasync function asFileBody(data: FolderEntry[\"data\"]): Promise<FileBody> {\n if (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream) {\n return new Response(data).blob();\n }\n return data as FileBody;\n}\n\n/** Upload every entry; see the module notes for ordering, skipping and folders. */\nexport async function uploadEntries(\n uploader: Uploader,\n transport: Transport,\n entries: Iterable<FolderEntry> | AsyncIterable<FolderEntry>,\n options: UploadFolderOptions,\n displayPath: (entry: FolderEntry) => string = (entry) => entry.path,\n internal: UploadEntriesInternal = {},\n): Promise<UploadedFolderFile[]> {\n const collected: { entry: FolderEntry; segments: string[] }[] = [];\n for await (const entry of entries as AsyncIterable<FolderEntry>) {\n const segments = segmentsOf(entry.path);\n if (!options.includeHidden && segments.some((segment) => segment.startsWith(\".\"))) continue;\n collected.push({ entry, segments });\n }\n collected.sort((a, b) => compareSegments(a.segments, b.segments));\n\n const mirror = options.mirrorFolders ?? true;\n const leading = internal.rootName ? [internal.rootName] : [];\n const folderIds = new Map<string, string | undefined>([[\"\", options.folderId]]);\n const children = new Map<string, Map<string, string>>();\n\n // The folders directly under `parentId` (the project's top level when undefined).\n const childFolders = async (parentId: string | undefined, refresh = false): Promise<Map<string, string>> => {\n const key = parentId ?? \"\";\n if (refresh) children.delete(key);\n let known = children.get(key);\n if (!known) {\n known = new Map();\n const listed = transport.paginate<{ id: string; name: string }>({\n method: \"GET\",\n path: \"/v1/folders\",\n query: parentId\n ? { project_id: options.projectId, parent_folder_id: parentId }\n : { project_id: options.projectId, root_only: true },\n });\n for await (const folder of listed) known.set(String(folder.name), String(folder.id));\n children.set(key, known);\n }\n return known;\n };\n\n const ensureFolder = async (dirs: string[]): Promise<string | undefined> => {\n const key = dirs.join(\"/\");\n if (folderIds.has(key)) return folderIds.get(key);\n const parentId = await ensureFolder(dirs.slice(0, -1));\n const name = dirs[dirs.length - 1]!;\n let existing = await childFolders(parentId);\n let id = existing.get(name);\n if (id === undefined) {\n try {\n const created = await transport.request<{ id: string }>({\n method: \"POST\",\n path: \"/v1/folders\",\n body: cleanBody({ name, project_id: options.projectId, parent_folder_id: parentId }),\n idempotent: true,\n });\n id = String(created.id);\n } catch (error) {\n // Created by someone else since the listing: use theirs.\n if (!(error instanceof ValidationError)) throw error;\n existing = await childFolders(parentId, true);\n id = existing.get(name);\n if (id === undefined) throw error;\n }\n existing.set(name, id);\n }\n folderIds.set(key, id);\n return id;\n };\n\n const results: UploadedFolderFile[] = [];\n for (const { entry, segments } of collected) {\n const name = segments[segments.length - 1]!;\n const target = mirror ? await ensureFolder([...leading, ...segments.slice(0, -1)]) : options.folderId;\n const body = await asFileBody(entry.data);\n const fileType = body instanceof Blob && body.type ? body.type : undefined;\n const contentType = entry.contentType ?? fileType ?? guessMimeType(name);\n const recorded = entry.relativePath ?? uploadRelativePath(segments.join(\"/\"));\n const uploaded = await uploader.upload(body, {\n projectId: options.projectId,\n path: name,\n relativePath: recorded && recorded !== name ? recorded : undefined,\n folderId: target,\n contentType,\n artifactType: detectArtifactType(contentType, name),\n ingest: options.ingest ?? true,\n signal: options.signal,\n });\n results.push({ path: displayPath(entry), ...uploaded });\n }\n return results;\n}\n\n/**\n * The files under a directory, as entries (Node only). Hidden files and\n * folders are skipped here unless `includeHidden`, so they are never read.\n * Symbolic links are not followed, so a link cannot pull files from outside\n * the tree into the upload. On Node 19.8+ each file is opened lazily as a Blob\n * (`fs.openAsBlob`), so a large tree is not read into memory up front.\n */\nexport async function readDirectoryEntries(\n root: string,\n options: { includeHidden?: boolean } = {},\n): Promise<FolderEntry[]> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const fsSync = await nodeBuiltin<typeof import(\"node:fs\")>(\"node:fs\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const stats = await fs.stat(root);\n if (!stats.isDirectory()) throw new TypeError(`Not a directory: ${root}`);\n const openAsBlob = (fsSync as { openAsBlob?: (path: string) => Promise<Blob> }).openAsBlob;\n const entries: FolderEntry[] = [];\n const walk = async (dir: string, relative: string[]): Promise<void> => {\n for (const child of await fs.readdir(dir, { withFileTypes: true })) {\n if (!options.includeHidden && child.name.startsWith(\".\")) continue;\n const parts = [...relative, child.name];\n const full = nodePath.join(dir, child.name);\n if (child.isDirectory()) {\n await walk(full, parts);\n } else if (child.isFile()) {\n const data = openAsBlob ? await openAsBlob(full) : new Uint8Array(await fs.readFile(full));\n entries.push({ path: parts.join(\"/\"), data });\n }\n }\n };\n await walk(root, []);\n return entries;\n}\n","/**\n * Many files in one batch (`/v1/bulk`): the TypeScript counterpart of Python's\n * `files.upload_many()` (`beakr_sdk/resources/_upload.py`).\n *\n * `prepare` creates the folders the files' paths name and returns a presigned\n * URL per file; each file's bytes are PUT there with no Beakr credential; and\n * `complete` records the files and starts indexing them as one job\n * (`job_id`, `status_url`). Paths keep their folders: `reports/q3.pdf` lands in\n * a `reports` folder (under `folderId` when given).\n */\n\nimport { cleanBody, type Transport } from \"../core.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { detectArtifactType, guessMimeType } from \"./file-types.js\";\nimport type { FolderEntry } from \"./folder-upload.js\";\nimport { sha256Hex } from \"../sha256.js\";\n\n/** Files one batch may carry (the API's `ingress.bulk_upload.max_files`). */\nexport const MAX_BATCH_FILES = 1000;\n\nexport interface UploadManyOptions {\n projectId: string;\n /** Put the files (and the folders their paths name) inside this folder. */\n folderId?: string;\n /** Include dotfiles and dot-directories of a directory (default false). */\n includeHidden?: boolean;\n /** Compile the files into Knowledge (default true). */\n ingest?: boolean;\n signal?: AbortSignal;\n}\n\n/** The batch's completion: one indexing job for every file in it. */\nexport interface BatchUpload extends JsonObject {\n batch_id: string;\n artifacts: JsonObject[];\n folders: JsonObject[];\n failed?: JsonObject[];\n /** `GET /v1/jobs/{job_id}`: pass the batch to `jobs.wait` to wait for indexing. */\n job_id: string;\n status_url: string;\n}\n\ninterface Prepared {\n batch_id: string;\n uploads: { path: string; key: string; url: string; headers?: Record<string, string> }[];\n}\n\nasync function asBlob(data: FolderEntry[\"data\"]): Promise<Blob> {\n if (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream) {\n return new Response(data).blob();\n }\n if (data instanceof Blob) return data;\n return new Blob([data as BlobPart]);\n}\n\n/** Upload ``entries`` as one batch and resolve to its completion. */\nexport async function uploadBatch(\n transport: Transport,\n entries: FolderEntry[],\n options: UploadManyOptions,\n): Promise<BatchUpload> {\n if (entries.length === 0) throw new TypeError(\"No files to upload\");\n if (entries.length > MAX_BATCH_FILES) {\n throw new RangeError(\n `${entries.length} files: one batch takes at most ${MAX_BATCH_FILES}; split them`,\n );\n }\n const seen = new Set<string>();\n const files = await Promise.all(\n entries.map(async (entry) => {\n if (seen.has(entry.path)) {\n throw new TypeError(`Two files would both be uploaded as ${entry.path}`);\n }\n seen.add(entry.path);\n const blob = await asBlob(entry.data);\n const name = entry.path.split(\"/\").pop() ?? entry.path;\n const contentType = entry.contentType ?? (blob.type || guessMimeType(name));\n return { entry, blob, name, contentType };\n }),\n );\n const prepared = await transport.request<Prepared>({\n method: \"POST\",\n path: \"/v1/bulk/prepare\",\n body: cleanBody({\n target_project_id: options.projectId,\n parent_folder_id: options.folderId,\n files: files.map((f) => ({\n path: f.entry.path,\n content_type: f.contentType,\n content_length: f.blob.size,\n })),\n }),\n idempotent: true,\n });\n const targets = new Map(prepared.uploads.map((upload) => [upload.path, upload]));\n const completed = [];\n for (const f of files) {\n const target = targets.get(f.entry.path);\n if (!target) throw new Error(`The batch has no upload URL for ${f.entry.path}`);\n await transport.putExternal(target.url, f.blob, {\n headers:\n target.headers && Object.keys(target.headers).length\n ? target.headers\n : { \"Content-Type\": f.contentType },\n signal: options.signal,\n });\n completed.push({\n path: f.entry.path,\n key: target.key,\n title: f.name.slice(0, 200),\n artifact_type: detectArtifactType(f.contentType, f.name),\n content_hash: await sha256Hex(f.blob),\n // Where the file sat on the uploader's machine, when that is not `path`.\n ...(f.entry.relativePath && f.entry.relativePath !== f.entry.path\n ? { relative_path: f.entry.relativePath }\n : {}),\n });\n }\n return transport.request<BatchUpload>({\n method: \"POST\",\n path: \"/v1/bulk/complete\",\n body: { batch_id: prepared.batch_id, files: completed, ingest_to_wiki: options.ingest ?? true },\n idempotent: true,\n });\n}\n","import { BeakrError, ConflictError, RateLimitError, ServerError, APIConnectionError } from \"../errors.js\";\nimport { cleanBody } from \"../core.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\nimport {\n readDirectoryEntries,\n uploadEntries,\n uploadRelativePath,\n type FolderEntry,\n type UploadFolderOptions,\n type UploadedFolderFile,\n} from \"./folder-upload.js\";\nimport { sha256Hex } from \"../sha256.js\";\nimport { guessMimeType } from \"./file-types.js\";\nimport { uploadBatch, type BatchUpload, type UploadManyOptions } from \"./batch-upload.js\";\nimport { Jobs, type Job, type JobWaitOptions } from \"./jobs.js\";\nimport {\n alreadyUploadedOutcome,\n waitForFilesKnowledge,\n waitForKnowledge,\n type AlreadyUploaded,\n type KnowledgeWaitOptions,\n} from \"./knowledge-readiness.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\n\n/**\n * Formerly the size above which uploads went multipart. Every upload is\n * resumable now (a small file is one part); kept so existing imports work.\n */\nexport const MULTIPART_THRESHOLD = 64 * 1024 * 1024;\n/** Part URLs requested per `/parts` call; a small window keeps each URL fresh. */\nexport const PRESIGN_WINDOW = 8;\n\nexport type FileBody = Uint8Array | ArrayBuffer | Blob;\n\n/** What {@link Uploads.uploadMany} resolves to; `job`, `status` and the rest come with a wait. */\nexport type UploadManyResult = BatchUpload & {\n job?: Job;\n batch?: JsonObject;\n /** The upload's outcome: the job's status, or `succeeded` when its only failures are duplicates. */\n status?: string;\n /** Files already in Beakr: rejected as duplicates, with the copy that was kept. */\n duplicates?: AlreadyUploaded[];\n};\n\n/** An upload batch's per-file status: `batch_id`, `status`, `artifacts`, `summary`, `knowledge`. */\nexport type BatchStatus = ResponseOf<\"/v1/bulk/{batch_id}/status\", \"get\">;\n\nexport interface UploadedPart {\n part_number: number;\n size: number;\n etag: string;\n}\n\n/** A resumable upload, from `/v1/uploads`. */\nexport interface UploadSession extends JsonObject {\n id: string;\n status: string;\n project_id: string;\n path: string;\n content_length: number;\n part_size: number;\n part_count: number;\n ingest_to_wiki: boolean;\n uploaded_parts: UploadedPart[] | null;\n}\n\nexport interface UploadComplete extends JsonObject {\n upload: UploadSession;\n artifact: JsonObject & {\n id: string;\n version_id: string;\n job_id: string | null;\n };\n job_id: string;\n /** `/v1/jobs/{job_id}`: the indexing job for this file. */\n status_url: string;\n /** The upload batch's status view (`/v1/bulk/{upload_id}/status`). */\n batch_status_url?: string;\n}\n\nexport interface UploadFileOptions {\n projectId: string;\n /** File name, optionally with folders (`reports/q3.pdf`). */\n path: string;\n folderId?: string;\n contentType?: string;\n /** Compile the file into Knowledge (default true). */\n ingest?: boolean;\n title?: string;\n artifactType?: string;\n description?: string;\n /**\n * Where the file sat on the uploader's machine, relative to the folder it was\n * uploaded from (`deals/acme/memo.pdf`). Recorded on the file: Knowledge reads\n * name it by this path (`location.display_path`) and `files.read` accepts it.\n * It never places the file. Sent on completion.\n */\n relativePath?: string;\n partSize?: number;\n signal?: AbortSignal;\n}\n\n/** A resumable upload stopped on a transient failure; `uploadId` resumes it. */\nexport class UploadInterruptedError extends BeakrError {\n constructor(\n readonly uploadId: string,\n cause: unknown,\n ) {\n super(`Upload stopped (${String(cause)}). Resume it with upload id ${uploadId}.`, {\n code: \"upload_interrupted\",\n cause,\n });\n this.name = \"UploadInterruptedError\";\n }\n}\n\nfunction resumable(error: unknown): boolean {\n if (\n error instanceof APIConnectionError ||\n error instanceof ServerError ||\n error instanceof RateLimitError\n ) {\n return true;\n }\n return error instanceof ConflictError && error.code === \"upload_incomplete\";\n}\n\nfunction asBlob(body: FileBody): Blob {\n return body instanceof Blob ? body : new Blob([body as BlobPart]);\n}\n\n/**\n * Uploads: `upload` sends one file through the resumable routes; the other\n * methods are the resumable multipart routes one call each.\n */\nexport class Uploads extends Resource {\n create(\n options: Omit<UploadFileOptions, \"title\" | \"artifactType\" | \"description\" | \"signal\"> & {\n contentLength: number;\n contentHash?: string;\n },\n ): Promise<UploadSession> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/uploads\",\n body: cleanBody({\n target_project_id: options.projectId,\n parent_folder_id: options.folderId,\n path: options.path,\n content_type: options.contentType,\n content_length: options.contentLength,\n content_hash: options.contentHash,\n part_size: options.partSize,\n ingest_to_wiki: options.ingest ?? true,\n }),\n idempotent: true,\n });\n }\n\n get(uploadId: string): Promise<UploadSession> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/uploads/${enc(uploadId)}`,\n });\n }\n\n presignParts(\n uploadId: string,\n partNumbers: number[],\n ): Promise<{\n upload_id: string;\n parts: { part_number: number; url: string }[];\n }> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/uploads/${enc(uploadId)}/parts`,\n body: { part_numbers: partNumbers },\n });\n }\n\n complete(\n uploadId: string,\n options: {\n parts?: { part_number: number; etag: string }[];\n title?: string;\n artifactType?: string;\n description?: string;\n relativePath?: string;\n } = {},\n ): Promise<UploadComplete> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/uploads/${enc(uploadId)}/complete`,\n body: cleanBody({\n parts: options.parts,\n title: options.title,\n artifact_type: options.artifactType,\n description: options.description,\n relative_path: options.relativePath,\n }),\n idempotent: true,\n });\n }\n\n abort(uploadId: string): Promise<UploadSession> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/uploads/${enc(uploadId)}`,\n });\n }\n\n /**\n * Upload one file through the resumable upload (`/v1/uploads`; a small file\n * is one part) and resolve to the completion (`artifact`, `job_id`,\n * `status_url`). An interrupted upload rejects with\n * {@link UploadInterruptedError}; pass its `uploadId` to {@link resume}.\n */\n async upload(file: FileBody, options: UploadFileOptions): Promise<UploadComplete> {\n const blob = asBlob(file);\n if (blob.size === 0) {\n throw new BeakrError(`${options.path} is empty; Beakr does not store empty files`, {\n code: \"empty_file\",\n });\n }\n const session = await this.create({\n ...options,\n // Inferred from the name the way folder and batch uploads do, so a\n // single `.md` is not stored as application/octet-stream.\n contentType: options.contentType ?? (blob.type || guessMimeType(options.path)),\n contentLength: blob.size,\n // Declared up front, as the Python SDK does, so the server can check\n // the assembled object (hashed as a stream: no whole-file buffer).\n contentHash: await sha256Hex(blob),\n });\n return this.sendParts(session.id, blob, options);\n }\n\n /**\n * Upload a directory tree (Node). Sub-directories become folders unless\n * `mirrorFolders: false`; dotfiles are skipped unless `includeHidden`.\n * Either way each file records its path from the directory's parent\n * (`docs/guides/a.md` for `guides/a.md` under `docs/`) as its `relativePath`.\n * The folders start with one named after the directory (`docs/`) unless\n * `rootFolder: false`, and existing folders of the same name are reused, so\n * uploading two trees with shared sub-folder names, or the same tree again,\n * does not fail. Resolves to `[{ path, ...completion }]` in upload order,\n * like Python's `files.upload_folder()`.\n */\n async uploadFolder(directory: string, options: UploadFolderOptions): Promise<UploadedFolderFile[]> {\n const entries = await readDirectoryEntries(directory, { includeHidden: options.includeHidden });\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const rootName = nodePath.basename(nodePath.resolve(directory));\n for (const entry of entries) entry.relativePath = `${rootName}/${entry.path}`;\n return uploadEntries(\n this,\n this.transport,\n entries,\n options,\n (entry) => nodePath.join(directory, ...entry.path.split(\"/\")),\n { rootName: options.rootFolder === false ? undefined : rootName },\n );\n }\n\n /**\n * Upload a tree given as entries, in any runtime: a browser `webkitdirectory`\n * file list (`{ path: file.webkitRelativePath, data: file }`), an edge\n * function's blobs, or streams. Same folders, order and result as\n * {@link uploadFolder}.\n */\n uploadEntries(\n entries: Iterable<FolderEntry> | AsyncIterable<FolderEntry>,\n options: UploadFolderOptions,\n ): Promise<UploadedFolderFile[]> {\n return uploadEntries(this, this.transport, entries, options);\n }\n\n /**\n * Upload many files as one batch (`/v1/bulk`): file paths and directories\n * (Node), or entries (`{ path, data }`) from any runtime. A file lands under\n * its own name; a directory's sub-directories become folders (under\n * `folderId` when given). Up to {@link MAX_BATCH_FILES} files. Resolves to\n * the batch's completion; indexing runs as one job, so\n * `await beakr.jobs.wait(batch)` waits for it, or pass `wait` here.\n *\n * `wait: \"knowledge\"` then also waits until none of the batch's files is\n * queued or running for Knowledge (`knowledgeWait` sets how) and adds the\n * final {@link batchStatus} as `batch`: each file's `knowledge_status` and\n * the batch's `knowledge` counts, including `failed`.\n *\n * With a wait, `status` is the upload's outcome. A file whose bytes are\n * already in the same place is not stored twice: it is listed in\n * `duplicates` (`path`, `artifact_id`, and `duplicate_of`, the file that was\n * kept), and when every failed file is such a duplicate `status` is\n * `\"succeeded\"` (the job succeeds too on an engine that counts them in\n * `summary.duplicates`; an earlier one reports it `failed`). With\n * `wait: \"knowledge\"` each kept file's Knowledge is waited for too\n * (`kept_knowledge_status`).\n */\n async uploadMany(\n files: string | string[] | Iterable<FolderEntry> | AsyncIterable<FolderEntry>,\n options: UploadManyOptions & {\n wait?: boolean | JobWaitOptions | \"index\" | \"knowledge\";\n knowledgeWait?: KnowledgeWaitOptions;\n },\n ): Promise<UploadManyResult> {\n if (options.wait === \"knowledge\" && options.ingest === false) {\n throw new TypeError('wait: \"knowledge\" needs ingest; these files stay out of Knowledge');\n }\n const entries: FolderEntry[] = [];\n const paths =\n typeof files === \"string\"\n ? [files]\n : Array.isArray(files) && files.every((item) => typeof item === \"string\")\n ? (files as string[])\n : undefined;\n if (paths) {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n for (const item of paths) {\n if ((await fs.stat(item)).isDirectory()) {\n const rootName = nodePath.basename(nodePath.resolve(item));\n for (const entry of await readDirectoryEntries(item, { includeHidden: options.includeHidden })) {\n entries.push({ ...entry, relativePath: `${rootName}/${entry.path}` });\n }\n } else {\n entries.push({\n path: nodePath.basename(item),\n data: new Uint8Array(await fs.readFile(item)),\n relativePath: nodePath.isAbsolute(item) ? undefined : uploadRelativePath(item),\n });\n }\n }\n } else {\n for await (const entry of files as AsyncIterable<FolderEntry>) entries.push(entry);\n }\n entries.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));\n const batch = await uploadBatch(this.transport, entries, options);\n if (!options.wait) return batch;\n const job = await new Jobs(this.transport).wait(\n batch,\n typeof options.wait === \"object\" ? options.wait : {},\n );\n let result: UploadManyResult = { ...batch, job, status: String(job.status) };\n const summary = (job.result?.[\"summary\"] as JsonObject | undefined) ?? {};\n if (job.status === \"failed\" || Number(summary[\"duplicates\"] ?? 0) > 0) {\n result = { ...result, ...alreadyUploadedOutcome(await this.batchStatus(batch.batch_id)) };\n }\n if (options.wait !== \"knowledge\") return result;\n const status = await waitForKnowledge(\n this.transport,\n `batch ${batch.batch_id}`,\n () => this.batchStatus(batch.batch_id),\n options.knowledgeWait,\n );\n result = { ...result, batch: status };\n const kept = [...new Set((result.duplicates ?? []).map((d) => d.duplicate_of.artifact_id))];\n if (kept.length) {\n const knowledge = await waitForFilesKnowledge(this.transport, kept, options.knowledgeWait);\n result.duplicates = (result.duplicates ?? []).map((d) => ({\n ...d,\n kept_knowledge_status: knowledge[d.duplicate_of.artifact_id] ?? null,\n }));\n }\n return result;\n }\n\n /**\n * Per-file status of an {@link uploadMany} batch, with counts: each file's\n * indexing `status` and `knowledge_status`, the indexing `summary`, and the\n * batch's `knowledge` counts (`queued`, `running`, `created`, `failed`,\n * `ready`...).\n */\n batchStatus(batchId: string): Promise<BatchStatus> {\n return this.transport.request({ method: \"GET\", path: `/v1/bulk/${enc(batchId)}/status` });\n }\n\n /** Finish an interrupted multipart upload, sending only the parts storage lacks. */\n resume(\n uploadId: string,\n file: FileBody,\n options: Pick<\n UploadFileOptions,\n \"title\" | \"artifactType\" | \"description\" | \"relativePath\" | \"signal\"\n > = {},\n ): Promise<UploadComplete> {\n return this.sendParts(uploadId, asBlob(file), options);\n }\n\n private async sendParts(\n uploadId: string,\n blob: Blob,\n options: Pick<\n UploadFileOptions,\n \"title\" | \"artifactType\" | \"description\" | \"relativePath\" | \"signal\"\n > & {\n path?: string;\n },\n ): Promise<UploadComplete> {\n try {\n const state = await this.get(uploadId);\n if (state.content_length !== blob.size) {\n throw new BeakrError(\n `Upload ${uploadId} is for a ${state.content_length}-byte file; this one is ${blob.size} bytes`,\n { code: \"size_mismatch\" },\n );\n }\n const etags = new Map<number, string>();\n for (const part of state.uploaded_parts ?? []) etags.set(part.part_number, part.etag);\n const missing: number[] = [];\n for (let n = 1; n <= state.part_count; n += 1) if (!etags.has(n)) missing.push(n);\n for (let start = 0; start < missing.length; start += PRESIGN_WINDOW) {\n const signed = await this.presignParts(uploadId, missing.slice(start, start + PRESIGN_WINDOW));\n for (const part of signed.parts) {\n const from = (part.part_number - 1) * state.part_size;\n const response = await this.transport.putExternal(\n part.url,\n blob.slice(from, from + state.part_size),\n { signal: options.signal },\n );\n etags.set(part.part_number, response.headers.get(\"etag\") ?? \"\");\n }\n }\n return await this.complete(uploadId, {\n parts: [...etags.entries()]\n .sort(([a], [b]) => a - b)\n .map(([part_number, etag]) => ({ part_number, etag })),\n title: options.title ?? options.path?.split(\"/\").pop(),\n artifactType: options.artifactType,\n description: options.description,\n relativePath: options.relativePath,\n });\n } catch (error) {\n if (resumable(error)) throw new UploadInterruptedError(uploadId, error);\n throw error;\n }\n }\n}\n","import { BeakrApi } from \"./generated/operations.js\";\nimport type { JsonObject } from \"./types.js\";\nimport {\n INSPECT_CUSTOM,\n Transport,\n type ClientOptions,\n type QueryValue,\n type RequestOptions,\n type TokenPair,\n type TransportDescription,\n} from \"./core.js\";\nimport { Conversations } from \"./resources/conversations.js\";\nimport { EndUserTokens } from \"./resources/end-user-tokens.js\";\nimport { Engine } from \"./resources/engine.js\";\nimport { ExternalUsers } from \"./resources/external-users.js\";\nimport { Files } from \"./resources/files.js\";\nimport { Integrations } from \"./resources/integrations.js\";\nimport { Interviews } from \"./resources/interviews.js\";\nimport {\n Jobs,\n type Job,\n type JobReference,\n type JobWaitOptions,\n} from \"./resources/jobs.js\";\nimport { Knowledge } from \"./resources/knowledge.js\";\nimport { Labels } from \"./resources/labels.js\";\nimport { Me } from \"./resources/me.js\";\nimport { Members } from \"./resources/members.js\";\nimport { Meta } from \"./resources/meta.js\";\nimport { OrgAdmin } from \"./resources/org-admin.js\";\nimport { Projects } from \"./resources/projects.js\";\nimport { Runs } from \"./resources/runs.js\";\nimport { Skills } from \"./resources/skills.js\";\nimport { Uploads } from \"./resources/uploads.js\";\n\n/**\n * The Beakr API client.\n *\n * const beakr = new Beakr({ apiKey: process.env.BEAKR_API_KEY });\n * const me = await beakr.me.get();\n */\nexport class Beakr {\n readonly me: Me;\n /** The API describing itself: its OpenAPI document and what this server serves. */\n readonly meta: Meta;\n readonly projects: Projects;\n readonly members: Members;\n /** Organization administration: service accounts. */\n readonly org: OrgAdmin;\n /** The users of your own product, mirrored into your organization. */\n readonly externalUsers: ExternalUsers;\n /** Short-lived tokens you mint for the users of your own product. */\n readonly endUserTokens: EndUserTokens;\n /** Named groups of people mapped to projects. */\n readonly labels: Labels;\n readonly knowledge: Knowledge;\n readonly conversations: Conversations;\n readonly engine: Engine;\n readonly jobs: Jobs;\n readonly runs: Runs;\n /** Send an interview link and read what came back. */\n readonly interviews: Interviews;\n /** Skills: SKILL.md folders the agent loads, and your library of them. */\n readonly skills: Skills;\n /** Connected integrations, and the read-only tools to query them. */\n readonly integrations: Integrations;\n /** Upload files: one presigned PUT, or resumable parts above 64 MB. */\n readonly uploads: Uploads;\n /** Download a file's original bytes (`download`, `downloadUrl`, Node `downloadTo`). */\n readonly files: Files;\n /** Every documented operation, one typed method each, grouped by area. */\n readonly api: BeakrApi;\n protected readonly transport: Transport;\n\n constructor(options: ClientOptions = {}) {\n this.transport = new Transport(options);\n this.me = new Me(this.transport);\n this.meta = new Meta(this.transport);\n this.projects = new Projects(this.transport);\n this.members = new Members(this.transport);\n this.org = new OrgAdmin(this.transport);\n this.externalUsers = new ExternalUsers(this.transport);\n this.endUserTokens = new EndUserTokens(this.transport);\n this.labels = new Labels(this.transport);\n this.knowledge = new Knowledge(this.transport);\n this.conversations = new Conversations(this.transport);\n this.engine = new Engine(this.transport);\n this.jobs = new Jobs(this.transport);\n this.runs = new Runs(this.transport);\n this.interviews = new Interviews(this.transport);\n this.skills = new Skills(this.transport);\n this.integrations = new Integrations(this.transport);\n this.uploads = new Uploads(this.transport);\n this.files = new Files(this.transport);\n this.api = new BeakrApi(this.transport);\n }\n\n get baseUrl(): string {\n return this.transport.baseUrl;\n }\n\n /** The current token pair after any automatic refresh. */\n get tokens(): TokenPair | undefined {\n return this.transport.currentTokens;\n }\n\n /**\n * Every item of any public list, following `next_cursor`. Every list route\n * answers `{data, next_cursor, has_more}`, so one iterator walks any of them:\n * `for await (const project of beakr.paginate(\"/v1/projects\")) { ... }`.\n */\n paginate<T = JsonObject>(\n path: string,\n query: Record<string, QueryValue> = {},\n options: { pageSize?: number } = {},\n ): AsyncGenerator<T> {\n return this.transport.paginate<T>(\n { method: \"GET\", path, query },\n options.pageSize,\n );\n }\n\n /** Wait for any long operation (a run, import, sync, ...): `await beakr.wait(run)`. */\n wait(job: JobReference, options?: JobWaitOptions): Promise<Job> {\n return this.jobs.wait(job, options);\n }\n\n /** Call any route, including ones without a resource method yet. */\n request<T = unknown>(options: RequestOptions): Promise<T> {\n return this.transport.request<T>(options);\n }\n\n /** `JSON.stringify(beakr)`: where it talks to and its credential, masked. */\n toJSON(): TransportDescription {\n return this.transport.describe();\n }\n\n toString(): string {\n return `Beakr ${JSON.stringify(this.transport.describe())}`;\n }\n\n /** `console.log(beakr)` / `util.inspect(beakr)`: the same, never the key. */\n [INSPECT_CUSTOM](): string {\n return this.toString();\n }\n}\n"],"mappings":"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","names":["DEFAULT_BASE_URL","pattern","record","record","record","record","a","b","env","error","pattern","DEFAULT_BASE_URL","env","record","value","at","segment","asBlob"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/http-date.ts","../src/errors.ts","../src/sources.ts","../src/answers.ts","../src/node-builtins.ts","../src/service-account.ts","../src/cli-login.ts","../src/sha256.ts","../src/cli-token.ts","../src/redact.ts","../src/replay.ts","../src/version.ts","../src/core.ts","../src/paths.ts","../src/resources/base.ts","../src/resources/runs.ts","../src/generated/operations.ts","../src/resources/conversations.ts","../src/resources/external-users.ts","../src/resources/end-user-tokens.ts","../src/resources/engine.ts","../src/resources/files.ts","../src/resources/integrations.ts","../src/resources/interviews.ts","../src/resources/jobs.ts","../src/resources/knowledge.ts","../src/resources/labels.ts","../src/resources/me.ts","../src/resources/members.ts","../src/capabilities.ts","../src/resources/meta.ts","../src/resources/org-admin.ts","../src/resources/knowledge-readiness.ts","../src/resources/model-refusals.ts","../src/resources/projects.ts","../src/resources/skills.ts","../src/resources/file-types.ts","../src/resources/folder-upload.ts","../src/resources/batch-upload.ts","../src/resources/uploads.ts","../src/client.ts"],"sourcesContent":["export { Beakr } from \"./client.js\";\nexport {\n DEFAULT_BASE_URL,\n type ClientOptions,\n type FetchLike,\n type RequestOptions,\n type TokenPair,\n} from \"./core.js\";\nexport * from \"./errors.js\";\nexport { CAPABILITIES_TTL_MS, Capabilities, forgetCapabilities } from \"./capabilities.js\";\nexport {\n QUICK_RESEARCH_TIMEOUT_MS,\n RESEARCH_TIMEOUT_MS,\n resultText,\n type KnowledgeResult,\n type KnowledgeWriteResult,\n type ProposalFiledBy,\n type StagedProposal,\n type WikiProposal,\n type WikiProposalPage,\n type ListedWikiProposal,\n type ResearchOptions,\n type ResearchResult,\n type DocumentsResult,\n type DocumentsSearchOptions,\n type RowsOptions,\n} from \"./resources/knowledge.js\";\nexport type {\n ConversationClient,\n SourceRead,\n ConversationHit,\n ConversationImported,\n ConversationPage,\n ConversationSummary,\n ImportOptions,\n ImportedMessage,\n SearchConversationsOptions,\n} from \"./resources/conversations.js\";\nexport type { MintKeyOptions } from \"./resources/org-admin.js\";\nexport type {\n AnswerOptions,\n RunEvent,\n RunStatus,\n StartRunOptions,\n StartedRun,\n ThreadSummary,\n} from \"./resources/runs.js\";\nexport type { AgentContext, ContextOptions } from \"./resources/engine.js\";\nexport {\n AnswerBuilder,\n RunFailedError,\n RunNeedsInputError,\n TextStream,\n numberCitations,\n type Answer,\n type RunQuestion,\n} from \"./answers.js\";\nexport {\n downloadHint,\n publicSource,\n UPLOAD_PROVIDER,\n sourceWhere,\n type SourceEvidence,\n type SourceExcerpt,\n type SourceLocation,\n type SourceRecord,\n type SourceSection,\n type SourceStatus,\n} from \"./sources.js\";\nexport type {\n EndUserToken,\n EndUserTokenPage,\n MintEndUserTokenOptions,\n} from \"./resources/end-user-tokens.js\";\nexport type { ExternalUser, ExternalUserPage } from \"./resources/external-users.js\";\nexport type {\n IntegrationTool,\n IntegrationToolPage,\n IntegrationToolResult,\n ToolsQuery,\n} from \"./resources/integrations.js\";\nexport type {\n CreateLinkOptions,\n InterviewLink,\n InterviewResult,\n SendableInterviewPage,\n SendableLink,\n} from \"./resources/interviews.js\";\nexport type { Label, LabelPage } from \"./resources/labels.js\";\nexport {\n SKILL_MD,\n SkillProposals,\n Skills,\n bundleSha256,\n readSkillFolder,\n type CreateSkillOptions,\n type CreatedSkill,\n type ListSkillsQuery,\n type Skill,\n type SkillBundle,\n type SkillDetail,\n type SkillFiles,\n type SkillOrigin,\n type SkillOwner,\n type SkillPage,\n type SkillProposal,\n type SkillVisibility,\n type UploadBundleOptions,\n} from \"./resources/skills.js\";\nexport {\n KnowledgeFailedError,\n KnowledgeTimeoutError,\n alreadyUploadedOutcome,\n waitForFilesKnowledge,\n waitForKnowledge,\n type AlreadyUploaded,\n type KnowledgeWaitOptions,\n} from \"./resources/knowledge-readiness.js\";\nexport type {\n KnowledgeFailedFile,\n KnowledgeRetryResult,\n ProjectKnowledgeStatus,\n ProjectKnowledgeProfile,\n ProjectKnowledgeProfileInput,\n ProjectKnowledgeProfilePatch,\n} from \"./resources/projects.js\";\nexport {\n ModelRefusals,\n type ModelRefusalEvents,\n type ModelRefusalFiles,\n type ModelRefusalSummary,\n type ModelRefusalWindow,\n} from \"./resources/model-refusals.js\";\nexport {\n JobFailedError,\n JobTimeoutError,\n TERMINAL_JOB_STATUSES,\n jobIdOf,\n type Job,\n type JobReference,\n type JobWaitOptions,\n} from \"./resources/jobs.js\";\nexport {\n MULTIPART_THRESHOLD,\n UploadInterruptedError,\n type BatchStatus,\n type FileBody,\n type UploadComplete,\n type UploadManyResult,\n type UploadFileOptions,\n type UploadSession,\n type UploadedPart,\n} from \"./resources/uploads.js\";\nexport {\n type FolderEntry,\n type UploadFolderOptions,\n type UploadedFolderFile,\n} from \"./resources/folder-upload.js\";\nexport {\n MAX_BATCH_FILES,\n type BatchUpload,\n type UploadManyOptions,\n} from \"./resources/batch-upload.js\";\nexport { detectArtifactType, guessMimeType } from \"./resources/file-types.js\";\nexport type {\n DownloadLink,\n DownloadLocation,\n DownloadedFile,\n DownloadedReference,\n FileRead,\n ReadFileOptions,\n} from \"./resources/files.js\";\nexport type {\n BodyOf,\n JsonObject,\n Page,\n ResponseOf,\n components,\n operations,\n paths,\n} from \"./types.js\";\nexport { VERSION } from \"./version.js\";\nexport {\n parseServiceAccountCredentials,\n readServiceAccountFile,\n SERVICE_ACCOUNT_FILE_ENV,\n SERVICE_ACCOUNT_FILE_TYPE,\n type ServiceAccountCredentials,\n} from \"./service-account.js\";\nexport { OPERATIONS, BeakrApi, type OperationName } from \"./generated/operations.js\";\nexport type { CallOptions, OperationResponse } from \"./operation-types.js\";\nexport type {\n QueryAggregate,\n QueryAggregateFn,\n QueryAsOfCondition,\n QueryCondition,\n QueryConnectedToCondition,\n QueryEntityCondition,\n QueryEntityTypeCondition,\n QueryFieldCondition,\n QueryFieldMatch,\n QueryFromTable,\n QueryJoin,\n QueryLinkOp,\n QueryOrderBy,\n QuerySemantic,\n QuerySpec,\n QueryTable,\n QueryTextOp,\n QueryToCondition,\n QueryValueCondition,\n QueryValueOp,\n QueryWhenCondition,\n} from \"./resources/query-spec.js\";\n","/**\n * Parse an HTTP-date (RFC 9110 section 5.6.7).\n *\n * A `Retry-After` header may carry an HTTP-date instead of a number of seconds\n * (RFC 9110 section 10.2.3). Senders must use IMF-fixdate, but recipients must\n * also accept the two obsolete forms, RFC 850 and ANSI C `asctime()`:\n *\n * Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate\n * Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format\n * Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format\n *\n * The grammar is matched here rather than with `Date.parse`, whose handling of\n * anything but IMF-fixdate is implementation-defined (and which would accept a\n * non-GMT zone or an ISO 8601 string). The Python SDK\n * (beakr-python's `src/beakr_sdk/_http_date.py`) implements the same grammar so\n * both SDKs agree on every header.\n */\n\nconst MONTHS = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\nconst DAY = \"(?:mon|tue|wed|thu|fri|sat|sun)\";\nconst DAY_LONG = \"(?:monday|tuesday|wednesday|thursday|friday|saturday|sunday)\";\nconst MONTH = `(?<month>${MONTHS.join(\"|\")})`;\nconst TIME = \"(?<hour>\\\\d{2}):(?<minute>\\\\d{2}):(?<second>\\\\d{2})\";\n\nconst IMF_FIXDATE = new RegExp(`^${DAY}, (?<day>\\\\d{2}) ${MONTH} (?<year>\\\\d{4}) ${TIME} GMT$`, \"i\");\nconst RFC850 = new RegExp(`^${DAY_LONG}, (?<day>\\\\d{2})-${MONTH}-(?<year>\\\\d{2}) ${TIME} GMT$`, \"i\");\nconst ASCTIME = new RegExp(`^${DAY} ${MONTH} (?<day>\\\\d{2}| \\\\d) ${TIME} (?<year>\\\\d{4})$`, \"i\");\n\n/**\n * The epoch milliseconds an HTTP-date names, or `undefined` when it is not one.\n *\n * `nowMs` resolves the RFC 850 two-digit year: a year that would land more than\n * 50 years after now is the most recent past year with those digits.\n */\nexport function parseHttpDate(value: string, nowMs: number): number | undefined {\n const text = value.trim();\n for (const pattern of [IMF_FIXDATE, RFC850, ASCTIME]) {\n const groups = pattern.exec(text)?.groups;\n if (!groups) continue;\n let year = Number(groups[\"year\"]);\n if (pattern === RFC850) year = expandTwoDigitYear(year, new Date(nowMs).getUTCFullYear());\n const month = MONTHS.indexOf(groups[\"month\"]!.toLowerCase());\n const day = Number(groups[\"day\"]);\n const hour = Number(groups[\"hour\"]);\n const minute = Number(groups[\"minute\"]);\n // RFC 9110 allows second 60 for a leap second; Date does not.\n const parsedSecond = Number(groups[\"second\"]);\n const second = parsedSecond === 60 ? 59 : parsedSecond;\n const ms = Date.UTC(year, month, day, hour, minute, second);\n // Date.UTC rolls out-of-range fields over (Feb 30 -> Mar 2); those are not dates.\n const check = new Date(ms);\n if (\n check.getUTCFullYear() !== year ||\n check.getUTCMonth() !== month ||\n check.getUTCDate() !== day ||\n check.getUTCHours() !== hour ||\n check.getUTCMinutes() !== minute ||\n check.getUTCSeconds() !== second\n ) {\n return undefined;\n }\n return ms;\n }\n return undefined;\n}\n\nfunction expandTwoDigitYear(twoDigits: number, nowYear: number): number {\n let year = nowYear - (nowYear % 100) + twoDigits;\n if (year > nowYear + 50) year -= 100;\n return year;\n}\n","/**\n * Typed errors. Every error carries the HTTP status, the machine-readable\n * `code` from the error envelope, a message and the request id the server\n * logged the call under.\n *\n * The envelope is `{detail: <legacy>, error: {code, message, fix, details,\n * request_id}}`. `details` holds structured context (`required_scope`,\n * `expected_base_index`, and for a validation error every failing field under\n * `errors`) and is exposed as `BeakrError.details`. Servers before it existed\n * put those fields beside `code` (they still do, for compatibility), so\n * `required_scope` is read from `details` first and the envelope second.\n * Routes that predate the envelope send `detail` only, so each field falls\n * back: the message to `detail`, the request id to the `X-Request-ID` header,\n * the code to one derived from the status.\n *\n * A body that is not JSON is never the message as it is: an HTML page (a web\n * app, a proxy or a server that is not Beakr, at a wrong base URL) is named by\n * its title, with a fix that says to check the API URL, and other text is cut\n * to a short excerpt. A success whose body is an HTML page where JSON was\n * expected throws `UnexpectedResponseError`.\n */\nimport { parseHttpDate } from \"./http-date.js\";\n\nexport interface BeakrErrorOptions {\n status?: number;\n code?: string;\n requestId?: string;\n body?: unknown;\n details?: Record<string, unknown>;\n cause?: unknown;\n /** The API origin the failed request was sent to. */\n baseUrl?: string;\n /** How to correct the call (`error.fix`), when the server said. */\n fix?: string;\n}\n\nexport class BeakrError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly requestId: string | undefined;\n readonly body: unknown;\n /** Structured context from `error.details` (`{}` when none was sent). */\n readonly details: Record<string, unknown>;\n /**\n * The API origin the request went to. Named in the message too, so a key\n * sent to the wrong host (a dev key against production) reads as that.\n */\n readonly baseUrl: string | undefined;\n /** How to correct the call (`error.fix`), when the server said; also in the message. */\n readonly fix: string | undefined;\n\n constructor(message: string, options: BeakrErrorOptions = {}) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = new.target.name;\n this.status = options.status;\n this.code = options.code;\n this.requestId = options.requestId;\n this.body = options.body;\n this.details = options.details ?? {};\n this.baseUrl = options.baseUrl;\n this.fix = options.fix;\n }\n}\n\n/**\n * `12 of 10 uploads per day; resets 2026-10-14T00:00:00Z` from a limit's details.\n *\n * A `quota_exceeded` refusal names the limit, its window and when it resets in\n * `error.details`; without them the message (\"Uploads limit reached\") does not\n * say how long to wait. The Python SDK's `quota_text` reads the same fields.\n */\nexport function quotaText(details: Record<string, unknown>): string | undefined {\n const limit = details[\"limit\"];\n if (limit === undefined || limit === null) return undefined;\n const resource = String(details[\"resource\"] ?? \"\").replace(/_/g, \" \");\n const current = details[\"current\"];\n let text = current !== undefined && current !== null ? `${current} of ${limit}` : `limit ${limit}`;\n if (resource) text += ` ${resource}`;\n if (details[\"window\"]) text += ` per ${details[\"window\"]}`;\n if (details[\"resets_at\"]) text += `; resets ${details[\"resets_at\"]}`;\n return text;\n}\n\n/** The request never produced an HTTP response (DNS, refused, timeout, abort). */\nexport class APIConnectionError extends BeakrError {}\n\n/** 401, or no credential was configured. */\nexport class AuthenticationError extends BeakrError {}\n\n/** 403. `requiredScope` is set when a scoped credential lacks the route's scope. */\nexport class PermissionDeniedError extends BeakrError {\n readonly requiredScope: string | undefined;\n constructor(message: string, options: BeakrErrorOptions & { requiredScope?: string } = {}) {\n super(message, options);\n this.requiredScope = options.requiredScope;\n }\n}\n\n/**\n * 403 `person_review_required`: the project (or organization) requires a\n * person to accept proposals and commit Knowledge\n * (`GET /v1/knowledge/agent-review`), and this API key or token may not. A\n * signed-in person, or a key holding the `proposals:accept` scope, can; staging\n * the proposal stays open to the key.\n */\nexport class PersonReviewRequiredError extends PermissionDeniedError {}\n\nexport class NotFoundError extends BeakrError {}\n\n/**\n * 409. For a refused incremental conversation import, `expectedBaseIndex` is\n * the stored message count to resend from.\n */\nexport class ConflictError extends BeakrError {\n get expectedBaseIndex(): number | undefined {\n const body = this.body as Record<string, unknown> | undefined;\n for (const key of [\"error\", \"detail\"] as const) {\n const container = body?.[key] as Record<string, unknown> | undefined;\n const value = container?.[\"expected_base_index\"];\n if (typeof value === \"number\" && Number.isInteger(value)) return value;\n }\n return undefined;\n }\n}\n\n/** 400 or 422: the request was malformed or failed validation. */\nexport class ValidationError extends BeakrError {}\n\n/** 429. `retryAfter` is the server's hint in seconds, when it sent one. */\nexport class RateLimitError extends BeakrError {\n readonly retryAfter: number | undefined;\n constructor(message: string, options: BeakrErrorOptions & { retryAfter?: number } = {}) {\n super(message, options);\n this.retryAfter = options.retryAfter;\n }\n}\n\n/** 5xx. */\nexport class ServerError extends BeakrError {}\n\n/**\n * A success whose body is an HTML page where the operation answers JSON. Most\n * often the base URL is not a Beakr API: a web app or a proxy answers 200 with\n * a page for any path. `status` is that status.\n */\nexport class UnexpectedResponseError extends BeakrError {}\n\n/**\n * A Knowledge command or write answered HTTP 200 with `outcome.status ===\n * \"error\"` (an unknown page, a refused write). `result` keeps the full reply.\n */\n/**\n * The Knowledge door answered 200 but reported `outcome.status: \"error\"`. It\n * carries the response's `status` and `requestId` like every other error, and\n * the door's own `outcome.error_code` (`invalid_arguments`, `unknown_command`,\n * `scope_not_found`, `citation_not_citeable`, ...) as `code` when it named one,\n * else `knowledge_command_error`.\n */\nexport class KnowledgeCommandError extends BeakrError {\n readonly result: Record<string, unknown>;\n constructor(\n message: string,\n result: Record<string, unknown>,\n options: Omit<BeakrErrorOptions, \"body\"> = {},\n ) {\n super(message, { code: \"knowledge_command_error\", ...options, body: result });\n this.result = result;\n }\n}\n\n\nconst DEFAULT_CODES: Record<number, string> = {\n 400: \"bad_request\",\n 401: \"unauthorized\",\n 403: \"forbidden\",\n 404: \"not_found\",\n 409: \"conflict\",\n 422: \"validation_error\",\n 429: \"rate_limited\",\n};\n\n/**\n * Seconds to wait from a `Retry-After` header, or `undefined` when absent or\n * malformed.\n *\n * The header is either a number of seconds or an HTTP-date (RFC 9110 section\n * 10.2.3); a date becomes the seconds from `nowMs` (default: `Date.now()`)\n * until it. A date already past means \"retry now\" (`0`), never a negative\n * wait. A value that is neither is ignored, so the caller falls back to its own\n * backoff.\n */\nexport function parseRetryAfter(\n value: string | null | undefined,\n nowMs: number = Date.now(),\n): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds)) return Math.max(0, seconds);\n const deadline = parseHttpDate(value, nowMs);\n return deadline === undefined ? undefined : Math.max(0, (deadline - nowMs) / 1000);\n}\n\n/** How much of a body that is not JSON an error message keeps. */\nconst EXCERPT_CHARS = 200;\nconst TITLE_CHARS = 80;\n/**\n * A page's title is near its start: only this much of the body is searched,\n * and the pattern itself is bounded, so a huge body costs no more than a small one.\n */\nconst TITLE_SEARCH_CHARS = 4096;\nconst HTML_TITLE = /<title[^>]{0,200}>([\\s\\S]{0,500}?)<\\/title>/i;\n/** Control, format and other non-printable characters (an ANSI escape sequence). */\nconst NOT_PRINTABLE = /[\\p{C}\\p{Zl}\\p{Zp}]/gu;\nconst HTML_ENTITIES: Record<string, string> = { amp: \"&\", lt: \"<\", gt: \">\", quot: '\"', \"#39\": \"'\", apos: \"'\" };\n\n/**\n * `text` as one short printable line. The text is the server's, and the\n * message reaches a terminal: non-printable characters are removed.\n */\nfunction oneLine(text: string, limit: number): string {\n const line = text.split(/\\s+/).filter(Boolean).join(\" \").replace(NOT_PRINTABLE, \"\");\n return line.length <= limit ? line : `${line.slice(0, limit - 3).trimEnd()}...`;\n}\n\n/** Whether a body (with its `Content-Type`) is an HTML page. */\nexport function isHtmlPage(contentType: string | null | undefined, text: string): boolean {\n return (contentType ?? \"\").toLowerCase().includes(\"html\") || text.trimStart().startsWith(\"<\");\n}\n\n/**\n * The message and fix for an HTML page where a Beakr API answer was expected:\n * the base URL points somewhere else (or, for a 5xx, a proxy in front of the\n * API answered). The page itself is never the message: it is long, and it says\n * nothing about Beakr.\n */\nfunction htmlPageReason(status: number, text: string): { reason: string; fix: string } {\n const title = HTML_TITLE.exec(text.slice(0, TITLE_SEARCH_CHARS))?.[1];\n const named = title\n ? oneLine(title.replace(/&(amp|lt|gt|quot|#39|apos);/g, (_, name: string) => HTML_ENTITIES[name] ?? \"\"), TITLE_CHARS)\n : \"\";\n const page = named ? `an HTML page (\"${named}\")` : \"an HTML page\";\n const fix =\n status >= 500\n ? \"If the API URL (baseUrl, or BEAKR_BASE_URL) is right, a proxy in front of the API answered: retry shortly.\"\n : \"Check the API URL (baseUrl, or BEAKR_BASE_URL): it must be a Beakr API, such as https://api.thebeakr.com.\";\n return { reason: `The server answered with ${page}, not a Beakr API response`, fix };\n}\n\n/** The error for a success whose body is an HTML page where JSON was expected. */\nexport function unexpectedPageError(\n status: number,\n headers: Headers,\n text: string,\n baseUrl?: string,\n): UnexpectedResponseError {\n const { reason, fix } = htmlPageReason(status, text);\n const options: BeakrErrorOptions = { status, code: \"unexpected_response\", body: text, fix };\n const requestId = headers.get(\"x-request-id\");\n if (requestId) options.requestId = requestId;\n if (baseUrl !== undefined) options.baseUrl = baseUrl;\n const called = baseUrl ? ` (called ${shownUrl(baseUrl)})` : \"\";\n return new UnexpectedResponseError(`${reason}${called} To fix: ${fix}`, options);\n}\n\n/**\n * `baseUrl` as a message names it: scheme, host, port and path only. A base URL\n * can carry a user name and password (`https://user:pass@host`) or a token in\n * its query, and an error message is printed and logged.\n */\nfunction shownUrl(baseUrl: string): string {\n try {\n const url = new URL(baseUrl);\n return `${url.protocol}//${url.host}${url.pathname === \"/\" ? \"\" : url.pathname}`;\n } catch {\n return baseUrl;\n }\n}\n\nfunction detailMessage(detail: unknown): string | undefined {\n if (detail === undefined || detail === null) return undefined;\n if (typeof detail === \"string\") return detail;\n // FastAPI validation errors are a list of {loc, msg}; keep them readable.\n if (Array.isArray(detail)) {\n return detail\n .map((item) => {\n if (item && typeof item === \"object\" && \"msg\" in item) {\n const loc = Array.isArray((item as { loc?: unknown[] }).loc)\n ? ((item as { loc: unknown[] }).loc.filter((p) => p !== \"body\").join(\".\"))\n : \"\";\n const msg = String((item as { msg: unknown }).msg);\n return loc ? `${loc}: ${msg}` : msg;\n }\n return String(item);\n })\n .join(\"; \");\n }\n return JSON.stringify(detail);\n}\n\n/**\n * Map a non-2xx response (status, headers, parsed body) to the matching error.\n * `nowMs` is the clock an HTTP-date `Retry-After` is measured from. `baseUrl`,\n * when given, is the API the request was sent to; the message ends with\n * `(called <baseUrl>)` and the error keeps it as `baseUrl`.\n */\nexport function errorFromResponse(\n status: number,\n headers: Headers,\n body: unknown,\n statusText = \"\",\n nowMs: number = Date.now(),\n baseUrl?: string,\n): BeakrError {\n const record = body && typeof body === \"object\" ? (body as Record<string, unknown>) : undefined;\n const rawEnvelope = record?.[\"error\"];\n const envelope =\n rawEnvelope && typeof rawEnvelope === \"object\" ? (rawEnvelope as Record<string, unknown>) : {};\n const detail = record ? record[\"detail\"] : body;\n\n let code = (envelope[\"code\"] as string | undefined) ?? DEFAULT_CODES[status];\n if (code === undefined && status >= 500) code = \"internal_error\";\n // Not JSON: an HTML page (a wrong base URL, a proxy) or bare text.\n const page = typeof body === \"string\" && isHtmlPage(headers.get(\"content-type\"), body) ? htmlPageReason(status, body) : undefined;\n const text = typeof body === \"string\" && !page ? oneLine(body, EXCERPT_CHARS) : undefined;\n const reason =\n page?.reason ??\n text ??\n (envelope[\"message\"] as string | undefined) ??\n detailMessage(detail) ??\n (statusText || `HTTP ${status}`);\n const rawDetailsForMessage = envelope[\"details\"];\n const quota =\n rawDetailsForMessage && typeof rawDetailsForMessage === \"object\" && !Array.isArray(rawDetailsForMessage)\n ? quotaText(rawDetailsForMessage as Record<string, unknown>)\n : undefined;\n const fix =\n page?.fix ??\n (typeof envelope[\"fix\"] === \"string\" && envelope[\"fix\"] ? (envelope[\"fix\"] as string) : undefined);\n let message = baseUrl ? `${reason} (called ${shownUrl(baseUrl)})` : reason;\n if (quota) message += ` (${quota})`;\n if (fix) message += ` To fix: ${fix}`;\n const requestId =\n (envelope[\"request_id\"] as string | undefined) ?? headers.get(\"x-request-id\") ?? undefined;\n const rawDetails = envelope[\"details\"];\n const details =\n rawDetails && typeof rawDetails === \"object\" && !Array.isArray(rawDetails)\n ? (rawDetails as Record<string, unknown>)\n : {};\n const common: BeakrErrorOptions = { status, body, details };\n if (fix !== undefined) common.fix = fix;\n if (baseUrl !== undefined) common.baseUrl = baseUrl;\n if (code !== undefined) common.code = code;\n if (requestId !== undefined) common.requestId = requestId;\n\n if (status === 400 || status === 422) return new ValidationError(message, common);\n if (status === 401) return new AuthenticationError(message, common);\n if (status === 403) {\n const requiredScope =\n (details[\"required_scope\"] as string | undefined) ??\n (envelope[\"required_scope\"] as string | undefined);\n const Refusal = code === \"person_review_required\" ? PersonReviewRequiredError : PermissionDeniedError;\n return new Refusal(message, requiredScope === undefined ? common : { ...common, requiredScope });\n }\n if (status === 404) return new NotFoundError(message, common);\n if (status === 409) return new ConflictError(message, common);\n if (status === 429) {\n const retryAfter = parseRetryAfter(headers.get(\"retry-after\"), nowMs);\n return new RateLimitError(message, retryAfter === undefined ? common : { ...common, retryAfter });\n }\n if (status >= 500) return new ServerError(message, common);\n return new BeakrError(message, common);\n}\n","/**\n * The public source record: where a cited source lives and what it says.\n *\n * One shape for every surface that shows a source -- `knowledge.pages.sources()`,\n * `runs.answer()`, the CLI's `kb sources`/`kb cat` and the MCP server -- so a\n * program reads `filename`, `provider` and `location` the same way wherever the\n * source came from. A port of the Python SDK's `beakr_sdk/sources.py`; keep the\n * two in step. Empty fields are left out, and backend row fields (internal unit,\n * connector or version ids, hashes) are never forwarded.\n */\n\n/** Where the original is: a provider URL or path, or Beakr's own copy (`file_id`). */\nexport interface SourceLocation {\n url?: string;\n /** Where the source lives (`deals/acme/memo.pdf`); `files.read` takes it, with ` › <unit>`. */\n display_path?: string;\n /** Where the cited passage sits in it: `p. 7`, `slide 3`, `sheet 2, B4:D9`. */\n unit_locator?: string;\n /** The uploader's relative path, when recorded and different from `display_path`. */\n upload_path?: string;\n provider_item_id?: string;\n /** Beakr's copy of the document: `beakr.files.download(file_id)`. */\n file_id?: string;\n /** The version of Beakr's copy the passage was read from. */\n version_id?: string;\n}\n\nexport interface SourceEvidence {\n excerpt?: string;\n locator?: string;\n fidelity?: string;\n evidence_kind?: string;\n anchor_status?: string;\n}\n\n/** One cited passage of a compact record's document. */\nexport interface SourceExcerpt {\n citation_key?: string;\n section_id?: string;\n unit_locator?: string;\n text?: string;\n}\n\nexport interface SourceStatus {\n observed_at?: string;\n availability?: string;\n changed_since_cited?: boolean;\n}\n\nexport interface SourceSection {\n id?: string;\n title?: string;\n event_start?: string;\n event_end?: string;\n date_precision?: string;\n}\n\nexport interface SourceRecord {\n /** Opaque; reuse it in a Knowledge write citation. */\n source_ref?: string;\n /** The `{{key}}` token in page or answer text. */\n citation_key?: string;\n name: string;\n filename?: string;\n /** The connector it came from; absent for an uploaded file. */\n provider?: string;\n source_kind?: string;\n /** Page sources: how the source bears on the section (support, qualifies, contradicts). */\n stance?: string;\n location?: SourceLocation;\n evidence?: SourceEvidence;\n status?: SourceStatus;\n section?: SourceSection;\n /** Compact reads: the document's cited passages, each with its token and place. */\n excerpts?: SourceExcerpt[];\n /** Compact reads: how many passages of the document the page cites. */\n cited_passages?: number;\n retrieval?: { tool: string; arguments: { handle: string } };\n}\n\ntype Row = Record<string, unknown>;\n\nconst isEmpty = (value: unknown): boolean =>\n value === undefined || value === null || value === \"\" || (Array.isArray(value) && value.length === 0);\n\nconst asRow = (value: unknown): Row =>\n value && typeof value === \"object\" && !Array.isArray(value) ? (value as Row) : {};\n\nfunction cleaned<T extends object>(value: Record<string, unknown>): T | undefined {\n const kept = Object.fromEntries(\n Object.entries(value).filter(([, v]) => v !== undefined && v !== null && v !== \"\"),\n );\n return Object.keys(kept).length ? (kept as T) : undefined;\n}\n\nfunction basename(path: string): string {\n const parts = path.replace(/\\/+$/, \"\").split(\"/\");\n return parts[parts.length - 1] ?? path;\n}\n\n/** Keep only the public source contract; never forward backend row fields. */\n/** `provider` of a source uploaded to Beakr rather than synced from a connector. */\nexport const UPLOAD_PROVIDER = \"upload\";\n\nexport function publicSource(source: Row, citationKey?: string): SourceRecord {\n const meta = asRow(source[\"meta\"]);\n const location = asRow(source[\"location\"]);\n const evidence = asRow(source[\"evidence\"]);\n const status = asRow(source[\"status\"]);\n const section = asRow(source[\"section\"]);\n const retrieval = asRow(source[\"retrieval\"]);\n\n const first = (...keys: string[]): unknown => {\n for (const key of keys) {\n if (!isEmpty(source[key])) return source[key];\n if (!isEmpty(meta[key])) return meta[key];\n }\n return undefined;\n };\n const str = (value: unknown): string | undefined => (isEmpty(value) ? undefined : String(value));\n\n const name = String(first(\"name\", \"source_title\", \"title\") ?? \"Untitled source\");\n const kind = str(first(\"source_kind\", \"unit_kind\", \"type\", \"source_type\"));\n const path = str(location[\"display_path\"] ?? first(\"display_path\", \"path\", \"local_path\"));\n let filename = str(first(\"filename\", \"file_name\"));\n if (!filename && path) filename = basename(path);\n if (!filename && [\"file\", \"document\", \"artifact\"].includes((kind ?? \"\").toLowerCase())) filename = name;\n const fileIdValue = first(\"artifact_id\");\n // Every document Beakr holds (uploaded or synced) is a file whose bytes\n // files.download(id) returns; its artifact_id is that public id.\n const fileId = str(location[\"file_id\"] ?? (typeof fileIdValue === \"string\" ? fileIdValue : undefined));\n const url = str(location[\"url\"] ?? first(\"url\", \"web_view_url\", \"full_text_url\", \"pdf_url\"));\n let provider = str(first(\"provider\", \"source_provider\"));\n // A file Beakr holds itself: no connector to name, no original elsewhere.\n if (!provider && (first(\"origin\") === \"upload\" || (fileId && !url))) provider = UPLOAD_PROVIDER;\n\n const item: Record<string, unknown> = {\n source_ref: str(first(\"source_ref\")),\n citation_key: citationKey ?? str(first(\"citation_key\", \"key\")),\n name,\n filename,\n provider,\n source_kind: kind,\n stance: typeof source[\"stance\"] === \"string\" ? source[\"stance\"] : undefined,\n location: cleaned<SourceLocation>({\n url,\n display_path: path,\n unit_locator: str(location[\"unit_locator\"]),\n upload_path: str(location[\"upload_path\"]),\n provider_item_id: str(location[\"provider_item_id\"] ?? first(\"provider_file_id\", \"remote_file_id\")),\n file_id: fileId,\n version_id: fileId ? str(location[\"version_id\"]) : undefined,\n }),\n evidence: cleaned<SourceEvidence>({\n excerpt: str(evidence[\"excerpt\"] ?? first(\"excerpt\", \"excerpt_text\", \"quote\")),\n locator: str(evidence[\"locator\"] ?? first(\"locator\", \"chunk_ref\")),\n fidelity: str(evidence[\"fidelity\"] ?? first(\"fidelity\")),\n evidence_kind: str(evidence[\"evidence_kind\"] ?? first(\"evidence_kind\")),\n anchor_status: str(evidence[\"anchor_status\"] ?? first(\"anchor_status\")),\n }),\n status: cleaned<SourceStatus>({\n observed_at: str(status[\"observed_at\"] ?? first(\"observed_at\")),\n availability: str(status[\"availability\"] ?? first(\"source_availability\")),\n changed_since_cited:\n \"changed_since_cited\" in status ? status[\"changed_since_cited\"] : first(\"source_moved\"),\n }),\n section: cleaned<SourceSection>({\n id: str(section[\"id\"] ?? source[\"section_id\"]),\n title: str(section[\"title\"] ?? first(\"section_title\")),\n event_start: str(section[\"event_start\"] ?? first(\"event_start\")),\n event_end: str(section[\"event_end\"] ?? first(\"event_end\")),\n date_precision: str(section[\"date_precision\"] ?? first(\"date_precision\")),\n }),\n };\n // A compact record carries its document's passages as `excerpts`, each with\n // its token and where it sits, and how many it cites. Dropping them left a\n // Sources listing with no excerpt for compact reads.\n const excerpts = (Array.isArray(source[\"excerpts\"]) ? source[\"excerpts\"] : [])\n .map(asRow)\n .filter((excerpt) => !isEmpty(excerpt[\"text\"]))\n .map((excerpt) =>\n Object.fromEntries(\n ([\"citation_key\", \"section_id\", \"unit_locator\", \"text\"] as const)\n .filter((key) => !isEmpty(excerpt[key]))\n .map((key) => [key, String(excerpt[key])]),\n ) as SourceExcerpt,\n );\n if (excerpts.length) item[\"excerpts\"] = excerpts;\n if (typeof source[\"cited_passages\"] === \"number\" && Number.isInteger(source[\"cited_passages\"])) {\n item[\"cited_passages\"] = source[\"cited_passages\"];\n }\n const args = asRow(retrieval[\"arguments\"]);\n if (typeof retrieval[\"tool\"] === \"string\" && retrieval[\"tool\"] && typeof args[\"handle\"] === \"string\" && args[\"handle\"]) {\n item[\"retrieval\"] = { tool: retrieval[\"tool\"], arguments: { handle: args[\"handle\"] } };\n }\n return Object.fromEntries(Object.entries(item).filter(([, v]) => !isEmpty(v))) as unknown as SourceRecord;\n}\n\n/**\n * The command that fetches a source's bytes when it has no original to link to.\n * A connector file's original lives with its provider (`location.url`); an\n * uploaded file exists only in Beakr, so it is read back by its file id.\n */\nexport function downloadHint(record: SourceRecord): string | undefined {\n const location = record.location ?? {};\n if (!location.file_id || location.url) return undefined;\n return `beakr files download ${location.file_id}`;\n}\n\n/** One line saying where a source lives: `filename · provider · url-or-path`. */\nexport function sourceWhere(record: SourceRecord): string {\n const location = record.location ?? {};\n const label = record.filename ?? record.name;\n const parts = [label, record.provider].filter(Boolean) as string[];\n if (location.url) parts.push(location.url);\n // A path that is just the filename again says nothing new.\n else if (location.display_path && location.display_path !== label) parts.push(location.display_path);\n const hint = downloadHint(record);\n if (hint) parts.push(`file ${location.file_id} (\\`${hint}\\`)`);\n return parts.join(\" · \");\n}\n","/**\n * Turn an agent run's event stream into an answer a program can show.\n *\n * A run streams `content_delta` events (some marked `is_thinking`), `sources`\n * events keyed by citation key, and a closing `stream_complete` carrying the\n * final text. Its citations are `{{key}}` tokens. `AnswerBuilder` folds those\n * events into `{text, sources, run_id}`. Once the run has finished, the answer\n * is the engine's own rendering from `GET /v1/runs/{run_id}`: each citation\n * shown as the readable reference in parentheses (`(memo.pdf › p. 7)`), and\n * one public source record per cited document in order of first use. Only a\n * server that does not send that rendering gets the answer assembled from the\n * stream, with each `{{key}}` numbered `[n]` and `sources[n-1]` behind it.\n * `TextStream` numbers streamed deltas `[n]` per citation key, for showing an\n * answer as it is written. A port of the Python SDK's `beakr_sdk/answers.py`;\n * keep the two in step.\n */\nimport { BeakrError } from \"./errors.js\";\nimport { publicSource, type SourceRecord } from \"./sources.js\";\n\n/** What `runs.answer()` returns. */\nexport interface Answer {\n /**\n * The answer, each citation shown as the readable reference in parentheses\n * (`(memo.pdf › p. 7)`, `(Page Title › Section)`). From a server that does\n * not render answers, the citations are numbered `[n]` instead.\n */\n text: string;\n /**\n * The cited documents in order of first use, as public source records: one\n * per document, however many of its passages the text cites. With `[n]`\n * citations, `sources[n-1]` is the record behind `[n]`.\n */\n sources: SourceRecord[];\n run_id: string;\n}\n\n/** The run ended without an answer (`error`, `failed` or `cancelled`). */\nexport class RunFailedError extends BeakrError {}\n\n/** What a parked run asks the person: `GET /v1/runs/{run_id}`'s `question`. */\nexport interface RunQuestion {\n text?: string;\n options?: unknown[];\n context?: unknown;\n [key: string]: unknown;\n}\n\n/**\n * The run stopped to ask the person something (status `interrupted`) instead\n * of answering, and sent no answer text. Answer `question` by starting a run in\n * `threadId`.\n */\nexport class RunNeedsInputError extends RunFailedError {\n constructor(\n message: string,\n readonly runId: string,\n readonly threadId: string | undefined,\n readonly question: RunQuestion | undefined,\n readonly interruptKind: string | undefined,\n ) {\n super(message, { code: \"interrupted\" });\n }\n}\n\nconst CITATION_TOKEN = /\\{\\{([^}]+)\\}\\}/g;\n\n/**\n * A citation key is short; text held back waiting for a closing `}}` longer\n * than this is ordinary text and is released rather than stalling the stream.\n */\nconst MAX_PENDING = 256;\n\nconst FAILED = new Set([\"error\", \"failed\", \"cancelled\"]);\n\ninterface StreamedEvent {\n type: string;\n data?: unknown;\n [key: string]: unknown;\n}\n\nconst dataOf = (event: StreamedEvent): Record<string, unknown> =>\n event.data && typeof event.data === \"object\" ? (event.data as Record<string, unknown>) : {};\n\n/**\n * Turn `{{key}}` citation tokens into `[n]` in order of first use. `order`\n * collects each key the first time it is seen; pass the same array across calls\n * (a streamed answer) to keep the numbering stable.\n */\nexport function numberCitations(text: string, order: string[]): string {\n return text.replace(CITATION_TOKEN, (_match, key: string) => {\n if (!order.includes(key)) order.push(key);\n return `[${order.indexOf(key) + 1}]`;\n });\n}\n\n/**\n * Numbers citations in streamed text even when a token spans deltas. Only the\n * shortest suffix that could still start an unfinished `{{key}}` is held back.\n */\nexport class TextStream {\n private pending = \"\";\n constructor(readonly order: string[] = []) {}\n\n feed(delta: string): string {\n const text = numberCitations(this.pending + delta, this.order);\n let cut = text.length;\n const opening = text.lastIndexOf(\"{{\");\n if (opening !== -1 && !text.slice(opening).includes(\"}}\")) cut = opening;\n else if (text.endsWith(\"{\")) cut = text.length - 1;\n if (text.length - cut > MAX_PENDING) cut = text.length;\n this.pending = text.slice(cut);\n return text.slice(0, cut);\n }\n\n finish(): string {\n const rest = this.pending;\n this.pending = \"\";\n return rest;\n }\n}\n\n/** The visible answer text an event adds (empty for thinking and other events). */\nexport function answerDelta(event: StreamedEvent): string {\n const data = dataOf(event);\n if (event.type === \"content_delta\" && !data[\"is_thinking\"]) return String(data[\"delta\"] ?? \"\");\n return \"\";\n}\n\n/** Folds a run's events into `{text, sources, run_id}`. */\nexport class AnswerBuilder {\n private readonly deltas: string[] = [];\n private finalText: string | undefined;\n private readonly sources = new Map<string, Record<string, unknown>>();\n private status = \"completed\";\n private error: string | undefined;\n threadId: string | undefined;\n interruptKind: string | undefined;\n\n constructor(readonly runId: string) {}\n\n /** The run parked on a question for the person instead of answering. */\n get interrupted(): boolean {\n return this.status === \"interrupted\";\n }\n\n feed(event: StreamedEvent): void {\n const data = dataOf(event);\n const threadId = (event as { thread_id?: unknown }).thread_id;\n if (threadId) this.threadId = String(threadId);\n const delta = answerDelta(event);\n if (delta) {\n this.deltas.push(delta);\n } else if (event.type === \"sources\") {\n const list = Array.isArray(data[\"sources\"]) ? data[\"sources\"] : [];\n for (const source of list) {\n if (!source || typeof source !== \"object\") continue;\n const key = (source as Record<string, unknown>)[\"key\"];\n if (!key) continue;\n // A later event for the same key carries more (quote, path).\n this.sources.set(String(key), { ...(this.sources.get(String(key)) ?? {}), ...(source as Record<string, unknown>) });\n }\n } else if (event.type === \"error\") {\n this.error = String(data[\"message\"] ?? data[\"error\"] ?? \"the run failed\");\n } else if (event.type === \"stream_complete\") {\n if (data[\"status\"]) this.status = String(data[\"status\"]);\n if (data[\"interrupt_kind\"]) this.interruptKind = String(data[\"interrupt_kind\"]);\n if (typeof data[\"final_text\"] === \"string\") this.finalText = data[\"final_text\"];\n }\n }\n\n /**\n * The answer; throws `RunFailedError` when the run ended without one, and\n * `RunNeedsInputError` (with `question`, read from the run by the caller)\n * when it parked on a question rather than returning an empty answer.\n */\n result(run?: Record<string, unknown>): Answer {\n // `run` is GET /v1/runs/{run_id} after the stream ended. Its `answer` (the\n // engine's own rendering) is the answer when present; streamed sources only\n // fill in what its records leave out (a document's file id). Without it (an\n // older server) the answer is assembled from the stream.\n const state = run ?? {};\n const status = String(state[\"status\"] ?? this.status);\n if (this.interrupted || status === \"interrupted\") {\n const question = (state[\"question\"] && typeof state[\"question\"] === \"object\" ? state[\"question\"] : undefined) as\n | RunQuestion\n | undefined;\n const asked = question?.text;\n throw new RunNeedsInputError(\n `Run ${this.runId} is waiting for an answer` + (asked ? `: ${asked}` : \" (it asked the person a question)\"),\n this.runId,\n this.threadId ?? (typeof state[\"thread_id\"] === \"string\" ? state[\"thread_id\"] : undefined),\n question,\n this.interruptKind ?? (typeof state[\"interrupt_kind\"] === \"string\" ? state[\"interrupt_kind\"] : undefined),\n );\n }\n if (this.error !== undefined || FAILED.has(this.status) || FAILED.has(status)) {\n const reason = this.error ?? `the run ended ${FAILED.has(status) ? status : this.status}`;\n throw new RunFailedError(`Run ${this.runId}: ${reason}`, { code: status });\n }\n const answer = state[\"answer\"] as { text?: unknown; sources?: unknown } | null | undefined;\n if (answer && typeof answer.text === \"string\") {\n const records = Array.isArray(answer.sources) ? answer.sources : [];\n return {\n text: answer.text.trim(),\n sources: records\n .filter((r): r is Record<string, unknown> => !!r && typeof r === \"object\")\n .map((record) => {\n const key = typeof record[\"citation_key\"] === \"string\" ? record[\"citation_key\"] : undefined;\n const streamed = key ? (this.sources.get(key) ?? {}) : {};\n return publicSource({ ...streamed, ...record }, key);\n }),\n run_id: this.runId,\n };\n }\n const raw = this.finalText ?? this.deltas.join(\"\");\n const order: string[] = [];\n const text = numberCitations(raw, order);\n const sources = order.map((key) => publicSource(this.sources.get(key) ?? { key }, key));\n return { text: text.trim(), sources, run_id: this.runId };\n }\n}\n","/**\n * Load a Node built-in at run time, invisibly to browser bundlers.\n *\n * Node-only helpers (directories, files on disk, streaming hashes) must not\n * stop the SDK from bundling for a browser or an edge runtime. A literal\n * ``import(\"node:fs\")`` is resolved by bundlers even when it is dynamic, so\n * this uses ``process.getBuiltinModule`` (Node 20.16+, 22.3+) and, on older\n * Node, a dynamic import whose specifier is not a literal.\n */\nexport async function nodeBuiltin<T>(id: string): Promise<T> {\n const proc = (globalThis as { process?: { getBuiltinModule?: (id: string) => unknown } }).process;\n const loaded = proc?.getBuiltinModule?.(id);\n if (loaded) return loaded as T;\n const specifier: string = id;\n return (await import(/* @vite-ignore */ /* webpackIgnore: true */ specifier)) as T;\n}\n\n/** Built-ins loaded by `preloadNodeBuiltins`, for synchronous callers on older Node. */\nconst preloaded = new Map<string, unknown>();\n\n/** Whether this is Node.js (or a runtime that implements its `process`, such as Bun or Deno). */\nexport function isNodeRuntime(): boolean {\n const proc = (globalThis as { process?: { versions?: { node?: unknown } } }).process;\n return typeof proc?.versions?.node === \"string\";\n}\n\n/**\n * A Node built-in for synchronous code, or undefined when it is not available\n * yet: `process.getBuiltinModule` where it exists, else a module a previous\n * `preloadNodeBuiltins` loaded (the only way on Node 18 and 20 before 20.16,\n * whose ES modules cannot load a built-in synchronously).\n */\nexport function nodeBuiltinSync<T>(id: string): T | undefined {\n const proc = (globalThis as { process?: { getBuiltinModule?: (id: string) => unknown } }).process;\n try {\n const loaded = proc?.getBuiltinModule?.(id);\n if (loaded) return loaded as T;\n } catch {\n // Fall through to a preloaded copy.\n }\n return preloaded.get(id) as T | undefined;\n}\n\n/**\n * Load built-ins once so `nodeBuiltinSync` finds them on Node without\n * `getBuiltinModule`. Outside Node this does nothing, and a built-in the\n * runtime refuses is skipped.\n */\nexport async function preloadNodeBuiltins(ids: readonly string[]): Promise<void> {\n if (!isNodeRuntime()) return;\n for (const id of ids) {\n if (nodeBuiltinSync(id) !== undefined) continue;\n try {\n preloaded.set(id, await nodeBuiltin(id));\n } catch {\n // No such built-in here; synchronous readers find nothing and move on.\n }\n }\n}\n","/**\n * Service-account credentials files (developer platform W6.1).\n *\n * A CI job or server authenticates as an organization's service account with a\n * JSON file written by `beakr org service-accounts key --credentials-file`:\n *\n * {\"type\": \"beakr_service_account\", \"api_key\": \"bk_live_...\",\n * \"base_url\": \"https://api.thebeakr.com\", \"org_id\": \"...\",\n * \"service_account_id\": \"...\", \"key_id\": \"...\", \"name\": \"deploy\"}\n *\n * Only `type` and `api_key` are required. `base_url`, when present, binds the\n * key to that API: a client pointed at another one refuses it rather than\n * sending the key elsewhere. The same format is read by the Python SDK.\n */\nimport { AuthenticationError } from \"./errors.js\";\nimport { nodeBuiltinSync } from \"./node-builtins.js\";\n\nexport const SERVICE_ACCOUNT_FILE_TYPE = \"beakr_service_account\";\nexport const SERVICE_ACCOUNT_FILE_ENV = \"BEAKR_SERVICE_ACCOUNT_FILE\";\n\nexport interface ServiceAccountCredentials {\n apiKey: string;\n baseUrl?: string;\n orgId?: string;\n serviceAccountId?: string;\n keyId?: string;\n name?: string;\n}\n\nfunction invalid(message: string): AuthenticationError {\n return new AuthenticationError(message, { code: \"unauthorized\" });\n}\n\n/** Parse the file's text (or its already-parsed JSON). Throws `AuthenticationError` when unusable. */\nexport function parseServiceAccountCredentials(\n content: string | Record<string, unknown>,\n source = \"the service account file\",\n): ServiceAccountCredentials {\n let data: unknown = content;\n if (typeof content === \"string\") {\n try {\n data = JSON.parse(content);\n } catch {\n throw invalid(`${source} is not valid JSON.`);\n }\n }\n if (!data || typeof data !== \"object\" || (data as { type?: unknown }).type !== SERVICE_ACCOUNT_FILE_TYPE) {\n throw invalid(\n `${source} is not a Beakr service account file (expected \"type\": \"${SERVICE_ACCOUNT_FILE_TYPE}\").`,\n );\n }\n const record = data as Record<string, unknown>;\n const apiKey = record.api_key;\n if (typeof apiKey !== \"string\" || !/^bk_(live|test)_/.test(apiKey)) {\n throw invalid(`${source} has no api_key (bk_live_... or bk_test_...).`);\n }\n const text = (name: string) => {\n const value = record[name];\n return typeof value === \"string\" && value ? value : undefined;\n };\n return {\n apiKey,\n baseUrl: text(\"base_url\"),\n orgId: text(\"org_id\"),\n serviceAccountId: text(\"service_account_id\"),\n keyId: text(\"key_id\"),\n name: text(\"name\"),\n };\n}\n\ntype ReadFileSync = (path: string, encoding: \"utf8\") => string;\n\nfunction nodeReadFileSync(): ReadFileSync | undefined {\n return nodeBuiltinSync<{ readFileSync?: ReadFileSync }>(\"node:fs\")?.readFileSync;\n}\n\n/**\n * Read a credentials file from disk (Node.js; on Node without\n * `process.getBuiltinModule`, after the client has preloaded `node:fs`). In a runtime\n * without file access, read the file yourself and pass its text to\n * `parseServiceAccountCredentials`, then the result as `serviceAccount`.\n */\nexport function readServiceAccountFile(path: string, readFile?: ReadFileSync): ServiceAccountCredentials {\n const read = readFile ?? nodeReadFileSync();\n if (!read) {\n throw invalid(\n \"Reading a service account file needs Node.js file access; pass `serviceAccount` \" +\n \"with the parsed file instead.\",\n );\n }\n let content: string;\n try {\n content = read(path, \"utf8\");\n } catch (error) {\n throw invalid(`Cannot read the service account file ${path}: ${(error as Error).message}.`);\n }\n return parseServiceAccountCredentials(content, `The service account file ${path}`);\n}\n\n/** `scheme://host[:port]`, lower case, default port dropped: what a key is bound to. */\nexport function normalizeOrigin(url: string): string {\n const parsed = new URL(url.includes(\"://\") ? url : `https://${url}`);\n const defaultPort = parsed.protocol === \"http:\" ? \"80\" : parsed.protocol === \"https:\" ? \"443\" : \"\";\n const port = parsed.port && parsed.port !== defaultPort ? `:${parsed.port}` : \"\";\n return `${parsed.protocol}//${parsed.hostname.toLowerCase()}${port}`;\n}\n","/**\n * The Beakr CLI's stored sign-in, read from disk (developer platform W6.1.4).\n *\n * `beakr auth login` keeps one login per API origin. In Node.js the SDK reads\n * the file copy, `~/.beakr/credentials` (or `$BEAKR_HOME/credentials`), and the\n * key saved by `beakr auth login --with-api-key` in `~/.beakr/config.json` -- the\n * same files, payload and origin binding the Python SDK reads\n * (`beakr_sdk/credentials.py`). A stored credential is only offered to a client\n * pointed at the API that issued it.\n *\n * This file is the fast path. What it cannot do is delegated to the CLI itself\n * (`cli-token.ts`, `beakr auth token --json`):\n *\n * - The OS keychain. The CLI keeps the login there when one is available (the\n * default on macOS), through Python's `keyring`; Node has no portable way to\n * read those entries.\n * - Refreshing. Refreshing rotates the pair, and every Beakr process that\n * refreshes it does so under the CLI's `flock` on `credentials.lock`, which\n * Node cannot take; refreshing outside it can present a spent refresh token\n * and revoke the login for every process. So nothing here ever refreshes:\n * the CLI does, under its own lock.\n *\n * File access goes through `nodeBuiltinSync`, so it works on Node 18 once the\n * transport has preloaded `node:fs` and `node:os` (`prepareCliLoginFiles`). In\n * a runtime without file access (browsers, edge runtimes) every read here\n * finds nothing and the chain moves on.\n */\n\nimport { nodeBuiltinSync, preloadNodeBuiltins } from \"./node-builtins.js\";\nimport { normalizeOrigin } from \"./service-account.js\";\n\n/** Seconds before expiry at which a stored access token is treated as expired (the CLI's skew). */\nconst REFRESH_SKEW_SECONDS = 60;\nconst DEFAULT_BASE_URL = \"https://api.thebeakr.com\";\n\n/** A usable stored sign-in: the access token the CLI last saved for one origin. */\nexport interface CliLogin {\n accessToken: string;\n /** Epoch milliseconds when the access token expires, when the CLI recorded it. */\n expiresAt?: number;\n}\n\ninterface NodeFs {\n readFileSync(path: string, encoding: \"utf8\"): string;\n existsSync(path: string): boolean;\n}\n\ninterface NodeOs {\n homedir(): string;\n}\n\nfunction builtin<T>(id: string): T | undefined {\n return nodeBuiltinSync<T>(id);\n}\n\n/**\n * Make the synchronous file reads here work on Node without\n * `process.getBuiltinModule` (Node 18, Node 20 before 20.16). A no-op elsewhere.\n */\nexport function prepareCliLoginFiles(): Promise<void> {\n return preloadNodeBuiltins([\"node:fs\", \"node:os\"]);\n}\n\nfunction env(name: string): string | undefined {\n const proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n const value = proc?.env?.[name];\n return value === undefined || value === \"\" ? undefined : value;\n}\n\n/** `$BEAKR_HOME`, else `~/.beakr`; undefined without file access. */\nexport function beakrHome(): string | undefined {\n const override = env(\"BEAKR_HOME\");\n if (override) return override;\n const home = builtin<NodeOs>(\"node:os\")?.homedir();\n return home ? `${home.replace(/[\\\\/]+$/, \"\")}/.beakr` : undefined;\n}\n\nfunction readJson(name: string): unknown {\n const home = beakrHome();\n const fs = builtin<NodeFs>(\"node:fs\");\n if (!home || !fs) return undefined;\n try {\n return JSON.parse(fs.readFileSync(`${home}/${name}`, \"utf8\"));\n } catch {\n return undefined;\n }\n}\n\n/** An origin to compare by, or undefined for a value that is not a URL. */\nfunction originOf(url: string): string | undefined {\n try {\n return normalizeOrigin(url);\n } catch {\n return undefined;\n }\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\n/** The CLI's `config.json` (empty when absent or unreadable). */\nfunction cliConfig(): Record<string, unknown> {\n return record(readJson(\"config.json\")) ?? {};\n}\n\n/** The API the CLI is configured for: `BEAKR_BASE_URL`, `BEAKR_API_URL`, the config, then production. */\nfunction configuredBaseUrl(): string {\n const configured = cliConfig()[\"api_url\"];\n return env(\"BEAKR_BASE_URL\") ?? env(\"BEAKR_API_URL\") ?? (typeof configured === \"string\" && configured ? configured : DEFAULT_BASE_URL);\n}\n\nfunction loginFrom(entry: unknown): (CliLogin & { baseUrl?: string }) | undefined {\n const data = record(entry);\n const accessToken = data?.[\"access_token\"];\n if (typeof accessToken !== \"string\" || !accessToken) return undefined;\n const login: CliLogin & { baseUrl?: string } = { accessToken };\n const expiresAt = data?.[\"expires_at\"];\n if (typeof expiresAt === \"number\") login.expiresAt = expiresAt * 1000;\n const baseUrl = data?.[\"base_url\"];\n if (typeof baseUrl === \"string\" && baseUrl) login.baseUrl = baseUrl;\n return login;\n}\n\n/**\n * Origins a logout recorded while the stored logins could not be rewritten\n * (`credentials.barriers`, `{origin: {nonce, at}}`). A stored copy keeps such\n * an origin's login only when it declares it was written after that barrier.\n */\nfunction originBarriers(): Record<string, string> {\n const barriers: Record<string, string> = {};\n for (const [origin, barrier] of Object.entries(record(readJson(\"credentials.barriers\")) ?? {})) {\n const nonce = record(barrier)?.[\"nonce\"];\n if (typeof nonce === \"string\") barriers[origin] = nonce;\n }\n return barriers;\n}\n\n/** The CLI's sign-in for `origin` from `credentials`, or undefined. */\nexport function readCliLogin(origin: string): CliLogin | undefined {\n const data = record(readJson(\"credentials\"));\n if (!data) return undefined;\n const wanted = originOf(origin);\n if (!wanted) return undefined;\n let found: CliLogin | undefined;\n const logins = record(data[\"logins\"]);\n if (logins) {\n for (const [stored, entry] of Object.entries(logins)) {\n if (originOf(stored) === wanted) found = loginFrom(entry);\n }\n } else if (!(\"logins\" in data)) {\n // A version-1 payload: one bare pair, filed under the origin it records\n // or, recording none, under the configured API.\n const legacy = loginFrom(data);\n if (legacy && originOf(legacy.baseUrl ?? configuredBaseUrl()) === wanted) found = legacy;\n }\n if (!found) return undefined;\n const barrier = originBarriers()[wanted];\n if (barrier !== undefined && record(data[\"origin_after\"])?.[wanted] !== barrier) return undefined;\n return { accessToken: found.accessToken, ...(found.expiresAt !== undefined ? { expiresAt: found.expiresAt } : {}) };\n}\n\n/** Whether the stored access token is past (or within the CLI's skew of) its expiry. */\nexport function cliLoginExpired(login: CliLogin, now = Date.now()): boolean {\n return login.expiresAt !== undefined && now >= login.expiresAt - REFRESH_SKEW_SECONDS * 1000;\n}\n\n/** The API key saved by `beakr auth login --with-api-key`, when it was saved for `origin`. */\nexport function readCliSavedKey(origin: string): string | undefined {\n const config = cliConfig();\n const key = config[\"api_key\"];\n if (typeof key !== \"string\" || !key) return undefined;\n const apiUrl = typeof config[\"api_url\"] === \"string\" && config[\"api_url\"] ? config[\"api_url\"] : DEFAULT_BASE_URL;\n const wanted = originOf(origin);\n return wanted !== undefined && originOf(apiUrl) === wanted ? key : undefined;\n}\n\n/** `~/.beakr/service-account.json` when it exists (the chain's default service account file). */\nexport function defaultServiceAccountFile(): string | undefined {\n const home = beakrHome();\n const fs = builtin<NodeFs>(\"node:fs\");\n if (!home || !fs) return undefined;\n const path = `${home}/service-account.json`;\n try {\n return fs.existsSync(path) ? path : undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * SHA-256 of a Blob, read as a stream, as hex: the ``content_hash`` an upload\n * declares (Python's ``hashlib.sha256``, read in blocks).\n *\n * Web Crypto has no incremental digest, and hashing a multipart-sized file\n * through ``crypto.subtle.digest`` would hold all of it in memory. Node uses\n * its own streaming hash (loaded lazily, so edge bundles never import it);\n * other runtimes use the small incremental implementation below.\n */\n\nimport { nodeBuiltin } from \"./node-builtins.js\";\n\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\n/** Incremental SHA-256 (FIPS 180-4) for runtimes without a streaming digest. */\nexport class Sha256 {\n private readonly state = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ]);\n private readonly block = new Uint8Array(64);\n private readonly words = new Uint32Array(64);\n private buffered = 0;\n private length = 0;\n\n update(data: Uint8Array): this {\n let offset = 0;\n this.length += data.length;\n if (this.buffered > 0) {\n const take = Math.min(64 - this.buffered, data.length);\n this.block.set(data.subarray(0, take), this.buffered);\n this.buffered += take;\n offset = take;\n if (this.buffered < 64) return this;\n this.compress(this.block, 0);\n this.buffered = 0;\n }\n for (; offset + 64 <= data.length; offset += 64) this.compress(data, offset);\n if (offset < data.length) {\n this.block.set(data.subarray(offset), 0);\n this.buffered = data.length - offset;\n }\n return this;\n }\n\n hex(): string {\n const bits = this.length * 8;\n const tail = new Uint8Array(this.buffered < 56 ? 64 : 128);\n tail.set(this.block.subarray(0, this.buffered));\n tail[this.buffered] = 0x80;\n const view = new DataView(tail.buffer);\n view.setUint32(tail.length - 8, Math.floor(bits / 0x100000000));\n view.setUint32(tail.length - 4, bits >>> 0);\n for (let offset = 0; offset < tail.length; offset += 64) this.compress(tail, offset);\n return Array.from(this.state, (word) => word.toString(16).padStart(8, \"0\")).join(\"\");\n }\n\n private compress(data: Uint8Array, offset: number): void {\n const w = this.words;\n for (let i = 0; i < 16; i += 1) {\n const j = offset + i * 4;\n w[i] = ((data[j]! << 24) | (data[j + 1]! << 16) | (data[j + 2]! << 8) | data[j + 3]!) >>> 0;\n }\n for (let i = 16; i < 64; i += 1) {\n const a = w[i - 15]!;\n const b = w[i - 2]!;\n const s0 = ((a >>> 7) | (a << 25)) ^ ((a >>> 18) | (a << 14)) ^ (a >>> 3);\n const s1 = ((b >>> 17) | (b << 15)) ^ ((b >>> 19) | (b << 13)) ^ (b >>> 10);\n w[i] = (w[i - 16]! + s0 + w[i - 7]! + s1) >>> 0;\n }\n let [a, b, c, d, e, f, g, h] = this.state as unknown as number[];\n for (let i = 0; i < 64; i += 1) {\n const S1 = ((e! >>> 6) | (e! << 26)) ^ ((e! >>> 11) | (e! << 21)) ^ ((e! >>> 25) | (e! << 7));\n const ch = (e! & f!) ^ (~e! & g!);\n const t1 = (h! + S1 + ch + K[i]! + w[i]!) >>> 0;\n const S0 = ((a! >>> 2) | (a! << 30)) ^ ((a! >>> 13) | (a! << 19)) ^ ((a! >>> 22) | (a! << 10));\n const maj = (a! & b!) ^ (a! & c!) ^ (b! & c!);\n const t2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d! + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) >>> 0;\n }\n const s = this.state;\n s[0] = (s[0]! + a!) >>> 0;\n s[1] = (s[1]! + b!) >>> 0;\n s[2] = (s[2]! + c!) >>> 0;\n s[3] = (s[3]! + d!) >>> 0;\n s[4] = (s[4]! + e!) >>> 0;\n s[5] = (s[5]! + f!) >>> 0;\n s[6] = (s[6]! + g!) >>> 0;\n s[7] = (s[7]! + h!) >>> 0;\n }\n}\n\nasync function* chunks(blob: Blob): AsyncGenerator<Uint8Array> {\n const reader = blob.stream().getReader();\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) return;\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nasync function nodeHash(): Promise<{ update(data: Uint8Array): void; digest(enc: \"hex\"): string } | null> {\n if (typeof process === \"undefined\" || !process.versions?.node) return null;\n try {\n const crypto = await nodeBuiltin<typeof import(\"node:crypto\")>(\"node:crypto\");\n return crypto.createHash(\"sha256\");\n } catch {\n return null;\n }\n}\n\n/** Hex SHA-256 of ``blob``, read as a stream. */\nexport async function sha256Hex(blob: Blob): Promise<string> {\n const node = await nodeHash();\n if (node) {\n for await (const chunk of chunks(blob)) node.update(chunk);\n return node.digest(\"hex\");\n }\n const hash = new Sha256();\n for await (const chunk of chunks(blob)) hash.update(chunk);\n return hash.hex();\n}\n","/**\n * The Beakr CLI's sign-in, asked of the CLI itself (`beakr auth token --json`).\n *\n * The credentials file (`cli-login.ts`) is the fast path, but it cannot serve\n * every login: the CLI keeps the login in the OS keychain when one is\n * available, and an expired login has to be refreshed under the CLI's\n * cross-process lock, which Node cannot take. For both, the SDK runs the\n * installed CLI, which reads the keychain or the file exactly as every `beakr`\n * command does and refreshes through its own locked path. The SDK therefore\n * never rotates the stored pair and never sees a refresh token, so it cannot\n * spend one twice or bring back a login `beakr auth logout` cleared.\n *\n * Node.js only. `node:child_process` is loaded when the CLI is first run, never\n * at import time, so the module bundles for browsers and edge runtimes, where\n * `runCliToken` reports the CLI as unavailable without trying.\n */\n\nimport type { CliLogin } from \"./cli-login.js\";\nimport { isNodeRuntime, nodeBuiltin } from \"./node-builtins.js\";\nimport { Sha256 } from \"./sha256.js\";\n\n/** Long enough for the CLI to wait out another process's refresh (its lock times out at 60s). */\nconst CLI_TIMEOUT_MS = 90_000;\n\n/** What running the CLI produced. `notFound` when the executable is not installed. */\nexport interface CliRunResult {\n exitCode: number | null;\n stdout: string;\n stderr: string;\n notFound?: boolean;\n}\n\n/** Runs `beakr` with `args` and collects its output. Injectable for tests. */\nexport type CliRunner = (args: readonly string[], options: { timeoutMs: number }) => Promise<CliRunResult>;\n\n/** A token the CLI handed out. `source` is the CLI's credential source (`cli_tokens` for a sign-in). */\nexport interface CliToken extends CliLogin {\n source: string;\n}\n\nexport type CliTokenOutcome =\n | { ok: true; token: CliToken }\n | {\n ok: false;\n /**\n * `unavailable`: no CLI to ask (not installed, too old for `auth token`,\n * or not Node.js). `unauthenticated`: the CLI has no credential for this\n * API, or its sign-in could not be refreshed. `failed`: anything else.\n */\n reason: \"unavailable\" | \"unauthenticated\" | \"failed\";\n code?: string;\n message: string;\n };\n\ninterface ChildProcessModule {\n execFile(\n file: string,\n args: readonly string[],\n options: { timeout: number; windowsHide: boolean; maxBuffer: number; env?: Record<string, string | undefined> },\n callback: (error: (Error & { code?: unknown }) | null, stdout: string, stderr: string) => void,\n ): unknown;\n}\n\nlet runnerOverride: CliRunner | undefined;\n\n/**\n * Replace how the CLI is run (tests), or restore the default with no argument.\n * Not part of the public API.\n */\nexport function setCliRunner(runner?: CliRunner): void {\n runnerOverride = runner;\n}\n\nfunction env(name: string): string | undefined {\n const proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n const value = proc?.env?.[name];\n return value === undefined || value === \"\" ? undefined : value;\n}\n\n/** Run the installed CLI: `BEAKR_CLI_PATH`, else `beakr` on the PATH. */\nconst defaultRunner: CliRunner = async (args, { timeoutMs }) => {\n const childProcess = await nodeBuiltin<ChildProcessModule>(\"node:child_process\");\n const executable = env(\"BEAKR_CLI_PATH\") ?? \"beakr\";\n return new Promise<CliRunResult>((resolve) => {\n childProcess.execFile(\n executable,\n args,\n { timeout: timeoutMs, windowsHide: true, maxBuffer: 1024 * 1024 },\n (error, stdout, stderr) => {\n if (error && error.code === \"ENOENT\") {\n resolve({ exitCode: null, stdout: \"\", stderr: String(stderr ?? \"\"), notFound: true });\n return;\n }\n const exitCode = error ? (typeof error.code === \"number\" ? error.code : null) : 0;\n resolve({ exitCode, stdout: String(stdout ?? \"\"), stderr: String(stderr ?? \"\") });\n },\n );\n });\n};\n\n/** Hex SHA-256 of a token, so a refused token is named without putting it on a command line. */\nexport function tokenDigest(token: string): string {\n return new Sha256().update(new TextEncoder().encode(token)).hex();\n}\n\nfunction parseJson(text: string): Record<string, unknown> | undefined {\n try {\n const value: unknown = JSON.parse(text);\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Ask the CLI for the access token for `baseUrl`, refreshed if it was about to\n * expire. With `rejectedToken` (a token the API just refused), the CLI\n * refreshes the sign-in if that token is still the stored one, and otherwise\n * returns the newer token another process already saved.\n */\nexport async function runCliToken(baseUrl: string, options: { rejectedToken?: string } = {}): Promise<CliTokenOutcome> {\n const runner = runnerOverride ?? (isNodeRuntime() ? defaultRunner : undefined);\n if (!runner) return { ok: false, reason: \"unavailable\", message: \"The Beakr CLI can only be run from Node.js.\" };\n const args = [\"auth\", \"token\", \"--json\", \"--api-url\", baseUrl];\n if (options.rejectedToken !== undefined) args.push(\"--rejected-sha256\", tokenDigest(options.rejectedToken));\n let result: CliRunResult;\n try {\n result = await runner(args, { timeoutMs: CLI_TIMEOUT_MS });\n } catch (error) {\n return { ok: false, reason: \"unavailable\", message: `Could not run the Beakr CLI: ${String(error)}` };\n }\n if (result.notFound) {\n return { ok: false, reason: \"unavailable\", message: \"The Beakr CLI (`beakr`) is not installed or not on the PATH.\" };\n }\n const body = parseJson(result.stdout);\n if (result.exitCode === 0) {\n const accessToken = body?.[\"access_token\"];\n if (typeof accessToken !== \"string\" || !accessToken) {\n return { ok: false, reason: \"failed\", message: \"`beakr auth token` printed no access token.\" };\n }\n const token: CliToken = { accessToken, source: typeof body?.[\"source\"] === \"string\" ? (body[\"source\"] as string) : \"cli\" };\n const expiresAt = body?.[\"expires_at\"];\n if (typeof expiresAt === \"number\") token.expiresAt = expiresAt * 1000;\n return { ok: true, token };\n }\n const error = body?.[\"error\"] as { code?: unknown; message?: unknown } | undefined;\n const code = typeof error?.code === \"string\" ? error.code : undefined;\n const message = typeof error?.message === \"string\" ? error.message : result.stderr.trim() || \"no output\";\n if (result.exitCode === 3) return { ok: false, reason: \"unauthenticated\", ...(code ? { code } : {}), message };\n if (!error) {\n // A CLI from before `beakr auth token` exits 2 with a usage error.\n return { ok: false, reason: \"unavailable\", message: `The installed Beakr CLI cannot hand out a token (${message}); run \\`beakr update\\`.` };\n }\n return { ok: false, reason: \"failed\", ...(code ? { code } : {}), message };\n}\n","/**\n * Keep secrets out of what a client prints of itself.\n *\n * Mirrors the Python SDK's `mask`: a secret keeps only its kind (`bk_live_`)\n * and at most its last four characters (`bk_live_...a1b2`). A short secret is\n * masked whole.\n */\n\n/** Prefixes of Beakr secrets; kept in a masked value because they name its kind. */\nconst SECRET_PREFIXES = [\"bk_live_\", \"bk_test_\", \"bk_at_\", \"bk_rt_\"] as const;\n\n/** A secret shorter than this past its prefix is masked whole. */\nconst MIN_TAIL_LENGTH = 16;\n\n/** `bk_live_...a1b2` for `bk_live_<secret>a1b2`; `undefined` and `\"\"` unchanged. */\nexport function maskSecret(secret: string | undefined): string | undefined {\n if (!secret) return secret;\n const prefix = SECRET_PREFIXES.find((candidate) => secret.startsWith(candidate)) ?? \"\";\n const body = secret.slice(prefix.length);\n if (body.length < MIN_TAIL_LENGTH) return `${prefix}***`;\n return `${prefix}...${body.slice(-4)}`;\n}\n","/**\n * Which documented creates replay a resend that carries the same `Idempotency-Key`.\n *\n * The engine guarantees (developer platform W1.2) that a create retried with\n * the same key and body yields exactly one resource and the original response,\n * even when the first attempt failed after committing. Its test\n * `tests/api/test_public_create_idempotency.py` classifies every public POST as\n * a keyed create or as a POST that is not a create; only the keyed creates of\n * the documented contract are listed here, as this package sends no other\n * route. The Python SDK (beakr-python) carries the same list\n * (`beakr_sdk/_replay.py`), and its `tests/test_replaying_creates.py` compares\n * both with the engine.\n *\n * A POST that is not listed (a decision such as `accept`, a token exchange, a\n * read with a body) is not resent after an ambiguous failure: some are refused\n * on a repeat, and a token refresh resent with the same refresh token is\n * treated as theft and revokes the session.\n *\n * The public contract does not yet mark these operations, so the list is\n * curated from the engine's classification rather than generated.\n */\n\n/** POST path templates whose handler replays a keyed resend (canonical paths and their aliases). */\nexport const REPLAYING_CREATES: readonly string[] = [\n \"/v1/bulk/complete\",\n \"/v1/conversations/import\",\n \"/v1/folders\",\n \"/v1/interview/links\",\n \"/v1/interview/sendables\",\n \"/v1/interview/sendables/{sendable_id}/links\",\n \"/v1/knowledge/wiki/write\",\n \"/v1/labels\",\n \"/v1/labels/{label_id}/members\",\n \"/v1/labels/{label_id}/projects\",\n \"/v1/me/api-keys\",\n \"/v1/organizations/{org_id}/external-users\",\n \"/v1/organizations/{org_id}/members\",\n \"/v1/organizations/{org_id}/service-accounts\",\n \"/v1/organizations/{org_id}/service-accounts/{account_id}/keys\",\n \"/v1/projects\",\n \"/v1/projects/{project_id}/invite\",\n \"/v1/projects/{project_id}/members\",\n \"/v1/runs\",\n \"/v1/skills\",\n \"/v1/uploads\",\n \"/v1/uploads/{upload_id}/complete\",\n];\n\n/**\n * Conflict codes a keyed create answers while an earlier attempt with the same\n * key still holds the claim (or was taken over). Both mean \"retry to receive\n * the result\" and carry `Retry-After`.\n */\nexport const IDEMPOTENCY_RETRY_CODES: ReadonlySet<string> = new Set([\n \"idempotency_in_progress\",\n \"idempotency_superseded\",\n]);\n\nfunction escapeRegExp(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst PATTERNS = REPLAYING_CREATES.map(\n (template) => new RegExp(`^${template.split(/\\{[^}]+\\}/).map(escapeRegExp).join(\"[^/]+\")}/?$`),\n);\n\n/** Whether a keyed `method path` (a concrete path, no query) replays a resend. */\nexport function replaysIdempotencyKey(method: string, path: string): boolean {\n if (method.toUpperCase() !== \"POST\") return false;\n const bare = path.split(\"?\", 1)[0]!;\n return PATTERNS.some((pattern) => pattern.test(bare));\n}\n","export const VERSION = \"0.1.1\";\n","/**\n * The transport: request building, credentials, retries, token refresh and\n * pagination. Resources describe requests; this sends them.\n *\n * Retry policy (same as the Python SDK; spec W6.1.3, \"429 and 5xx\"):\n * - 429 is retried for every method: the server refused before doing the work;\n * except `credits_exhausted` and `quota_exceeded`, which no retry soon can fix.\n * - 500, 502, 503, 504 and connection errors are retried only when a resend\n * cannot duplicate an effect: GET, HEAD, PUT, DELETE, a create the engine\n * replays on its Idempotency-Key (`replay.ts`; the same key is resent), or a\n * route that deduplicates resends itself. Any other POST is not resent after\n * an ambiguous failure. 501 and 505 are never retried.\n * - A keyed create's 409 `idempotency_in_progress` / `idempotency_superseded`\n * (an earlier attempt still holds the key) is waited out the same way.\n * - `Retry-After` (seconds or an HTTP-date) is honored up to 60 seconds; beyond\n * that the error is returned.\n * - Other 4xx are never retried.\n */\nimport {\n APIConnectionError,\n AuthenticationError,\n BeakrError,\n errorFromResponse,\n isHtmlPage,\n parseRetryAfter,\n unexpectedPageError,\n} from \"./errors.js\";\nimport {\n type CliLogin,\n cliLoginExpired,\n defaultServiceAccountFile,\n prepareCliLoginFiles,\n readCliLogin,\n readCliSavedKey,\n} from \"./cli-login.js\";\nimport { type CliTokenOutcome, runCliToken } from \"./cli-token.js\";\nimport { isNodeRuntime, nodeBuiltinSync } from \"./node-builtins.js\";\nimport {\n normalizeOrigin,\n readServiceAccountFile,\n SERVICE_ACCOUNT_FILE_ENV,\n type ServiceAccountCredentials,\n} from \"./service-account.js\";\nimport { maskSecret } from \"./redact.js\";\nimport { IDEMPOTENCY_RETRY_CODES, replaysIdempotencyKey } from \"./replay.js\";\nimport type { Page } from \"./types.js\";\nimport { VERSION } from \"./version.js\";\n\nexport const DEFAULT_BASE_URL = \"https://api.thebeakr.com\";\nexport const DEFAULT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_MAX_RETRIES = 2;\nconst RETRY_STATUSES = new Set([429, 500, 502, 503, 504]);\n/** 429 refusals that waiting a few seconds cannot fix (out of credits, quota spent). */\nconst NOT_RETRIED_429_CODES = new Set([\"credits_exhausted\", \"quota_exceeded\"]);\nconst RETRY_SAFE_METHODS = new Set([\"GET\", \"HEAD\", \"PUT\", \"DELETE\", \"OPTIONS\"]);\nconst BACKOFF_BASE_MS = 500;\nconst BACKOFF_CAP_MS = 8_000;\nconst MAX_RETRY_AFTER_SECONDS = 60;\nconst REFRESH_SKEW_MS = 30_000;\n\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\n/** An OAuth access/refresh pair (the Beakr CLI's sign-in, or one your app obtained). */\nexport interface TokenPair {\n accessToken: string;\n refreshToken?: string;\n /** Epoch milliseconds when the access token expires. */\n expiresAt?: number;\n /**\n * The OAuth issuer's token endpoint the pair refreshes at, and the public\n * client id it was issued to. A pair without them is not refreshed: a 401\n * surfaces as AuthenticationError.\n */\n tokenEndpoint?: string;\n clientId?: string;\n}\n\n/**\n * Where a client's credential comes from, first match wins (the Python SDK's\n * order, spec W6.1.4):\n *\n * 1. `apiKey` or `tokens` passed to the client (an explicit `apiKey: \"\"` ends\n * the chain with no credential);\n * 2. `BEAKR_API_KEY`;\n * 3. `serviceAccount` passed to the client (TypeScript only: an explicit\n * choice outranks a stored one);\n * 4. the Beakr CLI's sign-in for this API (Node.js): from\n * `~/.beakr/credentials` when it holds a current one, else from the\n * installed CLI (`beakr auth token --json`), which reads the OS keychain\n * and refreshes an expired login under its own lock (`cli-token.ts`);\n * 5. the API key saved by `beakr auth login --with-api-key`, when saved for this API;\n * 6. the service account file named by `BEAKR_SERVICE_ACCOUNT_FILE`, else\n * `~/.beakr/service-account.json` when it exists.\n *\n * Links 4 to 6 read files (and may run the CLI); they are resolved at the\n * first request, and skipped in runtimes without file access. `cliLogin: false`\n * skips 4 and 5.\n */\nexport interface ClientOptions {\n /** An API key (`bk_live_...`). Defaults to `BEAKR_API_KEY` when a process env exists. */\n apiKey?: string;\n /** An OAuth token pair. Refreshed at its `tokenEndpoint` before expiry and on a 401. */\n tokens?: TokenPair;\n /**\n * A service account's credentials, parsed or as a file path. Used only when\n * no `apiKey`, `tokens` or `BEAKR_API_KEY` is set. Without it, the file named\n * by `BEAKR_SERVICE_ACCOUNT_FILE` (or `~/.beakr/service-account.json`) is used\n * after the CLI's stored sign-in. A file bound to another API is refused.\n */\n serviceAccount?: ServiceAccountCredentials | string;\n /**\n * Use the Beakr CLI's stored sign-in (`beakr auth login`) for this API when no\n * explicit credential, `BEAKR_API_KEY` or `serviceAccount` is given: the\n * credentials file, else the installed CLI (`BEAKR_CLI_PATH`, else `beakr` on\n * the PATH), which also covers a login kept in the OS keychain and refreshes\n * an expired one. Node.js only; default true.\n */\n cliLogin?: boolean;\n /** Called with every rotated token pair; persist it, the old refresh token is dead. */\n onTokens?: (tokens: TokenPair) => void | Promise<void>;\n /**\n * Defaults to `BEAKR_BASE_URL`, then `BEAKR_API_URL` (the name the CLI and\n * the Python SDK also read, in the same order), then https://api.thebeakr.com.\n */\n baseUrl?: string;\n /** Sent as `X-Beakr-Client` (attribution only). */\n clientName?: string;\n /** Sent as `X-Beakr-Agent` (attribution only). */\n agent?: string;\n /** Sent as `X-Org-Id` to select an organization for session-like credentials. */\n orgId?: string;\n timeoutMs?: number;\n maxRetries?: number;\n defaultHeaders?: Record<string, string>;\n /** Injectable for tests and custom runtimes. Defaults to global `fetch`. */\n fetch?: FetchLike;\n /** Injectable for tests. */\n sleep?: (ms: number) => Promise<void>;\n /**\n * Injectable for tests: the clock (epoch milliseconds) an HTTP-date\n * `Retry-After` is measured from. Defaults to `Date.now`.\n */\n now?: () => number;\n}\n\nexport type QueryValue = string | number | boolean | null | undefined | readonly string[];\n\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n path: string;\n query?: Record<string, QueryValue>;\n /** A JSON value, or a `FormData` sent as multipart (fetch sets its boundary). */\n body?: unknown;\n /** Send the credential (off for anonymous routes). */\n authenticated?: boolean;\n /** Attach an `Idempotency-Key`, stable across this call's retries. */\n idempotent?: boolean;\n /** Use this key instead of a fresh one, so the caller's own retries replay too. */\n idempotencyKey?: string;\n /** The route deduplicates a resend itself, so ambiguous failures may be retried. */\n serverDeduplicated?: boolean;\n /** How to decode a success body. */\n responseType?: \"json\" | \"text\" | \"bytes\" | \"none\";\n headers?: Record<string, string>;\n signal?: AbortSignal;\n /**\n * Wait at least this long for the response, even when the client's own\n * timeout is shorter (a route that is slow by design, like research).\n */\n minTimeoutMs?: number;\n /**\n * Told the status and request id of the successful response, before its body\n * is decoded: for a route that reports a refusal inside a 200 body (the\n * Knowledge door), so the error built from that body can name both.\n */\n onResponse?: (meta: ResponseMeta) => void;\n}\n\n/** What a successful response said about itself, for {@link RequestOptions.onResponse}. */\nexport interface ResponseMeta {\n status: number;\n requestId: string | undefined;\n}\n\nfunction env(name: string): string | undefined {\n const proc = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process;\n const value = proc?.env?.[name];\n return value === undefined || value === \"\" ? undefined : value;\n}\n\nconst defaultSleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\nexport function buildQuery(query: Record<string, QueryValue> | undefined): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const item of value) params.append(key, item);\n } else {\n params.append(key, String(value));\n }\n }\n const text = params.toString();\n return text ? `?${text}` : \"\";\n}\n\nfunction isFormData(body: unknown): body is FormData {\n return typeof FormData !== \"undefined\" && body instanceof FormData;\n}\n\n/** A request body: multipart as is, anything else as JSON. */\nfunction encodeBody(body: unknown): BodyInit {\n return isFormData(body) ? body : JSON.stringify(body);\n}\n\n/** Drop undefined fields from a JSON body, so omitted options are not sent as null. */\nexport function cleanBody<T extends Record<string, unknown>>(body: T): Partial<T> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(body)) {\n if (value !== undefined) out[key] = value;\n }\n return out as Partial<T>;\n}\n\n/** Chain links that need file access, waiting for the first request. */\ninterface FileLinks {\n step: \"files\";\n serviceAccount: string | undefined;\n cliLogin: boolean;\n}\n\n/** The CLI's sign-in, to ask the CLI for (the file has none for this API, or an expired one). */\ninterface CliLinks {\n step: \"cli\";\n fileLoginExpired: boolean;\n}\n\ntype PendingLinks = FileLinks | CliLinks;\n\n/** Node's hook for `util.inspect` and `console.log`; a plain symbol everywhere else. */\nexport const INSPECT_CUSTOM = Symbol.for(\"nodejs.util.inspect.custom\");\n\n/** The parts of a transport that are safe to print. */\nexport interface TransportDescription {\n baseUrl: string;\n orgId: string | undefined;\n /** The credential in use, masked (`bk_live_...a1b2`), or \"unresolved\". */\n credential: string;\n}\n\nexport class Transport {\n readonly baseUrl: string;\n readonly clientName: string;\n readonly agent: string | undefined;\n orgId: string | undefined;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n // The credential lives in #private fields: a TypeScript `private` field is an\n // ordinary enumerable property, so `console.log(beakr)`, `util.inspect` and\n // `JSON.stringify` printed the full key. Inspection shows it masked instead.\n #apiKey: string | undefined;\n #tokens: TokenPair | undefined;\n /** The CLI's sign-in, when that is the credential (never refreshed here: the CLI refreshes it). */\n #cliLogin: CliLogin | undefined;\n /** Credential-chain links still to resolve at the first request (see `settleCredential`). */\n private pendingLinks: PendingLinks | undefined;\n private settling: Promise<void> | undefined;\n /** In-flight `beakr auth token` runs, keyed by the refused token (\"\" for none). */\n private readonly cliRuns = new Map<string, Promise<CliTokenOutcome>>();\n private readonly onTokens: ClientOptions[\"onTokens\"];\n /** May carry an `Authorization` header, so it is kept off the object like the key. */\n readonly #defaultHeaders: Record<string, string>;\n private readonly fetchImpl: FetchLike;\n private readonly sleep: (ms: number) => Promise<void>;\n private readonly now: () => number;\n private refreshing: Promise<void> | undefined;\n private activeOrg: Promise<string> | undefined;\n\n constructor(options: ClientOptions = {}) {\n this.baseUrl = (options.baseUrl ?? env(\"BEAKR_BASE_URL\") ?? env(\"BEAKR_API_URL\") ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n this.clientName = options.clientName ?? `sdk-typescript/${VERSION}`;\n this.agent = options.agent;\n this.orgId = options.orgId ?? env(\"BEAKR_ORG_ID\");\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxRetries = Math.max(0, options.maxRetries ?? DEFAULT_MAX_RETRIES);\n this.#tokens = options.tokens;\n this.#apiKey = options.tokens ? options.apiKey : this.resolveApiKey(options);\n this.onTokens = options.onTokens;\n this.#defaultHeaders = { ...(options.defaultHeaders ?? {}) };\n const globalFetch = (globalThis as { fetch?: FetchLike }).fetch;\n const fetchImpl = options.fetch ?? globalFetch?.bind(globalThis);\n if (!fetchImpl) throw new BeakrError(\"No fetch implementation available; pass `fetch`.\");\n this.fetchImpl = fetchImpl;\n this.sleep = options.sleep ?? defaultSleep;\n this.now = options.now ?? Date.now;\n }\n\n /**\n * Walk the credential chain (see `ClientOptions`) when no token pair is\n * given. Links that need files are resolved here when the runtime can read\n * them synchronously; on Node without `process.getBuiltinModule` they wait\n * for the first request, which loads `node:fs` first.\n */\n private resolveApiKey(options: ClientOptions): string | undefined {\n if (options.apiKey !== undefined) return options.apiKey;\n const envKey = env(\"BEAKR_API_KEY\");\n if (envKey !== undefined) return envKey;\n if (options.serviceAccount !== undefined && typeof options.serviceAccount !== \"string\") {\n return this.serviceAccountKey(options.serviceAccount);\n }\n const links: FileLinks = { step: \"files\", serviceAccount: options.serviceAccount, cliLogin: options.cliLogin !== false };\n if (isNodeRuntime() && nodeBuiltinSync(\"node:fs\") === undefined) {\n this.pendingLinks = links;\n return undefined;\n }\n return this.resolveFileLinks(links);\n }\n\n /**\n * Links 3 (a service account file path) to 6, with file access. Sets\n * `cliLogin` when the credentials file holds a current sign-in for this API,\n * and leaves the CLI to ask (`pendingLinks`) when it holds none or an expired\n * one: the login may be in the keychain, or need the CLI's locked refresh.\n */\n private resolveFileLinks(links: FileLinks): string | undefined {\n if (links.serviceAccount !== undefined) return this.serviceAccountKey(links.serviceAccount);\n if (!links.cliLogin) return this.serviceAccountKey(undefined);\n const login = readCliLogin(normalizeOrigin(this.baseUrl));\n if (login && !cliLoginExpired(login)) {\n this.#cliLogin = login;\n return undefined;\n }\n if (isNodeRuntime()) {\n this.pendingLinks = { step: \"cli\", fileLoginExpired: login !== undefined };\n return undefined;\n }\n return this.keyAfterCliLogin();\n }\n\n /** Links 5 and 6: the CLI's saved key for this API, then the service account file. */\n private keyAfterCliLogin(): string | undefined {\n const saved = readCliSavedKey(normalizeOrigin(this.baseUrl));\n if (saved !== undefined) return saved;\n return this.serviceAccountKey(undefined);\n }\n\n /** Finish the credential chain before the first authenticated request. */\n private async settleCredential(): Promise<void> {\n if (this.pendingLinks === undefined) return;\n this.settling ??= this.settleLinks().finally(() => {\n this.settling = undefined;\n });\n await this.settling;\n }\n\n /**\n * A link that fails is left pending, so the next request tries it again (the\n * CLI may be installed or signed in by then) and reports the same error.\n */\n private async settleLinks(): Promise<void> {\n for (let links = this.pendingLinks; links !== undefined; links = this.pendingLinks) {\n if (links.step === \"files\") {\n await prepareCliLoginFiles();\n const key = this.resolveFileLinks(links);\n if (this.pendingLinks === links) this.pendingLinks = undefined;\n this.#apiKey = key;\n continue;\n }\n const outcome = await this.askCli();\n if (outcome.ok) {\n this.#cliLogin = outcome.token;\n this.pendingLinks = undefined;\n return;\n }\n if (links.fileLoginExpired || outcome.reason === \"failed\") throw this.cliLoginError(outcome);\n // No CLI, or the CLI has no credential for this API: the rest of the chain.\n this.#apiKey = this.keyAfterCliLogin();\n this.pendingLinks = undefined;\n }\n }\n\n /** Run `beakr auth token` once at a time per refused token. */\n private askCli(rejectedToken?: string): Promise<CliTokenOutcome> {\n const key = rejectedToken ?? \"\";\n let run = this.cliRuns.get(key);\n if (!run) {\n run = runCliToken(this.baseUrl, rejectedToken !== undefined ? { rejectedToken } : {}).finally(() => {\n this.cliRuns.delete(key);\n });\n this.cliRuns.set(key, run);\n }\n return run;\n }\n\n /** The error for a CLI sign-in that is expired and that the CLI could not refresh. */\n private cliLoginError(outcome: Exclude<CliTokenOutcome, { ok: true }>): BeakrError {\n const origin = normalizeOrigin(this.baseUrl);\n if (outcome.reason === \"unavailable\") {\n return new AuthenticationError(\n `The Beakr CLI sign-in for ${origin} has expired, and the SDK refreshes it only through ` +\n `the CLI, which could not be run (${outcome.message}). Install the CLI or set ` +\n \"BEAKR_CLI_PATH, run `beakr auth token` to refresh it, or `beakr auth login`.\",\n { code: \"cli_login_expired\" },\n );\n }\n if (outcome.reason === \"unauthenticated\") {\n return new AuthenticationError(`The Beakr CLI sign-in for ${origin} is not usable: ${outcome.message}`, {\n code: outcome.code ?? \"cli_login_expired\",\n });\n }\n return new BeakrError(`The Beakr CLI could not provide a token for ${origin}: ${outcome.message}`, {\n code: outcome.code ?? \"cli_token_failed\",\n });\n }\n\n /**\n * The service-account link of the chain. A file named explicitly that cannot\n * be used fails here, at construction, not on the first request.\n */\n private serviceAccountKey(option: ClientOptions[\"serviceAccount\"]): string | undefined {\n const named = option ?? env(SERVICE_ACCOUNT_FILE_ENV) ?? defaultServiceAccountFile();\n if (named === undefined) return undefined;\n const account = typeof named === \"string\" ? readServiceAccountFile(named) : named;\n if (account.baseUrl && normalizeOrigin(account.baseUrl) !== normalizeOrigin(this.baseUrl)) {\n throw new AuthenticationError(\n `The service account key is for ${normalizeOrigin(account.baseUrl)}, not ` +\n `${normalizeOrigin(this.baseUrl)}; a key is only sent to the API that issued it.`,\n { code: \"unauthorized\" },\n );\n }\n return account.apiKey;\n }\n\n /** What the client may show of itself: where it talks to and its credential, masked. */\n describe(): TransportDescription {\n return {\n baseUrl: this.baseUrl,\n orgId: this.orgId,\n credential: maskSecret(this.#tokens?.accessToken ?? this.#apiKey ?? this.#cliLogin?.accessToken) ?? \"unresolved\",\n };\n }\n\n toJSON(): TransportDescription {\n return this.describe();\n }\n\n [INSPECT_CUSTOM](): string {\n return `Transport ${JSON.stringify(this.describe())}`;\n }\n\n /** The current token pair (after any refresh), when the client uses one. */\n get currentTokens(): TokenPair | undefined {\n return this.#tokens ? { ...this.#tokens } : undefined;\n }\n\n private authHeader(): Record<string, string> {\n const token = this.#tokens?.accessToken ?? this.#apiKey ?? this.#cliLogin?.accessToken;\n if (!token) {\n throw new AuthenticationError(\n \"No credential configured: pass `apiKey` or `tokens`, set BEAKR_API_KEY or \" +\n \"BEAKR_SERVICE_ACCOUNT_FILE, or sign in with `beakr auth login`.\",\n { code: \"no_credential\" },\n );\n }\n return { Authorization: `Bearer ${token}` };\n }\n\n private headersFor(options: RequestOptions, idempotencyKey: string | undefined): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n \"X-Beakr-Client\": this.clientName,\n ...this.#defaultHeaders,\n };\n if (this.agent) headers[\"X-Beakr-Agent\"] = this.agent;\n if (this.orgId) headers[\"X-Org-Id\"] = this.orgId;\n if (options.authenticated !== false) Object.assign(headers, this.authHeader());\n if (idempotencyKey) headers[\"Idempotency-Key\"] = idempotencyKey;\n if (options.body !== undefined && !isFormData(options.body)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n Object.assign(headers, options.headers ?? {});\n return headers;\n }\n\n /**\n * Before an authenticated request: finish the credential chain, then, on the\n * CLI's sign-in, replace an expired access token -- with a current one from\n * the credentials file when the CLI has already refreshed it, else by asking\n * the CLI, which refreshes it under its lock.\n */\n private async prepareCredential(options: RequestOptions): Promise<void> {\n if (options.authenticated === false) return;\n await this.settleCredential();\n if (!this.#cliLogin || !cliLoginExpired(this.#cliLogin)) return;\n const stored = readCliLogin(normalizeOrigin(this.baseUrl));\n if (stored && !cliLoginExpired(stored)) {\n this.#cliLogin = stored;\n return;\n }\n const outcome = await this.askCli();\n if (!outcome.ok) throw this.cliLoginError(outcome);\n this.#cliLogin = outcome.token;\n }\n\n /**\n * After a 401 on the CLI's sign-in: adopt a newer pair from the credentials\n * file, else ask the CLI, which refreshes the login if the refused token is\n * still the stored one. True when there is a different token to resend with.\n */\n private async recoverCliLogin(): Promise<boolean> {\n const current = this.#cliLogin;\n if (!current) return false;\n const stored = readCliLogin(normalizeOrigin(this.baseUrl));\n if (stored && stored.accessToken !== current.accessToken && !cliLoginExpired(stored)) {\n this.#cliLogin = stored;\n return true;\n }\n const outcome = await this.askCli(current.accessToken);\n if (!outcome.ok || outcome.token.accessToken === current.accessToken) return false;\n this.#cliLogin = outcome.token;\n return true;\n }\n\n private canRefresh(): boolean {\n return Boolean(this.#tokens?.refreshToken && this.#tokens.tokenEndpoint);\n }\n\n private needsProactiveRefresh(): boolean {\n const expiresAt = this.#tokens?.expiresAt;\n return this.canRefresh() && expiresAt !== undefined && Date.now() >= expiresAt - REFRESH_SKEW_MS;\n }\n\n /** Rotate the token pair once, even when several requests notice at the same time. */\n async refreshTokens(): Promise<void> {\n if (!this.refreshing) {\n this.refreshing = this.doRefresh().finally(() => {\n this.refreshing = undefined;\n });\n }\n return this.refreshing;\n }\n\n /** Refresh at the OAuth issuer's token endpoint (RFC 6749 section 6). */\n private async doRefresh(): Promise<void> {\n const previous = this.#tokens;\n if (!previous?.refreshToken || !previous.tokenEndpoint) {\n throw new AuthenticationError(\"No refresh token and token endpoint to refresh with.\");\n }\n const data = await this.postExternalForm<Record<string, unknown>>(previous.tokenEndpoint, {\n grant_type: \"refresh_token\",\n refresh_token: previous.refreshToken,\n client_id: previous.clientId ?? \"\",\n });\n this.#tokens = tokenPairFromResponse(data, previous);\n await this.onTokens?.({ ...this.#tokens });\n }\n\n /** Send a request, applying refresh and the retry policy. */\n async request<T = unknown>(options: RequestOptions): Promise<T> {\n return this.send<T>(options, { allowRefresh: true });\n }\n\n private async send<T>(options: RequestOptions, { allowRefresh }: { allowRefresh: boolean }): Promise<T> {\n if (allowRefresh && options.authenticated !== false && this.needsProactiveRefresh()) {\n await this.refreshTokens();\n }\n await this.prepareCredential(options);\n const idempotencyKey =\n options.idempotencyKey ?? (options.idempotent ? globalThis.crypto.randomUUID() : undefined);\n const replaysKey = idempotencyKey !== undefined && replaysIdempotencyKey(options.method, options.path);\n const retrySafe = options.serverDeduplicated || replaysKey || RETRY_SAFE_METHODS.has(options.method);\n let refreshed = false;\n let attempt = 0;\n\n for (;;) {\n const url = `${this.baseUrl}${options.path}${buildQuery(options.query)}`;\n const init: RequestInit = {\n method: options.method,\n headers: this.headersFor(options, idempotencyKey),\n };\n if (options.body !== undefined) init.body = encodeBody(options.body);\n const timeoutMs = Math.max(this.timeoutMs, options.minTimeoutMs ?? 0);\n init.signal = combineSignals(options.signal, AbortSignal.timeout(timeoutMs));\n\n let response: Response;\n try {\n response = await this.fetchImpl(url, init);\n } catch (cause) {\n if (options.signal?.aborted) throw cause;\n if (retrySafe && attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n attempt += 1;\n continue;\n }\n throw new APIConnectionError(`Could not reach ${this.baseUrl}: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n baseUrl: this.baseUrl,\n });\n }\n\n if (response.ok) {\n options.onResponse?.({\n status: response.status,\n requestId: response.headers.get(\"x-request-id\") ?? undefined,\n });\n return (await decode(response, options.responseType ?? \"json\", this.baseUrl)) as T;\n }\n\n const body = await readBody(response);\n if (\n response.status === 401 &&\n allowRefresh &&\n !refreshed &&\n options.authenticated !== false &&\n this.canRefresh()\n ) {\n refreshed = true;\n await this.refreshTokens();\n continue;\n }\n if (response.status === 401 && !refreshed && options.authenticated !== false && (await this.recoverCliLogin())) {\n refreshed = true;\n continue;\n }\n const keyStillHeld =\n response.status === 409 && replaysKey && IDEMPOTENCY_RETRY_CODES.has(errorCode(body) ?? \"\");\n if ((RETRY_STATUSES.has(response.status) || keyStillHeld) && attempt < this.maxRetries) {\n const retryable =\n (response.status === 429 && !NOT_RETRIED_429_CODES.has(errorCode(body) ?? \"\")) ||\n (response.status !== 429 && (keyStillHeld || retrySafe));\n const retryAfter = parseRetryAfter(response.headers.get(\"retry-after\"), this.now());\n if (retryable && (retryAfter === undefined || retryAfter <= MAX_RETRY_AFTER_SECONDS)) {\n await this.sleep(retryAfter !== undefined ? retryAfter * 1000 : backoffMs(attempt));\n attempt += 1;\n continue;\n }\n }\n throw errorFromResponse(response.status, response.headers, body, response.statusText, this.now(), this.baseUrl);\n }\n }\n\n /**\n * PUT bytes to a presigned storage URL (an upload part). No Beakr headers and\n * no credential are sent: the URL's signature is the authorization, and a\n * bearer token sent to a storage host is a leaked credential. A PUT is safe to\n * resend, so network failures and retryable statuses are retried. Returns the\n * response so the caller can read headers such as `ETag`.\n */\n /**\n * A form-encoded POST to a third-party OAuth endpoint (the issuer's token endpoint).\n * The issuer is not the Beakr API, so no Beakr headers or credential are\n * sent; the request authenticates with its own form fields. A refusal is\n * raised with the endpoint's body, whose RFC 6749 `error` names the reason.\n */\n async postExternalForm<T = unknown>(url: string, form: Record<string, string>): Promise<T> {\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\", Accept: \"application/json\" },\n body: new URLSearchParams(form),\n signal: AbortSignal.timeout(this.timeoutMs),\n });\n } catch (cause) {\n throw new APIConnectionError(`Could not reach the sign-in issuer: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n });\n }\n const body = await readBody(response);\n if (!response.ok) throw errorFromResponse(response.status, response.headers, body, response.statusText, this.now(), new URL(url).origin);\n return body as T;\n }\n\n /** GET bytes from a presigned storage URL, with no Beakr credential (retried like PUTs). */\n async getExternalBytes(url: string, options: { signal?: AbortSignal } = {}): Promise<Uint8Array> {\n for (let attempt = 0; ; attempt += 1) {\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"GET\",\n signal: combineSignals(options.signal, AbortSignal.timeout(this.timeoutMs)),\n });\n } catch (cause) {\n if (options.signal?.aborted) throw cause;\n if (attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw new APIConnectionError(`Could not reach the storage host: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n });\n }\n if (response.ok) return new Uint8Array(await response.arrayBuffer());\n if (RETRY_STATUSES.has(response.status) && attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw errorFromResponse(response.status, response.headers, await readBody(response), response.statusText, this.now());\n }\n }\n\n async putExternal(\n url: string,\n body: Uint8Array | Blob,\n options: { headers?: Record<string, string>; signal?: AbortSignal } = {},\n ): Promise<Response> {\n for (let attempt = 0; ; attempt += 1) {\n let response: Response;\n try {\n response = await this.fetchImpl(url, {\n method: \"PUT\",\n headers: options.headers ?? {},\n body: body as BodyInit,\n signal: combineSignals(options.signal, AbortSignal.timeout(this.timeoutMs)),\n });\n } catch (cause) {\n if (options.signal?.aborted) throw cause;\n if (attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw new APIConnectionError(`Could not reach the storage host: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n });\n }\n if (response.ok) return response;\n if (RETRY_STATUSES.has(response.status) && attempt < this.maxRetries) {\n await this.sleep(backoffMs(attempt));\n continue;\n }\n throw errorFromResponse(response.status, response.headers, await readBody(response), response.statusText, this.now());\n }\n }\n\n /**\n * One authenticated request whose body the caller reads itself (a stream).\n * No retries; a 401 is refreshed once when tokens allow. Non-2xx rejects.\n */\n async raw(options: RequestOptions): Promise<Response> {\n if (options.authenticated !== false && this.needsProactiveRefresh()) await this.refreshTokens();\n await this.prepareCredential(options);\n for (let refreshed = false; ; refreshed = true) {\n const init: RequestInit = { method: options.method, headers: this.headersFor(options, undefined) };\n if (options.body !== undefined) init.body = encodeBody(options.body);\n if (options.signal) init.signal = options.signal;\n let response: Response;\n try {\n response = await this.fetchImpl(`${this.baseUrl}${options.path}${buildQuery(options.query)}`, init);\n } catch (cause) {\n throw new APIConnectionError(`Could not reach ${this.baseUrl}: ${String(cause)}`, {\n code: \"connection_error\",\n cause,\n baseUrl: this.baseUrl,\n });\n }\n if (response.ok) return response;\n const body = await readBody(response);\n if (response.status === 401 && !refreshed && this.canRefresh()) {\n await this.refreshTokens();\n continue;\n }\n if (response.status === 401 && !refreshed && options.authenticated !== false && (await this.recoverCliLogin())) {\n continue;\n }\n throw errorFromResponse(response.status, response.headers, body, response.statusText, this.now(), this.baseUrl);\n }\n }\n\n /**\n * The org id for org-addressed routes: configured `orgId`, else the\n * caller's active org, looked up once and shared by every resource.\n */\n async resolveOrgId(): Promise<string> {\n if (this.orgId) return this.orgId;\n this.activeOrg ??= this.request<{ id?: unknown }>({ method: \"GET\", path: \"/v1/me/organization\" })\n .then((org) => {\n if (typeof org?.id !== \"string\" || !org.id) {\n throw new BeakrError(\"Could not determine the active organization.\", { code: \"no_active_org\", body: org });\n }\n return org.id;\n })\n .catch((error: unknown) => {\n // A failed lookup is not cached; the next call tries again.\n this.activeOrg = undefined;\n throw error;\n });\n return this.activeOrg;\n }\n\n /** Every item of a cursor-paginated list (`{data, next_cursor, has_more}`). */\n async *paginate<T>(options: RequestOptions, pageSize?: number): AsyncGenerator<T> {\n let cursor = options.query?.[\"cursor\"] as string | undefined;\n for (;;) {\n const query: Record<string, QueryValue> = { ...(options.query ?? {}), cursor };\n if (pageSize !== undefined) query[\"limit\"] = pageSize;\n const page = await this.request<Page<T> | T[]>({ ...options, query });\n if (Array.isArray(page)) {\n // An older route answering a bare list is one whole page.\n yield* page;\n return;\n }\n yield* page.data ?? [];\n if (!page.has_more || !page.next_cursor) return;\n cursor = page.next_cursor;\n }\n }\n\n get sleeper(): (ms: number) => Promise<void> {\n return this.sleep;\n }\n}\n\n/** Abort when either signal aborts. `AbortSignal.any` exists only from Node 20.3. */\nfunction combineSignals(caller: AbortSignal | undefined, timeout: AbortSignal): AbortSignal {\n if (!caller) return timeout;\n const any = (AbortSignal as { any?: (signals: AbortSignal[]) => AbortSignal }).any;\n if (any) return any([caller, timeout]);\n const controller = new AbortController();\n const abort = (signal: AbortSignal) => () => controller.abort(signal.reason);\n if (caller.aborted) controller.abort(caller.reason);\n caller.addEventListener(\"abort\", abort(caller), { once: true });\n timeout.addEventListener(\"abort\", abort(timeout), { once: true });\n return controller.signal;\n}\n\n/** Exponential backoff with full jitter: ~0.5s, 1s, 2s ... capped at 8s. */\nexport function backoffMs(attempt: number): number {\n const ceiling = Math.min(BACKOFF_CAP_MS, BACKOFF_BASE_MS * 2 ** attempt);\n return ceiling / 2 + Math.random() * (ceiling / 2);\n}\n\n/**\n * A pair from an OAuth token response. `previous` carries the refresh token\n * (an issuer may not rotate it) and where the pair refreshes.\n */\nexport function tokenPairFromResponse(data: Record<string, unknown>, previous?: TokenPair): TokenPair {\n const accessToken = data[\"access_token\"];\n if (typeof accessToken !== \"string\") {\n throw new AuthenticationError(\"Token response carried no access_token.\", { body: data });\n }\n const pair: TokenPair = { accessToken };\n const refresh = typeof data[\"refresh_token\"] === \"string\" ? data[\"refresh_token\"] : previous?.refreshToken;\n if (refresh) pair.refreshToken = refresh;\n if (previous?.tokenEndpoint) pair.tokenEndpoint = previous.tokenEndpoint;\n if (previous?.clientId) pair.clientId = previous.clientId;\n const expiresIn = data[\"expires_in\"];\n if (typeof expiresIn === \"number\") pair.expiresAt = Date.now() + expiresIn * 1000;\n return pair;\n}\n\n/** The error code of a refusal body: the envelope's, else a structured `detail`'s. */\nfunction errorCode(body: unknown): string | undefined {\n if (!body || typeof body !== \"object\") return undefined;\n const record = body as Record<string, unknown>;\n for (const holder of [record[\"error\"], record[\"detail\"]]) {\n if (holder && typeof holder === \"object\") {\n const code = (holder as Record<string, unknown>)[\"code\"];\n if (typeof code === \"string\") return code;\n }\n }\n return undefined;\n}\n\nasync function readBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nasync function decode(\n response: Response,\n type: NonNullable<RequestOptions[\"responseType\"]>,\n baseUrl: string,\n): Promise<unknown> {\n if (type === \"none\" || response.status === 204) return undefined;\n if (type === \"bytes\") return new Uint8Array(await response.arrayBuffer());\n if (type === \"text\") return response.text();\n // A JSON-typed call that receives a file (an older contract, or an\n // undeclared media type) must not be decoded as text: that corrupts bytes.\n const contentType = (response.headers.get(\"content-type\") ?? \"\").toLowerCase();\n if (contentType && !isTextual(contentType)) return new Uint8Array(await response.arrayBuffer());\n const body = await readBody(response);\n // An HTML page answering 200 for any path: the base URL is not a Beakr API.\n if (typeof body === \"string\" && isHtmlPage(contentType, body)) {\n throw unexpectedPageError(response.status, response.headers, body, baseUrl);\n }\n return body;\n}\n\nfunction isTextual(contentType: string): boolean {\n return (\n contentType.includes(\"json\") ||\n contentType.startsWith(\"text/\") ||\n contentType.includes(\"xml\") ||\n contentType.includes(\"x-www-form-urlencoded\")\n );\n}\n","/**\n * One URL path segment from a caller-supplied value (an ID, a slug).\n *\n * `encodeURIComponent` leaves `.` and `..` unchanged, and URL parsing then\n * normalises them away, so `projects.get(\"..\")` would silently call a\n * different route (audit C057). Those values, and an empty one, are refused\n * before any request is built; everything else is encoded as one segment.\n */\nexport function segment(value: string | number): string {\n const text = String(value);\n if (text === \"\" || text === \".\" || text === \"..\") {\n throw new TypeError(`Invalid path value ${JSON.stringify(text)}: it is not a resource identifier.`);\n }\n return encodeURIComponent(text);\n}\n\n/**\n * Whether a download destination names a directory: one that already exists,\n * or a path written with a trailing separator (`\"downloads/\"`), which says\n * \"a folder\" even before it exists. Without the second rule a missing\n * `\"downloads/\"` was written as a file named `downloads`.\n */\nexport function namesDirectory(destination: string, existsAsDirectory: boolean): boolean {\n return existsAsDirectory || destination.endsWith(\"/\") || destination.endsWith(\"\\\\\");\n}\n\n/**\n * One file or folder name taken from a server reply (a skill's slug, a file's\n * original name), made safe to join onto a local directory. Refused: empty,\n * `.`, `..`, any separator, a drive prefix (`C:`), a NUL byte. A server reply\n * is never trusted to name a path, so a hostile or corrupted one cannot write\n * outside the folder the caller chose.\n */\nexport function safePathComponent(value: unknown, what: string): string {\n const text = typeof value === \"string\" ? value : \"\";\n if (\n text === \"\" ||\n text === \".\" ||\n text === \"..\" ||\n /[\\\\/]/.test(text) ||\n text.includes(\"\\0\") ||\n /^[A-Za-z]:/.test(text)\n ) {\n throw new TypeError(`Refusing to write ${what} ${JSON.stringify(value)}: it is not a single file or folder name.`);\n }\n return text;\n}\n\n/**\n * Throw unless `target` resolves inside `root` (or is `root`). The second check\n * behind {@link safePathComponent}: it holds whatever the names were.\n */\nexport function assertInside(\n nodePath: typeof import(\"node:path\"),\n root: string,\n target: string,\n what: string,\n): void {\n const base = nodePath.resolve(root);\n const resolved = nodePath.resolve(target);\n if (resolved !== base && !resolved.startsWith(base + nodePath.sep)) {\n throw new TypeError(`Refusing to write ${what}: ${JSON.stringify(target)} leaves ${JSON.stringify(root)}.`);\n }\n}\n","import { segment } from \"../paths.js\";\nimport type { Transport } from \"../core.js\";\n\nexport abstract class Resource {\n constructor(protected readonly transport: Transport) {}\n}\n\n/** Org-addressed resources: an explicit org id, else the transport's shared resolution. */\nexport abstract class OrgScoped extends Resource {\n protected async orgBase(orgId?: string): Promise<string> {\n return `/v1/organizations/${segment(orgId ?? (await this.transport.resolveOrgId()))}`;\n }\n}\n\nexport const enc = segment;\n\n/**\n * The client a new key records: `explicit`, else this SDK's own name without\n * its version (`sdk-typescript/1.2.0` records `sdk-typescript`). The API\n * requires every key to record one and refuses a blank one.\n */\nexport function credentialClient(explicit: string | undefined, transportClient: string): string {\n const name = (explicit ?? transportClient.split(\"/\", 1)[0] ?? \"\").trim();\n if (!name) throw new TypeError(\"clientName must name the client the key is for\");\n return name;\n}\n","import { AnswerBuilder, TextStream, answerDelta, type Answer } from \"../answers.js\";\nimport { cleanBody } from \"../core.js\";\nimport { ValidationError } from \"../errors.js\";\nimport type { ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport interface RunEvent {\n type: string;\n event_id?: string;\n [key: string]: unknown;\n}\n\n/**\n * The events of a `text/event-stream` response, yielded as they arrive and\n * ending at `stream_complete`. Used by the generated streaming operations.\n */\nexport async function* eventStream(\n response: Response,\n): AsyncGenerator<RunEvent> {\n if (!response.body) return;\n for await (const event of parseSse(response.body)) {\n yield event;\n if (event.type === \"stream_complete\") return;\n }\n}\n\n/**\n * Parse a text/event-stream body into events (`data:` lines joined, `id:` kept).\n * `onId` hears every `id:` line, including an id sent with no data.\n * However iteration ends (the consumer stops, `stream_complete`, an error), the\n * HTTP body is cancelled unless it already ended and its reader is released.\n */\nexport async function* parseSse(\n body: ReadableStream<Uint8Array>,\n onId?: (id: string) => void,\n): AsyncGenerator<RunEvent> {\n const decoder = new TextDecoder();\n const reader = body.getReader();\n let buffer = \"\";\n let data: string[] = [];\n let eventName: string | undefined;\n let id: string | undefined;\n const flush = (): RunEvent | undefined => {\n if (data.length === 0) return undefined;\n const raw = data.join(\"\\n\");\n data = [];\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n parsed = { data: raw };\n }\n const event: RunEvent =\n parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? {\n type: eventName ?? \"message\",\n ...(parsed as Record<string, unknown>),\n }\n : { type: eventName ?? \"message\", data: parsed };\n if (id !== undefined) event.event_id = id;\n eventName = undefined;\n return event;\n };\n let finished = false;\n try {\n for (;;) {\n const { done, value } = await reader.read();\n buffer += done\n ? decoder.decode()\n : decoder.decode(value, { stream: true });\n let newline = buffer.search(/\\r?\\n/);\n while (newline >= 0) {\n const line = buffer.slice(0, newline);\n buffer = buffer.slice(\n buffer[newline] === \"\\r\" ? newline + 2 : newline + 1,\n );\n if (line === \"\") {\n const event = flush();\n if (event) yield event;\n } else if (!line.startsWith(\":\")) {\n const colon = line.indexOf(\":\");\n const field = colon < 0 ? line : line.slice(0, colon);\n const value =\n colon < 0 ? \"\" : line.slice(colon + 1).replace(/^ /, \"\");\n if (field === \"data\") data.push(value);\n else if (field === \"event\") eventName = value;\n else if (field === \"id\") {\n id = value;\n // An id with no data still moves the resume point (as EventSource does).\n onId?.(value);\n }\n }\n newline = buffer.search(/\\r?\\n/);\n }\n if (done) {\n finished = true;\n const event = flush();\n if (event) yield event;\n return;\n }\n }\n } finally {\n if (!finished) await reader.cancel().catch(() => undefined);\n reader.releaseLock();\n }\n}\n\nexport interface StartRunOptions {\n threadId?: string;\n projectId?: string;\n mode?: string;\n model?: string;\n timezone?: string;\n /**\n * Ids of files you can read, given to the agent the way files attached in\n * Beakr's chat are; the start fails with `not_found` if any is not readable.\n */\n files?: string[];\n /**\n * Let the agent read the organization's Knowledge (its wiki) while it\n * answers. The server treats a run that does not ask for it as one with\n * Knowledge turned off, so it is on unless `false`.\n */\n knowledge?: boolean;\n /** Deduplicates resends of the same start; generated when omitted. */\n idempotencyKey?: string;\n}\n\n/** What `runs.start()` returns: `run_id`, `thread_id`, `status`, `stream_url`, `status_url`, ... */\nexport type StartedRun = ResponseOf<\"/v1/runs\", \"post\">;\n\n/** A run as `runs.get()` reports it: `status`, and `answer` once completed or `question` while it waits. */\nexport type RunStatus = ResponseOf<\"/v1/runs/{run_id}\", \"get\">;\n\n/** One of the caller's threads, as `runs.threads()` lists it. */\nexport type ThreadSummary = ResponseOf<\"/v1/me/threads\", \"get\">[\"data\"][number];\n\n/** `runs.answer()`: the question plus the same options as `runs.start()`. */\nexport interface AnswerOptions extends StartRunOptions {\n question: string;\n signal?: AbortSignal;\n}\n\n/** Agent runs: start, follow, cancel. */\nexport class Runs extends Resource {\n /** Start a run (a new thread unless `threadId`). Returns `{run_id, thread_id, ...}`. */\n start(message: string, options: StartRunOptions = {}): Promise<StartedRun> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/runs\",\n // The route returns the existing run for the same body key, so resends are safe.\n serverDeduplicated: true,\n body: cleanBody({\n idempotency_key:\n options.idempotencyKey ??\n globalThis.crypto.randomUUID().replace(/-/g, \"\"),\n message,\n thread_id: options.threadId,\n home_project_id: options.projectId,\n scope: {\n knowledge_graph: options.knowledge ?? true,\n ...(options.projectId ? { projects: [{ id: options.projectId }] } : {}),\n },\n mode: options.mode,\n model: options.model,\n timezone: options.timezone,\n files: options.files?.length ? [...options.files] : undefined,\n }),\n });\n }\n\n /**\n * Ask the agent and wait for the whole answer:\n * `const { text, sources, run_id } = await beakr.runs.answer(\"question\", { projectId })`\n * (or `runs.answer({ question, projectId })`). An empty question throws\n * `ValidationError` without sending a request.\n * `text` shows each citation as the readable reference in parentheses\n * (`(memo.pdf › p. 7)`), as the engine renders it, and `sources` lists the\n * cited documents in order of first use as public source records. Throws\n * `RunFailedError` when the run ends `error`, `failed` or `cancelled`.\n */\n async answer(question: string, options?: Omit<AnswerOptions, \"question\">): Promise<Answer>;\n async answer(options: AnswerOptions): Promise<Answer>;\n async answer(\n questionOrOptions: string | AnswerOptions,\n maybeOptions: Omit<AnswerOptions, \"question\"> = {},\n ): Promise<Answer> {\n const { question, signal, ...start } =\n typeof questionOrOptions === \"string\"\n ? { ...maybeOptions, question: questionOrOptions }\n : questionOrOptions;\n if (typeof question !== \"string\" || !question.trim()) {\n // Refused here rather than sent: the API would answer 422 after a round trip.\n throw new ValidationError(\"runs.answer needs a non-empty question.\", { code: \"validation_error\" });\n }\n const run = await this.start(question, start);\n const runId = String(run.run_id);\n const builder = new AnswerBuilder(runId);\n for await (const event of this.stream(runId, signal ? { signal } : {})) builder.feed(event);\n // The run as the server reports it once the stream ends: its rendered\n // answer, or the question it parked on.\n return builder.result(await this.get(runId));\n }\n\n /**\n * The visible answer text of a run as it is written, thinking left out and\n * each citation key numbered `[n]` in order of first use:\n * `for await (const chunk of beakr.runs.streamText(runId)) process.stdout.write(chunk)`.\n * The numbers are for showing the text while it streams; they do not index\n * {@link answer}'s `sources`, which has one record per cited document and\n * whose `text` shows readable references instead.\n */\n async *streamText(\n runId: string,\n options: { lastEventId?: string; signal?: AbortSignal } = {},\n ): AsyncGenerator<string> {\n const citations = new TextStream();\n for await (const event of this.stream(runId, options)) {\n const chunk = citations.feed(answerDelta(event));\n if (chunk) yield chunk;\n }\n const rest = citations.finish();\n if (rest) yield rest;\n }\n\n get(runId: string): Promise<RunStatus> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/runs/${enc(runId)}`,\n });\n }\n\n cancel(runId: string): Promise<void> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/runs/${enc(runId)}/cancel`,\n responseType: \"none\",\n });\n }\n\n /**\n * The run's events as they happen, until `stream_complete`. Each item is the\n * parsed `data` of one server-sent event, with its `id` as `event_id`; pass\n * the last `event_id` as `lastEventId` to resume after a disconnect.\n */\n async *stream(\n runId: string,\n options: { lastEventId?: string; signal?: AbortSignal } = {},\n ): AsyncGenerator<RunEvent> {\n const response = await this.transport.raw({\n method: \"GET\",\n path: `/v1/runs/${enc(runId)}/events`,\n query: { last_event_id: options.lastEventId },\n headers: { Accept: \"text/event-stream\" },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n if (!response.body) return;\n for await (const event of parseSse(response.body)) {\n yield event;\n if (event.type === \"stream_complete\") return;\n }\n }\n\n /** One page of the caller's threads; {@link iterThreads} follows every page. */\n threads(query: ListThreadsQuery = {}): Promise<ResponseOf<\"/v1/me/threads\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me/threads\", query: threadsQuery(query) });\n }\n\n /** Every thread of the caller's matching the filters, following cursors. */\n iterThreads(query: Omit<ListThreadsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<ThreadSummary> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/me/threads\", query: threadsQuery(query) }, pageSize);\n }\n}\n\n/** The filters and paging `GET /v1/me/threads` takes. */\nexport interface ListThreadsQuery {\n /** Search thread titles. */\n q?: string;\n /** Only threads attached to these projects. */\n projectIds?: readonly string[];\n /** `only`: just the conversations a notification opened; `exclude`: leave them out. */\n notifications?: \"only\" | \"exclude\";\n cursor?: string;\n limit?: number;\n}\n\nfunction threadsQuery(query: ListThreadsQuery): Record<string, string | number | readonly string[] | undefined> {\n return {\n q: query.q,\n project_ids: query.projectIds,\n notifications: query.notifications,\n cursor: query.cursor,\n limit: query.limit,\n };\n}\n","// Generated by scripts/generate.mjs from the Beakr public OpenAPI document. Do not edit.\n// One typed method per public operation, grouped by area: beakr.api.<area>.<method>().\nimport type { QueryValue, RequestOptions, Transport } from \"../core.js\";\nimport type { CallOptions, OperationResponse, PageItem } from \"../operation-types.js\";\nimport type { operations } from \"./schema.js\";\nimport { eventStream, type RunEvent } from \"../resources/runs.js\";\nimport { segment as enc } from \"../paths.js\";\n\n/** Every public operation: SDK name -> HTTP method and contract path. */\nexport const OPERATIONS = {\n \"files.listArtifacts\": { method: \"GET\", path: \"/v1/artifacts\" },\n \"files.getArtifact\": { method: \"GET\", path: \"/v1/artifacts/{artifact_id}\" },\n \"files.updateArtifact\": { method: \"PATCH\", path: \"/v1/artifacts/{artifact_id}\" },\n \"files.deleteArtifact\": { method: \"DELETE\", path: \"/v1/artifacts/{artifact_id}\" },\n \"files.getArtifactContent\": { method: \"GET\", path: \"/v1/artifacts/{artifact_id}/content\" },\n \"files.createKnowledgeFromArtifact\": { method: \"POST\", path: \"/v1/artifacts/{artifact_id}/knowledge\" },\n \"files.approveArtifactKnowledge\": { method: \"POST\", path: \"/v1/artifacts/{artifact_id}/knowledge/approve\" },\n \"files.moveArtifact\": { method: \"POST\", path: \"/v1/artifacts/{artifact_id}/move\" },\n \"files.downloadUrl\": { method: \"POST\", path: \"/v1/artifacts/download-url\" },\n \"files.readFile\": { method: \"POST\", path: \"/v1/artifacts/read\" },\n \"uploads.getDownloadUrl\": { method: \"GET\", path: \"/v1/artifacts/versions/{version_id}/download-url\" },\n \"endUserTokens.listEndUserTokens\": { method: \"GET\", path: \"/v1/auth/end-user-tokens\" },\n \"endUserTokens.mintEndUserToken\": { method: \"POST\", path: \"/v1/auth/end-user-tokens\" },\n \"endUserTokens.revokeEndUserToken\": { method: \"DELETE\", path: \"/v1/auth/end-user-tokens/{token_id}\" },\n \"uploads.getBulkUploadStatus\": { method: \"GET\", path: \"/v1/bulk/{batch_id}/status\" },\n \"uploads.completeBulkUpload\": { method: \"POST\", path: \"/v1/bulk/complete\" },\n \"uploads.prepareBulkUpload\": { method: \"POST\", path: \"/v1/bulk/prepare\" },\n \"conversations.compound\": { method: \"POST\", path: \"/v1/compound\" },\n \"conversations.cancelCompound\": { method: \"POST\", path: \"/v1/compound/cancel\" },\n \"conversations.agentContext\": { method: \"POST\", path: \"/v1/context\" },\n \"conversations.listConversations\": { method: \"GET\", path: \"/v1/conversations\" },\n \"conversations.getConversation\": { method: \"GET\", path: \"/v1/conversations/{conversation_id}\" },\n \"conversations.deleteConversation\": { method: \"DELETE\", path: \"/v1/conversations/{conversation_id}\" },\n \"conversations.importConversation\": { method: \"POST\", path: \"/v1/conversations/import\" },\n \"conversations.search\": { method: \"GET\", path: \"/v1/conversations/search\" },\n \"folders.listFolders\": { method: \"GET\", path: \"/v1/folders\" },\n \"folders.createFolder\": { method: \"POST\", path: \"/v1/folders\" },\n \"folders.getFolder\": { method: \"GET\", path: \"/v1/folders/{folder_id}\" },\n \"folders.updateFolder\": { method: \"PATCH\", path: \"/v1/folders/{folder_id}\" },\n \"folders.deleteFolder\": { method: \"DELETE\", path: \"/v1/folders/{folder_id}\" },\n \"folders.listFolderResources\": { method: \"GET\", path: \"/v1/folders/{folder_id}/resources\" },\n \"integrations.listIntegrations\": { method: \"GET\", path: \"/v1/integrations\" },\n \"integrations.disconnectIntegration\": { method: \"DELETE\", path: \"/v1/integrations/{connector_id}\" },\n \"integrations.integrationStatus\": { method: \"GET\", path: \"/v1/integrations/{connector_id}/status\" },\n \"integrations.connectIntegration\": { method: \"POST\", path: \"/v1/integrations/{provider}/connect\" },\n \"integrations.listIntegrationTools\": { method: \"GET\", path: \"/v1/integrations/tools\" },\n \"integrations.callIntegrationTool\": { method: \"POST\", path: \"/v1/integrations/tools/{tool_name}/call\" },\n \"interviews.createInterviewLink\": { method: \"POST\", path: \"/v1/interview/links\" },\n \"interviews.listSendableInterviews\": { method: \"GET\", path: \"/v1/interview/sendables\" },\n \"interviews.createSendableInterview\": { method: \"POST\", path: \"/v1/interview/sendables\" },\n \"interviews.createLink\": { method: \"POST\", path: \"/v1/interview/sendables/{sendable_id}/links\" },\n \"interviews.sendLinkToKnowledge\": { method: \"POST\", path: \"/v1/interview/sendables/links/{link_id}/knowledge\" },\n \"interviews.linkResult\": { method: \"GET\", path: \"/v1/interview/sendables/links/{link_id}/result\" },\n \"interviews.revokeLink\": { method: \"POST\", path: \"/v1/interview/sendables/links/{link_id}/revoke\" },\n \"jobs.getJob\": { method: \"GET\", path: \"/v1/jobs/{job_id}\" },\n \"knowledge.getAgentReviewSettings\": { method: \"GET\", path: \"/v1/knowledge/agent-review\" },\n \"knowledge.setOrgAgentReview\": { method: \"PUT\", path: \"/v1/knowledge/agent-review\" },\n \"knowledge.setProjectAgentReview\": { method: \"PUT\", path: \"/v1/knowledge/agent-review/projects/{project_id}\" },\n \"knowledge.documents\": { method: \"POST\", path: \"/v1/knowledge/documents\" },\n \"knowledge.research\": { method: \"POST\", path: \"/v1/knowledge/research\" },\n \"knowledge.runWikiCommand\": { method: \"POST\", path: \"/v1/knowledge/wiki/command\" },\n \"knowledge.listWikiPages\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages\" },\n \"knowledge.getWikiPage\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/{page_id}\" },\n \"knowledge.getWikiPageRevisions\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/{page_id}/revisions\" },\n \"knowledge.getWikiPageSources\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/{page_id}/sources\" },\n \"knowledge.getWikiPageByTitle\": { method: \"GET\", path: \"/v1/knowledge/wiki/pages/by-title\" },\n \"knowledge.listProposals\": { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\" },\n \"knowledge.createProposal\": { method: \"POST\", path: \"/v1/knowledge/wiki/proposals\" },\n \"knowledge.getProposal\": { method: \"GET\", path: \"/v1/knowledge/wiki/proposals/{proposal_id}\" },\n \"knowledge.acceptProposal\": { method: \"POST\", path: \"/v1/knowledge/wiki/proposals/{proposal_id}/accept\" },\n \"knowledge.dismissProposal\": { method: \"POST\", path: \"/v1/knowledge/wiki/proposals/{proposal_id}/dismiss\" },\n \"knowledge.searchWikiPages\": { method: \"GET\", path: \"/v1/knowledge/wiki/search\" },\n \"knowledge.runWikiWrite\": { method: \"POST\", path: \"/v1/knowledge/wiki/write\" },\n \"labels.listLabels\": { method: \"GET\", path: \"/v1/labels\" },\n \"labels.createLabel\": { method: \"POST\", path: \"/v1/labels\" },\n \"labels.getLabel\": { method: \"GET\", path: \"/v1/labels/{label_id}\" },\n \"labels.updateLabel\": { method: \"PATCH\", path: \"/v1/labels/{label_id}\" },\n \"labels.deleteLabel\": { method: \"DELETE\", path: \"/v1/labels/{label_id}\" },\n \"labels.listLabelMembers\": { method: \"GET\", path: \"/v1/labels/{label_id}/members\" },\n \"labels.addLabelMember\": { method: \"POST\", path: \"/v1/labels/{label_id}/members\" },\n \"labels.removeLabelMember\": { method: \"DELETE\", path: \"/v1/labels/{label_id}/members/{user_id}\" },\n \"labels.listLabelProjects\": { method: \"GET\", path: \"/v1/labels/{label_id}/projects\" },\n \"labels.attachLabelProject\": { method: \"POST\", path: \"/v1/labels/{label_id}/projects\" },\n \"labels.updateLabelProject\": { method: \"PATCH\", path: \"/v1/labels/{label_id}/projects/{project_id}\" },\n \"labels.detachLabelProject\": { method: \"DELETE\", path: \"/v1/labels/{label_id}/projects/{project_id}\" },\n \"account.whoami\": { method: \"GET\", path: \"/v1/me\" },\n \"apiKeys.listApiKeys\": { method: \"GET\", path: \"/v1/me/api-keys\" },\n \"apiKeys.createApiKey\": { method: \"POST\", path: \"/v1/me/api-keys\" },\n \"apiKeys.revokeApiKey\": { method: \"DELETE\", path: \"/v1/me/api-keys/{key_id}\" },\n \"apiKeys.listScopes\": { method: \"GET\", path: \"/v1/me/api-keys/scopes\" },\n \"organizations.getActiveOrg\": { method: \"GET\", path: \"/v1/me/organization\" },\n \"skills.installSkill\": { method: \"POST\", path: \"/v1/me/skills/library/{skill_id}\" },\n \"skills.uninstallSkill\": { method: \"DELETE\", path: \"/v1/me/skills/library/{skill_id}\" },\n \"skills.listMinedSkillProposals\": { method: \"GET\", path: \"/v1/me/skills/proposals\" },\n \"skills.acceptMinedSkillProposal\": { method: \"POST\", path: \"/v1/me/skills/proposals/{proposal_id}/accept\" },\n \"skills.dismissMinedSkillProposal\": { method: \"POST\", path: \"/v1/me/skills/proposals/{proposal_id}/dismiss\" },\n \"threads.listMyThreads\": { method: \"GET\", path: \"/v1/me/threads\" },\n \"organizations.listOrgs\": { method: \"GET\", path: \"/v1/organizations\" },\n \"organizations.getOrg\": { method: \"GET\", path: \"/v1/organizations/{org_id}\" },\n \"externalUsers.listExternalUsers\": { method: \"GET\", path: \"/v1/organizations/{org_id}/external-users\" },\n \"externalUsers.createExternalUser\": { method: \"POST\", path: \"/v1/organizations/{org_id}/external-users\" },\n \"externalUsers.getExternalUser\": { method: \"GET\", path: \"/v1/organizations/{org_id}/external-users/{user_id}\" },\n \"externalUsers.updateExternalUser\": { method: \"PATCH\", path: \"/v1/organizations/{org_id}/external-users/{user_id}\" },\n \"externalUsers.deleteExternalUser\": { method: \"DELETE\", path: \"/v1/organizations/{org_id}/external-users/{user_id}\" },\n \"organizations.listMembers\": { method: \"GET\", path: \"/v1/organizations/{org_id}/members\" },\n \"organizations.addMember\": { method: \"POST\", path: \"/v1/organizations/{org_id}/members\" },\n \"organizations.updateMemberRole\": { method: \"PATCH\", path: \"/v1/organizations/{org_id}/members/{user_id}\" },\n \"organizations.removeMember\": { method: \"DELETE\", path: \"/v1/organizations/{org_id}/members/{user_id}\" },\n \"serviceAccounts.listServiceAccounts\": { method: \"GET\", path: \"/v1/organizations/{org_id}/service-accounts\" },\n \"serviceAccounts.createServiceAccount\": { method: \"POST\", path: \"/v1/organizations/{org_id}/service-accounts\" },\n \"serviceAccounts.disableServiceAccount\": { method: \"POST\", path: \"/v1/organizations/{org_id}/service-accounts/{account_id}/disable\" },\n \"serviceAccounts.mintServiceAccountKey\": { method: \"POST\", path: \"/v1/organizations/{org_id}/service-accounts/{account_id}/keys\" },\n \"projects.listProjects\": { method: \"GET\", path: \"/v1/projects\" },\n \"projects.createProject\": { method: \"POST\", path: \"/v1/projects\" },\n \"projects.getProject\": { method: \"GET\", path: \"/v1/projects/{project_id}\" },\n \"projects.updateProject\": { method: \"PATCH\", path: \"/v1/projects/{project_id}\" },\n \"projects.deleteProject\": { method: \"DELETE\", path: \"/v1/projects/{project_id}\" },\n \"projects.createProjectMembershipInvitation\": { method: \"POST\", path: \"/v1/projects/{project_id}/invite\" },\n \"projects.getProjectKnowledgeProfile\": { method: \"GET\", path: \"/v1/projects/{project_id}/knowledge-profile\" },\n \"projects.putProjectKnowledgeProfile\": { method: \"PUT\", path: \"/v1/projects/{project_id}/knowledge-profile\" },\n \"projects.patchProjectKnowledgeProfile\": { method: \"PATCH\", path: \"/v1/projects/{project_id}/knowledge-profile\" },\n \"projects.getProjectKnowledgeStatus\": { method: \"GET\", path: \"/v1/projects/{project_id}/knowledge-summary\" },\n \"projects.listKnowledgeFailedFiles\": { method: \"GET\", path: \"/v1/projects/{project_id}/knowledge/failed-files\" },\n \"projects.retryFailedKnowledge\": { method: \"POST\", path: \"/v1/projects/{project_id}/knowledge/retry-failed\" },\n \"projects.listMembers\": { method: \"GET\", path: \"/v1/projects/{project_id}/members\" },\n \"projects.addMember\": { method: \"POST\", path: \"/v1/projects/{project_id}/members\" },\n \"projects.removeMember\": { method: \"DELETE\", path: \"/v1/projects/{project_id}/members/{principal_type}/{principal_id}\" },\n \"projects.listModelRefusals\": { method: \"GET\", path: \"/v1/projects/{project_id}/model-refusals\" },\n \"projects.listModelRefusalFiles\": { method: \"GET\", path: \"/v1/projects/{project_id}/model-refusals/files\" },\n \"projects.getModelRefusalSummary\": { method: \"GET\", path: \"/v1/projects/{project_id}/model-refusals/summary\" },\n \"projects.listProjectPendingInvitations\": { method: \"GET\", path: \"/v1/projects/{project_id}/pending-invitations\" },\n \"projects.revokeProjectMembershipInvitation\": { method: \"DELETE\", path: \"/v1/projects/{project_id}/pending-invitations/{invitation_id}\" },\n \"threads.listSharedThreads\": { method: \"GET\", path: \"/v1/projects/{project_id}/threads\" },\n \"openapi.publicOpenapi\": { method: \"GET\", path: \"/v1/public/openapi.json\" },\n \"runs.startChatRun\": { method: \"POST\", path: \"/v1/runs\" },\n \"runs.getRunStatus\": { method: \"GET\", path: \"/v1/runs/{run_id}\" },\n \"runs.cancelRun\": { method: \"POST\", path: \"/v1/runs/{run_id}/cancel\" },\n \"runs.streamRunEvents\": { method: \"GET\", path: \"/v1/runs/{run_id}/events\" },\n \"skills.listSkills\": { method: \"GET\", path: \"/v1/skills\" },\n \"skills.createSkill\": { method: \"POST\", path: \"/v1/skills\" },\n \"skills.getSkill\": { method: \"GET\", path: \"/v1/skills/{skill_id}\" },\n \"skills.deleteSkill\": { method: \"DELETE\", path: \"/v1/skills/{skill_id}\" },\n \"skills.getSkillBundle\": { method: \"GET\", path: \"/v1/skills/{skill_id}/bundle\" },\n \"skills.replaceSkillBundle\": { method: \"PUT\", path: \"/v1/skills/{skill_id}/bundle\" },\n \"skills.downloadSkillBundleZip\": { method: \"GET\", path: \"/v1/skills/{skill_id}/bundle.zip\" },\n \"threads.getThreadDetail\": { method: \"GET\", path: \"/v1/threads/{thread_id}\" },\n \"uploads.createUpload\": { method: \"POST\", path: \"/v1/uploads\" },\n \"uploads.getUpload\": { method: \"GET\", path: \"/v1/uploads/{upload_id}\" },\n \"uploads.abortUpload\": { method: \"DELETE\", path: \"/v1/uploads/{upload_id}\" },\n \"uploads.completeUpload\": { method: \"POST\", path: \"/v1/uploads/{upload_id}/complete\" },\n \"uploads.presignUploadParts\": { method: \"POST\", path: \"/v1/uploads/{upload_id}/parts\" },\n} as const;\n\nexport type OperationName = keyof typeof OPERATIONS;\n\n/** Public operations tagged account. */\nexport class AccountApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me (Get the signed-in person) */\n whoami(options?: CallOptions): Promise<OperationResponse<operations[\"whoami_v1_me_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged apiKeys. */\nexport class ApiKeysApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me/api-keys (List API keys) */\n listApiKeys(args?: { query?: NonNullable<operations[\"list_api_keys_v1_me_api_keys_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_api_keys_v1_me_api_keys_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/api-keys\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/me/api-keys, following its cursor. */\n listApiKeysAll(args?: { query?: NonNullable<operations[\"list_api_keys_v1_me_api_keys_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_api_keys_v1_me_api_keys_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/api-keys\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/me/api-keys (Create an API key) */\n createApiKey(args: { body: NonNullable<operations[\"create_api_key_v1_me_api_keys_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_api_key_v1_me_api_keys_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/me/api-keys\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/me/api-keys/{key_id} (Revoke an API key) */\n revokeApiKey(args: { path: operations[\"revoke_api_key_v1_me_api_keys__key_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/me/api-keys/${enc(String(args.path.key_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/me/api-keys/scopes (List API key scopes) */\n listScopes(options?: CallOptions): Promise<OperationResponse<operations[\"list_scopes_v1_me_api_keys_scopes_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/api-keys/scopes\", authenticated: false, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged conversations. */\nexport class ConversationsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/compound (Compound a conversation into Knowledge) */\n compound(args: { body: NonNullable<operations[\"compound_v1_compound_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"compound_v1_compound_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/compound\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/compound/cancel (Cancel compounding a conversation) */\n cancelCompound(args: { body: NonNullable<operations[\"cancel_compound_route_v1_compound_cancel_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"cancel_compound_route_v1_compound_cancel_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/compound/cancel\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/context (Get context for an agent session) */\n agentContext(args: { body: NonNullable<operations[\"agent_context_v1_context_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"agent_context_v1_context_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/context\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/conversations (List conversations) */\n listConversations(args?: { query?: NonNullable<operations[\"list_conversations_v1_conversations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_conversations_v1_conversations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/conversations, following its cursor. */\n listConversationsAll(args?: { query?: NonNullable<operations[\"list_conversations_v1_conversations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_conversations_v1_conversations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/conversations/{conversation_id} (Get a conversation) */\n getConversation(args: { path: operations[\"get_conversation_v1_conversations__conversation_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_conversation_v1_conversations__conversation_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/conversations/${enc(String(args.path.conversation_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/conversations/{conversation_id} (Delete a conversation) */\n deleteConversation(args: { path: operations[\"delete_conversation_v1_conversations__conversation_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/conversations/${enc(String(args.path.conversation_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/conversations/import (Import an agent conversation) */\n importConversation(args: { body: NonNullable<operations[\"import_conversation_route_v1_conversations_import_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"import_conversation_route_v1_conversations_import_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/conversations/import\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/conversations/search (Search your conversations) */\n search(args: { query: NonNullable<operations[\"search_route_v1_conversations_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"search_route_v1_conversations_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/conversations/search, following its cursor. */\n searchAll(args: { query: NonNullable<operations[\"search_route_v1_conversations_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"search_route_v1_conversations_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/conversations/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n}\n\n/** Public operations tagged endUserTokens. */\nexport class EndUserTokensApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/auth/end-user-tokens (List end-user tokens) */\n listEndUserTokens(args?: { query?: NonNullable<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/auth/end-user-tokens\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/auth/end-user-tokens, following its cursor. */\n listEndUserTokensAll(args?: { query?: NonNullable<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_end_user_tokens_v1_auth_end_user_tokens_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/auth/end-user-tokens\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/auth/end-user-tokens (Mint an end-user token) */\n mintEndUserToken(args: { body: NonNullable<operations[\"mint_end_user_token_v1_auth_end_user_tokens_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"mint_end_user_token_v1_auth_end_user_tokens_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/auth/end-user-tokens\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/auth/end-user-tokens/{token_id} (Revoke an end-user token) */\n revokeEndUserToken(args: { path: operations[\"revoke_end_user_token_v1_auth_end_user_tokens__token_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/auth/end-user-tokens/${enc(String(args.path.token_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged externalUsers. */\nexport class ExternalUsersApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/organizations/{org_id}/external-users (List external users) */\n listExternalUsers(args: { path: operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations/{org_id}/external-users, following its cursor. */\n listExternalUsersAll(args: { path: operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_external_users_v1_organizations__org_id__external_users_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/organizations/{org_id}/external-users (Create an external user) */\n createExternalUser(args: { path: operations[\"create_external_user_v1_organizations__org_id__external_users_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_external_user_v1_organizations__org_id__external_users_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_external_user_v1_organizations__org_id__external_users_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/organizations/{org_id}/external-users/{user_id} (Get an external user) */\n getExternalUser(args: { path: operations[\"get_external_user_v1_organizations__org_id__external_users__user_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_external_user_v1_organizations__org_id__external_users__user_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users/${enc(String(args.path.user_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/organizations/{org_id}/external-users/{user_id} (Update an external user) */\n updateExternalUser(args: { path: operations[\"update_external_user_v1_organizations__org_id__external_users__user_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_external_user_v1_organizations__org_id__external_users__user_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_external_user_v1_organizations__org_id__external_users__user_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users/${enc(String(args.path.user_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/organizations/{org_id}/external-users/{user_id} (Delete an external user) */\n deleteExternalUser(args: { path: operations[\"delete_external_user_v1_organizations__org_id__external_users__user_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/organizations/${enc(String(args.path.org_id))}/external-users/${enc(String(args.path.user_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged files. */\nexport class FilesApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/artifacts (List files) */\n listArtifacts(args?: { query?: NonNullable<operations[\"list_artifacts_route_v1_artifacts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_artifacts_route_v1_artifacts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/artifacts\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/artifacts, following its cursor. */\n listArtifactsAll(args?: { query?: NonNullable<operations[\"list_artifacts_route_v1_artifacts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_artifacts_route_v1_artifacts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/artifacts\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/artifacts/{artifact_id} (Get a file) */\n getArtifact(args: { path: operations[\"get_artifact_route_v1_artifacts__artifact_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_artifact_route_v1_artifacts__artifact_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/artifacts/{artifact_id} (Update a file) */\n updateArtifact(args: { path: operations[\"update_artifact_route_v1_artifacts__artifact_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_artifact_route_v1_artifacts__artifact_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_artifact_route_v1_artifacts__artifact_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/artifacts/{artifact_id} (Delete a file) */\n deleteArtifact(args: { path: operations[\"delete_artifact_route_v1_artifacts__artifact_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/artifacts/{artifact_id}/content (Get a file's content) */\n getArtifactContent(args: { path: operations[\"get_artifact_content_route_v1_artifacts__artifact_id__content_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_artifact_content_route_v1_artifacts__artifact_id__content_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/content`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/{artifact_id}/knowledge (Compile a file into Knowledge) */\n createKnowledgeFromArtifact(args: { path: operations[\"create_knowledge_from_artifact_route_v1_artifacts__artifact_id__knowledge_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_knowledge_from_artifact_route_v1_artifacts__artifact_id__knowledge_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/knowledge`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/{artifact_id}/knowledge/approve (Approve a file for Knowledge) */\n approveArtifactKnowledge(args: { path: operations[\"approve_artifact_knowledge_route_v1_artifacts__artifact_id__knowledge_approve_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"approve_artifact_knowledge_route_v1_artifacts__artifact_id__knowledge_approve_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/knowledge/approve`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/{artifact_id}/move (Move a file to another project) */\n moveArtifact(args: { path: operations[\"move_artifact_route_v1_artifacts__artifact_id__move_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"move_artifact_route_v1_artifacts__artifact_id__move_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"move_artifact_route_v1_artifacts__artifact_id__move_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/artifacts/${enc(String(args.path.artifact_id))}/move`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/download-url (Get a download link by reference) */\n downloadUrl(args: { body: NonNullable<operations[\"download_url_route_v1_artifacts_download_url_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"download_url_route_v1_artifacts_download_url_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/artifacts/download-url\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/artifacts/read (Read a file's text) */\n readFile(args: { body: NonNullable<operations[\"read_file_route_v1_artifacts_read_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"read_file_route_v1_artifacts_read_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/artifacts/read\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged folders. */\nexport class FoldersApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/folders (List folders) */\n listFolders(args?: { query?: NonNullable<operations[\"list_folders_route_v1_folders_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_folders_route_v1_folders_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/folders\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/folders, following its cursor. */\n listFoldersAll(args?: { query?: NonNullable<operations[\"list_folders_route_v1_folders_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_folders_route_v1_folders_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/folders\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/folders (Create a folder) */\n createFolder(args: { body: NonNullable<operations[\"create_folder_route_v1_folders_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_folder_route_v1_folders_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/folders\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/folders/{folder_id} (Get a folder) */\n getFolder(args: { path: operations[\"get_folder_route_v1_folders__folder_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_folder_route_v1_folders__folder_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/folders/${enc(String(args.path.folder_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/folders/{folder_id} (Update a folder) */\n updateFolder(args: { path: operations[\"update_folder_route_v1_folders__folder_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_folder_route_v1_folders__folder_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_folder_route_v1_folders__folder_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/folders/${enc(String(args.path.folder_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/folders/{folder_id} (Delete a folder) */\n deleteFolder(args: { path: operations[\"delete_folder_route_v1_folders__folder_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"delete_folder_route_v1_folders__folder_id__delete\"]>> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/folders/${enc(String(args.path.folder_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/folders/{folder_id}/resources (List a folder's files) */\n listFolderResources(args: { path: operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/folders/${enc(String(args.path.folder_id))}/resources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/folders/{folder_id}/resources, following its cursor. */\n listFolderResourcesAll(args: { path: operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_folder_resources_route_v1_folders__folder_id__resources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/folders/${enc(String(args.path.folder_id))}/resources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n}\n\n/** Public operations tagged integrations. */\nexport class IntegrationsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/integrations (List connected integrations) */\n listIntegrations(args?: { query?: NonNullable<operations[\"list_integrations_v1_integrations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_integrations_v1_integrations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/integrations, following its cursor. */\n listIntegrationsAll(args?: { query?: NonNullable<operations[\"list_integrations_v1_integrations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_integrations_v1_integrations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** DELETE /v1/integrations/{connector_id} (Disconnect an integration) */\n disconnectIntegration(args: { path: operations[\"disconnect_integration_v1_integrations__connector_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"disconnect_integration_v1_integrations__connector_id__delete\"]>> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/integrations/${enc(String(args.path.connector_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/integrations/{connector_id}/status (Get an integration's status) */\n integrationStatus(args: { path: operations[\"integration_status_v1_integrations__connector_id__status_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"integration_status_v1_integrations__connector_id__status_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/integrations/${enc(String(args.path.connector_id))}/status`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/integrations/{provider}/connect (Get a connect link) */\n connectIntegration(args: { path: operations[\"connect_integration_v1_integrations__provider__connect_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"connect_integration_v1_integrations__provider__connect_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"connect_integration_v1_integrations__provider__connect_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/integrations/${enc(String(args.path.provider))}/connect`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/integrations/tools (List integration tools) */\n listIntegrationTools(args?: { query?: NonNullable<operations[\"list_integration_tools_v1_integrations_tools_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_integration_tools_v1_integrations_tools_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations/tools\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/integrations/tools, following its cursor. */\n listIntegrationToolsAll(args?: { query?: NonNullable<operations[\"list_integration_tools_v1_integrations_tools_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_integration_tools_v1_integrations_tools_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/integrations/tools\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/integrations/tools/{tool_name}/call (Call an integration tool) */\n callIntegrationTool(args: { path: operations[\"call_integration_tool_v1_integrations_tools__tool_name__call_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"call_integration_tool_v1_integrations_tools__tool_name__call_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"call_integration_tool_v1_integrations_tools__tool_name__call_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/integrations/tools/${enc(String(args.path.tool_name))}/call`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged interviews. */\nexport class InterviewsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/interview/links (Create an interview link) */\n createInterviewLink(args: { body: NonNullable<operations[\"create_interview_link_v1_interview_links_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_interview_link_v1_interview_links_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/interview/links\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/interview/sendables (List sendable interviews) */\n listSendableInterviews(args?: { query?: NonNullable<operations[\"list_sendable_interviews_v1_interview_sendables_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_sendable_interviews_v1_interview_sendables_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/interview/sendables\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/interview/sendables, following its cursor. */\n listSendableInterviewsAll(args?: { query?: NonNullable<operations[\"list_sendable_interviews_v1_interview_sendables_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_sendable_interviews_v1_interview_sendables_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/interview/sendables\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/interview/sendables (Create a sendable interview) */\n createSendableInterview(args: { body: NonNullable<operations[\"create_sendable_interview_v1_interview_sendables_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_sendable_interview_v1_interview_sendables_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/interview/sendables\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/interview/sendables/{sendable_id}/links (Add a link to an interview) */\n createLink(args: { path: operations[\"create_link_v1_interview_sendables__sendable_id__links_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_link_v1_interview_sendables__sendable_id__links_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_link_v1_interview_sendables__sendable_id__links_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/interview/sendables/${enc(String(args.path.sendable_id))}/links`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/interview/sendables/links/{link_id}/knowledge (Send an interview to Knowledge) */\n sendLinkToKnowledge(args: { path: operations[\"send_link_to_knowledge_v1_interview_sendables_links__link_id__knowledge_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"send_link_to_knowledge_v1_interview_sendables_links__link_id__knowledge_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"send_link_to_knowledge_v1_interview_sendables_links__link_id__knowledge_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/interview/sendables/links/${enc(String(args.path.link_id))}/knowledge`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/interview/sendables/links/{link_id}/result (Get an interview link's result) */\n linkResult(args: { path: operations[\"link_result_v1_interview_sendables_links__link_id__result_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"link_result_v1_interview_sendables_links__link_id__result_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/interview/sendables/links/${enc(String(args.path.link_id))}/result`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/interview/sendables/links/{link_id}/revoke (Revoke an interview link) */\n revokeLink(args: { path: operations[\"revoke_link_v1_interview_sendables_links__link_id__revoke_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/interview/sendables/links/${enc(String(args.path.link_id))}/revoke`, idempotent: true, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged jobs. */\nexport class JobsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/jobs/{job_id} (Get a job's status) */\n getJob(args: { path: operations[\"get_job_v1_jobs__job_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_job_v1_jobs__job_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/jobs/${enc(String(args.path.job_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged knowledge. */\nexport class KnowledgeApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/knowledge/agent-review (Get the agent review policy) */\n getAgentReviewSettings(args?: { query?: NonNullable<operations[\"get_agent_review_settings_v1_knowledge_agent_review_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_agent_review_settings_v1_knowledge_agent_review_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/agent-review\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/knowledge/agent-review (Set the organization's agent review policy) */\n setOrgAgentReview(args: { body: NonNullable<operations[\"set_org_agent_review_v1_knowledge_agent_review_put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"set_org_agent_review_v1_knowledge_agent_review_put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: \"/v1/knowledge/agent-review\", body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/knowledge/agent-review/projects/{project_id} (Set a project's agent review policy) */\n setProjectAgentReview(args: { path: operations[\"set_project_agent_review_v1_knowledge_agent_review_projects__project_id__put\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"set_project_agent_review_v1_knowledge_agent_review_projects__project_id__put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"set_project_agent_review_v1_knowledge_agent_review_projects__project_id__put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: `/v1/knowledge/agent-review/projects/${enc(String(args.path.project_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/documents (Search and read original documents) */\n documents(args?: { body?: NonNullable<operations[\"documents_v1_knowledge_documents_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"documents_v1_knowledge_documents_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/documents\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/research (Research a question) */\n research(args?: { body?: NonNullable<operations[\"research_v1_knowledge_research_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"research_v1_knowledge_research_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/research\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/wiki/command (Run a Knowledge read command) */\n runWikiCommand(args: { body: NonNullable<operations[\"run_wiki_command_v1_knowledge_wiki_command_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"run_wiki_command_v1_knowledge_wiki_command_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/wiki/command\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/pages (List Knowledge pages) */\n listWikiPages(args?: { query?: NonNullable<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/pages\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/pages, following its cursor. */\n listWikiPagesAll(args?: { query?: NonNullable<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_wiki_pages_v1_knowledge_wiki_pages_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/pages\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/knowledge/wiki/pages/{page_id} (Get a Knowledge page) */\n getWikiPage(args: { path: operations[\"get_wiki_page_v1_knowledge_wiki_pages__page_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_v1_knowledge_wiki_pages__page_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/pages/{page_id}/revisions (List a page's revisions) */\n getWikiPageRevisions(args: { path: operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/revisions`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/pages/{page_id}/revisions, following its cursor. */\n getWikiPageRevisionsAll(args: { path: operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"get_wiki_page_revisions_v1_knowledge_wiki_pages__page_id__revisions_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/revisions`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/knowledge/wiki/pages/{page_id}/sources (List a page's sources) */\n getWikiPageSources(args: { path: operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/sources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/pages/{page_id}/sources, following its cursor. */\n getWikiPageSourcesAll(args: { path: operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"get_wiki_page_sources_v1_knowledge_wiki_pages__page_id__sources_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(String(args.path.page_id))}/sources`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/knowledge/wiki/pages/by-title (Get a Knowledge page by title) */\n getWikiPageByTitle(args: { query: NonNullable<operations[\"get_wiki_page_by_title_v1_knowledge_wiki_pages_by_title_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_wiki_page_by_title_v1_knowledge_wiki_pages_by_title_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/pages/by-title\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/proposals (List Knowledge proposals) */\n listProposals(args?: { query?: NonNullable<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/proposals, following its cursor. */\n listProposalsAll(args?: { query?: NonNullable<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_proposals_v1_knowledge_wiki_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/knowledge/wiki/proposals (Create a Knowledge proposal) */\n createProposal(args: { body: NonNullable<operations[\"create_proposal_v1_knowledge_wiki_proposals_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_proposal_v1_knowledge_wiki_proposals_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/wiki/proposals\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/proposals/{proposal_id} (Get a Knowledge proposal) */\n getProposal(args: { path: operations[\"get_proposal_v1_knowledge_wiki_proposals__proposal_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_proposal_v1_knowledge_wiki_proposals__proposal_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/knowledge/wiki/proposals/${enc(String(args.path.proposal_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/wiki/proposals/{proposal_id}/accept (Accept a Knowledge proposal) */\n acceptProposal(args: { path: operations[\"accept_proposal_v1_knowledge_wiki_proposals__proposal_id__accept_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"accept_proposal_v1_knowledge_wiki_proposals__proposal_id__accept_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"accept_proposal_v1_knowledge_wiki_proposals__proposal_id__accept_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/knowledge/wiki/proposals/${enc(String(args.path.proposal_id))}/accept`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/knowledge/wiki/proposals/{proposal_id}/dismiss (Dismiss a Knowledge proposal) */\n dismissProposal(args: { path: operations[\"dismiss_proposal_v1_knowledge_wiki_proposals__proposal_id__dismiss_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"dismiss_proposal_v1_knowledge_wiki_proposals__proposal_id__dismiss_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/knowledge/wiki/proposals/${enc(String(args.path.proposal_id))}/dismiss`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/knowledge/wiki/search (Search Knowledge pages) */\n searchWikiPages(args: { query: NonNullable<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/knowledge/wiki/search, following its cursor. */\n searchWikiPagesAll(args: { query: NonNullable<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"search_wiki_pages_v1_knowledge_wiki_search_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/knowledge/wiki/search\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/knowledge/wiki/write (Propose a Knowledge change) */\n runWikiWrite(args: { body: NonNullable<operations[\"run_wiki_write_v1_knowledge_wiki_write_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"run_wiki_write_v1_knowledge_wiki_write_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/knowledge/wiki/write\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged labels. */\nexport class LabelsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/labels (List labels) */\n listLabels(args?: { query?: NonNullable<operations[\"list_labels_route_v1_labels_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_labels_route_v1_labels_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/labels\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/labels, following its cursor. */\n listLabelsAll(args?: { query?: NonNullable<operations[\"list_labels_route_v1_labels_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_labels_route_v1_labels_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/labels\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/labels (Create a label) */\n createLabel(args: { body: NonNullable<operations[\"create_label_route_v1_labels_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_label_route_v1_labels_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/labels\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/labels/{label_id} (Get a label) */\n getLabel(args: { path: operations[\"get_label_route_v1_labels__label_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_label_route_v1_labels__label_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/labels/{label_id} (Update a label) */\n updateLabel(args: { path: operations[\"update_label_route_v1_labels__label_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_label_route_v1_labels__label_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_label_route_v1_labels__label_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/labels/${enc(String(args.path.label_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/labels/{label_id} (Delete a label) */\n deleteLabel(args: { path: operations[\"delete_label_route_v1_labels__label_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/labels/${enc(String(args.path.label_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/labels/{label_id}/members (List label members) */\n listLabelMembers(args: { path: operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_label_members_route_v1_labels__label_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/labels/{label_id}/members, following its cursor. */\n listLabelMembersAll(args: { path: operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_members_route_v1_labels__label_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_label_members_route_v1_labels__label_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/labels/{label_id}/members (Add a label member) */\n addLabelMember(args: { path: operations[\"add_label_member_route_v1_labels__label_id__members_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"add_label_member_route_v1_labels__label_id__members_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"add_label_member_route_v1_labels__label_id__members_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/labels/${enc(String(args.path.label_id))}/members`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/labels/{label_id}/members/{user_id} (Remove a label member) */\n removeLabelMember(args: { path: operations[\"remove_label_member_route_v1_labels__label_id__members__user_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/labels/${enc(String(args.path.label_id))}/members/${enc(String(args.path.user_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/labels/{label_id}/projects (List label projects) */\n listLabelProjects(args: { path: operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/labels/{label_id}/projects, following its cursor. */\n listLabelProjectsAll(args: { path: operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_label_projects_route_v1_labels__label_id__projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/labels/{label_id}/projects (Add a project to a label) */\n attachLabelProject(args: { path: operations[\"attach_label_project_route_v1_labels__label_id__projects_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"attach_label_project_route_v1_labels__label_id__projects_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"attach_label_project_route_v1_labels__label_id__projects_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/labels/{label_id}/projects/{project_id} (Update a label's project) */\n updateLabelProject(args: { path: operations[\"update_label_project_route_v1_labels__label_id__projects__project_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_label_project_route_v1_labels__label_id__projects__project_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_label_project_route_v1_labels__label_id__projects__project_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects/${enc(String(args.path.project_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/labels/{label_id}/projects/{project_id} (Remove a project from a label) */\n detachLabelProject(args: { path: operations[\"detach_label_project_route_v1_labels__label_id__projects__project_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/labels/${enc(String(args.path.label_id))}/projects/${enc(String(args.path.project_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged openapi. */\nexport class OpenapiApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/public/openapi.json (Get the OpenAPI document) */\n publicOpenapi(options?: CallOptions): Promise<OperationResponse<operations[\"public_openapi_v1_public_openapi_json_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/public/openapi.json\", authenticated: false, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged organizations. */\nexport class OrganizationsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me/organization (Get your active organization) */\n getActiveOrg(options?: CallOptions): Promise<OperationResponse<operations[\"get_active_org_route_v1_me_organization_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/organization\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/organizations (List your organizations) */\n listOrgs(args?: { query?: NonNullable<operations[\"list_orgs_route_v1_organizations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_orgs_route_v1_organizations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/organizations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations, following its cursor. */\n listOrgsAll(args?: { query?: NonNullable<operations[\"list_orgs_route_v1_organizations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_orgs_route_v1_organizations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/organizations\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/organizations/{org_id} (Get an organization) */\n getOrg(args: { path: operations[\"get_org_route_v1_organizations__org_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_org_route_v1_organizations__org_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/organizations/{org_id}/members (List organization members) */\n listMembers(args: { path: operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_members_route_v1_organizations__org_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations/{org_id}/members, following its cursor. */\n listMembersAll(args: { path: operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_organizations__org_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_members_route_v1_organizations__org_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/organizations/{org_id}/members (Add an organization member) */\n addMember(args: { path: operations[\"add_member_route_v1_organizations__org_id__members_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"add_member_route_v1_organizations__org_id__members_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"add_member_route_v1_organizations__org_id__members_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/organizations/{org_id}/members/{user_id} (Change a member's role) */\n updateMemberRole(args: { path: operations[\"update_member_role_route_v1_organizations__org_id__members__user_id__patch\"][\"parameters\"][\"path\"]; query: NonNullable<operations[\"update_member_role_route_v1_organizations__org_id__members__user_id__patch\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"update_member_role_route_v1_organizations__org_id__members__user_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members/${enc(String(args.path.user_id))}`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/organizations/{org_id}/members/{user_id} (Remove an organization member) */\n removeMember(args: { path: operations[\"remove_member_route_v1_organizations__org_id__members__user_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/organizations/${enc(String(args.path.org_id))}/members/${enc(String(args.path.user_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged projects. */\nexport class ProjectsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/projects (List projects) */\n listProjects(args?: { query?: NonNullable<operations[\"list_projects_route_v1_projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_projects_route_v1_projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/projects\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects, following its cursor. */\n listProjectsAll(args?: { query?: NonNullable<operations[\"list_projects_route_v1_projects_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_projects_route_v1_projects_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/projects\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/projects (Create a project) */\n createProject(args: { body: NonNullable<operations[\"create_project_route_v1_projects_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_project_route_v1_projects_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/projects\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id} (Get a project) */\n getProject(args: { path: operations[\"get_project_route_v1_projects__project_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_project_route_v1_projects__project_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/projects/{project_id} (Update a project) */\n updateProject(args: { path: operations[\"update_project_route_v1_projects__project_id__patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"update_project_route_v1_projects__project_id__patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"update_project_route_v1_projects__project_id__patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/projects/${enc(String(args.path.project_id))}`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/projects/{project_id} (Delete a project) */\n deleteProject(args: { path: operations[\"delete_project_route_v1_projects__project_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/projects/${enc(String(args.path.project_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/projects/{project_id}/invite (Invite someone by email) */\n createProjectMembershipInvitation(args: { path: operations[\"create_project_membership_invitation_route_v1_projects__project_id__invite_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_project_membership_invitation_route_v1_projects__project_id__invite_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_project_membership_invitation_route_v1_projects__project_id__invite_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/projects/${enc(String(args.path.project_id))}/invite`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/knowledge-profile (Get a project's Knowledge profile) */\n getProjectKnowledgeProfile(args: { path: operations[\"get_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-profile`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/projects/{project_id}/knowledge-profile (Set a project's Knowledge profile) */\n putProjectKnowledgeProfile(args: { path: operations[\"put_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_put\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"put_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"put_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-profile`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PATCH /v1/projects/{project_id}/knowledge-profile (Update a project's Knowledge profile) */\n patchProjectKnowledgeProfile(args: { path: operations[\"patch_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_patch\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"patch_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_patch\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"patch_project_knowledge_profile_route_v1_projects__project_id__knowledge_profile_patch\"]>> {\n const request: RequestOptions = { method: \"PATCH\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-profile`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/knowledge-summary (Get a project's Knowledge status) */\n getProjectKnowledgeStatus(args: { path: operations[\"get_project_knowledge_status_route_v1_projects__project_id__knowledge_summary_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_project_knowledge_status_route_v1_projects__project_id__knowledge_summary_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_project_knowledge_status_route_v1_projects__project_id__knowledge_summary_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge-summary`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/knowledge/failed-files (List failed Knowledge files) */\n listKnowledgeFailedFiles(args: { path: operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge/failed-files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/knowledge/failed-files, following its cursor. */\n listKnowledgeFailedFilesAll(args: { path: operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_knowledge_failed_files_route_v1_projects__project_id__knowledge_failed_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge/failed-files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/projects/{project_id}/knowledge/retry-failed (Retry failed Knowledge files) */\n retryFailedKnowledge(args: { path: operations[\"retry_failed_knowledge_route_v1_projects__project_id__knowledge_retry_failed_post\"][\"parameters\"][\"path\"]; body?: NonNullable<operations[\"retry_failed_knowledge_route_v1_projects__project_id__knowledge_retry_failed_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"retry_failed_knowledge_route_v1_projects__project_id__knowledge_retry_failed_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/projects/${enc(String(args.path.project_id))}/knowledge/retry-failed`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/members (List project members) */\n listMembers(args: { path: operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_members_route_v1_projects__project_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/members, following its cursor. */\n listMembersAll(args: { path: operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_members_route_v1_projects__project_id__members_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_members_route_v1_projects__project_id__members_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/members`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/projects/{project_id}/members (Add a project member) */\n addMember(args: { path: operations[\"add_member_route_v1_projects__project_id__members_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"add_member_route_v1_projects__project_id__members_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"add_member_route_v1_projects__project_id__members_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/projects/${enc(String(args.path.project_id))}/members`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/projects/{project_id}/members/{principal_type}/{principal_id} (Remove a project member) */\n removeMember(args: { path: operations[\"remove_member_route_v1_projects__project_id__members__principal_type___principal_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/projects/${enc(String(args.path.project_id))}/members/${enc(String(args.path.principal_type))}/${enc(String(args.path.principal_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/model-refusals (List a project's model refusals) */\n listModelRefusals(args: { path: operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/model-refusals, following its cursor. */\n listModelRefusalsAll(args: { path: operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_model_refusals_route_v1_projects__project_id__model_refusals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/projects/{project_id}/model-refusals/files (List files with model refusals) */\n listModelRefusalFiles(args: { path: operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals/files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/model-refusals/files, following its cursor. */\n listModelRefusalFilesAll(args: { path: operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_model_refusal_files_route_v1_projects__project_id__model_refusals_files_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals/files`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/projects/{project_id}/model-refusals/summary (Get a project's model refusal counts) */\n getModelRefusalSummary(args: { path: operations[\"get_model_refusal_summary_route_v1_projects__project_id__model_refusals_summary_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_model_refusal_summary_route_v1_projects__project_id__model_refusals_summary_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_model_refusal_summary_route_v1_projects__project_id__model_refusals_summary_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/model-refusals/summary`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/projects/{project_id}/pending-invitations (List pending invitations) */\n listProjectPendingInvitations(args: { path: operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/pending-invitations`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/pending-invitations, following its cursor. */\n listProjectPendingInvitationsAll(args: { path: operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_project_pending_invitations_route_v1_projects__project_id__pending_invitations_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/pending-invitations`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** DELETE /v1/projects/{project_id}/pending-invitations/{invitation_id} (Revoke a pending invitation) */\n revokeProjectMembershipInvitation(args: { path: operations[\"revoke_project_membership_invitation_route_v1_projects__project_id__pending_invitations__invitation_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/projects/${enc(String(args.path.project_id))}/pending-invitations/${enc(String(args.path.invitation_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged runs. */\nexport class RunsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/runs (Start an agent run) */\n startChatRun(args: { body: NonNullable<operations[\"start_chat_run_v1_runs_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"start_chat_run_v1_runs_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/runs\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/runs/{run_id} (Get a run's status) */\n getRunStatus(args: { path: operations[\"get_run_status_v1_runs__run_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_run_status_v1_runs__run_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/runs/${enc(String(args.path.run_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/runs/{run_id}/cancel (Cancel a run) */\n cancelRun(args: { path: operations[\"cancel_run_v1_runs__run_id__cancel_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/runs/${enc(String(args.path.run_id))}/cancel`, idempotent: true, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/runs/{run_id}/events (Stream a run's events) */\n streamRunEvents(args: { path: operations[\"stream_run_events_v1_runs__run_id__events_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"stream_run_events_v1_runs__run_id__events_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<AsyncGenerator<RunEvent>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/runs/${enc(String(args.path.run_id))}/events`, query: args?.query as Record<string, QueryValue> | undefined, headers: { ...options?.headers, Accept: \"text/event-stream\" }, idempotencyKey: options?.idempotencyKey, signal: options?.signal };\n return this.transport.raw(request).then((response) => eventStream(response));\n }\n}\n\n/** Public operations tagged serviceAccounts. */\nexport class ServiceAccountsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/organizations/{org_id}/service-accounts (List service accounts) */\n listServiceAccounts(args: { path: operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/organizations/{org_id}/service-accounts, following its cursor. */\n listServiceAccountsAll(args: { path: operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_service_accounts_v1_organizations__org_id__service_accounts_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/organizations/{org_id}/service-accounts (Create a service account) */\n createServiceAccount(args: { path: operations[\"create_service_account_v1_organizations__org_id__service_accounts_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"create_service_account_v1_organizations__org_id__service_accounts_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_service_account_v1_organizations__org_id__service_accounts_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/organizations/{org_id}/service-accounts/{account_id}/disable (Disable a service account) */\n disableServiceAccount(args: { path: operations[\"disable_service_account_v1_organizations__org_id__service_accounts__account_id__disable_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"disable_service_account_v1_organizations__org_id__service_accounts__account_id__disable_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts/${enc(String(args.path.account_id))}/disable`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/organizations/{org_id}/service-accounts/{account_id}/keys (Mint a service account key) */\n mintServiceAccountKey(args: { path: operations[\"mint_service_account_key_v1_organizations__org_id__service_accounts__account_id__keys_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"mint_service_account_key_v1_organizations__org_id__service_accounts__account_id__keys_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"mint_service_account_key_v1_organizations__org_id__service_accounts__account_id__keys_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/organizations/${enc(String(args.path.org_id))}/service-accounts/${enc(String(args.path.account_id))}/keys`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged skills. */\nexport class SkillsApi {\n constructor(private readonly transport: Transport) {}\n\n /** POST /v1/me/skills/library/{skill_id} (Install a skill) */\n installSkill(args: { path: operations[\"install_skill_v1_me_skills_library__skill_id__post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"install_skill_v1_me_skills_library__skill_id__post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/me/skills/library/${enc(String(args.path.skill_id))}`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/me/skills/library/{skill_id} (Uninstall a skill) */\n uninstallSkill(args: { path: operations[\"uninstall_skill_v1_me_skills_library__skill_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/me/skills/library/${enc(String(args.path.skill_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/me/skills/proposals (List proposed skills) */\n listMinedSkillProposals(args?: { query?: NonNullable<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/skills/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/me/skills/proposals, following its cursor. */\n listMinedSkillProposalsAll(args?: { query?: NonNullable<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_mined_skill_proposals_v1_me_skills_proposals_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/skills/proposals\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/me/skills/proposals/{proposal_id}/accept (Accept a proposed skill) */\n acceptMinedSkillProposal(args: { path: operations[\"accept_mined_skill_proposal_v1_me_skills_proposals__proposal_id__accept_post\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"accept_mined_skill_proposal_v1_me_skills_proposals__proposal_id__accept_post\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"accept_mined_skill_proposal_v1_me_skills_proposals__proposal_id__accept_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/me/skills/proposals/${enc(String(args.path.proposal_id))}/accept`, query: args?.query as Record<string, QueryValue> | undefined, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/me/skills/proposals/{proposal_id}/dismiss (Dismiss a proposed skill) */\n dismissMinedSkillProposal(args: { path: operations[\"dismiss_mined_skill_proposal_v1_me_skills_proposals__proposal_id__dismiss_post\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"dismiss_mined_skill_proposal_v1_me_skills_proposals__proposal_id__dismiss_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/me/skills/proposals/${enc(String(args.path.proposal_id))}/dismiss`, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills (List skills) */\n listSkills(args?: { query?: NonNullable<operations[\"list_skills_route_v1_skills_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_skills_route_v1_skills_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/skills\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/skills, following its cursor. */\n listSkillsAll(args?: { query?: NonNullable<operations[\"list_skills_route_v1_skills_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_skills_route_v1_skills_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/skills\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** POST /v1/skills (Create a skill) */\n createSkill(args: { body: NonNullable<operations[\"create_skill_route_v1_skills_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_skill_route_v1_skills_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/skills\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills/{skill_id} (Get a skill) */\n getSkill(args: { path: operations[\"get_skill_route_v1_skills__skill_id__get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_skill_route_v1_skills__skill_id__get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_skill_route_v1_skills__skill_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/skills/${enc(String(args.path.skill_id))}`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/skills/{skill_id} (Delete a skill) */\n deleteSkill(args: { path: operations[\"delete_skill_v1_skills__skill_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<void> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/skills/${enc(String(args.path.skill_id))}`, responseType: \"none\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills/{skill_id}/bundle (Download a skill's files) */\n getSkillBundle(args: { path: operations[\"get_skill_bundle_v1_skills__skill_id__bundle_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_skill_bundle_v1_skills__skill_id__bundle_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/skills/${enc(String(args.path.skill_id))}/bundle`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** PUT /v1/skills/{skill_id}/bundle (Replace a skill's files) */\n replaceSkillBundle(args: { path: operations[\"replace_skill_bundle_v1_skills__skill_id__bundle_put\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"replace_skill_bundle_v1_skills__skill_id__bundle_put\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"replace_skill_bundle_v1_skills__skill_id__bundle_put\"]>> {\n const request: RequestOptions = { method: \"PUT\", path: `/v1/skills/${enc(String(args.path.skill_id))}/bundle`, body: args?.body, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/skills/{skill_id}/bundle.zip (Download a skill as a zip) */\n downloadSkillBundleZip(args: { path: operations[\"download_skill_bundle_zip_v1_skills__skill_id__bundle_zip_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<Uint8Array> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/skills/${enc(String(args.path.skill_id))}/bundle.zip`, responseType: \"bytes\", idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged threads. */\nexport class ThreadsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/me/threads (List your threads) */\n listMyThreads(args?: { query?: NonNullable<operations[\"list_my_threads_v1_me_threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_my_threads_v1_me_threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/threads\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/me/threads, following its cursor. */\n listMyThreadsAll(args?: { query?: NonNullable<operations[\"list_my_threads_v1_me_threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_my_threads_v1_me_threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: \"/v1/me/threads\", query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/projects/{project_id}/threads (List threads shared to a project) */\n listSharedThreads(args: { path: operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/threads`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** Every item of GET /v1/projects/{project_id}/threads, following its cursor. */\n listSharedThreadsAll(args: { path: operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions & { pageSize?: number }): AsyncGenerator<PageItem<operations[\"list_shared_threads_v1_projects__project_id__threads_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/projects/${enc(String(args.path.project_id))}/threads`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.paginate(request, options?.pageSize);\n }\n\n /** GET /v1/threads/{thread_id} (Get a thread you can see) */\n getThreadDetail(args: { path: operations[\"get_thread_detail_v1_threads__thread_id__get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_thread_detail_v1_threads__thread_id__get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_thread_detail_v1_threads__thread_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/threads/${enc(String(args.path.thread_id))}`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** Public operations tagged uploads. */\nexport class UploadsApi {\n constructor(private readonly transport: Transport) {}\n\n /** GET /v1/artifacts/versions/{version_id}/download-url (Get a file download link) */\n getDownloadUrl(args: { path: operations[\"get_download_url_v1_artifacts_versions__version_id__download_url_get\"][\"parameters\"][\"path\"]; query?: NonNullable<operations[\"get_download_url_v1_artifacts_versions__version_id__download_url_get\"][\"parameters\"][\"query\"]> }, options?: CallOptions): Promise<OperationResponse<operations[\"get_download_url_v1_artifacts_versions__version_id__download_url_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/artifacts/versions/${enc(String(args.path.version_id))}/download-url`, query: args?.query as Record<string, QueryValue> | undefined, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/bulk/{batch_id}/status (Get a bulk upload's status) */\n getBulkUploadStatus(args: { path: operations[\"get_bulk_upload_status_v1_bulk__batch_id__status_get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_bulk_upload_status_v1_bulk__batch_id__status_get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/bulk/${enc(String(args.path.batch_id))}/status`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/bulk/complete (Complete a bulk upload) */\n completeBulkUpload(args: { body: NonNullable<operations[\"complete_bulk_upload_v1_bulk_complete_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"complete_bulk_upload_v1_bulk_complete_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/bulk/complete\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/bulk/prepare (Prepare a bulk upload) */\n prepareBulkUpload(args: { body: NonNullable<operations[\"prepare_bulk_upload_v1_bulk_prepare_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"prepare_bulk_upload_v1_bulk_prepare_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/bulk/prepare\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/uploads (Start an upload) */\n createUpload(args: { body: NonNullable<operations[\"create_upload_v1_uploads_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"create_upload_v1_uploads_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: \"/v1/uploads\", body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** GET /v1/uploads/{upload_id} (Get an upload) */\n getUpload(args: { path: operations[\"get_upload_v1_uploads__upload_id__get\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"get_upload_v1_uploads__upload_id__get\"]>> {\n const request: RequestOptions = { method: \"GET\", path: `/v1/uploads/${enc(String(args.path.upload_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** DELETE /v1/uploads/{upload_id} (Abort an upload) */\n abortUpload(args: { path: operations[\"abort_upload_v1_uploads__upload_id__delete\"][\"parameters\"][\"path\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"abort_upload_v1_uploads__upload_id__delete\"]>> {\n const request: RequestOptions = { method: \"DELETE\", path: `/v1/uploads/${enc(String(args.path.upload_id))}`, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/uploads/{upload_id}/complete (Complete an upload) */\n completeUpload(args: { path: operations[\"complete_upload_v1_uploads__upload_id__complete_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"complete_upload_v1_uploads__upload_id__complete_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"complete_upload_v1_uploads__upload_id__complete_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/uploads/${enc(String(args.path.upload_id))}/complete`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n\n /** POST /v1/uploads/{upload_id}/parts (Get upload part URLs) */\n presignUploadParts(args: { path: operations[\"presign_upload_parts_v1_uploads__upload_id__parts_post\"][\"parameters\"][\"path\"]; body: NonNullable<operations[\"presign_upload_parts_v1_uploads__upload_id__parts_post\"][\"requestBody\"]>[\"content\"][\"application/json\"] }, options?: CallOptions): Promise<OperationResponse<operations[\"presign_upload_parts_v1_uploads__upload_id__parts_post\"]>> {\n const request: RequestOptions = { method: \"POST\", path: `/v1/uploads/${enc(String(args.path.upload_id))}/parts`, body: args?.body, idempotent: true, idempotencyKey: options?.idempotencyKey, signal: options?.signal, headers: options?.headers };\n return this.transport.request(request);\n }\n}\n\n/** All areas, as exposed on `beakr.api`. */\nexport class BeakrApi {\n readonly account: AccountApi;\n readonly apiKeys: ApiKeysApi;\n readonly conversations: ConversationsApi;\n readonly endUserTokens: EndUserTokensApi;\n readonly externalUsers: ExternalUsersApi;\n readonly files: FilesApi;\n readonly folders: FoldersApi;\n readonly integrations: IntegrationsApi;\n readonly interviews: InterviewsApi;\n readonly jobs: JobsApi;\n readonly knowledge: KnowledgeApi;\n readonly labels: LabelsApi;\n readonly openapi: OpenapiApi;\n readonly organizations: OrganizationsApi;\n readonly projects: ProjectsApi;\n readonly runs: RunsApi;\n readonly serviceAccounts: ServiceAccountsApi;\n readonly skills: SkillsApi;\n readonly threads: ThreadsApi;\n readonly uploads: UploadsApi;\n\n constructor(transport: Transport) {\n this.account = new AccountApi(transport);\n this.apiKeys = new ApiKeysApi(transport);\n this.conversations = new ConversationsApi(transport);\n this.endUserTokens = new EndUserTokensApi(transport);\n this.externalUsers = new ExternalUsersApi(transport);\n this.files = new FilesApi(transport);\n this.folders = new FoldersApi(transport);\n this.integrations = new IntegrationsApi(transport);\n this.interviews = new InterviewsApi(transport);\n this.jobs = new JobsApi(transport);\n this.knowledge = new KnowledgeApi(transport);\n this.labels = new LabelsApi(transport);\n this.openapi = new OpenapiApi(transport);\n this.organizations = new OrganizationsApi(transport);\n this.projects = new ProjectsApi(transport);\n this.runs = new RunsApi(transport);\n this.serviceAccounts = new ServiceAccountsApi(transport);\n this.skills = new SkillsApi(transport);\n this.threads = new ThreadsApi(transport);\n this.uploads = new UploadsApi(transport);\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport interface ImportedMessage {\n role: \"user\" | \"assistant\";\n content: string;\n /** ISO timestamp of the message. */\n at?: string;\n /**\n * Who wrote it: `human` only for a turn the agent host marks as typed by a\n * person, `system` for one the host wrote itself (a background task's\n * report), `agent` for the agent's turns. Omitted: `unknown`. Imported-session\n * learning quotes only `human` user turns.\n */\n author?: \"human\" | \"system\" | \"agent\" | \"unknown\";\n}\n\n/** `chatgpt-export` (a conversation from a ChatGPT data export) is stored as `chatgpt`. */\nexport type ConversationClient =\n | \"claude-code\"\n | \"codex\"\n | \"chatgpt\"\n | \"chatgpt-export\"\n | \"claude\"\n | \"generic\";\n\n/** One tool the session called and how many times so far. */\nexport interface ToolUsed {\n name: string;\n count?: number;\n}\n\nexport interface ImportOptions {\n client: ConversationClient;\n sessionId: string;\n messages: ImportedMessage[];\n /**\n * Position of `messages[0]` in the session. Send it whenever you send only\n * the messages after the ones already imported: without it the batch is read\n * as the whole session from the start. A 409 ConflictError's\n * `expectedBaseIndex` says where to resend from.\n */\n baseIndex?: number;\n projectId?: string;\n title?: string;\n /**\n * What the session was about; kept instead of the transcript. Messages sent\n * with no summary, no `storeFullText`, `compound` or `holdText` are refused\n * (422 `summary_required`); a later batch of a summarised session needs none.\n */\n summary?: string;\n filesTouched?: string[];\n /**\n * What the session read, so freshness can check it later. Send the revision\n * you read for each page; a read without one is listed but not checked.\n */\n sourcesRead?: SourceRead[];\n /**\n * The tools the session called, counted from its transcript: the session's\n * totals so far (a later import's larger count per tool is kept).\n */\n toolsUsed?: ToolUsed[];\n interactive?: boolean;\n /**\n * Keep message text. Omitted: your full-text setting for this client applies\n * (`getSettings`); true or false overrides it. Without full text, `compound`\n * or `holdText`, only the summary and references are stored, and a later\n * compound answers `nothing_to_compound`.\n */\n storeFullText?: boolean;\n /**\n * Compound right after importing. Holds the unread text, for a bounded\n * time, until that capture reads it.\n */\n compound?: boolean;\n /**\n * Hold this batch's text for a compound requested later (a session sent in\n * several batches, or compounded with `engine.compound`), without queuing\n * one now. Released at the same deadline as `compound`.\n */\n holdText?: boolean;\n}\n\n/** What an import stored: `conversation_id`, `created`, `appended`, `revision`, `stored`, ... */\nexport type ConversationImported = ResponseOf<\"/v1/conversations/import\", \"post\">;\n\n/** A page of imported conversations: `{data, next_cursor, has_more}`. */\nexport type ConversationPage = ResponseOf<\"/v1/conversations\", \"get\">;\n\n/** One imported conversation as a {@link ConversationPage} lists it. */\nexport type ConversationSummary = ConversationPage[\"data\"][number];\n\nexport interface ListConversationsQuery {\n client?: string;\n projectId?: string;\n q?: string;\n limit?: number;\n cursor?: string;\n}\n\nexport interface SearchConversationsOptions {\n projectId?: string;\n /** Also search your Beakr chats by title. Default true. */\n includeThreads?: boolean;\n /**\n * \"all\" (default): every word must appear; quotes and `-word` work.\n * \"any\": a natural-language question, ranked by how many of its words match.\n */\n match?: \"all\" | \"any\";\n limit?: number;\n}\n\nexport interface ConversationHit extends JsonObject {\n kind: \"imported\" | \"ask_thread\";\n id: string;\n title: string | null;\n summary: string | null;\n href: string;\n}\n\n/**\n * What a session read: a Knowledge page with the revision it read, a document\n * (file) with the stored version it read, or a source by reference.\n */\nexport type SourceRead =\n | { page_id: string; revision?: number }\n | { document_id: string; version_id?: string }\n | { source_ref: string; version?: string };\n\nexport class Conversations extends Resource {\n /** Import (or append to) a session. Not retried after an ambiguous failure. */\n import(options: ImportOptions): Promise<ConversationImported> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/conversations/import\",\n idempotent: true,\n body: cleanBody({\n client: options.client,\n session_id: options.sessionId,\n base_index: options.baseIndex,\n messages: options.messages,\n project_id: options.projectId,\n title: options.title,\n summary: options.summary,\n files_touched: options.filesTouched,\n sources_read: options.sourcesRead,\n tools_used: options.toolsUsed,\n interactive: options.interactive,\n store_full_text: options.storeFullText,\n compound: options.compound,\n hold_text: options.holdText,\n }),\n });\n }\n\n list(query: ListConversationsQuery = {}): Promise<ConversationPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/conversations\", query: this.query(query) });\n }\n\n /** Every conversation, following cursors. */\n iter(query: Omit<ListConversationsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<ConversationSummary> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/conversations\", query: this.query(query) }, pageSize);\n }\n\n get(conversationId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"GET\", path: `/v1/conversations/${enc(conversationId)}` });\n }\n\n /** Your own conversations about `q` (imported sessions and Beakr chats), best first. */\n search(q: string, options: SearchConversationsOptions = {}): Promise<{ data: ConversationHit[]; query: string }> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/conversations/search\",\n query: {\n q,\n project_id: options.projectId,\n include_threads: options.includeThreads === false ? \"false\" : \"true\",\n match: options.match ?? \"all\",\n limit: options.limit,\n },\n });\n }\n\n delete(conversationId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/conversations/${enc(conversationId)}`,\n responseType: \"none\",\n });\n }\n\n private query(query: ListConversationsQuery) {\n return {\n client: query.client,\n project_id: query.projectId,\n q: query.q,\n limit: query.limit,\n cursor: query.cursor,\n };\n }\n}\n","import { ValidationError } from \"../errors.js\";\nimport type { BodyOf, ResponseOf } from \"../types.js\";\nimport { OrgScoped, enc } from \"./base.js\";\n\nconst USER_ID = /^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$/;\n\n/**\n * `value` as an external user's `user_id`. An `external_id` is unique only within\n * the service account that created the user, so it names no user on its own and\n * is refused before any request.\n */\nexport function userIdOf(value: string): string {\n if (!USER_ID.test(value)) {\n throw new ValidationError(\n `${JSON.stringify(value)} is not a user_id. External users are addressed by their user_id ` +\n `(a uuid from create or list); find it with externalUsers.list({ externalId: ${JSON.stringify(value)} }).`,\n { code: \"validation_error\" },\n );\n }\n return value;\n}\n\nconst BASE = \"/v1/organizations/{org_id}/external-users\" as const;\nconst ONE = \"/v1/organizations/{org_id}/external-users/{user_id}\" as const;\n\nexport type ExternalUser = ResponseOf<typeof ONE, \"get\">;\nexport type ExternalUserPage = ResponseOf<typeof BASE, \"get\">;\n\n/**\n * The users of your own product, mirrored into your organization so tokens\n * minted for them (`endUserTokens.mint({ externalUserId })`) act as them.\n * `create` is idempotent on `external_id`, which is unique per creating service\n * account: `get`, `update`, `delete` and token minting take the `user_id`, and\n * `list({ externalId })` finds the one your credential created. Each method takes\n * the org id last, defaulting to the caller's active organization.\n */\nexport class ExternalUsers extends OrgScoped {\n async list(\n query: { externalId?: string; cursor?: string; limit?: number } = {},\n orgId?: string,\n ): Promise<ExternalUserPage> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/external-users`,\n query: { external_id: query.externalId, cursor: query.cursor, limit: query.limit },\n });\n }\n\n async create(body: BodyOf<typeof BASE, \"post\">, orgId?: string): Promise<ResponseOf<typeof BASE, \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/external-users`,\n idempotent: true,\n body,\n });\n }\n\n async get(userId: string, orgId?: string): Promise<ExternalUser> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/external-users/${enc(userIdOf(userId))}`,\n });\n }\n\n async update(userId: string, body: BodyOf<typeof ONE, \"patch\">, orgId?: string): Promise<ExternalUser> {\n return this.transport.request({\n method: \"PATCH\",\n path: `${await this.orgBase(orgId)}/external-users/${enc(userIdOf(userId))}`,\n body,\n });\n }\n\n /** Remove the user; what they put into projects stays. */\n async delete(userId: string, orgId?: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `${await this.orgBase(orgId)}/external-users/${enc(userIdOf(userId))}`,\n responseType: \"none\",\n });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\nimport { userIdOf } from \"./external-users.js\";\n\nexport type EndUserToken = ResponseOf<\"/v1/auth/end-user-tokens\", \"post\">;\nexport type EndUserTokenPage = ResponseOf<\"/v1/auth/end-user-tokens\", \"get\">;\n\n/**\n * Give either `externalUserId` (the token acts as that external user, and its\n * label and project memberships decide its projects), or `subject` with\n * `projectIds` (the token acts as your service account, confined to those\n * projects). The server refuses both together.\n */\nexport interface MintEndUserTokenOptions {\n /** Who the token acts for in your product; recorded in the audit trail. With `projectIds`. */\n subject?: string;\n /** An external user (see `externalUsers`) the token acts as, by its `user_id`. Without `subject`/`projectIds`. */\n externalUserId?: string;\n /** Scopes, never more than the caller's own. */\n scopes: string[];\n /** Confine the token to these projects. With `subject`. */\n projectIds?: string[];\n /** Lifetime in seconds. */\n ttlSeconds?: number;\n}\n\n/**\n * Short-lived tokens you mint for the users of your own product, so their\n * requests run as them and never with more than your key can do. Mint with an\n * API key (a service account's, for an embedded product).\n */\nexport class EndUserTokens extends Resource {\n /** Mint a token; `token` is shown once. Not retried: a retry mints another. */\n mint(options: MintEndUserTokenOptions): Promise<EndUserToken> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/auth/end-user-tokens\",\n body: cleanBody({\n subject: options.subject,\n external_user_id:\n options.externalUserId === undefined ? undefined : userIdOf(options.externalUserId),\n scopes: options.scopes,\n project_ids: options.projectIds,\n ttl_seconds: options.ttlSeconds,\n }),\n });\n }\n\n /** One page of live end-user tokens, newest first. */\n list(query: { subject?: string; cursor?: string; limit?: number } = {}): Promise<EndUserTokenPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/auth/end-user-tokens\", query });\n }\n\n /** Revoke a token; it stops working immediately. */\n revoke(tokenId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/auth/end-user-tokens/${enc(tokenId)}`,\n responseType: \"none\",\n });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource } from \"./base.js\";\n\n/** Onboarding context: `format`, the rendered `content`, and its `blocks`. */\nexport type AgentContext = ResponseOf<\"/v1/context\", \"post\">;\n\nexport interface ContextOptions {\n projectId?: string;\n question?: string;\n /** ISO timestamp: include what changed since then. */\n since?: string;\n format?: \"json\" | \"markdown\" | \"claude_md\" | \"agents_md\";\n budgetChars?: number;\n /** The agent starting the session (`claude-code`, `codex`); each keeps its own last session. Omitted: the `X-Beakr-Client` header. */\n client?: string;\n}\n\nexport class Engine extends Resource {\n /** Onboarding context for an agent: profiles, memories, recent changes, skills, entities. */\n context(options: ContextOptions = {}): Promise<AgentContext> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/context\",\n body: cleanBody({\n project_id: options.projectId,\n question: options.question,\n since: options.since,\n format: options.format ?? \"markdown\",\n budget_chars: options.budgetChars,\n client: options.client,\n }),\n });\n }\n\n /** Send the not-yet-compounded part of an imported conversation to Knowledge (202). */\n compound(conversationId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"POST\", path: \"/v1/compound\", body: { conversation_id: conversationId } });\n }\n\n /**\n * Stop a queued or running compound of an imported conversation. A batch\n * already being read finishes and its proposals stay; no further batch\n * starts, and the conversation's `compound_status` reads `cancelled`.\n * {@link compound} resumes from where it stopped. Returns\n * `{conversation_id, status, pending_messages}`; `status` is\n * `nothing_to_cancel` when no compound was queued or running.\n */\n cancelCompound(conversationId: string): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/compound/cancel\",\n body: { conversation_id: conversationId },\n // Cancelling twice is cancelling once, so an ambiguous failure may be resent.\n idempotent: true,\n });\n }\n}\n","import { NotFoundError } from \"../errors.js\";\nimport type { BodyOf, JsonObject, ResponseOf } from \"../types.js\";\nimport { assertInside, namesDirectory, safePathComponent } from \"../paths.js\";\nimport { Resource, enc } from \"./base.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\n\nexport interface DownloadLocation {\n url: string;\n artifact: JsonObject;\n}\n\nexport interface DownloadedFile {\n data: Uint8Array;\n /** The original file name (else the title, else the id), with no directory. */\n filename: string;\n artifact: JsonObject;\n}\n\nfunction baseName(name: string): string {\n return name.split(/[\\\\/]/).pop() || name;\n}\n\n/** A signed download of a file's original bytes (`POST /v1/artifacts/download-url`). */\nexport type DownloadLink = ResponseOf<\"/v1/artifacts/download-url\", \"post\">;\n\n/** A file's bytes saved from {@link Files.downloadReference}. */\nexport interface DownloadedReference {\n data: Uint8Array;\n filename: string;\n file: DownloadLink[\"file\"];\n}\n\n/** One window of a file's text (`POST /v1/artifacts/read`). */\nexport type FileRead = ResponseOf<\"/v1/artifacts/read\", \"post\">;\n\nexport interface ReadFileOptions {\n /** The place to read around (`p. 7`, `slide 3`, `sheet 2, B4:D9`, `lines 10-30`). */\n unit?: string;\n /** Without a unit: the first character to return (default 0). */\n offset?: number;\n /** The most characters to return (default and maximum 20,000; a unit's window is at most 6,000). */\n maxChars?: number;\n /**\n * Only open a file in this project (its id or name). A project you cannot read\n * rejects with `NotFoundError`, naming the closest ones.\n */\n project?: string;\n signal?: AbortSignal;\n}\n\n/**\n * Files: reading a file by any reference a Knowledge read hands out, and the\n * download helpers (the Python SDK's `files.read`, `download_url`, `download`).\n */\nexport class Files extends Resource {\n /**\n * Read a file's extracted text by a file id, a version id, a source record's\n * `source_ref` (`beakr-source:v1:...`, from any Knowledge read or research\n * answer), a citation token (`{{artifact:<uuid>-u3}}`) or its path as a Sources\n * line prints it (`deals/acme/Closing/memo.docx`, or a trailing part naming one\n * file). With `unit`, or ` › <unit>` after the reference (`memo.pdf › p. 7`), the\n * window is the text around that place; a token's or source_ref's own passage is\n * its unit. Continue a plain read with `next_offset` as `offset`, a paged unit\n * with `next_reference`. Rejects with `NotFoundError` when the reference reaches\n * no readable file, `ConflictError` (`ambiguous_reference`) when a path names\n * several, and `ValidationError` for a Knowledge page's source_ref\n * (`knowledge_page`: read it with the knowledge_base `cat` command) or a\n * connected item's (`not_a_file`): only uploads and canvases are files.\n */\n read(reference: string, options: ReadFileOptions = {}): Promise<FileRead> {\n const body: BodyOf<\"/v1/artifacts/read\", \"post\"> = {\n reference: options.unit ? `${reference}#${options.unit}` : reference,\n offset: options.offset ?? 0,\n max_chars: options.maxChars ?? 20_000,\n ...(options.project ? { project: options.project } : {}),\n };\n return this.transport.request<FileRead>({\n method: \"POST\",\n path: \"/v1/artifacts/read\",\n body,\n idempotent: true,\n signal: options.signal,\n });\n }\n\n /**\n * A short-lived signed URL for a file's original bytes, by any reference\n * {@link Files.read} takes: a source record's `source_ref` (from a Knowledge\n * read, research answer or documents search), a file or version id, a citation\n * token or a path. A reference that names a version downloads that version; any\n * other, the current one. Rejects with `ValidationError` for a Knowledge page's\n * or connected item's reference (`knowledge_page`, `not_a_file`), `ConflictError`\n * for a Beakr document with no stored original (`no_original_file`) and\n * `NotFoundError` for a file you cannot read.\n */\n downloadLink(\n reference: string,\n options: { inline?: boolean; signal?: AbortSignal } = {},\n ): Promise<DownloadLink> {\n const body: BodyOf<\"/v1/artifacts/download-url\", \"post\"> = {\n reference,\n inline: options.inline ?? false,\n };\n return this.transport.request<DownloadLink>({\n method: \"POST\",\n path: \"/v1/artifacts/download-url\",\n body,\n idempotent: true,\n signal: options.signal,\n });\n }\n\n /** The original bytes and name of the file a reference names, in any runtime. */\n async downloadReference(\n reference: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<DownloadedReference> {\n const link = await this.downloadLink(reference, options);\n const data = await this.transport.getExternalBytes(link.url, options);\n return { data, filename: baseName(String(link.filename || reference)), file: link.file };\n }\n\n /**\n * A short-lived presigned URL for the current version's original bytes.\n * {@link Files.downloadLink} does this in one request, from any reference.\n */\n async downloadUrl(artifactId: string): Promise<DownloadLocation> {\n const artifact = await this.transport.request<JsonObject>({\n method: \"GET\",\n path: `/v1/artifacts/${enc(artifactId)}`,\n });\n const versionId = artifact[\"current_version_id\"];\n if (!versionId) {\n throw new NotFoundError(`File ${artifactId} has no uploaded version to download.`, {\n code: \"not_found\",\n });\n }\n const signed = await this.transport.request<{ url: string }>({\n method: \"GET\",\n path: `/v1/artifacts/versions/${enc(String(versionId))}/download-url`,\n });\n return { url: signed.url, artifact };\n }\n\n /** The original file's bytes and name, in any runtime. */\n async download(artifactId: string, options: { signal?: AbortSignal } = {}): Promise<DownloadedFile> {\n const located = await this.downloadUrl(artifactId);\n const data = await this.transport.getExternalBytes(located.url, options);\n const name = located.artifact[\"original_filename\"] ?? located.artifact[\"title\"] ?? artifactId;\n return { data, filename: baseName(String(name)), artifact: located.artifact };\n }\n\n /**\n * Save the original file (Node). `destination` may be a directory (one that\n * exists, or a path ending in `/`, created if missing), in which case the\n * file keeps its original name. Resolves to the path written.\n */\n async downloadTo(artifactId: string, destination: string): Promise<string> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const file = await this.download(artifactId);\n let target = destination;\n const existing = await fs.stat(destination).catch(() => undefined);\n if (namesDirectory(destination, existing?.isDirectory() ?? false)) {\n // The name comes from the server: one plain file name, kept inside the folder.\n target = nodePath.join(destination, safePathComponent(file.filename, \"the file's name\"));\n assertInside(nodePath, destination, target, \"the downloaded file\");\n }\n await fs.mkdir(nodePath.dirname(target), { recursive: true });\n await fs.writeFile(target, file.data);\n return target;\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { BodyOf, JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type IntegrationToolPage = ResponseOf<\"/v1/integrations/tools\", \"get\">;\nexport type IntegrationTool = IntegrationToolPage[\"data\"][number];\nexport type IntegrationToolResult = ResponseOf<\"/v1/integrations/tools/{tool_name}/call\", \"post\">;\ntype ToolCallBody = NonNullable<BodyOf<\"/v1/integrations/tools/{tool_name}/call\", \"post\">>;\n\nexport interface ToolsQuery {\n /** Only this provider's tools (`slack`, `google-drive`, ...). */\n provider?: string;\n /** Only the tools of this one connection. */\n connectorId?: string;\n cursor?: string;\n limit?: number;\n}\n\n/**\n * Integrations: connect (a browser link; OAuth finishes in the browser), list,\n * status and disconnect, and query what the caller has connected with the\n * same read-only tools Beakr's agent uses (`tools`, `callTool`). Scopes\n * `integrations:read` / `integrations:admin`.\n */\nexport class Integrations extends Resource {\n /** One page of the connections you can see, each with the projects it feeds. */\n list(\n query: { cursor?: string; limit?: number } = {},\n ): Promise<{ data: JsonObject[]; next_cursor?: string | null; has_more?: boolean }> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/integrations\",\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every connection you can see, following cursors. */\n iter(pageSize?: number): AsyncGenerator<JsonObject> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/integrations\" }, pageSize);\n }\n\n /** Returns `connect_url`; open it in a browser to finish connecting. */\n connect(provider: string, options: { scope?: \"user\" | \"org\" } = {}): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/integrations/${enc(provider)}/connect`,\n body: { scope: options.scope ?? \"user\" },\n });\n }\n\n status(connectorId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"GET\", path: `/v1/integrations/${enc(connectorId)}/status` });\n }\n\n /**\n * One page of the read-only tools for the integrations the caller has\n * connected, each with its `input_schema` and the connections it can use.\n */\n tools(query: ToolsQuery = {}): Promise<IntegrationToolPage> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/integrations/tools\",\n query: {\n provider: query.provider,\n connector_id: query.connectorId,\n cursor: query.cursor,\n limit: query.limit,\n },\n });\n }\n\n /** Every tool, following cursors. */\n iterTools(query: Omit<ToolsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<IntegrationTool> {\n return this.transport.paginate(\n {\n method: \"GET\",\n path: \"/v1/integrations/tools\",\n query: { provider: query.provider, connector_id: query.connectorId },\n },\n pageSize,\n );\n }\n\n /**\n * Run one read-only tool against the caller's connected integration and\n * answer its text, the sources it read, and whether it reported a failure.\n * `connectorId` picks the connection when the caller has more than one for\n * the provider. Tools that change data in the connected account are refused.\n */\n callTool(\n toolName: string,\n args: ToolCallBody[\"arguments\"] = {},\n options: { connectorId?: string } = {},\n ): Promise<IntegrationToolResult> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/integrations/tools/${enc(toolName)}/call`,\n body: cleanBody({ arguments: args, connector_id: options.connectorId }),\n });\n }\n\n disconnect(connectorId: string): Promise<JsonObject> {\n return this.transport.request({ method: \"DELETE\", path: `/v1/integrations/${enc(connectorId)}` });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { BodyOf, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type InterviewLink = ResponseOf<\"/v1/interview/links\", \"post\">;\nexport type InterviewLinkBody = BodyOf<\"/v1/interview/links\", \"post\">;\nexport type InterviewResult = ResponseOf<\"/v1/interview/sendables/links/{link_id}/result\", \"get\">;\nexport type SendableInterviewPage = ResponseOf<\"/v1/interview/sendables\", \"get\">;\nexport type SendableInterviewBody = BodyOf<\"/v1/interview/sendables\", \"post\">;\nexport type SendableLink = ResponseOf<\"/v1/interview/sendables/{sendable_id}/links\", \"post\">;\nexport type SendableLinkBody = BodyOf<\"/v1/interview/sendables/{sendable_id}/links\", \"post\">;\n\nexport interface CreateLinkOptions {\n /** What the interview should find out. */\n goal?: string;\n /** Questions to make sure it asks. */\n questions?: InterviewLinkBody[\"questions\"];\n /** Who it is for (`name`, `email`); recorded on the link, nothing is sent. */\n recipient?: InterviewLinkBody[\"recipient\"];\n /** ISO timestamp; the link stops working then. */\n expiresAt?: string;\n}\n\n/**\n * Interviews you send: create one and get a link to hand to anyone, read the\n * result when they finish, and send the finished interview into projects'\n * Knowledge. Scopes `interviews:read` / `interviews:write`.\n */\nexport class Interviews extends Resource {\n /**\n * Create an interview and one link to it in one call. Answers `url` (the\n * link to send; shown once), `link_id`, `sendable_id`, `expires_at` and\n * `result_url`.\n */\n createLink(title: string, options: CreateLinkOptions = {}): Promise<InterviewLink> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/interview/links\",\n idempotent: true,\n body: cleanBody({\n title,\n goal: options.goal,\n questions: options.questions,\n recipient: options.recipient,\n expires_at: options.expiresAt,\n }) as InterviewLinkBody,\n });\n }\n\n /** What happened on a link: `status`, the summary and transcript once finished. */\n linkResult(linkId: string): Promise<InterviewResult> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/interview/sendables/links/${enc(linkId)}/result`,\n });\n }\n\n /** Put a finished interview into one or more projects' Knowledge. */\n sendToProjects(linkId: string, projectIds: string[]): Promise<unknown> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/interview/sendables/links/${enc(linkId)}/knowledge`,\n idempotent: true,\n body: { project_ids: projectIds },\n });\n }\n\n /** Stop a link working; its result so far stays readable. */\n revokeLink(linkId: string): Promise<void> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/interview/sendables/links/${enc(linkId)}/revoke`,\n responseType: \"none\",\n });\n }\n\n /** One page of your sendable interviews, newest first. */\n sendables(query: { cursor?: string; limit?: number } = {}): Promise<SendableInterviewPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/interview/sendables\", query });\n }\n\n /** Create a sendable interview to make links for (`linkFor`). */\n createSendable(body: SendableInterviewBody): Promise<unknown> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/interview/sendables\",\n idempotent: true,\n body,\n });\n }\n\n /** Another link to an existing sendable interview. */\n linkFor(sendableId: string, body: SendableLinkBody = {}): Promise<SendableLink> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/interview/sendables/${enc(sendableId)}/links`,\n idempotent: true,\n body,\n });\n }\n}\n","import type { JsonObject } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\n/**\n * One long operation (`GET /v1/jobs/{job_id}`): an agent or workflow run, a\n * project import, an integration sync, a webpage import, a Knowledge compile or\n * a bulk upload, all in one shape.\n */\nexport interface Job extends JsonObject {\n job_id: string;\n kind: string;\n /** `queued`, `running`, `succeeded`, `failed` or `cancelled`. */\n status: string;\n native_status: string | null;\n progress: { done: number; total: number | null } | null;\n result: JsonObject | null;\n error: { code: string; message: string | null } | null;\n project_id: string | null;\n created_at: string | null;\n finished_at: string | null;\n status_url: string;\n resource_url: string;\n}\n\n/** Anything that names a job: its id, or a response carrying `job_id`. */\nexport type JobReference = string | { job_id?: unknown };\n\nexport interface JobWaitOptions {\n /** First poll interval (default 1000 ms); each later wait is `backoff` times longer. */\n intervalMs?: number;\n /** Longest wait between polls (default 15000 ms). */\n maxIntervalMs?: number;\n /** Growth factor per poll (default 1.5). */\n backoff?: number;\n /** Give up after this long (default 600000 ms). */\n timeoutMs?: number;\n /** Throw {@link JobFailedError} for a `failed` or `cancelled` job. */\n raiseOnFailure?: boolean;\n}\n\n/** Job states that will not change again. */\nexport const TERMINAL_JOB_STATUSES = new Set([\"succeeded\", \"failed\", \"cancelled\"]);\n\nexport class JobTimeoutError extends Error {\n constructor(\n readonly jobId: string,\n readonly last: Job,\n ) {\n super(`Job ${jobId} is still ${JSON.stringify(last.status)}`);\n this.name = \"JobTimeoutError\";\n }\n}\n\nexport class JobFailedError extends Error {\n constructor(readonly job: Job) {\n super(`Job ${job.job_id} ${job.status}: ${job.error?.message ?? job.error?.code ?? job.status}`);\n this.name = \"JobFailedError\";\n }\n}\n\nexport function jobIdOf(job: JobReference): string {\n if (typeof job === \"string\") return job;\n if (job && typeof job.job_id === \"string\" && job.job_id) return job.job_id;\n throw new TypeError(\"This response does not reference a job (no job_id).\");\n}\n\n/** Long operations: read one, or wait for it with backoff. */\nexport class Jobs extends Resource {\n get(job: JobReference): Promise<Job> {\n return this.transport.request({ method: \"GET\", path: `/v1/jobs/${enc(jobIdOf(job))}` });\n }\n\n /** Poll until the job is final and return it; throws {@link JobTimeoutError} at the timeout. */\n async wait(job: JobReference, options: JobWaitOptions = {}): Promise<Job> {\n const backoff = options.backoff ?? 1.5;\n const maxInterval = options.maxIntervalMs ?? 15_000;\n let interval = options.intervalMs ?? 1000;\n if (interval <= 0 || backoff < 1 || maxInterval < interval) {\n throw new RangeError(\"Need intervalMs > 0, backoff >= 1 and maxIntervalMs >= intervalMs.\");\n }\n const jobId = jobIdOf(job);\n const deadline = Date.now() + (options.timeoutMs ?? 600_000);\n for (;;) {\n const state = await this.get(jobId);\n if (TERMINAL_JOB_STATUSES.has(state.status)) {\n if (options.raiseOnFailure && state.status !== \"succeeded\") throw new JobFailedError(state);\n return state;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) throw new JobTimeoutError(jobId, state);\n await this.transport.sleeper(Math.min(interval, remaining));\n interval = Math.min(maxInterval, interval * backoff);\n }\n }\n}\n","import type { QuerySpec } from \"./query-spec.js\";\nimport type { ResponseMeta } from \"../core.js\";\nimport { KnowledgeCommandError } from \"../errors.js\";\nimport { publicSource, type SourceRecord } from \"../sources.js\";\nimport type { JsonObject, ResponseOf, components } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\n/**\n * How long a research call waits for its answer, whatever the client's timeout:\n * the engine gives the research route up to 150s (an agentic loop that reads\n * documents from connected services), so a 60s client would give up first.\n */\nexport const RESEARCH_TIMEOUT_MS = 170_000;\n/** Milliseconds a quick research call waits: the engine ends a quick run within 16s. */\nexport const QUICK_RESEARCH_TIMEOUT_MS = 30_000;\n\n/** A documents command's response; a `search` adds `results`. */\nexport type DocumentsResult = ResponseOf<\"/v1/knowledge/documents\", \"post\">;\n\n/** A research answer: `text`, `answer`, `sources`, `engine`, `stopped_early`, ... */\nexport type ResearchResult = ResponseOf<\"/v1/knowledge/research\", \"post\">;\n\nexport interface DocumentsSearchOptions {\n /** Documents per page (default 8, max 25). */\n limit?: number;\n /** Documents to skip. */\n offset?: number;\n /** Best passages per document (default 2, max 5). */\n passages?: number;\n /** A folder, a glob, or one document's path. */\n path?: string;\n /** Drive-path globs; `!` excludes. */\n glob?: string | string[];\n /** File kinds: pdf, docx, xlsx, csv, pptx, md, txt, email, ... */\n type?: string | string[];\n /** Search inside one document: id, path, title or citation token. */\n document?: string;\n /** A project id or name; omit for everything you can read. */\n projectId?: string;\n}\n\n/** The `rows` command's filters (every map card's Facts, Connections or Findings rows). */\nexport interface RowsOptions {\n /** Card type to read. */\n pageType?: string;\n /** Card titles containing this. */\n entity?: string;\n /** Field name: Facts attribute, Connections relation, Findings kind. */\n attribute?: string;\n /** Rows whose text contains this. */\n query?: string;\n /** Connections only: rows pointing at this page. */\n to?: string;\n /** Only cards linked to this page, in either direction. */\n connectedTo?: string;\n /** Facts only: each card's value on this day (YYYY-MM-DD). */\n asOf?: string;\n /** When window start. */\n startDate?: string;\n /** When window end. */\n endDate?: string;\n /** Facts: the current value per attribute. */\n currentOnly?: boolean;\n /** Counts and totals per group (entity, entity_type, year or a column) instead of rows. */\n groupBy?: string;\n /** Read attribute, to and query as case-insensitive regular expressions. */\n regex?: boolean;\n /**\n * `values` (default), `fields` (field names, counts, examples), `groups`, or\n * `conflicts` (Facts: pairs of rows on one card giving one field different values\n * with overlapping or missing When).\n */\n view?: \"values\" | \"fields\" | \"groups\" | \"conflicts\";\n /** Exactly one field, as the field inventory names it. */\n fieldId?: string;\n /**\n * How `attribute` finds a field and `query` matches values: `meaning` (the default),\n * `similar` (words only) or `exact`.\n */\n match?: \"exact\" | \"similar\" | \"meaning\";\n /** Continue a card scan that stopped at its cap, after this card id. */\n afterCard?: string;\n /** Column to sort by (Facts also `amount` or `date`). */\n orderBy?: string;\n descending?: boolean;\n limit?: number;\n offset?: number;\n includeEvidence?: boolean;\n /** A project name or id. */\n scope?: string;\n}\n\n/** `RowsOptions` keys as the `rows` command names them. */\nconst ROWS_ARGUMENTS: Record<Exclude<keyof RowsOptions, \"scope\">, string> = {\n pageType: \"page_type\",\n entity: \"entity\",\n attribute: \"attribute\",\n query: \"query\",\n to: \"to\",\n connectedTo: \"connected_to\",\n asOf: \"as_of\",\n startDate: \"start_date\",\n endDate: \"end_date\",\n currentOnly: \"current_only\",\n groupBy: \"group_by\",\n regex: \"regex\",\n view: \"view\",\n fieldId: \"field_id\",\n match: \"match\",\n afterCard: \"after_card\",\n orderBy: \"order_by\",\n descending: \"descending\",\n limit: \"limit\",\n offset: \"offset\",\n includeEvidence: \"include_evidence\",\n};\n\n/** Options for {@link Knowledge.research}. */\nexport interface ResearchOptions {\n /** A short cited answer within 15 seconds from one search. */\n quick?: boolean;\n}\n\n/** The door's reply: `{content: [{type, text}], outcome, sources}`; a refusal's `outcome.error_code` names why. */\nexport interface KnowledgeResult extends JsonObject {\n content?: { type: string; text?: string }[];\n outcome?: { status?: string; error_code?: string; [key: string]: unknown };\n sources?: unknown[];\n}\n\n/** Who filed a proposal: the person, and the API credential, client, agent and run used. */\nexport type ProposalFiledBy = components[\"schemas\"][\"ProposalFiledBy\"];\n\n/** The proposal a section or row write staged: its `id`, `content_hash` (an accept's `reviewedHash`) and `filed_by`. */\nexport type StagedProposal = components[\"schemas\"][\"StagedProposalRef\"];\n\n/**\n * A write's reply. A write that stages a proposal for one section or card row\n * (`edit_section`, `add_fact`, `add_connection`, `add_finding`, `edit_rows`)\n * names it in `proposal`, so it can be accepted with its `content_hash` as the\n * reviewed hash.\n */\nexport interface KnowledgeWriteResult extends KnowledgeResult {\n proposal?: StagedProposal | null;\n}\n\n/** One proposal as the proposals routes return it, with who filed it (`filed_by`). */\nexport type WikiProposal = ResponseOf<\"/v1/knowledge/wiki/proposals/{proposal_id}\", \"get\">;\n\n/** A page of proposals: `{data, next_cursor, has_more}`. */\nexport type WikiProposalPage = ResponseOf<\"/v1/knowledge/wiki/proposals\", \"get\">;\n\n/** One proposal as a page of {@link WikiProposalPage} lists it. */\nexport type ListedWikiProposal = WikiProposalPage[\"data\"][number];\n\nexport interface DoorOptions {\n /** A project id or name to read or write in. */\n scope?: string;\n /** Reject with KnowledgeCommandError when the door reports `outcome.status === \"error\"`. Default true. */\n check?: boolean;\n}\n\n/** The text parts of a door reply, joined. */\nexport function resultText(result: KnowledgeResult): string {\n return (result.content ?? [])\n .map((part) => part.text ?? \"\")\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction checked<R extends KnowledgeResult>(result: R, check: boolean, meta?: ResponseMeta): R {\n if (check && result.outcome?.status === \"error\") {\n // The door's outcome protocol (`beakr.wiki_tool_outcome.v1`) names the\n // refusal in `error_code`; `code` is read only as a fallback.\n const outcomeCode = result.outcome[\"error_code\"] ?? result.outcome[\"code\"];\n throw new KnowledgeCommandError(resultText(result) || \"The Knowledge command was refused.\", result, {\n status: meta?.status,\n requestId: meta?.requestId,\n ...(typeof outcomeCode === \"string\" && outcomeCode ? { code: outcomeCode } : {}),\n });\n }\n return result;\n}\n\n/** The filters and paging `GET /v1/knowledge/wiki/proposals` takes. */\nexport interface ListProposalsQuery {\n /** `pending` (the default), `dismissed`, ... */\n status?: string;\n projectId?: string;\n groupId?: string;\n labelId?: string;\n /** The proposals one write batch staged. */\n batchId?: string;\n source?: string;\n cursor?: string;\n limit?: number;\n}\n\nfunction proposalsQuery(query: ListProposalsQuery): Record<string, string | number | undefined> {\n return {\n status: query.status,\n project_id: query.projectId,\n group_id: query.groupId,\n label_id: query.labelId,\n batch_id: query.batchId,\n source: query.source,\n cursor: query.cursor,\n limit: query.limit,\n };\n}\n\nclass Proposals extends Resource {\n /** One page of proposals (pending by default); {@link iter} follows every page. */\n list(query: ListProposalsQuery = {}): Promise<WikiProposalPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: proposalsQuery(query) });\n }\n\n /** Every proposal matching the filters, following cursors. */\n iter(query: Omit<ListProposalsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<ListedWikiProposal> {\n return this.transport.paginate(\n { method: \"GET\", path: \"/v1/knowledge/wiki/proposals\", query: proposalsQuery(query) },\n pageSize,\n );\n }\n\n get(proposalId: string): Promise<WikiProposal> {\n return this.transport.request({ method: \"GET\", path: `/v1/knowledge/wiki/proposals/${enc(proposalId)}` });\n }\n\n /**\n * Apply a proposal. `reviewedHash` is the `content_hash` of the {@link get} you\n * reviewed, sent unchanged: a proposal that changed since is refused (409\n * `proposal_changed`) and nothing is applied, and a proposal that changes a card's\n * table rows can require it (422 `review_required`). This never reads the proposal\n * to fill it in, because a hash from a read made at accept time would bind the\n * accept to whatever the proposal is then rather than to what was reviewed.\n */\n accept(proposalId: string, options: { reviewedHash?: string } = {}): Promise<unknown> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/knowledge/wiki/proposals/${enc(proposalId)}/accept`,\n ...(options.reviewedHash !== undefined ? { body: { reviewed_hash: options.reviewedHash } } : {}),\n });\n }\n\n dismiss(proposalId: string): Promise<unknown> {\n return this.transport.request({ method: \"POST\", path: `/v1/knowledge/wiki/proposals/${enc(proposalId)}/dismiss` });\n }\n}\n\n/** Knowledge pages over REST, as structured records. */\nclass Pages extends Resource {\n /**\n * Every source that fed a page, as public source records: filename,\n * provider, `location` (the original's URL or path, or `file_id` for Beakr's\n * copy), the cited excerpt, its stance and the section it backs.\n */\n async sources(pageId: string): Promise<SourceRecord[]> {\n const records: SourceRecord[] = [];\n for await (const row of this.transport.paginate<Record<string, unknown>>(\n { method: \"GET\", path: `/v1/knowledge/wiki/pages/${enc(pageId)}/sources` },\n 200,\n )) {\n records.push(publicSource(row));\n }\n return records;\n }\n}\n\n/**\n * Knowledge through the same door Beakr's own agents use: `command` runs a\n * read (`ls`, `cat`, `sections`, `grep`, `rows`, `timeline`, ...), `write`\n * stages a change (`new`, `edit_section`, `add_fact`, ...).\n */\nexport class Knowledge extends Resource {\n readonly proposals = new Proposals(this.transport);\n readonly pages = new Pages(this.transport);\n\n async command(command: string, args: JsonObject = {}, options: DoorOptions = {}): Promise<KnowledgeResult> {\n const body: JsonObject = { ...args, command };\n if (options.scope) body[\"scope\"] = options.scope;\n let meta: ResponseMeta | undefined;\n const result = await this.transport.request<KnowledgeResult>({\n method: \"POST\",\n path: \"/v1/knowledge/wiki/command\",\n body,\n onResponse: (received) => {\n meta = received;\n },\n });\n return checked(result, options.check ?? true, meta);\n }\n\n /**\n * Every action except `page_type` needs a `rationale`. A write that stages a\n * proposal for one section or card row answers with `proposal`.\n */\n async write(action: string, args: JsonObject = {}, options: DoorOptions = {}): Promise<KnowledgeWriteResult> {\n const body: JsonObject = { ...args, action };\n if (options.scope) body[\"scope\"] = options.scope;\n let meta: ResponseMeta | undefined;\n const result = await this.transport.request<KnowledgeWriteResult>({\n method: \"POST\",\n path: \"/v1/knowledge/wiki/write\",\n body,\n onResponse: (received) => {\n meta = received;\n },\n });\n return checked(result, options.check ?? true, meta);\n }\n\n /**\n * Ask a question of every map card's rows (the `query` command), as SQL or a\n * spec. `{ sql }` is one SELECT, such as `SELECT value, COUNT(DISTINCT entity) AS\n * cards FROM facts AS OF CURRENT_DATE WHERE entity_type = 'matter' AND field =\n * 'Current status' GROUP BY value ORDER BY cards DESC`; the engine parses it into\n * a spec and never runs it as SQL (`FROM` facts, connections or findings, up to\n * two `JOIN`s on `SAME_CARD(a)` or `TARGET_CARD(a)`, `WHERE` with AND/OR/NOT,\n * `AS OF` a day, `GROUP BY`, `COUNT`/`MIN`/`MAX`/`SUM`/`AVG`, `ORDER BY`, `LIMIT`).\n * A {@link QuerySpec} is the same query as JSON. Only cards you can read are\n * queried; `scope` narrows them to one project (name or id); `cursor` continues\n * a previous answer. Where enabled for the organization. The answer's text opens\n * with what the query was understood as (for SQL the spec it was translated to,\n * how each name resolved, what was defaulted or applied), then the total and a\n * table; its `query` holds the same as data (`spec`, `columns`, `rows`, `total`,\n * `next_cursor`). A query the engine cannot run throws a `KnowledgeCommandError`\n * (`invalid_arguments`).\n */\n query(\n query: QuerySpec | { sql: string },\n options: { scope?: string; cursor?: string } = {},\n ): Promise<KnowledgeResult> {\n const args: JsonObject =\n \"sql\" in query ? { sql: query.sql } : { spec: query as unknown as JsonObject };\n if (options.cursor) args[\"cursor\"] = options.cursor;\n return this.command(\"query\", args, options.scope ? { scope: options.scope } : {});\n }\n\n /**\n * Every map card's `facts`, `connections` or `findings` rows as one table (the\n * `rows` command), filtered and walked by {@link RowsOptions}.\n */\n rows(table: \"facts\" | \"connections\" | \"findings\" = \"facts\", options: RowsOptions = {}): Promise<KnowledgeResult> {\n const { scope, ...rest } = options;\n const args: JsonObject = { table };\n for (const [key, name] of Object.entries(ROWS_ARGUMENTS)) {\n const value = rest[key as keyof typeof rest];\n if (value !== undefined) args[name] = value as JsonObject[string];\n }\n return this.command(\"rows\", args, scope ? { scope } : {});\n }\n\n /**\n * Search/read/list original indexed documents. Scan notices describe incomplete\n * results. `projectId` is a project id or name; without it a command covers\n * everything you can read.\n */\n documents(\n command: \"grep\" | \"read\" | \"ls\" | \"search\",\n args: JsonObject = {},\n projectId?: string,\n ): Promise<DocumentsResult> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/knowledge/documents\",\n body: { command, arguments: args, ...(projectId ? { project_id: projectId } : {}) },\n });\n }\n\n /**\n * Passages of the original documents ranked by meaning, grouped by document\n * (`documents` `search`). For when you do not know a document's words; `grep`\n * finds and counts every literal mention. The response's `results` is one source\n * record per matching document, best first (`source_ref`, `location` with\n * `display_path`, `file_id` and `version_id`, `match`, `score`, and its best\n * `passages`). Download a result's file with `files.downloadLink(sourceRef)`.\n */\n documentsSearch(query: string, options: DocumentsSearchOptions = {}): Promise<DocumentsResult> {\n const { projectId, ...rest } = options;\n const args: JsonObject = { query };\n for (const [key, value] of Object.entries(rest)) {\n if (value !== undefined) args[key] = value as JsonObject[string];\n }\n return this.documents(\"search\", args, projectId);\n }\n\n /**\n * A cited answer from Knowledge and connected sources. Waits up to\n * {@link RESEARCH_TIMEOUT_MS} (or the client's timeout, if longer): the engine\n * allows research up to 150s. With `{ quick: true }` the engine answers within\n * 15 seconds from one search of Knowledge and uploaded files (no connected\n * sources); the answer's `engine` is `quick`, and `stopped_early` is true when\n * it is the cited results without a written summary.\n */\n research(query: string, projectId?: string, options: ResearchOptions = {}): Promise<ResearchResult> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/knowledge/research\",\n body: {\n query,\n ...(projectId ? { project_id: projectId } : {}),\n ...(options.quick ? { quick: true } : {}),\n },\n minTimeoutMs: options.quick ? QUICK_RESEARCH_TIMEOUT_MS : RESEARCH_TIMEOUT_MS,\n });\n }\n}\n","import type { BodyOf, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type Label = ResponseOf<\"/v1/labels/{label_id}\", \"get\">;\nexport type LabelPage = ResponseOf<\"/v1/labels\", \"get\">;\ntype Paging = { cursor?: string; limit?: number };\n\n/**\n * Labels: named groups of people mapped to projects. A label's members get\n * the role it holds on each attached project.\n */\nexport class Labels extends Resource {\n list(query: Paging = {}): Promise<LabelPage> {\n return this.transport.request({ method: \"GET\", path: \"/v1/labels\", query });\n }\n\n create(body: BodyOf<\"/v1/labels\", \"post\">): Promise<Label> {\n return this.transport.request({ method: \"POST\", path: \"/v1/labels\", idempotent: true, body });\n }\n\n get(labelId: string): Promise<Label> {\n return this.transport.request({ method: \"GET\", path: `/v1/labels/${enc(labelId)}` });\n }\n\n update(labelId: string, body: BodyOf<\"/v1/labels/{label_id}\", \"patch\">): Promise<Label> {\n return this.transport.request({ method: \"PATCH\", path: `/v1/labels/${enc(labelId)}`, body });\n }\n\n delete(labelId: string): Promise<void> {\n return this.transport.request({ method: \"DELETE\", path: `/v1/labels/${enc(labelId)}`, responseType: \"none\" });\n }\n\n members(labelId: string, query: Paging = {}): Promise<ResponseOf<\"/v1/labels/{label_id}/members\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: `/v1/labels/${enc(labelId)}/members`, query });\n }\n\n addMember(\n labelId: string,\n body: BodyOf<\"/v1/labels/{label_id}/members\", \"post\">,\n ): Promise<ResponseOf<\"/v1/labels/{label_id}/members\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/labels/${enc(labelId)}/members`,\n idempotent: true,\n body,\n });\n }\n\n removeMember(labelId: string, userId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/labels/${enc(labelId)}/members/${enc(userId)}`,\n responseType: \"none\",\n });\n }\n\n projects(labelId: string, query: Paging = {}): Promise<ResponseOf<\"/v1/labels/{label_id}/projects\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: `/v1/labels/${enc(labelId)}/projects`, query });\n }\n\n attachProject(\n labelId: string,\n body: BodyOf<\"/v1/labels/{label_id}/projects\", \"post\">,\n ): Promise<ResponseOf<\"/v1/labels/{label_id}/projects\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/labels/${enc(labelId)}/projects`,\n idempotent: true,\n body,\n });\n }\n\n setProjectRole(\n labelId: string,\n projectId: string,\n body: BodyOf<\"/v1/labels/{label_id}/projects/{project_id}\", \"patch\">,\n ): Promise<ResponseOf<\"/v1/labels/{label_id}/projects/{project_id}\", \"patch\">> {\n return this.transport.request({\n method: \"PATCH\",\n path: `/v1/labels/${enc(labelId)}/projects/${enc(projectId)}`,\n body,\n });\n }\n\n detachProject(labelId: string, projectId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/labels/${enc(labelId)}/projects/${enc(projectId)}`,\n responseType: \"none\",\n });\n }\n}\n","import type { ResponseOf } from \"../types.js\";\nimport { Resource } from \"./base.js\";\n\nexport class Me extends Resource {\n get(): Promise<ResponseOf<\"/v1/me\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me\" });\n }\n\n /** The organization requests are scoped to. */\n activeOrg(): Promise<ResponseOf<\"/v1/me/organization\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me/organization\" });\n }\n}\n","import type { ResponseOf } from \"../types.js\";\nimport { OrgScoped, enc } from \"./base.js\";\n\nexport type Role = \"owner\" | \"admin\" | \"member\" | \"viewer\";\n\n/** One member as `GET /v1/organizations/{org_id}/members` lists it. */\nexport type OrgMember = NonNullable<ResponseOf<\"/v1/organizations/{org_id}/members\", \"get\">[\"data\"]>[number];\n\nexport class Members extends OrgScoped {\n /** One page of the organization's members; {@link iter} follows every page. */\n async list(\n orgId?: string,\n query: { cursor?: string; limit?: number } = {},\n ): Promise<ResponseOf<\"/v1/organizations/{org_id}/members\", \"get\">> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/members`,\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every member of the organization, following cursors. */\n async *iter(orgId?: string, pageSize?: number): AsyncGenerator<OrgMember> {\n yield* this.transport.paginate<OrgMember>(\n { method: \"GET\", path: `${await this.orgBase(orgId)}/members` },\n pageSize,\n );\n }\n\n /**\n * Change a member's role. The route takes the role as a query parameter.\n * An organization that requires SSO or a fresh second factor refuses this to\n * API keys and tokens (`session_required`); change the role in the web app.\n */\n async setRole(userId: string, role: Role, orgId?: string): Promise<unknown> {\n return this.transport.request({\n method: \"PATCH\",\n path: `${await this.orgBase(orgId)}/members/${enc(userId)}`,\n query: { new_role: role },\n });\n }\n\n async remove(userId: string, orgId?: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `${await this.orgBase(orgId)}/members/${enc(userId)}`,\n responseType: \"none\",\n });\n }\n}\n","/**\n * Which documented operations one Beakr server serves.\n *\n * Not every Beakr installation serves the whole documented contract: a\n * self-hosted installation leaves out the hosted organization administration,\n * embedded-mode and integration routes, and answers a bare 404 for them. Every\n * server describes the operations it actually serves in its own public OpenAPI\n * document (`GET /v1/public/openapi.json`), built from the routes it runs, so a\n * client can tell \"this installation does not provide that\" apart from \"that\n * record does not exist\" without trying the call.\n *\n * {@link Capabilities} reads that document. `beakr.meta.capabilities()` fetches\n * it once per base URL and keeps it for {@link CAPABILITIES_TTL_MS}. A server\n * that publishes no document (an older release) is assumed to serve\n * everything, so the helper can only ever narrow what a client offers, never\n * invent a refusal.\n */\nimport { BeakrError } from \"./errors.js\";\nimport { OPERATIONS } from \"./generated/operations.js\";\n\n/**\n * How long a fetched document is trusted before it is read again. Short: an\n * installation that is upgraded in place gains routes without a client restart.\n */\nexport const CAPABILITIES_TTL_MS = 300_000;\n\nconst METHODS = [\"get\", \"post\", \"put\", \"patch\", \"delete\"] as const;\nconst PARAMETER = /\\{[^{}/]+\\}/;\n\ntype OperationIndex = Map<string, RegExp[]>;\n\n/** A contract path as a regex: each `{parameter}` matches one path segment. */\nfunction pattern(template: string): RegExp {\n const parts = template.split(PARAMETER).map((part) => part.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n return new RegExp(`^${parts.join(\"[^/]+\")}$`);\n}\n\n/** `path` without a query string, fragment or trailing slash (`/v1/projects/`). */\nfunction normalize(path: string): string {\n const bare = path.split(\"?\", 1)[0]!.split(\"#\", 1)[0]!;\n return bare.replace(/\\/+$/, \"\") || \"/\";\n}\n\nfunction indexOf(operations: Iterable<readonly [string, string]>): OperationIndex {\n const index: OperationIndex = new Map();\n for (const [method, template] of operations) {\n const key = method.toUpperCase();\n const patterns = index.get(key) ?? [];\n patterns.push(pattern(normalize(template)));\n index.set(key, patterns);\n }\n return index;\n}\n\nfunction matches(index: OperationIndex, method: string, path: string): boolean {\n const bare = normalize(path);\n return (index.get(method.toUpperCase()) ?? []).some((p) => p.test(bare));\n}\n\n/** Every operation of the documented contract this SDK was generated from. */\nconst CONTRACT = indexOf(Object.values(OPERATIONS).map((op) => [op.method, op.path] as const));\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction documentOperations(document: unknown): [string, string][] {\n if (!isRecord(document) || !isRecord(document[\"paths\"])) return [];\n const operations: [string, string][] = [];\n for (const [path, item] of Object.entries(document[\"paths\"])) {\n if (!isRecord(item)) continue;\n for (const method of METHODS) if (method in item) operations.push([method.toUpperCase(), path]);\n }\n return operations;\n}\n\n/**\n * The documented operations one server serves, read from its OpenAPI document.\n *\n * Get one with `beakr.meta.capabilities()`. `serves` takes a concrete path\n * (`/v1/organizations/<id>/members`) or a contract template\n * (`/v1/organizations/{org_id}/members`).\n */\nexport class Capabilities {\n /** Whether the server published a document. Without one every operation is assumed served. */\n readonly documented: boolean;\n private readonly served: OperationIndex;\n\n constructor(document: unknown) {\n const operations = documentOperations(document);\n this.documented = operations.length > 0;\n this.served = indexOf(operations);\n }\n\n /** For a server that publishes no document: everything is assumed served. */\n static unknown(): Capabilities {\n return new Capabilities(null);\n }\n\n /**\n * Whether this server serves `method path`.\n *\n * `false` only when the server published its document and the operation is\n * part of the documented contract but missing from it. A route outside the\n * documented contract cannot be judged from the document and is assumed\n * served, as is everything on a server without a document.\n */\n serves(method: string, path: string): boolean {\n if (!this.documented) return true;\n if (matches(this.served, method, path)) return true;\n return !matches(CONTRACT, method, path);\n }\n\n /** The `[method, path]` pairs of `operations` this server does not serve. */\n unserved(operations: Iterable<readonly [string, string]>): [string, string][] {\n const missing: [string, string][] = [];\n for (const [method, path] of operations) if (!this.serves(method, path)) missing.push([method, path]);\n return missing;\n }\n}\n\ninterface CacheEntry {\n at: number;\n capabilities: Promise<Capabilities>;\n}\n\nconst cache = new Map<string, CacheEntry>();\n\nfunction cacheKey(baseUrl: string): string {\n return baseUrl.trim().replace(/\\/+$/, \"\").toLowerCase();\n}\n\n/** Drop the cached document for `baseUrl`, or for every server. */\nexport function forgetCapabilities(baseUrl?: string): void {\n if (baseUrl === undefined) cache.clear();\n else cache.delete(cacheKey(baseUrl));\n}\n\n/**\n * `baseUrl`'s {@link Capabilities}, fetched with `fetchDocument` at most once per\n * TTL. Concurrent callers share one fetch. Any failure to read the document (no\n * such route on an older server, the server unreachable) is cached as\n * {@link Capabilities.unknown} for the same TTL, so a client asking before every\n * call does not retry a fetch that cannot succeed.\n */\nexport function cachedCapabilities(\n baseUrl: string,\n fetchDocument: () => Promise<unknown>,\n options: { refresh?: boolean } = {},\n): Promise<Capabilities> {\n const key = cacheKey(baseUrl);\n const cached = cache.get(key);\n if (cached && !options.refresh && Date.now() - cached.at < CAPABILITIES_TTL_MS) return cached.capabilities;\n const entry: CacheEntry = {\n at: Date.now(),\n capabilities: fetchDocument().then(\n (document) => new Capabilities(document),\n (error: unknown) => {\n if (error instanceof BeakrError) return Capabilities.unknown();\n // Not a server answer (a bug, an abort): forget it so the next call tries again.\n if (cache.get(key) === entry) cache.delete(key);\n throw error;\n },\n ),\n };\n cache.set(key, entry);\n // The TTL runs from when the document arrived, not from when it was asked for.\n void entry.capabilities.then(\n () => {\n entry.at = Date.now();\n },\n () => undefined,\n );\n return entry.capabilities;\n}\n","import { cachedCapabilities, type Capabilities } from \"../capabilities.js\";\nimport type { ResponseOf } from \"../types.js\";\nimport { Resource } from \"./base.js\";\n\n/** The API describing itself. */\nexport class Meta extends Resource {\n /** The public OpenAPI document (every operation a key or token may call). */\n openapi(): Promise<ResponseOf<\"/v1/public/openapi.json\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/public/openapi.json\", authenticated: false });\n }\n\n /**\n * Which documented operations this server serves, as a {@link Capabilities}.\n *\n * Read from the server's own OpenAPI document, fetched at most once per base\n * URL every few minutes (`{ refresh: true }` reads it again now). A\n * self-hosted installation serves less than the hosted service:\n * `(await beakr.meta.capabilities()).serves(\"GET\", \"/v1/integrations\")` says\n * whether this one has integrations before a call answers 404.\n */\n capabilities(options: { refresh?: boolean } = {}): Promise<Capabilities> {\n return cachedCapabilities(this.transport.baseUrl, () => this.openapi(), options);\n }\n}\n","import { cleanBody, type Transport } from \"../core.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { OrgScoped, credentialClient, enc } from \"./base.js\";\n\nexport interface MintKeyOptions {\n scopes: string[];\n name?: string;\n projectIds?: string[];\n expiresInDays?: number;\n /**\n * The client the key is for (a CI system, an integration), recorded on the\n * key. The API requires one; it defaults to this SDK's name.\n */\n clientName?: string;\n}\n\nclass ServiceAccounts extends OrgScoped {\n /** One page of the organization's service accounts; {@link iter} follows every page. */\n async list(\n orgId?: string,\n query: { cursor?: string; limit?: number } = {},\n ): Promise<{ data: JsonObject[]; next_cursor?: string | null; has_more?: boolean }> {\n return this.transport.request({\n method: \"GET\",\n path: `${await this.orgBase(orgId)}/service-accounts`,\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every service account of the organization, following cursors. */\n async *iter(orgId?: string, pageSize?: number): AsyncGenerator<JsonObject> {\n yield* this.transport.paginate<JsonObject>(\n { method: \"GET\", path: `${await this.orgBase(orgId)}/service-accounts` },\n pageSize,\n );\n }\n\n /**\n * Web app only: creating a service account needs a signed-in person, so API\n * keys and tokens are refused with `session_required`. Create it under\n * Settings > Organization > Developer, then use its key from your backend.\n */\n async create(\n name: string,\n role: \"member\" | \"admin\" | \"viewer\" = \"member\",\n orgId?: string,\n ): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/service-accounts`,\n body: { name, role },\n });\n }\n\n /**\n * Deactivates the account and revokes its keys. Web app only: API keys and\n * tokens are refused with `session_required`.\n */\n async disable(accountId: string, orgId?: string): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/service-accounts/${enc(accountId)}/disable`,\n });\n }\n\n /**\n * A scoped key owned by the service account; `key` is returned once. Web app\n * only: keys and tokens never create keys, so API keys and tokens are refused\n * with `session_required`.\n */\n async mintKey(\n accountId: string,\n options: MintKeyOptions,\n orgId?: string,\n ): Promise<JsonObject> {\n return this.transport.request({\n method: \"POST\",\n path: `${await this.orgBase(orgId)}/service-accounts/${enc(accountId)}/keys`,\n body: cleanBody({\n scopes: options.scopes,\n name: options.name,\n project_ids: options.projectIds,\n expires_in_days: options.expiresInDays,\n client_name: credentialClient(options.clientName, this.transport.clientName),\n }),\n });\n }\n}\n\n/** Organization administration: service accounts (the rest of org administration is not in the documented API). */\nexport class OrgAdmin {\n readonly serviceAccounts: ServiceAccounts;\n\n constructor(transport: Transport) {\n this.serviceAccounts = new ServiceAccounts(transport);\n }\n}\n","/**\n * Wait for Knowledge: a project's, or an upload batch's files' (Python's\n * `beakr_sdk/resources/knowledge_readiness.py`).\n *\n * A file reaches a project's Knowledge in the background after it is indexed.\n * These waits poll until nothing is queued or running and resolve to the last\n * answer, so a program can tell \"ready\" from \"ready, but some files failed\".\n * Failed files never end a wait early; they are in the answer, and\n * {@link KnowledgeFailedError} is thrown for them only with `raiseOnFailure`.\n */\n\nimport type { Transport } from \"../core.js\";\nimport type { JsonObject } from \"../types.js\";\n\nexport interface KnowledgeWaitOptions {\n /** First poll interval (default 5000 ms); each later wait is `backoff` times longer. */\n pollMs?: number;\n /** Longest wait between polls (default 30000 ms). */\n maxIntervalMs?: number;\n /** Growth factor per poll (default 1.5). */\n backoff?: number;\n /** Give up after this long (default 600000 ms). */\n timeoutMs?: number;\n /** Throw {@link KnowledgeFailedError} when the wait ends with failed files. */\n raiseOnFailure?: boolean;\n /** Called with each status read (to show progress). */\n onStatus?: (status: JsonObject) => void;\n}\n\n/** Knowledge was still queued or running when the wait gave up; `last` is the last answer. */\nexport class KnowledgeTimeoutError extends Error {\n constructor(\n what: string,\n readonly last: JsonObject,\n ) {\n const counts = countsOf(last);\n super(\n `Knowledge for ${what} is not ready: ${Number(counts[\"queued\"] ?? 0)} queued, ` +\n `${Number(counts[\"running\"] ?? 0)} running`,\n );\n this.name = \"KnowledgeTimeoutError\";\n }\n}\n\n/** Knowledge finished with failed files (thrown only with `raiseOnFailure`). */\nexport class KnowledgeFailedError extends Error {\n constructor(\n what: string,\n readonly status: JsonObject,\n ) {\n const failed = Number(countsOf(status)[\"failed\"] ?? 0);\n super(`Knowledge for ${what} is ready, but ${failed} ${failed === 1 ? \"file\" : \"files\"} failed`);\n this.name = \"KnowledgeFailedError\";\n }\n}\n\n/** The queued/running/failed counts of a project status or a batch status (`knowledge`). */\nfunction countsOf(answer: JsonObject): Record<string, unknown> {\n const knowledge = answer[\"knowledge\"];\n return knowledge && typeof knowledge === \"object\" && !Array.isArray(knowledge)\n ? (knowledge as Record<string, unknown>)\n : answer;\n}\n\nfunction isReady(answer: JsonObject): boolean {\n const counts = countsOf(answer);\n if (\"ready\" in counts) return Boolean(counts[\"ready\"]);\n return !(Number(counts[\"queued\"] ?? 0) || Number(counts[\"running\"] ?? 0));\n}\n\n/** Poll `read` until nothing is queued or running for Knowledge; resolve to its last answer. */\nexport async function waitForKnowledge<T extends JsonObject>(\n transport: Transport,\n what: string,\n read: () => Promise<T>,\n options: KnowledgeWaitOptions = {},\n): Promise<T> {\n const backoff = options.backoff ?? 1.5;\n const maxInterval = options.maxIntervalMs ?? 30_000;\n let interval = options.pollMs ?? 5000;\n if (interval <= 0 || backoff < 1 || maxInterval < interval) {\n throw new RangeError(\"Need pollMs > 0, backoff >= 1 and maxIntervalMs >= pollMs.\");\n }\n const deadline = Date.now() + (options.timeoutMs ?? 600_000);\n for (;;) {\n const answer = await read();\n options.onStatus?.(answer);\n if (isReady(answer)) {\n if (options.raiseOnFailure && Number(countsOf(answer)[\"failed\"] ?? 0) > 0) {\n throw new KnowledgeFailedError(what, answer);\n }\n return answer;\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) throw new KnowledgeTimeoutError(what, answer);\n await transport.sleeper(Math.min(interval, remaining));\n interval = Math.min(maxInterval, interval * backoff);\n }\n}\n\n/** A file the upload duplicated: the batch rejected it and kept `duplicate_of`. */\nexport interface AlreadyUploaded extends JsonObject {\n path: string | null;\n artifact_id: string | null;\n duplicate_of: JsonObject & { artifact_id: string; title?: string | null };\n /** With `wait: \"knowledge\"`: the kept file's Knowledge status once it settled. */\n kept_knowledge_status?: string | null;\n}\n\n/**\n * The batch's duplicate files, and whether they are its only failures.\n *\n * Indexing does not store bytes already in the same place twice: it rejects the\n * new file as `duplicate` and keeps the existing one (`duplicate_of`). That is\n * \"already uploaded\", not a failure, so an upload whose only failed files are\n * duplicates reads `succeeded` (Python's `already_uploaded_outcome`). An engine\n * that counts them in `summary.duplicates` leaves them out of `summary.failed`;\n * an earlier one counted them there.\n */\nexport function alreadyUploadedOutcome(batchStatus: JsonObject): {\n duplicates: AlreadyUploaded[];\n status?: \"succeeded\";\n} {\n const files = (batchStatus[\"artifacts\"] as JsonObject[] | undefined) ?? [];\n const duplicates: AlreadyUploaded[] = [];\n for (const item of files) {\n const keptRef = item[\"duplicate_of\"] as JsonObject | null | undefined;\n if (item[\"error_code\"] !== \"duplicate\" || !keptRef || !keptRef[\"artifact_id\"]) continue;\n duplicates.push({\n path: (item[\"path\"] as string | undefined) ?? null,\n artifact_id: (item[\"id\"] as string | undefined) ?? null,\n duplicate_of: { ...keptRef, artifact_id: String(keptRef[\"artifact_id\"]) },\n });\n }\n const summary = (batchStatus[\"summary\"] as JsonObject | undefined) ?? {};\n const failed = Number(summary[\"failed\"] ?? 0);\n const othersFailed = \"duplicates\" in summary ? failed : failed - duplicates.length;\n return duplicates.length && othersFailed <= 0\n ? { duplicates, status: \"succeeded\" }\n : { duplicates };\n}\n\n/**\n * Poll each file (`GET /v1/artifacts/{id}`) until none is queued or running for\n * Knowledge; resolves to `{ [fileId]: knowledge_status }`. Used for the copy an\n * upload duplicated, which is not one of the batch's files.\n */\nexport async function waitForFilesKnowledge(\n transport: Transport,\n fileIds: string[],\n options: KnowledgeWaitOptions = {},\n): Promise<Record<string, string | null>> {\n const statuses: Record<string, string | null> = {};\n await waitForKnowledge(\n transport,\n `${fileIds.length} kept file(s)`,\n async () => {\n for (const fileId of fileIds) {\n const artifact = await transport.request<JsonObject>({\n method: \"GET\",\n path: `/v1/artifacts/${encodeURIComponent(fileId)}`,\n });\n statuses[fileId] = (artifact[\"knowledge_status\"] as string | null | undefined) ?? null;\n }\n const all = Object.values(statuses);\n const queued = all.filter((s) => s === \"queued\").length;\n const running = all.filter((s) => s === \"running\").length;\n return { queued, running, ready: queued + running === 0, files: { ...statuses } };\n },\n { ...options, raiseOnFailure: false, onStatus: undefined },\n );\n return statuses;\n}\n","import type { ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\n\n/** One page of refusal events (`GET /v1/projects/{project_id}/model-refusals`). */\nexport type ModelRefusalEvents = ResponseOf<\"/v1/projects/{project_id}/model-refusals\", \"get\">;\n/** Counts for a window (`GET /v1/projects/{project_id}/model-refusals/summary`). */\nexport type ModelRefusalSummary = ResponseOf<\n \"/v1/projects/{project_id}/model-refusals/summary\",\n \"get\"\n>;\n/** One page of per-file counts (`GET /v1/projects/{project_id}/model-refusals/files`). */\nexport type ModelRefusalFiles = ResponseOf<\n \"/v1/projects/{project_id}/model-refusals/files\",\n \"get\"\n>;\n/** The windows the summary and files reads count over. */\nexport type ModelRefusalWindow = \"24h\" | \"7d\" | \"30d\";\n\n/**\n * When a model refused a Knowledge stage in a project, and what happened next\n * (the Python SDK's `projects.model_refusals`). A fallback is the stage moving\n * to the next model in its ladder; each event's `outcome` is `recovered`,\n * `failed` or `skipped`. A file's `model_refusal_count` and\n * `compile_needed_fallback` say the same per file.\n */\nexport class ModelRefusals extends Resource {\n /** One page of refusal events, newest first. */\n list(\n projectId: string,\n options: {\n artifactId?: string;\n outcome?: \"recovered\" | \"failed\" | \"skipped\";\n stage?: string;\n limit?: number;\n cursor?: string;\n } = {},\n ): Promise<ModelRefusalEvents> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/model-refusals`,\n query: {\n artifact_id: options.artifactId,\n outcome: options.outcome,\n stage: options.stage,\n limit: options.limit,\n cursor: options.cursor,\n },\n });\n }\n\n /** Refusal, fallback and outcome counts for `window` (`24h`, `7d` or `30d`). */\n summary(projectId: string, window?: ModelRefusalWindow): Promise<ModelRefusalSummary> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/model-refusals/summary`,\n query: { window },\n });\n }\n\n /** One page of per-file counts for `window`. */\n files(\n projectId: string,\n options: { window?: ModelRefusalWindow; limit?: number; cursor?: string } = {},\n ): Promise<ModelRefusalFiles> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/model-refusals/files`,\n query: { window: options.window, limit: options.limit, cursor: options.cursor },\n });\n }\n}\n","import { cleanBody } from \"../core.js\";\nimport type { BodyOf, JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\nimport { waitForKnowledge, type KnowledgeWaitOptions } from \"./knowledge-readiness.js\";\nimport { ModelRefusals } from \"./model-refusals.js\";\nimport type { Transport } from \"../core.js\";\n\n/** A project's Knowledge status (`GET /v1/projects/{project_id}/knowledge-summary`). */\nexport type ProjectKnowledgeStatus = ResponseOf<\"/v1/projects/{project_id}/knowledge-summary\", \"get\">;\n/** One file whose latest attempt to reach the project's Knowledge failed. */\nexport type KnowledgeFailedFile = NonNullable<ProjectKnowledgeStatus[\"failed_files\"]>[number];\n/** What a retry did (`POST /v1/projects/{project_id}/knowledge/retry-failed`). */\nexport type KnowledgeRetryResult = ResponseOf<\n \"/v1/projects/{project_id}/knowledge/retry-failed\",\n \"post\"\n>;\n\n/** A project's Knowledge profile (`GET /v1/projects/{project_id}/knowledge-profile`). */\nexport type ProjectKnowledgeProfile = ResponseOf<\n \"/v1/projects/{project_id}/knowledge-profile\",\n \"get\"\n>;\n/** The whole profile a {@link Projects.setKnowledgeProfile} call sends. */\nexport type ProjectKnowledgeProfileInput = BodyOf<\n \"/v1/projects/{project_id}/knowledge-profile\",\n \"put\"\n>;\n/** The fields a {@link Projects.updateKnowledgeProfile} call changes. */\nexport type ProjectKnowledgeProfilePatch = BodyOf<\n \"/v1/projects/{project_id}/knowledge-profile\",\n \"patch\"\n>;\n\n/** The filters and paging `GET /v1/projects` takes. */\nexport interface ListProjectsQuery {\n /** Only projects you are a member of, not every project your organization role lets you see. */\n memberOnly?: boolean;\n ownerUserId?: string;\n groupId?: string;\n /** Include each project's Knowledge counts. */\n includeKnowledge?: boolean;\n cursor?: string;\n limit?: number;\n}\n\n/** One project as `GET /v1/projects` lists it. */\nexport type Project = NonNullable<ResponseOf<\"/v1/projects\", \"get\">[\"data\"]>[number];\n/** One project member as `GET /v1/projects/{project_id}/members` lists it. */\nexport type ProjectMember = NonNullable<ResponseOf<\"/v1/projects/{project_id}/members\", \"get\">[\"data\"]>[number];\n\nfunction projectsQuery(options: ListProjectsQuery): Record<string, string | number | boolean | undefined> {\n return {\n member_only: options.memberOnly,\n owner_user_id: options.ownerUserId,\n group_id: options.groupId,\n include_knowledge: options.includeKnowledge,\n cursor: options.cursor,\n limit: options.limit,\n };\n}\n\nexport class Projects extends Resource {\n /** When a model refused a Knowledge stage in a project (`/model-refusals`). */\n readonly modelRefusals: ModelRefusals;\n\n constructor(transport: Transport) {\n super(transport);\n this.modelRefusals = new ModelRefusals(transport);\n }\n\n /**\n * One page of the projects you can see (`{data, next_cursor, has_more}`).\n * Pass `cursor` from the previous page, or use {@link iter} to follow every page.\n */\n list(options: ListProjectsQuery = {}): Promise<ResponseOf<\"/v1/projects\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/projects\", query: projectsQuery(options) });\n }\n\n /** Every project you can see, following cursors. */\n iter(options: Omit<ListProjectsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<Project> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/projects\", query: projectsQuery(options) }, pageSize);\n }\n\n get(\n projectId: string,\n ): Promise<ResponseOf<\"/v1/projects/{project_id}\", \"get\">> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}`,\n });\n }\n\n create(\n body: BodyOf<\"/v1/projects\", \"post\">,\n ): Promise<ResponseOf<\"/v1/projects\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/projects\",\n body,\n idempotent: true,\n });\n }\n\n update(\n projectId: string,\n body: BodyOf<\"/v1/projects/{project_id}\", \"patch\">,\n ): Promise<ResponseOf<\"/v1/projects/{project_id}\", \"patch\">> {\n return this.transport.request({\n method: \"PATCH\",\n path: `/v1/projects/${enc(projectId)}`,\n body: cleanBody(body as Record<string, unknown>),\n });\n }\n\n /**\n * Delete the project permanently; it cannot be restored (archive is reversible).\n * Needs admin access to the project; a personal project cannot be deleted (403).\n * Web app only in practice: API keys and tokens are refused with\n * `session_required` wherever the organization protects sensitive actions,\n * and a session may need a fresh second factor (`mfa_required`).\n */\n delete(projectId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/projects/${enc(projectId)}`,\n responseType: \"none\",\n });\n }\n\n /** One page of the project's members; {@link iterMembers} follows every page. */\n members(\n projectId: string,\n query: { cursor?: string; limit?: number } = {},\n ): Promise<ResponseOf<\"/v1/projects/{project_id}/members\", \"get\">> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/members`,\n query: { cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every member of the project, following cursors. */\n iterMembers(projectId: string, pageSize?: number): AsyncGenerator<ProjectMember> {\n return this.transport.paginate({ method: \"GET\", path: `/v1/projects/${enc(projectId)}/members` }, pageSize);\n }\n\n /**\n * Whether the project's Knowledge is ready, its coverage, and what failed:\n * `ready` is true when nothing is queued or running, and `failed_files` are\n * the newest failures (`failedLimit`, default 20) with `error_code`,\n * `reason` and `retryable`. Counts cover the files you can read.\n */\n knowledgeStatus(\n projectId: string,\n options: { failedLimit?: number } = {},\n ): Promise<ProjectKnowledgeStatus> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/knowledge-summary`,\n query: { failed_limit: options.failedLimit },\n });\n }\n\n /** Every file whose latest attempt to reach the project's Knowledge failed, newest first. */\n async knowledgeFailures(projectId: string): Promise<KnowledgeFailedFile[]> {\n const files: KnowledgeFailedFile[] = [];\n for await (const file of this.transport.paginate<KnowledgeFailedFile>(\n { method: \"GET\", path: `/v1/projects/${enc(projectId)}/knowledge/failed-files` },\n 200,\n )) {\n files.push(file);\n }\n return files;\n }\n\n /**\n * Poll {@link knowledgeStatus} until nothing is queued or running and resolve\n * to it. Throws `KnowledgeTimeoutError` (with the last status) at the\n * timeout; failed files do not end the wait, and with `raiseOnFailure` throw\n * `KnowledgeFailedError` instead when any remain.\n */\n waitUntilReady(\n projectId: string,\n options: KnowledgeWaitOptions & { failedLimit?: number } = {},\n ): Promise<ProjectKnowledgeStatus> {\n return waitForKnowledge(\n this.transport,\n `project ${projectId}`,\n () => this.knowledgeStatus(projectId, { failedLimit: options.failedLimit }) as Promise<\n ProjectKnowledgeStatus & JsonObject\n >,\n options,\n );\n }\n\n /**\n * Send failed files to Knowledge again: every failed file (up to 500 per\n * call; `has_more` says more remain), or `artifactIds`. Safe to repeat: files\n * already queued or running are left alone. Needs permission to add files to\n * the project.\n */\n retryFailed(projectId: string, artifactIds?: string[]): Promise<KnowledgeRetryResult> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/projects/${enc(projectId)}/knowledge/retry-failed`,\n body: artifactIds === undefined ? {} : { artifact_ids: [...artifactIds] },\n });\n }\n\n /**\n * The project's Knowledge profile. Throws `NotFoundError` with\n * `code === \"knowledge_profile_not_found\"` while the project has none (set\n * one with {@link setKnowledgeProfile}). Project members read it; a viewer is\n * refused.\n */\n knowledgeProfile(projectId: string): Promise<ProjectKnowledgeProfile> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/projects/${enc(projectId)}/knowledge-profile`,\n });\n }\n\n /**\n * Set the whole Knowledge profile, creating it when the project has none.\n * Fields left out are set to their empty value. Only the project's owners\n * may set it; Knowledge reads it when it next compiles files.\n */\n setKnowledgeProfile(\n projectId: string,\n profile: ProjectKnowledgeProfileInput,\n ): Promise<ProjectKnowledgeProfile> {\n return this.transport.request({\n method: \"PUT\",\n path: `/v1/projects/${enc(projectId)}/knowledge-profile`,\n body: cleanBody({ ...profile }),\n });\n }\n\n /**\n * Change the fields given; the rest are kept. A list given replaces that\n * list. Throws `NotFoundError` (`knowledge_profile_not_found`) when the\n * project has no profile yet.\n */\n updateKnowledgeProfile(\n projectId: string,\n fields: ProjectKnowledgeProfilePatch,\n ): Promise<ProjectKnowledgeProfile> {\n return this.transport.request({\n method: \"PATCH\",\n path: `/v1/projects/${enc(projectId)}/knowledge-profile`,\n body: cleanBody({ ...fields }),\n });\n }\n}\n","/**\n * Skills: SKILL.md folders your agent loads on demand (`/v1/skills`); Python's\n * `beakr_sdk/resources/skills.py`.\n *\n * One list covers every skill you can use or install, each labelled with its\n * `visibility` (`private`, `org`, `public`), `owner` (`me`, `org`, `system` for\n * built-ins, `anyone` for public skills from outside your organization),\n * `origin` (`created`, `mined`, `imported`, `system`) and whether it is\n * `installed` in your library; every label is also a filter.\n *\n * ```ts\n * const mine = await beakr.skills.list({ owner: \"me\" });\n * const skill = await beakr.skills.createFromFolder(\"skills/plate-reader\");\n * await beakr.skills.download(skill.id, \"exported/\");\n * ```\n */\nimport { cleanBody } from \"../core.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\nimport { Sha256 } from \"../sha256.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { assertInside, namesDirectory, safePathComponent } from \"../paths.js\";\nimport { Resource, enc } from \"./base.js\";\n\nexport type SkillVisibility = \"private\" | \"org\" | \"public\";\nexport type SkillOwner = \"me\" | \"org\" | \"system\" | \"anyone\";\nexport type SkillOrigin = \"created\" | \"mined\" | \"imported\" | \"system\";\n\n/** One page of skills (`GET /v1/skills`). */\nexport type SkillPage = ResponseOf<\"/v1/skills\", \"get\">;\n/** A skill in the list, with its labels. */\nexport type Skill = SkillPage[\"data\"][number];\n/** A skill with the revision its files are at (`GET /v1/skills/{skill_id}`). */\nexport type SkillDetail = ResponseOf<\"/v1/skills/{skill_id}\", \"get\">;\n/** A skill's SKILL.md folder (`GET /v1/skills/{skill_id}/bundle`). */\nexport type SkillBundle = ResponseOf<\"/v1/skills/{skill_id}/bundle\", \"get\">;\n/** A created skill (`POST /v1/skills`): the same shape `get` answers. */\nexport type CreatedSkill = ResponseOf<\"/v1/skills\", \"post\">;\n/** A skill's files: each path in its folder mapped to its text. */\nexport type SkillFiles = Record<string, string>;\n/** A skill Beakr drafted from repeated work, as `skills.proposals.list()` pages it. */\nexport type SkillProposal = ResponseOf<\"/v1/me/skills/proposals\", \"get\">[\"data\"][number];\n\nexport const SKILL_MD = \"SKILL.md\";\n\ntype OneOrMany<T> = T | readonly T[];\n\nexport interface ListSkillsQuery {\n visibility?: OneOrMany<SkillVisibility>;\n owner?: OneOrMany<SkillOwner>;\n origin?: OneOrMany<SkillOrigin>;\n /** `true` for the skills in your library, `false` for the ones you could install. */\n installed?: boolean;\n search?: string;\n domain?: string;\n /** Add each skill's `files`. */\n includeContent?: boolean;\n cursor?: string;\n limit?: number;\n}\n\nexport interface CreateSkillOptions {\n visibility?: SkillVisibility;\n /** Where the folder came from (`claude-code`, `codex`...); kept with the skill. */\n source?: string;\n /** The handle to give the skill when its SKILL.md does not name one. */\n slugHint?: string;\n}\n\nexport interface UploadBundleOptions {\n /** `false` writes the files given and keeps the rest. Default `true`. */\n replace?: boolean;\n /** The `files_sha256` you read: a change made since is refused with `skill_conflict`. */\n expectedSha256?: string;\n /** Write even when `expectedSha256` no longer matches. */\n force?: boolean;\n}\n\n/** Names a skill folder on disk carries that are not part of the skill. */\nconst IGNORED = new Set([\".DS_Store\", \"__pycache__\", \".git\", \"__MACOSX\"]);\nconst ignored = (part: string) => IGNORED.has(part) || part.startsWith(\".\");\n\nfunction many<T>(value: OneOrMany<T> | undefined): readonly string[] | undefined {\n if (value === undefined) return undefined;\n return (Array.isArray(value) ? value : [value]) as readonly string[];\n}\n\nconst utf8 = new TextEncoder();\n\n/**\n * The digest Beakr reports as a skill's `files_sha256`: SHA-256 over\n * `path\\0sha256(content)` lines in path order, as the server computes it.\n */\nexport function bundleSha256(files: SkillFiles): string {\n const lines = Object.keys(files)\n .sort()\n .map((path) => `${path}\\0${new Sha256().update(utf8.encode(files[path] ?? \"\")).hex()}`);\n return new Sha256().update(utf8.encode(lines.join(\"\\n\"))).hex();\n}\n\n/** `path` as a relative POSIX path inside the skill, or a `TypeError`. */\nfunction safeRelative(path: string): string {\n const parts = path.replace(/\\\\/g, \"/\").split(\"/\");\n if (\n path.startsWith(\"/\") ||\n /^[A-Za-z]:/.test(path) ||\n path.includes(\"\\0\") ||\n parts.includes(\"..\") ||\n !parts.some(Boolean)\n ) {\n throw new TypeError(`Skill file path ${JSON.stringify(path)} leaves the skill folder.`);\n }\n return parts.filter((part) => part && part !== \".\").join(\"/\");\n}\n\nfunction decodeText(name: string, data: Uint8Array): string {\n try {\n return new TextDecoder(\"utf-8\", { fatal: true }).decode(data);\n } catch {\n throw new TypeError(\n `${name} is not UTF-8 text; a skill's files are text (SKILL.md, scripts, references, templates).`,\n );\n }\n}\n\n/** The files of a zip archive (stored or deflated entries), by path. */\nasync function unzip(data: Uint8Array): Promise<Map<string, Uint8Array>> {\n const zlib = await nodeBuiltin<typeof import(\"node:zlib\")>(\"node:zlib\");\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n let end = -1;\n for (let at = data.length - 22; at >= Math.max(0, data.length - 22 - 0xffff); at--) {\n if (view.getUint32(at, true) === 0x06054b50) {\n end = at;\n break;\n }\n }\n if (end < 0) throw new TypeError(\"Not a zip archive.\");\n const count = view.getUint16(end + 10, true);\n let at = view.getUint32(end + 16, true);\n const entries = new Map<string, Uint8Array>();\n const names = new TextDecoder();\n for (let index = 0; index < count; index++) {\n if (view.getUint32(at, true) !== 0x02014b50) throw new TypeError(\"Corrupt zip central directory.\");\n const method = view.getUint16(at + 10, true);\n const compressed = view.getUint32(at + 20, true);\n const nameLength = view.getUint16(at + 28, true);\n const extraLength = view.getUint16(at + 30, true);\n const commentLength = view.getUint16(at + 32, true);\n const local = view.getUint32(at + 42, true);\n const name = names.decode(data.subarray(at + 46, at + 46 + nameLength));\n at += 46 + nameLength + extraLength + commentLength;\n if (name.endsWith(\"/\")) continue;\n const start = local + 30 + view.getUint16(local + 26, true) + view.getUint16(local + 28, true);\n const raw = data.subarray(start, start + compressed);\n if (method === 0) entries.set(name, raw);\n else if (method === 8) entries.set(name, new Uint8Array(zlib.inflateRawSync(raw)));\n else throw new TypeError(`${name}: zip compression method ${method} is not supported.`);\n }\n return entries;\n}\n\nasync function zipFiles(data: Uint8Array): Promise<SkillFiles> {\n let entries = new Map<string, Uint8Array>();\n for (const [name, content] of await unzip(data)) {\n if (name.split(\"/\").some(ignored)) continue;\n entries.set(safeRelative(name), content);\n }\n // A zip of the folder (`plate-reader/SKILL.md`), as Beakr's own export and\n // most archivers write it, is read as the folder's contents.\n if (!entries.has(SKILL_MD)) {\n const tops = new Set([...entries.keys()].map((name) => name.split(\"/\")[0]));\n if (tops.size === 1) {\n const [top] = tops;\n entries = new Map([...entries].map(([name, content]) => [name.slice(`${top}/`.length), content]));\n }\n }\n return Object.fromEntries([...entries].map(([name, content]) => [name, decodeText(name, content)]));\n}\n\n/**\n * A SKILL.md folder, a `SKILL.md` file or a `.zip` of a folder, as the\n * `{path: text}` files the API takes (Node). Hidden files are left out; a\n * missing SKILL.md or a file that is not UTF-8 text is a `TypeError`.\n */\nexport async function readSkillFolder(path: string): Promise<SkillFiles> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const stat = await fs.stat(path).catch(() => undefined);\n let files: SkillFiles;\n if (stat?.isDirectory()) {\n files = {};\n const walk = async (dir: string, relative: string[]): Promise<void> => {\n const children = (await fs.readdir(dir, { withFileTypes: true })).sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n );\n for (const child of children) {\n if (ignored(child.name)) continue;\n const parts = [...relative, child.name];\n const full = nodePath.join(dir, child.name);\n if (child.isDirectory()) await walk(full, parts);\n else if (child.isFile()) files[parts.join(\"/\")] = decodeText(parts.join(\"/\"), await fs.readFile(full));\n }\n };\n await walk(path, []);\n } else if (stat?.isFile()) {\n const data = new Uint8Array(await fs.readFile(path));\n const isZip = data.length >= 4 && data[0] === 0x50 && data[1] === 0x4b && data[2] === 0x03 && data[3] === 0x04;\n if (isZip) files = await zipFiles(data);\n else if (nodePath.basename(path) === SKILL_MD) files = { [SKILL_MD]: decodeText(SKILL_MD, data) };\n else throw new TypeError(`${path} is not a skill folder, a SKILL.md or a .zip of one.`);\n } else {\n throw new TypeError(`${path} is not a skill folder, a SKILL.md or a .zip of one.`);\n }\n if (!(SKILL_MD in files)) throw new TypeError(`${path} has no ${SKILL_MD} at its top level.`);\n return files;\n}\n\n/** Skills Beakr drafted from work you repeated, waiting for you to keep or dismiss. */\nexport class SkillProposals extends Resource {\n /** Proposals by `status`: `pending` (the default), `accepted` or `dismissed`. */\n list(\n query: { status?: \"pending\" | \"accepted\" | \"dismissed\"; cursor?: string; limit?: number } = {},\n ): Promise<ResponseOf<\"/v1/me/skills/proposals\", \"get\">> {\n return this.transport.request({ method: \"GET\", path: \"/v1/me/skills/proposals\", query });\n }\n\n /** Every proposal of a status, following cursors. */\n iter(\n query: { status?: \"pending\" | \"accepted\" | \"dismissed\" } = {},\n pageSize?: number,\n ): AsyncGenerator<SkillProposal> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/me/skills/proposals\", query }, pageSize);\n }\n\n /**\n * Make the draft a private skill of yours, installed in your library.\n * `force` creates it even when it repeats a skill you have (409\n * `duplicate_candidate` otherwise).\n */\n accept(\n proposalId: string,\n options: { force?: boolean } = {},\n ): Promise<ResponseOf<\"/v1/me/skills/proposals/{proposal_id}/accept\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/me/skills/proposals/${enc(proposalId)}/accept`,\n query: { force: options.force },\n });\n }\n\n dismiss(proposalId: string): Promise<ResponseOf<\"/v1/me/skills/proposals/{proposal_id}/dismiss\", \"post\">> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/me/skills/proposals/${enc(proposalId)}/dismiss`,\n });\n }\n}\n\nexport class Skills extends Resource {\n readonly proposals: SkillProposals = new SkillProposals(this.transport);\n\n private query(query: Omit<ListSkillsQuery, \"cursor\" | \"limit\">) {\n return {\n visibility: many(query.visibility),\n owner: many(query.owner),\n origin: many(query.origin),\n installed: query.installed,\n search: query.search,\n domain: query.domain,\n include_content: query.includeContent,\n };\n }\n\n /**\n * One page of the skills you can use or install, by name. Each filter takes\n * one value or several. With `includeContent` a page holds at most 25 skills.\n * Retired skills are not listed.\n */\n list(query: ListSkillsQuery = {}): Promise<SkillPage> {\n return this.transport.request({\n method: \"GET\",\n path: \"/v1/skills\",\n query: { ...this.query(query), cursor: query.cursor, limit: query.limit },\n });\n }\n\n /** Every skill matching the filters, following cursors. */\n iter(query: Omit<ListSkillsQuery, \"cursor\" | \"limit\"> = {}, pageSize?: number): AsyncGenerator<Skill> {\n return this.transport.paginate({ method: \"GET\", path: \"/v1/skills\", query: this.query(query) }, pageSize);\n }\n\n /**\n * One skill by id or slug, with `latest_revision`. A slug resolves to your\n * own skill first, then a built-in, then one you installed, then your\n * organization's; pass the id for any other.\n */\n get(skill: string, options: { includeContent?: boolean } = {}): Promise<SkillDetail> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/skills/${enc(skill)}`,\n query: { include_content: options.includeContent },\n });\n }\n\n /** The SKILL.md folder, with `files_sha256` to send back as `expectedSha256`. */\n bundle(skillId: string): Promise<SkillBundle> {\n return this.transport.request({ method: \"GET\", path: `/v1/skills/${enc(skillId)}/bundle` });\n }\n\n /** The SKILL.md folder as zip bytes (any runtime). */\n downloadZip(skillId: string): Promise<Uint8Array> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/skills/${enc(skillId)}/bundle.zip`,\n responseType: \"bytes\",\n });\n }\n\n /**\n * Save a skill's SKILL.md folder, or its zip with `asZip` (Node). When\n * `destination` is a directory (one that exists, or a path ending in `/`,\n * created if missing) the skill is saved inside it, as `<slug>/` or\n * `<slug>.zip`; otherwise `destination` is the folder or the zip file itself,\n * written exactly as named (add `.zip` yourself). Resolves to the path written.\n */\n async download(skillId: string, destination: string, options: { asZip?: boolean } = {}): Promise<string> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const exists = (await fs.stat(destination).catch(() => undefined))?.isDirectory() ?? false;\n const isDir = namesDirectory(destination, exists);\n if (options.asZip) {\n const data = await this.downloadZip(skillId);\n let target = destination;\n if (isDir) {\n const slug = safePathComponent((await this.bundle(skillId)).slug, \"the skill's slug\");\n target = nodePath.join(destination, `${slug}.zip`);\n assertInside(nodePath, destination, target, \"the skill's zip\");\n }\n await fs.mkdir(nodePath.dirname(target), { recursive: true });\n await fs.writeFile(target, data);\n return target;\n }\n const bundle = await this.bundle(skillId);\n let folder = destination;\n if (isDir) {\n folder = nodePath.join(destination, safePathComponent(bundle.slug, \"the skill's slug\"));\n assertInside(nodePath, destination, folder, \"the skill's folder\");\n }\n // Every path is checked before anything is written, so a bundle naming a\n // path outside the folder leaves no partial copy behind.\n const targets = Object.entries(bundle.files ?? {}).map(([name, content]) => {\n const target = nodePath.join(folder, ...safeRelative(name).split(\"/\"));\n assertInside(nodePath, folder, target, `skill file ${JSON.stringify(name)}`);\n return [target, content] as const;\n });\n for (const [target, content] of targets) {\n await fs.mkdir(nodePath.dirname(target), { recursive: true });\n await fs.writeFile(target, content, \"utf8\");\n }\n await fs.mkdir(folder, { recursive: true });\n return folder;\n }\n\n /**\n * Create a skill of yours from its files (with `SKILL.md`). It is installed\n * in your library and private unless `visibility` says otherwise; `\"public\"`\n * publishes it, every file included, to every Beakr organization. A retry\n * replays its `Idempotency-Key`.\n */\n create(files: SkillFiles, options: CreateSkillOptions = {}): Promise<CreatedSkill> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/skills\",\n idempotent: true,\n body: cleanBody({\n files,\n visibility: options.visibility,\n source: options.source,\n slug_hint: options.slugHint,\n }),\n });\n }\n\n /** Create a skill from a SKILL.md folder, a SKILL.md or a `.zip` of a folder (Node). */\n async createFromFolder(path: string, options: CreateSkillOptions = {}): Promise<CreatedSkill> {\n return this.create(await readSkillFolder(path), options);\n }\n\n /**\n * Replace the files of a skill you own, from `{path: text}` or a folder or\n * zip path (Node). A change made since `expectedSha256` is refused with\n * `ConflictError` (`skill_conflict`) unless `force`.\n */\n async uploadBundle(\n skillId: string,\n files: SkillFiles | string,\n options: UploadBundleOptions = {},\n ): Promise<SkillBundle> {\n const payload = typeof files === \"string\" ? await readSkillFolder(files) : files;\n const body: Record<string, unknown> = { files: payload, replace: options.replace ?? true };\n if (\"expectedSha256\" in options && options.expectedSha256 === undefined) {\n // A bundle reports its digest as `files_sha256`; passing `bundle.sha256`\n // (undefined) used to skip the overwrite check silently.\n throw new TypeError(\n \"expectedSha256 is undefined. Pass the bundle's files_sha256 (skills.bundle(id).files_sha256), \" +\n \"or leave the option out to write without the conflict check.\",\n );\n }\n if (options.expectedSha256 !== undefined) body[\"expected_sha256\"] = options.expectedSha256;\n if (options.force) body[\"force\"] = true;\n return this.transport.request({ method: \"PUT\", path: `/v1/skills/${enc(skillId)}/bundle`, body });\n }\n\n /** Add a skill you can see to your library, so your agent is told about it. */\n install(skillId: string): Promise<ResponseOf<\"/v1/me/skills/library/{skill_id}\", \"post\">> {\n return this.transport.request({ method: \"POST\", path: `/v1/me/skills/library/${enc(skillId)}` });\n }\n\n /** Remove a skill from your library; the skill itself is kept. */\n uninstall(skillId: string): Promise<void> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/me/skills/library/${enc(skillId)}`,\n responseType: \"none\",\n });\n }\n\n /** Delete a skill you wrote, for everyone who installed it. */\n delete(skillId: string): Promise<void> {\n return this.transport.request({ method: \"DELETE\", path: `/v1/skills/${enc(skillId)}`, responseType: \"none\" });\n }\n}\n","/**\n * Content type and artifact type for a file name, as the Python SDK and the web\n * app assign them (`beakr_sdk/resources/_upload.py`, beakr-web's\n * `lib/utils/artifact-file-type.ts`), so a TypeScript upload lands as the same\n * kind of file.\n */\n\nconst MIME_BY_EXTENSION: Record<string, string> = {\n \".pdf\": \"application/pdf\",\n \".txt\": \"text/plain\",\n \".md\": \"text/markdown\",\n \".markdown\": \"text/markdown\",\n \".csv\": \"text/csv\",\n \".tsv\": \"text/tab-separated-values\",\n \".json\": \"application/json\",\n \".html\": \"text/html\",\n \".htm\": \"text/html\",\n \".xml\": \"application/xml\",\n \".yaml\": \"application/yaml\",\n \".yml\": \"application/yaml\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".svg\": \"image/svg+xml\",\n \".tif\": \"image/tiff\",\n \".tiff\": \"image/tiff\",\n \".mp4\": \"video/mp4\",\n \".mov\": \"video/quicktime\",\n \".webm\": \"video/webm\",\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/x-wav\",\n \".m4a\": \"audio/mp4\",\n \".zip\": \"application/zip\",\n \".doc\": \"application/msword\",\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".ipynb\": \"application/x-ipynb+json\",\n};\n\n/** Extensions the web classifies as scientific data (browsers report them as octet-stream). */\nconst SCIENTIFIC_EXTENSIONS = new Set(\n (\n \".h5ad .loom .fasta .fa .fastq .bam .sam .vcf .bed .gff .gtf .bigwig .bw .gct .gctx \" +\n \".h5 .hdf5 .hdf .sdf .mol .mol2 .smi .pdb .cif .nii .nifty .dcm .edf .nc .nc4 \" +\n \".parquet .feather .mtx .pzfx .pzm .pzt .prism .dna\"\n ).split(\" \"),\n);\n\nfunction extension(name: string): string {\n const base = name.split(\"/\").pop() ?? name;\n const dot = base.lastIndexOf(\".\");\n return dot > 0 ? base.slice(dot).toLowerCase() : \"\";\n}\n\n/** The content type for a file name; `application/octet-stream` when unknown. */\nexport function guessMimeType(name: string): string {\n return MIME_BY_EXTENSION[extension(name)] ?? \"application/octet-stream\";\n}\n\n/** The artifact type the web app would assign (`detectArtifactType`). */\nexport function detectArtifactType(mimeType: string, name: string): string {\n const suffix = extension(name);\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType === \"application/pdf\") return \"doc\";\n if (mimeType.includes(\"spreadsheet\") || mimeType === \"text/csv\") return \"dataset\";\n if (mimeType === \"application/json\") return \"json\";\n if (\n mimeType === \"application/x-ipynb+json\" ||\n mimeType === \"text/x-rmarkdown\" ||\n suffix === \".ipynb\" ||\n suffix === \".rmd\"\n ) {\n return \"notebook\";\n }\n if (SCIENTIFIC_EXTENSIONS.has(suffix)) return \"scientific_data\";\n return \"doc\";\n}\n","/**\n * Upload a tree of files, recreating its folders: the TypeScript counterpart of\n * Python's `files.upload_folder()` (`beakr_sdk/resources/_upload.py`).\n *\n * The core works on entries (`{ path, data }`), so it runs anywhere `fetch`\n * does: a browser `webkitdirectory` file list, an edge function, or Node. Only\n * {@link readDirectoryEntries} touches the file system, and it loads\n * `node:fs/promises` with a dynamic import, so importing the SDK in an edge or\n * browser runtime never pulls in a Node module.\n *\n * Behavior matches Python's:\n * - files go in a stable order (by path segments);\n * - hidden files and anything under a hidden folder (a segment starting with\n * `.`) are skipped unless `includeHidden`;\n * - with `mirrorFolders` (the default) each sub-directory becomes a folder\n * under `folderId`, parents first; a folder of the same name already in the\n * same place is reused (also after the API refuses a duplicate created\n * meanwhile), so two trees sharing sub-folder names, or the same tree again,\n * fill the existing folders; without it every file goes straight into\n * `folderId`;\n * - {@link Uploads.uploadFolder} starts the tree with a folder named after the\n * directory (`rootFolder`, default true), matching each file's recorded path;\n * - each file is uploaded by {@link Uploads.upload} (the resumable upload, one\n * part for a small file); `ingest: false` keeps the files out of Knowledge;\n * - each file records where it sat (`relativePath`, sent on completion): the\n * entry's own `relativePath`, else its `path` when that names directories.\n * {@link Uploads.uploadFolder} sets it to the path from the directory's\n * parent, so it starts with the directory's own name, as Python's does;\n * - the result is `[{ path, ...uploaded }]` in upload order; the first failure\n * rejects the call, and files already uploaded stay uploaded (a resumable\n * one rejects with `UploadInterruptedError`, whose `uploadId` resumes it).\n */\n\nimport { cleanBody, type Transport } from \"../core.js\";\nimport { ValidationError } from \"../errors.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { detectArtifactType, guessMimeType } from \"./file-types.js\";\nimport type { FileBody, UploadFileOptions } from \"./uploads.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\n\n/** One file to upload: its path relative to the tree's root, and its bytes. */\nexport interface FolderEntry {\n /** Relative path with `/` separators, e.g. `reports/2026/q3.pdf`. */\n path: string;\n data: FileBody | ReadableStream<Uint8Array>;\n /** Defaults to the type a `File` carries, else the one its extension implies. */\n contentType?: string;\n /**\n * The path recorded on the file (`docs/guides/a.md`): where it sat on the\n * uploader's machine. Defaults to `path` when that names directories.\n */\n relativePath?: string;\n}\n\n/**\n * The path a file given as `path` records: the path itself when it is relative\n * and names directories (`deals/acme/memo.pdf`), with `/` separators; otherwise\n * `undefined` (a bare name, an absolute path, or one that climbs with `..` say\n * nothing a reader could follow back). Matches Python's `upload_relative_path`.\n */\nexport function uploadRelativePath(path: string): string | undefined {\n const normalized = path.replace(/\\\\/g, \"/\");\n if (normalized.startsWith(\"/\") || /^[A-Za-z]:/.test(normalized)) return undefined;\n const segments = normalized.split(\"/\").filter((segment) => segment !== \"\" && segment !== \".\");\n if (segments.length < 2 || segments.includes(\"..\")) return undefined;\n return segments.join(\"/\");\n}\n\nexport interface UploadFolderOptions {\n projectId: string;\n /** Upload into this folder (the tree's root becomes its contents). */\n folderId?: string;\n /** Recreate sub-directories as folders (default true). */\n mirrorFolders?: boolean;\n /** Include dotfiles and dot-directories (default false). */\n includeHidden?: boolean;\n /** Compile the files into Knowledge (default true). */\n ingest?: boolean;\n /**\n * {@link Uploads.uploadFolder} only: start the folders with one named after the\n * directory (`docs/`), matching each file's recorded path (default true);\n * false puts the directory's contents straight into `folderId`.\n */\n rootFolder?: boolean;\n signal?: AbortSignal;\n}\n\n/** Internal: a folder name to place the whole tree under (set by `uploadFolder`). */\nexport interface UploadEntriesInternal {\n rootName?: string;\n}\n\nexport interface UploadedFolderFile extends JsonObject {\n path: string;\n /** The file's indexing job: `beakr.jobs.wait(file)` waits for it. */\n job_id?: string;\n}\n\ninterface Uploader {\n upload(file: FileBody, options: UploadFileOptions): Promise<JsonObject>;\n}\n\nfunction segmentsOf(path: string): string[] {\n const normalized = path.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n if (normalized.startsWith(\"/\") || /^[A-Za-z]:/.test(normalized)) {\n throw new TypeError(`Folder entry paths are relative to the tree's root: ${JSON.stringify(path)}`);\n }\n const segments = normalized.split(\"/\");\n if (segments.some((segment) => segment === \"\" || segment === \".\" || segment === \"..\")) {\n throw new TypeError(`Invalid folder entry path ${JSON.stringify(path)}`);\n }\n return segments;\n}\n\nfunction compareSegments(a: string[], b: string[]): number {\n for (let i = 0; i < Math.min(a.length, b.length); i += 1) {\n if (a[i] !== b[i]) return a[i]! < b[i]! ? -1 : 1;\n }\n return a.length - b.length;\n}\n\nasync function asFileBody(data: FolderEntry[\"data\"]): Promise<FileBody> {\n if (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream) {\n return new Response(data).blob();\n }\n return data as FileBody;\n}\n\n/** Upload every entry; see the module notes for ordering, skipping and folders. */\nexport async function uploadEntries(\n uploader: Uploader,\n transport: Transport,\n entries: Iterable<FolderEntry> | AsyncIterable<FolderEntry>,\n options: UploadFolderOptions,\n displayPath: (entry: FolderEntry) => string = (entry) => entry.path,\n internal: UploadEntriesInternal = {},\n): Promise<UploadedFolderFile[]> {\n const collected: { entry: FolderEntry; segments: string[] }[] = [];\n for await (const entry of entries as AsyncIterable<FolderEntry>) {\n const segments = segmentsOf(entry.path);\n if (!options.includeHidden && segments.some((segment) => segment.startsWith(\".\"))) continue;\n collected.push({ entry, segments });\n }\n collected.sort((a, b) => compareSegments(a.segments, b.segments));\n\n const mirror = options.mirrorFolders ?? true;\n const leading = internal.rootName ? [internal.rootName] : [];\n const folderIds = new Map<string, string | undefined>([[\"\", options.folderId]]);\n const children = new Map<string, Map<string, string>>();\n\n // The folders directly under `parentId` (the project's top level when undefined).\n const childFolders = async (parentId: string | undefined, refresh = false): Promise<Map<string, string>> => {\n const key = parentId ?? \"\";\n if (refresh) children.delete(key);\n let known = children.get(key);\n if (!known) {\n known = new Map();\n const listed = transport.paginate<{ id: string; name: string }>({\n method: \"GET\",\n path: \"/v1/folders\",\n query: parentId\n ? { project_id: options.projectId, parent_folder_id: parentId }\n : { project_id: options.projectId, root_only: true },\n });\n for await (const folder of listed) known.set(String(folder.name), String(folder.id));\n children.set(key, known);\n }\n return known;\n };\n\n const ensureFolder = async (dirs: string[]): Promise<string | undefined> => {\n const key = dirs.join(\"/\");\n if (folderIds.has(key)) return folderIds.get(key);\n const parentId = await ensureFolder(dirs.slice(0, -1));\n const name = dirs[dirs.length - 1]!;\n let existing = await childFolders(parentId);\n let id = existing.get(name);\n if (id === undefined) {\n try {\n const created = await transport.request<{ id: string }>({\n method: \"POST\",\n path: \"/v1/folders\",\n body: cleanBody({ name, project_id: options.projectId, parent_folder_id: parentId }),\n idempotent: true,\n });\n id = String(created.id);\n } catch (error) {\n // Created by someone else since the listing: use theirs.\n if (!(error instanceof ValidationError)) throw error;\n existing = await childFolders(parentId, true);\n id = existing.get(name);\n if (id === undefined) throw error;\n }\n existing.set(name, id);\n }\n folderIds.set(key, id);\n return id;\n };\n\n const results: UploadedFolderFile[] = [];\n for (const { entry, segments } of collected) {\n const name = segments[segments.length - 1]!;\n const target = mirror ? await ensureFolder([...leading, ...segments.slice(0, -1)]) : options.folderId;\n const body = await asFileBody(entry.data);\n const fileType = body instanceof Blob && body.type ? body.type : undefined;\n const contentType = entry.contentType ?? fileType ?? guessMimeType(name);\n const recorded = entry.relativePath ?? uploadRelativePath(segments.join(\"/\"));\n const uploaded = await uploader.upload(body, {\n projectId: options.projectId,\n path: name,\n relativePath: recorded && recorded !== name ? recorded : undefined,\n folderId: target,\n contentType,\n artifactType: detectArtifactType(contentType, name),\n ingest: options.ingest ?? true,\n signal: options.signal,\n });\n results.push({ path: displayPath(entry), ...uploaded });\n }\n return results;\n}\n\n/**\n * The files under a directory, as entries (Node only). Hidden files and\n * folders are skipped here unless `includeHidden`, so they are never read.\n * Symbolic links are not followed, so a link cannot pull files from outside\n * the tree into the upload. On Node 19.8+ each file is opened lazily as a Blob\n * (`fs.openAsBlob`), so a large tree is not read into memory up front.\n */\nexport async function readDirectoryEntries(\n root: string,\n options: { includeHidden?: boolean } = {},\n): Promise<FolderEntry[]> {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const fsSync = await nodeBuiltin<typeof import(\"node:fs\")>(\"node:fs\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const stats = await fs.stat(root);\n if (!stats.isDirectory()) throw new TypeError(`Not a directory: ${root}`);\n const openAsBlob = (fsSync as { openAsBlob?: (path: string) => Promise<Blob> }).openAsBlob;\n const entries: FolderEntry[] = [];\n const walk = async (dir: string, relative: string[]): Promise<void> => {\n for (const child of await fs.readdir(dir, { withFileTypes: true })) {\n if (!options.includeHidden && child.name.startsWith(\".\")) continue;\n const parts = [...relative, child.name];\n const full = nodePath.join(dir, child.name);\n if (child.isDirectory()) {\n await walk(full, parts);\n } else if (child.isFile()) {\n const data = openAsBlob ? await openAsBlob(full) : new Uint8Array(await fs.readFile(full));\n entries.push({ path: parts.join(\"/\"), data });\n }\n }\n };\n await walk(root, []);\n return entries;\n}\n","/**\n * Many files in one batch (`/v1/bulk`): the TypeScript counterpart of Python's\n * `files.upload_many()` (`beakr_sdk/resources/_upload.py`).\n *\n * `prepare` creates the folders the files' paths name and returns a presigned\n * URL per file; each file's bytes are PUT there with no Beakr credential; and\n * `complete` records the files and starts indexing them as one job\n * (`job_id`, `status_url`). Paths keep their folders: `reports/q3.pdf` lands in\n * a `reports` folder (under `folderId` when given).\n */\n\nimport { cleanBody, type Transport } from \"../core.js\";\nimport type { JsonObject } from \"../types.js\";\nimport { detectArtifactType, guessMimeType } from \"./file-types.js\";\nimport type { FolderEntry } from \"./folder-upload.js\";\nimport { sha256Hex } from \"../sha256.js\";\n\n/** Files one batch may carry (the API's `ingress.bulk_upload.max_files`). */\nexport const MAX_BATCH_FILES = 1000;\n\nexport interface UploadManyOptions {\n projectId: string;\n /** Put the files (and the folders their paths name) inside this folder. */\n folderId?: string;\n /** Include dotfiles and dot-directories of a directory (default false). */\n includeHidden?: boolean;\n /** Compile the files into Knowledge (default true). */\n ingest?: boolean;\n signal?: AbortSignal;\n}\n\n/** The batch's completion: one indexing job for every file in it. */\nexport interface BatchUpload extends JsonObject {\n batch_id: string;\n artifacts: JsonObject[];\n folders: JsonObject[];\n failed?: JsonObject[];\n /** `GET /v1/jobs/{job_id}`: pass the batch to `jobs.wait` to wait for indexing. */\n job_id: string;\n status_url: string;\n}\n\ninterface Prepared {\n batch_id: string;\n uploads: { path: string; key: string; url: string; headers?: Record<string, string> }[];\n}\n\nasync function asBlob(data: FolderEntry[\"data\"]): Promise<Blob> {\n if (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream) {\n return new Response(data).blob();\n }\n if (data instanceof Blob) return data;\n return new Blob([data as BlobPart]);\n}\n\n/** Upload ``entries`` as one batch and resolve to its completion. */\nexport async function uploadBatch(\n transport: Transport,\n entries: FolderEntry[],\n options: UploadManyOptions,\n): Promise<BatchUpload> {\n if (entries.length === 0) throw new TypeError(\"No files to upload\");\n if (entries.length > MAX_BATCH_FILES) {\n throw new RangeError(\n `${entries.length} files: one batch takes at most ${MAX_BATCH_FILES}; split them`,\n );\n }\n const seen = new Set<string>();\n const files = await Promise.all(\n entries.map(async (entry) => {\n if (seen.has(entry.path)) {\n throw new TypeError(`Two files would both be uploaded as ${entry.path}`);\n }\n seen.add(entry.path);\n const blob = await asBlob(entry.data);\n const name = entry.path.split(\"/\").pop() ?? entry.path;\n const contentType = entry.contentType ?? (blob.type || guessMimeType(name));\n return { entry, blob, name, contentType };\n }),\n );\n const prepared = await transport.request<Prepared>({\n method: \"POST\",\n path: \"/v1/bulk/prepare\",\n body: cleanBody({\n target_project_id: options.projectId,\n parent_folder_id: options.folderId,\n files: files.map((f) => ({\n path: f.entry.path,\n content_type: f.contentType,\n content_length: f.blob.size,\n })),\n }),\n idempotent: true,\n });\n const targets = new Map(prepared.uploads.map((upload) => [upload.path, upload]));\n const completed = [];\n for (const f of files) {\n const target = targets.get(f.entry.path);\n if (!target) throw new Error(`The batch has no upload URL for ${f.entry.path}`);\n await transport.putExternal(target.url, f.blob, {\n headers:\n target.headers && Object.keys(target.headers).length\n ? target.headers\n : { \"Content-Type\": f.contentType },\n signal: options.signal,\n });\n completed.push({\n path: f.entry.path,\n key: target.key,\n title: f.name.slice(0, 200),\n artifact_type: detectArtifactType(f.contentType, f.name),\n content_hash: await sha256Hex(f.blob),\n // Where the file sat on the uploader's machine, when that is not `path`.\n ...(f.entry.relativePath && f.entry.relativePath !== f.entry.path\n ? { relative_path: f.entry.relativePath }\n : {}),\n });\n }\n return transport.request<BatchUpload>({\n method: \"POST\",\n path: \"/v1/bulk/complete\",\n body: { batch_id: prepared.batch_id, files: completed, ingest_to_wiki: options.ingest ?? true },\n idempotent: true,\n });\n}\n","import { BeakrError, ConflictError, RateLimitError, ServerError, APIConnectionError } from \"../errors.js\";\nimport { cleanBody } from \"../core.js\";\nimport type { JsonObject, ResponseOf } from \"../types.js\";\nimport { Resource, enc } from \"./base.js\";\nimport {\n readDirectoryEntries,\n uploadEntries,\n uploadRelativePath,\n type FolderEntry,\n type UploadFolderOptions,\n type UploadedFolderFile,\n} from \"./folder-upload.js\";\nimport { sha256Hex } from \"../sha256.js\";\nimport { guessMimeType } from \"./file-types.js\";\nimport { uploadBatch, type BatchUpload, type UploadManyOptions } from \"./batch-upload.js\";\nimport { Jobs, type Job, type JobWaitOptions } from \"./jobs.js\";\nimport {\n alreadyUploadedOutcome,\n waitForFilesKnowledge,\n waitForKnowledge,\n type AlreadyUploaded,\n type KnowledgeWaitOptions,\n} from \"./knowledge-readiness.js\";\nimport { nodeBuiltin } from \"../node-builtins.js\";\n\n/**\n * Formerly the size above which uploads went multipart. Every upload is\n * resumable now (a small file is one part); kept so existing imports work.\n */\nexport const MULTIPART_THRESHOLD = 64 * 1024 * 1024;\n/** Part URLs requested per `/parts` call; a small window keeps each URL fresh. */\nexport const PRESIGN_WINDOW = 8;\n\nexport type FileBody = Uint8Array | ArrayBuffer | Blob;\n\n/** What {@link Uploads.uploadMany} resolves to; `job`, `status` and the rest come with a wait. */\nexport type UploadManyResult = BatchUpload & {\n job?: Job;\n batch?: JsonObject;\n /** The upload's outcome: the job's status, or `succeeded` when its only failures are duplicates. */\n status?: string;\n /** Files already in Beakr: rejected as duplicates, with the copy that was kept. */\n duplicates?: AlreadyUploaded[];\n};\n\n/** An upload batch's per-file status: `batch_id`, `status`, `artifacts`, `summary`, `knowledge`. */\nexport type BatchStatus = ResponseOf<\"/v1/bulk/{batch_id}/status\", \"get\">;\n\nexport interface UploadedPart {\n part_number: number;\n size: number;\n etag: string;\n}\n\n/** A resumable upload, from `/v1/uploads`. */\nexport interface UploadSession extends JsonObject {\n id: string;\n status: string;\n project_id: string;\n path: string;\n content_length: number;\n part_size: number;\n part_count: number;\n ingest_to_wiki: boolean;\n uploaded_parts: UploadedPart[] | null;\n}\n\nexport interface UploadComplete extends JsonObject {\n upload: UploadSession;\n artifact: JsonObject & {\n id: string;\n version_id: string;\n job_id: string | null;\n };\n job_id: string;\n /** `/v1/jobs/{job_id}`: the indexing job for this file. */\n status_url: string;\n /** The upload batch's status view (`/v1/bulk/{upload_id}/status`). */\n batch_status_url?: string;\n}\n\nexport interface UploadFileOptions {\n projectId: string;\n /** File name, optionally with folders (`reports/q3.pdf`). */\n path: string;\n folderId?: string;\n contentType?: string;\n /** Compile the file into Knowledge (default true). */\n ingest?: boolean;\n title?: string;\n artifactType?: string;\n description?: string;\n /**\n * Where the file sat on the uploader's machine, relative to the folder it was\n * uploaded from (`deals/acme/memo.pdf`). Recorded on the file: Knowledge reads\n * name it by this path (`location.display_path`) and `files.read` accepts it.\n * It never places the file. Sent on completion.\n */\n relativePath?: string;\n partSize?: number;\n signal?: AbortSignal;\n}\n\n/** A resumable upload stopped on a transient failure; `uploadId` resumes it. */\nexport class UploadInterruptedError extends BeakrError {\n constructor(\n readonly uploadId: string,\n cause: unknown,\n ) {\n super(`Upload stopped (${String(cause)}). Resume it with upload id ${uploadId}.`, {\n code: \"upload_interrupted\",\n cause,\n });\n this.name = \"UploadInterruptedError\";\n }\n}\n\nfunction resumable(error: unknown): boolean {\n if (\n error instanceof APIConnectionError ||\n error instanceof ServerError ||\n error instanceof RateLimitError\n ) {\n return true;\n }\n return error instanceof ConflictError && error.code === \"upload_incomplete\";\n}\n\nfunction asBlob(body: FileBody): Blob {\n return body instanceof Blob ? body : new Blob([body as BlobPart]);\n}\n\n/**\n * Uploads: `upload` sends one file through the resumable routes; the other\n * methods are the resumable multipart routes one call each.\n */\nexport class Uploads extends Resource {\n create(\n options: Omit<UploadFileOptions, \"title\" | \"artifactType\" | \"description\" | \"signal\"> & {\n contentLength: number;\n contentHash?: string;\n },\n ): Promise<UploadSession> {\n return this.transport.request({\n method: \"POST\",\n path: \"/v1/uploads\",\n body: cleanBody({\n target_project_id: options.projectId,\n parent_folder_id: options.folderId,\n path: options.path,\n content_type: options.contentType,\n content_length: options.contentLength,\n content_hash: options.contentHash,\n part_size: options.partSize,\n ingest_to_wiki: options.ingest ?? true,\n }),\n idempotent: true,\n });\n }\n\n get(uploadId: string): Promise<UploadSession> {\n return this.transport.request({\n method: \"GET\",\n path: `/v1/uploads/${enc(uploadId)}`,\n });\n }\n\n presignParts(\n uploadId: string,\n partNumbers: number[],\n ): Promise<{\n upload_id: string;\n parts: { part_number: number; url: string }[];\n }> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/uploads/${enc(uploadId)}/parts`,\n body: { part_numbers: partNumbers },\n });\n }\n\n complete(\n uploadId: string,\n options: {\n parts?: { part_number: number; etag: string }[];\n title?: string;\n artifactType?: string;\n description?: string;\n relativePath?: string;\n } = {},\n ): Promise<UploadComplete> {\n return this.transport.request({\n method: \"POST\",\n path: `/v1/uploads/${enc(uploadId)}/complete`,\n body: cleanBody({\n parts: options.parts,\n title: options.title,\n artifact_type: options.artifactType,\n description: options.description,\n relative_path: options.relativePath,\n }),\n idempotent: true,\n });\n }\n\n abort(uploadId: string): Promise<UploadSession> {\n return this.transport.request({\n method: \"DELETE\",\n path: `/v1/uploads/${enc(uploadId)}`,\n });\n }\n\n /**\n * Upload one file through the resumable upload (`/v1/uploads`; a small file\n * is one part) and resolve to the completion (`artifact`, `job_id`,\n * `status_url`). An interrupted upload rejects with\n * {@link UploadInterruptedError}; pass its `uploadId` to {@link resume}.\n */\n async upload(file: FileBody, options: UploadFileOptions): Promise<UploadComplete> {\n const blob = asBlob(file);\n if (blob.size === 0) {\n throw new BeakrError(`${options.path} is empty; Beakr does not store empty files`, {\n code: \"empty_file\",\n });\n }\n const session = await this.create({\n ...options,\n // Inferred from the name the way folder and batch uploads do, so a\n // single `.md` is not stored as application/octet-stream.\n contentType: options.contentType ?? (blob.type || guessMimeType(options.path)),\n contentLength: blob.size,\n // Declared up front, as the Python SDK does, so the server can check\n // the assembled object (hashed as a stream: no whole-file buffer).\n contentHash: await sha256Hex(blob),\n });\n return this.sendParts(session.id, blob, options);\n }\n\n /**\n * Upload a directory tree (Node). Sub-directories become folders unless\n * `mirrorFolders: false`; dotfiles are skipped unless `includeHidden`.\n * Either way each file records its path from the directory's parent\n * (`docs/guides/a.md` for `guides/a.md` under `docs/`) as its `relativePath`.\n * The folders start with one named after the directory (`docs/`) unless\n * `rootFolder: false`, and existing folders of the same name are reused, so\n * uploading two trees with shared sub-folder names, or the same tree again,\n * does not fail. Resolves to `[{ path, ...completion }]` in upload order,\n * like Python's `files.upload_folder()`.\n */\n async uploadFolder(directory: string, options: UploadFolderOptions): Promise<UploadedFolderFile[]> {\n const entries = await readDirectoryEntries(directory, { includeHidden: options.includeHidden });\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n const rootName = nodePath.basename(nodePath.resolve(directory));\n for (const entry of entries) entry.relativePath = `${rootName}/${entry.path}`;\n return uploadEntries(\n this,\n this.transport,\n entries,\n options,\n (entry) => nodePath.join(directory, ...entry.path.split(\"/\")),\n { rootName: options.rootFolder === false ? undefined : rootName },\n );\n }\n\n /**\n * Upload a tree given as entries, in any runtime: a browser `webkitdirectory`\n * file list (`{ path: file.webkitRelativePath, data: file }`), an edge\n * function's blobs, or streams. Same folders, order and result as\n * {@link uploadFolder}.\n */\n uploadEntries(\n entries: Iterable<FolderEntry> | AsyncIterable<FolderEntry>,\n options: UploadFolderOptions,\n ): Promise<UploadedFolderFile[]> {\n return uploadEntries(this, this.transport, entries, options);\n }\n\n /**\n * Upload many files as one batch (`/v1/bulk`): file paths and directories\n * (Node), or entries (`{ path, data }`) from any runtime. A file lands under\n * its own name; a directory's sub-directories become folders (under\n * `folderId` when given). Up to {@link MAX_BATCH_FILES} files. Resolves to\n * the batch's completion; indexing runs as one job, so\n * `await beakr.jobs.wait(batch)` waits for it, or pass `wait` here.\n *\n * `wait: \"knowledge\"` then also waits until none of the batch's files is\n * queued or running for Knowledge (`knowledgeWait` sets how) and adds the\n * final {@link batchStatus} as `batch`: each file's `knowledge_status` and\n * the batch's `knowledge` counts, including `failed`.\n *\n * With a wait, `status` is the upload's outcome. A file whose bytes are\n * already in the same place is not stored twice: it is listed in\n * `duplicates` (`path`, `artifact_id`, and `duplicate_of`, the file that was\n * kept), and when every failed file is such a duplicate `status` is\n * `\"succeeded\"` (the job succeeds too on an engine that counts them in\n * `summary.duplicates`; an earlier one reports it `failed`). With\n * `wait: \"knowledge\"` each kept file's Knowledge is waited for too\n * (`kept_knowledge_status`).\n */\n async uploadMany(\n files: string | string[] | Iterable<FolderEntry> | AsyncIterable<FolderEntry>,\n options: UploadManyOptions & {\n wait?: boolean | JobWaitOptions | \"index\" | \"knowledge\";\n knowledgeWait?: KnowledgeWaitOptions;\n },\n ): Promise<UploadManyResult> {\n if (options.wait === \"knowledge\" && options.ingest === false) {\n throw new TypeError('wait: \"knowledge\" needs ingest; these files stay out of Knowledge');\n }\n const entries: FolderEntry[] = [];\n const paths =\n typeof files === \"string\"\n ? [files]\n : Array.isArray(files) && files.every((item) => typeof item === \"string\")\n ? (files as string[])\n : undefined;\n if (paths) {\n const fs = await nodeBuiltin<typeof import(\"node:fs/promises\")>(\"node:fs/promises\");\n const nodePath = await nodeBuiltin<typeof import(\"node:path\")>(\"node:path\");\n for (const item of paths) {\n if ((await fs.stat(item)).isDirectory()) {\n const rootName = nodePath.basename(nodePath.resolve(item));\n for (const entry of await readDirectoryEntries(item, { includeHidden: options.includeHidden })) {\n entries.push({ ...entry, relativePath: `${rootName}/${entry.path}` });\n }\n } else {\n entries.push({\n path: nodePath.basename(item),\n data: new Uint8Array(await fs.readFile(item)),\n relativePath: nodePath.isAbsolute(item) ? undefined : uploadRelativePath(item),\n });\n }\n }\n } else {\n for await (const entry of files as AsyncIterable<FolderEntry>) entries.push(entry);\n }\n entries.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));\n const batch = await uploadBatch(this.transport, entries, options);\n if (!options.wait) return batch;\n const job = await new Jobs(this.transport).wait(\n batch,\n typeof options.wait === \"object\" ? options.wait : {},\n );\n let result: UploadManyResult = { ...batch, job, status: String(job.status) };\n const summary = (job.result?.[\"summary\"] as JsonObject | undefined) ?? {};\n if (job.status === \"failed\" || Number(summary[\"duplicates\"] ?? 0) > 0) {\n result = { ...result, ...alreadyUploadedOutcome(await this.batchStatus(batch.batch_id)) };\n }\n if (options.wait !== \"knowledge\") return result;\n const status = await waitForKnowledge(\n this.transport,\n `batch ${batch.batch_id}`,\n () => this.batchStatus(batch.batch_id),\n options.knowledgeWait,\n );\n result = { ...result, batch: status };\n const kept = [...new Set((result.duplicates ?? []).map((d) => d.duplicate_of.artifact_id))];\n if (kept.length) {\n const knowledge = await waitForFilesKnowledge(this.transport, kept, options.knowledgeWait);\n result.duplicates = (result.duplicates ?? []).map((d) => ({\n ...d,\n kept_knowledge_status: knowledge[d.duplicate_of.artifact_id] ?? null,\n }));\n }\n return result;\n }\n\n /**\n * Per-file status of an {@link uploadMany} batch, with counts: each file's\n * indexing `status` and `knowledge_status`, the indexing `summary`, and the\n * batch's `knowledge` counts (`queued`, `running`, `created`, `failed`,\n * `ready`...).\n */\n batchStatus(batchId: string): Promise<BatchStatus> {\n return this.transport.request({ method: \"GET\", path: `/v1/bulk/${enc(batchId)}/status` });\n }\n\n /** Finish an interrupted multipart upload, sending only the parts storage lacks. */\n resume(\n uploadId: string,\n file: FileBody,\n options: Pick<\n UploadFileOptions,\n \"title\" | \"artifactType\" | \"description\" | \"relativePath\" | \"signal\"\n > = {},\n ): Promise<UploadComplete> {\n return this.sendParts(uploadId, asBlob(file), options);\n }\n\n private async sendParts(\n uploadId: string,\n blob: Blob,\n options: Pick<\n UploadFileOptions,\n \"title\" | \"artifactType\" | \"description\" | \"relativePath\" | \"signal\"\n > & {\n path?: string;\n },\n ): Promise<UploadComplete> {\n try {\n const state = await this.get(uploadId);\n if (state.content_length !== blob.size) {\n throw new BeakrError(\n `Upload ${uploadId} is for a ${state.content_length}-byte file; this one is ${blob.size} bytes`,\n { code: \"size_mismatch\" },\n );\n }\n const etags = new Map<number, string>();\n for (const part of state.uploaded_parts ?? []) etags.set(part.part_number, part.etag);\n const missing: number[] = [];\n for (let n = 1; n <= state.part_count; n += 1) if (!etags.has(n)) missing.push(n);\n for (let start = 0; start < missing.length; start += PRESIGN_WINDOW) {\n const signed = await this.presignParts(uploadId, missing.slice(start, start + PRESIGN_WINDOW));\n for (const part of signed.parts) {\n const from = (part.part_number - 1) * state.part_size;\n const response = await this.transport.putExternal(\n part.url,\n blob.slice(from, from + state.part_size),\n { signal: options.signal },\n );\n etags.set(part.part_number, response.headers.get(\"etag\") ?? \"\");\n }\n }\n return await this.complete(uploadId, {\n parts: [...etags.entries()]\n .sort(([a], [b]) => a - b)\n .map(([part_number, etag]) => ({ part_number, etag })),\n title: options.title ?? options.path?.split(\"/\").pop(),\n artifactType: options.artifactType,\n description: options.description,\n relativePath: options.relativePath,\n });\n } catch (error) {\n if (resumable(error)) throw new UploadInterruptedError(uploadId, error);\n throw error;\n }\n }\n}\n","import { BeakrApi } from \"./generated/operations.js\";\nimport type { JsonObject } from \"./types.js\";\nimport {\n INSPECT_CUSTOM,\n Transport,\n type ClientOptions,\n type QueryValue,\n type RequestOptions,\n type TokenPair,\n type TransportDescription,\n} from \"./core.js\";\nimport { Conversations } from \"./resources/conversations.js\";\nimport { EndUserTokens } from \"./resources/end-user-tokens.js\";\nimport { Engine } from \"./resources/engine.js\";\nimport { ExternalUsers } from \"./resources/external-users.js\";\nimport { Files } from \"./resources/files.js\";\nimport { Integrations } from \"./resources/integrations.js\";\nimport { Interviews } from \"./resources/interviews.js\";\nimport {\n Jobs,\n type Job,\n type JobReference,\n type JobWaitOptions,\n} from \"./resources/jobs.js\";\nimport { Knowledge } from \"./resources/knowledge.js\";\nimport { Labels } from \"./resources/labels.js\";\nimport { Me } from \"./resources/me.js\";\nimport { Members } from \"./resources/members.js\";\nimport { Meta } from \"./resources/meta.js\";\nimport { OrgAdmin } from \"./resources/org-admin.js\";\nimport { Projects } from \"./resources/projects.js\";\nimport { Runs } from \"./resources/runs.js\";\nimport { Skills } from \"./resources/skills.js\";\nimport { Uploads } from \"./resources/uploads.js\";\n\n/**\n * The Beakr API client.\n *\n * const beakr = new Beakr({ apiKey: process.env.BEAKR_API_KEY });\n * const me = await beakr.me.get();\n */\nexport class Beakr {\n readonly me: Me;\n /** The API describing itself: its OpenAPI document and what this server serves. */\n readonly meta: Meta;\n readonly projects: Projects;\n readonly members: Members;\n /** Organization administration: service accounts. */\n readonly org: OrgAdmin;\n /** The users of your own product, mirrored into your organization. */\n readonly externalUsers: ExternalUsers;\n /** Short-lived tokens you mint for the users of your own product. */\n readonly endUserTokens: EndUserTokens;\n /** Named groups of people mapped to projects. */\n readonly labels: Labels;\n readonly knowledge: Knowledge;\n readonly conversations: Conversations;\n readonly engine: Engine;\n readonly jobs: Jobs;\n readonly runs: Runs;\n /** Send an interview link and read what came back. */\n readonly interviews: Interviews;\n /** Skills: SKILL.md folders the agent loads, and your library of them. */\n readonly skills: Skills;\n /** Connected integrations, and the read-only tools to query them. */\n readonly integrations: Integrations;\n /** Upload files: one presigned PUT, or resumable parts above 64 MB. */\n readonly uploads: Uploads;\n /** Download a file's original bytes (`download`, `downloadUrl`, Node `downloadTo`). */\n readonly files: Files;\n /** Every documented operation, one typed method each, grouped by area. */\n readonly api: BeakrApi;\n protected readonly transport: Transport;\n\n constructor(options: ClientOptions = {}) {\n this.transport = new Transport(options);\n this.me = new Me(this.transport);\n this.meta = new Meta(this.transport);\n this.projects = new Projects(this.transport);\n this.members = new Members(this.transport);\n this.org = new OrgAdmin(this.transport);\n this.externalUsers = new ExternalUsers(this.transport);\n this.endUserTokens = new EndUserTokens(this.transport);\n this.labels = new Labels(this.transport);\n this.knowledge = new Knowledge(this.transport);\n this.conversations = new Conversations(this.transport);\n this.engine = new Engine(this.transport);\n this.jobs = new Jobs(this.transport);\n this.runs = new Runs(this.transport);\n this.interviews = new Interviews(this.transport);\n this.skills = new Skills(this.transport);\n this.integrations = new Integrations(this.transport);\n this.uploads = new Uploads(this.transport);\n this.files = new Files(this.transport);\n this.api = new BeakrApi(this.transport);\n }\n\n get baseUrl(): string {\n return this.transport.baseUrl;\n }\n\n /** The current token pair after any automatic refresh. */\n get tokens(): TokenPair | undefined {\n return this.transport.currentTokens;\n }\n\n /**\n * Every item of any public list, following `next_cursor`. Every list route\n * answers `{data, next_cursor, has_more}`, so one iterator walks any of them:\n * `for await (const project of beakr.paginate(\"/v1/projects\")) { ... }`.\n */\n paginate<T = JsonObject>(\n path: string,\n query: Record<string, QueryValue> = {},\n options: { pageSize?: number } = {},\n ): AsyncGenerator<T> {\n return this.transport.paginate<T>(\n { method: \"GET\", path, query },\n options.pageSize,\n );\n }\n\n /** Wait for any long operation (a run, import, sync, ...): `await beakr.wait(run)`. */\n wait(job: JobReference, options?: JobWaitOptions): Promise<Job> {\n return this.jobs.wait(job, options);\n }\n\n /** Call any route, including ones without a resource method yet. */\n request<T = unknown>(options: RequestOptions): Promise<T> {\n return this.transport.request<T>(options);\n }\n\n /** `JSON.stringify(beakr)`: where it talks to and its credential, masked. */\n toJSON(): TransportDescription {\n return this.transport.describe();\n }\n\n toString(): string {\n return `Beakr ${JSON.stringify(this.transport.describe())}`;\n }\n\n /** `console.log(beakr)` / `util.inspect(beakr)`: the same, never the key. */\n [INSPECT_CUSTOM](): string {\n return this.toString();\n }\n}\n"],"mappings":"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","names":["DEFAULT_BASE_URL","pattern","record","record","record","record","a","b","env","error","pattern","DEFAULT_BASE_URL","env","record","value","at","segment","asBlob"]}