{"version":3,"file":"index.mjs","names":["isPlainObject","objectToString","#options","#runBeforeRequestHooks","#retry","#fetch","#consumeReturnedResponseFromBeforeRetryHook","#runAfterResponseHooks","#retryFromError","#getResponseRequest","#getNormalizedOptions","#getResponseData","#decorateResponse","#cancelResponseBody","#beforeRetryHookErrors","#retryCount","#originalRequest","#cancelBody","#normalizeSearchParams","#input","#userProvidedAbortSignal","#abortController","#createManagedSignal","#startTime","#getCurrentTime","#calculateRetryDelay","#calculateDelay","#readResponseText","#getErrorDataTimeout","#throwIfTotalTimeoutExhausted","#isJsonContentType","#parseJson","#getRemainingTotalTimeout","#assignRequest","#setResponseRequest","#returnedResponseFromBeforeRetryHook","#wrapRequestWithUploadProgress","#cachedNormalizedOptions","#responseRequests","normalizeBaseUrl","applyActiveOrganizationHeader","applyAuthHeaders","createAgentsResource","createCredentialsResource","createHealthResource","createTriggersResource","listRunsSearchParams","createWorkflowsResource","#hiddenStack","now","getMethod","sleep","KEYSTROKE_CONFIG","KEYSTROKE_CONFIG","collectValues","collectAppFieldValues","collectSetValues","collectSetValues","collectEmails","parseProjectRole","resolveProjectRefOption","projectRefInput"],"sources":["../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/errors/KyError.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/errors/HTTPError.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/errors/NetworkError.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/errors/NonError.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/errors/ForceRetryError.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/errors/SchemaValidationError.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/errors/TimeoutError.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/core/constants.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/body.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/is.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/merge.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/normalize.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/timeout.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/delay.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/options.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/is-network-error.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/utils/type-guards.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/core/Ky.js","../../../node_modules/.pnpm/ky@2.0.2/node_modules/ky/distribution/index.js","../../../packages/sdk/dist/index.mjs","../src/auth/credentials.ts","../../../packages/auth/dist/jwt-BVJ7dVm9.mjs","../../../packages/auth/dist/jwt-cache-4YqHn3jM.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/package.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/version.mjs","../../../node_modules/.pnpm/better-call@1.3.5_zod@4.4.3/node_modules/better-call/dist/error.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.11_@better-auth+utils@0.4.0_@better-fetch+fetch@1.1.21_@opentelem_3f357e8652888625f393bee0c48e5205/node_modules/@better-auth/core/dist/error/index.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/plugins/device-authorization/client.mjs","../../../node_modules/.pnpm/nanostores@1.3.0/node_modules/nanostores/clean-stores/index.js","../../../node_modules/.pnpm/nanostores@1.3.0/node_modules/nanostores/atom/index.js","../../../node_modules/.pnpm/nanostores@1.3.0/node_modules/nanostores/lifecycle/index.js","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/query.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/broadcast-channel.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/focus-manager.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/online-manager.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/parser.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/session-refresh.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.11_@better-auth+utils@0.4.0_@better-fetch+fetch@1.1.21_@opentelem_3f357e8652888625f393bee0c48e5205/node_modules/@better-auth/core/dist/env/env-impl.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/utils/url.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/fetch-plugins.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/session-atom.mjs","../../../node_modules/.pnpm/defu@6.1.7/node_modules/defu/dist/defu.mjs","../../../node_modules/.pnpm/@better-fetch+fetch@1.1.21/node_modules/@better-fetch/fetch/dist/index.js","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/config.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/utils/is-atom.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/proxy.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.11_@better-auth+utils@0.4.0_@better-fetch+fetch@1.1.21_@opentelem_3f357e8652888625f393bee0c48e5205/node_modules/@better-auth/core/dist/utils/string.mjs","../../../node_modules/.pnpm/better-auth@1.6.11_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._775c78039924a67af81d79c1d7be3379/node_modules/better-auth/dist/client/vanilla.mjs","../../../packages/auth/dist/cli.mjs","../src/auth/jwt-cache.ts","../src/auth/resolve-cli-auth.ts","../src/client.ts","../../../packages/sdk/dist/platform/index.mjs","../src/platform-client.ts","../src/resolve-resource-ref.ts","../src/organization/active-organization.ts","../src/project/resolve-project-root.ts","../src/project/load-project-env.ts","../src/dev-session.ts","../src/project/resolve-keystroke-config-root.ts","../src/project/read-project-config.ts","../src/target-options.ts","../src/resolve-project-target.ts","../src/resolve-api-target.ts","../src/errors/example-input.ts","../src/errors/format-api-message.ts","../src/errors/format-cli-error.ts","../src/errors/run-command.ts","../src/errors/command-input.ts","../src/organization/require-admin-role.ts","../src/commands/agent/list.ts","../src/commands/agent/prompt.ts","../src/commands/project/run-project.ts","../src/commands/agent/cancel-session.ts","../src/commands/agent/sessions.ts","../src/commands/agent/index.ts","../src/commands/api-key/run-api-key.ts","../src/commands/api-key/index.ts","../src/commands/app/run-app-catalog.ts","../src/commands/app/action.ts","../src/commands/app/actions.ts","../src/commands/app/parse-custom-app-fields.ts","../src/commands/app/run-app-create.ts","../src/commands/app/run-app-create-from-url.ts","../src/commands/app/create.ts","../src/commands/app/run-app-list.ts","../src/commands/app/list.ts","../src/commands/app/search.ts","../src/commands/app/show.ts","../src/commands/app/generate-app-stub.ts","../src/commands/app/run-app-sync.ts","../src/commands/app/sync.ts","../src/commands/app/index.ts","../src/auth/open-url.ts","../src/commands/connect/run-connect.ts","../src/commands/connect/index.ts","../src/commands/credentials/parse-assignment-target.ts","../src/commands/credentials/assignments/assign.ts","../src/commands/credentials/assignments/list.ts","../src/commands/credentials/assignments/unassign.ts","../src/commands/credentials/assignments/index.ts","../src/commands/credentials/consumers/list.ts","../src/commands/credentials/consumers/index.ts","../src/commands/credentials/target-options.ts","../src/commands/credentials/run-credentials.ts","../src/commands/credentials/delete.ts","../src/commands/credentials/get.ts","../src/commands/credentials/list.ts","../src/project/env-ref.ts","../src/commands/credentials/parse-value.ts","../src/commands/credentials/rotate-key.ts","../src/commands/credentials/format-set-conflict-error.ts","../src/commands/connect/parse-connect-scopes.ts","../src/commands/credentials/parse-set-scopes.ts","../src/commands/credentials/set.ts","../src/commands/credentials/update.ts","../src/commands/credentials/index.ts","../src/auth/resolve-login-targets.ts","../src/commands/auth/login.ts","../src/commands/auth/logout.ts","../src/commands/auth/status.ts","../src/commands/auth/index.ts","../src/commands/build.ts","../src/commands/deploy.ts","../src/resolve-local-api-origin.ts","../src/project/runtime-child-env.ts","../src/project/bootstrap-run.ts","../src/process/run-processes.ts","../src/runtime/ensure-native-deps.ts","../src/runtime/resolve-runtime-node-modules.ts","../src/commands/dev.ts","../src/commands/docs/run-docs.ts","../src/commands/docs/docs-mcp-url.ts","../src/commands/docs/query.ts","../src/commands/docs/search.ts","../src/commands/docs/index.ts","../src/commands/history/run-history.ts","../src/commands/history/index.ts","../src/commands/health.ts","../src/init/project-name.ts","../src/init/prompts.ts","../src/init/catalog-versions.ts","../src/init/copy-template.ts","../src/init/resolve-template-dir.ts","../src/init/project-files.ts","../src/skills/agents-guide-version.ts","../src/skills/resolve-skills-bundle-dir.ts","../src/skills/scaffold-agents-guide.ts","../src/project/write-project-config.ts","../src/init/scaffold-empty-src-dirs.ts","../src/init/scaffold-project-dotfiles.ts","../src/init/run-init.ts","../src/commands/init.ts","../src/commands/organization/run-organization.ts","../src/commands/organization/index.ts","../src/commands/project/run-project-link.ts","../src/commands/project/run-project-members.ts","../src/commands/project/members.ts","../src/commands/project/run-project-settings.ts","../src/commands/project/settings.ts","../src/commands/project/index.ts","../src/commands/pull/run-pull.ts","../src/commands/pull/index.ts","../src/commands/start.ts","../src/commands/trigger/list.ts","../src/commands/trigger/poll.ts","../src/commands/trigger/runs.ts","../src/commands/trigger/resolve-trigger-attachment.ts","../src/commands/trigger/run-attachment-enabled.ts","../src/commands/trigger/attachment.ts","../src/commands/trigger/index.ts","../src/commands/workflow/list.ts","../src/commands/workflow/run.ts","../src/commands/workflow/cancel-run.ts","../src/commands/workflow/runs.ts","../src/commands/workflow/index.ts","../src/commands/channel/run-channel.ts","../src/commands/channel/platforms.ts","../src/commands/channel/resolve-channel-project.ts","../src/commands/channel/list.ts","../src/commands/channel/index.ts","../src/commands/config/preferences-patch.ts","../src/commands/config/preferences.ts","../src/commands/config/index.ts","../src/commands/skill/index.ts","../src/commands/skills.ts","../src/skills/sync-agents-guide.ts","../src/program.ts","../src/index.ts"],"sourcesContent":["/**\nBase class for all Ky-specific errors. `HTTPError`, `NetworkError`, `TimeoutError`, and `ForceRetryError` extend this class.\n\nYou can use `instanceof KyError` to check if an error originated from Ky, or use the `isKyError()` type guard for cross-realm compatibility and TypeScript type narrowing.\n\nNote: `SchemaValidationError` is intentionally not considered a Ky error. `KyError` covers failures in Ky's HTTP lifecycle (bad status, timeout, retry), while schema validation errors originate from the user-provided schema, not from Ky itself.\n*/\nexport class KyError extends Error {\n    name = 'KyError';\n    get isKyError() {\n        return true;\n    }\n}\n//# sourceMappingURL=KyError.js.map","import { KyError } from './KyError.js';\n/**\nError thrown when the response has a non-2xx status code and `throwHttpErrors` is enabled.\n\nThe error has a `response` property with the `Response` object, a `request` property with the `Request` object, an `options` property with the normalized options (either passed to `ky` when creating an instance with `ky.create()` or directly when performing the request), and a `data` property with the pre-parsed response body. For JSON responses (based on `Content-Type`), the body is parsed using the `parseJson` option if set, or `JSON.parse` by default. For other content types, it is set as plain text. If the body is empty or parsing fails, `data` will be `undefined`. To avoid hanging or excessive buffering, `error.data` population is bounded by the request timeout and a 10 MiB response body size limit. The `data` property is populated before `beforeError` hooks run, so hooks can access it.\n\nThe response body is automatically consumed when populating `error.data`, so `error.response.json()` and other body methods will not work. Use `error.data` instead. The `error.response` object is still available for headers, status, etc.\n\nBe aware that some types of errors, such as network errors, inherently mean that a response was not received. In that case, the error will be an instance of `NetworkError` instead of `HTTPError` and will not contain a `response` property.\n*/\nexport class HTTPError extends KyError {\n    name = 'HTTPError';\n    response;\n    request;\n    options;\n    data;\n    constructor(response, request, options) {\n        const code = (response.status || response.status === 0) ? response.status : '';\n        const title = response.statusText ?? '';\n        const status = `${code} ${title}`.trim();\n        const reason = status ? `status code ${status}` : 'an unknown error';\n        super(`Request failed with ${reason}: ${request.method} ${request.url}`);\n        this.response = response;\n        this.request = request;\n        this.options = options;\n    }\n}\n//# sourceMappingURL=HTTPError.js.map","import { KyError } from './KyError.js';\n/**\nError thrown when a network error occurs during the request (e.g., DNS failure, connection refused, offline). It has a `request` property with the `Request` object. The original error is available via the standard `cause` property.\n\nNetwork errors are automatically retried (for retriable methods).\n\nNote: Network errors are detected using runtime-specific heuristics. Unrecognized runtimes may produce errors that are not wrapped in `NetworkError`. Use the `shouldRetry` option to handle such cases.\n*/\nexport class NetworkError extends KyError {\n    name = 'NetworkError';\n    request;\n    constructor(request, options) {\n        super(`Request failed due to a network error: ${request.method} ${request.url}`, options);\n        this.request = request;\n    }\n}\n//# sourceMappingURL=NetworkError.js.map","/**\nWrapper for non-Error values that were thrown.\n\nIn JavaScript, any value can be thrown (not just Error instances). This class wraps such values to ensure consistent error handling.\n*/\nexport class NonError extends Error {\n    name = 'NonError';\n    value;\n    constructor(value) {\n        let message = 'Non-error value was thrown';\n        // Intentionally minimal as this error is just an edge-case.\n        try {\n            if (typeof value === 'string') {\n                message = value;\n            }\n            else if (value && typeof value === 'object' && 'message' in value && typeof value.message === 'string') {\n                message = value.message;\n            }\n        }\n        catch {\n            // Use default message if accessing properties throws\n        }\n        super(message);\n        this.value = value;\n    }\n}\n//# sourceMappingURL=NonError.js.map","import { KyError } from './KyError.js';\nimport { NonError } from './NonError.js';\n/**\nError used to signal a forced retry from `afterResponse` hooks.\n\nThis is thrown when `ky.retry()` is returned from an `afterResponse` hook. It is observable in `beforeRetry` and `beforeError` hooks via the `isForceRetryError()` type guard.\n*/\nexport class ForceRetryError extends KyError {\n    name = 'ForceRetryError';\n    customDelay;\n    code;\n    customRequest;\n    constructor(options) {\n        // Runtime protection: wrap non-Error causes in NonError\n        // TypeScript type is Error for guidance, but JS users can pass anything\n        const cause = options?.cause\n            ? (options.cause instanceof Error ? options.cause : new NonError(options.cause))\n            : undefined;\n        super(options?.code ? `Forced retry: ${options.code}` : 'Forced retry', cause ? { cause } : undefined);\n        this.customDelay = options?.delay;\n        this.code = options?.code;\n        this.customRequest = options?.request;\n    }\n}\n//# sourceMappingURL=ForceRetryError.js.map","/**\nThe error thrown when [Standard Schema](https://github.com/standard-schema/standard-schema) validation fails in `.json(schema)`. It has an `issues` property with the validation issues from the schema.\n\nThis error intentionally does not extend `KyError` because it does not represent a failure in Ky's HTTP lifecycle. The request succeeded; the user's schema rejected the data. As such, it is not matched by `isKyError()`.\n\n@example\n```\nimport ky, {SchemaValidationError} from 'ky';\nimport {z} from 'zod';\n\nconst userSchema = z.object({name: z.string()});\n\ntry {\n    const user = await ky('/api/user').json(userSchema);\n    console.log(user.name);\n} catch (error) {\n    if (error instanceof SchemaValidationError) {\n        console.error(error.issues);\n    }\n}\n```\n*/\nexport class SchemaValidationError extends Error {\n    name = 'SchemaValidationError';\n    issues;\n    constructor(issues) {\n        super('Response schema validation failed');\n        this.issues = issues;\n    }\n}\n//# sourceMappingURL=SchemaValidationError.js.map","import { KyError } from './KyError.js';\n/**\nError thrown when the request times out. It has a `request` property with the `Request` object.\n*/\nexport class TimeoutError extends KyError {\n    name = 'TimeoutError';\n    request;\n    constructor(request) {\n        super(`Request timed out: ${request.method} ${request.url}`);\n        this.request = request;\n    }\n}\n//# sourceMappingURL=TimeoutError.js.map","export const supportsRequestStreams = (() => {\n    let duplexAccessed = false;\n    let hasContentType = false;\n    const supportsReadableStream = typeof globalThis.ReadableStream === 'function';\n    const supportsRequest = typeof globalThis.Request === 'function';\n    if (supportsReadableStream && supportsRequest) {\n        try {\n            hasContentType = new globalThis.Request('https://empty.invalid', {\n                body: new globalThis.ReadableStream(),\n                method: 'POST',\n                // @ts-expect-error - Types are outdated.\n                get duplex() {\n                    duplexAccessed = true;\n                    return 'half';\n                },\n            }).headers.has('Content-Type');\n        }\n        catch (error) {\n            // QQBrowser on iOS throws \"unsupported BodyInit type\" error (see issue #581)\n            if (error instanceof Error && error.message === 'unsupported BodyInit type') {\n                return false;\n            }\n            throw error;\n        }\n    }\n    return duplexAccessed && !hasContentType;\n})();\nexport const supportsAbortController = typeof globalThis.AbortController === 'function';\nexport const supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === 'function';\nexport const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';\nexport const supportsFormData = typeof globalThis.FormData === 'function';\nexport const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'];\nconst validate = () => undefined;\nvalidate();\nexport const responseTypes = {\n    json: 'application/json',\n    text: 'text/*',\n    formData: 'multipart/form-data',\n    arrayBuffer: '*/*',\n    blob: '*/*',\n    // Supported in modern Fetch implementations (for example, browsers and recent Node.js/undici).\n    // We still feature-check at runtime before exposing the shortcut.\n    bytes: '*/*',\n};\n// The maximum value of a 32bit int (see issue #117)\nexport const maxSafeTimeout = 2_147_483_647;\n// Size in bytes of a typical form boundary (e.g., '------WebKitFormBoundaryaxpyiPgbbPti10Rw'), used to help estimate upload size\nexport const usualFormBoundarySize = 40;\n/**\nSymbol that can be returned by a `beforeRetry` hook to stop retrying without throwing an error.\n*/\nexport const stop = Symbol('stop');\n/**\nMarker returned by `ky.retry()` to signal a forced retry from `afterResponse` hooks.\n*/\nexport class RetryMarker {\n    options;\n    constructor(options) {\n        this.options = options;\n    }\n}\n/**\nForce a retry from an `afterResponse` hook.\n\nThis allows you to retry a request based on the response content, even if the response has a successful status code. The retry will respect the `retry.limit` option and skip the `shouldRetry` check. The forced retry is observable in `beforeRetry` hooks, where the error will be a `ForceRetryError`.\n\n@param options - Optional configuration for the retry.\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n    hooks: {\n        afterResponse: [\n            async ({request, response}) => {\n                // Retry based on response body content\n                if (response.status === 200) {\n                    const data = await response.json();\n\n                    // Simple retry with default delay\n                    if (data.error?.code === 'TEMPORARY_ERROR') {\n                        return ky.retry();\n                    }\n\n                    // Retry with custom delay from API response\n                    if (data.error?.code === 'RATE_LIMIT') {\n                        return ky.retry({\n                            delay: data.error.retryAfter * 1000,\n                            code: 'RATE_LIMIT'\n                        });\n                    }\n\n                    // Retry with a modified request (e.g., fallback endpoint)\n                    if (data.error?.code === 'FALLBACK_TO_BACKUP') {\n                        return ky.retry({\n                            request: new Request('https://backup-api.com/endpoint', {\n                                method: request.method,\n                                headers: request.headers,\n                            }),\n                            code: 'BACKUP_ENDPOINT'\n                        });\n                    }\n\n                    // Retry with refreshed authentication\n                    if (data.error?.code === 'TOKEN_REFRESH' && data.newToken) {\n                        return ky.retry({\n                            request: new Request(request, {\n                                headers: {\n                                    ...Object.fromEntries(request.headers),\n                                    'Authorization': `Bearer ${data.newToken}`\n                                }\n                            }),\n                            code: 'TOKEN_REFRESHED'\n                        });\n                    }\n\n                    // Retry with cause to preserve error chain\n                    try {\n                        validateResponse(data);\n                    } catch (error) {\n                        return ky.retry({\n                            code: 'VALIDATION_FAILED',\n                            cause: error\n                        });\n                    }\n                }\n            }\n        ],\n        beforeRetry: [\n            ({error, retryCount}) => {\n                // Observable in beforeRetry hooks\n                if (isForceRetryError(error)) {\n                    console.log(`Forced retry #${retryCount}: ${error.message}`);\n                    // Example output: \"Forced retry #1: Forced retry: RATE_LIMIT\"\n                }\n            }\n        ]\n    }\n});\n\nconst response = await api.get('https://example.com/api');\n```\n*/\nexport const retry = (options) => new RetryMarker(options);\nexport const kyOptionKeys = {\n    json: true,\n    parseJson: true,\n    stringifyJson: true,\n    searchParams: true,\n    baseUrl: true,\n    prefix: true,\n    retry: true,\n    timeout: true,\n    totalTimeout: true,\n    hooks: true,\n    throwHttpErrors: true,\n    onDownloadProgress: true,\n    onUploadProgress: true,\n    fetch: true,\n    context: true,\n};\n// Standard RequestInit options that should NOT be passed separately to fetch()\n// because they're already applied to the Request object.\n// Note: `dispatcher` and `priority` are NOT included here - they're fetch-only\n// options that the Request constructor doesn't accept, so they need to be passed\n// separately to fetch().\nexport const requestOptionsRegistry = {\n    method: true,\n    headers: true,\n    body: true,\n    mode: true,\n    credentials: true,\n    cache: true,\n    redirect: true,\n    referrer: true,\n    referrerPolicy: true,\n    integrity: true,\n    keepalive: true,\n    signal: true,\n    window: true,\n    duplex: true,\n};\n//# sourceMappingURL=constants.js.map","import { usualFormBoundarySize } from '../core/constants.js';\nconst encoder = new TextEncoder();\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const getBodySize = (body) => {\n    if (!body) {\n        return 0;\n    }\n    if (body instanceof FormData) {\n        // This is an approximation, as FormData size calculation is not straightforward\n        let size = 0;\n        for (const [key, value] of body) {\n            size += usualFormBoundarySize;\n            size += encoder.encode(`Content-Disposition: form-data; name=\"${key}\"`).byteLength;\n            size += typeof value === 'string'\n                ? encoder.encode(value).byteLength\n                : value.size;\n        }\n        return size;\n    }\n    if (body instanceof Blob) {\n        return body.size;\n    }\n    if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {\n        return body.byteLength;\n    }\n    if (typeof body === 'string') {\n        return encoder.encode(body).byteLength;\n    }\n    if (body instanceof URLSearchParams) {\n        return encoder.encode(body.toString()).byteLength;\n    }\n    return 0;\n};\nconst withProgress = (stream, totalBytes, onProgress) => {\n    let previousChunk;\n    let transferredBytes = 0;\n    return stream.pipeThrough(new TransformStream({\n        transform(currentChunk, controller) {\n            controller.enqueue(currentChunk);\n            if (previousChunk) {\n                transferredBytes += previousChunk.byteLength;\n                let percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n                // Avoid reporting 100% progress before the stream is actually finished (in case totalBytes is inaccurate)\n                if (percent >= 1) {\n                    // Epsilon is used here to get as close as possible to 100% without reaching it.\n                    // If we were to use 0.99 here, percent could potentially go backwards.\n                    percent = 1 - Number.EPSILON;\n                }\n                onProgress?.({ percent, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes }, previousChunk);\n            }\n            previousChunk = currentChunk;\n        },\n        flush() {\n            if (previousChunk) {\n                transferredBytes += previousChunk.byteLength;\n                onProgress?.({ percent: 1, totalBytes: Math.max(totalBytes, transferredBytes), transferredBytes }, previousChunk);\n            }\n        },\n    }));\n};\nexport const streamResponse = (response, onDownloadProgress) => {\n    if (!response.body) {\n        return response;\n    }\n    const responseInit = {\n        status: response.status,\n        statusText: response.statusText,\n        headers: response.headers,\n    };\n    if (response.status === 204) {\n        return new Response(null, responseInit);\n    }\n    const totalBytes = Math.max(0, Number(response.headers.get('content-length')) || 0);\n    return new Response(withProgress(response.body, totalBytes, onDownloadProgress), responseInit);\n};\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const streamRequest = (request, onUploadProgress, originalBody) => {\n    if (!request.body) {\n        return request;\n    }\n    // Use original body for size calculation since request.body is already a stream\n    const totalBytes = getBodySize(originalBody ?? request.body);\n    return new Request(request, {\n        // @ts-expect-error - Types are outdated.\n        duplex: 'half',\n        body: withProgress(request.body, totalBytes, onUploadProgress),\n    });\n};\n//# sourceMappingURL=body.js.map","// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const isObject = (value) => value !== null && typeof value === 'object';\n//# sourceMappingURL=is.js.map","import { supportsAbortSignal } from '../core/constants.js';\nimport { isObject } from './is.js';\nconst replaceSymbol = Symbol('replaceOption');\nconst getReplaceState = (value) => isObject(value) && value[replaceSymbol] === true\n    ? {\n        isReplace: true,\n        value: value.value,\n    }\n    : {\n        isReplace: false,\n        value,\n    };\n/**\nWraps a value so that `ky.extend()` will replace the parent value instead of merging with it. Works with hooks, headers, search parameters, context, and any other deep-merged option.\n\nBy default, `.extend()` deep-merges options with the parent instance: hooks get appended, headers get merged, and search parameters get accumulated. Use `replaceOption` when you want to fully replace a merged property instead.\n\n@example\n```\nimport ky, {replaceOption} from 'ky';\n\nconst base = ky.create({\n    hooks: {beforeRequest: [addAuth, addTracking]},\n});\n\n// Replaces instead of appending\nconst extended = base.extend({\n    hooks: replaceOption({beforeRequest: [onlyThis]}),\n});\n// hooks.beforeRequest is now [onlyThis], not [addAuth, addTracking, onlyThis]\n```\n*/\nexport const replaceOption = (value) => {\n    const markedValue = { [replaceSymbol]: true, value };\n    return markedValue;\n};\nexport const validateAndMerge = (...sources) => {\n    for (const source of sources) {\n        if ((!isObject(source) || Array.isArray(source)) && source !== undefined) {\n            throw new TypeError('The `options` argument must be an object');\n        }\n    }\n    return deepMerge({}, ...sources);\n};\nexport const mergeHeaders = (source1 = {}, source2 = {}) => {\n    const result = new globalThis.Headers(source1);\n    const isHeadersInstance = source2 instanceof globalThis.Headers;\n    const source = new globalThis.Headers(source2);\n    for (const [key, value] of source.entries()) {\n        if ((isHeadersInstance && value === 'undefined') || value === undefined) {\n            result.delete(key);\n        }\n        else {\n            result.set(key, value);\n        }\n    }\n    return result;\n};\nconst isPlainObject = (value) => {\n    if (!isObject(value) || Array.isArray(value)) {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(value);\n    return prototype === Object.prototype || prototype === null;\n};\nexport const cloneShallow = (value) => {\n    if (value instanceof URLSearchParams) {\n        const copy = new URLSearchParams(value);\n        const deleted = value[deletedParametersSymbol];\n        if (deleted) {\n            // Preserve internal deletion markers so init-hook cloning does not resurrect params removed during option merging.\n            copy[deletedParametersSymbol] = new Set(deleted);\n        }\n        return copy;\n    }\n    if (value instanceof globalThis.Headers) {\n        return new globalThis.Headers(value);\n    }\n    if (Array.isArray(value)) {\n        return [...value];\n    }\n    if (isPlainObject(value)) {\n        const copy = { ...value };\n        return copy;\n    }\n    return value;\n};\nconst normalizeHeaderObject = (headers) => Object.fromEntries(Object.entries(headers).filter((entry) => entry[1] !== undefined));\nconst mergeHeaderContainers = (source1, source2) => {\n    if (isPlainObject(source1) && isPlainObject(source2)) {\n        return normalizeHeaderObject({ ...source1, ...source2 });\n    }\n    return mergeHeaders(source1, source2);\n};\nfunction newHookValue(original, incoming, property) {\n    return (Object.hasOwn(incoming, property) && incoming[property] === undefined)\n        ? []\n        : deepMerge(original[property] ?? [], incoming[property] ?? []);\n}\nexport const mergeHooks = (original = {}, incoming = {}) => ({\n    init: newHookValue(original, incoming, 'init'),\n    beforeRequest: newHookValue(original, incoming, 'beforeRequest'),\n    beforeRetry: newHookValue(original, incoming, 'beforeRetry'),\n    beforeError: newHookValue(original, incoming, 'beforeError'),\n    afterResponse: newHookValue(original, incoming, 'afterResponse'),\n});\nexport const deletedParametersSymbol = Symbol('deletedParameters');\nconst appendSearchParameters = (target, source) => {\n    const result = new URLSearchParams();\n    const deleted = new Set();\n    for (const input of [target, source]) {\n        if (input === undefined) {\n            continue;\n        }\n        if (input instanceof URLSearchParams) {\n            for (const [key, value] of input.entries()) {\n                result.append(key, value);\n                deleted.delete(key);\n            }\n            const inputDeleted = input[deletedParametersSymbol];\n            if (inputDeleted) {\n                for (const key of inputDeleted) {\n                    result.delete(key);\n                    deleted.add(key);\n                }\n            }\n        }\n        else if (Array.isArray(input)) {\n            for (const pair of input) {\n                if (!Array.isArray(pair) || pair.length !== 2) {\n                    throw new TypeError('Array search parameters must be provided in [[key, value], ...] format');\n                }\n                result.append(String(pair[0]), String(pair[1]));\n                deleted.delete(String(pair[0]));\n            }\n        }\n        else if (isObject(input)) {\n            for (const [key, value] of Object.entries(input)) {\n                if (value === undefined) {\n                    result.delete(key);\n                    deleted.add(key);\n                }\n                else {\n                    result.append(key, String(value));\n                    deleted.delete(key);\n                }\n            }\n        }\n        else {\n            // String\n            const parameters = new URLSearchParams(input);\n            for (const [key, value] of parameters.entries()) {\n                result.append(key, value);\n                deleted.delete(key);\n            }\n        }\n    }\n    if (deleted.size > 0) {\n        result[deletedParametersSymbol] = deleted;\n    }\n    return result;\n};\n// TODO: Make this strongly-typed (no `any`).\nexport const deepMerge = (...sources) => {\n    let returnValue = {};\n    let headers = {};\n    let hooks = {};\n    let searchParameters;\n    const signals = [];\n    for (const source of sources) {\n        if (Array.isArray(source)) {\n            if (!Array.isArray(returnValue)) {\n                returnValue = [];\n            }\n            returnValue = [...returnValue, ...source];\n        }\n        else if (isObject(source)) {\n            for (let [key, value] of Object.entries(source)) {\n                // Special handling for AbortSignal instances\n                if (key === 'signal' && value instanceof globalThis.AbortSignal) {\n                    signals.push(value);\n                    continue;\n                }\n                const replaceState = getReplaceState(value);\n                const { isReplace } = replaceState;\n                value = replaceState.value;\n                // Special handling for context - shallow merge only\n                if (key === 'context') {\n                    if (value !== undefined && value !== null && (!isObject(value) || Array.isArray(value))) {\n                        throw new TypeError('The `context` option must be an object');\n                    }\n                    // Shallow merge: always create a new object to prevent mutation bugs\n                    returnValue = {\n                        ...returnValue,\n                        context: (value === undefined || value === null)\n                            ? {}\n                            : (isReplace\n                                ? { ...value }\n                                : { ...returnValue.context, ...value }),\n                    };\n                    continue;\n                }\n                // Special handling for searchParams\n                if (key === 'searchParams') {\n                    if (value === undefined || value === null) {\n                        // Explicit undefined or null removes searchParams\n                        searchParameters = undefined;\n                    }\n                    else if (isReplace) {\n                        searchParameters = value;\n                    }\n                    else {\n                        // First source: keep as-is to preserve type (string/object/URLSearchParams)\n                        // Subsequent sources: merge and convert to URLSearchParams\n                        searchParameters = searchParameters === undefined ? value : appendSearchParameters(searchParameters, value);\n                    }\n                    continue;\n                }\n                if (isObject(value) && !isReplace && key in returnValue) {\n                    value = deepMerge(returnValue[key], value);\n                }\n                returnValue = { ...returnValue, [key]: value };\n            }\n            if (isObject(source.hooks)) {\n                const { value: hookValue, isReplace } = getReplaceState(source.hooks);\n                hooks = isReplace\n                    ? mergeHooks({}, hookValue)\n                    : mergeHooks(hooks, hookValue);\n                returnValue.hooks = hooks;\n            }\n            if (isObject(source.headers)) {\n                const { value: headerValue, isReplace } = getReplaceState(source.headers);\n                headers = isReplace\n                    ? cloneShallow(headerValue)\n                    : mergeHeaderContainers(headers, headerValue);\n                returnValue.headers = headers;\n            }\n        }\n    }\n    if (searchParameters !== undefined) {\n        returnValue.searchParams = searchParameters;\n    }\n    if (signals.length > 0) {\n        if (signals.length === 1) {\n            returnValue.signal = signals[0];\n        }\n        else if (supportsAbortSignal) {\n            returnValue.signal = AbortSignal.any(signals);\n        }\n        else {\n            // When AbortSignal.any is not available, use the last signal\n            // This maintains the previous behavior before signal merging was added\n            // This can be remove when the `supportsAbortSignal` check is removed.`\n            returnValue.signal = signals.at(-1);\n        }\n    }\n    return returnValue;\n};\n//# sourceMappingURL=merge.js.map","import { requestMethods } from '../core/constants.js';\nexport const normalizeRequestMethod = (input) => requestMethods.includes(input) ? input.toUpperCase() : input;\nconst retryMethods = ['get', 'put', 'head', 'delete', 'options', 'trace'];\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\nconst retryAfterStatusCodes = [413, 429, 503];\nconst defaultRetryOptions = {\n    limit: 2,\n    methods: retryMethods,\n    statusCodes: retryStatusCodes,\n    afterStatusCodes: retryAfterStatusCodes,\n    maxRetryAfter: Number.POSITIVE_INFINITY,\n    backoffLimit: Number.POSITIVE_INFINITY,\n    delay: attemptCount => 0.3 * (2 ** (attemptCount - 1)) * 1000,\n    jitter: undefined,\n    retryOnTimeout: false,\n};\nexport const normalizeRetryOptions = (retry = {}) => {\n    if (typeof retry === 'number') {\n        return {\n            ...defaultRetryOptions,\n            limit: retry,\n        };\n    }\n    if (retry.methods && !Array.isArray(retry.methods)) {\n        throw new Error('retry.methods must be an array');\n    }\n    if (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n        throw new Error('retry.statusCodes must be an array');\n    }\n    const normalizedRetry = Object.fromEntries(Object.entries({\n        ...retry,\n        methods: retry.methods?.map(method => method.toLowerCase()),\n    }).filter(([, value]) => value !== undefined));\n    return {\n        ...defaultRetryOptions,\n        ...normalizedRetry,\n    };\n};\n//# sourceMappingURL=normalize.js.map","import { TimeoutError } from '../errors/TimeoutError.js';\n// `Promise.race()` workaround (#91)\nexport default async function timeout(request, init, abortController, options) {\n    return new Promise((resolve, reject) => {\n        const timeoutId = setTimeout(() => {\n            if (abortController) {\n                abortController.abort();\n            }\n            reject(new TimeoutError(request));\n        }, options.timeout);\n        void options\n            .fetch(request, init)\n            .then(resolve)\n            .catch(reject)\n            .then(() => {\n            clearTimeout(timeoutId);\n        });\n    });\n}\n//# sourceMappingURL=timeout.js.map","// https://github.com/sindresorhus/delay/tree/ab98ae8dfcb38e1593286c94d934e70d14a4e111\nexport default async function delay(ms, { signal }) {\n    return new Promise((resolve, reject) => {\n        if (signal) {\n            signal.throwIfAborted();\n            signal.addEventListener('abort', abortHandler, { once: true });\n        }\n        function abortHandler() {\n            clearTimeout(timeoutId);\n            reject(signal.reason);\n        }\n        const timeoutId = setTimeout(() => {\n            signal?.removeEventListener('abort', abortHandler);\n            resolve();\n        }, ms);\n    });\n}\n//# sourceMappingURL=delay.js.map","import { kyOptionKeys, requestOptionsRegistry } from '../core/constants.js';\nimport { deletedParametersSymbol } from './merge.js';\nexport const findUnknownOptions = (options) => {\n    const unknownOptions = {};\n    for (const key in options) {\n        // Skip inherited properties\n        if (!Object.hasOwn(options, key)) {\n            continue;\n        }\n        // Forward every non-standard, non-Ky option to fetch().\n        // We intentionally do not check whether the key also exists on `Request`, because some runtimes\n        // patch `Request.prototype` with fetch-only extensions. For example, Next.js adds `next`, and the\n        // old `key in request` heuristic dropped it unless Ky kept a special-case allowlist.\n        // Passing all non-standard keys makes that allowlist unnecessary and preserves future fetch extensions too.\n        if (!(key in requestOptionsRegistry) && !(key in kyOptionKeys)) {\n            unknownOptions[key] = options[key];\n        }\n    }\n    return unknownOptions;\n};\nexport const hasSearchParameters = (search) => {\n    if (search === undefined) {\n        return false;\n    }\n    // The `typeof array` still gives \"object\", so we need different checking for array.\n    if (Array.isArray(search)) {\n        return search.length > 0;\n    }\n    if (search instanceof URLSearchParams) {\n        return search.size > 0 || Boolean(search[deletedParametersSymbol]?.size);\n    }\n    // Record\n    if (typeof search === 'object') {\n        return Object.keys(search).length > 0;\n    }\n    if (typeof search === 'string') {\n        return search.trim().length > 0;\n    }\n    return Boolean(search);\n};\n//# sourceMappingURL=options.js.map","// Inlined from https://github.com/sindresorhus/is-network-error v1.3.1\nconst objectToString = Object.prototype.toString;\nconst isError = (value) => objectToString.call(value) === '[object Error]';\nconst errorMessages = new Set([\n    'network error', // Chrome\n    'NetworkError when attempting to fetch resource.', // Firefox\n    'The Internet connection appears to be offline.', // Safari 16\n    'Network request failed', // `cross-fetch`\n    'fetch failed', // Undici (Node.js)\n    'terminated', // Undici (Node.js)\n    ' A network error occurred.', // Bun (WebKit) - leading space is intentional\n    'Network connection lost', // Cloudflare Workers (fetch)\n]);\nexport default function isRawNetworkError(error) {\n    const isValid = error\n        && isError(error)\n        && error.name === 'TypeError'\n        && typeof error.message === 'string';\n    if (!isValid) {\n        return false;\n    }\n    const { message, stack } = error;\n    // Safari 17+ has generic message but no stack for network errors\n    if (message === 'Load failed') {\n        return stack === undefined\n            // Sentry adds its own stack trace to the fetch error, so also check for that\n            || '__sentry_captured__' in error;\n    }\n    // Deno network errors start with specific text\n    if (message.startsWith('error sending request for url')) {\n        return true;\n    }\n    // Chrome: exact \"Failed to fetch\" or with hostname: \"Failed to fetch (example.com)\"\n    if (message === 'Failed to fetch' || (message.startsWith('Failed to fetch (') && message.endsWith(')'))) {\n        return true;\n    }\n    // Standard network error messages\n    return errorMessages.has(message);\n}\n//# sourceMappingURL=is-network-error.js.map","import { HTTPError } from '../errors/HTTPError.js';\nimport { NetworkError } from '../errors/NetworkError.js';\nimport { TimeoutError } from '../errors/TimeoutError.js';\nimport { ForceRetryError } from '../errors/ForceRetryError.js';\n// Handles cross-realm cases (e.g., iframes, different JS contexts) where `instanceof` fails.\nconst isErrorType = (error, cls) => error instanceof cls || error?.name === cls.name;\n/**\nType guard to check if an error is a `KyError`.\n\nNote: `SchemaValidationError` is intentionally not considered a Ky error. `KyError` covers failures in Ky's HTTP lifecycle (bad status, timeout, retry), while schema validation errors originate from the user-provided schema, not from Ky itself.\n\n@param error - The error to check\n@returns `true` if the error is a Ky error, `false` otherwise\n\n@example\n```\nimport ky, {isKyError} from 'ky';\ntry {\n    const response = await ky.get('/api/data');\n} catch (error) {\n    if (isKyError(error)) {\n        // Handle Ky-specific errors\n        console.log('Ky error occurred:', error.message);\n    } else {\n        // Handle other errors\n        console.log('Unknown error:', error);\n    }\n}\n```\n*/\nexport function isKyError(error) {\n    return error?.isKyError === true || isHTTPError(error) || isNetworkError(error) || isTimeoutError(error) || isForceRetryError(error);\n}\n/**\nType guard to check if an error is an `HTTPError`.\n\n@param error - The error to check\n@returns `true` if the error is an `HTTPError`, `false` otherwise\n\n@example\n```\nimport ky, {isHTTPError} from 'ky';\ntry {\n    const response = await ky.get('/api/data');\n} catch (error) {\n    if (isHTTPError(error)) {\n        console.log('HTTP error status:', error.response.status);\n    }\n}\n```\n*/\nexport function isHTTPError(error) {\n    return isErrorType(error, HTTPError);\n}\n/**\nType guard to check if an error is a `NetworkError`.\n\n@param error - The error to check\n@returns `true` if the error is a `NetworkError`, `false` otherwise\n\n@example\n```\nimport ky, {isNetworkError} from 'ky';\ntry {\n    const response = await ky.get('/api/data');\n} catch (error) {\n    if (isNetworkError(error)) {\n        console.log('Network error:', error.request.url);\n    }\n}\n```\n*/\nexport function isNetworkError(error) {\n    return isErrorType(error, NetworkError);\n}\n/**\nType guard to check if an error is a `TimeoutError`.\n\n@param error - The error to check\n@returns `true` if the error is a `TimeoutError`, `false` otherwise\n\n@example\n```\nimport ky, {isTimeoutError} from 'ky';\ntry {\n    const response = await ky.get('/api/data', { timeout: 1000 });\n} catch (error) {\n    if (isTimeoutError(error)) {\n        console.log('Request timed out:', error.request.url);\n    }\n}\n```\n*/\nexport function isTimeoutError(error) {\n    return isErrorType(error, TimeoutError);\n}\n/**\nType guard to check if an error is a `ForceRetryError`.\n\n@param error - The error to check\n@returns `true` if the error is a `ForceRetryError`, `false` otherwise\n\n@example\n```\nimport ky, {isForceRetryError} from 'ky';\n\nconst api = ky.extend({\n    hooks: {\n        beforeRetry: [\n            ({error, retryCount}) => {\n                if (isForceRetryError(error)) {\n                    console.log(`Forced retry #${retryCount}: ${error.code}`);\n                }\n            }\n        ]\n    }\n});\n```\n*/\nexport function isForceRetryError(error) {\n    return isErrorType(error, ForceRetryError);\n}\n//# sourceMappingURL=type-guards.js.map","import { HTTPError } from '../errors/HTTPError.js';\nimport { NetworkError } from '../errors/NetworkError.js';\nimport { NonError } from '../errors/NonError.js';\nimport { ForceRetryError } from '../errors/ForceRetryError.js';\nimport { SchemaValidationError } from '../errors/SchemaValidationError.js';\nimport { TimeoutError } from '../errors/TimeoutError.js';\nimport { streamRequest, streamResponse } from '../utils/body.js';\nimport { cloneShallow, mergeHeaders, mergeHooks, deletedParametersSymbol, } from '../utils/merge.js';\nimport { normalizeRequestMethod, normalizeRetryOptions } from '../utils/normalize.js';\nimport timeout from '../utils/timeout.js';\nimport delay from '../utils/delay.js';\nimport { findUnknownOptions, hasSearchParameters } from '../utils/options.js';\nimport isRawNetworkError from '../utils/is-network-error.js';\nimport { isHTTPError, isNetworkError, isTimeoutError } from '../utils/type-guards.js';\nimport { maxSafeTimeout, responseTypes, stop, RetryMarker, supportsAbortController, supportsAbortSignal, supportsFormData, supportsResponseStreams, supportsRequestStreams, } from './constants.js';\nconst maxErrorResponseBodySize = 10 * 1024 * 1024;\nconst prefixUrlRenamedErrorMessage = 'The `prefixUrl` option has been renamed `prefix` in v2 and enhanced to allow slashes in input. See also the new `baseUrl` option for improved flexibility with standard URL resolution: https://github.com/sindresorhus/ky#baseurl';\nconst timedOutResponseData = Symbol('timedOutResponseData');\nconst createTextDecoder = (contentType) => {\n    const match = /;\\s*charset\\s*=\\s*(?:\"([^\"]+)\"|([^;,\\s]+))/i.exec(contentType);\n    const charset = match?.[1] ?? match?.[2];\n    if (charset) {\n        try {\n            return new TextDecoder(charset);\n        }\n        catch { }\n    }\n    return new TextDecoder();\n};\nconst invalidSchemaMessage = 'The `schema` argument must follow the Standard Schema specification';\nconst cloneRetryOptions = (retry) => {\n    if (typeof retry !== 'object') {\n        return retry;\n    }\n    // Clone nested arrays too so init hooks can mutate retry config without leaking state across requests.\n    return {\n        ...retry,\n        ...(retry.methods && { methods: [...retry.methods] }),\n        ...(retry.statusCodes && { statusCodes: [...retry.statusCodes] }),\n        ...(retry.afterStatusCodes && { afterStatusCodes: [...retry.afterStatusCodes] }),\n    };\n};\nconst objectToString = Object.prototype.toString;\nconst isRequestInstance = (value) => value instanceof globalThis.Request || objectToString.call(value) === '[object Request]';\n// Accepted custom responses are treated as full Responses throughout Ky.\n// If a custom fetch returns one, it must behave like a Response for cloning,\n// body consumption, `json()` decoration, and any enabled stream features.\nconst isResponseInstance = (value) => value instanceof globalThis.Response || objectToString.call(value) === '[object Response]';\nconst cloneSearchParametersForInitHook = (searchParameters) => {\n    if (Array.isArray(searchParameters)) {\n        return searchParameters.map(parameter => [...parameter]);\n    }\n    return cloneShallow(searchParameters);\n};\n// Shallow-clone mutable option properties so init hook mutations don't leak across requests.\nfunction cloneInitHookOptions(options) {\n    const clonedOptions = {\n        ...options,\n        json: cloneShallow(options.json),\n        context: cloneShallow(options.context),\n        headers: cloneShallow(options.headers),\n        searchParams: cloneSearchParametersForInitHook(options.searchParams),\n    };\n    if (options.retry !== undefined) {\n        clonedOptions.retry = cloneRetryOptions(options.retry);\n    }\n    return clonedOptions;\n}\nconst validateJsonWithSchema = async (jsonValue, schema) => {\n    if ((typeof schema !== 'object'\n        && typeof schema !== 'function')\n        || schema === null) {\n        throw new TypeError(invalidSchemaMessage);\n    }\n    const standardSchema = schema['~standard'];\n    if (typeof standardSchema !== 'object'\n        || standardSchema === null\n        || typeof standardSchema.validate !== 'function') {\n        throw new TypeError(invalidSchemaMessage);\n    }\n    const validationResult = await standardSchema.validate(jsonValue);\n    if (validationResult.issues) {\n        throw new SchemaValidationError(validationResult.issues);\n    }\n    return validationResult.value;\n};\nexport class Ky {\n    static create(input, options) {\n        const initHooks = options.hooks?.init ?? [];\n        const initHookOptions = initHooks.length > 0 ? cloneInitHookOptions(options) : options;\n        for (const hook of initHooks) {\n            hook(initHookOptions);\n        }\n        const ky = new Ky(input, initHookOptions);\n        const function_ = async () => {\n            if (typeof ky.#options.timeout === 'number' && ky.#options.timeout > maxSafeTimeout) {\n                throw new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n            }\n            if (typeof ky.#options.totalTimeout === 'number' && ky.#options.totalTimeout > maxSafeTimeout) {\n                throw new RangeError(`The \\`totalTimeout\\` option cannot be greater than ${maxSafeTimeout}`);\n            }\n            // Delay the fetch so that body method shortcuts can set the Accept header\n            await Promise.resolve();\n            const beforeRequestResponse = await ky.#runBeforeRequestHooks();\n            let response = beforeRequestResponse ?? await ky.#retry(async () => ky.#fetch());\n            let responseFromHook = beforeRequestResponse !== undefined\n                || ky.#consumeReturnedResponseFromBeforeRetryHook();\n            for (;;) {\n                // `undefined` means a hook stopped the flow without providing a response.\n                // Non-native Responses still continue through Ky if they pass `isResponseInstance()`.\n                if (response === undefined) {\n                    return response;\n                }\n                if (isResponseInstance(response)) {\n                    try {\n                        // eslint-disable-next-line no-await-in-loop\n                        response = await ky.#runAfterResponseHooks(response);\n                    }\n                    catch (error) {\n                        if (!(error instanceof ForceRetryError)) {\n                            throw error;\n                        }\n                        // eslint-disable-next-line no-await-in-loop\n                        const retriedResponse = await ky.#retryFromError(error, async () => ky.#fetch());\n                        if (retriedResponse === undefined) {\n                            return retriedResponse;\n                        }\n                        response = retriedResponse;\n                        responseFromHook = ky.#consumeReturnedResponseFromBeforeRetryHook();\n                        continue;\n                    }\n                }\n                const currentResponse = response;\n                // Opaque responses (`response.type === 'opaque'`) from `no-cors` requests always have `status: 0` and `ok: false`, but this is not a failure - the actual status is hidden by the browser.\n                if (!currentResponse.ok && currentResponse.type !== 'opaque' && (typeof ky.#options.throwHttpErrors === 'function'\n                    ? ky.#options.throwHttpErrors(currentResponse.status)\n                    : ky.#options.throwHttpErrors)) {\n                    // `request` must reflect the request that actually failed, but `options` stays as Ky's\n                    // normalized options snapshot. Replacement `Request` instances do not preserve the\n                    // original `BodyInit`, so trying to make `options` mirror arbitrary requests would be lossy.\n                    const httpError = new HTTPError(currentResponse, ky.#getResponseRequest(currentResponse), ky.#getNormalizedOptions());\n                    const errorToThrow = httpError;\n                    // eslint-disable-next-line no-await-in-loop\n                    httpError.data = await ky.#getResponseData(currentResponse);\n                    if (responseFromHook) {\n                        throw errorToThrow;\n                    }\n                    // eslint-disable-next-line no-await-in-loop\n                    const retriedResponse = await ky.#retryFromError(httpError, async () => ky.#fetch());\n                    if (retriedResponse === undefined) {\n                        return retriedResponse;\n                    }\n                    response = retriedResponse;\n                    responseFromHook = ky.#consumeReturnedResponseFromBeforeRetryHook();\n                    continue;\n                }\n                break;\n            }\n            if (!isResponseInstance(response)) {\n                return response;\n            }\n            ky.#decorateResponse(response);\n            // If `onDownloadProgress` is passed, it uses the stream API internally\n            if (ky.#options.onDownloadProgress) {\n                if (typeof ky.#options.onDownloadProgress !== 'function') {\n                    throw new TypeError('The `onDownloadProgress` option must be a function');\n                }\n                if (!supportsResponseStreams) {\n                    throw new Error('Streams are not supported in your environment. `ReadableStream` is missing.');\n                }\n                const progressResponse = response.clone();\n                ky.#cancelResponseBody(response);\n                return streamResponse(progressResponse, ky.#options.onDownloadProgress);\n            }\n            return response;\n        };\n        const result = (async () => {\n            try {\n                return await function_();\n            }\n            catch (error) {\n                // Non-Error throws (e.g., thrown strings) pass through unchanged\n                if (!(error instanceof Error)) {\n                    throw error;\n                }\n                // Errors thrown by beforeRetry hooks must propagate unchanged.\n                if (ky.#beforeRetryHookErrors.has(error)) {\n                    throw error;\n                }\n                let processedError = error;\n                for (const hook of ky.#options.hooks.beforeError) {\n                    // `request` is the current failing request. `options` intentionally remains the\n                    // stable normalized Ky options snapshot for the same reason as `HTTPError` above.\n                    // eslint-disable-next-line no-await-in-loop\n                    const hookResult = await hook({\n                        request: ky.request,\n                        options: ky.#getNormalizedOptions(),\n                        error: processedError,\n                        retryCount: ky.#retryCount,\n                    });\n                    // Only overwrite if the hook returns a valid Error instance.\n                    if (hookResult instanceof Error) {\n                        processedError = hookResult;\n                    }\n                }\n                throw processedError;\n            }\n            finally {\n                const originalRequest = ky.#originalRequest;\n                // Ignore cancellation errors from already-locked or already-consumed streams.\n                ky.#cancelBody(originalRequest?.body ?? undefined);\n                // Only cancel the current request body if it's distinct from the original (i.e. it was cloned for retries).\n                if (ky.request !== originalRequest) {\n                    ky.#cancelBody(ky.request.body ?? undefined);\n                }\n            }\n        })();\n        for (const [type, mimeType] of Object.entries(responseTypes)) {\n            // Only expose `.bytes()` when the environment implements it.\n            if (type === 'bytes'\n                && typeof globalThis.Response?.prototype?.bytes !== 'function') {\n                continue;\n            }\n            result[type] = async (schema) => {\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                ky.request.headers.set('accept', ky.request.headers.get('accept') || mimeType);\n                const response = await result;\n                if (type !== 'json') {\n                    return response[type]();\n                }\n                const text = await response.text();\n                if (text === '') {\n                    if (schema !== undefined) {\n                        return validateJsonWithSchema(undefined, schema);\n                    }\n                    return JSON.parse(text);\n                }\n                const jsonValue = initHookOptions.parseJson\n                    ? await initHookOptions.parseJson(text, { request: ky.#getResponseRequest(response), response })\n                    : JSON.parse(text);\n                return schema === undefined ? jsonValue : validateJsonWithSchema(jsonValue, schema);\n            };\n        }\n        return result;\n    }\n    // eslint-disable-next-line unicorn/prevent-abbreviations\n    static #normalizeSearchParams(searchParams) {\n        // Filter out undefined values from plain objects\n        if (searchParams && typeof searchParams === 'object' && !Array.isArray(searchParams) && !(searchParams instanceof URLSearchParams)) {\n            return Object.fromEntries(Object.entries(searchParams).filter(([, value]) => value !== undefined));\n        }\n        return searchParams;\n    }\n    request;\n    #abortController;\n    #retryCount = 0;\n    // eslint-disable-next-line @typescript-eslint/prefer-readonly -- False positive: #input is reassigned on line 202\n    #input;\n    #options;\n    #originalRequest;\n    #userProvidedAbortSignal;\n    #beforeRetryHookErrors = new WeakSet();\n    #cachedNormalizedOptions;\n    #startTime;\n    #returnedResponseFromBeforeRetryHook = false;\n    #responseRequests = new WeakMap();\n    // eslint-disable-next-line complexity\n    constructor(input, options = {}) {\n        this.#input = input;\n        if (Object.hasOwn(options, 'prefixUrl')) {\n            throw new Error(prefixUrlRenamedErrorMessage);\n        }\n        this.#options = {\n            ...options,\n            headers: mergeHeaders(this.#input.headers, options.headers),\n            hooks: mergeHooks({}, options.hooks),\n            method: normalizeRequestMethod(options.method ?? this.#input.method ?? 'GET'),\n            // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n            prefix: String(options.prefix || ''),\n            retry: normalizeRetryOptions(options.retry),\n            throwHttpErrors: options.throwHttpErrors ?? true,\n            timeout: options.timeout ?? 10_000,\n            totalTimeout: options.totalTimeout ?? false,\n            fetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n            context: options.context ?? {},\n        };\n        if (typeof this.#input !== 'string' && !(this.#input instanceof URL || this.#input instanceof globalThis.Request)) {\n            throw new TypeError('`input` must be a string, URL, or Request');\n        }\n        if (typeof this.#input === 'string') {\n            if (this.#options.prefix) {\n                const normalizedPrefix = this.#options.prefix.replace(/\\/+$/, '');\n                const normalizedInput = this.#input.replace(/^\\/+/, '');\n                this.#input = `${normalizedPrefix}/${normalizedInput}`;\n            }\n            if (this.#options.baseUrl) {\n                let absoluteInput;\n                try {\n                    absoluteInput = new URL(this.#input);\n                }\n                catch { }\n                if (!absoluteInput) {\n                    this.#input = new URL(this.#input, (new Request(this.#options.baseUrl)).url);\n                }\n            }\n        }\n        if (supportsAbortController && supportsAbortSignal) {\n            this.#userProvidedAbortSignal = this.#options.signal ?? this.#input.signal;\n            this.#abortController = new globalThis.AbortController();\n            this.#options.signal = this.#createManagedSignal();\n        }\n        if (supportsRequestStreams) {\n            // @ts-expect-error - Types are outdated.\n            this.#options.duplex = 'half';\n        }\n        if (this.#options.json !== undefined) {\n            this.#options.body = this.#options.stringifyJson?.(this.#options.json) ?? JSON.stringify(this.#options.json);\n            this.#options.headers.set('content-type', this.#options.headers.get('content-type') ?? 'application/json');\n        }\n        // To provide correct form boundary, Content-Type header should be deleted when creating Request from another Request with FormData/URLSearchParams body\n        // Only delete if user didn't explicitly provide a custom content-type\n        const userProvidedContentType = options.headers && new globalThis.Headers(options.headers).has('content-type');\n        if (this.#input instanceof globalThis.Request\n            && ((supportsFormData && this.#options.body instanceof globalThis.FormData) || this.#options.body instanceof URLSearchParams)\n            && !userProvidedContentType) {\n            this.#options.headers.delete('content-type');\n        }\n        this.request = new globalThis.Request(this.#input, this.#options);\n        if (hasSearchParameters(this.#options.searchParams)) {\n            const url = new URL(this.request.url);\n            const deleted = this.#options.searchParams?.[deletedParametersSymbol];\n            if (deleted) {\n                // Remove keys from the input URL first so later searchParams entries can intentionally re-add them.\n                for (const key of deleted) {\n                    url.searchParams.delete(key);\n                }\n            }\n            if (typeof this.#options.searchParams === 'string') {\n                const stringSearchParameters = this.#options.searchParams.replace(/^\\?/, '');\n                if (stringSearchParameters !== '') {\n                    url.search = url.search ? `${url.search}&${stringSearchParameters}` : `?${stringSearchParameters}`;\n                }\n            }\n            else {\n                const optionsSearchParameters = new URLSearchParams(Ky.#normalizeSearchParams(this.#options.searchParams));\n                for (const [key, value] of optionsSearchParameters.entries()) {\n                    url.searchParams.append(key, value);\n                }\n            }\n            if (this.#options.searchParams\n                && typeof this.#options.searchParams === 'object'\n                && !Array.isArray(this.#options.searchParams)\n                && !(this.#options.searchParams instanceof URLSearchParams)) {\n                for (const [key, value] of Object.entries(this.#options.searchParams)) {\n                    if (value === undefined) {\n                        url.searchParams.delete(key);\n                    }\n                }\n            }\n            // Recreate request with the updated URL. We already have all options in this.#options, including duplex.\n            this.request = new globalThis.Request(url, this.#options);\n        }\n        if (this.#options.onUploadProgress && typeof this.#options.onUploadProgress !== 'function') {\n            throw new TypeError('The `onUploadProgress` option must be a function');\n        }\n        // `totalTimeout` starts when the request pipeline is created, so it also includes\n        // Ky's internal scheduling and user hook time before the first fetch attempt.\n        this.#startTime = typeof this.#options.totalTimeout === 'number' ? this.#getCurrentTime() : undefined;\n    }\n    #calculateDelay() {\n        const retryDelay = this.#options.retry.delay(this.#retryCount + 1);\n        let jitteredDelay = retryDelay;\n        if (this.#options.retry.jitter === true) {\n            jitteredDelay = Math.random() * retryDelay;\n        }\n        else if (typeof this.#options.retry.jitter === 'function') {\n            jitteredDelay = this.#options.retry.jitter(retryDelay);\n            if (!Number.isFinite(jitteredDelay) || jitteredDelay < 0) {\n                jitteredDelay = retryDelay;\n            }\n        }\n        return Math.min(this.#options.retry.backoffLimit, jitteredDelay);\n    }\n    async #calculateRetryDelay(error) {\n        if (this.#retryCount >= this.#options.retry.limit) {\n            throw error;\n        }\n        // Wrap non-Error throws to ensure consistent error handling\n        const errorObject = error instanceof Error ? error : new NonError(error);\n        // Handle forced retry from afterResponse hook - skip method check and shouldRetry\n        if (errorObject instanceof ForceRetryError) {\n            return errorObject.customDelay ?? this.#calculateDelay();\n        }\n        // Check if method is retriable for non-forced retries\n        if (!this.#options.retry.methods.includes(this.request.method.toLowerCase())) {\n            throw error;\n        }\n        // User-provided shouldRetry function takes precedence over default checks (retryOnTimeout, status codes, etc.)\n        if (this.#options.retry.shouldRetry !== undefined) {\n            const result = await this.#options.retry.shouldRetry({ error: errorObject, retryCount: this.#retryCount + 1 });\n            // Strict boolean checking - only exact true/false are handled specially\n            if (result === false) {\n                throw error;\n            }\n            if (result === true) {\n                // Force retry - skip all other validation and return delay\n                return this.#calculateDelay();\n            }\n            // If undefined or any other value, fall through to default behavior\n        }\n        // Default timeout behavior\n        if (isTimeoutError(error)) {\n            if (!this.#options.retry.retryOnTimeout) {\n                throw error;\n            }\n            return this.#calculateDelay();\n        }\n        if (isHTTPError(error)) {\n            if (!this.#options.retry.statusCodes.includes(error.response.status)) {\n                throw error;\n            }\n            const retryAfter = error.response.headers.get('Retry-After')\n                ?? error.response.headers.get('RateLimit-Reset')\n                ?? error.response.headers.get('X-RateLimit-Retry-After') // Symfony-based services\n                ?? error.response.headers.get('X-RateLimit-Reset') // GitHub\n                ?? error.response.headers.get('X-Rate-Limit-Reset'); // Twitter\n            if (retryAfter && this.#options.retry.afterStatusCodes.includes(error.response.status)) {\n                let after = Number(retryAfter) * 1000;\n                if (Number.isNaN(after)) {\n                    after = Date.parse(retryAfter) - Date.now();\n                }\n                else if (after >= Date.parse('2024-01-01')) {\n                    // A large number is treated as a timestamp (fixed threshold protects against clock skew)\n                    after -= Date.now();\n                }\n                if (!Number.isFinite(after)) {\n                    return Math.min(this.#options.retry.maxRetryAfter, this.#calculateDelay());\n                }\n                after = Math.max(0, after);\n                // Don't apply jitter when server provides explicit retry timing\n                return Math.min(this.#options.retry.maxRetryAfter, after);\n            }\n            if (error.response.status === 413) {\n                throw error;\n            }\n            return this.#calculateDelay();\n        }\n        // Only retry known retriable error types. Unknown errors (e.g., programming bugs) are not retried.\n        if (!isNetworkError(error)) {\n            throw error;\n        }\n        return this.#calculateDelay();\n    }\n    #decorateResponse(response) {\n        const request = this.#getResponseRequest(response);\n        if (this.#options.parseJson) {\n            response.json = async () => {\n                const text = await response.text();\n                if (text === '') {\n                    return JSON.parse(text);\n                }\n                return this.#options.parseJson(text, { request, response });\n            };\n        }\n        return response;\n    }\n    async #getResponseData(response) {\n        // Even with request timeouts disabled, bound error-body reads so retries and error propagation\n        // cannot be stalled indefinitely by never-ending response streams.\n        const text = await this.#readResponseText(response, this.#getErrorDataTimeout());\n        if (text === timedOutResponseData) {\n            this.#throwIfTotalTimeoutExhausted();\n            return undefined;\n        }\n        if (!text) {\n            return undefined;\n        }\n        if (!this.#isJsonContentType(response.headers.get('content-type') ?? '')) {\n            return text;\n        }\n        const data = await this.#parseJson(text, response, this.#getErrorDataTimeout(), this.#getResponseRequest(response));\n        if (data === timedOutResponseData) {\n            this.#throwIfTotalTimeoutExhausted();\n            return undefined;\n        }\n        return data;\n    }\n    #getErrorDataTimeout() {\n        const errorDataTimeout = this.#options.timeout === false ? 10_000 : this.#options.timeout;\n        const remainingTotal = this.#getRemainingTotalTimeout();\n        if (remainingTotal === undefined) {\n            return errorDataTimeout;\n        }\n        if (remainingTotal <= 0) {\n            throw new TimeoutError(this.request);\n        }\n        return Math.min(errorDataTimeout, remainingTotal);\n    }\n    #isJsonContentType(contentType) {\n        // Match JSON subtypes like `json`, `problem+json`, and `vnd.api+json`.\n        const mimeType = (contentType.split(';', 1)[0] ?? '').trim().toLowerCase();\n        return /\\/(?:.*[.+-])?json$/.test(mimeType);\n    }\n    async #readResponseText(response, timeoutMs) {\n        const { body } = response;\n        if (!body) {\n            try {\n                return await response.text();\n            }\n            catch {\n                return undefined;\n            }\n        }\n        let reader;\n        try {\n            reader = body.getReader();\n        }\n        catch {\n            // Another consumer already locked the stream.\n            return undefined;\n        }\n        const decoder = createTextDecoder(response.headers.get('content-type') ?? '');\n        const chunks = [];\n        let totalBytes = 0;\n        const readAll = (async () => {\n            try {\n                for (;;) {\n                    // eslint-disable-next-line no-await-in-loop\n                    const { done, value } = await reader.read();\n                    if (done) {\n                        break;\n                    }\n                    totalBytes += value.byteLength;\n                    if (totalBytes > maxErrorResponseBodySize) {\n                        void reader.cancel().catch(() => undefined);\n                        return undefined;\n                    }\n                    chunks.push(decoder.decode(value, { stream: true }));\n                }\n            }\n            catch {\n                return undefined;\n            }\n            chunks.push(decoder.decode());\n            return chunks.join('');\n        })();\n        const timeoutPromise = new Promise(resolve => {\n            const timeoutId = setTimeout(() => {\n                resolve(timedOutResponseData);\n            }, timeoutMs);\n            void readAll.finally(() => {\n                clearTimeout(timeoutId);\n            });\n        });\n        const result = await Promise.race([readAll, timeoutPromise]);\n        if (result === timedOutResponseData) {\n            void reader.cancel().catch(() => undefined);\n        }\n        return result;\n    }\n    async #parseJson(text, response, timeoutMs, request) {\n        let timeoutId;\n        try {\n            return await Promise.race([\n                Promise.resolve().then(() => this.#options.parseJson\n                    ? this.#options.parseJson(text, { request, response })\n                    : JSON.parse(text)),\n                new Promise(resolve => {\n                    timeoutId = setTimeout(() => {\n                        resolve(timedOutResponseData);\n                    }, timeoutMs);\n                }),\n            ]);\n        }\n        catch {\n            return undefined;\n        }\n        finally {\n            clearTimeout(timeoutId);\n        }\n    }\n    #cancelBody(body) {\n        if (!body) {\n            return;\n        }\n        // Ignore cancellation failures from already-locked or already-consumed streams.\n        void body.cancel().catch(() => undefined);\n    }\n    #cancelResponseBody(response) {\n        // Ignore cancellation failures from already-locked or already-consumed streams.\n        this.#cancelBody(response.body ?? undefined);\n    }\n    #createManagedSignal() {\n        return this.#userProvidedAbortSignal\n            ? AbortSignal.any([this.#userProvidedAbortSignal, this.#abortController.signal])\n            : this.#abortController.signal;\n    }\n    #throwIfTotalTimeoutExhausted() {\n        const remaining = this.#getRemainingTotalTimeout();\n        if (remaining !== undefined && remaining <= 0) {\n            throw new TimeoutError(this.request);\n        }\n    }\n    async #runBeforeRequestHooks() {\n        for (const hook of this.#options.hooks.beforeRequest) {\n            // eslint-disable-next-line no-await-in-loop\n            const result = await hook({\n                request: this.request,\n                options: this.#getNormalizedOptions(),\n                retryCount: 0,\n            });\n            if (isRequestInstance(result)) {\n                this.#assignRequest(result);\n            }\n            else if (isResponseInstance(result)) {\n                return result;\n            }\n        }\n        return undefined;\n    }\n    async #runAfterResponseHooks(response) {\n        const responseRequest = this.#getResponseRequest(response);\n        for (const hook of this.#options.hooks.afterResponse) {\n            const hookResponse = this.#setResponseRequest(response.clone(), responseRequest);\n            this.#decorateResponse(hookResponse);\n            let modifiedResponse;\n            try {\n                // eslint-disable-next-line no-await-in-loop\n                modifiedResponse = await hook({\n                    request: this.request,\n                    options: this.#getNormalizedOptions(),\n                    response: hookResponse,\n                    retryCount: this.#retryCount,\n                });\n            }\n            catch (error) {\n                // Cancel both responses to prevent memory leaks when hook throws\n                if (hookResponse !== response) {\n                    this.#cancelResponseBody(hookResponse);\n                }\n                this.#cancelResponseBody(response);\n                throw error;\n            }\n            if (modifiedResponse instanceof RetryMarker) {\n                // Cancel both the cloned response passed to the hook and the current response to prevent resource leaks (especially important in Deno/Bun).\n                // Do not await cancellation since hooks can clone the response, leaving extra tee branches that keep cancel promises pending per the Streams spec.\n                if (hookResponse !== response) {\n                    this.#cancelResponseBody(hookResponse);\n                }\n                this.#cancelResponseBody(response);\n                throw new ForceRetryError(modifiedResponse.options);\n            }\n            const nextResponse = isResponseInstance(modifiedResponse)\n                ? this.#setResponseRequest(modifiedResponse, responseRequest)\n                : response;\n            // Cancel any response bodies we won't use to prevent memory leaks.\n            // Uses fire-and-forget since hooks may have cloned the response, creating tee branches that block cancellation.\n            // If the hook wrapped an existing body into a new Response, both Response objects can still point at the same stream.\n            if (hookResponse !== response && hookResponse !== nextResponse && hookResponse.body !== nextResponse.body) {\n                this.#cancelResponseBody(hookResponse);\n            }\n            if (response !== nextResponse && response.body !== nextResponse.body) {\n                this.#cancelResponseBody(response);\n            }\n            response = nextResponse;\n        }\n        return response;\n    }\n    async #retry(function_) {\n        try {\n            return await function_();\n        }\n        catch (error) {\n            return this.#retryFromError(error, function_);\n        }\n    }\n    async #retryFromError(error, function_) {\n        this.#returnedResponseFromBeforeRetryHook = false;\n        const retryDelay = Math.min(await this.#calculateRetryDelay(error), maxSafeTimeout);\n        const delayOptions = { signal: this.#userProvidedAbortSignal };\n        const remainingTimeout = this.#getRemainingTotalTimeout();\n        if (remainingTimeout !== undefined) {\n            if (remainingTimeout <= 0) {\n                throw new TimeoutError(this.request);\n            }\n            // If waiting would consume all remaining budget, time out without starting another request.\n            if (retryDelay >= remainingTimeout) {\n                await delay(remainingTimeout, delayOptions);\n                throw new TimeoutError(this.request);\n            }\n        }\n        // Only use user-provided signal for delay, not our internal abortController\n        await delay(retryDelay, delayOptions);\n        this.#throwIfTotalTimeoutExhausted();\n        // Apply custom request from forced retry before beforeRetry hooks\n        // Ensure the custom request has the correct managed signal for timeouts and user aborts\n        if (error instanceof ForceRetryError && error.customRequest) {\n            const customRequest = new globalThis.Request(error.customRequest, this.#options.signal ? { signal: this.#options.signal } : undefined);\n            // Replacement Requests are authoritative by design. Do not rewrite headers here,\n            // even for cross-origin retries. Callers using `ky.retry({request})` explicitly\n            // opted into the exact Request they constructed.\n            this.#assignRequest(customRequest);\n        }\n        for (const hook of this.#options.hooks.beforeRetry) {\n            let hookResult;\n            try {\n                // eslint-disable-next-line no-await-in-loop\n                hookResult = await hook({\n                    request: this.request,\n                    options: this.#getNormalizedOptions(),\n                    error: error,\n                    retryCount: this.#retryCount + 1,\n                });\n            }\n            catch (hookError) {\n                // Preserve the original request error path (`throw error`) so beforeError hooks can still run.\n                if (hookError instanceof Error && hookError !== error) {\n                    this.#beforeRetryHookErrors.add(hookError);\n                }\n                throw hookError;\n            }\n            if (isRequestInstance(hookResult)) {\n                // Same contract as `ky.retry({request})`: a Request returned from `beforeRetry`\n                // is used as-is rather than being sanitized or otherwise rewritten by Ky.\n                this.#assignRequest(hookResult);\n                break;\n            }\n            if (isResponseInstance(hookResult)) {\n                this.#returnedResponseFromBeforeRetryHook = true;\n                this.#retryCount++;\n                return hookResult;\n            }\n            // If `stop` is returned from the hook, the retry process is stopped\n            if (hookResult === stop) {\n                return;\n            }\n        }\n        this.#throwIfTotalTimeoutExhausted();\n        this.#retryCount++;\n        return this.#retry(function_);\n    }\n    #consumeReturnedResponseFromBeforeRetryHook() {\n        const value = this.#returnedResponseFromBeforeRetryHook;\n        this.#returnedResponseFromBeforeRetryHook = false;\n        return value;\n    }\n    async #fetch() {\n        // Reset abortController if it was aborted (happens on timeout retry)\n        if (this.#abortController?.signal.aborted) {\n            this.#abortController = new globalThis.AbortController();\n            this.#options.signal = this.#createManagedSignal();\n            // Recreate request with new signal\n            this.request = new globalThis.Request(this.request, { signal: this.#options.signal });\n        }\n        const nonRequestOptions = findUnknownOptions(this.#options);\n        const retryRequest = this.#options.retry.limit > 0 ? this.request.clone() : undefined;\n        const request = this.#wrapRequestWithUploadProgress(this.request, this.#options.body ?? undefined);\n        // Cloning is done here to prepare in advance for retries.\n        // Skip cloning when retries are disabled - cloning a streaming body calls ReadableStream#tee()\n        // which buffers the entire stream in memory, causing excessive memory usage for large uploads.\n        this.#originalRequest = request;\n        if (retryRequest) {\n            this.request = retryRequest;\n        }\n        try {\n            const remainingTotal = this.#getRemainingTotalTimeout();\n            if (remainingTotal !== undefined && remainingTotal <= 0) {\n                throw new TimeoutError(this.request);\n            }\n            const effectiveTimeout = this.#options.timeout === false\n                ? remainingTotal\n                : (remainingTotal === undefined\n                    ? this.#options.timeout\n                    : Math.min(this.#options.timeout, remainingTotal));\n            const response = effectiveTimeout === undefined\n                ? await this.#options.fetch(request, nonRequestOptions)\n                : await timeout(request, nonRequestOptions, this.#abortController, {\n                    timeout: effectiveTimeout,\n                    fetch: this.#options.fetch,\n                });\n            return this.#setResponseRequest(response, request);\n        }\n        catch (error) {\n            if (isRawNetworkError(error)) {\n                throw new NetworkError(this.request, { cause: error });\n            }\n            throw error;\n        }\n    }\n    #getRemainingTotalTimeout() {\n        if (this.#startTime === undefined) {\n            return undefined;\n        }\n        const elapsed = this.#getCurrentTime() - this.#startTime;\n        return Math.max(0, this.#options.totalTimeout - elapsed);\n    }\n    #getCurrentTime() {\n        return globalThis.performance?.now() ?? Date.now();\n    }\n    #getNormalizedOptions() {\n        if (!this.#cachedNormalizedOptions) {\n            // Exclude Ky-specific options that are not part of `RequestInit`.\n            const { hooks, json, parseJson, stringifyJson, searchParams, timeout, totalTimeout, throwHttpErrors, fetch, ...normalizedOptions } = this.#options;\n            this.#cachedNormalizedOptions = Object.freeze(normalizedOptions);\n        }\n        return this.#cachedNormalizedOptions;\n    }\n    #assignRequest(request) {\n        this.#cachedNormalizedOptions = undefined;\n        this.request = request;\n    }\n    #getResponseRequest(response) {\n        return this.#responseRequests.get(response) ?? this.request;\n    }\n    #setResponseRequest(response, request) {\n        this.#responseRequests.set(response, request);\n        return response;\n    }\n    #wrapRequestWithUploadProgress(request, originalBody) {\n        if (!this.#options.onUploadProgress || !request.body || !supportsRequestStreams) {\n            return request;\n        }\n        return streamRequest(request, this.#options.onUploadProgress, originalBody ?? this.#options.body ?? undefined);\n    }\n}\n//# sourceMappingURL=Ky.js.map","/*! MIT License © Sindre Sorhus */\nimport { Ky } from './core/Ky.js';\nimport { requestMethods, stop, retry } from './core/constants.js';\nimport { validateAndMerge } from './utils/merge.js';\nconst createInstance = (defaults) => {\n    // eslint-disable-next-line @typescript-eslint/promise-function-async\n    const ky = (input, options) => Ky.create(input, validateAndMerge(defaults, options));\n    for (const method of requestMethods) {\n        // eslint-disable-next-line @typescript-eslint/promise-function-async\n        ky[method] = (input, options) => Ky.create(input, validateAndMerge(defaults, options, { method }));\n    }\n    ky.create = (newDefaults) => createInstance(validateAndMerge(newDefaults));\n    ky.extend = (newDefaults) => {\n        if (typeof newDefaults === 'function') {\n            newDefaults = newDefaults(defaults ?? {});\n        }\n        return createInstance(validateAndMerge(defaults, newDefaults));\n    };\n    ky.stop = stop;\n    ky.retry = retry;\n    return ky;\n};\nconst ky = createInstance();\nexport default ky;\nexport { KyError } from './errors/KyError.js';\nexport { HTTPError } from './errors/HTTPError.js';\nexport { SchemaValidationError } from './errors/SchemaValidationError.js';\nexport { NetworkError } from './errors/NetworkError.js';\nexport { TimeoutError } from './errors/TimeoutError.js';\nexport { ForceRetryError } from './errors/ForceRetryError.js';\nexport { isKyError, isHTTPError, isNetworkError, isTimeoutError, isForceRetryError, } from './utils/type-guards.js';\nexport { replaceOption } from './utils/merge.js';\n// Intentionally not exporting this for now as it's just an implementation detail and we don't want to commit to a certain API yet at least.\n// export {NonError} from './errors/NonError.js';\n//# sourceMappingURL=index.js.map","import ky, { isHTTPError } from \"ky\";\nimport { ACTIVE_ORG_HEADER, AgentSessionDetailResponseSchema, AgentSessionListResponseSchema, AssignCredentialBodySchema, ConnectAuthorizeUrlResponseSchema, ConnectProvidersResponseSchema, CreateCredentialInstanceBodySchema, CredentialAssignmentListQuerySchema, CredentialAssignmentListResponseSchema, CredentialAssignmentRecordSchema, CredentialConsumerListQuerySchema, CredentialConsumerListResponseSchema, CredentialInstanceListResponseSchema, CredentialInstanceRecordSchema, HealthResponseSchema, PollRunResponseSchema, PromptInputSchema, PromptResponseSchema, QueuedAgentPromptResponseSchema, QueuedRunResponseSchema, SkipResponseSchema, TriggerDetailResponseSchema, TriggerListResponseSchema, TriggerRunDetailResponseSchema, TriggerRunListResponseSchema, UpdateCredentialInstanceBodySchema, WorkflowRunDetailResponseSchema, WorkflowRunHooksResponseSchema, WorkflowRunListResponseSchema, parseErrorResponse } from \"@keystrokehq/shared\";\n//#region src/auth.ts\nfunction normalizeBaseUrl(baseUrl) {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\nfunction applyActiveOrganizationHeader(request, organizationId) {\n\tif (organizationId) request.headers.set(ACTIVE_ORG_HEADER, organizationId);\n}\nfunction applyAuthHeaders(request, auth, getToken) {\n\tif (!auth || auth.type === \"none\") return;\n\tif (auth.type === \"apiKey\") {\n\t\tconst key = auth.getKey();\n\t\tif (key) request.headers.set(\"x-api-key\", key);\n\t\treturn;\n\t}\n\tif (auth.type === \"bearer\") {\n\t\tconst tokenPromise = getToken?.() ?? auth.getToken();\n\t\treturn Promise.resolve(tokenPromise).then((token) => {\n\t\t\tif (token) request.headers.set(\"Authorization\", `Bearer ${token}`);\n\t\t});\n\t}\n}\n//#endregion\n//#region src/errors.ts\nvar KeystrokeError = class extends Error {\n\tstatus;\n\tbody;\n\tconstructor(message, status, body) {\n\t\tsuper(message);\n\t\tthis.name = \"KeystrokeError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n};\nasync function toKeystrokeError(error) {\n\tif (!isHTTPError(error)) return new KeystrokeError(error instanceof Error ? error.message : \"Request failed\", 0, null);\n\tconst status = error.response.status;\n\tconst body = error.data ?? null;\n\tconst parsed = parseErrorResponse(body);\n\treturn new KeystrokeError(parsed ? parsed.message ?? parsed.error : `Request failed with status ${status}`, status, body);\n}\n//#endregion\n//#region src/resources/shared.ts\nasync function readJson(response) {\n\treturn response.json();\n}\n//#endregion\n//#region src/resources/agents.ts\nfunction isQueuedAgentPromptResponse(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (\"messages\" in value) return false;\n\treturn QueuedAgentPromptResponseSchema.safeParse(value).success;\n}\nfunction listSessionsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.status) params.status = query.status;\n\tif (query.source) params.source = query.source;\n\treturn params;\n}\nfunction detailSearchParams$2(query) {\n\tif (!query?.include) return {};\n\treturn { include: query.include };\n}\nfunction createAgentsResource(http) {\n\treturn {\n\t\tasync prompt(id, input) {\n\t\t\tconst body = PromptInputSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`agents/${id}`, { json: body });\n\t\t\t\tconst data = await readJson(response);\n\t\t\t\tif (response.status === 202) return QueuedAgentPromptResponseSchema.parse(data);\n\t\t\t\treturn PromptResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listSessions(agentId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`agents/${agentId}/sessions`, { searchParams: listSessionsSearchParams(query) }).json();\n\t\t\t\treturn AgentSessionListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getSession(agentId, sessionId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`agents/${agentId}/sessions/${sessionId}`, { searchParams: detailSearchParams$2(query) }).json();\n\t\t\t\treturn AgentSessionDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/connect.ts\nfunction routeFromPath(path) {\n\treturn path.replace(/^\\//, \"\");\n}\nfunction createConnectResource(http) {\n\treturn {\n\t\tasync listProviders() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"connect/providers\").json();\n\t\t\t\treturn ConnectProvidersResponseSchema.parse(data).providers;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getAuthorizeUrl(path) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(routeFromPath(path)).json();\n\t\t\t\treturn ConnectAuthorizeUrlResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/credentials.ts\nfunction createCredentialsResource(http) {\n\treturn {\n\t\tasync listInstances(options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = options?.key ? { key: options.key } : void 0;\n\t\t\t\tconst data = await http.get(\"credentials/instances\", { searchParams }).json();\n\t\t\t\treturn CredentialInstanceListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync createInstance(body) {\n\t\t\ttry {\n\t\t\t\tconst payload = CreateCredentialInstanceBodySchema.parse(body);\n\t\t\t\tconst data = await http.post(\"credentials/instances\", { json: payload }).json();\n\t\t\t\treturn CredentialInstanceRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateInstance(id, body) {\n\t\t\ttry {\n\t\t\t\tconst payload = UpdateCredentialInstanceBodySchema.parse(body);\n\t\t\t\tconst data = await http.put(`credentials/instances/${id}`, { json: payload }).json();\n\t\t\t\treturn CredentialInstanceRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync deleteInstance(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`credentials/instances/${id}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listAssignments(query) {\n\t\t\ttry {\n\t\t\t\tconst params = CredentialAssignmentListQuerySchema.parse(query);\n\t\t\t\tconst data = await http.get(\"credentials/assignments\", { searchParams: params }).json();\n\t\t\t\treturn CredentialAssignmentListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync assignCredential(body) {\n\t\t\ttry {\n\t\t\t\tconst payload = AssignCredentialBodySchema.parse(body);\n\t\t\t\tconst data = await http.put(\"credentials/assignments\", { json: payload }).json();\n\t\t\t\treturn CredentialAssignmentRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync unassignCredential(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`credentials/assignments/${id}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listConsumers(query) {\n\t\t\ttry {\n\t\t\t\tconst params = CredentialConsumerListQuerySchema.parse(query);\n\t\t\t\tconst data = await http.get(\"credentials/consumers\", { searchParams: params }).json();\n\t\t\t\treturn CredentialConsumerListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/health.ts\nfunction createHealthResource(http) {\n\treturn { async check() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"health\").json();\n\t\t\treturn HealthResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toKeystrokeError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/resources/openapi.ts\nfunction createOpenApiResource(http) {\n\treturn { async fetch() {\n\t\ttry {\n\t\t\treturn await http.get(\"openapi.json\").json();\n\t\t} catch (error) {\n\t\t\tthrow await toKeystrokeError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/resources/triggers.ts\nfunction pollRunBody(options) {\n\tif (!options?.workflows?.length && !options?.attachments?.length) return;\n\treturn {\n\t\t...options.workflows?.length ? { workflows: options.workflows } : {},\n\t\t...options.attachments?.length ? { attachments: options.attachments } : {}\n\t};\n}\nfunction listRunsSearchParams$1(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.triggerType) params.triggerType = query.triggerType;\n\treturn params;\n}\nfunction detailSearchParams$1(query) {\n\tif (!query?.include) return {};\n\treturn { include: query.include };\n}\nfunction createTriggersResource(http) {\n\treturn {\n\t\tasync list(query) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = query?.endpoint ? { endpoint: query.endpoint } : void 0;\n\t\t\t\tconst data = await http.get(\"triggers\", { searchParams }).json();\n\t\t\t\treturn TriggerListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(id) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`triggers/${id}`).json();\n\t\t\t\tconst list = TriggerListResponseSchema.safeParse(data);\n\t\t\t\tif (list.success) return list.data;\n\t\t\t\treturn TriggerDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync webhookUrl(id) {\n\t\t\tconst result = await this.get(id);\n\t\t\tconst webhookUrl = \"triggers\" in result ? result.triggers.find((entry) => entry.webhookUrl)?.webhookUrl : result.webhookUrl;\n\t\t\tif (!webhookUrl) throw new KeystrokeError(`Webhook URL not found: ${id}`, 404, { error: \"Not found\" });\n\t\t\treturn webhookUrl;\n\t\t},\n\t\tasync webhook(endpoint, body = {}, options = {}) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = options.token ? { token: options.token } : void 0;\n\t\t\t\tconst normalized = endpoint.replace(/^\\/+|\\/+$/g, \"\").replace(/^triggers\\/?/, \"\");\n\t\t\t\treturn await http.post(`triggers/${normalized}`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\tsearchParams\n\t\t\t\t}).json();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync poll(id, options = {}) {\n\t\t\ttry {\n\t\t\t\tconst { group, ...target } = options;\n\t\t\t\tconst json = pollRunBody(target);\n\t\t\t\tconst path = group ? `triggers/polls/${id}/run` : `triggers/${id}/poll`;\n\t\t\t\tconst data = await readJson(await http.post(path, json ? { json } : void 0));\n\t\t\t\tPollRunResponseSchema.parse(data);\n\t\t\t\treturn data;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync runPollGroup(pollId, options = {}) {\n\t\t\treturn this.poll(pollId, {\n\t\t\t\t...options,\n\t\t\t\tgroup: true\n\t\t\t});\n\t\t},\n\t\tasync listRuns(attachmentId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`triggers/${attachmentId}/runs`, { searchParams: listRunsSearchParams$1(query) }).json();\n\t\t\t\treturn TriggerRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRun(attachmentId, runId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`triggers/${attachmentId}/runs/${runId}`, { searchParams: detailSearchParams$1(query) }).json();\n\t\t\t\treturn TriggerRunDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\nfunction isSkippedTriggerResponse(value) {\n\treturn SkipResponseSchema.safeParse(value).success;\n}\n//#endregion\n//#region src/resources/workflows.ts\nfunction isQueuedRunResponse(value) {\n\treturn QueuedRunResponseSchema.safeParse(value).success;\n}\nfunction listRunsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.status) params.status = query.status;\n\tif (query.trigger) params.trigger = query.trigger;\n\treturn params;\n}\nfunction detailSearchParams(query) {\n\tif (!query?.include) return {};\n\treturn { include: query.include };\n}\nfunction createWorkflowsResource(http) {\n\treturn {\n\t\tasync run(id, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`workflows/${id}`, { json: input });\n\t\t\t\tconst data = await readJson(response);\n\t\t\t\tif (response.status === 202) return QueuedRunResponseSchema.parse(data);\n\t\t\t\treturn data;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listRuns(workflowId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs`, { searchParams: listRunsSearchParams(query) }).json();\n\t\t\t\treturn WorkflowRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRun(workflowId, runId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs/${runId}`, { searchParams: detailSearchParams(query) }).json();\n\t\t\t\treturn WorkflowRunDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listHooks(workflowId, runId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs/${runId}/hooks`).json();\n\t\t\t\treturn WorkflowRunHooksResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/index.ts\nfunction createKeystrokeClient(options) {\n\tconst auth = options.auth ?? { type: \"none\" };\n\tconst base = normalizeBaseUrl(options.baseUrl);\n\tconst getActiveOrganizationId = options.getActiveOrganizationId;\n\tconst http = ky.create({\n\t\tprefix: base === \"\" ? void 0 : `${base}/`,\n\t\tcredentials: \"omit\",\n\t\thooks: { beforeRequest: [({ request }) => {\n\t\t\tapplyActiveOrganizationHeader(request, getActiveOrganizationId?.());\n\t\t\treturn applyAuthHeaders(request, auth);\n\t\t}] },\n\t\t...options.ky\n\t});\n\treturn {\n\t\thttp,\n\t\thealth: createHealthResource(http),\n\t\tconnect: createConnectResource(http),\n\t\tcredentials: createCredentialsResource(http),\n\t\topenapi: createOpenApiResource(http),\n\t\tagents: createAgentsResource(http),\n\t\tworkflows: createWorkflowsResource(http),\n\t\ttriggers: createTriggersResource(http)\n\t};\n}\n//#endregion\nexport { KeystrokeError, createKeystrokeClient, isQueuedAgentPromptResponse, isQueuedRunResponse, isSkippedTriggerResponse, toKeystrokeError };\n\n//# sourceMappingURL=index.mjs.map","import { Entry } from \"@napi-rs/keyring\";\n\nconst SERVICE = \"keystroke\";\n\nfunction accountForWebUrl(webUrl: string): string {\n  return new URL(webUrl).hostname;\n}\n\nexport function getAccessToken(webUrl: string): string | undefined {\n  const entry = new Entry(SERVICE, accountForWebUrl(webUrl));\n  const password = entry.getPassword();\n  return password === null ? undefined : password;\n}\n\nexport function setAccessToken(webUrl: string, token: string): void {\n  const entry = new Entry(SERVICE, accountForWebUrl(webUrl));\n  entry.setPassword(token);\n}\n\nexport function clearAccessToken(webUrl: string): void {\n  const entry = new Entry(SERVICE, accountForWebUrl(webUrl));\n  entry.deletePassword();\n}\n","import { createRemoteJWKSet, jwtVerify } from \"jose\";\n//#region src/constants.ts\n/** OAuth device-flow client id for `keystroke auth login`. */\nconst CLI_CLIENT_ID = \"keystroke-cli\";\n//#endregion\n//#region src/jwt.ts\nconst jwksCache = /* @__PURE__ */ new Map();\nfunction getRemoteJwks(jwksUrl) {\n\tconst cached = jwksCache.get(jwksUrl);\n\tif (cached) return cached;\n\tconst jwks = createRemoteJWKSet(new URL(jwksUrl));\n\tjwksCache.set(jwksUrl, jwks);\n\treturn jwks;\n}\nfunction payloadToUser(payload) {\n\tconst id = typeof payload.id === \"string\" ? payload.id : payload.sub;\n\tconst email = typeof payload.email === \"string\" ? payload.email : void 0;\n\tconst name = typeof payload.name === \"string\" && payload.name.length > 0 ? payload.name : email?.split(\"@\")[0];\n\tif (!id || !email || !name) return null;\n\treturn {\n\t\tid,\n\t\temail,\n\t\tname,\n\t\timage: typeof payload.image === \"string\" ? payload.image : null,\n\t\temailVerified: typeof payload.emailVerified === \"boolean\" ? payload.emailVerified : void 0\n\t};\n}\nfunction createJwtVerifier(options) {\n\tconst audience = options.audience ?? options.issuer;\n\tlet jwks;\n\treturn { verify: async (token) => {\n\t\ttry {\n\t\t\tjwks ??= getRemoteJwks(options.jwksUrl);\n\t\t\tconst { payload } = await jwtVerify(token, jwks, {\n\t\t\t\tissuer: options.issuer,\n\t\t\t\taudience\n\t\t\t});\n\t\t\treturn payloadToUser(payload);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t} };\n}\nfunction extractBearerToken(headers) {\n\tconst authorization = headers.get(\"authorization\");\n\tif (!authorization?.startsWith(\"Bearer \")) return null;\n\tconst token = authorization.slice(7).trim();\n\treturn token.length > 0 ? token : null;\n}\nfunction looksLikeJwt(token) {\n\treturn token.split(\".\").length === 3;\n}\nfunction userFromJwt(jwtUser) {\n\treturn {\n\t\tid: jwtUser.id,\n\t\temail: jwtUser.email,\n\t\tname: jwtUser.name,\n\t\timage: jwtUser.image ?? null,\n\t\temailVerified: jwtUser.emailVerified ?? true,\n\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t};\n}\nfunction sessionFromJwt(jwtUser, token) {\n\treturn {\n\t\tid: jwtUser.id,\n\t\tuserId: jwtUser.id,\n\t\ttoken,\n\t\texpiresAt: new Date(Date.now() + 900 * 1e3),\n\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\tupdatedAt: /* @__PURE__ */ new Date()\n\t};\n}\nasync function resolveRequestAuth(jwtVerifier, headers) {\n\tconst bearerToken = extractBearerToken(headers);\n\tif (!bearerToken || !jwtVerifier || !looksLikeJwt(bearerToken)) return null;\n\tconst jwtUser = await jwtVerifier.verify(bearerToken);\n\tif (!jwtUser) return null;\n\treturn {\n\t\tuser: userFromJwt(jwtUser),\n\t\tsession: sessionFromJwt(jwtUser, bearerToken)\n\t};\n}\n/** Auth API origin for JWT verification — platform URL when auth is mounted there. */\nfunction resolveAuthApiBaseUrl() {\n\treturn (process.env.PUBLIC_PLATFORM_URL ?? process.env.PUBLIC_WEB_URL ?? \"\").replace(/\\/+$/, \"\");\n}\nfunction createDefaultAuthJwtVerifier() {\n\treturn createAuthJwtVerifier(resolveAuthApiBaseUrl());\n}\nfunction createAuthJwtVerifier(authBaseUrl) {\n\tconst normalizedBaseUrl = authBaseUrl.replace(/\\/+$/, \"\");\n\tif (!normalizedBaseUrl) return;\n\treturn createJwtVerifier({\n\t\tissuer: normalizedBaseUrl,\n\t\taudience: normalizedBaseUrl,\n\t\tjwksUrl: `${normalizedBaseUrl}/api/auth/jwks`\n\t});\n}\nasync function fetchJwtWithSession(authBaseUrl, sessionCredential) {\n\tconst headers = new Headers();\n\tif (sessionCredential.cookie) headers.set(\"cookie\", sessionCredential.cookie);\n\tif (sessionCredential.bearerToken) headers.set(\"authorization\", `Bearer ${sessionCredential.bearerToken}`);\n\tconst normalizedBaseUrl = authBaseUrl.replace(/\\/+$/, \"\");\n\tconst response = await fetch(`${normalizedBaseUrl}/api/auth/token`, { headers });\n\tif (!response.ok) return null;\n\tconst body = await response.json();\n\treturn typeof body.token === \"string\" ? body.token : null;\n}\n//#endregion\nexport { fetchJwtWithSession as a, CLI_CLIENT_ID as c, extractBearerToken as i, createDefaultAuthJwtVerifier as n, resolveAuthApiBaseUrl as o, createJwtVerifier as r, resolveRequestAuth as s, createAuthJwtVerifier as t };\n\n//# sourceMappingURL=jwt-BVJ7dVm9.mjs.map","//#region src/jwt-cache.ts\nconst REFRESH_BUFFER_MS = 6e4;\nconst FALLBACK_TTL_MS = 840 * 1e3;\nfunction decodeBase64Url(value) {\n\tconst base64 = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\tconst padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, \"=\");\n\treturn atob(padded);\n}\nfunction decodeJwtExpiryMs(token) {\n\tconst parts = token.split(\".\");\n\tif (parts.length !== 3) return null;\n\ttry {\n\t\tconst payload = JSON.parse(decodeBase64Url(parts[1] ?? \"\"));\n\t\treturn typeof payload.exp === \"number\" ? payload.exp * 1e3 : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Caches JWTs minted by `mint`, refreshing shortly before expiry and deduping concurrent mints. */\nfunction createJwtTokenCache(mint) {\n\tlet cached = null;\n\tlet pending = null;\n\treturn {\n\t\tget: async (force = false) => {\n\t\t\tif (!force && cached && cached.expiresAtMs - Date.now() > REFRESH_BUFFER_MS) return cached.token;\n\t\t\tif (pending) return pending;\n\t\t\tpending = (async () => {\n\t\t\t\tconst token = await mint();\n\t\t\t\tif (!token) {\n\t\t\t\t\tcached = null;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcached = {\n\t\t\t\t\ttoken,\n\t\t\t\t\texpiresAtMs: decodeJwtExpiryMs(token) ?? Date.now() + FALLBACK_TTL_MS\n\t\t\t\t};\n\t\t\t\treturn token;\n\t\t\t})();\n\t\t\ttry {\n\t\t\t\treturn await pending;\n\t\t\t} finally {\n\t\t\t\tpending = null;\n\t\t\t}\n\t\t},\n\t\tclear: () => {\n\t\t\tcached = null;\n\t\t}\n\t};\n}\n//#endregion\nexport { decodeJwtExpiryMs as n, createJwtTokenCache as t };\n\n//# sourceMappingURL=jwt-cache-4YqHn3jM.mjs.map","//#region package.json\nvar version = \"1.6.11\";\n//#endregion\nexport { version };\n","import { version } from \"./package.mjs\";\n//#region src/version.ts\nconst PACKAGE_VERSION = version;\n//#endregion\nexport { PACKAGE_VERSION };\n","//#region src/error.ts\nfunction isErrorStackTraceLimitWritable() {\n\tconst desc = Object.getOwnPropertyDescriptor(Error, \"stackTraceLimit\");\n\tif (desc === void 0) return Object.isExtensible(Error);\n\treturn Object.prototype.hasOwnProperty.call(desc, \"writable\") ? desc.writable : desc.set !== void 0;\n}\n/**\n* Hide internal stack frames from the error stack trace.\n*/\nfunction hideInternalStackFrames(stack) {\n\tconst lines = stack.split(\"\\n    at \");\n\tif (lines.length <= 1) return stack;\n\tlines.splice(1, 1);\n\treturn lines.join(\"\\n    at \");\n}\n/**\n* Creates a custom error class that hides stack frames.\n*/\nfunction makeErrorForHideStackFrame(Base, clazz) {\n\tclass HideStackFramesError extends Base {\n\t\t#hiddenStack;\n\t\tconstructor(...args) {\n\t\t\tif (isErrorStackTraceLimitWritable()) {\n\t\t\t\tconst limit = Error.stackTraceLimit;\n\t\t\t\tError.stackTraceLimit = 0;\n\t\t\t\tsuper(...args);\n\t\t\t\tError.stackTraceLimit = limit;\n\t\t\t} else super(...args);\n\t\t\tconst stack = (/* @__PURE__ */ new Error()).stack;\n\t\t\tif (stack) this.#hiddenStack = hideInternalStackFrames(stack.replace(/^Error/, this.name));\n\t\t}\n\t\tget errorStack() {\n\t\t\treturn this.#hiddenStack;\n\t\t}\n\t}\n\tObject.defineProperty(HideStackFramesError.prototype, \"constructor\", {\n\t\tget() {\n\t\t\treturn clazz;\n\t\t},\n\t\tenumerable: false,\n\t\tconfigurable: true\n\t});\n\treturn HideStackFramesError;\n}\nconst statusCodes = {\n\tOK: 200,\n\tCREATED: 201,\n\tACCEPTED: 202,\n\tNO_CONTENT: 204,\n\tMULTIPLE_CHOICES: 300,\n\tMOVED_PERMANENTLY: 301,\n\tFOUND: 302,\n\tSEE_OTHER: 303,\n\tNOT_MODIFIED: 304,\n\tTEMPORARY_REDIRECT: 307,\n\tBAD_REQUEST: 400,\n\tUNAUTHORIZED: 401,\n\tPAYMENT_REQUIRED: 402,\n\tFORBIDDEN: 403,\n\tNOT_FOUND: 404,\n\tMETHOD_NOT_ALLOWED: 405,\n\tNOT_ACCEPTABLE: 406,\n\tPROXY_AUTHENTICATION_REQUIRED: 407,\n\tREQUEST_TIMEOUT: 408,\n\tCONFLICT: 409,\n\tGONE: 410,\n\tLENGTH_REQUIRED: 411,\n\tPRECONDITION_FAILED: 412,\n\tPAYLOAD_TOO_LARGE: 413,\n\tURI_TOO_LONG: 414,\n\tUNSUPPORTED_MEDIA_TYPE: 415,\n\tRANGE_NOT_SATISFIABLE: 416,\n\tEXPECTATION_FAILED: 417,\n\t\"I'M_A_TEAPOT\": 418,\n\tMISDIRECTED_REQUEST: 421,\n\tUNPROCESSABLE_ENTITY: 422,\n\tLOCKED: 423,\n\tFAILED_DEPENDENCY: 424,\n\tTOO_EARLY: 425,\n\tUPGRADE_REQUIRED: 426,\n\tPRECONDITION_REQUIRED: 428,\n\tTOO_MANY_REQUESTS: 429,\n\tREQUEST_HEADER_FIELDS_TOO_LARGE: 431,\n\tUNAVAILABLE_FOR_LEGAL_REASONS: 451,\n\tINTERNAL_SERVER_ERROR: 500,\n\tNOT_IMPLEMENTED: 501,\n\tBAD_GATEWAY: 502,\n\tSERVICE_UNAVAILABLE: 503,\n\tGATEWAY_TIMEOUT: 504,\n\tHTTP_VERSION_NOT_SUPPORTED: 505,\n\tVARIANT_ALSO_NEGOTIATES: 506,\n\tINSUFFICIENT_STORAGE: 507,\n\tLOOP_DETECTED: 508,\n\tNOT_EXTENDED: 510,\n\tNETWORK_AUTHENTICATION_REQUIRED: 511\n};\nvar InternalAPIError = class extends Error {\n\tconstructor(status = \"INTERNAL_SERVER_ERROR\", body = void 0, headers = {}, statusCode = typeof status === \"number\" ? status : statusCodes[status]) {\n\t\tsuper(body?.message, body?.cause ? { cause: body.cause } : void 0);\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t\tthis.headers = headers;\n\t\tthis.statusCode = statusCode;\n\t\tthis.name = \"APIError\";\n\t\tthis.status = status;\n\t\tthis.headers = headers;\n\t\tthis.statusCode = statusCode;\n\t\tthis.body = body;\n\t}\n};\nvar ValidationError = class extends InternalAPIError {\n\tconstructor(message, issues) {\n\t\tsuper(400, {\n\t\t\tmessage,\n\t\t\tcode: \"VALIDATION_ERROR\"\n\t\t});\n\t\tthis.message = message;\n\t\tthis.issues = issues;\n\t\tthis.issues = issues;\n\t}\n};\nvar BetterCallError = class extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = \"BetterCallError\";\n\t}\n};\nconst kAPIErrorHeaderSymbol = Symbol.for(\"better-call:api-error-headers\");\nconst APIError = makeErrorForHideStackFrame(InternalAPIError, Error);\n\n//#endregion\nexport { APIError, BetterCallError, ValidationError, hideInternalStackFrames, kAPIErrorHeaderSymbol, makeErrorForHideStackFrame, statusCodes };\n//# sourceMappingURL=error.mjs.map","import { BASE_ERROR_CODES } from \"./codes.mjs\";\nimport { APIError as APIError$1 } from \"better-call/error\";\n//#region src/error/index.ts\nvar BetterAuthError = class extends Error {\n\tconstructor(message, options) {\n\t\tsuper(message, options);\n\t\tthis.name = \"BetterAuthError\";\n\t\tthis.message = message;\n\t\tthis.stack = \"\";\n\t}\n};\nvar APIError = class APIError extends APIError$1 {\n\tconstructor(...args) {\n\t\tsuper(...args);\n\t}\n\tstatic fromStatus(status, body) {\n\t\treturn new APIError(status, body);\n\t}\n\tstatic from(status, error) {\n\t\treturn new APIError(status, {\n\t\t\tmessage: error.message,\n\t\t\tcode: error.code\n\t\t});\n\t}\n};\n//#endregion\nexport { APIError, BASE_ERROR_CODES, BetterAuthError };\n","import { PACKAGE_VERSION } from \"../../version.mjs\";\n//#region src/plugins/device-authorization/client.ts\nconst deviceAuthorizationClient = () => {\n\treturn {\n\t\tid: \"device-authorization\",\n\t\tversion: PACKAGE_VERSION,\n\t\t$InferServerPlugin: {},\n\t\tpathMethods: {\n\t\t\t\"/device/code\": \"POST\",\n\t\t\t\"/device/token\": \"POST\",\n\t\t\t\"/device\": \"GET\",\n\t\t\t\"/device/approve\": \"POST\",\n\t\t\t\"/device/deny\": \"POST\"\n\t\t}\n\t};\n};\n//#endregion\nexport { deviceAuthorizationClient };\n","import { cleanTasks } from '../task/index.js'\n\nexport const clean = Symbol('clean')\n\nexport const cleanStores = (...stores) => {\n  if (process.env.NODE_ENV === 'production') {\n    throw new Error(\n      'cleanStores() can be used only during development or tests'\n    )\n  }\n  cleanTasks()\n  for (let $store of stores) {\n    if ($store) {\n      if ($store.mocked) delete $store.mocked\n      if ($store[clean]) $store[clean]()\n    }\n  }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\n// Use globalThis.nanostoresGlobal to store epoch so all module instances share\n// the same counter. This fixes issues when Nano Store is bundled separately\n// in different parts of an application (e.g., tree-shaking separates core\n// from React), causing each bundle to have its own epoch instance.\nexport const nanostoresGlobal = (globalThis.nanostoresGlobal ||= { epoch: 0 })\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n  let listeners = []\n  let $atom = {\n    get() {\n      if (!$atom.lc) {\n        $atom.listen(() => {})()\n      }\n      return $atom.value\n    },\n    init: initialValue,\n    lc: 0,\n    listen(listener) {\n      $atom.lc = listeners.push(listener)\n\n      return () => {\n        for (\n          let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n          i < listenerQueue.length;\n        ) {\n          if (listenerQueue[i] === listener) {\n            listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n          } else {\n            i += QUEUE_ITEMS_PER_LISTENER\n          }\n        }\n\n        let index = listeners.indexOf(listener)\n        if (~index) {\n          listeners.splice(index, 1)\n          if (!--$atom.lc) $atom.off()\n        }\n      }\n    },\n    notify(oldValue, changedKey) {\n      nanostoresGlobal.epoch++\n      let runListenerQueue = !listenerQueue.length\n      for (let listener of listeners) {\n        listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n      }\n\n      if (runListenerQueue) {\n        for (\n          lqIndex = 0;\n          lqIndex < listenerQueue.length;\n          lqIndex += QUEUE_ITEMS_PER_LISTENER\n        ) {\n          listenerQueue[lqIndex](\n            listenerQueue[lqIndex + 1],\n            listenerQueue[lqIndex + 2],\n            listenerQueue[lqIndex + 3]\n          )\n        }\n        listenerQueue.length = 0\n      }\n    },\n    /* It will be called on last listener unsubscribing.\n       We will redefine it in onMount and onStop. */\n    off() {},\n    set(newValue) {\n      let oldValue = $atom.value\n      if (oldValue !== newValue) {\n        $atom.value = newValue\n        $atom.notify(oldValue)\n      }\n    },\n    subscribe(listener) {\n      let unbind = $atom.listen(listener)\n      listener($atom.value)\n      return unbind\n    },\n    value: initialValue\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    $atom[clean] = () => {\n      listeners = []\n      $atom.lc = 0\n      $atom.off()\n    }\n  }\n\n  return $atom\n}\n\nexport const readonlyType = store => store\n","import { clean } from '../clean-stores/index.js'\n\nconst START = 0\nconst STOP = 1\nconst SET = 2\nconst NOTIFY = 3\nconst MOUNT = 5\nconst UNMOUNT = 6\nconst REVERT_MUTATION = 10\n\nexport let on = (object, listener, eventKey, mutateStore) => {\n  object.events = object.events || {}\n  if (!object.events[eventKey + REVERT_MUTATION]) {\n    object.events[eventKey + REVERT_MUTATION] = mutateStore(eventProps => {\n      // eslint-disable-next-line no-sequences\n      object.events[eventKey].reduceRight((event, l) => (l(event), event), {\n        shared: {},\n        ...eventProps\n      })\n    })\n  }\n  object.events[eventKey] = object.events[eventKey] || []\n  object.events[eventKey].push(listener)\n  return () => {\n    let currentListeners = object.events[eventKey]\n    let index = currentListeners.indexOf(listener)\n    currentListeners.splice(index, 1)\n    if (!currentListeners.length) {\n      delete object.events[eventKey]\n      object.events[eventKey + REVERT_MUTATION]()\n      delete object.events[eventKey + REVERT_MUTATION]\n    }\n  }\n}\n\nexport let onStart = ($store, listener) =>\n  on($store, listener, START, runListeners => {\n    let originListen = $store.listen\n    $store.listen = arg => {\n      if (!$store.lc && !$store.starting) {\n        $store.starting = true\n        runListeners()\n        delete $store.starting\n      }\n      return originListen(arg)\n    }\n    return () => {\n      $store.listen = originListen\n    }\n  })\n\nexport let onStop = ($store, listener) =>\n  on($store, listener, STOP, runListeners => {\n    let originOff = $store.off\n    $store.off = () => {\n      runListeners()\n      originOff()\n    }\n    return () => {\n      $store.off = originOff\n    }\n  })\n\nexport let onSet = ($store, listener) =>\n  on($store, listener, SET, runListeners => {\n    let originSet = $store.set\n    let originSetKey = $store.setKey\n    if ($store.setKey) {\n      $store.setKey = (changed, changedValue) => {\n        let isAborted\n        let abort = () => {\n          isAborted = true\n        }\n\n        runListeners({\n          abort,\n          changed,\n          newValue: { ...$store.value, [changed]: changedValue }\n        })\n        if (!isAborted) return originSetKey(changed, changedValue)\n      }\n    }\n    $store.set = newValue => {\n      let isAborted\n      let abort = () => {\n        isAborted = true\n      }\n\n      runListeners({ abort, newValue })\n      if (!isAborted) return originSet(newValue)\n    }\n    return () => {\n      $store.set = originSet\n      $store.setKey = originSetKey\n    }\n  })\n\nexport let onNotify = ($store, listener) =>\n  on($store, listener, NOTIFY, runListeners => {\n    let originNotify = $store.notify\n    $store.notify = (oldValue, changed) => {\n      let isAborted\n      let abort = () => {\n        isAborted = true\n      }\n\n      runListeners({ abort, changed, oldValue })\n      if (!isAborted) return originNotify(oldValue, changed)\n    }\n    return () => {\n      $store.notify = originNotify\n    }\n  })\n\nexport const STORE_UNMOUNT_DELAY = 1000\n\nexport let onMount = ($store, initialize) => {\n  let listener = payload => {\n    let destroy = initialize(payload)\n    if (destroy) $store.events[UNMOUNT].push(destroy)\n  }\n  return on($store, listener, MOUNT, runListeners => {\n    let originListen = $store.listen\n    $store.listen = (...args) => {\n      if (!$store.lc && !$store.active) {\n        $store.active = true\n        runListeners()\n      }\n      return originListen(...args)\n    }\n\n    let originOff = $store.off\n    $store.events[UNMOUNT] = []\n    $store.off = () => {\n      originOff()\n      setTimeout(() => {\n        if ($store.active && !$store.lc) {\n          $store.active = false\n          for (let destroy of $store.events[UNMOUNT]) destroy()\n          $store.events[UNMOUNT] = []\n        }\n      }, STORE_UNMOUNT_DELAY)\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      let originClean = $store[clean]\n      $store[clean] = () => {\n        for (let destroy of $store.events[UNMOUNT]) destroy()\n        $store.events[UNMOUNT] = []\n        $store.active = false\n        originClean()\n      }\n    }\n\n    return () => {\n      $store.listen = originListen\n      $store.off = originOff\n    }\n  })\n}\n","import { atom, onMount } from \"nanostores\";\n//#region src/client/query.ts\nconst isServer = () => typeof window === \"undefined\";\nconst useAuthQuery = (initializedAtom, path, $fetch, options) => {\n\tconst value = atom({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: true,\n\t\tisRefetching: false,\n\t\trefetch: (queryParams) => fn(queryParams)\n\t});\n\tconst fn = async (queryParams) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst opts = typeof options === \"function\" ? options({\n\t\t\t\tdata: value.get().data,\n\t\t\t\terror: value.get().error,\n\t\t\t\tisPending: value.get().isPending\n\t\t\t}) : options;\n\t\t\t$fetch(path, {\n\t\t\t\t...opts,\n\t\t\t\tquery: {\n\t\t\t\t\t...opts?.query,\n\t\t\t\t\t...queryParams?.query\n\t\t\t\t},\n\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tdata: context.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t\t},\n\t\t\t\tasync onError(context) {\n\t\t\t\t\tconst { request } = context;\n\t\t\t\t\tconst retryAttempts = typeof request.retry === \"number\" ? request.retry : request.retry?.attempts;\n\t\t\t\t\tconst retryAttempt = request.retryAttempt || 0;\n\t\t\t\t\tif (retryAttempts && retryAttempt < retryAttempts) return;\n\t\t\t\t\tconst isUnauthorized = context.error.status === 401;\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\terror: context.error,\n\t\t\t\t\t\tdata: isUnauthorized ? null : value.get().data,\n\t\t\t\t\t\tisPending: false,\n\t\t\t\t\t\tisRefetching: false,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onError?.(context);\n\t\t\t\t},\n\t\t\t\tasync onRequest(context) {\n\t\t\t\t\tconst currentValue = value.get();\n\t\t\t\t\tvalue.set({\n\t\t\t\t\t\tisPending: currentValue.data === null,\n\t\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t\tisRefetching: true,\n\t\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t\t});\n\t\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t\t}\n\t\t\t}).catch((error) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror,\n\t\t\t\t\tdata: value.get().data,\n\t\t\t\t\tisPending: false,\n\t\t\t\t\tisRefetching: false,\n\t\t\t\t\trefetch: value.value.refetch\n\t\t\t\t});\n\t\t\t}).finally(() => {\n\t\t\t\tresolve(void 0);\n\t\t\t});\n\t\t});\n\t};\n\tinitializedAtom = Array.isArray(initializedAtom) ? initializedAtom : [initializedAtom];\n\tlet isInitialized = false;\n\tfor (const initAtom of initializedAtom) initAtom.subscribe(async () => {\n\t\tif (isServer()) return;\n\t\tif (isInitialized) await fn();\n\t\telse onMount(value, () => {\n\t\t\tconst timeoutId = setTimeout(async () => {\n\t\t\t\tif (!isInitialized) {\n\t\t\t\t\tisInitialized = true;\n\t\t\t\t\tawait fn();\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t\treturn () => {\n\t\t\t\tvalue.off();\n\t\t\t\tinitAtom.off();\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t};\n\t\t});\n\t});\n\treturn value;\n};\n//#endregion\nexport { useAuthQuery };\n","//#region src/client/broadcast-channel.ts\nconst kBroadcastChannel = Symbol.for(\"better-auth:broadcast-channel\");\nconst now = () => Math.floor(Date.now() / 1e3);\nvar WindowBroadcastChannel = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tname;\n\tconstructor(name = \"better-auth.message\") {\n\t\tthis.name = name;\n\t}\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tpost(message) {\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\tlocalStorage.setItem(this.name, JSON.stringify({\n\t\t\t\t...message,\n\t\t\t\ttimestamp: now()\n\t\t\t}));\n\t\t} catch {}\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst handler = (event) => {\n\t\t\tif (event.key !== this.name) return;\n\t\t\tconst message = JSON.parse(event.newValue ?? \"{}\");\n\t\t\tif (message?.event !== \"session\" || !message?.data) return;\n\t\t\tthis.listeners.forEach((listener) => listener(message));\n\t\t};\n\t\twindow.addEventListener(\"storage\", handler);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"storage\", handler);\n\t\t};\n\t}\n};\nfunction getGlobalBroadcastChannel(name = \"better-auth.message\") {\n\tif (!globalThis[kBroadcastChannel]) globalThis[kBroadcastChannel] = new WindowBroadcastChannel(name);\n\treturn globalThis[kBroadcastChannel];\n}\n//#endregion\nexport { getGlobalBroadcastChannel, kBroadcastChannel };\n","//#region src/client/focus-manager.ts\nconst kFocusManager = Symbol.for(\"better-auth:focus-manager\");\nvar WindowFocusManager = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tsetFocused(focused) {\n\t\tthis.listeners.forEach((listener) => listener(focused));\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof document === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst visibilityHandler = () => {\n\t\t\tif (document.visibilityState === \"visible\") this.setFocused(true);\n\t\t};\n\t\tdocument.addEventListener(\"visibilitychange\", visibilityHandler, false);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"visibilitychange\", visibilityHandler, false);\n\t\t};\n\t}\n};\nfunction getGlobalFocusManager() {\n\tif (!globalThis[kFocusManager]) globalThis[kFocusManager] = new WindowFocusManager();\n\treturn globalThis[kFocusManager];\n}\n//#endregion\nexport { getGlobalFocusManager, kFocusManager };\n","//#region src/client/online-manager.ts\nconst kOnlineManager = Symbol.for(\"better-auth:online-manager\");\nvar WindowOnlineManager = class {\n\tlisteners = /* @__PURE__ */ new Set();\n\tisOnline = typeof navigator !== \"undefined\" ? navigator.onLine : true;\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t};\n\t}\n\tsetOnline(online) {\n\t\tthis.isOnline = online;\n\t\tthis.listeners.forEach((listener) => listener(online));\n\t}\n\tsetup() {\n\t\tif (typeof window === \"undefined\" || typeof window.addEventListener === \"undefined\") return () => {};\n\t\tconst onOnline = () => this.setOnline(true);\n\t\tconst onOffline = () => this.setOnline(false);\n\t\twindow.addEventListener(\"online\", onOnline, false);\n\t\twindow.addEventListener(\"offline\", onOffline, false);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"online\", onOnline, false);\n\t\t\twindow.removeEventListener(\"offline\", onOffline, false);\n\t\t};\n\t}\n};\nfunction getGlobalOnlineManager() {\n\tif (!globalThis[kOnlineManager]) globalThis[kOnlineManager] = new WindowOnlineManager();\n\treturn globalThis[kOnlineManager];\n}\n//#endregion\nexport { getGlobalOnlineManager, kOnlineManager };\n","//#region src/client/parser.ts\nconst PROTO_POLLUTION_PATTERNS = {\n\tproto: /\"(?:_|\\\\u0{2}5[Ff]){2}(?:p|\\\\u0{2}70)(?:r|\\\\u0{2}72)(?:o|\\\\u0{2}6[Ff])(?:t|\\\\u0{2}74)(?:o|\\\\u0{2}6[Ff])(?:_|\\\\u0{2}5[Ff]){2}\"\\s*:/,\n\tconstructor: /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/,\n\tprotoShort: /\"__proto__\"\\s*:/,\n\tconstructorShort: /\"constructor\"\\s*:/\n};\nconst JSON_SIGNATURE = /^\\s*[\"[{]|^\\s*-?\\d{1,16}(\\.\\d{1,17})?([Ee][+-]?\\d+)?\\s*$/;\nconst SPECIAL_VALUES = {\n\ttrue: true,\n\tfalse: false,\n\tnull: null,\n\tundefined: void 0,\n\tnan: NaN,\n\tinfinity: Number.POSITIVE_INFINITY,\n\t\"-infinity\": Number.NEGATIVE_INFINITY\n};\nconst ISO_DATE_REGEX = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,7}))?(?:Z|([+-])(\\d{2}):(\\d{2}))$/;\nfunction isValidDate(date) {\n\treturn date instanceof Date && !isNaN(date.getTime());\n}\nfunction parseISODate(value) {\n\tconst match = ISO_DATE_REGEX.exec(value);\n\tif (!match) return null;\n\tconst [, year, month, day, hour, minute, second, ms, offsetSign, offsetHour, offsetMinute] = match;\n\tconst date = new Date(Date.UTC(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10), parseInt(hour, 10), parseInt(minute, 10), parseInt(second, 10), ms ? parseInt(ms.padEnd(3, \"0\"), 10) : 0));\n\tif (offsetSign) {\n\t\tconst offset = (parseInt(offsetHour, 10) * 60 + parseInt(offsetMinute, 10)) * (offsetSign === \"+\" ? -1 : 1);\n\t\tdate.setUTCMinutes(date.getUTCMinutes() + offset);\n\t}\n\treturn isValidDate(date) ? date : null;\n}\nfunction betterJSONParse(value, options = {}) {\n\tconst { strict = false, warnings = false, reviver, parseDates = true } = options;\n\tif (typeof value !== \"string\") return value;\n\tconst trimmed = value.trim();\n\tif (trimmed.length > 0 && trimmed[0] === \"\\\"\" && trimmed.endsWith(\"\\\"\") && !trimmed.slice(1, -1).includes(\"\\\"\")) return trimmed.slice(1, -1);\n\tconst lowerValue = trimmed.toLowerCase();\n\tif (lowerValue.length <= 9 && lowerValue in SPECIAL_VALUES) return SPECIAL_VALUES[lowerValue];\n\tif (!JSON_SIGNATURE.test(trimmed)) {\n\t\tif (strict) throw new SyntaxError(\"[better-json] Invalid JSON\");\n\t\treturn value;\n\t}\n\tif (Object.entries(PROTO_POLLUTION_PATTERNS).some(([key, pattern]) => {\n\t\tconst matches = pattern.test(trimmed);\n\t\tif (matches && warnings) console.warn(`[better-json] Detected potential prototype pollution attempt using ${key} pattern`);\n\t\treturn matches;\n\t}) && strict) throw new Error(\"[better-json] Potential prototype pollution attempt detected\");\n\ttry {\n\t\tconst secureReviver = (key, value) => {\n\t\t\tif (key === \"__proto__\" || key === \"constructor\" && value && typeof value === \"object\" && \"prototype\" in value) {\n\t\t\t\tif (warnings) console.warn(`[better-json] Dropping \"${key}\" key to prevent prototype pollution`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parseDates && typeof value === \"string\") {\n\t\t\t\tconst date = parseISODate(value);\n\t\t\t\tif (date) return date;\n\t\t\t}\n\t\t\treturn reviver ? reviver(key, value) : value;\n\t\t};\n\t\treturn JSON.parse(trimmed, secureReviver);\n\t} catch (error) {\n\t\tif (strict) throw error;\n\t\treturn value;\n\t}\n}\nfunction parseJSON(value, options = { strict: true }) {\n\treturn betterJSONParse(value, options);\n}\n//#endregion\nexport { parseJSON };\n","import { getGlobalBroadcastChannel } from \"./broadcast-channel.mjs\";\nimport { getGlobalFocusManager } from \"./focus-manager.mjs\";\nimport { getGlobalOnlineManager } from \"./online-manager.mjs\";\n//#region src/client/session-refresh.ts\nconst now = () => Math.floor(Date.now() / 1e3);\n/**\n* Normalize $fetch response: `throw: true` returns data directly, otherwise `{ data, error }`.\n*/\nfunction normalizeSessionResponse(res) {\n\tif (typeof res === \"object\" && res !== null && \"data\" in res && \"error\" in res) return res;\n\treturn {\n\t\tdata: res,\n\t\terror: null\n\t};\n}\n/**\n* Rate limit: don't refetch on focus if a session request was made within this many seconds\n*/\nconst FOCUS_REFETCH_RATE_LIMIT_SECONDS = 5;\nfunction createSessionRefreshManager(opts) {\n\tconst { sessionAtom, sessionSignal, $fetch, options = {} } = opts;\n\tconst refetchInterval = options.sessionOptions?.refetchInterval ?? 0;\n\tconst refetchOnWindowFocus = options.sessionOptions?.refetchOnWindowFocus ?? true;\n\tconst refetchWhenOffline = options.sessionOptions?.refetchWhenOffline ?? false;\n\tconst state = {\n\t\tlastSync: 0,\n\t\tlastSessionRequest: 0,\n\t\tcachedSession: void 0\n\t};\n\tconst shouldRefetch = () => {\n\t\treturn refetchWhenOffline || getGlobalOnlineManager().isOnline;\n\t};\n\tconst triggerRefetch = (event) => {\n\t\tif (!shouldRefetch()) return;\n\t\tif (event?.event === \"storage\") {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\treturn;\n\t\t}\n\t\tconst currentSession = sessionAtom.get();\n\t\tconst fetchSessionWithRefresh = () => {\n\t\t\tstate.lastSessionRequest = now();\n\t\t\t$fetch(\"/get-session\").then(async (res) => {\n\t\t\t\tlet { data, error } = normalizeSessionResponse(res);\n\t\t\t\tif (data?.needsRefresh) try {\n\t\t\t\t\tconst refreshRes = await $fetch(\"/get-session\", { method: \"POST\" });\n\t\t\t\t\t({data, error} = normalizeSessionResponse(refreshRes));\n\t\t\t\t} catch {}\n\t\t\t\tconst sessionData = data?.session && data?.user ? data : null;\n\t\t\t\tsessionAtom.set({\n\t\t\t\t\t...currentSession,\n\t\t\t\t\tdata: sessionData,\n\t\t\t\t\terror\n\t\t\t\t});\n\t\t\t\tstate.lastSync = now();\n\t\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t\t}).catch(() => {});\n\t\t};\n\t\tif (event?.event === \"poll\") {\n\t\t\tfetchSessionWithRefresh();\n\t\t\treturn;\n\t\t}\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tif (now() - state.lastSessionRequest < FOCUS_REFETCH_RATE_LIMIT_SECONDS) return;\n\t\t\tstate.lastSessionRequest = now();\n\t\t}\n\t\tif (event?.event === \"visibilitychange\") {\n\t\t\tfetchSessionWithRefresh();\n\t\t\treturn;\n\t\t}\n\t\tif (currentSession?.data === null || currentSession?.data === void 0) {\n\t\t\tstate.lastSync = now();\n\t\t\tsessionSignal.set(!sessionSignal.get());\n\t\t}\n\t};\n\tconst broadcastSessionUpdate = (trigger) => {\n\t\tgetGlobalBroadcastChannel().post({\n\t\t\tevent: \"session\",\n\t\t\tdata: { trigger },\n\t\t\tclientId: Math.random().toString(36).substring(7)\n\t\t});\n\t};\n\tconst setupPolling = () => {\n\t\tif (refetchInterval && refetchInterval > 0) state.pollInterval = setInterval(() => {\n\t\t\tif (sessionAtom.get()?.data) triggerRefetch({ event: \"poll\" });\n\t\t}, refetchInterval * 1e3);\n\t};\n\tconst setupBroadcast = () => {\n\t\tstate.unsubscribeBroadcast = getGlobalBroadcastChannel().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"storage\" });\n\t\t});\n\t};\n\tconst setupFocusRefetch = () => {\n\t\tif (!refetchOnWindowFocus) return;\n\t\tstate.unsubscribeFocus = getGlobalFocusManager().subscribe(() => {\n\t\t\ttriggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\tconst setupOnlineRefetch = () => {\n\t\tstate.unsubscribeOnline = getGlobalOnlineManager().subscribe((online) => {\n\t\t\tif (online) triggerRefetch({ event: \"visibilitychange\" });\n\t\t});\n\t};\n\tconst init = () => {\n\t\tsetupPolling();\n\t\tsetupBroadcast();\n\t\tsetupFocusRefetch();\n\t\tsetupOnlineRefetch();\n\t\tgetGlobalBroadcastChannel().setup();\n\t\tgetGlobalFocusManager().setup();\n\t\tgetGlobalOnlineManager().setup();\n\t};\n\tconst cleanup = () => {\n\t\tif (state.pollInterval) {\n\t\t\tclearInterval(state.pollInterval);\n\t\t\tstate.pollInterval = void 0;\n\t\t}\n\t\tif (state.unsubscribeBroadcast) {\n\t\t\tstate.unsubscribeBroadcast();\n\t\t\tstate.unsubscribeBroadcast = void 0;\n\t\t}\n\t\tif (state.unsubscribeFocus) {\n\t\t\tstate.unsubscribeFocus();\n\t\t\tstate.unsubscribeFocus = void 0;\n\t\t}\n\t\tif (state.unsubscribeOnline) {\n\t\t\tstate.unsubscribeOnline();\n\t\t\tstate.unsubscribeOnline = void 0;\n\t\t}\n\t\tstate.lastSync = 0;\n\t\tstate.lastSessionRequest = 0;\n\t\tstate.cachedSession = void 0;\n\t};\n\treturn {\n\t\tinit,\n\t\tcleanup,\n\t\ttriggerRefetch,\n\t\tbroadcastSessionUpdate\n\t};\n}\n//#endregion\nexport { createSessionRefreshManager };\n","//#region src/env/env-impl.ts\nconst _envShim = Object.create(null);\nconst _getEnv = (useShim) => globalThis.process?.env || globalThis.Deno?.env.toObject() || globalThis.__env__ || (useShim ? _envShim : globalThis);\nconst env = new Proxy(_envShim, {\n\tget(_, prop) {\n\t\treturn _getEnv()[prop] ?? _envShim[prop];\n\t},\n\thas(_, prop) {\n\t\treturn prop in _getEnv() || prop in _envShim;\n\t},\n\tset(_, prop, value) {\n\t\tconst env = _getEnv(true);\n\t\tenv[prop] = value;\n\t\treturn true;\n\t},\n\tdeleteProperty(_, prop) {\n\t\tif (!prop) return false;\n\t\tconst env = _getEnv(true);\n\t\tdelete env[prop];\n\t\treturn true;\n\t},\n\townKeys() {\n\t\tconst env = _getEnv(true);\n\t\treturn Object.keys(env);\n\t}\n});\nfunction toBoolean(val) {\n\treturn val ? val !== \"false\" : false;\n}\nconst nodeENV = typeof process !== \"undefined\" && process.env && process.env.NODE_ENV || \"\";\n/** Detect if `NODE_ENV` environment variable is `production` */\nconst isProduction = nodeENV === \"production\";\n/** Detect if `NODE_ENV` environment variable is `dev` or `development` */\nconst isDevelopment = () => nodeENV === \"dev\" || nodeENV === \"development\";\n/** Detect if `NODE_ENV` environment variable is `test` */\nconst isTest = () => nodeENV === \"test\" || toBoolean(env.TEST);\n/**\n* Get environment variable with fallback\n*/\nfunction getEnvVar(key, fallback) {\n\tif (typeof process !== \"undefined\" && process.env) return process.env[key] ?? fallback;\n\tif (typeof Deno !== \"undefined\") return Deno.env.get(key) ?? fallback;\n\tif (typeof Bun !== \"undefined\") return Bun.env[key] ?? fallback;\n\treturn fallback;\n}\n/**\n* Get boolean environment variable\n*/\nfunction getBooleanEnvVar(key, fallback = true) {\n\tconst value = getEnvVar(key);\n\tif (!value) return fallback;\n\treturn value !== \"0\" && value.toLowerCase() !== \"false\" && value !== \"\";\n}\n/**\n* Common environment variables used in Better Auth\n*/\nconst ENV = Object.freeze({\n\tget BETTER_AUTH_SECRET() {\n\t\treturn getEnvVar(\"BETTER_AUTH_SECRET\");\n\t},\n\tget AUTH_SECRET() {\n\t\treturn getEnvVar(\"AUTH_SECRET\");\n\t},\n\tget BETTER_AUTH_TELEMETRY() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY\");\n\t},\n\tget BETTER_AUTH_TELEMETRY_ID() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY_ID\");\n\t},\n\tget NODE_ENV() {\n\t\treturn getEnvVar(\"NODE_ENV\", \"development\");\n\t},\n\tget PACKAGE_VERSION() {\n\t\treturn getEnvVar(\"PACKAGE_VERSION\", \"0.0.0\");\n\t},\n\tget BETTER_AUTH_TELEMETRY_ENDPOINT() {\n\t\treturn getEnvVar(\"BETTER_AUTH_TELEMETRY_ENDPOINT\", \"\");\n\t}\n});\n//#endregion\nexport { ENV, env, getBooleanEnvVar, getEnvVar, isDevelopment, isProduction, isTest, nodeENV };\n","import { wildcardMatch } from \"./wildcard.mjs\";\nimport { env } from \"@better-auth/core/env\";\nimport { BetterAuthError } from \"@better-auth/core/error\";\n//#region src/utils/url.ts\n/**\n* Minimal loopback check for dev scheme inference only. Reachable from\n* `client/config.ts` via `getBaseURL`, so we MUST NOT import the full\n* `@better-auth/core/utils/host` classifier here: its `utils/ip` dependency\n* on zod would leak into the client bundle (see `e2e/smoke/test/vite.spec.ts`).\n*\n* Server-side SSRF/loopback checks (oauth redirect matching, trusted-origin\n* resolution, electron fetch gate) continue to use the authoritative\n* `isLoopbackHost` from `@better-auth/core/utils/host`. This helper's only\n* job is picking `http` vs `https` for dev ergonomics.\n*/\nfunction isLoopbackForDevScheme(host) {\n\tconst hostname = host.replace(/:\\d+$/, \"\").replace(/^\\[|\\]$/g, \"\").toLowerCase();\n\treturn hostname === \"localhost\" || hostname.endsWith(\".localhost\") || hostname === \"::1\" || hostname.startsWith(\"127.\");\n}\nfunction checkHasPath(url) {\n\ttry {\n\t\treturn (new URL(url).pathname.replace(/\\/+$/, \"\") || \"/\") !== \"/\";\n\t} catch {\n\t\tthrow new BetterAuthError(`Invalid base URL: ${url}. Please provide a valid base URL.`);\n\t}\n}\nfunction assertHasProtocol(url) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\tif (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") throw new BetterAuthError(`Invalid base URL: ${url}. URL must include 'http://' or 'https://'`);\n\t} catch (error) {\n\t\tif (error instanceof BetterAuthError) throw error;\n\t\tthrow new BetterAuthError(`Invalid base URL: ${url}. Please provide a valid base URL.`, { cause: error });\n\t}\n}\nfunction withPath(url, path = \"/api/auth\") {\n\tassertHasProtocol(url);\n\tif (checkHasPath(url)) return url;\n\tconst trimmedUrl = url.replace(/\\/+$/, \"\");\n\tif (!path || path === \"/\") return trimmedUrl;\n\tpath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${trimmedUrl}${path}`;\n}\nfunction validateProxyHeader(header, type) {\n\tif (!header || header.trim() === \"\") return false;\n\tif (type === \"proto\") return header === \"http\" || header === \"https\";\n\tif (type === \"host\") {\n\t\tif ([\n\t\t\t/\\.\\./,\n\t\t\t/\\0/,\n\t\t\t/[\\s]/,\n\t\t\t/^[.]/,\n\t\t\t/[<>'\"]/,\n\t\t\t/javascript:/i,\n\t\t\t/file:/i,\n\t\t\t/data:/i\n\t\t].some((pattern) => pattern.test(header))) return false;\n\t\treturn /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(:[0-9]{1,5})?$/.test(header) || /^(\\d{1,3}\\.){3}\\d{1,3}(:[0-9]{1,5})?$/.test(header) || /^\\[[0-9a-fA-F:]+\\](:[0-9]{1,5})?$/.test(header) || /^localhost(:[0-9]{1,5})?$/i.test(header);\n\t}\n\treturn false;\n}\nfunction getBaseURL(url, path, request, loadEnv, trustedProxyHeaders) {\n\tif (url) return withPath(url, path);\n\tif (loadEnv !== false) {\n\t\tconst fromEnv = env.BETTER_AUTH_URL || env.NEXT_PUBLIC_BETTER_AUTH_URL || env.PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_BETTER_AUTH_URL || env.NUXT_PUBLIC_AUTH_URL || (env.BASE_URL !== \"/\" ? env.BASE_URL : void 0);\n\t\tif (fromEnv) return withPath(fromEnv, path);\n\t}\n\tconst fromRequest = request?.headers.get(\"x-forwarded-host\");\n\tconst fromRequestProto = request?.headers.get(\"x-forwarded-proto\");\n\tif (fromRequest && fromRequestProto && trustedProxyHeaders) {\n\t\tif (validateProxyHeader(fromRequestProto, \"proto\") && validateProxyHeader(fromRequest, \"host\")) try {\n\t\t\treturn withPath(`${fromRequestProto}://${fromRequest}`, path);\n\t\t} catch (_error) {}\n\t}\n\tif (request) {\n\t\tconst url = getOrigin(request.url);\n\t\tif (!url) throw new BetterAuthError(\"Could not get origin from request. Please provide a valid base URL.\");\n\t\treturn withPath(url, path);\n\t}\n\tif (typeof window !== \"undefined\" && window.location) return withPath(window.location.origin, path);\n}\nfunction getOrigin(url) {\n\ttry {\n\t\tconst parsedUrl = new URL(url);\n\t\treturn parsedUrl.origin === \"null\" ? null : parsedUrl.origin;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction getProtocol(url) {\n\ttry {\n\t\treturn new URL(url).protocol;\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction getHost(url) {\n\ttry {\n\t\treturn new URL(url).host;\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Checks if the baseURL config is a dynamic config object\n*/\nfunction isDynamicBaseURLConfig(config) {\n\treturn typeof config === \"object\" && config !== null && \"allowedHosts\" in config && Array.isArray(config.allowedHosts);\n}\n/**\n* Check if a value is a `Request`\n* - `instanceof`: works for native Request instances\n* - `toString`: handles where instanceof check fails but the object is still a\n*   valid Request (e.g. cross-realm, polyfills). Paired with a shape check so\n*   an object that only spoofs `Symbol.toStringTag` without the real shape is\n*   rejected before downstream code tries to read `.headers` / `.url`.\n*\n* @param value The value to check\n* @returns `true` if the value is a Request instance\n*/\nfunction isRequestLike(value) {\n\tif (value instanceof Request) return true;\n\tif (typeof value !== \"object\" || value === null || Object.prototype.toString.call(value) !== \"[object Request]\") return false;\n\tconst v = value;\n\treturn typeof v.url === \"string\" && typeof v.headers === \"object\" && v.headers !== null && typeof v.headers.get === \"function\";\n}\n/**\n* Extracts the host from a `Request` or `Headers`.\n* Honors `x-forwarded-host` only when `trustedProxyHeaders` is enabled,\n* then falls back to the `host` header and finally the request URL.\n*/\nfunction getHostFromSource(source, trustedProxyHeaders) {\n\tconst headers = isRequestLike(source) ? source.headers : source;\n\tif (trustedProxyHeaders) {\n\t\tconst forwardedHost = headers.get(\"x-forwarded-host\");\n\t\tif (forwardedHost && validateProxyHeader(forwardedHost, \"host\")) return forwardedHost;\n\t}\n\tconst host = headers.get(\"host\");\n\tif (host && validateProxyHeader(host, \"host\")) return host;\n\tif (isRequestLike(source)) try {\n\t\treturn new URL(source.url).host;\n\t} catch {\n\t\treturn null;\n\t}\n\treturn null;\n}\n/**\n* Extracts the protocol from a `Request` or `Headers`.\n* Honors `x-forwarded-proto` only when `trustedProxyHeaders` is enabled,\n* then falls back to the request URL, then to \"https\".\n*/\nfunction getProtocolFromSource(source, configProtocol, trustedProxyHeaders) {\n\tif (configProtocol === \"http\" || configProtocol === \"https\") return configProtocol;\n\tconst headers = isRequestLike(source) ? source.headers : source;\n\tif (trustedProxyHeaders) {\n\t\tconst forwardedProto = headers.get(\"x-forwarded-proto\");\n\t\tif (forwardedProto && validateProxyHeader(forwardedProto, \"proto\")) return forwardedProto;\n\t}\n\tif (isRequestLike(source)) try {\n\t\tconst url = new URL(source.url);\n\t\tif (url.protocol === \"http:\" || url.protocol === \"https:\") return url.protocol.slice(0, -1);\n\t} catch {}\n\tconst host = getHostFromSource(source, trustedProxyHeaders);\n\tif (host && isLoopbackForDevScheme(host)) return \"http\";\n\treturn \"https\";\n}\n/**\n* Matches a hostname against a host pattern.\n* Supports wildcard patterns like `*.vercel.app` or `preview-*.myapp.com`.\n*\n* @param host The hostname to test (e.g., \"myapp.com\", \"preview-123.vercel.app\")\n* @param pattern The host pattern (e.g., \"myapp.com\", \"*.vercel.app\")\n* @returns {boolean} true if the host matches the pattern, false otherwise.\n*\n* @example\n* ```ts\n* matchesHostPattern(\"myapp.com\", \"myapp.com\") // true\n* matchesHostPattern(\"preview-123.vercel.app\", \"*.vercel.app\") // true\n* matchesHostPattern(\"preview-123.myapp.com\", \"preview-*.myapp.com\") // true\n* matchesHostPattern(\"evil.com\", \"myapp.com\") // false\n* ```\n*/\nconst matchesHostPattern = (host, pattern) => {\n\tif (!host || !pattern) return false;\n\tconst normalizedHost = host.replace(/^https?:\\/\\//, \"\").split(\"/\")[0].toLowerCase();\n\tconst normalizedPattern = pattern.replace(/^https?:\\/\\//, \"\").split(\"/\")[0].toLowerCase();\n\tif (normalizedPattern.includes(\"*\") || normalizedPattern.includes(\"?\")) return wildcardMatch(normalizedPattern)(normalizedHost);\n\treturn normalizedHost.toLowerCase() === normalizedPattern.toLowerCase();\n};\n/**\n* Resolves the base URL from a dynamic config based on the incoming request.\n* Validates the derived host against the allowedHosts allowlist.\n*\n* @param config The dynamic base URL config\n* @param request The incoming request\n* @param basePath The base path to append\n* @returns The resolved base URL with path\n* @throws BetterAuthError if host is not in allowedHosts and no fallback is set\n*/\nfunction resolveDynamicBaseURL(config, source, basePath, trustedProxyHeaders) {\n\tconst host = getHostFromSource(source, trustedProxyHeaders);\n\tif (!host) {\n\t\tif (config.fallback) return withPath(config.fallback, basePath);\n\t\tthrow new BetterAuthError(\"Could not determine host from request headers. Please provide a fallback URL in your baseURL config.\");\n\t}\n\tif (config.allowedHosts.some((pattern) => matchesHostPattern(host, pattern))) return withPath(`${getProtocolFromSource(source, config.protocol, trustedProxyHeaders)}://${host}`, basePath);\n\tif (config.fallback) return withPath(config.fallback, basePath);\n\tthrow new BetterAuthError(`Host \"${host}\" is not in the allowed hosts list. Allowed hosts: ${config.allowedHosts.join(\", \")}. Add this host to your allowedHosts config or provide a fallback URL.`);\n}\n/**\n* Resolves the base URL from any config type (static string or dynamic object).\n* This is the main entry point for base URL resolution.\n*\n* @param config The base URL config (string or object)\n* @param basePath The base path to append\n* @param request Optional request for dynamic resolution\n* @param loadEnv Whether to load from environment variables\n* @param trustedProxyHeaders Whether to trust proxy headers (for legacy behavior)\n* @returns The resolved base URL with path\n*/\nfunction resolveBaseURL(config, basePath, source, loadEnv, trustedProxyHeaders) {\n\tif (isDynamicBaseURLConfig(config)) {\n\t\tif (source) return resolveDynamicBaseURL(config, source, basePath, trustedProxyHeaders);\n\t\tif (config.fallback) return withPath(config.fallback, basePath);\n\t\treturn getBaseURL(void 0, basePath, void 0, loadEnv, trustedProxyHeaders);\n\t}\n\tconst request = isRequestLike(source) ? source : void 0;\n\tif (typeof config === \"string\") return getBaseURL(config, basePath, request, loadEnv, trustedProxyHeaders);\n\treturn getBaseURL(void 0, basePath, request, loadEnv, trustedProxyHeaders);\n}\n//#endregion\nexport { getBaseURL, getHost, getHostFromSource, getOrigin, getProtocol, getProtocolFromSource, isDynamicBaseURLConfig, isRequestLike, matchesHostPattern, resolveBaseURL, resolveDynamicBaseURL };\n","//#region src/client/fetch-plugins.ts\nconst redirectPlugin = {\n\tid: \"redirect\",\n\tname: \"Redirect\",\n\thooks: { onSuccess(context) {\n\t\tif (context.data?.url && context.data?.redirect) {\n\t\t\tif (typeof window !== \"undefined\" && window.location) {\n\t\t\t\tif (window.location) try {\n\t\t\t\t\twindow.location.href = context.data.url;\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t} }\n};\n//#endregion\nexport { redirectPlugin };\n","import { useAuthQuery } from \"./query.mjs\";\nimport { createSessionRefreshManager } from \"./session-refresh.mjs\";\nimport { atom, onMount } from \"nanostores\";\n//#region src/client/session-atom.ts\nfunction getSessionAtom($fetch, options) {\n\tconst $signal = atom(false);\n\tconst session = useAuthQuery($signal, \"/get-session\", $fetch, { method: \"GET\" });\n\tlet broadcastSessionUpdate = () => {};\n\tonMount(session, () => {\n\t\tconst refreshManager = createSessionRefreshManager({\n\t\t\tsessionAtom: session,\n\t\t\tsessionSignal: $signal,\n\t\t\t$fetch,\n\t\t\toptions\n\t\t});\n\t\trefreshManager.init();\n\t\tbroadcastSessionUpdate = refreshManager.broadcastSessionUpdate;\n\t\treturn () => {\n\t\t\trefreshManager.cleanup();\n\t\t};\n\t});\n\treturn {\n\t\tsession,\n\t\t$sessionSignal: $signal,\n\t\tbroadcastSessionUpdate: (trigger) => broadcastSessionUpdate(trigger)\n\t};\n}\n//#endregion\nexport { getSessionAtom };\n","function isPlainObject(value) {\n  if (value === null || typeof value !== \"object\") {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {\n    return false;\n  }\n  if (Symbol.iterator in value) {\n    return false;\n  }\n  if (Symbol.toStringTag in value) {\n    return Object.prototype.toString.call(value) === \"[object Module]\";\n  }\n  return true;\n}\n\nfunction _defu(baseObject, defaults, namespace = \".\", merger) {\n  if (!isPlainObject(defaults)) {\n    return _defu(baseObject, {}, namespace, merger);\n  }\n  const object = { ...defaults };\n  for (const key of Object.keys(baseObject)) {\n    if (key === \"__proto__\" || key === \"constructor\") {\n      continue;\n    }\n    const value = baseObject[key];\n    if (value === null || value === void 0) {\n      continue;\n    }\n    if (merger && merger(object, key, value, namespace)) {\n      continue;\n    }\n    if (Array.isArray(value) && Array.isArray(object[key])) {\n      object[key] = [...value, ...object[key]];\n    } else if (isPlainObject(value) && isPlainObject(object[key])) {\n      object[key] = _defu(\n        value,\n        object[key],\n        (namespace ? `${namespace}.` : \"\") + key.toString(),\n        merger\n      );\n    } else {\n      object[key] = value;\n    }\n  }\n  return object;\n}\nfunction createDefu(merger) {\n  return (...arguments_) => (\n    // eslint-disable-next-line unicorn/no-array-reduce\n    arguments_.reduce((p, c) => _defu(p, c, \"\", merger), {})\n  );\n}\nconst defu = createDefu();\nconst defuFn = createDefu((object, key, currentValue) => {\n  if (object[key] !== void 0 && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\nconst defuArrayFn = createDefu((object, key, currentValue) => {\n  if (Array.isArray(object[key]) && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\n\nexport { createDefu, defu as default, defu, defuArrayFn, defuFn };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/error.ts\nvar BetterFetchError = class extends Error {\n  constructor(status, statusText, error) {\n    super(statusText || status.toString(), {\n      cause: error\n    });\n    this.status = status;\n    this.statusText = statusText;\n    this.error = error;\n    Error.captureStackTrace(this, this.constructor);\n  }\n};\n\n// src/plugins.ts\nvar initializePlugins = async (url, options) => {\n  var _a, _b, _c, _d, _e, _f;\n  let opts = options || {};\n  const hooks = {\n    onRequest: [options == null ? void 0 : options.onRequest],\n    onResponse: [options == null ? void 0 : options.onResponse],\n    onSuccess: [options == null ? void 0 : options.onSuccess],\n    onError: [options == null ? void 0 : options.onError],\n    onRetry: [options == null ? void 0 : options.onRetry]\n  };\n  if (!options || !(options == null ? void 0 : options.plugins)) {\n    return {\n      url,\n      options: opts,\n      hooks\n    };\n  }\n  for (const plugin of (options == null ? void 0 : options.plugins) || []) {\n    if (plugin.init) {\n      const pluginRes = await ((_a = plugin.init) == null ? void 0 : _a.call(plugin, url.toString(), options));\n      opts = pluginRes.options || opts;\n      url = pluginRes.url;\n    }\n    hooks.onRequest.push((_b = plugin.hooks) == null ? void 0 : _b.onRequest);\n    hooks.onResponse.push((_c = plugin.hooks) == null ? void 0 : _c.onResponse);\n    hooks.onSuccess.push((_d = plugin.hooks) == null ? void 0 : _d.onSuccess);\n    hooks.onError.push((_e = plugin.hooks) == null ? void 0 : _e.onError);\n    hooks.onRetry.push((_f = plugin.hooks) == null ? void 0 : _f.onRetry);\n  }\n  return {\n    url,\n    options: opts,\n    hooks\n  };\n};\n\n// src/retry.ts\nvar LinearRetryStrategy = class {\n  constructor(options) {\n    this.options = options;\n  }\n  shouldAttemptRetry(attempt, response) {\n    if (this.options.shouldRetry) {\n      return Promise.resolve(\n        attempt < this.options.attempts && this.options.shouldRetry(response)\n      );\n    }\n    return Promise.resolve(attempt < this.options.attempts);\n  }\n  getDelay() {\n    return this.options.delay;\n  }\n};\nvar ExponentialRetryStrategy = class {\n  constructor(options) {\n    this.options = options;\n  }\n  shouldAttemptRetry(attempt, response) {\n    if (this.options.shouldRetry) {\n      return Promise.resolve(\n        attempt < this.options.attempts && this.options.shouldRetry(response)\n      );\n    }\n    return Promise.resolve(attempt < this.options.attempts);\n  }\n  getDelay(attempt) {\n    const delay = Math.min(\n      this.options.maxDelay,\n      this.options.baseDelay * 2 ** attempt\n    );\n    return delay;\n  }\n};\nfunction createRetryStrategy(options) {\n  if (typeof options === \"number\") {\n    return new LinearRetryStrategy({\n      type: \"linear\",\n      attempts: options,\n      delay: 1e3\n    });\n  }\n  switch (options.type) {\n    case \"linear\":\n      return new LinearRetryStrategy(options);\n    case \"exponential\":\n      return new ExponentialRetryStrategy(options);\n    default:\n      throw new Error(\"Invalid retry strategy\");\n  }\n}\n\n// src/auth.ts\nvar getAuthHeader = async (options) => {\n  const headers = {};\n  const getValue = async (value) => typeof value === \"function\" ? await value() : value;\n  if (options == null ? void 0 : options.auth) {\n    if (options.auth.type === \"Bearer\") {\n      const token = await getValue(options.auth.token);\n      if (!token) {\n        return headers;\n      }\n      headers[\"authorization\"] = `Bearer ${token}`;\n    } else if (options.auth.type === \"Basic\") {\n      const [username, password] = await Promise.all([\n        getValue(options.auth.username),\n        getValue(options.auth.password)\n      ]);\n      if (!username || !password) {\n        return headers;\n      }\n      headers[\"authorization\"] = `Basic ${btoa(`${username}:${password}`)}`;\n    } else if (options.auth.type === \"Custom\") {\n      const [prefix, value] = await Promise.all([\n        getValue(options.auth.prefix),\n        getValue(options.auth.value)\n      ]);\n      if (!value) {\n        return headers;\n      }\n      headers[\"authorization\"] = `${prefix != null ? prefix : \"\"} ${value}`;\n    }\n  }\n  return headers;\n};\n\n// src/utils.ts\nvar JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\nfunction detectResponseType(request) {\n  const _contentType = request.headers.get(\"content-type\");\n  const textTypes = /* @__PURE__ */ new Set([\n    \"image/svg\",\n    \"application/xml\",\n    \"application/xhtml\",\n    \"application/html\"\n  ]);\n  if (!_contentType) {\n    return \"json\";\n  }\n  const contentType = _contentType.split(\";\").shift() || \"\";\n  if (JSON_RE.test(contentType)) {\n    return \"json\";\n  }\n  if (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n    return \"text\";\n  }\n  return \"blob\";\n}\nfunction isJSONParsable(value) {\n  try {\n    JSON.parse(value);\n    return true;\n  } catch (error) {\n    return false;\n  }\n}\nfunction isJSONSerializable(value) {\n  if (value === void 0) {\n    return false;\n  }\n  const t = typeof value;\n  if (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n    return true;\n  }\n  if (t !== \"object\") {\n    return false;\n  }\n  if (Array.isArray(value)) {\n    return true;\n  }\n  if (value.buffer) {\n    return false;\n  }\n  return value.constructor && value.constructor.name === \"Object\" || typeof value.toJSON === \"function\";\n}\nfunction jsonParse(text) {\n  try {\n    return JSON.parse(text);\n  } catch (error) {\n    return text;\n  }\n}\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\nfunction getFetch(options) {\n  if (options == null ? void 0 : options.customFetchImpl) {\n    return options.customFetchImpl;\n  }\n  if (typeof globalThis !== \"undefined\" && isFunction(globalThis.fetch)) {\n    return globalThis.fetch;\n  }\n  if (typeof window !== \"undefined\" && isFunction(window.fetch)) {\n    return window.fetch;\n  }\n  throw new Error(\"No fetch implementation found\");\n}\nfunction isPayloadMethod(method) {\n  if (!method) {\n    return false;\n  }\n  const payloadMethod = [\"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n  return payloadMethod.includes(method.toUpperCase());\n}\nfunction isRouteMethod(method) {\n  const routeMethod = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n  if (!method) {\n    return false;\n  }\n  return routeMethod.includes(method.toUpperCase());\n}\nasync function getHeaders(opts) {\n  const headers = new Headers(opts == null ? void 0 : opts.headers);\n  const authHeader = await getAuthHeader(opts);\n  for (const [key, value] of Object.entries(authHeader || {})) {\n    headers.set(key, value);\n  }\n  if (!headers.has(\"content-type\")) {\n    const t = detectContentType(opts == null ? void 0 : opts.body);\n    if (t) {\n      headers.set(\"content-type\", t);\n    }\n  }\n  return headers;\n}\nfunction getURL(url, options) {\n  if (url.startsWith(\"@\")) {\n    const m = url.toString().split(\"@\")[1].split(\"/\")[0];\n    if (methods.includes(m)) {\n      url = url.replace(`@${m}/`, \"/\");\n    }\n  }\n  let _url;\n  try {\n    if (url.startsWith(\"http\")) {\n      _url = url;\n    } else {\n      let baseURL = options == null ? void 0 : options.baseURL;\n      if (baseURL && !(baseURL == null ? void 0 : baseURL.endsWith(\"/\"))) {\n        baseURL = baseURL + \"/\";\n      }\n      if (url.startsWith(\"/\")) {\n        _url = new URL(url.substring(1), baseURL);\n      } else {\n        _url = new URL(url, options == null ? void 0 : options.baseURL);\n      }\n    }\n  } catch (e) {\n    if (e instanceof TypeError) {\n      if (!(options == null ? void 0 : options.baseURL)) {\n        throw TypeError(\n          `Invalid URL ${url}. Are you passing in a relative url but not setting the baseURL?`\n        );\n      }\n      throw TypeError(\n        `Invalid URL ${url}. Please validate that you are passing the correct input.`\n      );\n    }\n    throw e;\n  }\n  if (options == null ? void 0 : options.params) {\n    if (Array.isArray(options == null ? void 0 : options.params)) {\n      const params = (options == null ? void 0 : options.params) ? Array.isArray(options.params) ? `/${options.params.join(\"/\")}` : `/${Object.values(options.params).join(\"/\")}` : \"\";\n      _url = _url.toString().split(\"/:\")[0];\n      _url = `${_url.toString()}${params}`;\n    } else {\n      for (const [key, value] of Object.entries(options == null ? void 0 : options.params)) {\n        _url = _url.toString().replace(`:${key}`, String(value));\n      }\n    }\n  }\n  const __url = new URL(_url);\n  const queryParams = options == null ? void 0 : options.query;\n  if (queryParams) {\n    for (const [key, value] of Object.entries(queryParams)) {\n      __url.searchParams.append(key, String(value));\n    }\n  }\n  return __url;\n}\nfunction detectContentType(body) {\n  if (isJSONSerializable(body)) {\n    return \"application/json\";\n  }\n  return null;\n}\nfunction getBody(options) {\n  if (!(options == null ? void 0 : options.body)) {\n    return null;\n  }\n  const headers = new Headers(options == null ? void 0 : options.headers);\n  if (isJSONSerializable(options.body) && !headers.has(\"content-type\")) {\n    for (const [key, value] of Object.entries(options == null ? void 0 : options.body)) {\n      if (value instanceof Date) {\n        options.body[key] = value.toISOString();\n      }\n    }\n    return JSON.stringify(options.body);\n  }\n  if (headers.has(\"content-type\") && headers.get(\"content-type\") === \"application/x-www-form-urlencoded\") {\n    if (isJSONSerializable(options.body)) {\n      return new URLSearchParams(options.body).toString();\n    }\n    return options.body;\n  }\n  return options.body;\n}\nfunction getMethod(url, options) {\n  var _a;\n  if (options == null ? void 0 : options.method) {\n    return options.method.toUpperCase();\n  }\n  if (url.startsWith(\"@\")) {\n    const pMethod = (_a = url.split(\"@\")[1]) == null ? void 0 : _a.split(\"/\")[0];\n    if (!methods.includes(pMethod)) {\n      return (options == null ? void 0 : options.body) ? \"POST\" : \"GET\";\n    }\n    return pMethod.toUpperCase();\n  }\n  return (options == null ? void 0 : options.body) ? \"POST\" : \"GET\";\n}\nfunction getTimeout(options, controller) {\n  let abortTimeout;\n  if (!(options == null ? void 0 : options.signal) && (options == null ? void 0 : options.timeout)) {\n    abortTimeout = setTimeout(() => controller == null ? void 0 : controller.abort(), options == null ? void 0 : options.timeout);\n  }\n  return {\n    abortTimeout,\n    clearTimeout: () => {\n      if (abortTimeout) {\n        clearTimeout(abortTimeout);\n      }\n    }\n  };\n}\nfunction bodyParser(data, responseType) {\n  if (responseType === \"json\") {\n    return JSON.parse(data);\n  }\n  return data;\n}\nvar ValidationError = class _ValidationError extends Error {\n  constructor(issues, message) {\n    super(message || JSON.stringify(issues, null, 2));\n    this.issues = issues;\n    Object.setPrototypeOf(this, _ValidationError.prototype);\n  }\n};\nasync function parseStandardSchema(schema, input) {\n  const result = await schema[\"~standard\"].validate(input);\n  if (result.issues) {\n    throw new ValidationError(result.issues);\n  }\n  return result.value;\n}\n\n// src/create-fetch/schema.ts\nvar methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\"];\nvar createSchema = (schema, config) => {\n  return {\n    schema,\n    config\n  };\n};\n\n// src/create-fetch/index.ts\nvar applySchemaPlugin = (config) => ({\n  id: \"apply-schema\",\n  name: \"Apply Schema\",\n  version: \"1.0.0\",\n  async init(url, options) {\n    var _a, _b, _c, _d;\n    const schema = ((_b = (_a = config.plugins) == null ? void 0 : _a.find(\n      (plugin) => {\n        var _a2;\n        return ((_a2 = plugin.schema) == null ? void 0 : _a2.config) ? url.startsWith(plugin.schema.config.baseURL || \"\") || url.startsWith(plugin.schema.config.prefix || \"\") : false;\n      }\n    )) == null ? void 0 : _b.schema) || config.schema;\n    if (schema) {\n      let urlKey = url;\n      if ((_c = schema.config) == null ? void 0 : _c.prefix) {\n        if (urlKey.startsWith(schema.config.prefix)) {\n          urlKey = urlKey.replace(schema.config.prefix, \"\");\n          if (schema.config.baseURL) {\n            url = url.replace(schema.config.prefix, schema.config.baseURL);\n          }\n        }\n      }\n      if ((_d = schema.config) == null ? void 0 : _d.baseURL) {\n        if (urlKey.startsWith(schema.config.baseURL)) {\n          urlKey = urlKey.replace(schema.config.baseURL, \"\");\n        }\n      }\n      const keySchema = schema.schema[urlKey];\n      if (keySchema) {\n        let opts = __spreadProps(__spreadValues({}, options), {\n          method: keySchema.method,\n          output: keySchema.output\n        });\n        if (!(options == null ? void 0 : options.disableValidation)) {\n          opts = __spreadProps(__spreadValues({}, opts), {\n            body: keySchema.input ? await parseStandardSchema(keySchema.input, options == null ? void 0 : options.body) : options == null ? void 0 : options.body,\n            params: keySchema.params ? await parseStandardSchema(keySchema.params, options == null ? void 0 : options.params) : options == null ? void 0 : options.params,\n            query: keySchema.query ? await parseStandardSchema(keySchema.query, options == null ? void 0 : options.query) : options == null ? void 0 : options.query\n          });\n        }\n        return {\n          url,\n          options: opts\n        };\n      }\n    }\n    return {\n      url,\n      options\n    };\n  }\n});\nvar createFetch = (config) => {\n  async function $fetch(url, options) {\n    const opts = __spreadProps(__spreadValues(__spreadValues({}, config), options), {\n      plugins: [...(config == null ? void 0 : config.plugins) || [], applySchemaPlugin(config || {}), ...(options == null ? void 0 : options.plugins) || []]\n    });\n    if (config == null ? void 0 : config.catchAllError) {\n      try {\n        return await betterFetch(url, opts);\n      } catch (error) {\n        return {\n          data: null,\n          error: {\n            status: 500,\n            statusText: \"Fetch Error\",\n            message: \"Fetch related error. Captured by catchAllError option. See error property for more details.\",\n            error\n          }\n        };\n      }\n    }\n    return await betterFetch(url, opts);\n  }\n  return $fetch;\n};\n\n// src/url.ts\nfunction getURL2(url, option) {\n  const { baseURL, params, query } = option || {\n    query: {},\n    params: {},\n    baseURL: \"\"\n  };\n  let basePath = url.startsWith(\"http\") ? url.split(\"/\").slice(0, 3).join(\"/\") : baseURL || \"\";\n  if (url.startsWith(\"@\")) {\n    const m = url.toString().split(\"@\")[1].split(\"/\")[0];\n    if (methods.includes(m)) {\n      url = url.replace(`@${m}/`, \"/\");\n    }\n  }\n  if (!basePath.endsWith(\"/\")) basePath += \"/\";\n  let [path, urlQuery] = url.replace(basePath, \"\").split(\"?\");\n  const queryParams = new URLSearchParams(urlQuery);\n  for (const [key, value] of Object.entries(query || {})) {\n    if (value == null) continue;\n    let serializedValue;\n    if (typeof value === \"string\") {\n      serializedValue = value;\n    } else if (Array.isArray(value)) {\n      for (const val of value) {\n        queryParams.append(key, val);\n      }\n      continue;\n    } else {\n      serializedValue = JSON.stringify(value);\n    }\n    queryParams.set(key, serializedValue);\n  }\n  if (params) {\n    if (Array.isArray(params)) {\n      const paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n      for (const [index, key] of paramPaths.entries()) {\n        const value = params[index];\n        path = path.replace(key, value);\n      }\n    } else {\n      for (const [key, value] of Object.entries(params)) {\n        path = path.replace(`:${key}`, String(value));\n      }\n    }\n  }\n  path = path.split(\"/\").map(encodeURIComponent).join(\"/\");\n  if (path.startsWith(\"/\")) path = path.slice(1);\n  let queryParamString = queryParams.toString();\n  queryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\\+/g, \"%20\") : \"\";\n  if (!basePath.startsWith(\"http\")) {\n    return `${basePath}${path}${queryParamString}`;\n  }\n  const _url = new URL(`${path}${queryParamString}`, basePath);\n  return _url;\n}\n\n// src/fetch.ts\nvar betterFetch = async (url, options) => {\n  var _a, _b, _c, _d, _e, _f, _g, _h;\n  const {\n    hooks,\n    url: __url,\n    options: opts\n  } = await initializePlugins(url, options);\n  const fetch = getFetch(opts);\n  const controller = new AbortController();\n  const signal = (_a = opts.signal) != null ? _a : controller.signal;\n  const _url = getURL2(__url, opts);\n  const body = getBody(opts);\n  const headers = await getHeaders(opts);\n  const method = getMethod(__url, opts);\n  let context = __spreadProps(__spreadValues({}, opts), {\n    url: _url,\n    headers,\n    body,\n    method,\n    signal\n  });\n  for (const onRequest of hooks.onRequest) {\n    if (onRequest) {\n      const res = await onRequest(context);\n      if (typeof res === \"object\" && res !== null) {\n        context = res;\n      }\n    }\n  }\n  if (\"pipeTo\" in context && typeof context.pipeTo === \"function\" || typeof ((_b = options == null ? void 0 : options.body) == null ? void 0 : _b.pipe) === \"function\") {\n    if (!(\"duplex\" in context)) {\n      context.duplex = \"half\";\n    }\n  }\n  const { clearTimeout: clearTimeout2 } = getTimeout(opts, controller);\n  let response = await fetch(context.url, context);\n  clearTimeout2();\n  const responseContext = {\n    response,\n    request: context\n  };\n  for (const onResponse of hooks.onResponse) {\n    if (onResponse) {\n      const r = await onResponse(__spreadProps(__spreadValues({}, responseContext), {\n        response: ((_c = options == null ? void 0 : options.hookOptions) == null ? void 0 : _c.cloneResponse) ? response.clone() : response\n      }));\n      if (r instanceof Response) {\n        response = r;\n      } else if (typeof r === \"object\" && r !== null) {\n        response = r.response;\n      }\n    }\n  }\n  if (response.ok) {\n    const hasBody = context.method !== \"HEAD\";\n    if (!hasBody) {\n      return {\n        data: \"\",\n        error: null\n      };\n    }\n    const responseType = detectResponseType(response);\n    const successContext = {\n      data: null,\n      response,\n      request: context\n    };\n    if (responseType === \"json\" || responseType === \"text\") {\n      const text = await response.text();\n      const parser2 = (_d = context.jsonParser) != null ? _d : jsonParse;\n      successContext.data = await parser2(text);\n    } else {\n      successContext.data = await response[responseType]();\n    }\n    if (context == null ? void 0 : context.output) {\n      if (context.output && !context.disableValidation) {\n        successContext.data = await parseStandardSchema(\n          context.output,\n          successContext.data\n        );\n      }\n    }\n    for (const onSuccess of hooks.onSuccess) {\n      if (onSuccess) {\n        await onSuccess(__spreadProps(__spreadValues({}, successContext), {\n          response: ((_e = options == null ? void 0 : options.hookOptions) == null ? void 0 : _e.cloneResponse) ? response.clone() : response\n        }));\n      }\n    }\n    if (options == null ? void 0 : options.throw) {\n      return successContext.data;\n    }\n    return {\n      data: successContext.data,\n      error: null\n    };\n  }\n  const parser = (_f = options == null ? void 0 : options.jsonParser) != null ? _f : jsonParse;\n  const responseText = await response.text();\n  const isJSONResponse = isJSONParsable(responseText);\n  const errorObject = isJSONResponse ? await parser(responseText) : null;\n  const errorContext = {\n    response,\n    responseText,\n    request: context,\n    error: __spreadProps(__spreadValues({}, errorObject), {\n      status: response.status,\n      statusText: response.statusText\n    })\n  };\n  for (const onError of hooks.onError) {\n    if (onError) {\n      await onError(__spreadProps(__spreadValues({}, errorContext), {\n        response: ((_g = options == null ? void 0 : options.hookOptions) == null ? void 0 : _g.cloneResponse) ? response.clone() : response\n      }));\n    }\n  }\n  if (options == null ? void 0 : options.retry) {\n    const retryStrategy = createRetryStrategy(options.retry);\n    const _retryAttempt = (_h = options.retryAttempt) != null ? _h : 0;\n    if (await retryStrategy.shouldAttemptRetry(_retryAttempt, response)) {\n      for (const onRetry of hooks.onRetry) {\n        if (onRetry) {\n          await onRetry(responseContext);\n        }\n      }\n      const delay = retryStrategy.getDelay(_retryAttempt);\n      await new Promise((resolve) => setTimeout(resolve, delay));\n      return await betterFetch(url, __spreadProps(__spreadValues({}, options), {\n        retryAttempt: _retryAttempt + 1\n      }));\n    }\n  }\n  if (options == null ? void 0 : options.throw) {\n    throw new BetterFetchError(\n      response.status,\n      response.statusText,\n      isJSONResponse ? errorObject : responseText\n    );\n  }\n  return {\n    data: null,\n    error: __spreadProps(__spreadValues({}, errorObject), {\n      status: response.status,\n      statusText: response.statusText\n    })\n  };\n};\nexport {\n  BetterFetchError,\n  ValidationError,\n  applySchemaPlugin,\n  betterFetch,\n  bodyParser,\n  createFetch,\n  createRetryStrategy,\n  createSchema,\n  detectContentType,\n  detectResponseType,\n  getBody,\n  getFetch,\n  getHeaders,\n  getMethod,\n  getTimeout,\n  getURL,\n  initializePlugins,\n  isFunction,\n  isJSONParsable,\n  isJSONSerializable,\n  isPayloadMethod,\n  isRouteMethod,\n  jsonParse,\n  methods,\n  parseStandardSchema\n};\n//# sourceMappingURL=index.js.map","import { getBaseURL } from \"../utils/url.mjs\";\nimport { parseJSON } from \"./parser.mjs\";\nimport { redirectPlugin } from \"./fetch-plugins.mjs\";\nimport { getSessionAtom } from \"./session-atom.mjs\";\nimport { defu } from \"defu\";\nimport { createFetch } from \"@better-fetch/fetch\";\n//#region src/client/config.ts\nconst resolvePublicAuthUrl = (basePath) => {\n\tif (typeof process === \"undefined\") return void 0;\n\tconst path = basePath ?? \"/api/auth\";\n\tif (process.env.NEXT_PUBLIC_AUTH_URL) return process.env.NEXT_PUBLIC_AUTH_URL;\n\tif (typeof window === \"undefined\") {\n\t\tif (process.env.NEXTAUTH_URL) try {\n\t\t\treturn process.env.NEXTAUTH_URL;\n\t\t} catch {}\n\t\tif (process.env.VERCEL_URL) try {\n\t\t\tconst protocol = process.env.VERCEL_URL.startsWith(\"http\") ? \"\" : \"https://\";\n\t\t\treturn `${new URL(`${protocol}${process.env.VERCEL_URL}`).origin}${path}`;\n\t\t} catch {}\n\t}\n};\nconst getClientConfig = (options, loadEnv) => {\n\tconst isCredentialsSupported = \"credentials\" in Request.prototype;\n\tconst baseURL = getBaseURL(options?.baseURL, options?.basePath, void 0, loadEnv) ?? resolvePublicAuthUrl(options?.basePath) ?? \"/api/auth\";\n\tconst pluginsFetchPlugins = options?.plugins?.flatMap((plugin) => plugin.fetchPlugins).filter((pl) => pl !== void 0) || [];\n\tconst lifeCyclePlugin = {\n\t\tid: \"lifecycle-hooks\",\n\t\tname: \"lifecycle-hooks\",\n\t\thooks: {\n\t\t\tonSuccess: options?.fetchOptions?.onSuccess,\n\t\t\tonError: options?.fetchOptions?.onError,\n\t\t\tonRequest: options?.fetchOptions?.onRequest,\n\t\t\tonResponse: options?.fetchOptions?.onResponse\n\t\t}\n\t};\n\tconst { onSuccess: _onSuccess, onError: _onError, onRequest: _onRequest, onResponse: _onResponse, ...restOfFetchOptions } = options?.fetchOptions || {};\n\tconst $fetch = createFetch({\n\t\tbaseURL,\n\t\t...isCredentialsSupported ? { credentials: \"include\" } : {},\n\t\tmethod: \"GET\",\n\t\tjsonParser(text) {\n\t\t\tif (!text) return null;\n\t\t\treturn parseJSON(text, { strict: false });\n\t\t},\n\t\tcustomFetchImpl: fetch,\n\t\t...restOfFetchOptions,\n\t\tplugins: [\n\t\t\tlifeCyclePlugin,\n\t\t\t...restOfFetchOptions.plugins || [],\n\t\t\t...options?.disableDefaultFetchPlugins ? [] : [redirectPlugin],\n\t\t\t...pluginsFetchPlugins\n\t\t]\n\t});\n\tconst { $sessionSignal, session, broadcastSessionUpdate } = getSessionAtom($fetch, options);\n\tconst plugins = options?.plugins || [];\n\tlet pluginsActions = {};\n\tconst pluginsAtoms = {\n\t\t$sessionSignal,\n\t\tsession\n\t};\n\tconst pluginPathMethods = {\n\t\t\"/sign-out\": \"POST\",\n\t\t\"/revoke-sessions\": \"POST\",\n\t\t\"/revoke-other-sessions\": \"POST\",\n\t\t\"/delete-user\": \"POST\"\n\t};\n\tconst atomListeners = [{\n\t\tsignal: \"$sessionSignal\",\n\t\tmatcher(path) {\n\t\t\treturn path === \"/sign-out\" || path === \"/update-user\" || path === \"/update-session\" || path === \"/sign-up/email\" || path === \"/sign-in/email\" || path === \"/delete-user\" || path === \"/verify-email\" || path === \"/revoke-sessions\" || path === \"/revoke-session\" || path === \"/revoke-other-sessions\" || path === \"/change-email\" || path === \"/change-password\";\n\t\t},\n\t\tcallback(path) {\n\t\t\tif (path === \"/sign-out\") broadcastSessionUpdate(\"signout\");\n\t\t\telse if (path === \"/update-user\" || path === \"/update-session\") broadcastSessionUpdate(\"updateUser\");\n\t\t}\n\t}];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.getAtoms) Object.assign(pluginsAtoms, plugin.getAtoms?.($fetch));\n\t\tif (plugin.pathMethods) Object.assign(pluginPathMethods, plugin.pathMethods);\n\t\tif (plugin.atomListeners) atomListeners.push(...plugin.atomListeners);\n\t}\n\tconst $store = {\n\t\tnotify: (signal) => {\n\t\t\tpluginsAtoms[signal].set(!pluginsAtoms[signal].get());\n\t\t},\n\t\tlisten: (signal, listener) => {\n\t\t\tpluginsAtoms[signal].subscribe(listener);\n\t\t},\n\t\tatoms: pluginsAtoms\n\t};\n\tfor (const plugin of plugins) if (plugin.getActions) pluginsActions = defu(plugin.getActions?.($fetch, $store, options) ?? {}, pluginsActions);\n\treturn {\n\t\tget baseURL() {\n\t\t\treturn baseURL;\n\t\t},\n\t\tpluginsActions,\n\t\tpluginsAtoms,\n\t\tpluginPathMethods,\n\t\tatomListeners,\n\t\t$fetch,\n\t\t$store\n\t};\n};\n//#endregion\nexport { getClientConfig };\n","//#region src/utils/is-atom.ts\nfunction isAtom(value) {\n\treturn typeof value === \"object\" && value !== null && \"get\" in value && typeof value.get === \"function\" && \"lc\" in value && typeof value.lc === \"number\";\n}\n//#endregion\nexport { isAtom };\n","import { isAtom } from \"../utils/is-atom.mjs\";\n//#region src/client/proxy.ts\nfunction getMethod(path, knownPathMethods, args) {\n\tconst method = knownPathMethods[path];\n\tconst { fetchOptions, query: _query, ...body } = args || {};\n\tif (method) return method;\n\tif (fetchOptions?.method) return fetchOptions.method;\n\tif (body && Object.keys(body).length > 0) return \"POST\";\n\treturn \"GET\";\n}\nfunction createDynamicPathProxy(routes, client, knownPathMethods, atoms, atomListeners) {\n\tfunction createProxy(path = []) {\n\t\treturn new Proxy(function() {}, {\n\t\t\tget(_, prop) {\n\t\t\t\tif (typeof prop !== \"string\") return;\n\t\t\t\tif (prop === \"then\" || prop === \"catch\" || prop === \"finally\") return;\n\t\t\t\tconst fullPath = [...path, prop];\n\t\t\t\tlet current = routes;\n\t\t\t\tfor (const segment of fullPath) if (current && typeof current === \"object\" && segment in current) current = current[segment];\n\t\t\t\telse {\n\t\t\t\t\tcurrent = void 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (typeof current === \"function\") return current;\n\t\t\t\tif (isAtom(current)) return current;\n\t\t\t\treturn createProxy(fullPath);\n\t\t\t},\n\t\t\tapply: async (_, __, args) => {\n\t\t\t\tconst routePath = \"/\" + path.map((segment) => segment.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)).join(\"/\");\n\t\t\t\tconst arg = args[0] || {};\n\t\t\t\tconst fetchOptions = args[1] || {};\n\t\t\t\tconst { query, fetchOptions: argFetchOptions, ...body } = arg;\n\t\t\t\tconst options = {\n\t\t\t\t\t...fetchOptions,\n\t\t\t\t\t...argFetchOptions\n\t\t\t\t};\n\t\t\t\tconst method = getMethod(routePath, knownPathMethods, arg);\n\t\t\t\treturn await client(routePath, {\n\t\t\t\t\t...options,\n\t\t\t\t\tbody: method === \"GET\" ? void 0 : {\n\t\t\t\t\t\t...body,\n\t\t\t\t\t\t...options?.body || {}\n\t\t\t\t\t},\n\t\t\t\t\tquery: query || options?.query,\n\t\t\t\t\tmethod,\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tawait options?.onSuccess?.(context);\n\t\t\t\t\t\tif (!atomListeners || options.disableSignal) return;\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t* We trigger listeners\n\t\t\t\t\t\t*/\n\t\t\t\t\t\tconst matches = atomListeners.filter((s) => s.matcher(routePath));\n\t\t\t\t\t\tif (!matches.length) return;\n\t\t\t\t\t\tconst visited = /* @__PURE__ */ new Set();\n\t\t\t\t\t\tfor (const match of matches) {\n\t\t\t\t\t\t\tconst signal = atoms[match.signal];\n\t\t\t\t\t\t\tif (!signal) return;\n\t\t\t\t\t\t\tif (visited.has(match.signal)) continue;\n\t\t\t\t\t\t\tvisited.add(match.signal);\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t* To avoid race conditions we set the signal in a setTimeout\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\tconst val = signal.get();\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tsignal.set(!val);\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t\tmatch.callback?.(routePath);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\treturn createProxy();\n}\n//#endregion\nexport { createDynamicPathProxy };\n","//#region src/utils/string.ts\nfunction capitalizeFirstLetter(str) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n//#endregion\nexport { capitalizeFirstLetter };\n","import { getClientConfig } from \"./config.mjs\";\nimport { createDynamicPathProxy } from \"./proxy.mjs\";\nimport { capitalizeFirstLetter } from \"@better-auth/core/utils/string\";\n//#region src/client/vanilla.ts\nfunction createAuthClient(options) {\n\tconst { pluginPathMethods, pluginsActions, pluginsAtoms, $fetch, atomListeners, $store } = getClientConfig(options);\n\tconst resolvedHooks = {};\n\tfor (const [key, value] of Object.entries(pluginsAtoms)) resolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;\n\treturn createDynamicPathProxy({\n\t\t...pluginsActions,\n\t\t...resolvedHooks,\n\t\t$fetch,\n\t\t$store\n\t}, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);\n}\n//#endregion\nexport { createAuthClient };\n","import { a as fetchJwtWithSession, c as CLI_CLIENT_ID } from \"./jwt-BVJ7dVm9.mjs\";\nimport { t as createJwtTokenCache } from \"./jwt-cache-4YqHn3jM.mjs\";\nimport { deviceAuthorizationClient } from \"better-auth/client/plugins\";\nimport { createAuthClient } from \"better-auth/client\";\n//#region src/cli.ts\nfunction createCliAuthClient(baseURL) {\n\treturn createAuthClient({\n\t\tbaseURL,\n\t\tplugins: [deviceAuthorizationClient()]\n\t});\n}\nfunction sleep(ms) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\nfunction isDeviceTokenError(value) {\n\treturn typeof value === \"object\" && value !== null && \"error\" in value && typeof value.error === \"string\";\n}\nasync function runDeviceLogin(options) {\n\tconst client = createCliAuthClient(options.baseURL);\n\tconst codeResult = await client.device.code({ client_id: options.clientId });\n\tif (codeResult.error) {\n\t\tconst message = \"error_description\" in codeResult.error ? codeResult.error.error_description : \"Failed to request device code\";\n\t\tthrow new Error(message);\n\t}\n\tconst { device_code: deviceCode, user_code: userCode, verification_uri: verificationUri, verification_uri_complete: verificationUriComplete, expires_in: expiresIn, interval } = codeResult.data;\n\tif (options.onCodes) options.onCodes({\n\t\tuserCode,\n\t\tverificationUri,\n\t\tverificationUriComplete\n\t});\n\telse if (options.openUrl) {\n\t\tprocess.stderr.write(\"Opening browser to authorize…\\n\");\n\t\toptions.openUrl(verificationUriComplete);\n\t} else process.stderr.write(`Visit ${verificationUriComplete} to authorize.\\n`);\n\tconst deadline = Date.now() + expiresIn * 1e3;\n\tlet pollIntervalMs = interval * 1e3;\n\twhile (Date.now() < deadline) {\n\t\tconst tokenResult = await client.device.token({\n\t\t\tgrant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n\t\t\tdevice_code: deviceCode,\n\t\t\tclient_id: options.clientId\n\t\t});\n\t\tif (!tokenResult.error) {\n\t\t\tconst token = tokenResult.data;\n\t\t\tconst organizationId = token.scope?.trim();\n\t\t\treturn {\n\t\t\t\taccessToken: token.access_token,\n\t\t\t\texpiresIn: token.expires_in,\n\t\t\t\torganizationId: organizationId || void 0\n\t\t\t};\n\t\t}\n\t\tconst errorPayload = tokenResult.error;\n\t\tconst oauthError = isDeviceTokenError(errorPayload.body) ? errorPayload.body : isDeviceTokenError(tokenResult.error) ? tokenResult.error : null;\n\t\tif (oauthError?.error === \"authorization_pending\") {\n\t\t\tawait sleep(pollIntervalMs);\n\t\t\tcontinue;\n\t\t}\n\t\tif (oauthError?.error === \"slow_down\") {\n\t\t\tpollIntervalMs += 5e3;\n\t\t\tawait sleep(pollIntervalMs);\n\t\t\tcontinue;\n\t\t}\n\t\tif (oauthError?.error === \"expired_token\") throw new Error(\"Device code expired. Run auth login again.\");\n\t\tif (oauthError?.error === \"access_denied\") throw new Error(\"Device authorization was denied.\");\n\t\tthrow new Error(oauthError?.error_description ?? errorPayload.message ?? \"Device login failed\");\n\t}\n\tthrow new Error(\"Device code expired. Run auth login again.\");\n}\nasync function getSessionWithBearer(baseURL, accessToken) {\n\tconst result = await createCliAuthClient(baseURL).getSession({ fetchOptions: { headers: { Authorization: `Bearer ${accessToken}` } } });\n\tconst user = result && \"user\" in result ? result.user : result && \"data\" in result && result.data && \"user\" in result.data ? result.data.user : void 0;\n\tif (typeof user !== \"object\" || user === null || !(\"id\" in user) || !(\"email\" in user) || !(\"name\" in user) || typeof user.id !== \"string\" || typeof user.email !== \"string\" || typeof user.name !== \"string\") return null;\n\treturn {\n\t\tid: user.id,\n\t\temail: user.email,\n\t\tname: user.name\n\t};\n}\nasync function getJwtWithBearer(baseURL, sessionToken) {\n\treturn fetchJwtWithSession(baseURL, { bearerToken: sessionToken });\n}\n//#endregion\nexport { CLI_CLIENT_ID, createCliAuthClient, createJwtTokenCache, getJwtWithBearer, getSessionWithBearer, runDeviceLogin };\n\n//# sourceMappingURL=cli.mjs.map","import { createJwtTokenCache, getJwtWithBearer, type JwtTokenCache } from \"@keystrokehq/auth/cli\";\n\nimport { getAccessToken } from \"./credentials\";\n\nconst caches = new Map<string, JwtTokenCache>();\n\nexport function clearCliJwtCache(): void {\n  caches.clear();\n}\n\nexport async function getCliJwt(platformUrl: string, force = false): Promise<string | undefined> {\n  if (!getAccessToken(platformUrl)) {\n    caches.delete(platformUrl);\n    return undefined;\n  }\n\n  let cache = caches.get(platformUrl);\n  if (!cache) {\n    cache = createJwtTokenCache(async () => {\n      const sessionToken = getAccessToken(platformUrl);\n      return sessionToken ? getJwtWithBearer(platformUrl, sessionToken) : null;\n    });\n    caches.set(platformUrl, cache);\n  }\n\n  return cache.get(force);\n}\n","import type { AuthStrategy } from \"@keystrokehq/sdk\";\nimport type Conf from \"conf\";\n\nimport { getAccessToken } from \"./credentials\";\nimport { getCliJwt } from \"./jwt-cache\";\nimport { getPlatformUrl, type CliConfig } from \"../config\";\n\n/** Returns API key, JWT bearer, or none auth for platform requests. */\nexport function resolveCliAuth(config: Conf<CliConfig>): AuthStrategy {\n  const apiKey = process.env.KEYSTROKE_API_KEY?.trim();\n  if (apiKey) {\n    return { type: \"apiKey\", getKey: () => apiKey };\n  }\n\n  const platformUrl = getPlatformUrl(config);\n  if (!getAccessToken(platformUrl)) {\n    return { type: \"none\" };\n  }\n\n  return {\n    type: \"bearer\",\n    getToken: () => getCliJwt(platformUrl),\n  };\n}\n","import { createKeystrokeClient, type KeystrokeClient } from \"@keystrokehq/sdk\";\nimport type Conf from \"conf\";\nimport { resolveCliAuth } from \"./auth/resolve-cli-auth\";\nimport type { CliConfig } from \"./config\";\n\nexport function createCliClient(\n  config: Conf<CliConfig>,\n  options: { baseUrl: string; platform?: boolean },\n): KeystrokeClient {\n  return createKeystrokeClient({\n    baseUrl: options.baseUrl,\n    auth: resolveCliAuth(config),\n    getActiveOrganizationId: options.platform\n      ? () => config.get(\"activeOrganizationId\") ?? null\n      : undefined,\n  });\n}\n","import ky, { isHTTPError } from \"ky\";\nimport { ACTIVE_ORG_HEADER, AcceptOrganizationInvitationResponseSchema, ActiveOrganizationResponseSchema, AgentSessionChatStateResponseSchema, AgentSessionListResponseSchema, AgentSummaryDetailResponseSchema, AgentSummaryListResponseSchema, AgentTriggerSummaryListResponseSchema, AppSlugAvailabilityResponseSchema, BindChannelBodySchema, CatalogActionDetailResponseSchema, CatalogActionsPageResponseSchema, CatalogAppDetailResponseSchema, CatalogAppsPageResponseSchema, ChannelAccountListResponseSchema, ChannelConnectionListResponseSchema, ChannelConnectionSchema, ChannelDirectoryListResponseSchema, ChannelPlatformSchema, CompleteProjectArtifactResponseSchema, ConnectAuthorizeUrlResponseSchema, CreateApiKeyRequestSchema, CreateApiKeyResponseSchema, CreateCredentialsRequestSchema, CreateCredentialsResponseSchema, CreateCustomAppRequestSchema, CreateCustomAppResponseSchema, CreateOrganizationRequestSchema, CreateOrganizationResponseSchema, CreateProjectArtifactResponseSchema, CreateProjectRequestSchema, CreateProjectResponseSchema, DEFAULT_ORGANIZATION_SIDEBAR_BRANDING, DEFAULT_USER_PREFERENCES, DeclineOrganizationInvitationResponseSchema, DownloadActiveProjectArtifactResponseSchema, DownloadActiveProjectSourceResponseSchema, ErrorResponseSchema, GatewayAttachmentRecordSchema, GetCredentialResponseSchema, GetCustomAppResponseSchema, GraphqlDiscoverResponseSchema, HealthResponseSchema, HistoryRunCancelResponseSchema, HistoryRunDetailResponseSchema, HistoryRunListQuerySchema, HistoryRunListResponseSchema, InviteOrganizationMembersRequestSchema, InviteOrganizationMembersResponseSchema, InviteProjectMembersRequestSchema, InviteProjectMembersResponseSchema, ListAgentMemoryFilesResponseSchema, ListAgentWorkspaceFilesResponseSchema, ListApiKeysResponseSchema, ListAppsResponseSchema, ListCredentialsResponseSchema, ListOrganizationInvitationsResponseSchema, ListOrganizationMembersResponseSchema, ListOrganizationsResponseSchema, ListProjectDeploymentsResponseSchema, ListProjectFilesResponseSchema, ListProjectMembersResponseSchema, ListProjectMetricsResponseSchema, ListProjectsResponseSchema, McpDiscoverResponseSchema, OpenApiDiscoverResponseSchema, OrganizationSidebarBrandingPatchSchema, OrganizationSidebarBrandingSchema, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, PresignChatAttachmentRequestSchema, PresignChatAttachmentResponseSchema, PresignOrgLogoRequestSchema, PresignOrgLogoResponseSchema, PresignProjectSourceRequestSchema, PresignProjectSourceResponseSchema, PresignUserAvatarRequestSchema, PresignUserAvatarResponseSchema, ProjectReachabilityResponseSchema, ProjectResponseSchema, ProjectSettingsResponseSchema, ProjectSlugAvailabilityResponseSchema, PromptInputSchema, QueuedAgentPromptResponseSchema, RecentResourceListResponseSchema, SkillSummaryDetailResponseSchema, SkillSummaryListResponseSchema, SlugAvailabilityResponseSchema, StartKeystrokeConnectionInputSchema, StartKeystrokeConnectionResultSchema, StartMcpOAuthConnectionInputSchema, StartMcpOAuthConnectionResultSchema, StartOAuthConnectionInputSchema, StartOAuthConnectionResultSchema, SubmitMarketingContactRequestSchema, SubmitTeamRequestRequestSchema, UpdateChannelBindingBodySchema, UpdateCredentialRequestSchema, UpdateOrganizationMemberRequestSchema, UpdateOrganizationMemberResponseSchema, UpdateOrganizationRequestSchema, UpdateProjectMemberRequestSchema, UpdateProjectMemberResponseSchema, UpdateProjectRequestSchema, UpdateProjectSettingsRequestSchema, UploadProjectSourceManifestRequestSchema, UploadProjectSourceResponseSchema, UpsertGatewayAttachmentBodySchema, UserAvatarPatchSchema, UserAvatarSchema, UserPreferencesPatchSchema, UserPreferencesSchema, WorkflowCanvasCredentialBindingsSchema, WorkflowCanvasRunSchema, WorkflowCanvasSchema, WorkflowRunInputsPutBodySchema, WorkflowRunInputsSchema, WorkflowRunResponseSchema, WorkflowSummaryDetailResponseSchema, WorkflowSummaryListResponseSchema, WorkspaceTriggerDetailSchema, WorkspaceTriggerFileSchema, WorkspaceTriggerListResponseSchema, WorkspaceTriggerOverviewSchema, WorkspaceTriggerRunListResponseSchema, WorkspaceWorkflowOverviewSchema, mergeOrganizationSidebarBranding, mergeUserPreferences, normalizeOrganizationSidebarBranding, normalizeUserPreferences } from \"@keystrokehq/shared\";\n//#region src/platform/active-organization.ts\nconst STORAGE_KEY = \"keystroke-active-org-id\";\nfunction readActiveOrganizationId() {\n\tif (typeof localStorage === \"undefined\") return null;\n\treturn localStorage.getItem(STORAGE_KEY);\n}\nfunction writeActiveOrganizationId(organizationId) {\n\tif (typeof localStorage === \"undefined\") return;\n\tif (organizationId) {\n\t\tlocalStorage.setItem(STORAGE_KEY, organizationId);\n\t\treturn;\n\t}\n\tlocalStorage.removeItem(STORAGE_KEY);\n}\n//#endregion\n//#region src/platform/auth.ts\nfunction normalizeBaseUrl(baseUrl) {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\nfunction applyAuthHeaders(request, auth, getToken) {\n\tif (!auth || auth.type === \"none\") return;\n\tif (auth.type === \"bearer\") {\n\t\tconst tokenPromise = getToken?.() ?? auth.getToken();\n\t\treturn Promise.resolve(tokenPromise).then((token) => {\n\t\t\tif (token) request.headers.set(\"Authorization\", `Bearer ${token}`);\n\t\t});\n\t}\n}\nfunction applyActiveOrganizationHeader(request, organizationId) {\n\tif (organizationId) request.headers.set(ACTIVE_ORG_HEADER, organizationId);\n}\n/** Browser client — sends JWT bearer tokens minted from the Better Auth session cookie. */\nfunction browserAuthStrategy(getToken) {\n\treturn {\n\t\ttype: \"bearer\",\n\t\tgetToken\n\t};\n}\n//#endregion\n//#region src/platform/errors.ts\nvar PlatformError = class extends Error {\n\tstatus;\n\tbody;\n\tcode;\n\tconstructor(message, status, body, code) {\n\t\tsuper(message);\n\t\tthis.name = \"PlatformError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t\tthis.code = code;\n\t}\n};\nasync function toPlatformError(error) {\n\tif (error instanceof PlatformError) return error;\n\tif (!isHTTPError(error)) return new PlatformError(error instanceof Error ? error.message : \"Request failed\", 0, null);\n\tconst status = error.response.status;\n\tconst body = error.data ?? null;\n\tconst parsed = ErrorResponseSchema.safeParse(body);\n\treturn new PlatformError(parsed.success ? parsed.data.error : `Request failed with status ${status}`, status, body, parsed.success ? parsed.data.code : void 0);\n}\n//#endregion\n//#region src/platform/resources/artifacts.ts\nfunction createArtifactsResource(http) {\n\treturn {\n\t\tasync create(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts`).json();\n\t\t\t\treturn CreateProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync complete(projectId, artifactId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/complete`).json();\n\t\t\t\treturn CompleteProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Ask which source blobs are missing and get presigned PUTs for them. */\n\t\tasync presignSource(projectId, artifactId, blobs) {\n\t\t\tconst body = PresignProjectSourceRequestSchema.parse({ blobs });\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/source/presign`, { json: body }).json();\n\t\t\t\treturn PresignProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Finalize the deploy's source manifest (path -> hash tree + resource refs). */\n\t\tasync uploadManifest(projectId, artifactId, manifest) {\n\t\t\tconst body = UploadProjectSourceManifestRequestSchema.parse(manifest);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/source/manifest`, { json: body }).json();\n\t\t\t\treturn UploadProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Presigned GET for the project's currently active deploy artifact tarball. */\n\t\tasync downloadActive(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/active/download`).json();\n\t\t\t\treturn DownloadActiveProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Download all source files from the project's active deploy snapshot. */\n\t\tasync downloadActiveSource(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/active/source`).json();\n\t\t\t\treturn DownloadActiveProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Download the active artifact tarball bytes via the presigned URL. */\n\t\tasync downloadActiveArchive(projectId) {\n\t\t\tconst { artifactId, downloadUrl } = await this.downloadActive(projectId);\n\t\t\tconst response = await fetch(downloadUrl);\n\t\t\tif (!response.ok) throw new Error(`Active artifact download failed (${response.status})`);\n\t\t\tconst bytes = await response.arrayBuffer();\n\t\t\treturn {\n\t\t\t\tartifactId,\n\t\t\t\tbuffer: Buffer.from(bytes)\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/deployments.ts\nfunction createDeploymentsResource(http) {\n\treturn { async listForProject(projectId) {\n\t\ttry {\n\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/deployments`).json();\n\t\t\treturn ListProjectDeploymentsResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/gateway-attachments.ts\nfunction createGatewayAttachmentsResource(http) {\n\tconst projectPrefix = (projectId) => `/api/projects/${encodeURIComponent(projectId)}/gateways/slack/attachments`;\n\treturn { async upsertSlackAttachment(projectId, channelId, body) {\n\t\tconst payload = UpsertGatewayAttachmentBodySchema.parse(body);\n\t\ttry {\n\t\t\tconst data = await http.put(`${projectPrefix(projectId)}/${encodeURIComponent(channelId)}`, { json: payload }).json();\n\t\t\treturn GatewayAttachmentRecordSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/project-files.ts\nfunction createProjectFilesResource(http) {\n\treturn {\n\t\t/** File tree (no contents) for a project's active deploy; empty before first deploy. */\n\t\tasync listForProject(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/files`).json();\n\t\t\t\treturn ListProjectFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Lazily fetch a single file's contents by path for a specific deploy. */\n\t\tasync getContent(projectId, artifactId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/health.ts\nfunction createHealthResource(http) {\n\treturn { async check() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/health\").json();\n\t\t\treturn HealthResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/organizations.ts\nfunction createOrganizationsResource(http, options = {}) {\n\tasync function get(organizationId) {\n\t\ttry {\n\t\t\tconst data = await http.get(`/api/organizations/${organizationId}`).json();\n\t\t\tconst organization = ActiveOrganizationResponseSchema.parse(data);\n\t\t\tif (!organization) throw new Error(\"Organization was not returned\");\n\t\t\treturn organization;\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\tasync function update(input) {\n\t\tconst body = UpdateOrganizationRequestSchema.parse(input);\n\t\tconst organizationId = options.getActiveOrganizationId?.();\n\t\tif (!organizationId) throw new Error(\"No active organization\");\n\t\ttry {\n\t\t\tconst data = await http.patch(`/api/organizations/${organizationId}`, { json: body }).json();\n\t\t\tconst organization = ActiveOrganizationResponseSchema.parse(data);\n\t\t\tif (!organization) throw new Error(\"Active organization was not returned\");\n\t\t\treturn organization;\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\treturn {\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/organizations\").json();\n\t\t\t\treturn ListOrganizationsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tget,\n\t\tasync getActive() {\n\t\t\tconst organizationId = options.getActiveOrganizationId?.();\n\t\t\tif (!organizationId) return null;\n\t\t\ttry {\n\t\t\t\treturn await get(organizationId);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof PlatformError && (error.status === 401 || error.status === 403)) return null;\n\t\t\t\tif (isHTTPError(error) && (error.response.status === 401 || error.response.status === 403)) return null;\n\t\t\t\tthrow error instanceof PlatformError ? error : await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync setActive(input) {\n\t\t\tconst organizationId = input.organizationId.trim();\n\t\t\tif (!organizationId) throw new Error(\"Organization id is required\");\n\t\t\tconst membership = await get(organizationId);\n\t\t\toptions.onActiveOrganizationChange?.(organizationId);\n\t\t\treturn membership;\n\t\t},\n\t\tasync clearActive() {\n\t\t\toptions.onActiveOrganizationChange?.(null);\n\t\t},\n\t\tupdate,\n\t\tasync create(input) {\n\t\t\tconst body = CreateOrganizationRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/organizations\", { json: body }).json();\n\t\t\t\treturn CreateOrganizationResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkSlug(slug, slugOptions = {}) {\n\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\tif (slugOptions.excludeOrganizationId) searchParams.set(\"excludeOrganizationId\", slugOptions.excludeOrganizationId);\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/organizations/slug-available?${searchParams}`).json();\n\t\t\t\treturn SlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/agents.ts\nfunction listSearchParams(options) {\n\tconst params = {};\n\tconst projectId = options?.projectId?.trim();\n\tif (projectId) params.projectId = projectId;\n\tif (options?.admin) params.admin = \"true\";\n\treturn Object.keys(params).length > 0 ? params : void 0;\n}\nfunction createAgentsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/agents\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn AgentSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/agents/${encodeURIComponent(agentId)}`).json();\n\t\t\t\treturn AgentSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync cancelSession(sessionId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`api/agents/sessions/${encodeURIComponent(sessionId)}/cancel`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\tconst data = await response.json();\n\t\t\t\treturn HistoryRunCancelResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Prompting goes through the project-scoped runtime route\n\t\t* (`POST /api/projects/:projectId/agents/:slug`) so it reuses the runtime's\n\t\t* `requireProject` + `requireProjectMembership` auth — a user must belong to\n\t\t* the project to prompt its agents.\n\t\t*/\n\t\tasync prompt(projectId, agentSlug, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PromptInputSchema.parse(input);\n\t\t\t\tconst data = await (await http.post(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}`, { json: payload })).json();\n\t\t\t\treturn QueuedAgentPromptResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync presignAttachment(projectId, agentSlug, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PresignChatAttachmentRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/attachments/presign`, { json: payload }).json();\n\t\t\t\treturn PresignChatAttachmentResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getSessionState(projectId, sessionId, options) {\n\t\t\ttry {\n\t\t\t\tconst sinceSeq = options?.sinceSeq;\n\t\t\t\tconst searchParams = sinceSeq != null && sinceSeq > 0 ? { sinceSeq: String(sinceSeq) } : void 0;\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/sessions/${encodeURIComponent(sessionId)}/state`, { searchParams }).json();\n\t\t\t\tif (data == null) return null;\n\t\t\t\treturn AgentSessionChatStateResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listSessions(projectId, agentSlug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/sessions`).json();\n\t\t\t\treturn AgentSessionListResponseSchema.parse(data).items;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listTriggers(projectId, agentSlug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/triggers`).json();\n\t\t\t\treturn AgentTriggerSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Deletes an agent-owned ephemeral trigger; throws if it is not deletable (404). */\n\t\tasync deleteTrigger(projectId, agentSlug, triggerId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/triggers/${encodeURIComponent(triggerId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listMemoryFiles(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/agents/${encodeURIComponent(agentId)}/memory/files`).json();\n\t\t\t\treturn ListAgentMemoryFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getMemoryFileContent(agentId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`api/agents/${encodeURIComponent(agentId)}/memory/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Persistent agent workspace files under `/workspace/agent`. */\n\t\tasync listWorkspaceFiles(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/agents/${encodeURIComponent(agentId)}/workspace/files`).json();\n\t\t\t\treturn ListAgentWorkspaceFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Content for a path from {@link listWorkspaceFiles}. */\n\t\tasync getWorkspaceFileContent(agentId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`api/agents/${encodeURIComponent(agentId)}/workspace/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/projects.ts\nfunction createProjectsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/projects\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn ListProjectsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\tconst body = CreateProjectRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/projects\", { json: body }).json();\n\t\t\t\treturn CreateProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}`).json();\n\t\t\t\treturn ProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync update(projectId, patch) {\n\t\t\tconst body = UpdateProjectRequestSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/projects/${encodeURIComponent(projectId)}`, { json: body }).json();\n\t\t\t\treturn ProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync delete(projectId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/projects/${encodeURIComponent(projectId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkReachability(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/reachability`, { timeout: PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS }).json();\n\t\t\t\treturn ProjectReachabilityResponseSchema.parse(data).reachable;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkSlug(slug, options = {}) {\n\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\tif (options.excludeProjectId) searchParams.set(\"excludeProjectId\", options.excludeProjectId);\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/slug-available?${searchParams}`).json();\n\t\t\t\treturn ProjectSlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\nfunction createProjectMetricsResource(http) {\n\treturn { async list(options) {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/api/projects/metrics\", { searchParams: listSearchParams(options) }).json();\n\t\t\treturn ListProjectMetricsResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/workflows.ts\n/**\n* `platform.workflows` resource.\n*\n* Every method calls a real platform route: list/detail, file, run history,\n* run-inputs, canvas, overview, the canvas run overlay (`getCanvasRun`), the\n* credential overlay (`getCanvasCredentialBindings`), and manual `run`.\n*/\nfunction createWorkflowsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/workflows\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn WorkflowSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}`).json();\n\t\t\t\treturn WorkflowSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* LLM-generated overview (summary + guided-tour phases), content-hash cached\n\t\t* and served stale-while-revalidating; poll while `status` is \"generating\".\n\t\t*/\n\t\tasync getOverview(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/overview`).json();\n\t\t\t\treturn WorkspaceWorkflowOverviewSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* The workflow source file from the active deploy source snapshot. Takes the\n\t\t* workflow's `projectId`/`slug`/`sourcePath` (already on `WorkflowSummary`) so\n\t\t* it resolves the file in two calls (project files + content) instead of\n\t\t* re-fetching the workflow detail the caller already holds.\n\t\t*/\n\t\tasync getFile(input) {\n\t\t\ttry {\n\t\t\t\tconst filesData = await http.get(`api/projects/${encodeURIComponent(input.projectId)}/files`).json();\n\t\t\t\tconst files = ListProjectFilesResponseSchema.parse(filesData);\n\t\t\t\tif (!files.artifactId) return null;\n\t\t\t\tconst path = files.resources.workflows.find((entry) => entry.slug === input.slug)?.path ?? input.sourcePath;\n\t\t\t\tif (!path) return null;\n\t\t\t\treturn {\n\t\t\t\t\tpath,\n\t\t\t\t\tcontents: await http.get(`api/projects/${encodeURIComponent(input.projectId)}/artifacts/${encodeURIComponent(files.artifactId)}/files/content`, { searchParams: { path } }).text()\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Read-only canvas graph (deterministic AST skeleton + manifest trigger\n\t\t* nodes) plus the gated code-block annotation layer. Returns null when the\n\t\t* active deploy has no flow graph for the workflow (404).\n\t\t*/\n\t\tasync getCanvas(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowCanvasSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Live credential overlay: canvas node id → how each of its step's credential\n\t\t* requirements currently resolves (bound instance + policy). Resolved per view\n\t\t* (not cached) since credential state changes without a redeploy.\n\t\t*/\n\t\tasync getCanvasCredentialBindings(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas/credentials`).json();\n\t\t\t\treturn WorkflowCanvasCredentialBindingsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Per-node run state for a finished/live run, projected onto the canvas skeleton. */\n\t\tasync getCanvasRun(workflowId, runId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas/runs/${encodeURIComponent(runId)}`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowCanvasRunSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listCanvasRuns(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/runs`).json();\n\t\t\t\treturn HistoryRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRunInputs(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/run-inputs`).json();\n\t\t\t\treturn WorkflowRunInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync saveRunInputs(workflowId, values) {\n\t\t\ttry {\n\t\t\t\tconst body = WorkflowRunInputsPutBodySchema.parse(values);\n\t\t\t\tconst data = await http.put(`api/workflows/${encodeURIComponent(workflowId)}/run-inputs`, { json: body }).json();\n\t\t\t\treturn WorkflowRunInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Manually start a workflow run from the dashboard. Validates the input\n\t\t* against the active deploy's request schema, enqueues the run, and returns\n\t\t* its id (surface the new run by refetching {@link listCanvasRuns}).\n\t\t*/\n\t\tasync run(workflowId, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/run`, { json: input }).json();\n\t\t\t\treturn WorkflowRunResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync cancelRun(runId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`api/workflows/runs/${encodeURIComponent(runId)}/cancel`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\tconst data = await response.json();\n\t\t\t\treturn HistoryRunCancelResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/skills.ts\nfunction createSkillsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/skills\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn SkillSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(skillId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/skills/${encodeURIComponent(skillId)}`).json();\n\t\t\t\treturn SkillSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/triggers.ts\nfunction listRunsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.triggerType) params.triggerType = query.triggerType;\n\treturn params;\n}\nfunction createTriggersResource(http) {\n\treturn {\n\t\t/** Triggers across the projects the caller can access in the active org. */\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/triggers\").json();\n\t\t\t\treturn WorkspaceTriggerListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}`).json();\n\t\t\t\treturn WorkspaceTriggerDetailSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tconst platformError = await toPlatformError(error);\n\t\t\t\tif (platformError.status === 404) return null;\n\t\t\t\tthrow platformError;\n\t\t\t}\n\t\t},\n\t\t/** LLM-generated markdown overview of the trigger (generated lazily on the worker). */\n\t\tasync getOverview(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/overview`).json();\n\t\t\t\treturn WorkspaceTriggerOverviewSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** The trigger source file. */\n\t\tasync getFile(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/file`).json();\n\t\t\t\treturn WorkspaceTriggerFileSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tconst platformError = await toPlatformError(error);\n\t\t\t\tif (platformError.status === 404) return null;\n\t\t\t\tthrow platformError;\n\t\t\t}\n\t\t},\n\t\t/** Every fire of the trigger (poll/webhook/cron), dispatched or not. */\n\t\tasync listRuns(triggerId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/runs`, { searchParams: listRunsSearchParams(query) }).json();\n\t\t\t\treturn WorkspaceTriggerRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateAttachment(triggerId, attachmentId, body) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`api/triggers/${encodeURIComponent(triggerId)}/attachments/${encodeURIComponent(attachmentId)}`, { json: body }).json();\n\t\t\t\treturn WorkspaceTriggerDetailSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/team-requests.ts\nfunction createTeamRequestsResource(http) {\n\treturn { async submit(input) {\n\t\tconst body = SubmitTeamRequestRequestSchema.parse(input);\n\t\ttry {\n\t\t\tawait http.post(\"/api/team-requests\", { json: body }).json();\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/marketing-contact.ts\nfunction createMarketingContactResource(http) {\n\treturn { async submit(input) {\n\t\tconst body = SubmitMarketingContactRequestSchema.parse(input);\n\t\ttry {\n\t\t\tawait http.post(\"/api/public/contact\", { json: body }).json();\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/recents.ts\nfunction createRecentsResource(http) {\n\treturn { \n\t/** Always the viewer's own recents, scoped to their project memberships. */\nasync list() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/api/recents\").json();\n\t\t\treturn RecentResourceListResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/credentials.ts\nfunction buildOAuthAuthorizeSearchParams(input) {\n\tconst params = {};\n\tconst scopes = input.scopes ?? [];\n\tif (scopes.length > 0) params.scopes = scopes.join(\",\");\n\tconst projectIds = input.projects ?? [];\n\tif (projectIds.length > 0) params.projects = projectIds.join(\",\");\n\tif (input.createOrganizationCredential) params.org = \"true\";\n\tif (input.createUserProvidedCredential) params.user = \"true\";\n\tconst label = input.label?.trim();\n\tif (label) params.label = label;\n\tconst credentialInstanceId = input.credentialInstanceId?.trim();\n\tif (credentialInstanceId) params.credentialInstanceId = credentialInstanceId;\n\treturn params;\n}\nfunction createCredentialsResource(http) {\n\treturn {\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/credentials\").json();\n\t\t\t\treturn ListCredentialsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(credentialId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/credentials/${encodeURIComponent(credentialId)}`).json();\n\t\t\t\treturn GetCredentialResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\tconst body = CreateCredentialsRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/credentials\", { json: body }).json();\n\t\t\t\treturn CreateCredentialsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync update(credentialId, patch) {\n\t\t\tconst body = UpdateCredentialRequestSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/credentials/${encodeURIComponent(credentialId)}`, { json: body }).json();\n\t\t\t\treturn GetCredentialResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync delete(credentialId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/credentials/${encodeURIComponent(credentialId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync startOAuthConnection(input) {\n\t\t\tconst body = StartOAuthConnectionInputSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/oauth/${encodeURIComponent(body.appId)}/authorize-url`, { searchParams: buildOAuthAuthorizeSearchParams(body) }).json();\n\t\t\t\tconst { url } = ConnectAuthorizeUrlResponseSchema.parse(data);\n\t\t\t\treturn StartOAuthConnectionResultSchema.parse({\n\t\t\t\t\tstatus: \"redirecting\",\n\t\t\t\t\tauthorizeUrl: url\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync startKeystrokeConnection(input) {\n\t\t\tconst body = StartKeystrokeConnectionInputSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/mcp/connections\", { json: body }).json();\n\t\t\t\treturn StartKeystrokeConnectionResultSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/apps.ts\nfunction parseCatalogData(schema, data) {\n\tconst parsed = schema.safeParse(data);\n\tif (parsed.success) return parsed.data;\n\tthrow new PlatformError(`Invalid catalog response: ${parsed.error.message}`, 502, data);\n}\nfunction catalogSearchParams(params) {\n\tconst searchParams = new URLSearchParams();\n\tfor (const [key, value] of Object.entries(params)) {\n\t\tif (value === void 0 || value === \"\") continue;\n\t\tsearchParams.set(key, String(value));\n\t}\n\treturn searchParams;\n}\nfunction createAppsResource(http) {\n\treturn {\n\t\tasync listCatalog() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/apps\").json();\n\t\t\t\treturn ListAppsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync searchCatalog(options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = catalogSearchParams({\n\t\t\t\t\tsearch: options.search,\n\t\t\t\t\tcategory: options.category,\n\t\t\t\t\tsort_by: options.sortBy,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\tcursor: options.cursor\n\t\t\t\t});\n\t\t\t\treturn parseCatalogData(CatalogAppsPageResponseSchema, await http.get(`/mcp/catalog/apps?${searchParams}`).json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getCatalogApp(slug) {\n\t\t\ttry {\n\t\t\t\treturn parseCatalogData(CatalogAppDetailResponseSchema, await http.get(`/mcp/catalog/apps/${encodeURIComponent(slug)}`).json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listCatalogActions(slug, options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = catalogSearchParams({\n\t\t\t\t\tsearch: options?.search,\n\t\t\t\t\tlimit: options?.limit,\n\t\t\t\t\tcursor: options?.cursor\n\t\t\t\t});\n\t\t\t\tconst query = searchParams.size > 0 ? `?${searchParams}` : \"\";\n\t\t\t\treturn parseCatalogData(CatalogActionsPageResponseSchema, await http.get(`/mcp/catalog/apps/${encodeURIComponent(slug)}/actions${query}`).json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync searchCatalogActions(options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = catalogSearchParams({\n\t\t\t\t\tsearch: options.search,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\tcursor: options.cursor\n\t\t\t\t});\n\t\t\t\treturn parseCatalogData(CatalogActionsPageResponseSchema, await http.get(`/mcp/catalog/actions?${searchParams}`).json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getCatalogAction(toolSlug) {\n\t\t\ttry {\n\t\t\t\treturn parseCatalogData(CatalogActionDetailResponseSchema, await http.get(`/mcp/catalog/actions/${encodeURIComponent(toolSlug)}`).json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkSlug(slug) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\t\tconst data = await http.get(`/api/apps/slug-available?${searchParams}`).json();\n\t\t\t\treturn AppSlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\ttry {\n\t\t\t\tconst body = CreateCustomAppRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(\"/api/apps\", { json: body }).json();\n\t\t\t\treturn CreateCustomAppResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(slug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/apps/${encodeURIComponent(slug)}`).json();\n\t\t\t\treturn GetCustomAppResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverMcp(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover\", { json: input }).json();\n\t\t\t\treturn McpDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverOpenApi(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover-openapi\", { json: input }).json();\n\t\t\t\treturn OpenApiDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverGraphql(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover-graphql\", { json: input }).json();\n\t\t\t\treturn GraphqlDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync startMcpOAuthConnection(slug, input) {\n\t\t\ttry {\n\t\t\t\tconst body = StartMcpOAuthConnectionInputSchema.parse({\n\t\t\t\t\t...input,\n\t\t\t\t\tappSlug: slug\n\t\t\t\t});\n\t\t\t\tconst data = await http.post(`/api/apps/${encodeURIComponent(slug)}/mcp/oauth/connections`, { json: body }).json();\n\t\t\t\treturn StartMcpOAuthConnectionResultSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/members.ts\nfunction createMembersResource(http) {\n\treturn {\n\t\tasync listOrganizationMembers() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/members\").json();\n\t\t\t\treturn ListOrganizationMembersResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync inviteOrganizationMembers(input) {\n\t\t\tconst body = InviteOrganizationMembersRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/members/invitations\", { json: body }).json();\n\t\t\t\treturn InviteOrganizationMembersResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateOrganizationMember(userId, input) {\n\t\t\tconst body = UpdateOrganizationMemberRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/members/${encodeURIComponent(userId)}`, { json: body }).json();\n\t\t\t\treturn UpdateOrganizationMemberResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync removeOrganizationMember(userId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/members/${encodeURIComponent(userId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listForProject(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/members`).json();\n\t\t\t\treturn ListProjectMembersResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync inviteToProject(input) {\n\t\t\tconst body = InviteProjectMembersRequestSchema.parse({\n\t\t\t\temails: input.emails,\n\t\t\t\trole: input.role\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(input.projectId)}/members`, { json: body }).json();\n\t\t\t\treturn InviteProjectMembersResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateProjectMember(projectId, userId, input) {\n\t\t\tconst body = UpdateProjectMemberRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(userId)}`, { json: body }).json();\n\t\t\t\treturn UpdateProjectMemberResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync removeProjectMember(projectId, userId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(userId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync leaveProject(projectId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/projects/${encodeURIComponent(projectId)}/members/me`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\nfunction createProjectSettingsResource(http) {\n\treturn {\n\t\tasync get(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/settings`).json();\n\t\t\t\treturn ProjectSettingsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync update(projectId, patch) {\n\t\t\tconst body = UpdateProjectSettingsRequestSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/projects/${encodeURIComponent(projectId)}/settings`, { json: body }).json();\n\t\t\t\treturn ProjectSettingsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/invitations.ts\nfunction createInvitationsResource(http) {\n\treturn {\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/invitations\").json();\n\t\t\t\treturn ListOrganizationInvitationsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync accept(invitationId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/invitations/${encodeURIComponent(invitationId)}/accept`).json();\n\t\t\t\treturn AcceptOrganizationInvitationResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync decline(invitationId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/invitations/${encodeURIComponent(invitationId)}/decline`).json();\n\t\t\t\tDeclineOrganizationInvitationResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/api-keys.ts\nfunction createApiKeysResource(http) {\n\treturn {\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/api-keys\").json();\n\t\t\t\treturn ListApiKeysResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\tconst body = CreateApiKeyRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/api-keys\", { json: body }).json();\n\t\t\t\treturn CreateApiKeyResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync revoke(apiKeyId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/api-keys/${encodeURIComponent(apiKeyId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/history.ts\nfunction createHistoryResource(http) {\n\treturn {\n\t\t/** Runs across projects the current user can access in the active org. */\n\t\tasync list(filters) {\n\t\t\ttry {\n\t\t\t\tconst { admin, ...queryFilters } = filters ?? {};\n\t\t\t\tconst parsedFilters = Object.keys(queryFilters).length ? HistoryRunListQuerySchema.parse(queryFilters) : void 0;\n\t\t\t\tconst searchParams = new URLSearchParams();\n\t\t\t\tif (parsedFilters?.project) searchParams.set(\"project\", parsedFilters.project);\n\t\t\t\tif (parsedFilters?.status) searchParams.set(\"status\", parsedFilters.status);\n\t\t\t\tif (parsedFilters?.kind) searchParams.set(\"kind\", parsedFilters.kind);\n\t\t\t\tif (admin) searchParams.set(\"admin\", \"true\");\n\t\t\t\tconst query = searchParams.toString();\n\t\t\t\tconst data = await http.get(query ? `api/history?${query}` : \"api/history\").json();\n\t\t\t\treturn HistoryRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(runId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`api/history/${encodeURIComponent(runId)}`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\tconst data = await response.json();\n\t\t\t\treturn HistoryRunDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/presign-upload.ts\nasync function presignPutAndFinalize(input) {\n\tconst contentType = input.file.type?.trim() || \"application/octet-stream\";\n\tconst uploadFailedMessage = input.uploadFailedMessage ?? \"Upload failed\";\n\ttry {\n\t\tconst { uploadUrl, storageKey } = await input.presign(contentType);\n\t\tif (!(await fetch(uploadUrl, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody: input.file,\n\t\t\theaders: { \"Content-Type\": contentType }\n\t\t})).ok) throw new Error(uploadFailedMessage);\n\t\treturn await input.finalize(storageKey);\n\t} catch (error) {\n\t\tif (error instanceof Error && error.message === uploadFailedMessage) throw error;\n\t\tthrow await input.toPlatformError(error);\n\t}\n}\n//#endregion\n//#region src/platform/resources/organization-sidebar-branding.ts\nfunction createOrganizationSidebarBrandingResource(http, options = {}) {\n\tfunction brandingPath() {\n\t\tconst organizationId = options.getActiveOrganizationId?.();\n\t\tif (!organizationId) throw new Error(\"No active organization\");\n\t\treturn `/api/organizations/${organizationId}/branding`;\n\t}\n\tasync function presignLogoUpload(variant, contentType) {\n\t\tconst body = PresignOrgLogoRequestSchema.parse({\n\t\t\tvariant,\n\t\t\tcontentType\n\t\t});\n\t\tconst data = await http.post(`${brandingPath()}/logo/presign`, { json: body }).json();\n\t\treturn PresignOrgLogoResponseSchema.parse(data);\n\t}\n\treturn {\n\t\tasync get() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(brandingPath()).json();\n\t\t\t\treturn OrganizationSidebarBrandingSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync uploadLogo(file, variant) {\n\t\t\tconst storageKeyField = variant === \"light\" ? \"logoLightStorageKey\" : \"logoDarkStorageKey\";\n\t\t\treturn presignPutAndFinalize({\n\t\t\t\tfile,\n\t\t\t\tpresign: (contentType) => presignLogoUpload(variant, contentType),\n\t\t\t\tfinalize: (storageKey) => this.update({\n\t\t\t\t\t[storageKeyField]: storageKey,\n\t\t\t\t\tcustomLogoEnabled: true,\n\t\t\t\t\tcustomLogoExplicitlyDisabled: false\n\t\t\t\t}),\n\t\t\t\tuploadFailedMessage: \"Logo upload failed\",\n\t\t\t\ttoPlatformError\n\t\t\t});\n\t\t},\n\t\tasync removeLogo(variant) {\n\t\t\tconst storageKeyField = variant === \"light\" ? \"logoLightStorageKey\" : \"logoDarkStorageKey\";\n\t\t\treturn this.update({ [storageKeyField]: null });\n\t\t},\n\t\tasync update(patch) {\n\t\t\tconst body = OrganizationSidebarBrandingPatchSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(brandingPath(), { json: body }).json();\n\t\t\t\treturn OrganizationSidebarBrandingSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/user-preferences.ts\nconst USER_PREFERENCES_PATH = \"/api/users/me/preferences\";\nfunction createUserPreferencesResource(http) {\n\treturn {\n\t\tasync get() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(USER_PREFERENCES_PATH).json();\n\t\t\t\treturn UserPreferencesSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync update(patch) {\n\t\t\tconst body = UserPreferencesPatchSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(USER_PREFERENCES_PATH, { json: body }).json();\n\t\t\t\treturn UserPreferencesSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/user-avatar.ts\nconst DEFAULT_USER_AVATAR = { url: null };\nfunction createUserAvatarResource(http) {\n\tasync function presignUpload(contentType) {\n\t\tconst body = PresignUserAvatarRequestSchema.parse({ contentType });\n\t\tconst data = await http.post(\"/api/users/me/avatar/presign\", { json: body }).json();\n\t\treturn PresignUserAvatarResponseSchema.parse(data);\n\t}\n\treturn {\n\t\tasync get() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/users/me/avatar\").json();\n\t\t\t\treturn UserAvatarSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync upload(file) {\n\t\t\treturn presignPutAndFinalize({\n\t\t\t\tfile,\n\t\t\t\tpresign: presignUpload,\n\t\t\t\tfinalize: (storageKey) => this.update({ storageKey }),\n\t\t\t\tuploadFailedMessage: \"Avatar upload failed\",\n\t\t\t\ttoPlatformError\n\t\t\t});\n\t\t},\n\t\tasync remove() {\n\t\t\treturn this.update({ storageKey: null });\n\t\t},\n\t\tasync update(patch) {\n\t\t\tconst body = UserAvatarPatchSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(\"/api/users/me/avatar\", { json: body }).json();\n\t\t\t\treturn UserAvatarSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/channels.ts\nconst PLATFORM_FALLBACK_DOMAINS = { slack: \"slack.com\" };\nfunction projectChannelPlatform(app) {\n\tif (!app.gateway) throw new Error(`App ${app.id} does not support gateway bindings`);\n\treturn ChannelPlatformSchema.parse({\n\t\tkey: app.id,\n\t\tname: app.name,\n\t\tappLogoId: app.id,\n\t\tfallbackDomain: PLATFORM_FALLBACK_DOMAINS[app.id] ?? `${app.id}.com`,\n\t\tdescription: app.integrationDescription,\n\t\ttagline: app.gateway.tagline ?? app.description,\n\t\tauthKind: app.authKind,\n\t\tcredentialFields: [],\n\t\tcapabilities: app.gateway.capabilities,\n\t\tsupportedModes: app.gateway.supportedModes,\n\t\tresourceNoun: app.gateway.resourceNoun,\n\t\twebhookPathHint: app.gateway.webhookPathHint,\n\t\tsupportsChannelDirectory: app.gateway.supportsChannelDirectory,\n\t\t...app.gateway.connectAppId ? { connectAppId: app.gateway.connectAppId } : {},\n\t\tdocsUrl: app.gateway.docsUrl\n\t});\n}\nfunction createChannelsResource(http) {\n\tconst projectPrefix = (projectId) => `/api/projects/${encodeURIComponent(projectId)}`;\n\tasync function listGatewayPlatforms() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/api/apps\").json();\n\t\t\treturn ListAppsResponseSchema.parse(data).filter((app) => app.gateway).map((app) => projectChannelPlatform(app));\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\treturn {\n\t\tasync listPlatforms() {\n\t\t\treturn listGatewayPlatforms();\n\t\t},\n\t\tasync listAccounts(projectId, platform) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`${projectPrefix(projectId)}/channels/${encodeURIComponent(platform)}/accounts`).json();\n\t\t\t\treturn ChannelAccountListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listForAgent(projectId, agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`${projectPrefix(projectId)}/agents/${encodeURIComponent(agentId)}/channels`).json();\n\t\t\t\treturn ChannelConnectionListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listChannels(projectId, platform, accountId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`${projectPrefix(projectId)}/channels/${encodeURIComponent(platform)}/directory`, { searchParams: { accountId } }).json();\n\t\t\t\treturn ChannelDirectoryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync bind(projectId, input) {\n\t\t\tconst body = BindChannelBodySchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`${projectPrefix(projectId)}/agents/${encodeURIComponent(input.agentId)}/channels/bindings`, { json: body }).json();\n\t\t\t\treturn ChannelConnectionSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateBinding(projectId, input) {\n\t\t\tconst body = UpdateChannelBindingBodySchema.parse({ patch: input.patch });\n\t\t\ttry {\n\t\t\t\tconst data = await http.put(`${projectPrefix(projectId)}/agents/${encodeURIComponent(input.agentId)}/channels/bindings/${encodeURIComponent(input.bindingId)}`, { json: body }).json();\n\t\t\t\treturn ChannelConnectionSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync removeBinding(projectId, input) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.delete(`${projectPrefix(projectId)}/agents/${encodeURIComponent(input.agentId)}/channels/bindings/${encodeURIComponent(input.bindingId)}`);\n\t\t\t\tif (response.status === 204) return null;\n\t\t\t\tconst data = await response.json();\n\t\t\t\treturn ChannelConnectionSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/index.ts\nconst JWT_RETRY_HEADER = \"x-keystroke-jwt-retry\";\nfunction createPlatformClient(options) {\n\tconst auth = options.auth ?? { type: \"none\" };\n\tconst base = normalizeBaseUrl(options.baseUrl);\n\tlet activeOrganizationId = options.getActiveOrganizationId?.() ?? null;\n\tconst setActiveOrganizationId = (organizationId) => {\n\t\tactiveOrganizationId = organizationId;\n\t\toptions.onActiveOrganizationChange?.(organizationId);\n\t};\n\tconst http = ky.create({\n\t\tprefix: base === \"\" ? void 0 : `${base}/`,\n\t\tcredentials: \"omit\",\n\t\thooks: {\n\t\t\tbeforeRequest: [({ request }) => {\n\t\t\t\tapplyActiveOrganizationHeader(request, activeOrganizationId);\n\t\t\t\treturn applyAuthHeaders(request, auth);\n\t\t\t}],\n\t\t\tafterResponse: [async ({ request, response, retryCount }) => {\n\t\t\t\tif (response.status !== 401 || auth.type !== \"bearer\" || !options.refreshBearerToken || retryCount > 0 || request.headers.get(JWT_RETRY_HEADER) === \"1\") return;\n\t\t\t\tconst refreshed = await options.refreshBearerToken();\n\t\t\t\tif (!refreshed) return;\n\t\t\t\tconst retryHeaders = new Headers(request.headers);\n\t\t\t\tretryHeaders.set(\"Authorization\", `Bearer ${refreshed}`);\n\t\t\t\tretryHeaders.set(JWT_RETRY_HEADER, \"1\");\n\t\t\t\treturn ky.retry({\n\t\t\t\t\trequest: new Request(request, { headers: retryHeaders }),\n\t\t\t\t\tcode: \"JWT_REFRESHED\"\n\t\t\t\t});\n\t\t\t}]\n\t\t},\n\t\t...options.ky\n\t});\n\treturn {\n\t\thttp,\n\t\thealth: createHealthResource(http),\n\t\torganizations: createOrganizationsResource(http, {\n\t\t\tonActiveOrganizationChange: setActiveOrganizationId,\n\t\t\tgetActiveOrganizationId: () => activeOrganizationId\n\t\t}),\n\t\tprojects: createProjectsResource(http),\n\t\tartifacts: createArtifactsResource(http),\n\t\tprojectSettings: createProjectSettingsResource(http),\n\t\tagents: createAgentsResource(http),\n\t\tworkflows: createWorkflowsResource(http),\n\t\tskills: createSkillsResource(http),\n\t\ttriggers: createTriggersResource(http),\n\t\tapps: createAppsResource(http),\n\t\tcredentials: createCredentialsResource(http),\n\t\thistory: createHistoryResource(http),\n\t\tdeployments: createDeploymentsResource(http),\n\t\tgatewayAttachments: createGatewayAttachmentsResource(http),\n\t\tprojectMetrics: createProjectMetricsResource(http),\n\t\tprojectFiles: createProjectFilesResource(http),\n\t\tchannels: createChannelsResource(http),\n\t\tmembers: createMembersResource(http),\n\t\tinvitations: createInvitationsResource(http),\n\t\tapiKeys: createApiKeysResource(http),\n\t\trecents: createRecentsResource(http),\n\t\tuserPreferences: createUserPreferencesResource(http),\n\t\tuserAvatar: createUserAvatarResource(http),\n\t\torganizationSidebarBranding: createOrganizationSidebarBrandingResource(http, { getActiveOrganizationId: () => activeOrganizationId }),\n\t\tteamRequests: createTeamRequestsResource(http),\n\t\tmarketingContact: createMarketingContactResource(http),\n\t\tgetActiveOrganizationId: () => activeOrganizationId,\n\t\tsetActiveOrganizationId\n\t};\n}\n/** Browser client for apps using JWT bearer auth minted from Better Auth sessions. */\nfunction createBrowserPlatformClient(options) {\n\treturn createPlatformClient({\n\t\t...options,\n\t\tbaseUrl: options.baseUrl ?? \"\",\n\t\tauth: browserAuthStrategy(options.getToken),\n\t\trefreshBearerToken: options.refreshBearerToken,\n\t\tgetActiveOrganizationId: readActiveOrganizationId,\n\t\tonActiveOrganizationChange: writeActiveOrganizationId\n\t});\n}\n//#endregion\nexport { DEFAULT_ORGANIZATION_SIDEBAR_BRANDING, DEFAULT_USER_AVATAR, DEFAULT_USER_PREFERENCES, PlatformError, browserAuthStrategy, createBrowserPlatformClient, createPlatformClient, mergeOrganizationSidebarBranding, mergeUserPreferences, normalizeBaseUrl, normalizeOrganizationSidebarBranding, normalizeUserPreferences, readActiveOrganizationId, toPlatformError, writeActiveOrganizationId };\n\n//# sourceMappingURL=index.mjs.map","import {\n  createPlatformClient,\n  type AuthStrategy as PlatformAuthStrategy,\n  type PlatformClient,\n} from \"@keystrokehq/sdk/platform\";\nimport type { AuthStrategy as CliAuthStrategy } from \"@keystrokehq/sdk\";\nimport type Conf from \"conf\";\n\nimport { resolveCliAuth } from \"./auth/resolve-cli-auth\";\nimport { getCliJwt } from \"./auth/jwt-cache\";\nimport { getPlatformUrl, type CliConfig } from \"./config\";\n\nfunction toPlatformAuth(auth: CliAuthStrategy): PlatformAuthStrategy {\n  if (auth.type === \"bearer\") {\n    return auth;\n  }\n\n  if (auth.type === \"apiKey\") {\n    return {\n      type: \"bearer\",\n      getToken: async () => auth.getKey(),\n    };\n  }\n\n  return { type: \"none\" };\n}\n\nexport function createCliPlatformClient(config: Conf<CliConfig>): PlatformClient {\n  const platformUrl = getPlatformUrl(config);\n  return createPlatformClient({\n    baseUrl: platformUrl,\n    auth: toPlatformAuth(resolveCliAuth(config)),\n    refreshBearerToken: () => getCliJwt(platformUrl, true),\n    getActiveOrganizationId: () => config.get(\"activeOrganizationId\") ?? null,\n    onActiveOrganizationChange: (organizationId) => {\n      if (organizationId) {\n        config.set(\"activeOrganizationId\", organizationId);\n      } else {\n        config.delete(\"activeOrganizationId\");\n      }\n    },\n  });\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport type { Project, UserOrganization } from \"@keystrokehq/shared\";\n\nconst UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport function looksLikeUuid(value: string): boolean {\n  return UUID_PATTERN.test(value);\n}\n\nexport function formatProjectLabel(project: Pick<Project, \"slug\">): string {\n  return project.slug;\n}\n\nexport async function resolveProjectRef(platform: PlatformClient, ref: string): Promise<Project> {\n  if (looksLikeUuid(ref)) {\n    try {\n      return await platform.projects.get(ref);\n    } catch (error) {\n      if (error instanceof PlatformError && error.status === 404) {\n        throw new Error(\n          `Project ${ref} not found in the active organization. Run \\`keystroke project list\\`, then \\`keystroke project link --project <slug>\\`.`,\n        );\n      }\n      throw error;\n    }\n  }\n\n  const projects = await platform.projects.list();\n  const match = projects.find((project) => project.slug === ref);\n  if (!match) {\n    throw new Error(\n      `Project \"${ref}\" not found in the active organization. Run \\`keystroke project list\\`.`,\n    );\n  }\n\n  return match;\n}\n\nexport function resolveOrganizationRef(\n  organizations: UserOrganization[],\n  ref: string,\n): UserOrganization {\n  const byId = organizations.find((entry) => entry.organization.id === ref);\n  if (byId) {\n    return byId;\n  }\n\n  const bySlug = organizations.find((entry) => entry.organization.slug === ref);\n  if (bySlug) {\n    return bySlug;\n  }\n\n  throw new Error(`Organization \"${ref}\" was not found or you do not have access`);\n}\n","import { select } from \"@inquirer/prompts\";\nimport type Conf from \"conf\";\nimport type { UserOrganization } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../config\";\nimport { getWebUrl } from \"../config\";\nimport { createCliPlatformClient } from \"../platform-client\";\nimport { resolveOrganizationRef } from \"../resolve-resource-ref\";\n\nexport type ActivateOrganizationOptions = {\n  organizationId?: string;\n  organizationRef?: string;\n  /** Organization active in the browser when device auth was approved. */\n  deviceOrganizationId?: string;\n  /** Last active organization stored in CLI config. */\n  storedOrganizationId?: string;\n};\n\nfunction formatOrganization(membership: UserOrganization): string {\n  return `${membership.organization.name} (${membership.role})`;\n}\n\nexport async function listOrganizations(config: Conf<CliConfig>): Promise<UserOrganization[]> {\n  const platform = createCliPlatformClient(config);\n  return platform.organizations.list();\n}\n\nexport async function activateOrganization(\n  config: Conf<CliConfig>,\n  organizationId: string,\n): Promise<UserOrganization> {\n  const platform = createCliPlatformClient(config);\n  const membership = await platform.organizations.setActive({ organizationId });\n  platform.setActiveOrganizationId(membership.organization.id);\n  return membership;\n}\n\nexport function resolveOrganizationIdForLogin(\n  organizations: UserOrganization[],\n  options: ActivateOrganizationOptions = {},\n): string {\n  if (options.organizationRef ?? options.organizationId) {\n    return resolveOrganizationRef(organizations, options.organizationRef ?? options.organizationId!)\n      .organization.id;\n  }\n\n  for (const candidateId of [options.deviceOrganizationId, options.storedOrganizationId]) {\n    const organizationId = candidateId?.trim();\n    if (organizationId && organizations.some((entry) => entry.organization.id === organizationId)) {\n      return organizationId;\n    }\n  }\n\n  if (organizations.length === 1) {\n    return organizations[0]!.organization.id;\n  }\n\n  return [...organizations].sort((left, right) =>\n    left.organization.slug.localeCompare(right.organization.slug),\n  )[0]!.organization.id;\n}\n\nasync function pickOrganization(\n  config: Conf<CliConfig>,\n  organizations: UserOrganization[],\n  organizationRef?: string,\n): Promise<UserOrganization> {\n  if (organizationRef) {\n    const membership = resolveOrganizationRef(organizations, organizationRef);\n    return activateOrganization(config, membership.organization.id);\n  }\n\n  if (!process.stdin.isTTY) {\n    const names = organizations.map((entry) => entry.organization.slug).join(\", \");\n    throw new Error(\n      `Multiple organizations found. Run \\`keystroke config use org <slug>\\`. Options: ${names}`,\n    );\n  }\n\n  const selectedId = await select({\n    message: \"Select an organization\",\n    choices: organizations.map((entry) => ({\n      name: formatOrganization(entry),\n      value: entry.organization.id,\n    })),\n  });\n\n  return activateOrganization(config, selectedId);\n}\n\nexport async function selectActiveOrganization(\n  config: Conf<CliConfig>,\n  options: ActivateOrganizationOptions = {},\n): Promise<UserOrganization> {\n  const organizations = await listOrganizations(config);\n\n  if (organizations.length === 0) {\n    throw new Error(`No organization found — create one at ${getWebUrl(config)}`);\n  }\n\n  if (organizations.length === 1) {\n    return activateOrganization(config, organizations[0]!.organization.id);\n  }\n\n  return pickOrganization(config, organizations, options.organizationRef ?? options.organizationId);\n}\n\nexport async function syncActiveOrganizationAfterLogin(\n  config: Conf<CliConfig>,\n  options: ActivateOrganizationOptions = {},\n): Promise<UserOrganization> {\n  const organizations = await listOrganizations(config);\n\n  if (organizations.length === 0) {\n    throw new Error(`No organization found — create one at ${getWebUrl(config)}`);\n  }\n\n  const organizationId = resolveOrganizationIdForLogin(organizations, {\n    organizationRef: options.organizationRef,\n    organizationId: options.organizationId,\n    deviceOrganizationId: options.deviceOrganizationId,\n    storedOrganizationId: config.get(\"activeOrganizationId\"),\n  });\n\n  return activateOrganization(config, organizationId);\n}\n\nexport async function ensureActiveOrganization(config: Conf<CliConfig>): Promise<void> {\n  const organizations = await listOrganizations(config);\n\n  if (organizations.length === 0) {\n    throw new Error(\n      \"No organization found. Run `keystroke auth login` after creating one in the dashboard.\",\n    );\n  }\n\n  const storedId = config.get(\"activeOrganizationId\");\n  if (storedId && organizations.some((entry) => entry.organization.id === storedId)) {\n    await activateOrganization(config, storedId);\n    return;\n  }\n\n  if (organizations.length === 1) {\n    await activateOrganization(config, organizations[0]!.organization.id);\n    return;\n  }\n\n  throw new Error(\n    \"No active organization. Run `keystroke auth login` or `keystroke config use org`.\",\n  );\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nfunction hasProjectLayout(dir: string): boolean {\n  return existsSync(join(dir, \"package.json\")) && existsSync(join(dir, \"src\", \"agents\"));\n}\n\nexport function resolveProjectRoot(fromDir = process.cwd()): string {\n  let dir = resolve(fromDir);\n\n  while (dir !== dirname(dir)) {\n    if (hasProjectLayout(dir)) {\n      return dir;\n    }\n\n    dir = dirname(dir);\n  }\n\n  if (hasProjectLayout(dir)) {\n    return dir;\n  }\n\n  throw new Error(\"Could not find keystroke project root (expected package.json and src/agents/)\");\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveProjectRoot } from \"./resolve-project-root\";\n\nlet loaded = false;\n\nexport function parseEnvFile(contents: string): Record<string, string> {\n  const values: Record<string, string> = {};\n\n  for (const line of contents.split(\"\\n\")) {\n    const trimmed = line.trim();\n    if (!trimmed || trimmed.startsWith(\"#\")) {\n      continue;\n    }\n\n    const eq = trimmed.indexOf(\"=\");\n    if (eq === -1) {\n      continue;\n    }\n\n    const key = trimmed.slice(0, eq).trim();\n    let value = trimmed.slice(eq + 1).trim();\n    if (\n      (value.startsWith('\"') && value.endsWith('\"')) ||\n      (value.startsWith(\"'\") && value.endsWith(\"'\"))\n    ) {\n      value = value.slice(1, -1);\n    }\n\n    values[key] = value;\n  }\n\n  return values;\n}\n\nexport function loadProjectEnv(fromDir = process.cwd()): void {\n  if (loaded) {\n    return;\n  }\n\n  loaded = true;\n\n  let envPath: string;\n  try {\n    envPath = join(resolveProjectRoot(fromDir), \".env\");\n  } catch {\n    return;\n  }\n\n  if (!existsSync(envPath)) {\n    return;\n  }\n\n  for (const [key, value] of Object.entries(parseEnvFile(readFileSync(envPath, \"utf8\")))) {\n    if (process.env[key] === undefined) {\n      process.env[key] = value;\n    }\n  }\n}\n\nexport function resetProjectEnvLoadedForTests(): void {\n  loaded = false;\n}\n","import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nimport { getCliConfigDir } from \"./config\";\n\nexport type DevSession = {\n  pid: number;\n  port: number;\n  root: string;\n  serverUrl: string;\n};\n\nexport function getDevSessionPath(configDir = getCliConfigDir()): string {\n  return join(configDir, \"dev-session.json\");\n}\n\nexport function isProcessAlive(pid: number): boolean {\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function writeDevSession(session: DevSession, configDir = getCliConfigDir()): void {\n  const path = getDevSessionPath(configDir);\n  mkdirSync(dirname(path), { recursive: true });\n  writeFileSync(path, `${JSON.stringify(session)}\\n`, \"utf8\");\n}\n\nexport function clearDevSession(configDir = getCliConfigDir()): void {\n  const path = getDevSessionPath(configDir);\n  if (existsSync(path)) {\n    unlinkSync(path);\n  }\n}\n\nexport function readDevSession(configDir = getCliConfigDir()): DevSession | undefined {\n  const path = getDevSessionPath(configDir);\n  if (!existsSync(path)) {\n    return undefined;\n  }\n\n  try {\n    const session = JSON.parse(readFileSync(path, \"utf8\")) as DevSession;\n    if (!isProcessAlive(session.pid)) {\n      clearDevSession(configDir);\n      return undefined;\n    }\n    return session;\n  } catch {\n    clearDevSession(configDir);\n    return undefined;\n  }\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\n/** Walk up from `fromDir` and return the directory containing `keystroke.config.ts`, if any. */\nexport function resolveKeystrokeConfigRoot(fromDir = process.cwd()): string | null {\n  let dir = resolve(fromDir);\n\n  while (dir !== dirname(dir)) {\n    if (existsSync(join(dir, KEYSTROKE_CONFIG))) {\n      return dir;\n    }\n\n    dir = dirname(dir);\n  }\n\n  if (existsSync(join(dir, KEYSTROKE_CONFIG))) {\n    return dir;\n  }\n\n  return null;\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\n\nexport type LinkedProjectConfig = {\n  project?: string;\n  organization?: string;\n};\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\n/** Remove line and block comments before scanning config literals. */\nexport function stripConfigComments(source: string): string {\n  return source.replace(/\\/\\/[^\\n]*/g, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n}\n\n/** Mask comments while preserving string length so match indices stay aligned. */\nexport function stripConfigCommentsPreservingLength(source: string): string {\n  return source\n    .replace(/\\/\\/[^\\n]*/g, (match) => \" \".repeat(match.length))\n    .replace(/\\/\\*[\\s\\S]*?\\*\\//g, (match) => \" \".repeat(match.length));\n}\n\nfunction readStringLiteral(source: string, key: \"project\" | \"organization\"): string | undefined {\n  const stripped = stripConfigComments(source);\n  const pattern = new RegExp(`\\\\b${key}\\\\s*:\\\\s*(['\"])([^'\"]*)\\\\1`);\n  const match = stripped.match(pattern);\n  return match?.[2]?.trim() || undefined;\n}\n\nexport function parseLinkedProjectConfig(source: string): LinkedProjectConfig {\n  const project = readStringLiteral(source, \"project\");\n  const organization = readStringLiteral(source, \"organization\");\n\n  return {\n    ...(project ? { project } : {}),\n    ...(organization ? { organization } : {}),\n  };\n}\n\n/** Read optional project/organization slugs from keystroke.config.ts without executing it. */\nexport function readLinkedProjectConfig(fromDir = process.cwd()): LinkedProjectConfig {\n  const root = resolveKeystrokeConfigRoot(fromDir);\n  if (!root) {\n    return {};\n  }\n\n  const source = readFileSync(join(root, KEYSTROKE_CONFIG), \"utf8\");\n  return parseLinkedProjectConfig(source);\n}\n","import type { ApiTargetOptions } from \"./resolve-api-target\";\n\nlet targetOptions: ApiTargetOptions = {};\n\nexport function setCliTargetOptions(options: ApiTargetOptions): void {\n  targetOptions = options;\n}\n\nexport function getCliTargetOptions(): ApiTargetOptions {\n  return targetOptions;\n}\n","import type Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { Project } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"./config\";\nimport { activateOrganization, listOrganizations } from \"./organization/active-organization\";\nimport { createCliPlatformClient } from \"./platform-client\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { resolveOrganizationRef, resolveProjectRef } from \"./resolve-resource-ref\";\nimport { getCliTargetOptions } from \"./target-options\";\n\nexport function resolveLinkedProjectRef(fromDir = process.cwd()): string | undefined {\n  return readLinkedProjectConfig(fromDir).project;\n}\n\n/** Activate the organization slug from keystroke.config.ts when present. */\nexport async function ensureLinkedOrganization(\n  config: Conf<CliConfig>,\n  fromDir = process.cwd(),\n): Promise<void> {\n  const linked = readLinkedProjectConfig(fromDir);\n  if (!linked.organization) {\n    return;\n  }\n\n  const organizations = await listOrganizations(config);\n  const membership = resolveOrganizationRef(organizations, linked.organization);\n  await activateOrganization(config, membership.organization.id);\n}\n\nexport async function resolveActiveProject(\n  config: Conf<CliConfig>,\n  platform?: PlatformClient,\n  fromDir = process.cwd(),\n): Promise<Project | undefined> {\n  const ref = getCliTargetOptions().projectId ?? readLinkedProjectConfig(fromDir).project;\n  if (!ref) {\n    return undefined;\n  }\n\n  await ensureLinkedOrganization(config, fromDir);\n\n  const client = platform ?? createCliPlatformClient(config);\n  return resolveProjectRef(client, ref);\n}\n\nexport async function resolveActiveProjectId(\n  config: Conf<CliConfig>,\n  fromDir = process.cwd(),\n): Promise<string | undefined> {\n  const project = await resolveActiveProject(config, undefined, fromDir);\n  return project?.id;\n}\n","import type Conf from \"conf\";\n\nimport { resolvePublicPlatformOrigin } from \"@keystrokehq/shared\";\n\nimport { getConfigDir, getEffectiveApiTarget, getPlatformUrl, type CliConfig } from \"./config\";\nimport { loadProjectEnv } from \"./project/load-project-env\";\n\n/** Standalone local server default project id — keep in sync with @keystrokehq/database. */\nconst DEFAULT_LOCAL_PROJECT_ID = \"default\";\nimport { readDevSession } from \"./dev-session\";\nimport { ensureLinkedOrganization } from \"./resolve-project-target\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { createCliPlatformClient } from \"./platform-client\";\nimport { formatProjectLabel, resolveProjectRef } from \"./resolve-resource-ref\";\n\nexport type ApiTargetOptions = {\n  projectId?: string;\n  local?: boolean;\n  /** Route to `/api/projects/:id` and require a project id. Default false. */\n  projectScoped?: boolean;\n  /** Org-level platform API; ignores `--project` and linked project config. */\n  orgScoped?: boolean;\n};\n\nexport const projectScopedTarget: ApiTargetOptions = { projectScoped: true };\n\nexport type ResolvedApiTarget = {\n  baseUrl: string;\n  projectId?: string;\n  mode: \"local\" | \"platform\";\n};\n\nfunction resolveLocalTargetFromOrigin(\n  origin: string,\n  options: ApiTargetOptions = {},\n): ResolvedApiTarget {\n  const base = origin.replace(/\\/+$/, \"\");\n  if (!options.projectScoped) {\n    return { baseUrl: base, mode: \"local\" };\n  }\n\n  const projectPathMatch = base.match(/^(.*\\/api\\/projects\\/([^/]+))$/);\n  if (projectPathMatch) {\n    return {\n      baseUrl: projectPathMatch[1]!,\n      projectId: projectPathMatch[2]!,\n      mode: \"local\",\n    };\n  }\n\n  return {\n    baseUrl: `${base}/api/projects/${DEFAULT_LOCAL_PROJECT_ID}`,\n    projectId: DEFAULT_LOCAL_PROJECT_ID,\n    mode: \"local\",\n  };\n}\n\nfunction resolveLocalTarget(options: ApiTargetOptions = {}): ResolvedApiTarget {\n  const origin = resolvePublicPlatformOrigin(process.env);\n  return resolveLocalTargetFromOrigin(origin, options);\n}\n\nfunction resolveOrgPlatformTarget(config: Conf<CliConfig>): ResolvedApiTarget {\n  return {\n    baseUrl: `${getPlatformUrl(config).replace(/\\/+$/, \"\")}/api`,\n    mode: \"platform\",\n  };\n}\n\nasync function resolvePlatformTarget(\n  config: Conf<CliConfig>,\n  projectRef: string,\n): Promise<ResolvedApiTarget> {\n  await ensureLinkedOrganization(config);\n\n  const platform = createCliPlatformClient(config);\n  let project;\n  try {\n    project = await resolveProjectRef(platform, projectRef);\n  } catch (error) {\n    if (error instanceof Error) {\n      throw error;\n    }\n    throw error;\n  }\n  if (project.status !== \"active\") {\n    throw new Error(`Project ${formatProjectLabel(project)} is not active (${project.status})`);\n  }\n\n  const platformUrl = getPlatformUrl(config).replace(/\\/+$/, \"\");\n  return {\n    baseUrl: `${platformUrl}/api/projects/${encodeURIComponent(project.id)}`,\n    projectId: project.id,\n    mode: \"platform\",\n  };\n}\n\nexport async function resolveApiTarget(\n  config: Conf<CliConfig>,\n  options: ApiTargetOptions = {},\n): Promise<ResolvedApiTarget> {\n  loadProjectEnv(process.cwd());\n\n  if (options.local) {\n    return resolveLocalTarget(options);\n  }\n\n  const devSession = readDevSession(getConfigDir(config));\n  if (devSession && getEffectiveApiTarget(config) !== \"platform\") {\n    return resolveLocalTargetFromOrigin(devSession.serverUrl, options);\n  }\n\n  if (options.orgScoped || options.projectScoped === false) {\n    if (getEffectiveApiTarget(config) === \"local\") {\n      return resolveLocalTarget(options);\n    }\n    return resolveOrgPlatformTarget(config);\n  }\n\n  if (options.projectId) {\n    return resolvePlatformTarget(config, options.projectId);\n  }\n\n  if (getEffectiveApiTarget(config) === \"local\") {\n    return resolveLocalTarget(options);\n  }\n\n  if (!options.projectScoped) {\n    return resolveOrgPlatformTarget(config);\n  }\n\n  const projectRef = options.projectId ?? readLinkedProjectConfig().project;\n  if (!projectRef) {\n    throw new Error(\n      \"No project selected. Pass `--project <slug>` or run `keystroke project link --project <slug>`.\",\n    );\n  }\n\n  return resolvePlatformTarget(config, projectRef);\n}\n","import type { ValidationErrorDetail } from \"@keystrokehq/shared\";\n\nfunction exampleValueFromValidationMessage(message: string): unknown {\n  if (/expected number/i.test(message)) {\n    return 0;\n  }\n  if (/expected string/i.test(message)) {\n    return \"\";\n  }\n  if (/expected boolean/i.test(message)) {\n    return false;\n  }\n  if (/expected array/i.test(message)) {\n    return [];\n  }\n  if (/expected object/i.test(message)) {\n    return {};\n  }\n\n  const enumMatch = message.match(/expected one of (.+)/i);\n  if (enumMatch) {\n    const firstOption = enumMatch[1]?.match(/\"([^\"]+)\"/);\n    if (firstOption?.[1]) {\n      return firstOption[1];\n    }\n  }\n\n  return null;\n}\n\nfunction setNestedExampleValue(input: Record<string, unknown>, path: string, value: unknown): void {\n  const parts = path.split(\".\").filter(Boolean);\n  if (parts.length === 0) {\n    return;\n  }\n\n  let current: Record<string, unknown> = input;\n  for (let index = 0; index < parts.length - 1; index += 1) {\n    const key = parts[index]!;\n    const next = current[key];\n    if (typeof next !== \"object\" || next === null || Array.isArray(next)) {\n      current[key] = {};\n    }\n    current = current[key] as Record<string, unknown>;\n  }\n\n  current[parts[parts.length - 1]!] = value;\n}\n\nexport function exampleInputFromValidationDetails(\n  details: ValidationErrorDetail[],\n): Record<string, unknown> {\n  const input: Record<string, unknown> = {};\n\n  for (const detail of details) {\n    if (!detail.path) {\n      continue;\n    }\n    setNestedExampleValue(input, detail.path, exampleValueFromValidationMessage(detail.message));\n  }\n\n  return input;\n}\n","import type { ErrorResponse } from \"@keystrokehq/shared\";\nimport { exampleInputFromValidationDetails } from \"./example-input\";\nimport type { CliUsageHint } from \"./types\";\n\n/** Turn a parsed API error body into terminal output. */\nexport function formatApiErrorMessage(\n  response: ErrorResponse,\n  fallback: string,\n  options?: CliUsageHint,\n): string {\n  const summary = response.message ?? response.error ?? fallback;\n\n  if (!response.details?.length) {\n    return summary;\n  }\n\n  const lines = response.details.map((detail) => {\n    const field = detail.path || \"(root)\";\n    return `  • ${field}: ${detail.message}`;\n  });\n  let message = `${summary}:\\n${lines.join(\"\\n\")}`;\n\n  if (options?.usage) {\n    const example = JSON.stringify(exampleInputFromValidationDetails(response.details));\n    const flag = options.usage.flag ?? \"--input\";\n    message += `\\n\\nTry: ${options.usage.command} ${flag} '${example}'`;\n  }\n\n  return message;\n}\n","import { parseErrorResponse } from \"@keystrokehq/shared\";\nimport { KeystrokeError } from \"@keystrokehq/sdk\";\nimport { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport { getAccessToken } from \"../auth/credentials\";\nimport { resolvePlatformUrlForWebUrl } from \"../resolve-platform-url\";\nimport type { CliErrorContext } from \"./types\";\nimport { formatApiErrorMessage } from \"./format-api-message\";\n\nfunction isUnreachableServerError(error: { message: string }): boolean {\n  return (\n    error.message.includes(\"network error\") ||\n    error.message.includes(\"ECONNREFUSED\") ||\n    error.message.includes(\"ENOTFOUND\") ||\n    error.message.includes(\"fetch failed\")\n  );\n}\n\nfunction unreachableTarget(context?: CliErrorContext): string | undefined {\n  return context?.serverUrl ?? context?.webUrl;\n}\n\nfunction unreachableServerMessage(targetUrl?: string): string {\n  const target = targetUrl ?? \"the keystroke server\";\n  return `Could not reach ${target}. Is the server running? (keystroke dev or keystroke start)`;\n}\n\ntype HttpClientError = {\n  status: number;\n  body: unknown;\n  message: string;\n};\n\nfunction authApiOrigin(context?: CliErrorContext): string | undefined {\n  if (context?.platformUrl) {\n    return context.platformUrl;\n  }\n\n  if (context?.webUrl) {\n    return resolvePlatformUrlForWebUrl(context.webUrl, {});\n  }\n\n  return undefined;\n}\n\nfunction formatHttpClientError(error: HttpClientError, context?: CliErrorContext): string {\n  if (error.status === 401) {\n    const origin = authApiOrigin(context);\n    if (origin && !getAccessToken(origin)) {\n      return \"Not logged in. Run `keystroke auth login` first.\";\n    }\n    return \"Authentication failed. Run `keystroke auth login` again.\";\n  }\n\n  if (error.status === 403) {\n    const parsed = parseErrorResponse(error.body);\n    if (parsed?.code === \"org_unverified\") {\n      return \"This organization is pending verification. Request access in the Keystroke dashboard.\";\n    }\n  }\n\n  if (error.status === 0) {\n    if (error.message && !isUnreachableServerError(error)) {\n      return error.message;\n    }\n    return unreachableServerMessage(unreachableTarget(context));\n  }\n\n  const parsed = parseErrorResponse(error.body);\n  if (parsed) {\n    return formatApiErrorMessage(parsed, error.message, context);\n  }\n\n  return error.message;\n}\n\nexport function formatCliError(\n  error: unknown,\n  fallback: string,\n  context?: CliErrorContext,\n): string {\n  if (error instanceof KeystrokeError || error instanceof PlatformError) {\n    return formatHttpClientError(error, context);\n  }\n\n  if (error instanceof Error) {\n    if (isUnreachableServerError(error)) {\n      return unreachableServerMessage(unreachableTarget(context));\n    }\n    return error.message;\n  }\n\n  return fallback;\n}\n","import type Conf from \"conf\";\nimport { createCliClient } from \"../client\";\nimport { createCliConfig, getWebUrl, type CliConfig } from \"../config\";\nimport { ensureActiveOrganization } from \"../organization/active-organization\";\nimport {\n  projectScopedTarget,\n  resolveApiTarget,\n  type ApiTargetOptions,\n} from \"../resolve-api-target\";\nimport { getCliTargetOptions } from \"../target-options\";\nimport type { CliContext, CliErrorContext } from \"./types\";\nimport { formatCliError } from \"./format-cli-error\";\n\n/**\n * Run a command that needs no project/org target or auth (e.g. public docs).\n * Builds config and formats errors, but skips `resolveApiTarget` / `ensureActiveOrganization`,\n * so it works logged-out from any directory.\n */\nexport async function runStandaloneCliCommand(\n  fallback: string,\n  fn: (ctx: { config: Conf<CliConfig> }) => Promise<void>,\n  errorContext?: CliErrorContext,\n): Promise<void> {\n  const config = createCliConfig();\n  try {\n    await fn({ config });\n  } catch (error) {\n    process.stderr.write(\n      `${formatCliError(error, fallback, { ...errorContext, webUrl: getWebUrl(config) })}\\n`,\n    );\n    process.exitCode = 1;\n  }\n}\n\nexport async function runProjectCliCommand(\n  fallback: string,\n  fn: (ctx: CliContext) => Promise<void>,\n  errorContext?: CliErrorContext,\n  targetOptions: ApiTargetOptions = {},\n): Promise<void> {\n  return runCliCommand(fallback, fn, errorContext, {\n    ...projectScopedTarget,\n    ...targetOptions,\n  });\n}\n\nexport async function runCliCommand(\n  fallback: string,\n  fn: (ctx: CliContext) => Promise<void>,\n  errorContext?: CliErrorContext,\n  targetOptions: ApiTargetOptions = {},\n): Promise<void> {\n  const config = createCliConfig();\n  const target = await resolveApiTarget(config, {\n    ...getCliTargetOptions(),\n    ...targetOptions,\n  });\n\n  if (target.mode === \"platform\") {\n    await ensureActiveOrganization(config);\n  }\n\n  const ctx: CliContext = {\n    config,\n    client: createCliClient(config, {\n      baseUrl: target.baseUrl,\n      platform: target.mode === \"platform\",\n    }),\n    serverUrl: target.baseUrl,\n    webUrl: getWebUrl(config),\n    apiTarget: target,\n  };\n\n  try {\n    await fn(ctx);\n  } catch (error) {\n    process.stderr.write(\n      `${formatCliError(error, fallback, {\n        ...errorContext,\n        serverUrl: ctx.serverUrl,\n        webUrl: ctx.webUrl,\n      })}\\n`,\n    );\n    process.exitCode = 1;\n  }\n}\n","/**\n * Binary name to show in help text and \"Try: ...\" hints. Always the published\n * `keystroke`, or the `keystroke-dev` wrapper (which sets KEYSTROKE_DEV) so\n * examples stay copy-pasteable while developing on keystroke itself.\n */\nexport function cliBinaryName(): string {\n  return process.env.KEYSTROKE_DEV ? \"keystroke-dev\" : \"keystroke\";\n}\n\n/** Parse a JSON CLI flag; throws a readable error on invalid input. */\nexport function parseJsonOption(value: string, flag: string): unknown {\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    throw new Error(`Invalid ${flag} JSON`);\n  }\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../config\";\nimport { createCliPlatformClient } from \"../platform-client\";\nimport { ensureActiveOrganization } from \"./active-organization\";\n\nexport async function requireAdminRole(config: Conf<CliConfig>): Promise<void> {\n  await ensureActiveOrganization(config);\n  const platform = createCliPlatformClient(config);\n  const active = await platform.organizations.getActive();\n  if (!active || (active.role !== \"owner\" && active.role !== \"admin\")) {\n    throw new Error(\"--admin requires org owner or admin\");\n  }\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { requireAdminRole } from \"../../organization/require-admin-role\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\n\nexport function registerAgentListCommand(agent: Command): void {\n  agent\n    .command(\"list\")\n    .description(\"List agents in the active organization\")\n    .option(\"--admin\", \"List all org resources (org owner or admin only)\")\n    .action((options: { admin?: boolean }) =>\n      runCliCommand(\n        \"List agents failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          if (options.admin) {\n            await requireAdminRole(config);\n          }\n          const projectId = await resolveActiveProjectId(config);\n          const result = await client.agents.list({\n            ...(projectId ? { projectId } : {}),\n            ...(options.admin ? { admin: true } : {}),\n          });\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../errors\";\n\nexport function registerAgentPromptCommand(agent: Command): void {\n  agent\n    .command(\"prompt\")\n    .description(\"Send a message to an agent (or follow up in an existing session)\")\n    .argument(\"<agentId>\", \"Agent key / route id\")\n    .requiredOption(\"--message <text>\", \"Message to send\")\n    .option(\"--session-id <id>\", \"Existing session id for follow-up\")\n    .action((agentId: string, options: { message: string; sessionId?: string }) =>\n      runProjectCliCommand(\"Agent prompt failed\", async ({ client }) => {\n        const result = await client.agents.prompt(agentId, {\n          message: options.message,\n          ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n}\n","import type Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { CreateProjectRequest, Project, UpdateProjectRequest } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { cliBinaryName } from \"../../errors/command-input\";\nimport { requireAdminRole } from \"../../organization/require-admin-role\";\nimport { selectActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { ensureLinkedOrganization } from \"../../resolve-project-target\";\n\nexport async function withActivePlatformClient(\n  config: Conf<CliConfig>,\n  fn: (platform: PlatformClient) => Promise<void>,\n  fromDir = process.cwd(),\n  applyLinkedOrganization = true,\n): Promise<void> {\n  if (applyLinkedOrganization) {\n    await ensureLinkedOrganization(config, fromDir);\n  }\n  const platform = createCliPlatformClient(config);\n  let active = await platform.organizations.getActive();\n  if (!active) {\n    active = await selectActiveOrganization(config);\n  }\n\n  platform.setActiveOrganizationId(active.organization.id);\n  await fn(platform);\n}\n\nfunction writeInactiveDeployHints(projects: Pick<Project, \"slug\" | \"status\">[]): void {\n  const bin = cliBinaryName();\n  for (const project of projects) {\n    if (project.status !== \"inactive\") {\n      continue;\n    }\n\n    process.stderr.write(\n      `Project ${formatProjectLabel(project)} is inactive. Deploy with: ${bin} project link --project ${formatProjectLabel(project)}, then ${bin} deploy\\n`,\n    );\n  }\n}\n\nexport async function runProjectList(\n  config: Conf<CliConfig>,\n  options: { admin?: boolean } = {},\n): Promise<void> {\n  if (options.admin) {\n    await requireAdminRole(config);\n  }\n\n  await withActivePlatformClient(config, async (platform) => {\n    const projects = await platform.projects.list(options.admin ? { admin: true } : undefined);\n    process.stdout.write(`${JSON.stringify({ projects }, null, 2)}\\n`);\n\n    if (projects.length === 0) {\n      const bin = cliBinaryName();\n      process.stderr.write(\n        `No projects yet. Create one with: ${bin} project create --name \"My project\"\\n`,\n      );\n      return;\n    }\n\n    writeInactiveDeployHints(projects);\n  });\n}\n\nexport async function runProjectMetrics(\n  config: Conf<CliConfig>,\n  options: { projectRef?: string; admin?: boolean } = {},\n): Promise<void> {\n  if (options.admin) {\n    await requireAdminRole(config);\n  }\n\n  await withActivePlatformClient(config, async (platform) => {\n    const metrics = await platform.projectMetrics.list(options.admin ? { admin: true } : undefined);\n    if (options.projectRef === undefined) {\n      process.stdout.write(`${JSON.stringify(metrics, null, 2)}\\n`);\n      return;\n    }\n\n    const project = await resolveProjectRef(platform, options.projectRef);\n    const output = Object.fromEntries(\n      Object.entries(metrics).filter(([projectId]) => projectId === project.id),\n    );\n    process.stdout.write(`${JSON.stringify(output, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectDeploymentsList(\n  config: Conf<CliConfig>,\n  options: { projectRef: string },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveProjectRef(platform, options.projectRef);\n    const deployments = await platform.deployments.listForProject(project.id);\n    process.stdout.write(`${JSON.stringify({ deployments }, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectCreate(\n  config: Conf<CliConfig>,\n  input: CreateProjectRequest,\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await platform.projects.create(input);\n    process.stdout.write(`${JSON.stringify({ project }, null, 2)}\\n`);\n    writeInactiveDeployHints([project]);\n  });\n}\n\nexport type UpdateProjectCommandInput = {\n  projectId: string;\n} & UpdateProjectRequest;\n\nexport async function runProjectUpdate(\n  config: Conf<CliConfig>,\n  input: UpdateProjectCommandInput,\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const { projectId, ...patch } = input;\n    const project = await platform.projects.update(projectId, patch);\n    process.stdout.write(`${JSON.stringify({ project }, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectDelete(config: Conf<CliConfig>, projectId: string): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    await platform.projects.delete(projectId);\n    process.stdout.write(`${JSON.stringify({ deleted: projectId }, null, 2)}\\n`);\n  });\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../project/run-project\";\n\nexport async function runAgentSessionCancel(\n  config: Conf<CliConfig>,\n  sessionId: string,\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const run = await platform.agents.cancelSession(sessionId);\n    process.stdout.write(`${JSON.stringify(run, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runProjectCliCommand } from \"../../errors\";\nimport { runAgentSessionCancel } from \"./cancel-session\";\n\nexport function registerAgentSessionsCommand(agent: Command): void {\n  const sessions = agent.command(\"sessions\").description(\"List and inspect agent sessions\");\n\n  sessions\n    .command(\"list\")\n    .description(\"List sessions for an agent\")\n    .argument(\"<agentId>\", \"Agent key / route id\")\n    .option(\"--limit <n>\", \"Page size (1–100)\", \"20\")\n    .option(\"--cursor <cursor>\", \"Pagination cursor from a previous page\")\n    .option(\"--status <status>\", \"Filter by status (running, completed, failed)\")\n    .option(\"--source <source>\", \"Filter by source (api, gateway)\")\n    .action((agentId: string, options: Record<string, string | undefined>) =>\n      runProjectCliCommand(\"List agent sessions failed\", async ({ client }) => {\n        const result = await client.agents.listSessions(agentId, {\n          limit: Number(options.limit),\n          ...(options.cursor ? { cursor: options.cursor } : {}),\n          ...(options.status\n            ? { status: options.status as \"running\" | \"completed\" | \"failed\" }\n            : {}),\n          ...(options.source ? { source: options.source as \"api\" | \"gateway\" } : {}),\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n\n  sessions\n    .command(\"get\")\n    .description(\"Get full details for an agent session\")\n    .argument(\"<agentId>\", \"Agent key / route id\")\n    .argument(\"<sessionId>\", \"Agent session id\")\n    .option(\"--include <parts>\", \"Comma-separated: gateway, messages, events, trace\")\n    .action((agentId: string, sessionId: string, options: { include?: string }) =>\n      runProjectCliCommand(\"Get agent session failed\", async ({ client }) => {\n        const result = await client.agents.getSession(agentId, sessionId, {\n          include: options.include,\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n\n  sessions\n    .command(\"cancel\")\n    .description(\"Cancel a running agent session\")\n    .argument(\"<sessionId>\", \"Agent session id\")\n    .action(async (sessionId: string) => {\n      const config = createCliConfig();\n      try {\n        await runAgentSessionCancel(config, sessionId);\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Cancel agent session failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { Command } from \"commander\";\nimport { registerAgentListCommand } from \"./list\";\nimport { registerAgentPromptCommand } from \"./prompt\";\nimport { registerAgentSessionsCommand } from \"./sessions\";\n\nexport function registerAgentCommand(program: Command): void {\n  const agent = program.command(\"agent\").description(\"Invoke and inspect agents\");\n\n  registerAgentListCommand(agent);\n  registerAgentPromptCommand(agent);\n  registerAgentSessionsCommand(agent);\n}\n","import type Conf from \"conf\";\nimport type { CreateApiKeyRequest } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../project/run-project\";\n\nexport async function runApiKeyList(config: Conf<CliConfig>): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const apiKeys = await platform.apiKeys.list();\n    process.stdout.write(`${JSON.stringify({ apiKeys }, null, 2)}\\n`);\n  });\n}\n\nexport async function runApiKeyCreate(\n  config: Conf<CliConfig>,\n  input: CreateApiKeyRequest,\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const apiKey = await platform.apiKeys.create(input);\n    process.stdout.write(`${JSON.stringify({ apiKey }, null, 2)}\\n`);\n  });\n}\n\nexport async function runApiKeyRevoke(config: Conf<CliConfig>, apiKeyId: string): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    await platform.apiKeys.revoke(apiKeyId);\n    process.stdout.write(`${JSON.stringify({ revoked: apiKeyId }, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runApiKeyCreate, runApiKeyList, runApiKeyRevoke } from \"./run-api-key\";\n\nasync function handleApiKeyError(fallback: string, action: () => Promise<void>): Promise<void> {\n  const config = createCliConfig();\n  try {\n    await action();\n  } catch (error) {\n    process.stderr.write(\n      `${formatCliError(error, fallback, {\n        serverUrl: getPlatformUrl(config),\n        webUrl: getWebUrl(config),\n      })}\\n`,\n    );\n    process.exitCode = 1;\n  }\n}\n\nexport function registerApiKeyCommand(program: Command): void {\n  const apiKey = program.command(\"api-key\").description(\"Manage org-scoped platform API keys\");\n\n  apiKey\n    .command(\"list\")\n    .description(\"List API keys in the active organization\")\n    .action(async () => {\n      const config = createCliConfig();\n      await handleApiKeyError(\"List API keys failed\", async () => {\n        await runApiKeyList(config);\n      });\n    });\n\n  apiKey\n    .command(\"create\")\n    .description(\"Create an API key in the active organization\")\n    .requiredOption(\"--name <name>\", \"API key name\")\n    .action(async (options: { name: string }) => {\n      const config = createCliConfig();\n      await handleApiKeyError(\"Create API key failed\", async () => {\n        await runApiKeyCreate(config, { name: options.name });\n      });\n    });\n\n  apiKey\n    .command(\"revoke\")\n    .description(\"Revoke an API key\")\n    .argument(\"<apiKeyId>\", \"API key id\")\n    .option(\"-y, --yes\", \"Skip confirmation prompt\")\n    .action(async (apiKeyId: string, options: { yes?: boolean }) => {\n      const config = createCliConfig();\n      await handleApiKeyError(\"Revoke API key failed\", async () => {\n        if (!options.yes) {\n          throw new Error(\"Pass --yes to confirm API key revocation\");\n        }\n        await runApiKeyRevoke(config, apiKeyId);\n      });\n    });\n}\n","import type {\n  CatalogActionDetail,\n  CatalogActionsPage,\n  CatalogAppDetail,\n  CatalogAppsPage,\n} from \"@keystrokehq/shared\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nexport async function runAppSearch(\n  client: PlatformClient,\n  query: string,\n  options?: { category?: string; limit?: number; cursor?: string },\n): Promise<CatalogAppsPage> {\n  const trimmed = query.trim();\n  if (!trimmed) {\n    throw new Error(\"Search query is required\");\n  }\n\n  return client.apps.searchCatalog({\n    search: trimmed,\n    category: options?.category,\n    limit: options?.limit,\n    cursor: options?.cursor,\n  });\n}\n\nexport async function runAppShow(client: PlatformClient, slug: string): Promise<CatalogAppDetail> {\n  const trimmed = slug.trim();\n  if (!trimmed) {\n    throw new Error(\"App slug is required\");\n  }\n\n  return client.apps.getCatalogApp(trimmed);\n}\n\nexport async function runAppActions(\n  client: PlatformClient,\n  options: { slug?: string; search?: string; limit?: number; cursor?: string },\n): Promise<CatalogActionsPage> {\n  const slug = options.slug?.trim();\n  const search = options.search?.trim();\n\n  if (slug) {\n    return client.apps.listCatalogActions(slug, {\n      search,\n      limit: options.limit,\n      cursor: options.cursor,\n    });\n  }\n\n  if (!search) {\n    throw new Error(\"App slug or --search is required\");\n  }\n\n  return client.apps.searchCatalogActions({\n    search,\n    limit: options.limit,\n    cursor: options.cursor,\n  });\n}\n\nexport async function runAppAction(\n  client: PlatformClient,\n  toolSlug: string,\n): Promise<CatalogActionDetail> {\n  const trimmed = toolSlug.trim();\n  if (!trimmed) {\n    throw new Error(\"Tool slug is required\");\n  }\n\n  return client.apps.getCatalogAction(trimmed);\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppAction } from \"./run-app-catalog\";\n\nexport function registerAppActionCommand(app: Command): void {\n  app\n    .command(\"action\")\n    .description(\"Show a Composio action schema from the live catalog\")\n    .argument(\"<tool-slug>\", \"Composio tool slug (e.g. GITHUB_CREATE_ISSUE)\")\n    .action((toolSlug) =>\n      runCliCommand(\n        \"App action failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const result = await runAppAction(client, toolSlug);\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppActions } from \"./run-app-catalog\";\n\nexport function registerAppActionsCommand(app: Command): void {\n  app\n    .command(\"actions [slug]\")\n    .description(\"List or search Composio actions (per app or globally with --search)\")\n    .option(\"--search <query>\", \"Search actions within the app or across all apps\")\n    .option(\"--limit <n>\", \"Page size\", (value) => Number.parseInt(value, 10))\n    .option(\"--cursor <cursor>\", \"Pagination cursor\")\n    .action((slug, options: { search?: string; limit?: number; cursor?: string }) =>\n      runCliCommand(\n        \"App actions failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const result = await runAppActions(client, { slug, ...options });\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { AppCredentialFields } from \"@keystrokehq/shared\";\n\nexport function parseCustomAppFieldFlag(value: string): {\n  key: string;\n  secret: boolean;\n  optional: boolean;\n} {\n  const parts = value\n    .split(\":\")\n    .map((part) => part.trim())\n    .filter(Boolean);\n  const key = parts[0];\n  if (!key || !/^[a-zA-Z][a-zA-Z0-9_]*$/.test(key)) {\n    throw new Error(`Invalid field key in --field ${JSON.stringify(value)}`);\n  }\n\n  const optional = parts.includes(\"optional\");\n  const secret = parts.includes(\"public\") ? false : parts.includes(\"secret\") || !optional;\n\n  return {\n    key,\n    secret,\n    optional,\n  };\n}\n\nexport function parseCustomAppFields(flags: string[]): AppCredentialFields {\n  const fields: AppCredentialFields = {};\n\n  for (const flag of flags) {\n    const parsed = parseCustomAppFieldFlag(flag);\n    fields[parsed.key] = {\n      ...(parsed.secret ? { secret: true } : {}),\n      ...(parsed.optional ? { optional: true } : {}),\n    };\n  }\n\n  if (Object.keys(fields).length === 0) {\n    throw new Error(\"At least one --field is required\");\n  }\n\n  if (!Object.values(fields).some((field) => field.optional !== true)) {\n    return fields;\n  }\n\n  const hasRequired = Object.values(fields).some((field) => field.optional !== true);\n  if (!hasRequired) {\n    throw new Error(\"At least one --field must be required (omit :optional)\");\n  }\n\n  return fields;\n}\n\nfunction collectValues(value: string, previous: string[]): string[] {\n  return [...previous, value];\n}\n\nexport { collectValues as collectAppFieldValues };\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { CreateCustomAppRequest, CustomAppDetail } from \"@keystrokehq/shared\";\n\nexport type AppCreatePreviewResult = {\n  preview: true;\n  request: CreateCustomAppRequest;\n  slug: Awaited<ReturnType<PlatformClient[\"apps\"][\"checkSlug\"]>>;\n};\n\nexport async function runAppCreate(\n  client: PlatformClient,\n  input: CreateCustomAppRequest,\n  options?: { preview?: boolean },\n): Promise<CustomAppDetail | AppCreatePreviewResult> {\n  if (options?.preview) {\n    const slug = await client.apps.checkSlug(input.slug);\n    return { preview: true, request: input, slug };\n  }\n\n  return client.apps.create(input);\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type {\n  AppAuthKind,\n  AppCredentialFields,\n  CreateCustomAppRequest,\n  CustomAppDetail,\n} from \"@keystrokehq/shared\";\nimport { deriveCustomAppDisplay, slugifyAppName } from \"@keystrokehq/shared\";\n\nexport type DiscoverAppSource = \"mcp\" | \"openapi\" | \"graphql\";\n\nexport type RunAppCreateFromUrlInput = {\n  source: DiscoverAppSource;\n  url: string;\n  name?: string;\n  slug?: string;\n  description?: string;\n  authKind?: AppAuthKind;\n  fields?: AppCredentialFields;\n  preview: boolean;\n};\n\nexport type AppCreatePreviewResult = {\n  preview: true;\n  detected: true;\n  request: CreateCustomAppRequest;\n  slug: Awaited<ReturnType<PlatformClient[\"apps\"][\"checkSlug\"]>>;\n};\n\nasync function discoverApp(client: PlatformClient, source: DiscoverAppSource, url: string) {\n  switch (source) {\n    case \"mcp\":\n      return client.apps.discoverMcp({ url });\n    case \"openapi\":\n      return client.apps.discoverOpenApi({ url });\n    case \"graphql\":\n      return client.apps.discoverGraphql({ url });\n  }\n}\n\nfunction buildCreateRequest(\n  input: RunAppCreateFromUrlInput,\n  template: Awaited<ReturnType<typeof discoverApp>>[\"template\"],\n): CreateCustomAppRequest {\n  const derived = deriveCustomAppDisplay(template, {\n    url: input.url,\n    mcp: input.source === \"mcp\",\n  });\n\n  const name = input.name?.trim() || derived.name;\n  const description = input.description?.trim() || derived.description;\n  const slug = input.slug?.trim() || slugifyAppName(name);\n  const authKind = input.authKind ?? template.authKind;\n\n  const request: CreateCustomAppRequest = {\n    name,\n    slug,\n    description,\n    source: input.source,\n    url: input.url,\n    authKind,\n    ...(input.fields\n      ? { fields: input.fields }\n      : template.credentialFields\n        ? { fields: template.credentialFields }\n        : {}),\n    ...(template.credentialScheme ? { credentialScheme: template.credentialScheme } : {}),\n    ...(authKind === \"oauth\" && template.oauthScopes.length > 0\n      ? { oauthScopes: template.oauthScopes }\n      : {}),\n  };\n\n  return request;\n}\n\nexport async function runAppCreateFromUrl(\n  client: PlatformClient,\n  input: RunAppCreateFromUrlInput,\n): Promise<CustomAppDetail | AppCreatePreviewResult> {\n  if (input.authKind && input.source !== \"mcp\") {\n    throw new Error(\"--auth is only supported with --mcp\");\n  }\n\n  const discovery = await discoverApp(client, input.source, input.url);\n\n  if (!discovery.detected) {\n    throw new Error(\n      input.source === \"mcp\"\n        ? \"Couldn't reach this MCP server. Check the URL and try again.\"\n        : input.source === \"openapi\"\n          ? \"Couldn't read this OpenAPI spec. Check the URL and try again.\"\n          : \"Couldn't introspect this GraphQL endpoint. Check the URL and try again.\",\n    );\n  }\n\n  const request = buildCreateRequest(input, discovery.template);\n\n  if (input.preview) {\n    const slug = await client.apps.checkSlug(request.slug);\n    return { preview: true, detected: true, request, slug };\n  }\n\n  return client.apps.create(request);\n}\n","import type { Command } from \"commander\";\nimport type { AppAuthKind } from \"@keystrokehq/shared\";\nimport { slugifyAppName } from \"@keystrokehq/shared\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { collectAppFieldValues, parseCustomAppFields } from \"./parse-custom-app-fields\";\nimport { runAppCreate } from \"./run-app-create\";\nimport { runAppCreateFromUrl, type DiscoverAppSource } from \"./run-app-create-from-url\";\n\ntype AppCreateOptions = {\n  name?: string;\n  slug?: string;\n  description?: string;\n  field: string[];\n  mcp?: string;\n  openapi?: string;\n  graphql?: string;\n  auth?: string;\n  preview?: boolean;\n};\n\nfunction resolveDiscoverSource(options: AppCreateOptions): {\n  source: DiscoverAppSource;\n  url: string;\n} | null {\n  const sources = [\n    options.mcp ? { source: \"mcp\" as const, url: options.mcp } : null,\n    options.openapi ? { source: \"openapi\" as const, url: options.openapi } : null,\n    options.graphql ? { source: \"graphql\" as const, url: options.graphql } : null,\n  ].filter((entry): entry is { source: DiscoverAppSource; url: string } => entry !== null);\n\n  if (sources.length > 1) {\n    throw new Error(\"Use only one of --mcp, --openapi, or --graphql\");\n  }\n\n  return sources[0] ?? null;\n}\n\nfunction parseAuthKind(value: string | undefined): AppAuthKind | undefined {\n  if (!value) {\n    return undefined;\n  }\n\n  if (value === \"oauth\" || value === \"api_key\") {\n    return value;\n  }\n\n  throw new Error(\"--auth must be oauth or api_key\");\n}\n\nfunction parseFieldOverrides(flags: string[]) {\n  if (flags.length === 0) {\n    return undefined;\n  }\n\n  return parseCustomAppFields(flags);\n}\n\nexport function registerAppCreateCommand(app: Command): void {\n  app\n    .command(\"create\")\n    .description(\"Create a custom org app\")\n    .option(\"--name <name>\", \"App display name\")\n    .option(\"--slug <slug>\", \"App slug segment (defaults from name)\")\n    .option(\"--description <description>\", \"App description\")\n    .option(\n      \"--field <field>\",\n      \"Credential field as key, key:secret, key:optional, or key:secret:optional (repeatable)\",\n      collectAppFieldValues,\n      [],\n    )\n    .option(\"--mcp <url>\", \"Create from an MCP server URL (auto-detect auth)\")\n    .option(\"--openapi <url>\", \"Create from an OpenAPI spec URL (auto-detect auth)\")\n    .option(\"--graphql <url>\", \"Create from a GraphQL endpoint URL (auto-detect auth)\")\n    .option(\"--auth <kind>\", \"Override detected auth: oauth or api_key (MCP only)\")\n    .option(\"--preview\", \"Show the request that would be created without creating\")\n    .action((options: AppCreateOptions) =>\n      runCliCommand(\n        \"Create app failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n\n          const discovery = resolveDiscoverSource(options);\n\n          if (discovery) {\n            const result = await runAppCreateFromUrl(client, {\n              source: discovery.source,\n              url: discovery.url.trim(),\n              name: options.name,\n              slug: options.slug,\n              description: options.description,\n              authKind: parseAuthKind(options.auth),\n              fields: parseFieldOverrides(options.field),\n              preview: options.preview ?? false,\n            });\n\n            process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n            return;\n          }\n\n          if (!options.name?.trim()) {\n            throw new Error(\"--name is required for custom apps\");\n          }\n          if (!options.description?.trim()) {\n            throw new Error(\"--description is required for custom apps\");\n          }\n\n          const slug = options.slug?.trim() || slugifyAppName(options.name);\n\n          const result = await runAppCreate(\n            client,\n            {\n              name: options.name.trim(),\n              slug,\n              description: options.description.trim(),\n              source: \"custom\",\n              fields: parseCustomAppFields(options.field),\n            },\n            { preview: options.preview ?? false },\n          );\n\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { AppCatalogEntry } from \"@keystrokehq/shared\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nexport async function runAppList(client: PlatformClient): Promise<AppCatalogEntry[]> {\n  return client.apps.listCatalog();\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppList } from \"./run-app-list\";\n\nexport function registerAppListCommand(app: Command): void {\n  app\n    .command(\"list\")\n    .description(\"List connectable apps in the active organization\")\n    .action(() =>\n      runCliCommand(\n        \"List apps failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const apps = await runAppList(client);\n          process.stdout.write(`${JSON.stringify(apps, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppSearch } from \"./run-app-catalog\";\n\nexport function registerAppSearchCommand(app: Command): void {\n  app\n    .command(\"search\")\n    .description(\"Search the Composio app catalog (live)\")\n    .argument(\"<query>\", \"Search query\")\n    .option(\"--category <category>\", \"Filter by category\")\n    .option(\"--limit <n>\", \"Page size\", (value) => Number.parseInt(value, 10))\n    .option(\"--cursor <cursor>\", \"Pagination cursor\")\n    .action((query, options: { category?: string; limit?: number; cursor?: string }) =>\n      runCliCommand(\n        \"App search failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const result = await runAppSearch(client, query, options);\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppShow } from \"./run-app-catalog\";\n\nexport function registerAppShowCommand(app: Command): void {\n  app\n    .command(\"show\")\n    .description(\"Show a Composio app from the live catalog\")\n    .argument(\"<slug>\", \"App slug\")\n    .action((slug) =>\n      runCliCommand(\n        \"App show failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const result = await runAppShow(client, slug);\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { CustomAppDetail } from \"@keystrokehq/shared\";\nimport { parseAppSlug } from \"@keystrokehq/shared\";\n\nfunction slugPartToExportName(part: string): string {\n  return part\n    .split(/[-_]+/)\n    .filter(Boolean)\n    .map((segment, index) =>\n      index === 0\n        ? segment.charAt(0).toLowerCase() + segment.slice(1)\n        : segment.charAt(0).toUpperCase() + segment.slice(1),\n    )\n    .join(\"\");\n}\n\nexport function resolveSyncedAppExportName(slug: string): string {\n  const parsed = parseAppSlug(slug);\n  const part = parsed.kind === \"org\" ? parsed.name : parsed.slug;\n  const exportName = slugPartToExportName(part);\n  if (!exportName) {\n    throw new Error(`Cannot derive export name from app slug: ${slug}`);\n  }\n  return exportName;\n}\n\nexport function resolveSyncedAppDirName(slug: string): string {\n  const parsed = parseAppSlug(slug);\n  return parsed.kind === \"org\" ? parsed.name : parsed.slug;\n}\n\nexport function generateAppStub(app: CustomAppDetail): string {\n  const exportName = resolveSyncedAppExportName(app.slug);\n  const credentialLines = Object.entries(app.credentialFields ?? {})\n    .map(([key, field]) => {\n      const zodType = field.optional ? \"z.string().optional()\" : \"z.string()\";\n      return `    ${key}: ${zodType},`;\n    })\n    .join(\"\\n\");\n\n  return `import { defineApp } from \"@keystrokehq/keystroke/app\";\nimport { z } from \"zod\";\n\n/** Synced from platform app \\`${app.slug}\\`. Re-run \\`keystroke app sync ${app.slug}\\` after template changes. */\nexport const ${exportName} = defineApp({\n  slug: ${JSON.stringify(app.slug)},\n  auth: \"api_key\",\n  credential: {\n${credentialLines}\n  },\n});\n`;\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nimport { resolveKeystrokeConfigRoot } from \"../../project/resolve-keystroke-config-root\";\nimport { generateAppStub, resolveSyncedAppDirName } from \"./generate-app-stub\";\n\nexport async function runAppSync(options: {\n  client: PlatformClient;\n  slug: string;\n  dir?: string;\n}): Promise<{ outputPath: string }> {\n  const projectRoot = resolveKeystrokeConfigRoot(options.dir ?? process.cwd());\n  if (!projectRoot) {\n    throw new Error(\"Not in a keystroke project (keystroke.config.ts not found)\");\n  }\n\n  const app = await options.client.apps.get(options.slug);\n  const dirName = resolveSyncedAppDirName(app.slug);\n  const appDir = join(projectRoot, \"src\", \"apps\", dirName);\n  const outputPath = join(appDir, \"app.ts\");\n\n  await mkdir(appDir, { recursive: true });\n  await writeFile(outputPath, generateAppStub(app), \"utf8\");\n\n  return { outputPath };\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppSync } from \"./run-app-sync\";\n\nexport function registerAppSyncCommand(app: Command): void {\n  app\n    .command(\"sync\")\n    .description(\"Sync a custom app credential template into src/apps/<name>/app.ts\")\n    .argument(\"<slug>\", \"App slug, e.g. acme/internal-api\")\n    .option(\"--dir <dir>\", \"Project root (defaults to cwd)\")\n    .action((slug: string, options: { dir?: string }) =>\n      runCliCommand(\n        \"Sync app failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n\n          const result = await runAppSync({\n            client,\n            slug,\n            ...(options.dir !== undefined ? { dir: options.dir } : {}),\n          });\n\n          process.stdout.write(`Wrote ${result.outputPath}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { Command } from \"commander\";\n\nimport { registerAppActionCommand } from \"./action\";\nimport { registerAppActionsCommand } from \"./actions\";\nimport { registerAppCreateCommand } from \"./create\";\nimport { registerAppListCommand } from \"./list\";\nimport { registerAppSearchCommand } from \"./search\";\nimport { registerAppShowCommand } from \"./show\";\nimport { registerAppSyncCommand } from \"./sync\";\n\nexport function registerAppCommand(program: Command): void {\n  const app = program.command(\"app\").description(\"Browse connectable integrations\");\n\n  registerAppListCommand(app);\n  registerAppSearchCommand(app);\n  registerAppShowCommand(app);\n  registerAppActionsCommand(app);\n  registerAppActionCommand(app);\n  registerAppCreateCommand(app);\n  registerAppSyncCommand(app);\n}\n","import { spawn } from \"node:child_process\";\n\nexport function openUrl(url: string): void {\n  const platform = process.platform;\n  const command = platform === \"darwin\" ? \"open\" : platform === \"win32\" ? \"start\" : \"xdg-open\";\n\n  spawn(command, [url], {\n    detached: true,\n    stdio: \"ignore\",\n  }).unref();\n}\n","import type { AppCatalogEntry } from \"@keystrokehq/shared\";\nimport { buildConnectDeeplink, resolveConnectAppSlug } from \"@keystrokehq/shared\";\n\nimport { openUrl } from \"../../auth/open-url\";\n\nexport type ConnectPlatformClient = {\n  apps: {\n    listCatalog(): Promise<AppCatalogEntry[]>;\n  };\n};\n\nexport { resolveConnectAppSlug };\n\nexport async function runConnect(options: {\n  platform: ConnectPlatformClient;\n  webUrl: string;\n  orgSlug: string;\n  slug: string;\n  printUrl?: boolean;\n}): Promise<void> {\n  const apps = await options.platform.apps.listCatalog();\n  const app = resolveConnectAppSlug(options.slug, apps);\n  const url = buildConnectDeeplink({\n    webUrl: options.webUrl,\n    orgSlug: options.orgSlug,\n    appSlug: app.id,\n  });\n\n  if (options.printUrl) {\n    process.stdout.write(`${url}\\n`);\n    return;\n  }\n\n  openUrl(url);\n  process.stdout.write(`Opening ${app.name} connect flow in your browser.\\n`);\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getWebUrl } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport {\n  ensureActiveOrganization,\n  listOrganizations,\n} from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runConnect } from \"./run-connect\";\n\nexport function registerConnectCommand(program: Command): void {\n  program\n    .command(\"connect <slug>\")\n    .description(\"Open the web app to connect an integration by catalog slug\")\n    .option(\"--print-url\", \"Print the connect URL and exit without opening the browser\")\n    .action((slug: string, options: { printUrl?: boolean }) =>\n      runCliCommand(\n        \"Connect failed\",\n        async () => {\n          const config = createCliConfig();\n          await ensureActiveOrganization(config);\n          const organizations = await listOrganizations(config);\n          const activeOrganizationId = config.get(\"activeOrganizationId\");\n          const activeOrg = organizations.find(\n            (entry) => entry.organization.id === activeOrganizationId,\n          );\n          if (!activeOrg) {\n            throw new Error(\n              \"No active organization. Run `keystroke auth login` or `keystroke config use org`.\",\n            );\n          }\n\n          const platform = createCliPlatformClient(config);\n          await runConnect({\n            platform,\n            webUrl: getWebUrl(config),\n            orgSlug: activeOrg.organization.slug,\n            slug,\n            printUrl: options.printUrl,\n          });\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { CredentialAssignmentTargetType } from \"@keystrokehq/shared\";\n\nexport function parseAssignmentTarget(options: { agent?: string; workflow?: string }): {\n  targetType: CredentialAssignmentTargetType;\n  targetKey: string;\n} {\n  const agent = options.agent?.trim();\n  const workflow = options.workflow?.trim();\n\n  if (agent && workflow) {\n    throw new Error(\"Exactly one of --agent or --workflow is required\");\n  }\n\n  if (agent) {\n    return { targetType: \"agent\", targetKey: agent };\n  }\n\n  if (workflow) {\n    return { targetType: \"workflow\", targetKey: workflow };\n  }\n\n  throw new Error(\"Exactly one of --agent or --workflow is required\");\n}\n","import type { Command } from \"commander\";\nimport { cliBinaryName, runProjectCliCommand } from \"../../../errors\";\nimport { parseAssignmentTarget } from \"../parse-assignment-target\";\n\nexport function registerCredentialsAssignmentsAssignCommand(assignments: Command): void {\n  assignments\n    .command(\"assign\")\n    .description(\"Assign a credential instance to a workflow step or agent tool\")\n    .option(\"--agent <key>\", \"Agent slug\")\n    .option(\"--workflow <key>\", \"Workflow slug\")\n    .requiredOption(\n      \"--credential <slug>\",\n      \"Credential instance slug (e.g. work, org/work, linear/work)\",\n    )\n    .option(\n      \"--consumer <id>\",\n      \"Consumer id (step correlation id or tool slug); omit for wildcard (*)\",\n    )\n    .addHelpText(\n      \"after\",\n      `\nExamples:\n  ${cliBinaryName()} credentials assignments assign --workflow sync --credential work\n  ${cliBinaryName()} credentials assignments assign --workflow sync --credential org/work --consumer step:fetch-gmail#0\n  ${cliBinaryName()} credentials assignments assign --agent support --credential vault-prod --consumer vault-lookup\n  ${cliBinaryName()} credentials assignments assign --agent pm --credential linear/work\n`,\n    )\n    .action(\n      (options: { agent?: string; workflow?: string; credential: string; consumer?: string }) =>\n        runProjectCliCommand(\"Assign credential failed\", async ({ client }) => {\n          const target = parseAssignmentTarget(options);\n          const assignment = await client.credentials.assignCredential({\n            targetType: target.targetType,\n            targetKey: target.targetKey,\n            credential: options.credential,\n            ...(options.consumer ? { consumerId: options.consumer } : {}),\n          });\n          process.stdout.write(`${JSON.stringify(assignment, null, 2)}\\n`);\n        }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../../errors\";\nimport { parseAssignmentTarget } from \"../parse-assignment-target\";\n\nexport function registerCredentialsAssignmentsListCommand(assignments: Command): void {\n  assignments\n    .command(\"list\")\n    .description(\"List credential assignments for a workflow or agent\")\n    .option(\"--agent <key>\", \"Agent slug\")\n    .option(\"--workflow <key>\", \"Workflow slug\")\n    .action((options: { agent?: string; workflow?: string }) =>\n      runProjectCliCommand(\"List credential assignments failed\", async ({ client }) => {\n        const target = parseAssignmentTarget(options);\n        const result = await client.credentials.listAssignments({\n          targetType: target.targetType,\n          targetKey: target.targetKey,\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../../errors\";\n\nexport function registerCredentialsAssignmentsUnassignCommand(assignments: Command): void {\n  assignments\n    .command(\"unassign\")\n    .description(\"Remove a credential assignment by id\")\n    .argument(\"<id>\", \"Credential assignment id\")\n    .action((id: string) =>\n      runProjectCliCommand(\"Unassign credential failed\", async ({ client }) => {\n        await client.credentials.unassignCredential(id);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { registerCredentialsAssignmentsAssignCommand } from \"./assign\";\nimport { registerCredentialsAssignmentsListCommand } from \"./list\";\nimport { registerCredentialsAssignmentsUnassignCommand } from \"./unassign\";\n\nexport function registerCredentialsAssignmentsCommands(credentials: Command): void {\n  const assignments = credentials\n    .command(\"assignments\")\n    .description(\"Assign credential instances to workflow steps or agent tools\");\n\n  registerCredentialsAssignmentsListCommand(assignments);\n  registerCredentialsAssignmentsAssignCommand(assignments);\n  registerCredentialsAssignmentsUnassignCommand(assignments);\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../../errors\";\nimport { parseAssignmentTarget } from \"../parse-assignment-target\";\n\nexport function registerCredentialsConsumersListCommand(consumers: Command): void {\n  consumers\n    .command(\"list\")\n    .description(\"List bindable consumers for a workflow or agent\")\n    .option(\"--agent <key>\", \"Agent slug\")\n    .option(\"--workflow <key>\", \"Workflow slug\")\n    .addHelpText(\n      \"after\",\n      `\nWorkflow consumers come from recent step_completed events (e.g. step:fetch-gmail#0).\nAgent consumers include known tool slugs when available, plus any from existing assignments.\nUse consumer id \"*\" (wildcard) or omit --consumer on assignments assign to bind all consumers.\n`,\n    )\n    .action((options: { agent?: string; workflow?: string }) =>\n      runProjectCliCommand(\"List credential consumers failed\", async ({ client }) => {\n        const target = parseAssignmentTarget(options);\n        const result = await client.credentials.listConsumers({\n          targetType: target.targetType,\n          targetKey: target.targetKey,\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { registerCredentialsConsumersListCommand } from \"./list\";\n\nexport function registerCredentialsConsumersCommands(credentials: Command): void {\n  const consumers = credentials\n    .command(\"consumers\")\n    .description(\"Discover workflow step and agent tool consumer ids for assignment\");\n\n  registerCredentialsConsumersListCommand(consumers);\n}\n","import type { CredentialScopeType } from \"@keystrokehq/shared\";\nimport type { ApiTargetOptions } from \"../../resolve-api-target\";\nimport { projectScopedTarget } from \"../../resolve-api-target\";\n\nexport function resolveCredentialsTargetOptions(\n  options: {\n    scopeType?: CredentialScopeType;\n    projectId?: string;\n  } = {},\n): ApiTargetOptions {\n  if (options.scopeType === \"project\") {\n    return {\n      ...projectScopedTarget,\n      projectId: options.projectId,\n    };\n  }\n\n  return { orgScoped: true };\n}\n","import type Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { CreateCredentialsRequest, UpdateCredentialRequest } from \"@keystrokehq/shared\";\n\nimport type { ParsedConnectScopes } from \"../connect/parse-connect-scopes\";\nimport { createCliClient } from \"../../client\";\nimport type { CliConfig } from \"../../config\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { resolveApiTarget, type ApiTargetOptions } from \"../../resolve-api-target\";\nimport { getCliTargetOptions } from \"../../target-options\";\nimport { withActivePlatformClient } from \"../project/run-project\";\nimport { resolveCredentialsTargetOptions } from \"./target-options\";\n\nexport async function createLocalCredentialsClient(targetOptions?: ApiTargetOptions) {\n  const config = createCliConfig();\n  const target = await resolveApiTarget(config, {\n    ...getCliTargetOptions(),\n    ...resolveCredentialsTargetOptions(),\n    ...targetOptions,\n  });\n  const client = createCliClient(config, {\n    baseUrl: target.baseUrl,\n    platform: target.mode === \"platform\",\n  });\n  return { config, client, target };\n}\n\nexport function isLocalCredentialsTarget(): boolean {\n  return Boolean(getCliTargetOptions().local);\n}\n\nexport async function runCredentialsCommand(\n  fallback: string,\n  fn: (ctx: {\n    config: Conf<CliConfig>;\n    platform?: PlatformClient;\n    local: boolean;\n  }) => Promise<void>,\n): Promise<void> {\n  const config = createCliConfig();\n  const local = isLocalCredentialsTarget();\n\n  try {\n    if (local) {\n      await fn({ config, local: true });\n      return;\n    }\n\n    await withActivePlatformClient(config, async (platform) => {\n      await fn({ config, platform, local: false });\n    });\n  } catch (error) {\n    process.stderr.write(\n      `${formatCliError(error, fallback, {\n        serverUrl: getPlatformUrl(config),\n        webUrl: getWebUrl(config),\n      })}\\n`,\n    );\n    process.exitCode = 1;\n  }\n}\n\nexport function buildPlatformCreateRequest(args: {\n  appId: string;\n  value: Record<string, string>;\n  targets: ParsedConnectScopes;\n}): CreateCredentialsRequest {\n  if (Object.keys(args.value).length === 0) {\n    throw new Error(\"At least one --set field is required\");\n  }\n\n  return {\n    appId: args.appId,\n    connectionKind: \"manual\",\n    value: args.value,\n    projects: args.targets.projects,\n    createOrganizationCredential: args.targets.createOrganizationCredential,\n    createUserProvidedCredential: args.targets.createUserProvidedCredential,\n  };\n}\n\nexport function buildPlatformUpdatePatch(args: {\n  label?: string;\n  isDefault?: boolean;\n  value?: Record<string, string>;\n}): UpdateCredentialRequest {\n  return {\n    ...(args.label !== undefined ? { label: args.label } : {}),\n    ...(args.isDefault !== undefined ? { isDefault: args.isDefault } : {}),\n    ...(args.value ? { value: args.value } : {}),\n  };\n}\n","import type { Command } from \"commander\";\nimport { createLocalCredentialsClient, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsDeleteCommand(credentials: Command): void {\n  credentials\n    .command(\"delete\")\n    .description(\"Delete a credential instance\")\n    .argument(\"<ref>\", \"Credential slug or id\")\n    .action((ref: string) =>\n      runCredentialsCommand(\"Delete credential failed\", async ({ platform, local }) => {\n        if (local) {\n          const { client } = await createLocalCredentialsClient();\n          await client.credentials.deleteInstance(ref);\n          return;\n        }\n\n        await platform!.credentials.delete(ref);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { createLocalCredentialsClient, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsGetCommand(credentials: Command): void {\n  credentials\n    .command(\"get\")\n    .description(\"Get a credential instance by id\")\n    .argument(\"<id>\", \"Credential instance id\")\n    .action((id: string) =>\n      runCredentialsCommand(\"Get credential failed\", async ({ platform, local }) => {\n        if (local) {\n          const { client } = await createLocalCredentialsClient();\n          const result = await client.credentials.listInstances();\n          const match = result.instances.find((instance) => instance.id === id);\n          if (!match) {\n            throw new Error(`Credential ${id} not found`);\n          }\n          process.stdout.write(`${JSON.stringify(match, null, 2)}\\n`);\n          return;\n        }\n\n        const credential = await platform!.credentials.get(id);\n        process.stdout.write(`${JSON.stringify({ credential }, null, 2)}\\n`);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { createLocalCredentialsClient, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsListCommand(credentials: Command): void {\n  credentials\n    .command(\"list\")\n    .description(\"List stored credential instances\")\n    .option(\"--key <key>\", \"Filter by credential key (local server only)\")\n    .action((options: { key?: string }) =>\n      runCredentialsCommand(\"List credential instances failed\", async ({ platform, local }) => {\n        if (local) {\n          const { client } = await createLocalCredentialsClient();\n          const result = await client.credentials.listInstances(\n            options.key ? { key: options.key } : undefined,\n          );\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n          return;\n        }\n\n        const credentialsList = await platform!.credentials.list();\n        process.stdout.write(`${JSON.stringify({ credentials: credentialsList }, null, 2)}\\n`);\n      }),\n    );\n}\n","export const ENV_REF_PREFIX = \"@env:\";\n\nexport function isEnvRef(raw: string): boolean {\n  return raw.startsWith(ENV_REF_PREFIX);\n}\n\nexport function envRefName(raw: string): string {\n  return raw.slice(ENV_REF_PREFIX.length);\n}\n","import { envRefName, isEnvRef } from \"../../project/env-ref\";\nimport { loadProjectEnv } from \"../../project/load-project-env\";\n\nexport function parseCredentialValueFields(fields: string[]): Record<string, string> {\n  const value: Record<string, string> = {};\n\n  for (const field of fields) {\n    const separatorIndex = field.indexOf(\"=\");\n    if (separatorIndex <= 0) {\n      throw new Error(`Invalid --set value: ${field}`);\n    }\n\n    const key = field.slice(0, separatorIndex);\n    let rawValue = field.slice(separatorIndex + 1);\n\n    if (isEnvRef(rawValue)) {\n      const envName = envRefName(rawValue);\n      if (process.env[envName] === undefined) {\n        loadProjectEnv();\n      }\n      rawValue = process.env[envName] ?? \"\";\n      if (!rawValue) {\n        throw new Error(`Environment variable ${envName} is not set`);\n      }\n    }\n\n    value[key] = rawValue;\n  }\n\n  if (Object.keys(value).length === 0) {\n    throw new Error(\"At least one --set field is required\");\n  }\n\n  return value;\n}\n\nexport function scopeTypeFromCli(scope: string): \"organization\" | \"user\" | \"project\" {\n  switch (scope) {\n    case \"org\":\n      return \"organization\";\n    case \"user\":\n      return \"user\";\n    case \"project\":\n      return \"project\";\n    default:\n      throw new Error(`Unknown scope \"${scope}\". Expected org, user, or project.`);\n  }\n}\n","import type { Command } from \"commander\";\nimport { parseCredentialValueFields } from \"./parse-value\";\nimport { buildPlatformUpdatePatch, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsRotateKeyCommand(credentials: Command): void {\n  credentials\n    .command(\"rotate-key\")\n    .description(\"Rotate an api_key credential secret\")\n    .argument(\"<id>\", \"Credential instance id\")\n    .requiredOption(\n      \"--set <field>\",\n      \"Credential field as key=value or key=@env:VAR\",\n      collectSetValues,\n      [],\n    )\n    .action(\n      (\n        id: string,\n        options: {\n          set: string[];\n        },\n      ) =>\n        runCredentialsCommand(\"Rotate credential key failed\", async ({ platform, local }) => {\n          const value = parseCredentialValueFields(options.set);\n\n          if (local) {\n            throw new Error(\n              \"credentials rotate-key requires the platform API target (omit --local)\",\n            );\n          }\n\n          const patch = buildPlatformUpdatePatch({ value });\n          const credential = await platform!.credentials.update(id, patch);\n          process.stdout.write(`${JSON.stringify({ credential }, null, 2)}\\n`);\n        }),\n    );\n}\n\nfunction collectSetValues(value: string, previous: string[]): string[] {\n  return previous.concat([value]);\n}\n","import type { CredentialScopeType } from \"@keystrokehq/shared\";\nimport type { KeystrokeClient } from \"@keystrokehq/sdk\";\nimport { cliBinaryName } from \"../../errors\";\n\ntype ConflictInstance = {\n  id: string;\n  slug: string;\n  name: string | null;\n  isDefault: boolean;\n};\n\nfunction describeInstance(instance: ConflictInstance): string {\n  const defaultStatus = instance.isDefault ? \"default\" : \"not default\";\n  const nameStatus = instance.name ? `name: ${instance.name}` : `slug: ${instance.slug}`;\n  return `${nameStatus}, ${defaultStatus}`;\n}\n\nfunction formatSetFields(setFields: string[]): string {\n  return setFields.map((field) => `--set ${field}`).join(\" \");\n}\n\nfunction formatSetConflictError(args: {\n  key: string;\n  scope: string;\n  setFields: string[];\n  matching: ConflictInstance[];\n}): string {\n  const binary = cliBinaryName();\n  const setArgs = formatSetFields(args.setFields);\n  const listCmd = `${binary} credentials list --key ${args.key}`;\n  const addSecondCmd = `${binary} credentials set ${args.key} --scope ${args.scope} --slug <slug> ${setArgs}`;\n\n  if (args.matching.length === 1) {\n    const instance = args.matching[0]!;\n    const updateCmd = `${binary} credentials update ${instance.slug} ${setArgs}`;\n\n    return [\n      `An ${args.key} credential already exists in ${args.scope} scope (${describeInstance(instance)}).`,\n      \"credentials set creates a new instance — it does not update an existing one.\",\n      \"To update the existing credential:\",\n      `  ${updateCmd}`,\n      \"To add a second credential in the same scope:\",\n      `  ${addSecondCmd}`,\n      `List instances: ${listCmd}`,\n    ].join(\"\\n\");\n  }\n\n  const instanceLines = args.matching.map((instance) => `  • ${describeInstance(instance)}`);\n\n  return [\n    `Multiple ${args.key} credentials already exist in ${args.scope} scope. Pass --slug to add another:`,\n    ...instanceLines,\n    \"To add another credential in the same scope:\",\n    `  ${addSecondCmd}`,\n    `List instances: ${listCmd}`,\n  ].join(\"\\n\");\n}\n\nexport async function assertNoSetConflict(\n  client: KeystrokeClient,\n  args: {\n    key: string;\n    scope: string;\n    scopeType: CredentialScopeType;\n    projectId?: string;\n    slug?: string;\n    setFields: string[];\n  },\n): Promise<void> {\n  if (args.slug) {\n    return;\n  }\n\n  const { instances } = await client.credentials.listInstances({ key: args.key });\n  const matching = instances.filter(\n    (instance) =>\n      instance.scopeType === args.scopeType &&\n      (args.scopeType !== \"project\" || instance.scopeId === args.projectId),\n  );\n\n  if (matching.length === 0) {\n    return;\n  }\n\n  throw new Error(\n    formatSetConflictError({\n      key: args.key,\n      scope: args.scope,\n      setFields: args.setFields,\n      matching,\n    }),\n  );\n}\n","export type ConnectCredentialScope = \"org\" | \"user\" | \"project\";\n\nexport type ParsedConnectScopes = {\n  createOrganizationCredential: boolean;\n  createUserProvidedCredential: boolean;\n  projects: string[];\n};\n\nexport function parseConnectScopes(scopes: string[], projectSlugs: string[]): ParsedConnectScopes {\n  const normalized = scopes.length > 0 ? scopes : [\"org\"];\n\n  for (const scope of normalized) {\n    if (scope !== \"org\" && scope !== \"user\" && scope !== \"project\") {\n      throw new Error(`Unknown scope \"${scope}\". Expected org, user, or project.`);\n    }\n  }\n\n  const createOrganizationCredential = normalized.includes(\"org\");\n  const createUserProvidedCredential = normalized.includes(\"user\");\n  const includesProject = normalized.includes(\"project\");\n  const selectedProjects = includesProject ? projectSlugs : [];\n\n  if (includesProject && selectedProjects.length === 0) {\n    throw new Error(\"--project-slug is required when scope includes project\");\n  }\n\n  if (\n    !createOrganizationCredential &&\n    !createUserProvidedCredential &&\n    selectedProjects.length === 0\n  ) {\n    throw new Error(\"At least one scope is required via --scope and/or --project-slug\");\n  }\n\n  return {\n    createOrganizationCredential,\n    createUserProvidedCredential,\n    projects: selectedProjects,\n  };\n}\n","import { parseConnectScopes, type ParsedConnectScopes } from \"../connect/parse-connect-scopes\";\n\nexport type ParsedCredentialSetScopes = ParsedConnectScopes;\n\nexport function parseCredentialSetScopes(\n  scopes: string[],\n  projectSlugs: string[],\n): ParsedCredentialSetScopes {\n  return parseConnectScopes(scopes, projectSlugs);\n}\n","import type { Command } from \"commander\";\nimport type { ParsedConnectScopes } from \"../connect/parse-connect-scopes\";\nimport { assertNoSetConflict } from \"./format-set-conflict-error\";\nimport { parseCredentialSetScopes } from \"./parse-set-scopes\";\nimport { parseCredentialValueFields, scopeTypeFromCli } from \"./parse-value\";\nimport {\n  buildPlatformCreateRequest,\n  buildPlatformUpdatePatch,\n  createLocalCredentialsClient,\n  runCredentialsCommand,\n} from \"./run-credentials\";\n\nexport function registerCredentialsSetCommand(credentials: Command): void {\n  credentials\n    .command(\"set\")\n    .description(\"Create a new api_key credential instance\")\n    .argument(\"<key>\", \"Credential key or app id, e.g. exa\")\n    .option(\"--scope <scope>\", \"org, user, or project (repeatable)\", collectValues, [])\n    .option(\n      \"--project-slug <slug>\",\n      \"Project slug when scope includes project (repeatable)\",\n      collectValues,\n      [],\n    )\n    .option(\"--slug <slug>\", \"Friendly credential slug within the scope\")\n    .option(\"--name <name>\", \"Display name (used to derive slug when --slug is omitted)\")\n    .option(\"--label <label>\", \"Alias for --name\")\n    .option(\"--default\", \"Mark as default for this scope\")\n    .option(\n      \"--set <field>\",\n      \"Credential field as key=value or key=@env:VAR (falls back to project .env when unset in shell)\",\n      collectSetValues,\n      [],\n    )\n    .action(\n      (\n        key: string,\n        options: {\n          scope: string[];\n          projectSlug: string[];\n          slug?: string;\n          name?: string;\n          label?: string;\n          default?: boolean;\n          set: string[];\n        },\n      ) =>\n        runCredentialsCommand(\"Set credential failed\", async ({ platform, local }) => {\n          const value = parseCredentialValueFields(options.set);\n          const parsedScopes = parseCredentialSetScopes(options.scope, options.projectSlug);\n\n          if (local) {\n            const { client } = await createLocalCredentialsClient();\n\n            const targets = expandLocalCredentialTargets(parsedScopes);\n            const instances = [];\n\n            for (const target of targets) {\n              const displayName = options.name ?? options.label;\n              await assertNoSetConflict(client, {\n                key,\n                scope: target.scope,\n                scopeType: target.scopeType,\n                projectId: target.projectSlug,\n                slug: options.slug,\n                setFields: options.set,\n              });\n\n              instances.push(\n                await client.credentials.createInstance({\n                  key,\n                  scopeType: target.scopeType,\n                  scopeId: target.projectSlug,\n                  ...(options.slug !== undefined ? { slug: options.slug } : {}),\n                  ...(displayName !== undefined ? { name: displayName } : {}),\n                  isDefault: options.default,\n                  value,\n                }),\n              );\n            }\n\n            if (instances.length === 1) {\n              process.stdout.write(`${JSON.stringify(instances[0], null, 2)}\\n`);\n              return;\n            }\n\n            process.stdout.write(`${JSON.stringify({ instances }, null, 2)}\\n`);\n            return;\n          }\n\n          const created = await platform!.credentials.create(\n            buildPlatformCreateRequest({\n              appId: key,\n              value,\n              targets: parsedScopes,\n            }),\n          );\n\n          if (options.label !== undefined || options.default !== undefined) {\n            const patch = buildPlatformUpdatePatch({\n              ...(options.label !== undefined ? { label: options.label } : {}),\n              ...(options.default !== undefined ? { isDefault: options.default } : {}),\n            });\n            const credentials = [];\n            for (const credential of created) {\n              credentials.push(await platform!.credentials.update(credential.id, patch));\n            }\n            process.stdout.write(`${JSON.stringify({ credentials }, null, 2)}\\n`);\n            return;\n          }\n\n          process.stdout.write(`${JSON.stringify({ credentials: created }, null, 2)}\\n`);\n        }),\n    );\n}\n\nfunction collectValues(value: string, previous: string[]): string[] {\n  return previous.concat([value]);\n}\n\nfunction collectSetValues(value: string, previous: string[]): string[] {\n  return previous.concat([value]);\n}\n\nfunction expandLocalCredentialTargets(targets: ParsedConnectScopes): Array<{\n  scope: string;\n  scopeType: ReturnType<typeof scopeTypeFromCli>;\n  projectSlug?: string;\n}> {\n  const expanded = [];\n\n  if (targets.createOrganizationCredential) {\n    expanded.push({ scope: \"org\", scopeType: scopeTypeFromCli(\"org\") });\n  }\n  if (targets.createUserProvidedCredential) {\n    expanded.push({ scope: \"user\", scopeType: scopeTypeFromCli(\"user\") });\n  }\n  for (const projectSlug of targets.projects) {\n    expanded.push({\n      scope: \"project\",\n      scopeType: scopeTypeFromCli(\"project\"),\n      projectSlug,\n    });\n  }\n\n  return expanded;\n}\n","import type { Command } from \"commander\";\nimport { parseCredentialValueFields } from \"./parse-value\";\nimport {\n  buildPlatformUpdatePatch,\n  createLocalCredentialsClient,\n  runCredentialsCommand,\n} from \"./run-credentials\";\n\nexport function registerCredentialsUpdateCommand(credentials: Command): void {\n  credentials\n    .command(\"update\")\n    .description(\"Update a credential instance\")\n    .argument(\"<ref>\", \"Credential slug or id\")\n    .option(\"--slug <slug>\", \"Update friendly slug\")\n    .option(\"--name <name>\", \"Update display name\")\n    .option(\"--label <label>\", \"Alias for --name\")\n    .option(\"--default\", \"Mark as default for this scope\")\n    .option(\"--set <field>\", \"Credential field as key=value or key=@env:VAR\", collectSetValues, [])\n    .action(\n      (\n        ref: string,\n        options: {\n          slug?: string;\n          name?: string;\n          label?: string;\n          default?: boolean;\n          set: string[];\n        },\n      ) =>\n        runCredentialsCommand(\"Update credential failed\", async ({ platform, local }) => {\n          const value =\n            options.set.length > 0 ? parseCredentialValueFields(options.set) : undefined;\n          const displayName = options.name ?? options.label;\n\n          if (local) {\n            const { client } = await createLocalCredentialsClient();\n            const result = await client.credentials.updateInstance(ref, {\n              ...(options.slug !== undefined ? { slug: options.slug } : {}),\n              ...(displayName !== undefined ? { name: displayName } : {}),\n              ...(options.default !== undefined ? { isDefault: options.default } : {}),\n              ...(value ? { value } : {}),\n            });\n            process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n            return;\n          }\n\n          const patch = buildPlatformUpdatePatch({\n            ...(displayName !== undefined ? { label: displayName } : {}),\n            ...(options.default !== undefined ? { isDefault: options.default } : {}),\n            ...(value ? { value } : {}),\n          });\n          const credential = await platform!.credentials.update(ref, patch);\n          process.stdout.write(`${JSON.stringify({ credential }, null, 2)}\\n`);\n        }),\n    );\n}\n\nfunction collectSetValues(value: string, previous: string[]): string[] {\n  return previous.concat([value]);\n}\n","import type { Command } from \"commander\";\nimport { registerCredentialsAssignmentsCommands } from \"./assignments\";\nimport { registerCredentialsConsumersCommands } from \"./consumers\";\nimport { registerCredentialsDeleteCommand } from \"./delete\";\nimport { registerCredentialsGetCommand } from \"./get\";\nimport { registerCredentialsListCommand } from \"./list\";\nimport { registerCredentialsRotateKeyCommand } from \"./rotate-key\";\nimport { registerCredentialsSetCommand } from \"./set\";\nimport { registerCredentialsUpdateCommand } from \"./update\";\n\nexport function registerCredentialsCommand(program: Command): void {\n  const credentials = program\n    .command(\"credentials\")\n    .description(\"Manage platform app credentials and local api_key instances\");\n\n  registerCredentialsListCommand(credentials);\n  registerCredentialsGetCommand(credentials);\n  registerCredentialsSetCommand(credentials);\n  registerCredentialsUpdateCommand(credentials);\n  registerCredentialsRotateKeyCommand(credentials);\n  registerCredentialsDeleteCommand(credentials);\n  registerCredentialsAssignmentsCommands(credentials);\n  registerCredentialsConsumersCommands(credentials);\n}\n","import type Conf from \"conf\";\nimport type { CliConfig } from \"../config\";\nimport { getPlatformUrl } from \"../config\";\nimport {\n  DEFAULT_PLATFORM_URL,\n  DEFAULT_WEB_URL,\n  resolvePlatformUrlForWebUrl,\n} from \"../resolve-platform-url\";\n\nexport type AuthLoginTargetOptions = {\n  webUrl?: string;\n  platformUrl?: string;\n};\n\nexport function resolveAuthLoginTargets(\n  options: AuthLoginTargetOptions,\n  config: Conf<CliConfig>,\n): { webUrl: string; platformUrl: string } {\n  const webUrl = options.webUrl ?? DEFAULT_WEB_URL;\n  const platformUrl = resolvePlatformUrlForWebUrl(webUrl, {\n    platformUrl: options.platformUrl,\n    fallback: options.webUrl ? getPlatformUrl(config) : DEFAULT_PLATFORM_URL,\n  });\n\n  return { webUrl, platformUrl };\n}\n","import type { Command } from \"commander\";\nimport { CLI_CLIENT_ID, getSessionWithBearer, runDeviceLogin } from \"@keystrokehq/auth/cli\";\nimport { setAccessToken } from \"../../auth/credentials\";\nimport { openUrl } from \"../../auth/open-url\";\nimport { resolveAuthLoginTargets } from \"../../auth/resolve-login-targets\";\nimport { createCliConfig } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { syncActiveOrganizationAfterLogin } from \"../../organization/active-organization\";\n\ntype LoginOptions = {\n  webUrl?: string;\n  platformUrl?: string;\n  org?: string;\n};\n\nexport function registerAuthLoginCommand(auth: Command): void {\n  auth\n    .command(\"login\")\n    .description(\"Authenticate via browser device flow\")\n    .option(\n      \"--web-url <url>\",\n      \"Web dashboard origin (omit to use production defaults; local dev: http://localhost:3000)\",\n    )\n    .option(\"--platform-url <url>\", \"Platform API origin (derived from web URL when omitted)\")\n    .option(\"--org <slug>\", \"Active organization slug (overrides browser default)\")\n    .action(async (options: LoginOptions) => {\n      const config = createCliConfig();\n      const { webUrl, platformUrl } = resolveAuthLoginTargets(options, config);\n\n      config.set(\"webUrl\", webUrl);\n      config.set(\"platformUrl\", platformUrl);\n\n      try {\n        const result = await runDeviceLogin({\n          baseURL: platformUrl,\n          clientId: CLI_CLIENT_ID,\n          openUrl,\n        });\n\n        setAccessToken(platformUrl, result.accessToken);\n\n        const user = await getSessionWithBearer(platformUrl, result.accessToken);\n        const membership = await syncActiveOrganizationAfterLogin(config, {\n          organizationRef: options.org,\n          deviceOrganizationId: result.organizationId,\n        });\n\n        if (user) {\n          process.stdout.write(\n            `Logged in as ${user.name} (${user.email}) — organization ${membership.organization.name}\\n`,\n          );\n        } else {\n          process.stdout.write(\n            `Logged in to ${webUrl} — organization ${membership.organization.name}\\n`,\n          );\n        }\n      } catch (error) {\n        process.stderr.write(`${formatCliError(error, \"Login failed\", { webUrl, platformUrl })}\\n`);\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { Command } from \"commander\";\nimport { clearAccessToken } from \"../../auth/credentials\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\n\ntype LogoutOptions = {\n  webUrl?: string;\n};\n\nexport function registerAuthLogoutCommand(auth: Command): void {\n  auth\n    .command(\"logout\")\n    .description(\"Clear stored credentials\")\n    .option(\"--web-url <url>\", \"Web dashboard origin (default from config)\")\n    .action((options: LogoutOptions) => {\n      const config = createCliConfig();\n      const webUrl = options.webUrl ?? getWebUrl(config);\n      const platformUrl = getPlatformUrl(config);\n      clearAccessToken(platformUrl);\n      process.stdout.write(`${JSON.stringify({ authenticated: false, webUrl, platformUrl })}\\n`);\n    });\n}\n","import { getSessionWithBearer } from \"@keystrokehq/auth/cli\";\nimport type { Command } from \"commander\";\nimport { getAccessToken } from \"../../auth/credentials\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { listOrganizations } from \"../../organization/active-organization\";\n\ntype StatusOptions = {\n  webUrl?: string;\n};\n\nexport function registerAuthStatusCommand(auth: Command): void {\n  auth\n    .command(\"status\")\n    .description(\"Show authentication status\")\n    .option(\"--web-url <url>\", \"Web dashboard origin (default from config)\")\n    .action(async (options: StatusOptions) => {\n      const config = createCliConfig();\n      const webUrl = options.webUrl ?? getWebUrl(config);\n      const platformUrl = getPlatformUrl(config);\n      const token = getAccessToken(platformUrl);\n\n      if (!token) {\n        process.stdout.write(`${JSON.stringify({ authenticated: false, webUrl, platformUrl })}\\n`);\n        return;\n      }\n\n      try {\n        const user = await getSessionWithBearer(platformUrl, token);\n        const organizations = user ? await listOrganizations(config).catch(() => []) : [];\n        const activeOrganizationId = config.get(\"activeOrganizationId\");\n        const activeOrganization = activeOrganizationId\n          ? organizations.find((entry) => entry.organization.id === activeOrganizationId)\n          : undefined;\n\n        process.stdout.write(\n          `${JSON.stringify({\n            authenticated: user !== null,\n            webUrl,\n            user,\n            activeOrganizationId: activeOrganizationId ?? null,\n            activeOrganization: activeOrganization?.organization.name ?? null,\n          })}\\n`,\n        );\n\n        if (!user) {\n          process.exitCode = 1;\n        }\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Status check failed\", { webUrl, platformUrl })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { Command } from \"commander\";\nimport { registerAuthLoginCommand } from \"./login\";\nimport { registerAuthLogoutCommand } from \"./logout\";\nimport { registerAuthStatusCommand } from \"./status\";\n\nexport function registerAuthCommand(program: Command): void {\n  const auth = program.command(\"auth\").description(\"Authenticate with an keystroke deployment\");\n\n  registerAuthLoginCommand(auth);\n  registerAuthLogoutCommand(auth);\n  registerAuthStatusCommand(auth);\n}\n","import type { Command } from \"commander\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\n\nexport function registerBuildCommand(program: Command): void {\n  program\n    .command(\"build\")\n    .description(\"Build the keystroke project for production\")\n    .option(\"--dir <path>\", \"Project directory\", process.cwd())\n    .action(async (options) => {\n      try {\n        const root = resolveProjectRoot(options.dir);\n        const { buildApp } = await import(\"@keystrokehq/build\");\n        await buildApp({ root });\n        process.stdout.write(`Built ${root}\\n`);\n      } catch (error) {\n        const message = error instanceof Error ? error.message : \"Build failed\";\n        process.stderr.write(`${message}\\n`);\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport { packProjectArtifact } from \"@keystrokehq/storage/pack-artifact\";\nimport type { Command } from \"commander\";\nimport type { ProjectSourceFile } from \"@keystrokehq/shared\";\n\nimport { createCliConfig } from \"../config\";\nimport { selectActiveOrganization } from \"../organization/active-organization\";\nimport { createCliPlatformClient } from \"../platform-client\";\nimport { mergeFilteredArtifact } from \"@keystrokehq/storage/pack-artifact\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { ensureLinkedOrganization, resolveActiveProjectId } from \"../resolve-project-target\";\n\nconst POLL_INTERVAL_MS = 2_000;\nconst DEPLOY_TIMEOUT_MS = 120_000;\nconst SOURCE_BLOB_CONTENT_TYPE = \"text/plain; charset=utf-8\";\n\n/**\n * Upload the project's source so the dashboard can render a read-only file\n * view. Content-addressed: only blobs the platform reports missing are PUT, so\n * unchanged files are never re-uploaded. The manifest (path -> hash) is sent\n * last and marks the snapshot complete.\n */\nasync function uploadProjectSourceSnapshot(\n  client: PlatformClient,\n  projectId: string,\n  artifactId: string,\n  files: ProjectSourceFile[],\n): Promise<void> {\n  const contentsByHash = new Map<string, string>();\n  const blobsByHash = new Map<string, { hash: string; size: number }>();\n  for (const file of files) {\n    contentsByHash.set(file.hash, file.contents);\n    if (!blobsByHash.has(file.hash)) {\n      blobsByHash.set(file.hash, { hash: file.hash, size: Buffer.byteLength(file.contents) });\n    }\n  }\n\n  const { uploads } = await client.artifacts.presignSource(projectId, artifactId, [\n    ...blobsByHash.values(),\n  ]);\n\n  await Promise.all(\n    uploads.map(async (upload) => {\n      const contents = contentsByHash.get(upload.hash);\n      if (contents === undefined) {\n        return;\n      }\n      const response = await fetch(upload.url, {\n        method: \"PUT\",\n        body: contents,\n        headers: { \"Content-Type\": SOURCE_BLOB_CONTENT_TYPE },\n      });\n      if (!response.ok) {\n        throw new Error(`Source blob upload failed (${response.status})`);\n      }\n    }),\n  );\n\n  await client.artifacts.uploadManifest(projectId, artifactId, {\n    files: files.map((file) => ({ path: file.path, hash: file.hash })),\n  });\n}\n\ntype DeployOptions = {\n  dir: string;\n  projectId: string;\n  filter?: string[];\n};\n\nasync function sleep(ms: number): Promise<void> {\n  await new Promise((resolve) => {\n    setTimeout(resolve, ms);\n  });\n}\n\nasync function buildDeployArchive(\n  client: PlatformClient,\n  root: string,\n  projectId: string,\n  filter?: string[],\n): Promise<{ archive: Buffer; sourceFiles: ProjectSourceFile[] }> {\n  if (filter?.length) {\n    const { buildFilteredApp } = await import(\"@keystrokehq/build\");\n    const filtered = await buildFilteredApp({\n      root,\n      filter,\n      collectSources: true,\n      phase: \"deploy\",\n    });\n\n    let activeArchive: Buffer;\n    try {\n      ({ buffer: activeArchive } = await client.artifacts.downloadActiveArchive(projectId));\n    } catch (error) {\n      if (error instanceof PlatformError && error.status === 404) {\n        throw new Error(\"Targeted deploy requires an active artifact — run a full deploy first\");\n      }\n      throw error;\n    }\n\n    const archive = await mergeFilteredArtifact({\n      baseArchive: activeArchive,\n      filtered,\n    });\n\n    return { archive, sourceFiles: filtered.sourceFiles };\n  }\n\n  const { buildApp } = await import(\"@keystrokehq/build\");\n  const { sourceFiles } = await buildApp({\n    root,\n    collectSources: true,\n    emitManifest: true,\n    phase: \"deploy\",\n  });\n\n  return { archive: packProjectArtifact(root), sourceFiles };\n}\n\nexport async function runDeploy(options: DeployOptions): Promise<void> {\n  const root = resolveProjectRoot(options.dir);\n  const config = createCliConfig();\n  const client = createCliPlatformClient(config);\n\n  await ensureLinkedOrganization(config, root);\n\n  let active = await client.organizations.getActive();\n  if (!active) {\n    active = await selectActiveOrganization(config);\n  }\n\n  client.setActiveOrganizationId(active.organization.id);\n\n  const project = await client.projects.get(options.projectId);\n  const { archive, sourceFiles } = await buildDeployArchive(\n    client,\n    root,\n    project.id,\n    options.filter,\n  );\n\n  const created = await client.artifacts.create(project.id);\n\n  // Upload the runtime tarball and the source snapshot in parallel. Source\n  // powers the dashboard's read-only file views; a failure there must not block\n  // the deploy, so it only warns.\n  const uploadPromise = fetch(created.uploadUrl, {\n    method: \"PUT\",\n    body: archive,\n    headers: {\n      \"Content-Type\": \"application/gzip\",\n    },\n  });\n  const sourcePromise = uploadProjectSourceSnapshot(\n    client,\n    project.id,\n    created.artifact.id,\n    sourceFiles,\n  ).catch((error: unknown) => {\n    const message = error instanceof Error ? error.message : \"unknown error\";\n    process.stderr.write(`Warning: failed to upload project source files: ${message}\\n`);\n  });\n\n  const upload = await uploadPromise;\n  await sourcePromise;\n\n  if (!upload.ok) {\n    throw new Error(`Artifact upload failed (${upload.status})`);\n  }\n\n  const completed = await client.artifacts.complete(project.id, created.artifact.id);\n  process.stdout.write(`Deploy ${completed.artifact.id} uploaded\\n`);\n\n  const deadline = Date.now() + DEPLOY_TIMEOUT_MS;\n  while (Date.now() < deadline) {\n    const current = await client.projects.get(project.id);\n    if (current.status === \"active\") {\n      config.set(\"apiTarget\", \"platform\");\n      process.stdout.write(`Project active${current.baseUrl ? `: ${current.baseUrl}` : \"\"}\\n`);\n      return;\n    }\n\n    if (current.status === \"failed\") {\n      throw new Error(current.lastError ?? \"Project runtime failed\");\n    }\n\n    await sleep(POLL_INTERVAL_MS);\n  }\n\n  throw new Error(\"Timed out waiting for project to become active\");\n}\n\nexport function registerDeployCommand(program: Command): void {\n  program\n    .command(\"deploy\")\n    .description(\"Build, upload, and deploy the project to the platform\")\n    .option(\"--dir <path>\", \"Project directory\", process.cwd())\n    .option(\n      \"--filter <entry>\",\n      \"Build and deploy only matching module entry keys (repeatable)\",\n      (value: string, previous: string[]) => [...previous, value],\n      [],\n    )\n    .action(async (options) => {\n      try {\n        const config = createCliConfig();\n        const root = resolveProjectRoot(options.dir);\n        const projectId = await resolveActiveProjectId(config, root);\n        if (!projectId) {\n          throw new Error(\n            \"Usage: keystroke deploy --project <slug> (or run `keystroke project link --project <slug>`)\",\n          );\n        }\n\n        await runDeploy({\n          dir: options.dir,\n          projectId,\n          filter: options.filter.length > 0 ? options.filter : undefined,\n        });\n      } catch (error) {\n        const message = error instanceof Error ? error.message : \"Deploy failed\";\n        process.stderr.write(`${message}\\n`);\n        process.exitCode = 1;\n      }\n    });\n}\n","import { resolvePublicPlatformOrigin } from \"@keystrokehq/shared\";\n\nimport { loadProjectEnv } from \"./project/load-project-env\";\n\n/** Local platform API origin from the project `.env` (`PUBLIC_PLATFORM_URL`). */\nexport function resolveLocalApiOrigin(fromDir = process.cwd()): string {\n  loadProjectEnv(fromDir);\n  return resolvePublicPlatformOrigin(process.env);\n}\n","/** Strip dev-only Node flags so the API child loads built `dist/`, not package `src/`. */\nexport function runtimeChildNodeOptions(nodeOptions: string | undefined): string | undefined {\n  if (!nodeOptions?.trim()) {\n    return undefined;\n  }\n\n  const parts = nodeOptions.trim().split(/\\s+/);\n  const cleaned: string[] = [];\n\n  for (let index = 0; index < parts.length; index++) {\n    const part = parts[index]!;\n    if (part === \"--conditions=development\") {\n      continue;\n    }\n    if (part === \"--conditions\" && parts[index + 1] === \"development\") {\n      index++;\n      continue;\n    }\n    cleaned.push(part);\n  }\n\n  const result = cleaned.join(\" \").trim();\n  return result || undefined;\n}\n\nexport function runtimeChildEnv(\n  parentEnv: NodeJS.ProcessEnv,\n  overrides: Record<string, string>,\n): NodeJS.ProcessEnv {\n  const env: NodeJS.ProcessEnv = { ...parentEnv, ...overrides };\n  delete env.KEYSTROKE_DEV;\n\n  const nodeOptions = runtimeChildNodeOptions(env.NODE_OPTIONS);\n  if (nodeOptions) {\n    env.NODE_OPTIONS = nodeOptions;\n  } else {\n    delete env.NODE_OPTIONS;\n  }\n\n  const hasExplicitDatabaseUrl = Boolean(env.DATABASE_URL?.trim());\n  if (!hasExplicitDatabaseUrl) {\n    // sqlite default: drop Infisical POSTGRES_* (platform/orchestrator only) so they\n    // don't accidentally point the standalone control-plane DB at dev postgres.\n    for (const key of [\n      \"POSTGRES_HOST\",\n      \"POSTGRES_PORT\",\n      \"POSTGRES_DB\",\n      \"POSTGRES_USER\",\n      \"POSTGRES_PASSWORD\",\n      \"DATABASE_SEARCH_PATH\",\n    ]) {\n      delete env[key];\n    }\n    // Standalone uses sqlite control-plane DB (public + per-org files under ./data).\n    env.DATABASE_URL = \"file:./data/public.db\";\n  }\n\n  env.KEYSTROKE_APP_MODE ??= \"standalone\";\n\n  return env;\n}\n","import { pathToFileURL } from \"node:url\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { listenPortFromPublicUrl } from \"@keystrokehq/shared\";\nimport { runtimeChildEnv } from \"./runtime-child-env\";\n\nexport type BootstrapRunOptions = {\n  root: string;\n  runtimeNodeModules: string;\n  apiPort: number;\n};\n\nexport type BootstrapRun = {\n  cwd: string;\n  args: string[];\n  env: NodeJS.ProcessEnv;\n};\n\n/** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */\nexport async function resolveBootstrapRun(options: BootstrapRunOptions): Promise<BootstrapRun> {\n  const { resolveRuntimeBuildArtifact } = await import(\"@keystrokehq/build\");\n  const loader = pathToFileURL(\n    resolveRuntimeBuildArtifact(options.runtimeNodeModules, \"dist/runtime-loader.mjs\"),\n  ).href;\n  const bootstrap = resolveRuntimeBuildArtifact(\n    options.runtimeNodeModules,\n    \"dist/standalone-bootstrap.mjs\",\n  );\n\n  const args: string[] = [`--import=${loader}`];\n  const envFile = join(options.root, \".env\");\n\n  if (existsSync(envFile)) {\n    args.push(`--env-file=${envFile}`);\n  }\n\n  args.push(bootstrap);\n\n  const childEnv = runtimeChildEnv(process.env, {\n    KEYSTROKE_ROOT: options.root,\n    KEYSTROKE_RUNTIME_NODE_MODULES: options.runtimeNodeModules,\n    KEYSTROKE_APP_MODE: \"standalone\",\n  });\n  childEnv.PORT = String(listenPortFromPublicUrl(childEnv.PUBLIC_PLATFORM_URL, options.apiPort));\n\n  return {\n    cwd: options.root,\n    args,\n    env: childEnv,\n  };\n}\n","import { spawn, type ChildProcess } from \"node:child_process\";\n\nexport type ManagedProcess = {\n  name: string;\n  child: ChildProcess;\n};\n\nexport function waitForExit(child: ChildProcess): Promise<number | null> {\n  return new Promise((resolve) => {\n    child.on(\"exit\", (code) => resolve(code ?? null));\n  });\n}\n\nexport async function runUntilExit(processes: ManagedProcess[]): Promise<number | null> {\n  const shutdown = (signal: NodeJS.Signals = \"SIGTERM\") => {\n    for (const { child } of processes) {\n      if (!child.killed && child.pid !== undefined) {\n        child.kill(signal);\n      }\n    }\n  };\n\n  const onSignal = () => {\n    shutdown(\"SIGINT\");\n    process.exit(0);\n  };\n\n  process.on(\"SIGINT\", onSignal);\n  process.on(\"SIGTERM\", onSignal);\n\n  try {\n    const results = await Promise.race(\n      processes.map(async ({ name, child }) => {\n        const code = await waitForExit(child);\n        return { name, code };\n      }),\n    );\n\n    if (results.code !== 0 && results.code !== null) {\n      shutdown();\n      throw new Error(`${results.name} exited with status ${results.code}`);\n    }\n\n    shutdown();\n    return results.code;\n  } finally {\n    process.off(\"SIGINT\", onSignal);\n    process.off(\"SIGTERM\", onSignal);\n  }\n}\n\nexport function spawnNodeScript(options: {\n  cwd: string;\n  args: string[];\n  env: NodeJS.ProcessEnv;\n}): ChildProcess {\n  return spawn(\"node\", options.args, {\n    cwd: options.cwd,\n    env: options.env,\n    stdio: \"inherit\",\n  });\n}\n","import { spawnSync } from \"node:child_process\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nconst NATIVE_PACKAGES = [\"better-sqlite3\"] as const;\n\nfunction isMissingBindingsError(error: unknown): boolean {\n  return error instanceof Error && error.message.includes(\"Could not locate the bindings file\");\n}\n\nfunction rebuildNativePackage(require: NodeRequire, pkg: string): void {\n  const pkgDir = dirname(require.resolve(`${pkg}/package.json`));\n  const npm = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n  const result = spawnSync(npm, [\"run\", \"install\"], { cwd: pkgDir, stdio: \"inherit\" });\n\n  if (result.status !== 0) {\n    throw new Error(`Failed to build ${pkg} native bindings. Try: pnpm rebuild -g ${pkg}`);\n  }\n}\n\n/** Compile native addons when pnpm skipped dependency install scripts (common on global install). */\nexport function ensureNativeDeps(nodeModulesRoot: string): void {\n  const anchor = join(nodeModulesRoot, \"@keystrokehq\", \"server\", \"package.json\");\n  const require = createRequire(anchor);\n\n  for (const pkg of NATIVE_PACKAGES) {\n    try {\n      require(pkg);\n    } catch (error) {\n      if (!isMissingBindingsError(error)) {\n        throw error;\n      }\n\n      process.stderr.write(`Building ${pkg} native bindings…\\n`);\n      rebuildNativePackage(require, pkg);\n      require(pkg);\n    }\n  }\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/** Directory whose `node_modules/@keystrokehq/runtime` ships with the CLI pack. */\nexport function resolveCliRuntimeNodeModules(cliRoot: string): string {\n  let dir = cliRoot;\n\n  while (dir !== dirname(dir)) {\n    const nodeModules = join(dir, \"node_modules\");\n    if (existsSync(join(nodeModules, \"@keystrokehq\", \"runtime\"))) {\n      return nodeModules;\n    }\n    dir = dirname(dir);\n  }\n\n  throw new Error(\n    \"Keystroke runtime packages are missing. Reinstall or repack the CLI (expected @keystrokehq/runtime in node_modules).\",\n  );\n}\n","/**\n * `keystroke dev` — watch-build + API restart.\n *\n * NOT true hot reload. On src/ changes tsdown rebuilds dist/, then we stop and\n * boot the API again so route discovery picks up new agents/workflows/triggers.\n */\nimport type { Command } from \"commander\";\nimport type { ChildProcess } from \"node:child_process\";\nimport { createCliConfig, getConfigDir } from \"../config\";\nimport { resolveLocalApiOrigin } from \"../resolve-local-api-origin\";\nimport { clearDevSession, writeDevSession } from \"../dev-session\";\nimport { resolveBootstrapRun } from \"../project/bootstrap-run\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { spawnNodeScript } from \"../process/run-processes\";\nimport { ensureNativeDeps } from \"../runtime/ensure-native-deps\";\nimport { resolveCliRuntimeNodeModules } from \"../runtime/resolve-runtime-node-modules\";\n\nconst DEV_BANNER = \"keystroke dev: watch rebuilds dist/ and restarts the API — not hot reload.\\n\";\n\ntype DevOptions = {\n  dir: string;\n  port?: number;\n};\n\nfunction stopChild(child: ChildProcess | undefined): void {\n  if (child && !child.killed && child.pid !== undefined) {\n    child.kill(\"SIGTERM\");\n  }\n}\n\nfunction resolveDevServerUrl(root: string, portOverride?: number): string {\n  const url = new URL(resolveLocalApiOrigin(root));\n  if (portOverride !== undefined) {\n    url.port = String(portOverride);\n  }\n  return url.origin;\n}\n\nexport async function runDev(options: DevOptions): Promise<void> {\n  const root = resolveProjectRoot(options.dir);\n\n  const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));\n  ensureNativeDeps(runtimeNodeModules);\n\n  const cliConfig = createCliConfig();\n  const configDir = getConfigDir(cliConfig);\n\n  process.stdout.write(DEV_BANNER);\n\n  const serverUrl = resolveDevServerUrl(root, options.port);\n  const apiPort = Number(new URL(serverUrl).port || 80);\n\n  writeDevSession(\n    {\n      pid: process.pid,\n      port: apiPort,\n      root,\n      serverUrl,\n    },\n    configDir,\n  );\n\n  let apiChild: ChildProcess | undefined;\n  let restarting = false;\n  let firstBoot = true;\n\n  const restartApi = async () => {\n    if (restarting) {\n      return;\n    }\n\n    restarting = true;\n    stopChild(apiChild);\n    const bootstrap = await resolveBootstrapRun({\n      root,\n      runtimeNodeModules,\n      apiPort,\n    });\n    apiChild = spawnNodeScript(bootstrap);\n\n    if (firstBoot) {\n      firstBoot = false;\n      process.stdout.write(`API: ${serverUrl}\\n`);\n    } else {\n      process.stdout.write(\"API restarted after dist rebuild (not hot reload).\\n\");\n    }\n\n    restarting = false;\n  };\n\n  const shutdown = () => {\n    clearDevSession(configDir);\n    stopChild(apiChild);\n    process.exit(0);\n  };\n\n  process.on(\"SIGINT\", shutdown);\n  process.on(\"SIGTERM\", shutdown);\n\n  try {\n    const { watchApp } = await import(\"@keystrokehq/build\");\n    await watchApp({\n      root,\n      clean: false,\n      onRebuild: restartApi,\n    });\n  } finally {\n    process.off(\"SIGINT\", shutdown);\n    process.off(\"SIGTERM\", shutdown);\n    clearDevSession(configDir);\n    stopChild(apiChild);\n  }\n}\n\nexport function registerDevCommand(program: Command): void {\n  program\n    .command(\"dev\")\n    .description(\"Watch src/, rebuild dist/, and restart the API (not true hot reload)\")\n    .option(\"--dir <path>\", \"Project directory\", process.cwd())\n    .option(\"--port <number>\", \"API port\", (value) => Number(value))\n    .action(async (options) => {\n      try {\n        await runDev({\n          dir: options.dir,\n          port: options.port,\n        });\n      } catch (error) {\n        const message = error instanceof Error ? error.message : \"Dev failed\";\n        process.stderr.write(`${message}\\n`);\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { McpReadClient } from \"@keystrokehq/mcp\";\n\ntype ToolResultLike = {\n  content?: Array<{ type?: string; text?: string }>;\n};\n\n/**\n * Render an MCP tool result for the terminal. The docs tools return text/markdown\n * blocks (search hits, file contents, sandbox stdout/stderr), so we pass them through\n * verbatim and only fall back to JSON when a result carries no text.\n */\nexport function renderToolResult(result: unknown): string {\n  const blocks = (result as ToolResultLike)?.content;\n  if (Array.isArray(blocks)) {\n    const text = blocks\n      .filter((block) => block?.type === \"text\" && typeof block.text === \"string\")\n      .map((block) => block.text)\n      .join(\"\\n\");\n    if (text.length > 0) {\n      return text;\n    }\n  }\n  return JSON.stringify(result, null, 2);\n}\n\n/** Call a docs MCP tool and render its result as text. */\nexport async function callDocsTool(\n  client: McpReadClient,\n  name: string,\n  args: Record<string, unknown>,\n): Promise<string> {\n  const result = await client.callTool({ name, arguments: args });\n  return renderToolResult(result);\n}\n","import { resolveDocsMcpUrl } from \"@keystrokehq/shared\";\nimport type Conf from \"conf\";\n\nimport { getWebUrl, type CliConfig } from \"../../config\";\n\n/**\n * Public Keystroke docs MCP endpoint (Mintlify-hosted, no auth).\n * Derived from the configured web URL; `KEYSTROKE_DOCS_MCP_URL` overrides for dev/testing.\n */\nexport function getDocsMcpUrl(config: Conf<CliConfig>): string {\n  return resolveDocsMcpUrl({\n    webUrl: getWebUrl(config),\n    override: process.env.KEYSTROKE_DOCS_MCP_URL,\n  });\n}\n","import { withMcpReadClient } from \"@keystrokehq/mcp\";\nimport { DOCS_QUERY_TOOL } from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { callDocsTool } from \"./run-docs\";\nimport { getDocsMcpUrl } from \"./docs-mcp-url\";\n\nexport function registerDocsQueryCommand(docs: Command): void {\n  docs\n    .command(\"query\")\n    .description(\n      \"Read the Keystroke docs filesystem with a shell-style command (cat, rg, ls, tree)\",\n    )\n    .argument(\"<command>\", 'Read-only command, e.g. \"cat /quickstart.mdx\" or \"rg -il auth /\"')\n    .action((command: string) =>\n      runStandaloneCliCommand(\"Docs query failed\", async ({ config }) => {\n        const url = getDocsMcpUrl(config);\n        // The command runs in Mintlify's server-side sandbox, not on this machine.\n        const output = await withMcpReadClient(url, (client) =>\n          callDocsTool(client, DOCS_QUERY_TOOL, { command }),\n        );\n        process.stdout.write(`${output}\\n`);\n      }),\n    );\n}\n","import { withMcpReadClient } from \"@keystrokehq/mcp\";\nimport { DOCS_SEARCH_TOOL } from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { callDocsTool } from \"./run-docs\";\nimport { getDocsMcpUrl } from \"./docs-mcp-url\";\n\nexport function registerDocsSearchCommand(docs: Command): void {\n  docs\n    .command(\"search\")\n    .description(\"Search the Keystroke documentation for relevant pages and examples\")\n    .argument(\"<query>\", \"Search query\")\n    .action((query: string) =>\n      runStandaloneCliCommand(\"Docs search failed\", async ({ config }) => {\n        const url = getDocsMcpUrl(config);\n        const output = await withMcpReadClient(url, (client) =>\n          callDocsTool(client, DOCS_SEARCH_TOOL, { query }),\n        );\n        process.stdout.write(`${output}\\n`);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\n\nimport { registerDocsQueryCommand } from \"./query\";\nimport { registerDocsSearchCommand } from \"./search\";\n\nexport function registerDocsCommand(program: Command): void {\n  const docs = program.command(\"docs\").description(\"Search and read the Keystroke documentation\");\n\n  registerDocsSearchCommand(docs);\n  registerDocsQueryCommand(docs);\n}\n","import type Conf from \"conf\";\nimport type { HistoryListOptions } from \"@keystrokehq/sdk/platform\";\n\nimport type { CliConfig } from \"../../config\";\nimport { requireAdminRole } from \"../../organization/require-admin-role\";\nimport { withActivePlatformClient } from \"../project/run-project\";\n\nexport async function runHistoryList(\n  config: Conf<CliConfig>,\n  filters?: HistoryListOptions,\n): Promise<void> {\n  if (filters?.admin) {\n    await requireAdminRole(config);\n  }\n\n  await withActivePlatformClient(config, async (platform) => {\n    const runs = await platform.history.list(filters);\n    process.stdout.write(`${JSON.stringify(runs, null, 2)}\\n`);\n  });\n}\n\nexport async function runHistoryGet(config: Conf<CliConfig>, runId: string): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const run = await platform.history.get(runId);\n    process.stdout.write(`${JSON.stringify(run, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { getPlatformUrl, getWebUrl } from \"../../config\";\nimport { runHistoryGet, runHistoryList } from \"./run-history\";\n\nexport function registerHistoryCommand(program: Command): void {\n  const history = program.command(\"history\").description(\"List and inspect platform run history\");\n\n  history\n    .command(\"list\")\n    .description(\"List runs across projects in the active organization\")\n    .option(\"--project <id>\", \"Filter by project id\")\n    .option(\n      \"--status <status>\",\n      \"Filter by status (pending, running, sleeping, waiting_hook, completed, failed, canceled)\",\n    )\n    .option(\"--kind <kind>\", \"Filter by kind (workflow or agent)\")\n    .option(\"--admin\", \"List all org resources (org owner or admin only)\")\n    .action(\n      async (options: { project?: string; status?: string; kind?: string; admin?: boolean }) => {\n        const config = createCliConfig();\n        try {\n          await runHistoryList(config, {\n            ...(options.project ? { project: options.project } : {}),\n            ...(options.status\n              ? {\n                  status: options.status as\n                    | \"pending\"\n                    | \"running\"\n                    | \"sleeping\"\n                    | \"waiting_hook\"\n                    | \"completed\"\n                    | \"failed\"\n                    | \"canceled\",\n                }\n              : {}),\n            ...(options.kind ? { kind: options.kind as \"workflow\" | \"agent\" } : {}),\n            ...(options.admin ? { admin: true } : {}),\n          });\n        } catch (error) {\n          process.stderr.write(\n            `${formatCliError(error, \"List history failed\", {\n              serverUrl: getPlatformUrl(config),\n              webUrl: getWebUrl(config),\n            })}\\n`,\n          );\n          process.exitCode = 1;\n        }\n      },\n    );\n\n  history\n    .command(\"get\")\n    .description(\"Get run details\")\n    .argument(\"<runId>\", \"Run id\")\n    .action(async (runId: string) => {\n      const config = createCliConfig();\n      try {\n        await runHistoryGet(config, runId);\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Get history run failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { Command } from \"commander\";\nimport { runCliCommand } from \"../errors\";\n\nexport function registerHealthCommand(program: Command): void {\n  program\n    .command(\"health\")\n    .description(\"Check connectivity to the keystroke API\")\n    .action(() =>\n      runCliCommand(\"Health check failed\", async ({ client }) => {\n        const result = await client.health.check();\n        process.stdout.write(`${JSON.stringify(result)}\\n`);\n      }),\n    );\n}\n","const KEBAB_CASE = /^[a-z][a-z0-9-]*$/;\nconst HAS_EMOJI = /\\p{Extended_Pictographic}/u;\nconst HAS_UPPERCASE = /[A-Z]/;\nconst HAS_WHITESPACE = /\\s/;\nconst HAS_UNDERSCORE = /_/;\n\nconst EXAMPLE = \"my-keystroke\";\nconst RULES = \"Use lowercase letters, numbers, and hyphens only\";\n\nfunction projectNameValidationError(name: string): string {\n  if (HAS_UPPERCASE.test(name)) {\n    return `Project name must be lowercase (${RULES}; e.g. ${EXAMPLE})`;\n  }\n  if (HAS_WHITESPACE.test(name)) {\n    return `Project name cannot contain spaces (${RULES}; e.g. ${EXAMPLE})`;\n  }\n  if (HAS_UNDERSCORE.test(name)) {\n    return `Project name cannot contain underscores (${RULES}; e.g. ${EXAMPLE})`;\n  }\n  if (HAS_EMOJI.test(name)) {\n    return `Project name cannot contain emojis (${RULES}; e.g. ${EXAMPLE})`;\n  }\n  if (/[^a-z0-9-]/.test(name)) {\n    return `Project name cannot contain special characters (${RULES}; e.g. ${EXAMPLE})`;\n  }\n  if (!/^[a-z]/.test(name)) {\n    return `Project name must start with a lowercase letter (e.g. ${EXAMPLE})`;\n  }\n  return `Project name must be kebab-case (${RULES}; e.g. ${EXAMPLE})`;\n}\n\nexport function assertProjectName(name: string): string {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    throw new Error(\"Project name is required\");\n  }\n\n  if (!KEBAB_CASE.test(trimmed)) {\n    throw new Error(projectNameValidationError(trimmed));\n  }\n\n  return trimmed;\n}\n\nexport function projectNameFromDirectory(directory: string): string {\n  const base = directory.split(/[/\\\\]/).filter(Boolean).at(-1) ?? directory;\n  return assertProjectName(base);\n}\n","import { confirm, input } from \"@inquirer/prompts\";\nimport { resolve } from \"node:path\";\nimport { assertProjectName, projectNameFromDirectory } from \"./project-name\";\nimport type { InitOptions } from \"./types\";\n\nexport type InitPromptResult = {\n  projectName: string;\n  targetDir: string;\n};\n\nexport async function promptInitOptions(options: InitOptions): Promise<InitPromptResult> {\n  const defaultName =\n    options.name ??\n    (options.directory ? projectNameFromDirectory(options.directory) : \"my-keystroke\");\n\n  const projectName = assertProjectName(\n    options.name ??\n      (await input({\n        message: \"Project name\",\n        default: defaultName,\n        validate: (value) => {\n          try {\n            assertProjectName(value);\n            return true;\n          } catch (error) {\n            return error instanceof Error ? error.message : \"Invalid project name\";\n          }\n        },\n      })),\n  );\n\n  const targetDir = resolve(\n    options.directory ??\n      (await input({\n        message: \"Project directory\",\n        default: `./${projectName}`,\n      })),\n  );\n\n  return { projectName, targetDir };\n}\n\nexport async function confirmTargetDir(targetDir: string): Promise<boolean> {\n  return confirm({\n    message: `Directory \"${targetDir}\" is not empty. Continue and merge files?`,\n    default: false,\n  });\n}\n","// Generated by scripts/generate-catalog-versions.ts — do not edit.\n// Baked when @keystrokehq/cli is built and bundled into the published CLI; keystroke init\n// substitutes {{catalog:*}} from this map without reading the monorepo pnpm-workspace.yaml.\nexport const INIT_CATALOG_DEPS = [\"zod\", \"oxlint\", \"typescript\", \"vitest\", \"@types/node\"] as const;\n\nexport const INIT_CATALOG_VERSIONS = {\n  zod: \"^4.4.3\",\n  oxlint: \"^1.66.0\",\n  typescript: \"^6.0.3\",\n  vitest: \"^4.1.7\",\n  \"@types/node\": \"^25.9.1\",\n} as const satisfies Record<(typeof INIT_CATALOG_DEPS)[number], string>;\n\n// Caret range for the @keystrokehq/keystroke facade, read from its package.json\n// at build time. Used by keystroke init for {{keystrokeVersion}}.\nexport const INIT_KEYSTROKE_VERSION = \"^0.1.24\";\n","import { readdir, readFile, stat, writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { INIT_CATALOG_VERSIONS, INIT_KEYSTROKE_VERSION } from \"./catalog-versions\";\n\nexport type TemplateVariables = {\n  projectName: string;\n  version: string;\n};\n\nfunction renderTemplate(content: string, variables: TemplateVariables): string {\n  let rendered = content\n    .replaceAll(\"{{projectName}}\", variables.projectName)\n    .replaceAll(\"{{keystrokeVersion}}\", INIT_KEYSTROKE_VERSION)\n    .replaceAll(\"{{version}}\", variables.version);\n\n  for (const [dep, version] of Object.entries(INIT_CATALOG_VERSIONS)) {\n    rendered = rendered.replaceAll(`{{catalog:${dep}}}`, version);\n  }\n\n  return rendered;\n}\n\nasync function copyEntry(\n  sourcePath: string,\n  targetPath: string,\n  variables: TemplateVariables,\n): Promise<void> {\n  const info = await stat(sourcePath);\n\n  if (info.isDirectory()) {\n    await mkdir(targetPath, { recursive: true });\n    const entries = await readdir(sourcePath);\n\n    for (const entry of entries) {\n      await copyEntry(join(sourcePath, entry), join(targetPath, entry), variables);\n    }\n\n    return;\n  }\n\n  await mkdir(dirname(targetPath), { recursive: true });\n  const content = await readFile(sourcePath, \"utf8\");\n  await writeFile(targetPath, renderTemplate(content, variables));\n}\n\nexport async function copyTemplate(\n  templateDir: string,\n  targetDir: string,\n  variables: TemplateVariables,\n): Promise<void> {\n  await copyEntry(templateDir, targetDir, variables);\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\n\nexport function resolveTemplateDir(templateName: string, fromModuleUrl = import.meta.url): string {\n  const cliRoot = resolveCliRoot(fromModuleUrl);\n  // Check source first so contributors editing `templates/` see their changes\n  // without rebuilding the CLI. End users don't have `templates/` (only `dist/`\n  // ships), so the fallback is what they hit.\n  const candidates = [\n    join(cliRoot, \"templates\", templateName),\n    join(cliRoot, \"dist\", \"templates\", templateName),\n  ];\n\n  for (const candidate of candidates) {\n    if (existsSync(candidate)) {\n      return candidate;\n    }\n  }\n\n  throw new Error(`Template \"${templateName}\" not found`);\n}\n","import { readFile, unlink, writeFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport { INIT_CATALOG_VERSIONS } from \"./catalog-versions\";\n\nexport const PROJECT_NPMRC = `@keystrokehq:registry=https://registry.npmjs.org\n`;\n\nexport const PROJECT_GITIGNORE = `node_modules/\ndist/\ndata/\ncoverage/\n.env\n.agent/\n`;\n\nfunction linkSpec(fromDir: string, toDir: string): string {\n  const path = relative(fromDir, toDir);\n  return `link:${path.startsWith(\".\") ? path : `./${path}`}`;\n}\n\n/** Monorepo playground only (`KEYSTROKE_DEV` + `playground/`). Distributed init uses copyTemplate. */\nfunction buildPlaygroundPackageJson(\n  projectName: string,\n  targetDir: string,\n  monorepoRoot: string,\n): string {\n  return `${JSON.stringify(\n    {\n      name: projectName,\n      version: \"0.0.0\",\n      private: true,\n      type: \"module\",\n      scripts: {\n        dev: \"keystroke dev\",\n        build: \"keystroke build\",\n        start: \"keystroke start\",\n        lint: \"oxlint .\",\n        typecheck: \"tsc --noEmit\",\n        \"test:unit\": \"vitest run --project unit\",\n        \"test:int\": \"vitest run --project integration\",\n      },\n      dependencies: {\n        \"@keystrokehq/action\": linkSpec(targetDir, join(monorepoRoot, \"packages/action\")),\n        \"@keystrokehq/agent\": linkSpec(targetDir, join(monorepoRoot, \"packages/agent\")),\n        \"@keystrokehq/config\": linkSpec(targetDir, join(monorepoRoot, \"packages/config\")),\n        \"@keystrokehq/workflow\": linkSpec(targetDir, join(monorepoRoot, \"packages/workflow\")),\n        zod: INIT_CATALOG_VERSIONS.zod,\n      },\n      devDependencies: {\n        \"@keystrokehq/cli\": linkSpec(targetDir, join(monorepoRoot, \"apps/cli\")),\n        \"@keystrokehq/tsconfig\": linkSpec(targetDir, join(monorepoRoot, \"packages/tsconfig\")),\n        \"@types/node\": INIT_CATALOG_VERSIONS[\"@types/node\"],\n        oxlint: INIT_CATALOG_VERSIONS.oxlint,\n        typescript: INIT_CATALOG_VERSIONS.typescript,\n        vitest: INIT_CATALOG_VERSIONS.vitest,\n      },\n    },\n    null,\n    2,\n  )}\\n`;\n}\n\n/** Patch hello-world scaffold for monorepo playground/ (link deps, no GitHub Packages). */\nexport async function applyPlaygroundManifest(\n  targetDir: string,\n  projectName: string,\n  monorepoRoot: string,\n): Promise<void> {\n  await writeFile(\n    join(targetDir, \"package.json\"),\n    buildPlaygroundPackageJson(projectName, targetDir, monorepoRoot),\n  );\n\n  try {\n    await unlink(join(targetDir, \".npmrc\"));\n  } catch {\n    // Existing dirs may have a consumer .npmrc from an earlier scaffold.\n  }\n\n  const tsconfigPath = join(targetDir, \"tsconfig.json\");\n  const tsconfig = JSON.parse(await readFile(tsconfigPath, \"utf8\")) as {\n    include?: string[];\n    compilerOptions?: { rootDir?: string };\n  };\n  tsconfig.include = [\"src\", \"keystroke.config.ts\"];\n  if (tsconfig.compilerOptions) {\n    tsconfig.compilerOptions.rootDir = \".\";\n  }\n  await writeFile(tsconfigPath, `${JSON.stringify(tsconfig, null, 2)}\\n`);\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { readCliVersion } from \"../version\";\n\nexport const BUNDLE_VERSION_FILENAME = \".bundle-version\";\nconst LEGACY_BUNDLE_VERSION_RELATIVE_PATH = join(\"skills\", BUNDLE_VERSION_FILENAME);\n\nexport function agentsGuideDir(projectRoot: string): string {\n  return join(projectRoot, \".agents\");\n}\n\nexport function bundleVersionPath(projectRoot: string): string {\n  return join(agentsGuideDir(projectRoot), BUNDLE_VERSION_FILENAME);\n}\n\nexport async function readBundleVersion(projectRoot: string): Promise<string | null> {\n  for (const path of [\n    bundleVersionPath(projectRoot),\n    join(agentsGuideDir(projectRoot), LEGACY_BUNDLE_VERSION_RELATIVE_PATH),\n  ]) {\n    try {\n      return (await readFile(path, \"utf8\")).trim();\n    } catch {\n      // try next path\n    }\n  }\n\n  return null;\n}\n\nexport async function writeBundleVersion(projectRoot: string): Promise<void> {\n  await mkdir(agentsGuideDir(projectRoot), { recursive: true });\n  await writeFile(bundleVersionPath(projectRoot), `${readCliVersion()}\\n`);\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\n\nconst SKILLS_BUNDLE = \"skills-bundle\";\n\nexport function resolveSkillsBundleDir(fromModuleUrl = import.meta.url): string {\n  const cliRoot = resolveCliRoot(fromModuleUrl);\n  // The real skills source lives in `packages/skills/`. Check it first so\n  // contributor edits are picked up without rebuilding the CLI. End users\n  // don't have those paths — they get the bundled copy under `dist/`.\n  const candidates = [\n    join(cliRoot, \"..\", \"..\", \"packages\", \"skills\", \"bundled\"),\n    join(cliRoot, \"..\", \"..\", \"packages\", \"skills\", \"dist\"),\n    join(cliRoot, \"dist\", SKILLS_BUNDLE),\n    join(cliRoot, SKILLS_BUNDLE),\n  ];\n\n  for (const candidate of candidates) {\n    if (existsSync(join(candidate, \"_AGENTS.md\"))) {\n      return candidate;\n    }\n  }\n\n  throw new Error(\"Bundled AGENTS guide not found — run `pnpm --filter @keystrokehq/cli build`\");\n}\n","import { lstat, mkdir, readFile, rm, symlink, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative } from \"node:path\";\nimport { writeBundleVersion } from \"./agents-guide-version\";\nimport { resolveSkillsBundleDir } from \"./resolve-skills-bundle-dir\";\n\nasync function ensureSymlink(target: string, linkPath: string): Promise<void> {\n  await mkdir(dirname(linkPath), { recursive: true });\n  await rm(linkPath, { recursive: true, force: true });\n  await symlink(target, linkPath, \"file\");\n}\n\n/** Writes AGENTS.md from the CLI bundle and recreates the CLAUDE.md symlink. */\nexport async function scaffoldAgentsGuide(\n  projectRoot: string,\n  fromModuleUrl = import.meta.url,\n): Promise<void> {\n  const bundleDir = resolveSkillsBundleDir(fromModuleUrl);\n  const agentsMdPath = join(projectRoot, \"AGENTS.md\");\n\n  const agentsStat = await lstat(agentsMdPath).catch(() => null);\n  if (agentsStat?.isSymbolicLink()) {\n    await rm(agentsMdPath, { force: true });\n  }\n\n  await writeFile(agentsMdPath, await readFile(join(bundleDir, \"_AGENTS.md\"), \"utf8\"));\n\n  await ensureSymlink(\n    relative(dirname(join(projectRoot, \"CLAUDE.md\")), agentsMdPath),\n    join(projectRoot, \"CLAUDE.md\"),\n  );\n\n  await writeBundleVersion(projectRoot);\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\nimport { stripConfigCommentsPreservingLength } from \"./read-project-config\";\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\nexport type LinkedProjectConfigInput = {\n  project?: string;\n  organization?: string;\n};\n\nfunction upsertStringLiteral(\n  source: string,\n  key: \"project\" | \"organization\",\n  value: string | undefined,\n): string {\n  const stripped = stripConfigCommentsPreservingLength(source);\n  const entryPattern = new RegExp(`\\\\b${key}\\\\s*:\\\\s*(['\"])[^'\"]*\\\\1,?\\\\s*\\\\n?`);\n  const entry = value === undefined ? undefined : `  ${key}: \"${value}\",\\n`;\n\n  const match = stripped.match(entryPattern);\n  if (match?.index !== undefined) {\n    const start = match.index;\n    const end = start + match[0].length;\n    if (value === undefined) {\n      return source.slice(0, start) + source.slice(end);\n    }\n    return source.slice(0, start) + entry! + source.slice(end);\n  }\n\n  if (value === undefined) {\n    return source;\n  }\n\n  const defineConfigPattern = /defineConfig\\(\\{\\s*\\n?/;\n  if (defineConfigPattern.test(source)) {\n    return source.replace(defineConfigPattern, `defineConfig({\\n${entry}`);\n  }\n\n  throw new Error(`Could not find defineConfig({ ... }) in ${KEYSTROKE_CONFIG}`);\n}\n\nexport function upsertLinkedProjectConfig(source: string, input: LinkedProjectConfigInput): string {\n  let next = source;\n  if (input.project !== undefined) {\n    next = upsertStringLiteral(next, \"project\", input.project);\n  }\n  if (input.organization !== undefined) {\n    next = upsertStringLiteral(next, \"organization\", input.organization);\n  }\n  return next;\n}\n\n/** Write project/organization slugs into keystroke.config.ts. */\nexport function writeLinkedProjectConfig(\n  input: LinkedProjectConfigInput,\n  fromDir = process.cwd(),\n): string {\n  const root = resolveKeystrokeConfigRoot(fromDir);\n  if (!root) {\n    throw new Error(`No ${KEYSTROKE_CONFIG} found — run from a keystroke project directory`);\n  }\n\n  const configPath = join(root, KEYSTROKE_CONFIG);\n  const source = readFileSync(configPath, \"utf8\");\n  const next = upsertLinkedProjectConfig(source, input);\n  writeFileSync(configPath, next);\n  return configPath;\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nconst EMPTY_SRC_DIRS = [\"files\", \"skills\", \"triggers\"] as const;\n\n/** Ensure standard empty `src/` folders exist (git does not track empty directories). */\nexport async function scaffoldEmptySrcDirs(targetDir: string): Promise<void> {\n  await Promise.all(\n    EMPTY_SRC_DIRS.map((dir) => mkdir(join(targetDir, \"src\", dir), { recursive: true })),\n  );\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { PROJECT_GITIGNORE, PROJECT_NPMRC } from \"./project-files\";\n\n/** Write dotfiles npm/pnpm deploy omits from bundled templates. */\nexport async function scaffoldProjectDotfiles(targetDir: string): Promise<void> {\n  await writeFile(join(targetDir, \".npmrc\"), PROJECT_NPMRC);\n  await writeFile(join(targetDir, \".gitignore\"), PROJECT_GITIGNORE);\n}\n","import { existsSync } from \"node:fs\";\nimport { access, copyFile, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { basename, isAbsolute, join, relative, resolve } from \"node:path\";\nimport {\n  buildPlaygroundWorkspace,\n  installDependencies,\n  installPlaygroundDependencies,\n  resolvePackageManager,\n} from \"./package-manager\";\nimport { assertProjectName, projectNameFromDirectory } from \"./project-name\";\nimport { confirmTargetDir, promptInitOptions } from \"./prompts\";\nimport { copyTemplate } from \"./copy-template\";\nimport { resolveTemplateDir } from \"./resolve-template-dir\";\nimport { applyPlaygroundManifest } from \"./project-files\";\nimport { scaffoldAgentsGuide } from \"../skills/scaffold-agents-guide\";\nimport { writeLinkedProjectConfig } from \"../project/write-project-config\";\nimport { scaffoldEmptySrcDirs } from \"./scaffold-empty-src-dirs\";\nimport { scaffoldProjectDotfiles } from \"./scaffold-project-dotfiles\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport type { InitOptions } from \"./types\";\n\nexport type RunInitOptions = InitOptions & {\n  version: string;\n};\n\nfunction monorepoRoot(): string | null {\n  const root = join(resolveCliRoot(import.meta.url), \"..\", \"..\");\n  return existsSync(join(root, \"pnpm-workspace.yaml\")) ? root : null;\n}\n\nfunction resolvePlaygroundRoot(targetDir: string): string | null {\n  if (process.env.KEYSTROKE_DEV !== \"1\") {\n    return null;\n  }\n\n  const root = monorepoRoot();\n  if (!root) {\n    return null;\n  }\n\n  const rel = relative(join(root, \"playground\"), resolve(targetDir));\n  return rel.length > 0 && !rel.startsWith(\"..\") && !isAbsolute(rel) ? root : null;\n}\n\n/** Example primitives the hello-world template ships; removed when --no-example is set. */\nconst EXAMPLE_FILES = [\n  \"src/actions/greet.ts\",\n  \"src/agents/hello.ts\",\n  \"src/agents/hello.int.test.ts\",\n  \"src/workflows/greeting.ts\",\n  \"src/workflows/greeting.test.ts\",\n] as const;\n\nasync function removeExampleFiles(targetDir: string): Promise<void> {\n  await Promise.all(EXAMPLE_FILES.map((rel) => rm(join(targetDir, rel), { force: true })));\n}\n\n/**\n * Drop the README sections that walk through the example hello agent / greeting\n * workflow — those primitives don't exist in a --no-example scaffold (e.g. MCP\n * sprite bootstrap), so shipping their usage docs is misleading. Example-only\n * prose is fenced with `<!-- example:start -->` / `<!-- example:end -->` markers\n * so this stays robust to README wording changes.\n */\nasync function stripExampleReadme(targetDir: string): Promise<void> {\n  const readmePath = join(targetDir, \"README.md\");\n  let content: string;\n  try {\n    content = await readFile(readmePath, \"utf8\");\n  } catch {\n    return;\n  }\n\n  const next = content.replace(/\\n?<!-- example:start -->\\n[\\s\\S]*?<!-- example:end -->\\n/g, \"\");\n\n  if (next !== content) {\n    await writeFile(readmePath, next);\n  }\n}\n\nasync function directoryExists(path: string): Promise<boolean> {\n  try {\n    await access(path);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function directoryIsEmpty(path: string): Promise<boolean> {\n  if (!(await directoryExists(path))) {\n    return true;\n  }\n\n  const entries = await readdir(path);\n  return entries.length === 0;\n}\n\nfunction resolveHeadlessOptions(options: RunInitOptions): {\n  projectName: string;\n  targetDir: string;\n} {\n  const targetDir = resolve(options.directory ?? options.name ?? \"my-keystroke\");\n  const projectName = assertProjectName(\n    options.name ?? projectNameFromDirectory(basename(targetDir)),\n  );\n\n  return { projectName, targetDir };\n}\n\nexport async function runInit(\n  options: RunInitOptions,\n): Promise<{ targetDir: string; projectName: string }> {\n  const interactive = !options.yes && process.stdin.isTTY;\n  const resolved = interactive ? await promptInitOptions(options) : resolveHeadlessOptions(options);\n  const { projectName, targetDir } = resolved;\n  const playgroundRoot = resolvePlaygroundRoot(targetDir);\n\n  if (!(await directoryIsEmpty(targetDir))) {\n    if (interactive) {\n      const ok = await confirmTargetDir(targetDir);\n      if (!ok) {\n        throw new Error(\"Init cancelled\");\n      }\n    } else if (!options.yes) {\n      throw new Error(\n        `Directory \"${targetDir}\" is not empty. Pass --yes to merge or choose an empty directory.`,\n      );\n    }\n  }\n\n  await copyTemplate(resolveTemplateDir(options.template ?? \"hello-world\"), targetDir, {\n    projectName,\n    version: options.version,\n  });\n  await scaffoldEmptySrcDirs(targetDir);\n\n  if (options.noExample) {\n    await removeExampleFiles(targetDir);\n    await stripExampleReadme(targetDir);\n  }\n\n  if (playgroundRoot) {\n    await applyPlaygroundManifest(targetDir, projectName, playgroundRoot);\n  } else {\n    await scaffoldProjectDotfiles(targetDir);\n  }\n\n  await scaffoldAgentsGuide(targetDir);\n  await copyFile(join(targetDir, \".env.example\"), join(targetDir, \".env\"));\n\n  if (options.project || options.organization) {\n    writeLinkedProjectConfig(\n      {\n        ...(options.project ? { project: options.project } : {}),\n        ...(options.organization ? { organization: options.organization } : {}),\n      },\n      targetDir,\n    );\n  }\n\n  if (!options.skipInstall) {\n    if (playgroundRoot) {\n      installPlaygroundDependencies(targetDir);\n      // `link:` deps consume each package's built dist/; build so `keystroke dev`\n      // works immediately instead of failing with ERR_MODULE_NOT_FOUND.\n      buildPlaygroundWorkspace(playgroundRoot);\n    } else {\n      const manager = resolvePackageManager(options.packageManager);\n      installDependencies(targetDir, manager);\n    }\n  }\n\n  return { targetDir, projectName };\n}\n","import type { Command } from \"commander\";\nimport { runInit } from \"../init/run-init\";\nimport { readCliVersion } from \"../version\";\n\nexport function registerInitCommand(program: Command): void {\n  program\n    .command(\"init\")\n    .description(\"Create a new keystroke project from a template\")\n    .argument(\"[directory]\", \"Directory to create the project in\")\n    .option(\"--name <name>\", \"Project name (kebab-case)\")\n    .option(\"--template <name>\", \"Template to use\", \"hello-world\")\n    .option(\"-y, --yes\", \"Skip prompts (headless mode for scripts and AI agents)\")\n    .option(\"--skip-install\", \"Skip dependency installation\")\n    .option(\"--pm <manager>\", \"Package manager: npm, pnpm, yarn, or bun\")\n    .option(\"--no-example\", \"Scaffold without the example action, agent, and workflow\")\n    .option(\"--project <slug>\", \"Platform project slug to write into keystroke.config.ts\")\n    .option(\"--organization <slug>\", \"Platform organization slug to write into keystroke.config.ts\")\n    .action(async (directory: string | undefined, options) => {\n      try {\n        const result = await runInit({\n          directory,\n          name: options.name,\n          template: options.template,\n          yes: options.yes,\n          skipInstall: options.skipInstall,\n          packageManager: options.pm,\n          noExample: options.example === false,\n          project: options.project,\n          organization: options.organization,\n          version: readCliVersion(),\n        });\n\n        process.stdout.write(\n          `Created keystroke project \"${result.projectName}\" at ${result.targetDir}\\n`,\n        );\n        process.stdout.write(\"\\nNext steps:\\n\");\n        process.stdout.write(`  cd ${result.targetDir}\\n`);\n        process.stdout.write(\"  keystroke auth login                  # once\\n\");\n        if (!options.project) {\n          process.stdout.write(\n            \"  keystroke project link --project <slug>  # link this directory to a platform project\\n\",\n          );\n        }\n        process.stdout.write(\n          \"  keystroke deploy                    # build + ship src/ to the platform\\n\",\n        );\n      } catch (error) {\n        const message = error instanceof Error ? error.message : \"Init failed\";\n        process.stderr.write(`${message}\\n`);\n        process.exitCode = 1;\n      }\n    });\n}\n","import { getSessionWithBearer } from \"@keystrokehq/auth/cli\";\nimport type Conf from \"conf\";\nimport type {\n  InvitableOrganizationMemberRole,\n  UpdateOrganizationRequest,\n} from \"@keystrokehq/shared\";\n\nimport { getAccessToken } from \"../../auth/credentials\";\nimport type { CliConfig } from \"../../config\";\nimport { getPlatformUrl } from \"../../config\";\nimport { withActivePlatformClient } from \"../project/run-project\";\n\nexport async function runOrganizationUpdate(\n  config: Conf<CliConfig>,\n  input: Pick<UpdateOrganizationRequest, \"name\">,\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const organization = await platform.organizations.update(input);\n    process.stdout.write(`${JSON.stringify({ organization }, null, 2)}\\n`);\n  });\n}\n\nexport async function runOrganizationMembersList(config: Conf<CliConfig>): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const members = await platform.members.listOrganizationMembers();\n    process.stdout.write(`${JSON.stringify({ members }, null, 2)}\\n`);\n  });\n}\n\nexport async function runOrganizationMembersInvite(\n  config: Conf<CliConfig>,\n  input: { emails: string[]; role: InvitableOrganizationMemberRole },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const result = await platform.members.inviteOrganizationMembers(input);\n    process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n  });\n}\n\nexport async function runOrganizationMembersRole(\n  config: Conf<CliConfig>,\n  input: { userId: string; role: InvitableOrganizationMemberRole },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const member = await platform.members.updateOrganizationMember(input.userId, {\n      role: input.role,\n    });\n    process.stdout.write(`${JSON.stringify({ member }, null, 2)}\\n`);\n  });\n}\n\nexport async function runOrganizationMembersRemove(\n  config: Conf<CliConfig>,\n  userId: string,\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    await platform.members.removeOrganizationMember(userId);\n    process.stdout.write(`${JSON.stringify({ removed: userId }, null, 2)}\\n`);\n  });\n}\n\nexport async function runOrganizationLeave(config: Conf<CliConfig>): Promise<void> {\n  const platformUrl = getPlatformUrl(config);\n  const token = getAccessToken(platformUrl);\n  if (!token) {\n    throw new Error(\"Not authenticated. Run `keystroke auth login` first.\");\n  }\n\n  const user = await getSessionWithBearer(platformUrl, token);\n  if (!user) {\n    throw new Error(\"Session expired. Run `keystroke auth login` again.\");\n  }\n\n  await withActivePlatformClient(config, async (platform) => {\n    await platform.members.removeOrganizationMember(user.id);\n    platform.setActiveOrganizationId(null);\n    config.delete(\"activeOrganizationId\");\n    process.stdout.write(`${JSON.stringify({ left: user.id }, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\nimport type { InvitableOrganizationMemberRole } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport {\n  runOrganizationLeave,\n  runOrganizationMembersInvite,\n  runOrganizationMembersList,\n  runOrganizationMembersRemove,\n  runOrganizationMembersRole,\n  runOrganizationUpdate,\n} from \"./run-organization\";\n\nfunction collectEmails(value: string, previous: string[]): string[] {\n  return [...previous, value];\n}\n\nfunction parseInvitableRole(role: string): InvitableOrganizationMemberRole {\n  if (role === \"admin\" || role === \"builder\") {\n    return role;\n  }\n\n  throw new Error(\"Role must be admin or builder\");\n}\n\nasync function handleOrganizationError(\n  fallback: string,\n  action: () => Promise<void>,\n): Promise<void> {\n  const config = createCliConfig();\n  try {\n    await action();\n  } catch (error) {\n    process.stderr.write(\n      `${formatCliError(error, fallback, {\n        serverUrl: getPlatformUrl(config),\n        webUrl: getWebUrl(config),\n      })}\\n`,\n    );\n    process.exitCode = 1;\n  }\n}\n\nexport function registerOrganizationCommand(program: Command): void {\n  const organization = program\n    .command(\"organization\")\n    .alias(\"org\")\n    .description(\"Manage the active organization\");\n\n  organization\n    .command(\"update\")\n    .description(\"Update the active organization's display name\")\n    .requiredOption(\"--name <name>\", \"Organization display name\")\n    .action(async (options: { name: string }) => {\n      const config = createCliConfig();\n      await handleOrganizationError(\"Update organization failed\", async () => {\n        await runOrganizationUpdate(config, { name: options.name });\n      });\n    });\n\n  organization\n    .command(\"leave\")\n    .description(\"Leave the active organization\")\n    .option(\"-y, --yes\", \"Skip confirmation prompt\")\n    .action(async (options: { yes?: boolean }) => {\n      const config = createCliConfig();\n      await handleOrganizationError(\"Leave organization failed\", async () => {\n        if (!options.yes) {\n          throw new Error(\"Pass --yes to confirm leaving the active organization\");\n        }\n        await runOrganizationLeave(config);\n      });\n    });\n\n  const members = organization\n    .command(\"members\")\n    .description(\"Manage organization members in the active organization\");\n\n  members\n    .command(\"list\")\n    .description(\"List members in the active organization\")\n    .action(async () => {\n      const config = createCliConfig();\n      await handleOrganizationError(\"List organization members failed\", async () => {\n        await runOrganizationMembersList(config);\n      });\n    });\n\n  members\n    .command(\"invite\")\n    .description(\"Invite people to the active organization\")\n    .requiredOption(\"--email <email>\", \"Email address (repeat for multiple)\", collectEmails, [])\n    .requiredOption(\"--role <role>\", \"Member role (admin or builder)\")\n    .action(async (options: { email: string[]; role: string }) => {\n      const config = createCliConfig();\n      await handleOrganizationError(\"Invite organization members failed\", async () => {\n        await runOrganizationMembersInvite(config, {\n          emails: options.email,\n          role: parseInvitableRole(options.role),\n        });\n      });\n    });\n\n  members\n    .command(\"role\")\n    .description(\"Update a member's role in the active organization\")\n    .argument(\"<userId>\", \"Member user id\")\n    .requiredOption(\"--role <role>\", \"Member role (admin or builder)\")\n    .action(async (userId: string, options: { role: string }) => {\n      const config = createCliConfig();\n      await handleOrganizationError(\"Update organization member role failed\", async () => {\n        await runOrganizationMembersRole(config, {\n          userId,\n          role: parseInvitableRole(options.role),\n        });\n      });\n    });\n\n  members\n    .command(\"remove\")\n    .description(\"Remove a member from the active organization\")\n    .argument(\"<userId>\", \"Member user id\")\n    .action(async (userId: string) => {\n      const config = createCliConfig();\n      await handleOrganizationError(\"Remove organization member failed\", async () => {\n        await runOrganizationMembersRemove(config, userId);\n      });\n    });\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { cliBinaryName } from \"../../errors/command-input\";\nimport { listOrganizations } from \"../../organization/active-organization\";\nimport { writeLinkedProjectConfig } from \"../../project/write-project-config\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nexport async function runProjectLink(\n  config: Conf<CliConfig>,\n  projectRef: string,\n  fromDir = process.cwd(),\n): Promise<void> {\n  await withActivePlatformClient(\n    config,\n    async (platform) => {\n      const project = await resolveProjectRef(platform, projectRef);\n      const organizations = await listOrganizations(config);\n      const membership = organizations.find(\n        (entry) => entry.organization.id === project.organizationId,\n      );\n      if (!membership) {\n        throw new Error(\n          `Organization for project ${formatProjectLabel(project)} was not found or you do not have access`,\n        );\n      }\n\n      const configPath = writeLinkedProjectConfig(\n        {\n          project: project.slug,\n          organization: membership.organization.slug,\n        },\n        fromDir,\n      );\n\n      process.stdout.write(\n        `Linked ${configPath} to ${membership.organization.slug}/${formatProjectLabel(project)}\\n` +\n          `Deploy with: ${cliBinaryName()} deploy\\n`,\n      );\n    },\n    fromDir,\n    false,\n  );\n}\n","import type Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { InviteProjectMembersRequest, ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { getCliTargetOptions } from \"../../target-options\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nasync function resolveMembersProject(\n  platform: PlatformClient,\n  config: Conf<CliConfig>,\n  projectRef?: string,\n) {\n  const ref = projectRef ?? getCliTargetOptions().projectId ?? readLinkedProjectConfig().project;\n  if (!ref) {\n    throw new Error(\"Usage: keystroke --project <slug> project members <command>\");\n  }\n\n  return resolveProjectRef(platform, ref);\n}\n\nexport async function runProjectMembersList(\n  config: Conf<CliConfig>,\n  options: { projectRef?: string },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveMembersProject(platform, config, options.projectRef);\n    const members = await platform.members.listForProject(project.id);\n    process.stdout.write(`${JSON.stringify({ members }, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectMembersInvite(\n  config: Conf<CliConfig>,\n  input: InviteProjectMembersRequest & { projectRef?: string },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveMembersProject(platform, config, input.projectRef);\n    const result = await platform.members.inviteToProject({\n      projectId: project.id,\n      emails: input.emails,\n      role: input.role,\n    });\n    process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectMembersRole(\n  config: Conf<CliConfig>,\n  input: { projectRef?: string; userId: string; role: ProjectUserRole },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveMembersProject(platform, config, input.projectRef);\n    const member = await platform.members.updateProjectMember(project.id, input.userId, {\n      role: input.role,\n    });\n    process.stdout.write(`${JSON.stringify({ member }, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectMembersRemove(\n  config: Conf<CliConfig>,\n  input: { projectRef?: string; userId: string },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveMembersProject(platform, config, input.projectRef);\n    await platform.members.removeProjectMember(project.id, input.userId);\n    process.stdout.write(`${JSON.stringify({ removed: input.userId }, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectMembersLeave(\n  config: Conf<CliConfig>,\n  options: { projectRef?: string },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveMembersProject(platform, config, options.projectRef);\n    await platform.members.leaveProject(project.id);\n    process.stdout.write(`${JSON.stringify({ left: project.id }, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\nimport type Conf from \"conf\";\nimport type { ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { getCliTargetOptions } from \"../../target-options\";\nimport {\n  runProjectMembersInvite,\n  runProjectMembersLeave,\n  runProjectMembersList,\n  runProjectMembersRemove,\n  runProjectMembersRole,\n} from \"./run-project-members\";\n\nfunction collectEmails(value: string, previous: string[]): string[] {\n  return [...previous, value];\n}\n\nfunction parseProjectRole(role: string): ProjectUserRole {\n  if (role === \"admin\" || role === \"builder\") {\n    return role;\n  }\n\n  throw new Error(\"Role must be admin or builder\");\n}\n\nfunction resolveProjectRefOption(\n  config: Conf<CliConfig>,\n  optionsProject?: string,\n): string | undefined {\n  return optionsProject ?? getCliTargetOptions().projectId ?? readLinkedProjectConfig().project;\n}\n\nfunction projectRefInput(\n  config: Conf<CliConfig>,\n  optionsProject?: string,\n): { projectRef?: string } {\n  const projectRef = resolveProjectRefOption(config, optionsProject);\n  return projectRef ? { projectRef } : {};\n}\n\nasync function handleProjectMembersError(\n  fallback: string,\n  action: () => Promise<void>,\n): Promise<void> {\n  const config = createCliConfig();\n  try {\n    await action();\n  } catch (error) {\n    process.stderr.write(\n      `${formatCliError(error, fallback, {\n        serverUrl: getPlatformUrl(config),\n        webUrl: getWebUrl(config),\n      })}\\n`,\n    );\n    process.exitCode = 1;\n  }\n}\n\nexport function registerProjectMembersCommand(project: Command): void {\n  const members = project.command(\"members\").description(\"Manage members for a platform project\");\n\n  members\n    .command(\"list\")\n    .description(\"List members for a project\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (options: { project?: string }) => {\n      const config = createCliConfig();\n      await handleProjectMembersError(\"List project members failed\", async () => {\n        await runProjectMembersList(config, projectRefInput(config, options.project));\n      });\n    });\n\n  members\n    .command(\"invite\")\n    .description(\"Invite people to a project\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .requiredOption(\"--email <email>\", \"Email address (repeat for multiple)\", collectEmails, [])\n    .requiredOption(\"--role <role>\", \"Project role (admin or builder)\")\n    .action(async (options: { project?: string; email: string[]; role: string }) => {\n      const config = createCliConfig();\n      await handleProjectMembersError(\"Invite project members failed\", async () => {\n        await runProjectMembersInvite(config, {\n          ...projectRefInput(config, options.project),\n          emails: options.email,\n          role: parseProjectRole(options.role),\n        });\n      });\n    });\n\n  members\n    .command(\"role\")\n    .description(\"Update a project member role\")\n    .argument(\"<userId>\", \"Member user id\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .requiredOption(\"--role <role>\", \"Project role (admin or builder)\")\n    .action(async (userId: string, options: { project?: string; role: string }) => {\n      const config = createCliConfig();\n      await handleProjectMembersError(\"Update project member role failed\", async () => {\n        await runProjectMembersRole(config, {\n          ...projectRefInput(config, options.project),\n          userId,\n          role: parseProjectRole(options.role),\n        });\n      });\n    });\n\n  members\n    .command(\"remove\")\n    .description(\"Remove a member from a project\")\n    .argument(\"<userId>\", \"Member user id\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (userId: string, options: { project?: string }) => {\n      const config = createCliConfig();\n      await handleProjectMembersError(\"Remove project member failed\", async () => {\n        await runProjectMembersRemove(config, {\n          ...projectRefInput(config, options.project),\n          userId,\n        });\n      });\n    });\n\n  members\n    .command(\"leave\")\n    .description(\"Leave a project as the current user\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .option(\"-y, --yes\", \"Skip confirmation prompt\")\n    .action(async (options: { project?: string; yes?: boolean }) => {\n      const config = createCliConfig();\n      await handleProjectMembersError(\"Leave project failed\", async () => {\n        if (!options.yes) {\n          throw new Error(\"Pass --yes to confirm leaving the project\");\n        }\n        await runProjectMembersLeave(config, projectRefInput(config, options.project));\n      });\n    });\n}\n","import type Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { UpdateProjectSettingsRequest } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { getCliTargetOptions } from \"../../target-options\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nasync function resolveSettingsProject(\n  platform: PlatformClient,\n  config: Conf<CliConfig>,\n  projectRef?: string,\n) {\n  const ref = projectRef ?? getCliTargetOptions().projectId ?? readLinkedProjectConfig().project;\n  if (!ref) {\n    throw new Error(\"Usage: keystroke --project <slug> project settings <command>\");\n  }\n\n  return resolveProjectRef(platform, ref);\n}\n\nexport async function runProjectSettingsGet(\n  config: Conf<CliConfig>,\n  options: { projectRef?: string },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveSettingsProject(platform, config, options.projectRef);\n    const settings = await platform.projectSettings.get(project.id);\n    process.stdout.write(`${JSON.stringify({ settings }, null, 2)}\\n`);\n  });\n}\n\nexport async function runProjectSettingsUpdate(\n  config: Conf<CliConfig>,\n  input: UpdateProjectSettingsRequest & { projectRef?: string },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const project = await resolveSettingsProject(platform, config, input.projectRef);\n    const { projectRef: _projectRef, ...patch } = input;\n    const settings = await platform.projectSettings.update(project.id, patch);\n    process.stdout.write(`${JSON.stringify({ settings }, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\nimport type Conf from \"conf\";\nimport type { ProjectInvitePermission, ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { getCliTargetOptions } from \"../../target-options\";\nimport { runProjectSettingsGet, runProjectSettingsUpdate } from \"./run-project-settings\";\n\nfunction resolveProjectRefOption(\n  config: Conf<CliConfig>,\n  optionsProject?: string,\n): string | undefined {\n  return optionsProject ?? getCliTargetOptions().projectId ?? readLinkedProjectConfig().project;\n}\n\nfunction projectRefInput(\n  config: Conf<CliConfig>,\n  optionsProject?: string,\n): { projectRef?: string } {\n  const projectRef = resolveProjectRefOption(config, optionsProject);\n  return projectRef ? { projectRef } : {};\n}\n\nfunction parseProjectRole(role: string): ProjectUserRole {\n  if (role === \"admin\" || role === \"builder\") {\n    return role;\n  }\n\n  throw new Error(\"Default role must be admin or builder\");\n}\n\nfunction parseInvitePermission(permission: string): ProjectInvitePermission {\n  if (permission === \"admin\" || permission === \"all\") {\n    return permission;\n  }\n\n  throw new Error(\"Invite permission must be admin or all\");\n}\n\nasync function handleProjectSettingsError(\n  fallback: string,\n  action: () => Promise<void>,\n): Promise<void> {\n  const config = createCliConfig();\n  try {\n    await action();\n  } catch (error) {\n    process.stderr.write(\n      `${formatCliError(error, fallback, {\n        serverUrl: getPlatformUrl(config),\n        webUrl: getWebUrl(config),\n      })}\\n`,\n    );\n    process.exitCode = 1;\n  }\n}\n\nexport function registerProjectSettingsCommand(project: Command): void {\n  const settings = project\n    .command(\"settings\")\n    .description(\"View and update project governance settings\");\n\n  settings\n    .command(\"get\")\n    .description(\"Get settings for a project\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (options: { project?: string }) => {\n      const config = createCliConfig();\n      await handleProjectSettingsError(\"Get project settings failed\", async () => {\n        await runProjectSettingsGet(config, projectRefInput(config, options.project));\n      });\n    });\n\n  settings\n    .command(\"update\")\n    .description(\"Update settings for a project\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .option(\"--description <description>\", \"Project description\")\n    .option(\"--default-role <role>\", \"Default role for new members (admin or builder)\")\n    .option(\"--invite-permission <permission>\", \"Who can invite members (admin or all)\")\n    .action(\n      async (options: {\n        project?: string;\n        description?: string;\n        defaultRole?: string;\n        invitePermission?: string;\n      }) => {\n        const config = createCliConfig();\n        await handleProjectSettingsError(\"Update project settings failed\", async () => {\n          if (\n            options.description === undefined &&\n            options.defaultRole === undefined &&\n            options.invitePermission === undefined\n          ) {\n            throw new Error(\n              \"At least one of --description, --default-role, or --invite-permission is required\",\n            );\n          }\n\n          await runProjectSettingsUpdate(config, {\n            ...projectRefInput(config, options.project),\n            ...(options.description !== undefined ? { description: options.description } : {}),\n            ...(options.defaultRole !== undefined\n              ? { defaultRole: parseProjectRole(options.defaultRole) }\n              : {}),\n            ...(options.invitePermission !== undefined\n              ? { invitePermission: parseInvitePermission(options.invitePermission) }\n              : {}),\n          });\n        });\n      },\n    );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { resolveActiveProjectId, resolveLinkedProjectRef } from \"../../resolve-project-target\";\nimport { getCliTargetOptions } from \"../../target-options\";\nimport {\n  runProjectCreate,\n  runProjectList,\n  runProjectMetrics,\n  runProjectDeploymentsList,\n  runProjectUpdate,\n  runProjectDelete,\n} from \"./run-project\";\nimport { runProjectLink } from \"./run-project-link\";\nimport { registerProjectMembersCommand } from \"./members\";\nimport { registerProjectSettingsCommand } from \"./settings\";\n\nexport function registerProjectCommand(program: Command): void {\n  const project = program\n    .command(\"project\")\n    .description(\"List, create, update, and delete platform projects\");\n\n  project\n    .command(\"list\")\n    .description(\"List projects in the active organization\")\n    .option(\"--admin\", \"List all org resources (org owner or admin only)\")\n    .action(async (options: { admin?: boolean }) => {\n      const config = createCliConfig();\n      try {\n        await runProjectList(config, { ...(options.admin ? { admin: true } : {}) });\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"List projects failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n\n  project\n    .command(\"metrics\")\n    .description(\"List rollup metrics for projects in the active organization\")\n    .option(\"--project <slug>\", \"Return metrics for a single project\")\n    .option(\"--admin\", \"List all org resources (org owner or admin only)\")\n    .action(async (options: { project?: string; admin?: boolean }) => {\n      const config = createCliConfig();\n      try {\n        await runProjectMetrics(config, {\n          ...(options.project ? { projectRef: options.project } : {}),\n          ...(options.admin ? { admin: true } : {}),\n        });\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"List project metrics failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n\n  const deployments = project\n    .command(\"deployments\")\n    .description(\"View deployment history for platform projects\");\n\n  deployments\n    .command(\"list\")\n    .description(\"List deployment history for a project\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (options: { project?: string }) => {\n      const config = createCliConfig();\n      try {\n        const projectRef =\n          options.project ?? getCliTargetOptions().projectId ?? resolveLinkedProjectRef();\n        if (!projectRef) {\n          throw new Error(\n            \"Usage: keystroke project deployments list --project <slug> (or run `keystroke project link`)\",\n          );\n        }\n\n        await runProjectDeploymentsList(config, { projectRef });\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"List deployments failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n\n  project\n    .command(\"link\")\n    .description(\"Link this directory to a platform project in keystroke.config.ts\")\n    .requiredOption(\"--project <slug>\", \"Platform project slug\")\n    .option(\"--dir <path>\", \"Project directory\", process.cwd())\n    .action(async (options: { project: string; dir: string }) => {\n      const config = createCliConfig();\n      try {\n        await runProjectLink(config, options.project, options.dir);\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Link project failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n\n  project\n    .command(\"create\")\n    .description(\"Create a platform project in the active organization\")\n    .requiredOption(\"--name <name>\", \"Project name\")\n    .option(\"--description <description>\", \"Project description\")\n    .action(async (options: { name: string; description?: string }) => {\n      const config = createCliConfig();\n      try {\n        await runProjectCreate(config, {\n          name: options.name,\n          ...(options.description ? { description: options.description } : {}),\n        });\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Create project failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n\n  project\n    .command(\"update\")\n    .description(\"Update a platform project's name and/or description\")\n    .option(\"--name <name>\", \"Project name\")\n    .option(\"--description <description>\", \"Project description\")\n    .action(async (options: { name?: string; description?: string }) => {\n      const config = createCliConfig();\n      try {\n        const projectId = await resolveActiveProjectId(config);\n        if (!projectId) {\n          throw new Error(\"Usage: keystroke --project <slug> project update --name <name>\");\n        }\n\n        if (!options.name && options.description === undefined) {\n          throw new Error(\"At least one of --name or --description is required\");\n        }\n\n        await runProjectUpdate(config, {\n          projectId,\n          ...(options.name ? { name: options.name } : {}),\n          ...(options.description !== undefined ? { description: options.description } : {}),\n        });\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Update project failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n\n  project\n    .command(\"delete\")\n    .description(\"Delete a platform project\")\n    .option(\"-y, --yes\", \"Skip confirmation prompt\")\n    .action(async (options: { yes?: boolean }) => {\n      const config = createCliConfig();\n      try {\n        const projectId = await resolveActiveProjectId(config);\n        if (!projectId) {\n          throw new Error(\"Usage: keystroke --project <slug> project delete\");\n        }\n\n        if (!options.yes) {\n          throw new Error(\"Pass --yes to confirm project deletion\");\n        }\n\n        await runProjectDelete(config, projectId);\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Delete project failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n\n  registerProjectMembersCommand(project);\n  registerProjectSettingsCommand(project);\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport {\n  PROJECT_PULL_STATE_RELATIVE_PATH,\n  ProjectPullStateSchema,\n  detectProjectPackageManagerFromSnapshot,\n  isAcceptableInstallExit,\n  type ProjectPackageManager,\n} from \"@keystrokehq/shared\";\nimport { spawnSync } from \"node:child_process\";\n\nimport { DEFAULT_PARALLEL_BATCH_SIZE, mapInParallelBatches } from \"@keystrokehq/storage\";\n\nimport { scaffoldAgentsGuide } from \"../../skills/scaffold-agents-guide\";\n\nexport type RunPullOptions = {\n  client: PlatformClient;\n  projectId: string;\n  targetDir: string;\n  force?: boolean;\n};\n\nasync function readPullState(targetDir: string) {\n  try {\n    const raw = await readFile(join(targetDir, PROJECT_PULL_STATE_RELATIVE_PATH), \"utf8\");\n    const parsed = ProjectPullStateSchema.safeParse(JSON.parse(raw));\n    return parsed.success ? parsed.data : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nasync function writePullState(input: {\n  targetDir: string;\n  projectId: string;\n  artifactId: string;\n}): Promise<void> {\n  const state = ProjectPullStateSchema.parse({\n    projectId: input.projectId,\n    artifactId: input.artifactId,\n    pulledAt: new Date().toISOString(),\n  });\n  const path = join(input.targetDir, PROJECT_PULL_STATE_RELATIVE_PATH);\n  await mkdir(dirname(path), { recursive: true });\n  await writeFile(path, `${JSON.stringify(state, null, 2)}\\n`);\n}\n\nasync function writeSourceTree(\n  targetDir: string,\n  files: Array<{ path: string; contents: string }>,\n) {\n  await mapInParallelBatches(files, DEFAULT_PARALLEL_BATCH_SIZE, async (file) => {\n    const absolute = join(targetDir, file.path);\n    await mkdir(dirname(absolute), { recursive: true });\n    await writeFile(absolute, file.contents);\n  });\n}\n\nfunction installDependencies(targetDir: string, manager: ProjectPackageManager): void {\n  // Capture output (rather than inheriting stdio) so we can distinguish a real\n  // failure from pnpm's non-zero exit on ignored build scripts, then re-print it.\n  const result = spawnSync(manager, [\"install\"], { cwd: targetDir, encoding: \"utf8\" });\n  const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n  process.stdout.write(output);\n\n  if (!isAcceptableInstallExit(manager, result.status ?? 1, output)) {\n    throw new Error(`${manager} install failed`);\n  }\n}\n\nexport async function runPull(options: RunPullOptions): Promise<void> {\n  const targetDir = resolve(options.targetDir);\n  await mkdir(targetDir, { recursive: true });\n\n  // Fast-fail before the network download: refuse to overwrite an existing\n  // project unless it was created by a prior pull of this same project (a\n  // managed pull dir, which we may safely refresh) or --force is set.\n  const existing = await readPullState(targetDir);\n  const isManagedPull = existing?.projectId === options.projectId;\n  const hasLocalProject = await readFile(join(targetDir, \"package.json\"), \"utf8\").then(\n    () => true,\n    () => false,\n  );\n\n  if (hasLocalProject && !isManagedPull && !options.force) {\n    throw new Error(\n      \"Target directory already contains a project. Re-run with --force to overwrite from the active deploy.\",\n    );\n  }\n\n  const source = await options.client.artifacts.downloadActiveSource(options.projectId);\n\n  if (existing?.artifactId === source.artifactId) {\n    process.stdout.write(\"Project is already up to date with the active deploy.\\n\");\n    return;\n  }\n\n  await writeSourceTree(targetDir, source.files);\n  installDependencies(targetDir, detectProjectPackageManagerFromSnapshot(source.files));\n  await scaffoldAgentsGuide(targetDir);\n  await writePullState({\n    targetDir,\n    projectId: options.projectId,\n    artifactId: source.artifactId,\n  });\n\n  process.stdout.write(\n    `Pulled ${source.files.length} files from active deploy (${source.artifactId}).\\n`,\n  );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveProjectRoot } from \"../../project/resolve-project-root\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\nimport { runPull } from \"./run-pull\";\n\nexport function registerPullCommand(program: Command): void {\n  program\n    .command(\"pull\")\n    .description(\"Download the active deploy source snapshot into a local directory\")\n    .option(\"--dir <path>\", \"Target directory\", process.cwd())\n    .option(\"--force\", \"Overwrite an existing local project tree\")\n    .action(async (options: { dir: string; force?: boolean }) =>\n      runCliCommand(\"Pull failed\", async () => {\n        const config = createCliConfig();\n        const root = resolveProjectRoot(options.dir);\n        const projectId = await resolveActiveProjectId(config, root);\n        if (!projectId) {\n          throw new Error(\"Usage: keystroke pull --project <slug>\");\n        }\n\n        const client = createCliPlatformClient(config);\n        await runPull({\n          client,\n          projectId,\n          targetDir: options.dir,\n          force: options.force,\n        });\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { resolveLocalApiOrigin } from \"../resolve-local-api-origin\";\nimport { resolveBootstrapRun } from \"../project/bootstrap-run\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { runUntilExit, spawnNodeScript, type ManagedProcess } from \"../process/run-processes\";\nimport { ensureNativeDeps } from \"../runtime/ensure-native-deps\";\nimport { resolveCliRuntimeNodeModules } from \"../runtime/resolve-runtime-node-modules\";\n\ntype StartOptions = {\n  dir: string;\n  port?: number;\n};\n\nfunction resolveStartServerUrl(root: string, portOverride?: number): string {\n  const url = new URL(resolveLocalApiOrigin(root));\n  if (portOverride !== undefined) {\n    url.port = String(portOverride);\n  }\n  return url.origin;\n}\n\nexport async function runStart(options: StartOptions): Promise<void> {\n  const root = resolveProjectRoot(options.dir);\n  const serverUrl = resolveStartServerUrl(root, options.port);\n  const apiPort = Number(new URL(serverUrl).port || 80);\n\n  const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));\n  ensureNativeDeps(runtimeNodeModules);\n  const { buildApp } = await import(\"@keystrokehq/build\");\n  await buildApp({ root, clean: false });\n\n  const bootstrap = await resolveBootstrapRun({\n    root,\n    runtimeNodeModules,\n    apiPort,\n  });\n\n  const processes: ManagedProcess[] = [\n    {\n      name: \"api\",\n      child: spawnNodeScript(bootstrap),\n    },\n  ];\n\n  process.stdout.write(`API: ${serverUrl}\\n`);\n\n  await runUntilExit(processes);\n}\n\nexport function registerStartCommand(program: Command): void {\n  program\n    .command(\"start\")\n    .description(\"Build and run the API server\")\n    .option(\"--dir <path>\", \"Project directory\", process.cwd())\n    .option(\"--port <number>\", \"API port\", (value) => Number(value))\n    .action(async (options) => {\n      try {\n        await runStart({\n          dir: options.dir,\n          port: options.port,\n        });\n      } catch (error) {\n        const message = error instanceof Error ? error.message : \"Start failed\";\n        process.stderr.write(`${message}\\n`);\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../errors\";\n\nexport function registerTriggerListCommand(trigger: Command): void {\n  trigger\n    .command(\"list\")\n    .description(\"List discovered triggers\")\n    .option(\"--endpoint <endpoint>\", \"Only webhook triggers on this shared endpoint\")\n    .action((options: { endpoint?: string }) =>\n      runProjectCliCommand(\"List triggers failed\", async ({ client }) => {\n        const result = await client.triggers.list(\n          options.endpoint ? { endpoint: options.endpoint } : undefined,\n        );\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n}\n\nexport function registerTriggerGetCommand(trigger: Command): void {\n  trigger\n    .command(\"get\")\n    .description(\"Get a trigger by key, or all webhook triggers on a shared endpoint\")\n    .argument(\"<id>\", \"Trigger key or shared webhook endpoint\")\n    .action((id: string) =>\n      runProjectCliCommand(\"Get trigger failed\", async ({ client }) => {\n        const result = await client.triggers.get(id);\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n}\n\nexport function registerTriggerUrlCommand(trigger: Command): void {\n  trigger\n    .command(\"url\")\n    .description(\"Print the webhook URL for a trigger\")\n    .argument(\"<id>\", \"Attachment key or webhook route\")\n    .action((id: string) =>\n      runProjectCliCommand(\"Resolve webhook URL failed\", async ({ client }) => {\n        const url = await client.triggers.webhookUrl(id);\n        process.stdout.write(`${url}\\n`);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../errors\";\n\nfunction collect(value: string, previous: string[]): string[] {\n  return [...previous, value];\n}\n\nexport function registerTriggerPollCommand(trigger: Command): void {\n  trigger\n    .command(\"poll\")\n    .description(\"Run a poll trigger on demand\")\n    .argument(\"<id>\", \"Poll attachment key, or poll source id with --group\")\n    .option(\"--group\", \"Run all attachments that share this poll source id\")\n    .option(\"--workflow <key>\", \"Only trigger this workflow (repeatable)\", collect, [])\n    .option(\"--attachment <key>\", \"Only trigger this attachment (repeatable)\", collect, [])\n    .action((id: string, options: { group?: boolean; workflow: string[]; attachment: string[] }) =>\n      runProjectCliCommand(\"Poll trigger failed\", async ({ client }) => {\n        const result = await client.triggers.poll(id, {\n          ...(options.group ? { group: true } : {}),\n          ...(options.workflow.length > 0 ? { workflows: options.workflow } : {}),\n          ...(options.attachment.length > 0 ? { attachments: options.attachment } : {}),\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../errors\";\n\nexport function registerTriggerRunsCommand(trigger: Command): void {\n  const runs = trigger.command(\"runs\").description(\"List and inspect trigger runs\");\n\n  runs\n    .command(\"list\")\n    .description(\"List runs for a trigger attachment\")\n    .argument(\"<attachmentId>\", \"Trigger attachment key\")\n    .option(\"--limit <n>\", \"Page size (1–100)\", \"20\")\n    .option(\"--cursor <cursor>\", \"Pagination cursor from a previous page\")\n    .option(\"--trigger-type <type>\", \"Filter by trigger type (cron, webhook, poll)\")\n    .action((attachmentId: string, options: Record<string, string | undefined>) =>\n      runProjectCliCommand(\"List trigger runs failed\", async ({ client }) => {\n        const result = await client.triggers.listRuns(attachmentId, {\n          limit: Number(options.limit),\n          ...(options.cursor ? { cursor: options.cursor } : {}),\n          ...(options.triggerType\n            ? { triggerType: options.triggerType as \"cron\" | \"webhook\" | \"poll\" }\n            : {}),\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n\n  runs\n    .command(\"get\")\n    .description(\"Get full details for a trigger run\")\n    .argument(\"<attachmentId>\", \"Trigger attachment key\")\n    .argument(\"<runId>\", \"Trigger run id\")\n    .option(\"--include <parts>\", \"Comma-separated: workflows, trace\")\n    .action((attachmentId: string, runId: string, options: { include?: string }) =>\n      runProjectCliCommand(\"Get trigger run failed\", async ({ client }) => {\n        const result = await client.triggers.getRun(attachmentId, runId, {\n          include: options.include,\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { TriggerAssignment, WorkspaceTriggerDetail } from \"@keystrokehq/shared\";\n\nexport type ResolvedTriggerAttachment = {\n  triggerId: string;\n  attachmentId: string;\n  trigger: WorkspaceTriggerDetail;\n  assignment: TriggerAssignment;\n};\n\nfunction findAssignment(\n  assignments: TriggerAssignment[],\n  attachmentRef: string,\n): TriggerAssignment | undefined {\n  return assignments.find(\n    (entry) => entry.attachmentId === attachmentRef || entry.attachmentSlug === attachmentRef,\n  );\n}\n\nexport async function resolveTriggerAttachment(\n  platform: PlatformClient,\n  triggerRef: string,\n  attachmentRef: string,\n): Promise<ResolvedTriggerAttachment> {\n  let trigger = await platform.triggers.get(triggerRef);\n  if (!trigger) {\n    const triggers = await platform.triggers.list();\n    const summary =\n      triggers.find((entry) => entry.id === triggerRef || entry.slug === triggerRef) ?? null;\n    if (summary) {\n      trigger = await platform.triggers.get(summary.id);\n    }\n  }\n  if (!trigger) {\n    throw new Error(`Trigger not found: ${triggerRef}`);\n  }\n\n  const assignment = findAssignment(trigger.assignments, attachmentRef);\n  if (!assignment) {\n    throw new Error(`Attachment not found on trigger ${trigger.slug}: ${attachmentRef}`);\n  }\n\n  return {\n    triggerId: trigger.id,\n    attachmentId: assignment.attachmentId,\n    trigger,\n    assignment,\n  };\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../project/run-project\";\nimport { resolveTriggerAttachment } from \"./resolve-trigger-attachment\";\n\nexport async function runTriggerAttachmentEnabled(\n  config: Conf<CliConfig>,\n  options: { triggerRef: string; attachmentRef: string; enabled: boolean },\n): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const resolved = await resolveTriggerAttachment(\n      platform,\n      options.triggerRef,\n      options.attachmentRef,\n    );\n    const trigger = await platform.triggers.updateAttachment(\n      resolved.triggerId,\n      resolved.attachmentId,\n      { enabled: options.enabled },\n    );\n    process.stdout.write(`${JSON.stringify(trigger, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runTriggerAttachmentEnabled } from \"./run-attachment-enabled\";\n\nfunction registerAttachmentToggleCommand(\n  attachment: Command,\n  command: \"enable\" | \"disable\",\n  enabled: boolean,\n): void {\n  attachment\n    .command(command)\n    .description(`${command === \"enable\" ? \"Enable\" : \"Disable\"} a trigger attachment`)\n    .argument(\"<triggerRef>\", \"Trigger id or slug\")\n    .argument(\"<attachmentRef>\", \"Attachment id or slug (for example signup:signup-pipeline)\")\n    .action(async (triggerRef: string, attachmentRef: string) => {\n      const config = createCliConfig();\n      try {\n        await runTriggerAttachmentEnabled(config, { triggerRef, attachmentRef, enabled });\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, `${command} trigger attachment failed`, {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n}\n\nexport function registerTriggerAttachmentCommand(trigger: Command): void {\n  const attachment = trigger\n    .command(\"attachment\")\n    .description(\"Enable or disable individual trigger attachments\");\n\n  registerAttachmentToggleCommand(attachment, \"disable\", false);\n  registerAttachmentToggleCommand(attachment, \"enable\", true);\n}\n","import type { Command } from \"commander\";\nimport {\n  registerTriggerGetCommand,\n  registerTriggerListCommand,\n  registerTriggerUrlCommand,\n} from \"./list\";\nimport { registerTriggerPollCommand } from \"./poll\";\nimport { registerTriggerRunsCommand } from \"./runs\";\nimport { registerTriggerAttachmentCommand } from \"./attachment\";\n\nexport function registerTriggerCommand(program: Command): void {\n  const trigger = program.command(\"trigger\").description(\"Invoke and inspect triggers\");\n\n  registerTriggerListCommand(trigger);\n  registerTriggerGetCommand(trigger);\n  registerTriggerUrlCommand(trigger);\n  registerTriggerPollCommand(trigger);\n  registerTriggerRunsCommand(trigger);\n  registerTriggerAttachmentCommand(trigger);\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { requireAdminRole } from \"../../organization/require-admin-role\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\n\nexport function registerWorkflowListCommand(workflow: Command): void {\n  workflow\n    .command(\"list\")\n    .description(\"List workflows in the active organization\")\n    .option(\"--admin\", \"List all org resources (org owner or admin only)\")\n    .action((options: { admin?: boolean }) =>\n      runCliCommand(\n        \"List workflows failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          if (options.admin) {\n            await requireAdminRole(config);\n          }\n          const projectId = await resolveActiveProjectId(config);\n          const result = await client.workflows.list({\n            ...(projectId ? { projectId } : {}),\n            ...(options.admin ? { admin: true } : {}),\n          });\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import { isQueuedRunResponse } from \"@keystrokehq/sdk\";\nimport type { Command } from \"commander\";\nimport { cliBinaryName, parseJsonOption, runProjectCliCommand } from \"../../errors\";\n\nexport function registerWorkflowRunCommand(workflow: Command): void {\n  workflow\n    .command(\"run\")\n    .description(\"Invoke a workflow\")\n    .argument(\"<workflowId>\", \"Workflow key / route id\")\n    .option(\"--input <json>\", \"JSON request body (defaults to {})\", \"{}\")\n    .addHelpText(\n      \"after\",\n      `\nExamples:\n  ${cliBinaryName()} workflow run math --input '{\"first\":1,\"second\":2}'\n  ${cliBinaryName()} workflow run incoming-message --input '{\"message\":\"Hi\",\"sender\":\"you\"}'\n`,\n    )\n    .action((workflowId: string, options: { input: string }) =>\n      runProjectCliCommand(\n        \"Workflow run failed\",\n        async ({ client }) => {\n          const input = parseJsonOption(options.input, \"--input\");\n          const result = await client.workflows.run(workflowId, input);\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n\n          if (isQueuedRunResponse(result)) {\n            process.stderr.write(\n              `Run queued. Track progress:\\n` +\n                `  ${cliBinaryName()} workflow runs get ${workflowId} ${result.runId} --include steps,trace\\n`,\n            );\n          }\n        },\n        {\n          usage: {\n            command: `${cliBinaryName()} workflow run ${workflowId}`,\n            flag: \"--input\",\n          },\n        },\n      ),\n    );\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../project/run-project\";\n\nexport async function runWorkflowRunCancel(config: Conf<CliConfig>, runId: string): Promise<void> {\n  await withActivePlatformClient(config, async (platform) => {\n    const run = await platform.workflows.cancelRun(runId);\n    process.stdout.write(`${JSON.stringify(run, null, 2)}\\n`);\n  });\n}\n","import type { Command } from \"commander\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runProjectCliCommand } from \"../../errors\";\nimport { runWorkflowRunCancel } from \"./cancel-run\";\n\nexport function registerWorkflowRunsCommand(workflow: Command): void {\n  const runs = workflow.command(\"runs\").description(\"List and inspect workflow runs\");\n\n  runs\n    .command(\"list\")\n    .description(\"List runs for a workflow\")\n    .argument(\"<workflowId>\", \"Workflow key / route id\")\n    .option(\"--limit <n>\", \"Page size (1–100)\", \"20\")\n    .option(\"--cursor <cursor>\", \"Pagination cursor from a previous page\")\n    .option(\"--status <status>\", \"Filter by status\")\n    .option(\"--trigger <trigger>\", \"Filter by trigger kind\")\n    .action((workflowId: string, options: Record<string, string | undefined>) =>\n      runProjectCliCommand(\"List workflow runs failed\", async ({ client }) => {\n        const result = await client.workflows.listRuns(workflowId, {\n          limit: Number(options.limit),\n          ...(options.cursor ? { cursor: options.cursor } : {}),\n          ...(options.status\n            ? { status: options.status as \"pending\" | \"running\" | \"completed\" | \"failed\" }\n            : {}),\n          ...(options.trigger\n            ? { trigger: options.trigger as \"api\" | \"cron\" | \"webhook\" | \"poll\" | \"retry\" }\n            : {}),\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n\n  runs\n    .command(\"get\")\n    .description(\"Get full details for a workflow run\")\n    .argument(\"<workflowId>\", \"Workflow key / route id\")\n    .argument(\"<runId>\", \"Workflow run id\")\n    .option(\"--include <parts>\", \"Comma-separated: trigger, steps, trace\")\n    .action((workflowId: string, runId: string, options: { include?: string }) =>\n      runProjectCliCommand(\"Get workflow run failed\", async ({ client }) => {\n        const result = await client.workflows.getRun(workflowId, runId, {\n          include: options.include,\n        });\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n\n  runs\n    .command(\"hooks\")\n    .description(\"List hook tokens and resume URLs for a workflow run\")\n    .argument(\"<workflowId>\", \"Workflow key / route id\")\n    .argument(\"<runId>\", \"Workflow run id\")\n    .action((workflowId: string, runId: string) =>\n      runProjectCliCommand(\"List workflow run hooks failed\", async ({ client }) => {\n        const result = await client.workflows.listHooks(workflowId, runId);\n        process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n      }),\n    );\n\n  runs\n    .command(\"cancel\")\n    .description(\"Cancel a running or queued workflow run\")\n    .argument(\"<runId>\", \"Workflow run id\")\n    .action(async (runId: string) => {\n      const config = createCliConfig();\n      try {\n        await runWorkflowRunCancel(config, runId);\n      } catch (error) {\n        process.stderr.write(\n          `${formatCliError(error, \"Cancel workflow run failed\", {\n            serverUrl: getPlatformUrl(config),\n            webUrl: getWebUrl(config),\n          })}\\n`,\n        );\n        process.exitCode = 1;\n      }\n    });\n}\n","import type { Command } from \"commander\";\nimport { registerWorkflowListCommand } from \"./list\";\nimport { registerWorkflowRunCommand } from \"./run\";\nimport { registerWorkflowRunsCommand } from \"./runs\";\n\nexport function registerWorkflowCommand(program: Command): void {\n  const workflow = program.command(\"workflow\").description(\"Invoke and inspect workflows\");\n\n  registerWorkflowListCommand(workflow);\n  registerWorkflowRunCommand(workflow);\n  registerWorkflowRunsCommand(workflow);\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type {\n  BindChannelInput,\n  ChannelAccount,\n  ChannelConnection,\n  ChannelDirectoryEntry,\n  ChannelPlatform,\n  ChannelPlatformKey,\n  RemoveChannelBindingInput,\n  UpdateChannelBindingInput,\n} from \"@keystrokehq/shared\";\n\nexport async function runChannelPlatformsList(client: PlatformClient): Promise<ChannelPlatform[]> {\n  return client.channels.listPlatforms();\n}\n\nexport async function runChannelAccounts(\n  client: PlatformClient,\n  projectId: string,\n  platform: ChannelPlatformKey,\n): Promise<ChannelAccount[]> {\n  return client.channels.listAccounts(projectId, platform);\n}\n\nexport async function runChannelList(\n  client: PlatformClient,\n  projectId: string,\n  agentId: string,\n): Promise<ChannelConnection[]> {\n  return client.channels.listForAgent(projectId, agentId);\n}\n\nexport async function runChannelDirectory(\n  client: PlatformClient,\n  projectId: string,\n  platform: ChannelPlatformKey,\n  accountId: string,\n): Promise<ChannelDirectoryEntry[]> {\n  return client.channels.listChannels(projectId, platform, accountId);\n}\n\nexport async function runChannelBind(\n  client: PlatformClient,\n  projectId: string,\n  input: BindChannelInput,\n): Promise<ChannelConnection> {\n  return client.channels.bind(projectId, input);\n}\n\nexport async function runChannelUpdateBinding(\n  client: PlatformClient,\n  projectId: string,\n  input: UpdateChannelBindingInput,\n): Promise<ChannelConnection> {\n  return client.channels.updateBinding(projectId, input);\n}\n\nexport async function runChannelUnbind(\n  client: PlatformClient,\n  projectId: string,\n  input: RemoveChannelBindingInput,\n): Promise<ChannelConnection | null> {\n  return client.channels.removeBinding(projectId, input);\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runChannelPlatformsList } from \"./run-channel\";\n\nexport function registerChannelPlatformsCommand(channel: Command): void {\n  const platforms = channel.command(\"platforms\").description(\"Browse gateway-enabled apps\");\n\n  platforms\n    .command(\"list\")\n    .description(\"List apps that support agent external channels\")\n    .action(() =>\n      runCliCommand(\n        \"List channel platforms failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const platforms = await runChannelPlatformsList(client);\n          process.stdout.write(`${JSON.stringify({ platforms }, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { ensureLinkedOrganization } from \"../../resolve-project-target\";\nimport { getCliTargetOptions } from \"../../target-options\";\n\nexport async function resolveChannelProjectId(\n  config: Conf<CliConfig>,\n  projectRef?: string,\n): Promise<string> {\n  const platform = createCliPlatformClient(config);\n  await ensureLinkedOrganization(config);\n  await ensureActiveOrganization(config);\n\n  const ref =\n    projectRef?.trim() ||\n    getCliTargetOptions().projectId?.trim() ||\n    readLinkedProjectConfig().project?.trim();\n\n  if (!ref) {\n    throw new Error(\n      \"Project is required. Pass --project <slug> or run `keystroke project link --project <slug>`.\",\n    );\n  }\n\n  const project = await resolveProjectRef(platform, ref);\n  return project.id;\n}\n","import type { Command } from \"commander\";\nimport type { ChannelPlatformKey } from \"@keystrokehq/shared\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveChannelProjectId } from \"./resolve-channel-project\";\nimport {\n  runChannelAccounts,\n  runChannelBind,\n  runChannelDirectory,\n  runChannelList,\n  runChannelUnbind,\n  runChannelUpdateBinding,\n} from \"./run-channel\";\n\nexport function registerChannelAccountsCommand(channel: Command): void {\n  channel\n    .command(\"accounts\")\n    .description(\"List available workspace accounts for a platform\")\n    .requiredOption(\"--platform <key>\", \"Platform key (slack)\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (options: { platform: string; project?: string }) =>\n      runCliCommand(\"List channel accounts failed\", async () => {\n        const config = createCliConfig();\n        const projectId = await resolveChannelProjectId(config, options.project);\n        const client = createCliPlatformClient(config);\n        await ensureActiveOrganization(config);\n        const accounts = await runChannelAccounts(\n          client,\n          projectId,\n          options.platform as ChannelPlatformKey,\n        );\n        process.stdout.write(`${JSON.stringify({ accounts }, null, 2)}\\n`);\n      }),\n    );\n}\n\nexport function registerChannelListCommand(channel: Command): void {\n  channel\n    .command(\"list\")\n    .description(\"List channel bindings for an agent\")\n    .requiredOption(\"--agent <id>\", \"Agent id\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (options: { agent: string; project?: string }) =>\n      runCliCommand(\"List agent channels failed\", async () => {\n        const config = createCliConfig();\n        const projectId = await resolveChannelProjectId(config, options.project);\n        const client = createCliPlatformClient(config);\n        await ensureActiveOrganization(config);\n        const connections = await runChannelList(client, projectId, options.agent);\n        process.stdout.write(`${JSON.stringify({ connections }, null, 2)}\\n`);\n      }),\n    );\n}\n\nexport function registerChannelDirectoryCommand(channel: Command): void {\n  channel\n    .command(\"directory\")\n    .description(\"List channels available to bind from a platform directory\")\n    .requiredOption(\"--platform <key>\", \"Platform key (slack)\")\n    .requiredOption(\"--account <id>\", \"Workspace account id (team id)\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (options: { platform: string; account: string; project?: string }) =>\n      runCliCommand(\"List channel directory failed\", async () => {\n        const config = createCliConfig();\n        const projectId = await resolveChannelProjectId(config, options.project);\n        const client = createCliPlatformClient(config);\n        await ensureActiveOrganization(config);\n        const channels = await runChannelDirectory(\n          client,\n          projectId,\n          options.platform as ChannelPlatformKey,\n          options.account,\n        );\n        process.stdout.write(`${JSON.stringify({ channels }, null, 2)}\\n`);\n      }),\n    );\n}\n\nexport function registerChannelBindCommand(channel: Command): void {\n  channel\n    .command(\"bind\")\n    .description(\"Bind an agent to a channel\")\n    .requiredOption(\"--agent <id>\", \"Agent id\")\n    .requiredOption(\"--platform <key>\", \"Platform key (slack)\")\n    .requiredOption(\"--account <id>\", \"Workspace account id (team id)\")\n    .requiredOption(\"--channel <id>\", \"Provider channel id\")\n    .option(\"--channel-name <name>\", \"Provider channel name\")\n    .option(\"--mode <mode>\", \"Listen mode (mention, all, dm)\", \"mention\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(\n      async (options: {\n        agent: string;\n        platform: string;\n        account: string;\n        channel: string;\n        channelName?: string;\n        mode?: string;\n        project?: string;\n      }) =>\n        runCliCommand(\"Bind channel failed\", async () => {\n          const config = createCliConfig();\n          const projectId = await resolveChannelProjectId(config, options.project);\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const connection = await runChannelBind(client, projectId, {\n            agentId: options.agent,\n            platform: options.platform as ChannelPlatformKey,\n            accountId: options.account,\n            binding: {\n              channelId: options.channel,\n              channelName: options.channelName ?? options.channel,\n              mode: options.mode as \"mention\" | \"all\" | \"dm\",\n              subscribeOnMention: true,\n            },\n          });\n          process.stdout.write(`${JSON.stringify({ connection }, null, 2)}\\n`);\n        }),\n    );\n}\n\nexport function registerChannelUnbindCommand(channel: Command): void {\n  channel\n    .command(\"unbind\")\n    .description(\"Remove a channel binding from an agent\")\n    .requiredOption(\"--agent <id>\", \"Agent id\")\n    .requiredOption(\"--binding <id>\", \"Binding id\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(async (options: { agent: string; binding: string; project?: string }) =>\n      runCliCommand(\"Unbind channel failed\", async () => {\n        const config = createCliConfig();\n        const projectId = await resolveChannelProjectId(config, options.project);\n        const client = createCliPlatformClient(config);\n        await ensureActiveOrganization(config);\n        const connection = await runChannelUnbind(client, projectId, {\n          agentId: options.agent,\n          bindingId: options.binding,\n        });\n        process.stdout.write(`${JSON.stringify({ connection }, null, 2)}\\n`);\n      }),\n    );\n}\n\nexport function registerChannelUpdateBindingCommand(channel: Command): void {\n  channel\n    .command(\"update-binding\")\n    .description(\"Update a channel binding listen mode or thread setting\")\n    .requiredOption(\"--agent <id>\", \"Agent id\")\n    .requiredOption(\"--binding <id>\", \"Binding id\")\n    .option(\"--mode <mode>\", \"Listen mode (mention, all, dm)\")\n    .option(\"--threads\", \"Enable thread follow-up (subscribe on mention)\")\n    .option(\"--no-threads\", \"Disable thread follow-up\")\n    .option(\"--project <slug>\", \"Project slug\")\n    .action(\n      async (options: {\n        agent: string;\n        binding: string;\n        mode?: string;\n        threads?: boolean;\n        project?: string;\n      }) =>\n        runCliCommand(\"Update channel binding failed\", async () => {\n          const config = createCliConfig();\n          const projectId = await resolveChannelProjectId(config, options.project);\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          const patch: { mode?: \"mention\" | \"all\" | \"dm\"; subscribeOnMention?: boolean } = {};\n          if (options.mode) {\n            patch.mode = options.mode as \"mention\" | \"all\" | \"dm\";\n          }\n          if (options.threads !== undefined) {\n            patch.subscribeOnMention = options.threads;\n          }\n          const connection = await runChannelUpdateBinding(client, projectId, {\n            agentId: options.agent,\n            bindingId: options.binding,\n            patch,\n          });\n          process.stdout.write(`${JSON.stringify({ connection }, null, 2)}\\n`);\n        }),\n    );\n}\n","import type { Command } from \"commander\";\n\nimport { registerChannelPlatformsCommand } from \"./platforms\";\nimport {\n  registerChannelAccountsCommand,\n  registerChannelBindCommand,\n  registerChannelDirectoryCommand,\n  registerChannelListCommand,\n  registerChannelUnbindCommand,\n  registerChannelUpdateBindingCommand,\n} from \"./list\";\n\nexport function registerChannelCommand(program: Command): void {\n  const channel = program.command(\"channel\").description(\"Manage agent external channel bindings\");\n\n  registerChannelPlatformsCommand(channel);\n  registerChannelAccountsCommand(channel);\n  registerChannelListCommand(channel);\n  registerChannelDirectoryCommand(channel);\n  registerChannelBindCommand(channel);\n  registerChannelUnbindCommand(channel);\n  registerChannelUpdateBindingCommand(channel);\n}\n","import { UserPreferencesPatchSchema, type UserPreferencesPatch } from \"@keystrokehq/shared\";\n\nexport function parsePreferenceValue(rawValue: string): unknown {\n  try {\n    return JSON.parse(rawValue);\n  } catch {\n    return rawValue;\n  }\n}\n\nexport function buildPreferencesPatchFromKeyValue(\n  key: string,\n  rawValue: string,\n): UserPreferencesPatch {\n  const trimmedKey = key.trim();\n  if (!trimmedKey) {\n    throw new Error(\"Preference key is required\");\n  }\n\n  const value = parsePreferenceValue(rawValue);\n  const segments = trimmedKey.split(\".\").filter(Boolean);\n  if (segments.length === 0) {\n    throw new Error(\"Preference key is required\");\n  }\n\n  let patch: Record<string, unknown> = { [segments.at(-1)!]: value };\n\n  for (let index = segments.length - 2; index >= 0; index -= 1) {\n    patch = { [segments[index]!]: patch };\n  }\n\n  const parsed = UserPreferencesPatchSchema.safeParse(patch);\n  if (!parsed.success) {\n    const message = parsed.error.issues[0]?.message ?? \"invalid value\";\n    throw new Error(`Invalid preference ${trimmedKey}: ${message}`);\n  }\n\n  return parsed.data;\n}\n","import type { Command } from \"commander\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nimport { createCliConfig } from \"../../config\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { buildPreferencesPatchFromKeyValue } from \"./preferences-patch\";\n\nexport async function runConfigPreferencesGet(platform: PlatformClient): Promise<string> {\n  const preferences = await platform.userPreferences.get();\n  return `${JSON.stringify(preferences, null, 2)}\\n`;\n}\n\nexport async function runConfigPreferencesSet(\n  platform: PlatformClient,\n  key: string,\n  value: string,\n): Promise<string> {\n  const patch = buildPreferencesPatchFromKeyValue(key, value);\n  const preferences = await platform.userPreferences.update(patch);\n  return `${JSON.stringify(preferences, null, 2)}\\n`;\n}\n\nexport function registerConfigPreferencesCommand(config: Command): void {\n  const preferences = config.command(\"preferences\").description(\"Manage user preferences\");\n\n  preferences\n    .command(\"get\")\n    .description(\"Show current user preferences as JSON\")\n    .action(async () => {\n      const cliConfig = createCliConfig();\n      const platform = createCliPlatformClient(cliConfig);\n      process.stdout.write(await runConfigPreferencesGet(platform));\n    });\n\n  preferences\n    .command(\"set\")\n    .description(\"Update a user preference by dot-path key\")\n    .argument(\"<key>\", \"Preference key, e.g. interfaceTheme or sidebar.navIconVisibility\")\n    .argument(\"<value>\", \"Preference value (JSON or plain string)\")\n    .action(async (key: string, value: string) => {\n      const cliConfig = createCliConfig();\n      const platform = createCliPlatformClient(cliConfig);\n      process.stdout.write(await runConfigPreferencesSet(platform, key, value));\n    });\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getConfigDir, getEffectiveApiTarget, getPlatformUrl } from \"../../config\";\nimport { resolveLocalApiOrigin } from \"../../resolve-local-api-origin\";\nimport { readDevSession } from \"../../dev-session\";\nimport {\n  listOrganizations,\n  selectActiveOrganization,\n} from \"../../organization/active-organization\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { registerConfigPreferencesCommand } from \"./preferences\";\n\nexport function registerConfigCommand(program: Command): void {\n  const config = program.command(\"config\").description(\"Manage CLI configuration\");\n\n  registerConfigPreferencesCommand(config);\n\n  config\n    .command(\"show\")\n    .description(\"Show CLI configuration\")\n    .action(() => {\n      const cliConfig = createCliConfig();\n      const configDir = getConfigDir(cliConfig);\n      const linked = readLinkedProjectConfig();\n      process.stdout.write(\n        `${JSON.stringify(\n          {\n            webUrl: cliConfig.get(\"webUrl\"),\n            platformUrl: getPlatformUrl(cliConfig),\n            localApiUrl: resolveLocalApiOrigin(process.cwd()),\n            activeOrganizationId: cliConfig.get(\"activeOrganizationId\"),\n            linkedProject: linked.project ?? null,\n            linkedOrganization: linked.organization ?? null,\n            apiTarget: getEffectiveApiTarget(cliConfig),\n            devSession: readDevSession(configDir) ?? null,\n          },\n          null,\n          2,\n        )}\\n`,\n      );\n    });\n\n  config\n    .command(\"use\")\n    .description(\"Switch API target (local/cloud) or active organization\")\n    .argument(\"[mode]\", \"local, cloud, or org\")\n    .argument(\"[id]\", \"Organization slug when switching org\")\n    .action(async (mode?: string, id?: string) => {\n      const cliConfig = createCliConfig();\n\n      if (!mode || mode === \"local\") {\n        cliConfig.set(\"apiTarget\", \"local\");\n        process.stdout.write(\"Using local keystroke server\\n\");\n        return;\n      }\n\n      if (mode === \"org\") {\n        const membership = await selectActiveOrganization(cliConfig, { organizationRef: id });\n        process.stdout.write(`Using organization ${membership.organization.name}\\n`);\n        return;\n      }\n\n      if (mode === \"cloud\") {\n        cliConfig.set(\"apiTarget\", \"platform\");\n        process.stdout.write(\"Using platform API\\n\");\n        return;\n      }\n\n      throw new Error(\"Usage: keystroke config use [local|cloud|org [slug]]\");\n    });\n\n  config\n    .command(\"org\")\n    .description(\"List organizations you belong to\")\n    .action(async () => {\n      const cliConfig = createCliConfig();\n      const organizations = await listOrganizations(cliConfig);\n      process.stdout.write(`${JSON.stringify({ organizations }, null, 2)}\\n`);\n    });\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { ensureActiveOrganization } from \"../../organization/active-organization\";\nimport { requireAdminRole } from \"../../organization/require-admin-role\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\n\nexport function registerSkillCommand(program: Command): void {\n  const skill = program.command(\"skill\").description(\"Inspect platform skills\");\n\n  skill\n    .command(\"list\")\n    .description(\"List skills in the active organization\")\n    .option(\"--admin\", \"List all org resources (org owner or admin only)\")\n    .action((options: { admin?: boolean }) =>\n      runCliCommand(\n        \"List skills failed\",\n        async () => {\n          const config = createCliConfig();\n          const client = createCliPlatformClient(config);\n          await ensureActiveOrganization(config);\n          if (options.admin) {\n            await requireAdminRole(config);\n          }\n          const projectId = await resolveActiveProjectId(config);\n          const result = await client.skills.list({\n            ...(projectId ? { projectId } : {}),\n            ...(options.admin ? { admin: true } : {}),\n          });\n          process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n        },\n        undefined,\n        { orgScoped: true },\n      ),\n    );\n}\n","import type { Command } from \"commander\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { scaffoldAgentsGuide } from \"../skills/scaffold-agents-guide\";\n\nexport function registerSkillsCommand(program: Command): void {\n  const skills = program.command(\"skills\").description(\"Manage the scaffolded AGENTS guide\");\n\n  skills\n    .command(\"sync\")\n    .description(\"Overwrite AGENTS.md with the CLI version\")\n    .option(\"--dir <path>\", \"Project directory\", process.cwd())\n    .action(async (options) => {\n      try {\n        const root = resolveProjectRoot(options.dir);\n        await scaffoldAgentsGuide(root);\n        process.stdout.write(`Synced AGENTS.md at ${root}\\n`);\n      } catch (error) {\n        const message = error instanceof Error ? error.message : \"AGENTS guide sync failed\";\n        process.stderr.write(`${message}\\n`);\n        process.exitCode = 1;\n      }\n    });\n}\n","import { existsSync, lstatSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { resolveKeystrokeConfigRoot } from \"../project/resolve-keystroke-config-root\";\nimport { readCliVersion } from \"../version\";\nimport { agentsGuideDir, readBundleVersion } from \"./agents-guide-version\";\nimport { scaffoldAgentsGuide } from \"./scaffold-agents-guide\";\n\nfunction commandPath(command: Command): string[] {\n  const names: string[] = [];\n\n  for (let current: Command | null = command; current; current = current.parent) {\n    const name = current.name();\n    if (name && name !== \"keystroke\") {\n      names.unshift(name);\n    }\n  }\n\n  return names;\n}\n\nfunction shouldSkipAutoSync(command: Command): boolean {\n  if (process.env.CI === \"true\" || process.env.CI === \"1\") {\n    return true;\n  }\n\n  const path = commandPath(command);\n  if (path[0] === \"init\") {\n    return true;\n  }\n\n  if (path[0] === \"skills\") {\n    return true;\n  }\n\n  return false;\n}\n\nfunction resolveAutoSyncRoot(command: Command): string | null {\n  const opts = command.opts<{ dir?: string }>();\n  return resolveKeystrokeConfigRoot(opts.dir ?? process.cwd());\n}\n\n/** Sync AGENTS.md when stale; no-op when not in a project or already up to date. */\nexport async function syncAgentsGuide(command: Command): Promise<void> {\n  if (shouldSkipAutoSync(command)) {\n    return;\n  }\n\n  const projectRoot = resolveAutoSyncRoot(command);\n  if (!projectRoot) {\n    return;\n  }\n\n  const agentsMdPath = join(projectRoot, \"AGENTS.md\");\n  if (!existsSync(agentsMdPath)) {\n    return;\n  }\n\n  if (lstatSync(agentsMdPath).isSymbolicLink()) {\n    return;\n  }\n\n  const legacySkillsDir = join(agentsGuideDir(projectRoot), \"skills\");\n  if (existsSync(legacySkillsDir) && lstatSync(legacySkillsDir).isSymbolicLink()) {\n    return;\n  }\n\n  const currentVersion = readCliVersion();\n  const bundledVersion = await readBundleVersion(projectRoot);\n  if (bundledVersion === currentVersion) {\n    return;\n  }\n\n  await scaffoldAgentsGuide(projectRoot);\n  process.stderr.write(`Synced AGENTS.md to ${currentVersion}\\n`);\n}\n","import { Command } from \"commander\";\nimport { registerAgentCommand } from \"./commands/agent\";\nimport { registerApiKeyCommand } from \"./commands/api-key\";\nimport { registerAppCommand } from \"./commands/app\";\nimport { registerConnectCommand } from \"./commands/connect\";\nimport { registerCredentialsCommand } from \"./commands/credentials\";\nimport { registerAuthCommand } from \"./commands/auth\";\nimport { registerBuildCommand } from \"./commands/build\";\nimport { registerDeployCommand } from \"./commands/deploy\";\nimport { registerDevCommand } from \"./commands/dev\";\nimport { registerDocsCommand } from \"./commands/docs\";\nimport { registerHistoryCommand } from \"./commands/history\";\nimport { registerHealthCommand } from \"./commands/health\";\nimport { registerInitCommand } from \"./commands/init\";\nimport { registerOrganizationCommand } from \"./commands/organization\";\nimport { registerProjectCommand } from \"./commands/project\";\nimport { registerPullCommand } from \"./commands/pull\";\nimport { registerStartCommand } from \"./commands/start\";\nimport { registerTriggerCommand } from \"./commands/trigger\";\nimport { registerWorkflowCommand } from \"./commands/workflow\";\nimport { registerChannelCommand } from \"./commands/channel\";\nimport { registerConfigCommand } from \"./commands/config\";\nimport { registerSkillCommand } from \"./commands/skill\";\nimport { registerSkillsCommand } from \"./commands/skills\";\nimport { syncAgentsGuide } from \"./skills/sync-agents-guide\";\nimport { readCliVersion } from \"./version\";\nimport { setCliTargetOptions } from \"./target-options\";\n\nexport function createProgram(): Command {\n  const program = new Command()\n    .name(\"keystroke\")\n    .description(\"Build, run, and manage keystroke projects\")\n    .version(readCliVersion())\n    .option(\"--project <slug>\", \"Platform project slug (deploy target or one-off API target)\")\n    .option(\"--local\", \"Force local keystroke server URL\")\n    .hook(\"preAction\", async (thisCommand, actionCommand) => {\n      const opts = thisCommand.opts<{ project?: string; local?: boolean }>();\n      setCliTargetOptions({\n        projectId: opts.project,\n        local: opts.local,\n      });\n      await syncAgentsGuide(actionCommand);\n    });\n\n  registerAuthCommand(program);\n  registerConnectCommand(program);\n  registerConfigCommand(program);\n  registerOrganizationCommand(program);\n  registerApiKeyCommand(program);\n  registerProjectCommand(program);\n  registerHistoryCommand(program);\n  registerCredentialsCommand(program);\n  registerHealthCommand(program);\n  registerDocsCommand(program);\n  registerInitCommand(program);\n  registerSkillsCommand(program);\n  registerSkillCommand(program);\n  registerBuildCommand(program);\n  registerDeployCommand(program);\n  registerPullCommand(program);\n  registerDevCommand(program);\n  registerStartCommand(program);\n  registerAgentCommand(program);\n  registerChannelCommand(program);\n  registerAppCommand(program);\n  registerWorkflowCommand(program);\n  registerTriggerCommand(program);\n  return program;\n}\n\nexport async function runCli(argv: string[]): Promise<void> {\n  const { maybeAutoUpdate } = await import(\"./update/maybe-auto-update\");\n  await maybeAutoUpdate(argv);\n  createProgram().parse(argv);\n}\n","import { runCli } from \"./program\";\n\nawait runCli(process.argv);\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"mappings":"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"}