@keystrokehq/cli 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{dist-CtHP_Lct.mjs → dist-BCJ2M6AP.mjs} +58 -5
- package/dist/{dist-CtHP_Lct.mjs.map → dist-BCJ2M6AP.mjs.map} +1 -1
- package/dist/dist-CB-gBQLB.mjs +3 -0
- package/dist/{dist-BBwM8ovO.mjs → dist-CkZVZjrB.mjs} +25 -11
- package/dist/{dist-BBwM8ovO.mjs.map → dist-CkZVZjrB.mjs.map} +1 -1
- package/dist/{dist-Dq8E-oHm.mjs → dist-D3CcImHe.mjs} +3 -3
- package/dist/{dist-Dq8E-oHm.mjs.map → dist-D3CcImHe.mjs.map} +1 -1
- package/dist/index.mjs +172 -35
- package/dist/index.mjs.map +1 -1
- package/dist/{maybe-auto-update-BO0T4n4K.mjs → maybe-auto-update-Cir__-VX.mjs} +2 -2
- package/dist/{maybe-auto-update-BO0T4n4K.mjs.map → maybe-auto-update-Cir__-VX.mjs.map} +1 -1
- package/dist/{version-DCrWhVju.mjs → version-BCmCJixt.mjs} +2 -2
- package/dist/{version-DCrWhVju.mjs.map → version-BCmCJixt.mjs.map} +1 -1
- package/package.json +2 -2
- package/dist/dist-DAk65OyX.mjs +0 -3
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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","createWorkflowsResource","#hiddenStack","now","getMethod","sleep","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/dev-session.ts","../src/resolve-api-target.ts","../src/target-options.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/resolve-project-target.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/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/project/resolve-keystroke-config-root.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/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/project/resolve-project-root.ts","../src/project/load-project-env.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","../../../packages/storage/dist/pack-artifact-NGxvGcXq.mjs","../src/commands/deploy.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/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/resolve-skills-bundle-dir.ts","../src/skills/sync-bundled-skills.ts","../src/init/scaffold-empty-src-dirs.ts","../src/init/scaffold-project-dotfiles.ts","../src/init/run-init.ts","../src/commands/init.ts","../src/active-project.ts","../src/commands/organization/run-organization.ts","../src/commands/organization/index.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/start.ts","../src/commands/trigger/list.ts","../src/commands/trigger/poll.ts","../src/commands/trigger/runs.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/use-project.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-skills.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, ConnectAuthorizeUrlResponseSchema, ConnectProvidersResponseSchema, CreateCredentialInstanceBodySchema, CredentialInstanceListResponseSchema, CredentialInstanceRecordSchema, HealthResponseSchema, PollRunResponseSchema, PromptInputSchema, PromptResponseSchema, QueuedAgentPromptResponseSchema, QueuedRunResponseSchema, SkipResponseSchema, TriggerDetailResponseSchema, TriggerListResponseSchema, TriggerRunDetailResponseSchema, TriggerRunListResponseSchema, UpdateCredentialInstanceBodySchema, WorkflowRunDetailResponseSchema, 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};\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};\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 JWT bearer auth when a session refresh token is stored; otherwise none. */\nexport function resolveCliAuth(config: Conf<CliConfig>): AuthStrategy {\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, ErrorResponseSchema, GatewayAttachmentRecordSchema, GetCredentialResponseSchema, GetCustomAppResponseSchema, HealthResponseSchema, HistoryRunCancelResponseSchema, HistoryRunDetailResponseSchema, HistoryRunListQuerySchema, HistoryRunListResponseSchema, InviteOrganizationMembersRequestSchema, InviteOrganizationMembersResponseSchema, InviteProjectMembersRequestSchema, InviteProjectMembersResponseSchema, ListAgentMemoryFilesResponseSchema, ListApiKeysResponseSchema, ListAppsResponseSchema, ListCredentialsResponseSchema, ListOrganizationInvitationsResponseSchema, ListOrganizationMembersResponseSchema, ListOrganizationsResponseSchema, ListProjectDeploymentsResponseSchema, ListProjectFilesResponseSchema, ListProjectMembersResponseSchema, ListProjectMetricsResponseSchema, ListProjectsResponseSchema, OrganizationSidebarBrandingPatchSchema, OrganizationSidebarBrandingSchema, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, PresignOrgLogoRequestSchema, PresignOrgLogoResponseSchema, PresignProjectSourceRequestSchema, PresignProjectSourceResponseSchema, PresignUserAvatarRequestSchema, PresignUserAvatarResponseSchema, ProjectReachabilityResponseSchema, ProjectResponseSchema, ProjectSettingsResponseSchema, ProjectSlugAvailabilityResponseSchema, PromptInputSchema, QueuedAgentPromptResponseSchema, RecentResourceListResponseSchema, SkillSummaryDetailResponseSchema, SkillSummaryListResponseSchema, SlugAvailabilityResponseSchema, StartKeystrokeConnectionInputSchema, StartKeystrokeConnectionResultSchema, StartOAuthConnectionInputSchema, StartOAuthConnectionResultSchema, SubmitMarketingContactRequestSchema, SubmitTeamRequestRequestSchema, UpdateChannelBindingBodySchema, UpdateCredentialRequestSchema, UpdateOrganizationMemberRequestSchema, UpdateOrganizationMemberResponseSchema, UpdateOrganizationRequestSchema, UpdateProjectMemberRequestSchema, UpdateProjectMemberResponseSchema, UpdateProjectRequestSchema, UpdateProjectSettingsRequestSchema, UploadProjectSourceManifestRequestSchema, UploadProjectSourceResponseSchema, UpsertGatewayAttachmentBodySchema, UserAvatarPatchSchema, UserAvatarSchema, UserPreferencesPatchSchema, UserPreferencesSchema, WorkflowSummaryDetailResponseSchema, WorkflowSummaryListResponseSchema, 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 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/agent-workspace-files.ts\n/** Provisional — returns empty until platform workspace listing ships. */\nasync function listAgentWorkspaceFilesProvisional(_agentId) {\n\treturn { files: [] };\n}\n/** Provisional — returns empty until platform workspace content ships. */\nasync function getAgentWorkspaceFileContentProvisional(_agentId, _path) {\n\treturn \"\";\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 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\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/** Provisional — persistent agent workspace files under `/workspace/agent`. */\n\t\tasync listWorkspaceFiles(agentId) {\n\t\t\treturn listAgentWorkspaceFilesProvisional(agentId);\n\t\t},\n\t\t/** Provisional — content for a path from {@link listWorkspaceFiles}. */\n\t\tasync getWorkspaceFileContent(agentId, path) {\n\t\t\treturn getAgentWorkspaceFileContentProvisional(agentId, path);\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\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\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/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\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};\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\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 config use 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, 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 type Conf from \"conf\";\n\nimport {\n getConfigDir,\n getEffectiveApiTarget,\n getPlatformUrl,\n getServerUrl,\n type CliConfig,\n} from \"./config\";\nimport { readDevSession } from \"./dev-session\";\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 activeProjectId. */\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 resolveLocalTarget(config: Conf<CliConfig>): ResolvedApiTarget {\n return {\n baseUrl: getServerUrl(config),\n mode: \"local\",\n };\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 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 if (options.local) {\n return resolveLocalTarget(config);\n }\n\n const devSession = readDevSession(getConfigDir(config));\n if (devSession && getEffectiveApiTarget(config) !== \"platform\") {\n return {\n baseUrl: devSession.serverUrl,\n mode: \"local\",\n };\n }\n\n if (options.orgScoped || options.projectScoped === false) {\n if (getEffectiveApiTarget(config) === \"local\") {\n return resolveLocalTarget(config);\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(config);\n }\n\n if (!options.projectScoped) {\n return resolveOrgPlatformTarget(config);\n }\n\n const projectRef = options.projectId ?? config.get(\"activeProjectId\");\n if (!projectRef) {\n throw new Error(\n \"No project selected. Pass `--project <slug>` or run `keystroke config use project <slug>`.\",\n );\n }\n\n return resolvePlatformTarget(config, projectRef);\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 { 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 { createCliClient } from \"../client\";\nimport { createCliConfig, getWebUrl } 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\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 Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { Project } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"./config\";\nimport { createCliPlatformClient } from \"./platform-client\";\nimport { looksLikeUuid, resolveProjectRef } from \"./resolve-resource-ref\";\nimport { getCliTargetOptions } from \"./target-options\";\n\nexport async function resolveActiveProject(\n config: Conf<CliConfig>,\n platform?: PlatformClient,\n): Promise<Project | undefined> {\n const ref = getCliTargetOptions().projectId ?? config.get(\"activeProjectId\");\n if (!ref) {\n return undefined;\n }\n\n const client = platform ?? createCliPlatformClient(config);\n const fromFlag = getCliTargetOptions().projectId;\n\n if (!fromFlag && looksLikeUuid(ref)) {\n return resolveProjectRef(client, ref);\n }\n\n return resolveProjectRef(client, ref);\n}\n\nexport async function resolveActiveProjectId(config: Conf<CliConfig>): Promise<string | undefined> {\n const project = await resolveActiveProject(config);\n return project?.id;\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 } from \"../../resolve-resource-ref\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\n\nexport async function withActivePlatformClient(\n config: Conf<CliConfig>,\n fn: (platform: PlatformClient) => Promise<void>,\n): Promise<void> {\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} deploy --project ${formatProjectLabel(project)}\\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 } from \"@keystrokehq/shared\";\n\nexport async function runAppCreate(client: PlatformClient, input: CreateCustomAppRequest) {\n return client.apps.create(input);\n}\n","import type { Command } from \"commander\";\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\";\n\nexport function registerAppCreateCommand(app: Command): void {\n app\n .command(\"create\")\n .description(\"Create a custom org api_key app\")\n .requiredOption(\"--name <name>\", \"App display name\")\n .option(\"--slug <slug>\", \"App slug segment (defaults from name)\")\n .requiredOption(\"--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 .action((options: { name: string; slug?: string; description: string; field: string[] }) =>\n runCliCommand(\n \"Create app failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await ensureActiveOrganization(config);\n\n const slug = options.slug?.trim() || slugifyAppName(options.name);\n\n const created = await runAppCreate(client, {\n name: options.name.trim(),\n slug,\n description: options.description,\n fields: parseCustomAppFields(options.field),\n });\n\n process.stdout.write(`${JSON.stringify(created, 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 { 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 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 { parseAppSlug } from \"@keystrokehq/shared\";\n\nimport { openUrl } from \"../../auth/open-url\";\n\nexport type ConnectPlatformClient = {\n apps: {\n listCatalog(): Promise<AppCatalogEntry[]>;\n };\n};\n\nexport function resolveConnectAppSlug(slug: string, apps: AppCatalogEntry[]): AppCatalogEntry {\n const trimmed = slug.trim();\n if (!trimmed) {\n throw new Error(\"App slug is required\");\n }\n\n try {\n parseAppSlug(trimmed);\n } catch {\n throw new Error(`Invalid app slug: ${slug}`);\n }\n\n const match = apps.find((app) => app.id === trimmed);\n if (!match) {\n const available = apps.map((app) => app.id).join(\", \") || \"(none)\";\n throw new Error(`Unknown app \"${trimmed}\". Available: ${available}`);\n }\n\n return match;\n}\n\nexport function buildConnectDeeplink(options: {\n webUrl: string;\n orgSlug: string;\n appSlug: string;\n}): string {\n const base = options.webUrl.replace(/\\/+$/, \"\");\n const params = new URLSearchParams({ connect: options.appSlug });\n return `${base}/${options.orgSlug}/apps?${params.toString()}`;\n}\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 { 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(\"<id>\", \"Credential instance id\")\n .action((id: string) =>\n runCredentialsCommand(\"Delete credential failed\", async ({ platform, local }) => {\n if (local) {\n const { client } = await createLocalCredentialsClient();\n await client.credentials.deleteInstance(id);\n return;\n }\n\n await platform!.credentials.delete(id);\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 { 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 { 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 label: string | null;\n isDefault: boolean;\n};\n\nfunction describeInstance(instance: ConflictInstance): string {\n const defaultStatus = instance.isDefault ? \"default\" : \"not default\";\n const labelStatus = instance.label ? `label: ${instance.label}` : \"no label\";\n return `id: ${instance.id}, ${defaultStatus}, ${labelStatus}`;\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} --label <name> ${setArgs}`;\n\n if (args.matching.length === 1) {\n const instance = args.matching[0]!;\n const updateCmd = `${binary} credentials update ${instance.id} ${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. --label is required 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 label?: string;\n setFields: string[];\n },\n): Promise<void> {\n if (args.label) {\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(\"--label <label>\", \"Human-readable label within the scope\")\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 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 await assertNoSetConflict(client, {\n key,\n scope: target.scope,\n scopeType: target.scopeType,\n projectId: target.projectSlug,\n label: options.label,\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 label: options.label,\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(\"<id>\", \"Credential instance id\")\n .option(\"--label <label>\", \"Human-readable label within the scope\")\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 id: string,\n options: {\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\n if (local) {\n const { client } = await createLocalCredentialsClient();\n const result = await client.credentials.updateInstance(id, {\n ...(options.label !== undefined ? { label: options.label } : {}),\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 ...(options.label !== undefined ? { label: options.label } : {}),\n ...(options.default !== undefined ? { isDefault: options.default } : {}),\n ...(value ? { value } : {}),\n });\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 { Command } from \"commander\";\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}\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 { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { tmpdir } from \"node:os\";\nimport { ROUTE_MANIFEST_REL_PATH, StoredRouteManifestSchema } from \"@keystrokehq/shared\";\n//#region src/pack-dir.ts\n/**\n* Pack a directory tree that contains a `dist/` folder into a gzip tarball\n* suitable for project-server extraction.\n*/\nfunction packDistTree(rootContainingDist) {\n\tconst tempDir = mkdtempSync(join(tmpdir(), \"keystroke-artifact-pack-\"));\n\tconst archivePath = join(tempDir, \"artifact.tgz\");\n\ttry {\n\t\tconst result = spawnSync(\"tar\", [\n\t\t\t\"-czf\",\n\t\t\tarchivePath,\n\t\t\t\"--exclude=._*\",\n\t\t\t\"--exclude=.DS_Store\",\n\t\t\t\"-C\",\n\t\t\trootContainingDist,\n\t\t\t\"dist\"\n\t\t], {\n\t\t\tencoding: \"utf8\",\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\tCOPYFILE_DISABLE: \"1\"\n\t\t\t}\n\t\t});\n\t\tif (result.status !== 0) throw new Error(result.stderr?.trim() || \"Failed to pack project artifact\");\n\t\treturn readFileSync(archivePath);\n\t} finally {\n\t\trmSync(tempDir, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t}\n}\n//#endregion\n//#region src/extract-artifact.ts\n/** Extract a packed project artifact tarball into `destDir` (creates `destDir/dist/`). */\nfunction extractProjectArtifact(archive, destDir) {\n\tconst tempDir = mkdtempSync(join(tmpdir(), \"keystroke-artifact-extract-\"));\n\tconst archivePath = join(tempDir, \"artifact.tgz\");\n\ttry {\n\t\twriteFileSync(archivePath, archive);\n\t\tconst result = spawnSync(\"tar\", [\n\t\t\t\"-xzf\",\n\t\t\tarchivePath,\n\t\t\t\"-C\",\n\t\t\tdestDir\n\t\t], {\n\t\t\tencoding: \"utf8\",\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\tCOPYFILE_DISABLE: \"1\"\n\t\t\t}\n\t\t});\n\t\tif (result.status !== 0) throw new Error(result.stderr?.trim() || \"Failed to extract project artifact\");\n\t} finally {\n\t\trmSync(tempDir, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t}\n}\n//#endregion\n//#region src/merge-route-manifest.ts\nfunction moduleFileOf(entry) {\n\treturn \"moduleFile\" in entry && typeof entry.moduleFile === \"string\" ? entry.moduleFile : void 0;\n}\n/** Replace manifest rows for rebuilt modules while keeping untouched routes and metadata. */\nfunction mergeStoredRouteManifest(base, rebuiltEntries) {\n\tconst rebuiltModuleFiles = new Set(rebuiltEntries.map(moduleFileOf).filter((value) => Boolean(value)));\n\tconst keptEntries = base.entries.filter((entry) => {\n\t\tconst moduleFile = moduleFileOf(entry);\n\t\tif (!moduleFile) return true;\n\t\treturn !rebuiltModuleFiles.has(moduleFile);\n\t});\n\tconst filteredRebuilt = rebuiltEntries.filter((entry) => entry.kind !== \"health\");\n\treturn {\n\t\t...base,\n\t\tentries: [...keptEntries, ...filteredRebuilt]\n\t};\n}\n//#endregion\n//#region src/merge-filtered-artifact.ts\nasync function mergeFilteredArtifact(input) {\n\tconst mergeRoot = mkdtempSync(join(tmpdir(), \"keystroke-artifact-merge-\"));\n\ttry {\n\t\textractProjectArtifact(input.baseArchive, mergeRoot);\n\t\tconst manifestPath = join(mergeRoot, ROUTE_MANIFEST_REL_PATH);\n\t\tconst mergedManifest = mergeStoredRouteManifest(StoredRouteManifestSchema.parse(JSON.parse(readFileSync(manifestPath, \"utf8\"))), input.filtered.manifestEntries);\n\t\twriteFileSync(manifestPath, `${JSON.stringify(mergedManifest, null, 2)}\\n`);\n\t\tfor (const file of input.filtered.files) {\n\t\t\tconst destination = join(mergeRoot, \"dist\", file.relativePath);\n\t\t\tmkdirSync(dirname(destination), { recursive: true });\n\t\t\twriteFileSync(destination, file.contents);\n\t\t\tif (file.sourceMap) writeFileSync(`${destination}.map`, file.sourceMap);\n\t\t}\n\t\treturn packDistTree(mergeRoot);\n\t} finally {\n\t\trmSync(mergeRoot, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t}\n}\n//#endregion\n//#region src/pack-artifact.ts\n/** Pack `dist/` into a gzip tarball suitable for `/app` extraction in the project server image. */\nfunction packProjectArtifact(projectRoot) {\n\tif (!existsSync(join(projectRoot, \"dist\"))) throw new Error(\"dist/ not found — run keystroke build first\");\n\treturn packDistTree(projectRoot);\n}\n//#endregion\nexport { packDistTree as a, extractProjectArtifact as i, mergeFilteredArtifact as n, mergeStoredRouteManifest as r, packProjectArtifact as t };\n\n//# sourceMappingURL=pack-artifact-NGxvGcXq.mjs.map","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 { 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 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(\"activeProjectId\", project.id);\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 projectId = await resolveActiveProjectId(config);\n if (!projectId) {\n throw new Error(\"Usage: keystroke deploy --project <slug>\");\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","/** 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_SERVER_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, getServerUrl } from \"../config\";\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(\n config: ReturnType<typeof createCliConfig>,\n portOverride?: number,\n): string {\n const url = new URL(getServerUrl(config));\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(cliConfig, 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 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","import { readdir, readFile, stat, writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { INIT_CATALOG_VERSIONS } 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(\"{{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 { 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(\n \"Bundled keystroke skills not found — run `pnpm --filter @keystrokehq/cli build`\",\n );\n}\n","import { cp, lstat, mkdir, readFile, rm, symlink, writeFile } from \"node:fs/promises\";\nimport { platform } from \"node:os\";\nimport { dirname, join, relative } from \"node:path\";\nimport { readCliVersion } from \"../version\";\nimport { resolveSkillsBundleDir } from \"./resolve-skills-bundle-dir\";\n\nexport const BUNDLE_VERSION_FILENAME = \".bundle-version\";\n\nexport function agentsSkillsDir(projectRoot: string): string {\n return join(projectRoot, \".agents\", \"skills\");\n}\n\nexport function bundleVersionPath(projectRoot: string): string {\n return join(agentsSkillsDir(projectRoot), BUNDLE_VERSION_FILENAME);\n}\n\nexport async function readBundleVersion(projectRoot: string): Promise<string | null> {\n try {\n return (await readFile(bundleVersionPath(projectRoot), \"utf8\")).trim();\n } catch {\n return null;\n }\n}\n\nasync function ensureSymlink(\n target: string,\n linkPath: string,\n kind: \"dir\" | \"file\",\n): Promise<void> {\n await mkdir(dirname(linkPath), { recursive: true });\n await rm(linkPath, { recursive: true, force: true });\n const type = platform() === \"win32\" && kind === \"dir\" ? \"junction\" : kind;\n await symlink(target, linkPath, type);\n}\n\n/** Overwrites `.agents/skills/`, AGENTS.md, and recreates `.claude` symlinks from the CLI bundle. */\nexport async function syncBundledSkills(\n projectRoot: string,\n fromModuleUrl = import.meta.url,\n): Promise<void> {\n const bundleDir = resolveSkillsBundleDir(fromModuleUrl);\n const skillsDir = agentsSkillsDir(projectRoot);\n const agentsMdPath = join(projectRoot, \"AGENTS.md\");\n\n await mkdir(join(projectRoot, \".agents\"), { recursive: true });\n\n const skillsStat = await lstat(skillsDir).catch(() => null);\n if (skillsStat?.isSymbolicLink()) {\n await rm(skillsDir, { force: true });\n await cp(join(bundleDir, \"skills\"), skillsDir, { recursive: true });\n } else {\n await mkdir(skillsDir, { recursive: true });\n await cp(join(bundleDir, \"skills\"), skillsDir, { recursive: true, force: true });\n }\n\n const agentsStat = await lstat(agentsMdPath).catch(() => null);\n if (agentsStat?.isSymbolicLink()) {\n await rm(agentsMdPath, { force: true });\n }\n // Overwrite AGENTS.md from the bundle — bundled agent docs are the source of truth for now.\n await writeFile(agentsMdPath, await readFile(join(bundleDir, \"_AGENTS.md\"), \"utf8\"));\n\n await ensureSymlink(\n relative(dirname(join(projectRoot, \".claude\", \"skills\")), skillsDir),\n join(projectRoot, \".claude\", \"skills\"),\n \"dir\",\n );\n await ensureSymlink(\n relative(dirname(join(projectRoot, \"CLAUDE.md\")), agentsMdPath),\n join(projectRoot, \"CLAUDE.md\"),\n \"file\",\n );\n\n await writeFile(bundleVersionPath(projectRoot), `${readCliVersion()}\\n`);\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, readdir } 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 { syncBundledSkills } from \"../skills/sync-bundled-skills\";\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\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 (playgroundRoot) {\n await applyPlaygroundManifest(targetDir, projectName, playgroundRoot);\n } else {\n await scaffoldProjectDotfiles(targetDir);\n }\n\n await syncBundledSkills(targetDir);\n await copyFile(join(targetDir, \".env.example\"), join(targetDir, \".env\"));\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 .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 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(\" # set ANTHROPIC_API_KEY and integration keys in .env\\n\");\n process.stdout.write(\" keystroke dev\\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 type Conf from \"conf\";\nimport type { Project } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"./config\";\n\nexport function clearActiveProjectIfMatches(\n config: Conf<CliConfig>,\n project: Pick<Project, \"id\" | \"slug\">,\n): void {\n const activeProjectId = config.get(\"activeProjectId\");\n if (activeProjectId === project.id || activeProjectId === project.slug) {\n config.delete(\"activeProjectId\");\n }\n}\n\nexport function clearActiveProject(config: Conf<CliConfig>): void {\n if (config.get(\"activeProjectId\") !== undefined) {\n config.delete(\"activeProjectId\");\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 { clearActiveProject } from \"../../active-project\";\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 clearActiveProject(config);\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\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { InviteProjectMembersRequest, ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { clearActiveProjectIfMatches } from \"../../active-project\";\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 ?? config.get(\"activeProjectId\");\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 clearActiveProjectIfMatches(config, project);\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 { 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 ?? config.get(\"activeProjectId\");\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 { 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 ?? config.get(\"activeProjectId\");\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 { 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 ?? config.get(\"activeProjectId\");\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 } 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 { 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 ?? config.get(\"activeProjectId\");\n if (!projectRef) {\n throw new Error(\"Usage: keystroke project deployments list --project <slug>\");\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(\"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 type { Command } from \"commander\";\nimport { createCliConfig, getServerUrl } from \"../config\";\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(portOverride?: number): string {\n const url = new URL(getServerUrl(createCliConfig()));\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(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 { Command } from \"commander\";\nimport {\n registerTriggerGetCommand,\n registerTriggerListCommand,\n registerTriggerUrlCommand,\n} from \"./list\";\nimport { registerTriggerPollCommand } from \"./poll\";\nimport { registerTriggerRunsCommand } from \"./runs\";\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}\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(\"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 { resolveProjectRef } from \"../../resolve-resource-ref\";\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 ensureActiveOrganization(config);\n\n const ref =\n projectRef?.trim() ||\n getCliTargetOptions().projectId?.trim() ||\n config.get(\"activeProjectId\")?.trim();\n\n if (!ref) {\n throw new Error(\"Project is required. Pass --project <slug> or set an active project.\");\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 type Conf from \"conf\";\nimport type { Project } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { cliBinaryName } from \"../../errors/command-input\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\n\nexport type ConfigUseProjectResult = {\n stdout: string;\n stderr?: string;\n};\n\nasync function fetchProjectInOrg(config: Conf<CliConfig>, projectRef: string): Promise<Project> {\n const platform = createCliPlatformClient(config);\n return resolveProjectRef(platform, projectRef);\n}\n\nfunction assertProjectReadyForConfig(project: Project): void {\n const label = formatProjectLabel(project);\n\n if (project.status === \"failed\") {\n throw new Error(\n project.lastError\n ? `Project ${label} deploy failed: ${project.lastError}`\n : `Project ${label} deploy failed`,\n );\n }\n\n if (project.status === \"starting\") {\n throw new Error(\n `Project ${label} is still starting. Wait for deploy to finish, then run \\`keystroke config use project ${label}\\`.`,\n );\n }\n}\n\nexport async function runConfigUseProject(\n config: Conf<CliConfig>,\n projectRef: string,\n): Promise<ConfigUseProjectResult> {\n const project = await fetchProjectInOrg(config, projectRef);\n assertProjectReadyForConfig(project);\n\n config.set(\"activeProjectId\", project.id);\n config.set(\"apiTarget\", \"platform\");\n\n const label = formatProjectLabel(project);\n const stdout =\n project.status === \"active\"\n ? `Using platform project ${label}\\n`\n : `Using platform project ${label} (${project.status})\\n`;\n\n const stderr =\n project.status === \"inactive\"\n ? `Project is not active yet. Deploy with: ${cliBinaryName()} deploy --project ${label}\\n`\n : undefined;\n\n return { stdout, stderr };\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 { readDevSession } from \"../../dev-session\";\nimport {\n listOrganizations,\n selectActiveOrganization,\n} from \"../../organization/active-organization\";\nimport { runConfigUseProject } from \"./use-project\";\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 process.stdout.write(\n `${JSON.stringify(\n {\n serverUrl: cliConfig.get(\"serverUrl\"),\n webUrl: cliConfig.get(\"webUrl\"),\n platformUrl: getPlatformUrl(cliConfig),\n activeOrganizationId: cliConfig.get(\"activeOrganizationId\"),\n activeProjectId: cliConfig.get(\"activeProjectId\"),\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/project) or active organization\")\n .argument(\"[mode]\", \"local, cloud, project, or org\")\n .argument(\"[id]\", \"Project or organization id when switching cloud target or org\")\n .action(async (mode?: string, id?: string) => {\n const cliConfig = createCliConfig();\n\n if (!mode || mode === \"local\") {\n cliConfig.set(\"apiTarget\", \"local\");\n const activeProjectId = cliConfig.get(\"activeProjectId\");\n process.stdout.write(\n activeProjectId\n ? `Using local keystroke server (cloud project ${activeProjectId} unchanged)\\n`\n : \"Using local keystroke server\\n\",\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 const activeProjectId = cliConfig.get(\"activeProjectId\");\n process.stdout.write(\n activeProjectId\n ? `Using platform API (default project ${activeProjectId} for project-scoped commands)\\n`\n : \"Using platform API\\n\",\n );\n return;\n }\n\n if (mode !== \"project\") {\n throw new Error(\"Usage: keystroke config use [local|cloud|project [slug]|org [slug]]\");\n }\n\n const targetProjectId = id ?? cliConfig.get(\"activeProjectId\");\n if (!targetProjectId) {\n throw new Error(\"Usage: keystroke config use project <slug>\");\n }\n\n const result = await runConfigUseProject(cliConfig, targetProjectId);\n process.stdout.write(result.stdout);\n if (result.stderr) {\n process.stderr.write(result.stderr);\n }\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 { syncBundledSkills } from \"../skills/sync-bundled-skills\";\n\nexport function registerSkillsCommand(program: Command): void {\n const skills = program.command(\"skills\").description(\"Manage bundled agent skills\");\n\n skills\n .command(\"sync\")\n .description(\"Overwrite bundled skills and 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 syncBundledSkills(root);\n process.stdout.write(`Synced bundled skills at ${root}\\n`);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Skills sync failed\";\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { existsSync, lstatSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport { resolveKeystrokeConfigRoot } from \"../project/resolve-keystroke-config-root\";\nimport { readCliVersion } from \"../version\";\nimport { agentsSkillsDir, readBundleVersion, syncBundledSkills } from \"./sync-bundled-skills\";\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 bundled skills when stale; no-op when not in a project or already up to date. */\nexport async function syncSkills(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 skillsDir = agentsSkillsDir(projectRoot);\n if (!existsSync(skillsDir)) {\n return;\n }\n\n // Monorepo example projects symlink bundled skills for live edits — skip auto-sync.\n if (lstatSync(skillsDir).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 syncBundledSkills(projectRoot);\n process.stderr.write(`Synced bundled skills 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 { 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 { 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 { syncSkills } from \"./skills/sync-skills\";\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 syncSkills(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 registerInitCommand(program);\n registerSkillsCommand(program);\n registerSkillCommand(program);\n registerBuildCommand(program);\n registerDeployCommand(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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"}
|
|
1
|
+
{"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","createWorkflowsResource","#hiddenStack","now","getMethod","sleep","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/dev-session.ts","../src/resolve-api-target.ts","../src/target-options.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/resolve-project-target.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/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/project/resolve-keystroke-config-root.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/project/resolve-project-root.ts","../src/project/load-project-env.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","../../../packages/storage/dist/pack-artifact-NGxvGcXq.mjs","../src/commands/deploy.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/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/resolve-skills-bundle-dir.ts","../src/skills/sync-bundled-skills.ts","../src/init/scaffold-empty-src-dirs.ts","../src/init/scaffold-project-dotfiles.ts","../src/init/run-init.ts","../src/commands/init.ts","../src/active-project.ts","../src/commands/organization/run-organization.ts","../src/commands/organization/index.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/start.ts","../src/commands/trigger/list.ts","../src/commands/trigger/poll.ts","../src/commands/trigger/runs.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/use-project.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-skills.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, 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};\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 JWT bearer auth when a session refresh token is stored; otherwise none. */\nexport function resolveCliAuth(config: Conf<CliConfig>): AuthStrategy {\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, ErrorResponseSchema, GatewayAttachmentRecordSchema, GetCredentialResponseSchema, GetCustomAppResponseSchema, HealthResponseSchema, HistoryRunCancelResponseSchema, HistoryRunDetailResponseSchema, HistoryRunListQuerySchema, HistoryRunListResponseSchema, InviteOrganizationMembersRequestSchema, InviteOrganizationMembersResponseSchema, InviteProjectMembersRequestSchema, InviteProjectMembersResponseSchema, ListAgentMemoryFilesResponseSchema, ListApiKeysResponseSchema, ListAppsResponseSchema, ListCredentialsResponseSchema, ListOrganizationInvitationsResponseSchema, ListOrganizationMembersResponseSchema, ListOrganizationsResponseSchema, ListProjectDeploymentsResponseSchema, ListProjectFilesResponseSchema, ListProjectMembersResponseSchema, ListProjectMetricsResponseSchema, ListProjectsResponseSchema, OrganizationSidebarBrandingPatchSchema, OrganizationSidebarBrandingSchema, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, PresignOrgLogoRequestSchema, PresignOrgLogoResponseSchema, PresignProjectSourceRequestSchema, PresignProjectSourceResponseSchema, PresignUserAvatarRequestSchema, PresignUserAvatarResponseSchema, ProjectReachabilityResponseSchema, ProjectResponseSchema, ProjectSettingsResponseSchema, ProjectSlugAvailabilityResponseSchema, PromptInputSchema, QueuedAgentPromptResponseSchema, RecentResourceListResponseSchema, SkillSummaryDetailResponseSchema, SkillSummaryListResponseSchema, SlugAvailabilityResponseSchema, StartKeystrokeConnectionInputSchema, StartKeystrokeConnectionResultSchema, StartOAuthConnectionInputSchema, StartOAuthConnectionResultSchema, SubmitMarketingContactRequestSchema, SubmitTeamRequestRequestSchema, UpdateChannelBindingBodySchema, UpdateCredentialRequestSchema, UpdateOrganizationMemberRequestSchema, UpdateOrganizationMemberResponseSchema, UpdateOrganizationRequestSchema, UpdateProjectMemberRequestSchema, UpdateProjectMemberResponseSchema, UpdateProjectRequestSchema, UpdateProjectSettingsRequestSchema, UploadProjectSourceManifestRequestSchema, UploadProjectSourceResponseSchema, UpsertGatewayAttachmentBodySchema, UserAvatarPatchSchema, UserAvatarSchema, UserPreferencesPatchSchema, UserPreferencesSchema, WorkflowSummaryDetailResponseSchema, WorkflowSummaryListResponseSchema, 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 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/agent-workspace-files.ts\n/** Provisional — returns empty until platform workspace listing ships. */\nasync function listAgentWorkspaceFilesProvisional(_agentId) {\n\treturn { files: [] };\n}\n/** Provisional — returns empty until platform workspace content ships. */\nasync function getAgentWorkspaceFileContentProvisional(_agentId, _path) {\n\treturn \"\";\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 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\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/** Provisional — persistent agent workspace files under `/workspace/agent`. */\n\t\tasync listWorkspaceFiles(agentId) {\n\t\t\treturn listAgentWorkspaceFilesProvisional(agentId);\n\t\t},\n\t\t/** Provisional — content for a path from {@link listWorkspaceFiles}. */\n\t\tasync getWorkspaceFileContent(agentId, path) {\n\t\t\treturn getAgentWorkspaceFileContentProvisional(agentId, path);\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\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\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/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\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};\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\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 config use 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, 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 type Conf from \"conf\";\n\nimport {\n getConfigDir,\n getEffectiveApiTarget,\n getPlatformUrl,\n getServerUrl,\n type CliConfig,\n} from \"./config\";\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 { 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 activeProjectId. */\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(\n config: Conf<CliConfig>,\n options: ApiTargetOptions = {},\n): ResolvedApiTarget {\n return resolveLocalTargetFromOrigin(getServerUrl(config), 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 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 if (options.local) {\n return resolveLocalTarget(config, 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(config, 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(config, options);\n }\n\n if (!options.projectScoped) {\n return resolveOrgPlatformTarget(config);\n }\n\n const projectRef = options.projectId ?? config.get(\"activeProjectId\");\n if (!projectRef) {\n throw new Error(\n \"No project selected. Pass `--project <slug>` or run `keystroke config use project <slug>`.\",\n );\n }\n\n return resolvePlatformTarget(config, projectRef);\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 { 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 { createCliClient } from \"../client\";\nimport { createCliConfig, getWebUrl } 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\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 Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { Project } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"./config\";\nimport { createCliPlatformClient } from \"./platform-client\";\nimport { looksLikeUuid, resolveProjectRef } from \"./resolve-resource-ref\";\nimport { getCliTargetOptions } from \"./target-options\";\n\nexport async function resolveActiveProject(\n config: Conf<CliConfig>,\n platform?: PlatformClient,\n): Promise<Project | undefined> {\n const ref = getCliTargetOptions().projectId ?? config.get(\"activeProjectId\");\n if (!ref) {\n return undefined;\n }\n\n const client = platform ?? createCliPlatformClient(config);\n const fromFlag = getCliTargetOptions().projectId;\n\n if (!fromFlag && looksLikeUuid(ref)) {\n return resolveProjectRef(client, ref);\n }\n\n return resolveProjectRef(client, ref);\n}\n\nexport async function resolveActiveProjectId(config: Conf<CliConfig>): Promise<string | undefined> {\n const project = await resolveActiveProject(config);\n return project?.id;\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 } from \"../../resolve-resource-ref\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\n\nexport async function withActivePlatformClient(\n config: Conf<CliConfig>,\n fn: (platform: PlatformClient) => Promise<void>,\n): Promise<void> {\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} deploy --project ${formatProjectLabel(project)}\\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 } from \"@keystrokehq/shared\";\n\nexport async function runAppCreate(client: PlatformClient, input: CreateCustomAppRequest) {\n return client.apps.create(input);\n}\n","import type { Command } from \"commander\";\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\";\n\nexport function registerAppCreateCommand(app: Command): void {\n app\n .command(\"create\")\n .description(\"Create a custom org api_key app\")\n .requiredOption(\"--name <name>\", \"App display name\")\n .option(\"--slug <slug>\", \"App slug segment (defaults from name)\")\n .requiredOption(\"--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 .action((options: { name: string; slug?: string; description: string; field: string[] }) =>\n runCliCommand(\n \"Create app failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await ensureActiveOrganization(config);\n\n const slug = options.slug?.trim() || slugifyAppName(options.name);\n\n const created = await runAppCreate(client, {\n name: options.name.trim(),\n slug,\n description: options.description,\n fields: parseCustomAppFields(options.field),\n });\n\n process.stdout.write(`${JSON.stringify(created, 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 { 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 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 { parseAppSlug } from \"@keystrokehq/shared\";\n\nimport { openUrl } from \"../../auth/open-url\";\n\nexport type ConnectPlatformClient = {\n apps: {\n listCatalog(): Promise<AppCatalogEntry[]>;\n };\n};\n\nexport function resolveConnectAppSlug(slug: string, apps: AppCatalogEntry[]): AppCatalogEntry {\n const trimmed = slug.trim();\n if (!trimmed) {\n throw new Error(\"App slug is required\");\n }\n\n try {\n parseAppSlug(trimmed);\n } catch {\n throw new Error(`Invalid app slug: ${slug}`);\n }\n\n const match = apps.find((app) => app.id === trimmed);\n if (!match) {\n const available = apps.map((app) => app.id).join(\", \") || \"(none)\";\n throw new Error(`Unknown app \"${trimmed}\". Available: ${available}`);\n }\n\n return match;\n}\n\nexport function buildConnectDeeplink(options: {\n webUrl: string;\n orgSlug: string;\n appSlug: string;\n}): string {\n const base = options.webUrl.replace(/\\/+$/, \"\");\n const params = new URLSearchParams({ connect: options.appSlug });\n return `${base}/${options.orgSlug}/apps?${params.toString()}`;\n}\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 { 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 { 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 { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { tmpdir } from \"node:os\";\nimport { ROUTE_MANIFEST_REL_PATH, StoredRouteManifestSchema } from \"@keystrokehq/shared\";\n//#region src/pack-dir.ts\n/**\n* Pack a directory tree that contains a `dist/` folder into a gzip tarball\n* suitable for project-server extraction.\n*/\nfunction packDistTree(rootContainingDist) {\n\tconst tempDir = mkdtempSync(join(tmpdir(), \"keystroke-artifact-pack-\"));\n\tconst archivePath = join(tempDir, \"artifact.tgz\");\n\ttry {\n\t\tconst result = spawnSync(\"tar\", [\n\t\t\t\"-czf\",\n\t\t\tarchivePath,\n\t\t\t\"--exclude=._*\",\n\t\t\t\"--exclude=.DS_Store\",\n\t\t\t\"-C\",\n\t\t\trootContainingDist,\n\t\t\t\"dist\"\n\t\t], {\n\t\t\tencoding: \"utf8\",\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\tCOPYFILE_DISABLE: \"1\"\n\t\t\t}\n\t\t});\n\t\tif (result.status !== 0) throw new Error(result.stderr?.trim() || \"Failed to pack project artifact\");\n\t\treturn readFileSync(archivePath);\n\t} finally {\n\t\trmSync(tempDir, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t}\n}\n//#endregion\n//#region src/extract-artifact.ts\n/** Extract a packed project artifact tarball into `destDir` (creates `destDir/dist/`). */\nfunction extractProjectArtifact(archive, destDir) {\n\tconst tempDir = mkdtempSync(join(tmpdir(), \"keystroke-artifact-extract-\"));\n\tconst archivePath = join(tempDir, \"artifact.tgz\");\n\ttry {\n\t\twriteFileSync(archivePath, archive);\n\t\tconst result = spawnSync(\"tar\", [\n\t\t\t\"-xzf\",\n\t\t\tarchivePath,\n\t\t\t\"-C\",\n\t\t\tdestDir\n\t\t], {\n\t\t\tencoding: \"utf8\",\n\t\t\tenv: {\n\t\t\t\t...process.env,\n\t\t\t\tCOPYFILE_DISABLE: \"1\"\n\t\t\t}\n\t\t});\n\t\tif (result.status !== 0) throw new Error(result.stderr?.trim() || \"Failed to extract project artifact\");\n\t} finally {\n\t\trmSync(tempDir, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t}\n}\n//#endregion\n//#region src/merge-route-manifest.ts\nfunction moduleFileOf(entry) {\n\treturn \"moduleFile\" in entry && typeof entry.moduleFile === \"string\" ? entry.moduleFile : void 0;\n}\n/** Replace manifest rows for rebuilt modules while keeping untouched routes and metadata. */\nfunction mergeStoredRouteManifest(base, rebuiltEntries) {\n\tconst rebuiltModuleFiles = new Set(rebuiltEntries.map(moduleFileOf).filter((value) => Boolean(value)));\n\tconst keptEntries = base.entries.filter((entry) => {\n\t\tconst moduleFile = moduleFileOf(entry);\n\t\tif (!moduleFile) return true;\n\t\treturn !rebuiltModuleFiles.has(moduleFile);\n\t});\n\tconst filteredRebuilt = rebuiltEntries.filter((entry) => entry.kind !== \"health\");\n\treturn {\n\t\t...base,\n\t\tentries: [...keptEntries, ...filteredRebuilt]\n\t};\n}\n//#endregion\n//#region src/merge-filtered-artifact.ts\nasync function mergeFilteredArtifact(input) {\n\tconst mergeRoot = mkdtempSync(join(tmpdir(), \"keystroke-artifact-merge-\"));\n\ttry {\n\t\textractProjectArtifact(input.baseArchive, mergeRoot);\n\t\tconst manifestPath = join(mergeRoot, ROUTE_MANIFEST_REL_PATH);\n\t\tconst mergedManifest = mergeStoredRouteManifest(StoredRouteManifestSchema.parse(JSON.parse(readFileSync(manifestPath, \"utf8\"))), input.filtered.manifestEntries);\n\t\twriteFileSync(manifestPath, `${JSON.stringify(mergedManifest, null, 2)}\\n`);\n\t\tfor (const file of input.filtered.files) {\n\t\t\tconst destination = join(mergeRoot, \"dist\", file.relativePath);\n\t\t\tmkdirSync(dirname(destination), { recursive: true });\n\t\t\twriteFileSync(destination, file.contents);\n\t\t\tif (file.sourceMap) writeFileSync(`${destination}.map`, file.sourceMap);\n\t\t}\n\t\treturn packDistTree(mergeRoot);\n\t} finally {\n\t\trmSync(mergeRoot, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t}\n}\n//#endregion\n//#region src/pack-artifact.ts\n/** Pack `dist/` into a gzip tarball suitable for `/app` extraction in the project server image. */\nfunction packProjectArtifact(projectRoot) {\n\tif (!existsSync(join(projectRoot, \"dist\"))) throw new Error(\"dist/ not found — run keystroke build first\");\n\treturn packDistTree(projectRoot);\n}\n//#endregion\nexport { packDistTree as a, extractProjectArtifact as i, mergeFilteredArtifact as n, mergeStoredRouteManifest as r, packProjectArtifact as t };\n\n//# sourceMappingURL=pack-artifact-NGxvGcXq.mjs.map","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 { 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 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(\"activeProjectId\", project.id);\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 projectId = await resolveActiveProjectId(config);\n if (!projectId) {\n throw new Error(\"Usage: keystroke deploy --project <slug>\");\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","/** 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_SERVER_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, getServerUrl } from \"../config\";\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(\n config: ReturnType<typeof createCliConfig>,\n portOverride?: number,\n): string {\n const url = new URL(getServerUrl(config));\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(cliConfig, 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 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","import { readdir, readFile, stat, writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { INIT_CATALOG_VERSIONS } 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(\"{{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 { 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(\n \"Bundled keystroke skills not found — run `pnpm --filter @keystrokehq/cli build`\",\n );\n}\n","import { cp, lstat, mkdir, readFile, rm, symlink, writeFile } from \"node:fs/promises\";\nimport { platform } from \"node:os\";\nimport { dirname, join, relative } from \"node:path\";\nimport { readCliVersion } from \"../version\";\nimport { resolveSkillsBundleDir } from \"./resolve-skills-bundle-dir\";\n\nexport const BUNDLE_VERSION_FILENAME = \".bundle-version\";\n\nexport function agentsSkillsDir(projectRoot: string): string {\n return join(projectRoot, \".agents\", \"skills\");\n}\n\nexport function bundleVersionPath(projectRoot: string): string {\n return join(agentsSkillsDir(projectRoot), BUNDLE_VERSION_FILENAME);\n}\n\nexport async function readBundleVersion(projectRoot: string): Promise<string | null> {\n try {\n return (await readFile(bundleVersionPath(projectRoot), \"utf8\")).trim();\n } catch {\n return null;\n }\n}\n\nasync function ensureSymlink(\n target: string,\n linkPath: string,\n kind: \"dir\" | \"file\",\n): Promise<void> {\n await mkdir(dirname(linkPath), { recursive: true });\n await rm(linkPath, { recursive: true, force: true });\n const type = platform() === \"win32\" && kind === \"dir\" ? \"junction\" : kind;\n await symlink(target, linkPath, type);\n}\n\n/** Overwrites `.agents/skills/`, AGENTS.md, and recreates `.claude` symlinks from the CLI bundle. */\nexport async function syncBundledSkills(\n projectRoot: string,\n fromModuleUrl = import.meta.url,\n): Promise<void> {\n const bundleDir = resolveSkillsBundleDir(fromModuleUrl);\n const skillsDir = agentsSkillsDir(projectRoot);\n const agentsMdPath = join(projectRoot, \"AGENTS.md\");\n\n await mkdir(join(projectRoot, \".agents\"), { recursive: true });\n\n const skillsStat = await lstat(skillsDir).catch(() => null);\n if (skillsStat?.isSymbolicLink()) {\n await rm(skillsDir, { force: true });\n await cp(join(bundleDir, \"skills\"), skillsDir, { recursive: true });\n } else {\n await mkdir(skillsDir, { recursive: true });\n await cp(join(bundleDir, \"skills\"), skillsDir, { recursive: true, force: true });\n }\n\n const agentsStat = await lstat(agentsMdPath).catch(() => null);\n if (agentsStat?.isSymbolicLink()) {\n await rm(agentsMdPath, { force: true });\n }\n // Overwrite AGENTS.md from the bundle — bundled agent docs are the source of truth for now.\n await writeFile(agentsMdPath, await readFile(join(bundleDir, \"_AGENTS.md\"), \"utf8\"));\n\n await ensureSymlink(\n relative(dirname(join(projectRoot, \".claude\", \"skills\")), skillsDir),\n join(projectRoot, \".claude\", \"skills\"),\n \"dir\",\n );\n await ensureSymlink(\n relative(dirname(join(projectRoot, \"CLAUDE.md\")), agentsMdPath),\n join(projectRoot, \"CLAUDE.md\"),\n \"file\",\n );\n\n await writeFile(bundleVersionPath(projectRoot), `${readCliVersion()}\\n`);\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, readdir } 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 { syncBundledSkills } from \"../skills/sync-bundled-skills\";\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\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 (playgroundRoot) {\n await applyPlaygroundManifest(targetDir, projectName, playgroundRoot);\n } else {\n await scaffoldProjectDotfiles(targetDir);\n }\n\n await syncBundledSkills(targetDir);\n await copyFile(join(targetDir, \".env.example\"), join(targetDir, \".env\"));\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 .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 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(\" # set ANTHROPIC_API_KEY and integration keys in .env\\n\");\n process.stdout.write(\" keystroke dev\\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 type Conf from \"conf\";\nimport type { Project } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"./config\";\n\nexport function clearActiveProjectIfMatches(\n config: Conf<CliConfig>,\n project: Pick<Project, \"id\" | \"slug\">,\n): void {\n const activeProjectId = config.get(\"activeProjectId\");\n if (activeProjectId === project.id || activeProjectId === project.slug) {\n config.delete(\"activeProjectId\");\n }\n}\n\nexport function clearActiveProject(config: Conf<CliConfig>): void {\n if (config.get(\"activeProjectId\") !== undefined) {\n config.delete(\"activeProjectId\");\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 { clearActiveProject } from \"../../active-project\";\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 clearActiveProject(config);\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\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { InviteProjectMembersRequest, ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { clearActiveProjectIfMatches } from \"../../active-project\";\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 ?? config.get(\"activeProjectId\");\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 clearActiveProjectIfMatches(config, project);\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 { 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 ?? config.get(\"activeProjectId\");\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 { 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 ?? config.get(\"activeProjectId\");\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 { 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 ?? config.get(\"activeProjectId\");\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 } 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 { 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 ?? config.get(\"activeProjectId\");\n if (!projectRef) {\n throw new Error(\"Usage: keystroke project deployments list --project <slug>\");\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(\"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 type { Command } from \"commander\";\nimport { createCliConfig, getServerUrl } from \"../config\";\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(portOverride?: number): string {\n const url = new URL(getServerUrl(createCliConfig()));\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(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 { Command } from \"commander\";\nimport {\n registerTriggerGetCommand,\n registerTriggerListCommand,\n registerTriggerUrlCommand,\n} from \"./list\";\nimport { registerTriggerPollCommand } from \"./poll\";\nimport { registerTriggerRunsCommand } from \"./runs\";\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}\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(\"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 { resolveProjectRef } from \"../../resolve-resource-ref\";\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 ensureActiveOrganization(config);\n\n const ref =\n projectRef?.trim() ||\n getCliTargetOptions().projectId?.trim() ||\n config.get(\"activeProjectId\")?.trim();\n\n if (!ref) {\n throw new Error(\"Project is required. Pass --project <slug> or set an active project.\");\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 type Conf from \"conf\";\nimport type { Project } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { cliBinaryName } from \"../../errors/command-input\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\n\nexport type ConfigUseProjectResult = {\n stdout: string;\n stderr?: string;\n};\n\nasync function fetchProjectInOrg(config: Conf<CliConfig>, projectRef: string): Promise<Project> {\n const platform = createCliPlatformClient(config);\n return resolveProjectRef(platform, projectRef);\n}\n\nfunction assertProjectReadyForConfig(project: Project): void {\n const label = formatProjectLabel(project);\n\n if (project.status === \"failed\") {\n throw new Error(\n project.lastError\n ? `Project ${label} deploy failed: ${project.lastError}`\n : `Project ${label} deploy failed`,\n );\n }\n\n if (project.status === \"starting\") {\n throw new Error(\n `Project ${label} is still starting. Wait for deploy to finish, then run \\`keystroke config use project ${label}\\`.`,\n );\n }\n}\n\nexport async function runConfigUseProject(\n config: Conf<CliConfig>,\n projectRef: string,\n): Promise<ConfigUseProjectResult> {\n const project = await fetchProjectInOrg(config, projectRef);\n assertProjectReadyForConfig(project);\n\n config.set(\"activeProjectId\", project.id);\n config.set(\"apiTarget\", \"platform\");\n\n const label = formatProjectLabel(project);\n const stdout =\n project.status === \"active\"\n ? `Using platform project ${label}\\n`\n : `Using platform project ${label} (${project.status})\\n`;\n\n const stderr =\n project.status === \"inactive\"\n ? `Project is not active yet. Deploy with: ${cliBinaryName()} deploy --project ${label}\\n`\n : undefined;\n\n return { stdout, stderr };\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 { readDevSession } from \"../../dev-session\";\nimport {\n listOrganizations,\n selectActiveOrganization,\n} from \"../../organization/active-organization\";\nimport { runConfigUseProject } from \"./use-project\";\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 process.stdout.write(\n `${JSON.stringify(\n {\n serverUrl: cliConfig.get(\"serverUrl\"),\n webUrl: cliConfig.get(\"webUrl\"),\n platformUrl: getPlatformUrl(cliConfig),\n activeOrganizationId: cliConfig.get(\"activeOrganizationId\"),\n activeProjectId: cliConfig.get(\"activeProjectId\"),\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/project) or active organization\")\n .argument(\"[mode]\", \"local, cloud, project, or org\")\n .argument(\"[id]\", \"Project or organization id when switching cloud target or org\")\n .action(async (mode?: string, id?: string) => {\n const cliConfig = createCliConfig();\n\n if (!mode || mode === \"local\") {\n cliConfig.set(\"apiTarget\", \"local\");\n const activeProjectId = cliConfig.get(\"activeProjectId\");\n process.stdout.write(\n activeProjectId\n ? `Using local keystroke server (cloud project ${activeProjectId} unchanged)\\n`\n : \"Using local keystroke server\\n\",\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 const activeProjectId = cliConfig.get(\"activeProjectId\");\n process.stdout.write(\n activeProjectId\n ? `Using platform API (default project ${activeProjectId} for project-scoped commands)\\n`\n : \"Using platform API\\n\",\n );\n return;\n }\n\n if (mode !== \"project\") {\n throw new Error(\"Usage: keystroke config use [local|cloud|project [slug]|org [slug]]\");\n }\n\n const targetProjectId = id ?? cliConfig.get(\"activeProjectId\");\n if (!targetProjectId) {\n throw new Error(\"Usage: keystroke config use project <slug>\");\n }\n\n const result = await runConfigUseProject(cliConfig, targetProjectId);\n process.stdout.write(result.stdout);\n if (result.stderr) {\n process.stderr.write(result.stderr);\n }\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 { syncBundledSkills } from \"../skills/sync-bundled-skills\";\n\nexport function registerSkillsCommand(program: Command): void {\n const skills = program.command(\"skills\").description(\"Manage bundled agent skills\");\n\n skills\n .command(\"sync\")\n .description(\"Overwrite bundled skills and 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 syncBundledSkills(root);\n process.stdout.write(`Synced bundled skills at ${root}\\n`);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Skills sync failed\";\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { existsSync, lstatSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport { resolveKeystrokeConfigRoot } from \"../project/resolve-keystroke-config-root\";\nimport { readCliVersion } from \"../version\";\nimport { agentsSkillsDir, readBundleVersion, syncBundledSkills } from \"./sync-bundled-skills\";\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 bundled skills when stale; no-op when not in a project or already up to date. */\nexport async function syncSkills(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 skillsDir = agentsSkillsDir(projectRoot);\n if (!existsSync(skillsDir)) {\n return;\n }\n\n // Monorepo example projects symlink bundled skills for live edits — skip auto-sync.\n if (lstatSync(skillsDir).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 syncBundledSkills(projectRoot);\n process.stderr.write(`Synced bundled skills 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 { 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 { 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 { syncSkills } from \"./skills/sync-skills\";\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 syncSkills(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 registerInitCommand(program);\n registerSkillsCommand(program);\n registerSkillCommand(program);\n registerBuildCommand(program);\n registerDeployCommand(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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"}
|