@keystrokehq/cli 0.1.144 → 0.1.145

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"program-DgUV3vFS.mjs","names":["mergeHeaders","isPlainObject","objectToString","#options","#runBeforeRequestHooks","#retry","#fetch","#consumeReturnedResponseFromBeforeRetryHook","#runAfterResponseHooks","#retryFromError","#getResponseRequest","#getNormalizedOptions","#getResponseData","#decorateResponse","#cancelResponseBody","#beforeRetryHookErrors","#retryCount","#originalRequest","#cancelBody","#normalizeSearchParams","#input","mergeHeaders","#userProvidedAbortSignal","#abortController","#createManagedSignal","#startTime","#getCurrentTime","#calculateRetryDelay","#calculateDelay","#readResponseText","#getErrorDataTimeout","#throwIfTotalTimeoutExhausted","#isJsonContentType","#parseJson","#getRemainingTotalTimeout","#assignRequest","#setResponseRequest","#returnedResponseFromBeforeRetryHook","#wrapRequestWithUploadProgress","#cachedNormalizedOptions","#responseRequests","normalizeBaseUrl","applyActiveOrganizationHeader","applyAuthHeaders","createAgentsResource","createCredentialsResource","createHealthResource","createTriggersResource","listRunsSearchParams","createWorkflowsResource","accountForUrl","accountForUrl","cacheKey","#hiddenStack","isPlainObject","now","getMethod","sleep","KEYSTROKE_CONFIG","KEYSTROKE_CONFIG","osRelease","collectValues","collectAppFieldValues","collectValues","collectSetValues","collectValues","collectSetValues","KEYSTROKE_SCOPE","readPackageJson","readInstalledVersion","collectEmails","parseProjectRole","resolveTarget","resolveTarget"],"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-file.ts","../src/auth/credentials-keychain.ts","../src/auth/credentials.ts","../../../packages/auth/dist/jwt-BVJ7dVm9.mjs","../../../packages/auth/dist/jwt-cache-4YqHn3jM.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/package.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/version.mjs","../../../node_modules/.pnpm/better-call@1.3.7_zod@4.4.3/node_modules/better-call/dist/error.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/error/index.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/plugins/device-authorization/client.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/env/env-impl.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/utils/url.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/utils/url.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.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/equality.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/broadcast-channel.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/focus-manager.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/online-manager.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/parser.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/session-refresh.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/fetch-plugins.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/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.3.1/node_modules/@better-fetch/fetch/dist/index.js","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/config.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/utils/is-atom.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/utils/string.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/proxy.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/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/target-options.ts","../src/client.ts","../../../packages/sdk/dist/platform/index.mjs","../src/platform-client.ts","../src/resolve-resource-ref.ts","../src/organization/active-organization.ts","../src/project/resolve-keystroke-config-root.ts","../src/project/read-project-config.ts","../src/target-hints.ts","../src/resolve-organization-target.ts","../src/project/resolve-project-root.ts","../src/project/load-project-env.ts","../src/dev-session.ts","../src/resolve-api-target.ts","../../../packages/telemetry/dist/posthog-node.mjs","../src/errors/example-input.ts","../src/errors/format-api-message.ts","../src/errors/format-cli-error.ts","../src/errors/should-report-cli-exception.ts","../src/telemetry/identity.ts","../src/telemetry/public-config.ts","../src/telemetry/init.ts","../src/errors/run-command.ts","../src/errors/command-input.ts","../src/organization/require-admin-role.ts","../src/resolve-project-target.ts","../src/resolve-list-options.ts","../src/commands/agents/list.ts","../src/commands/agents/prompt.ts","../src/commands/inspect-detail.ts","../src/commands/projects/run-project.ts","../src/commands/agents/cancel-session.ts","../src/commands/agents/sessions.ts","../src/commands/agents/index.ts","../src/commands/api-key/run-api-key.ts","../src/commands/api-key/index.ts","../src/commands/managed-services/run-managed-services.ts","../src/commands/managed-services/index.ts","../src/commands/apps/action-hints.ts","../src/commands/apps/run-app-catalog.ts","../src/commands/apps/actions.ts","../src/commands/apps/parse-custom-app-fields.ts","../src/commands/apps/run-app-create.ts","../src/commands/apps/run-app-create-from-url.ts","../src/commands/apps/create.ts","../src/commands/apps/run-app-execute.ts","../src/commands/apps/execute.ts","../src/commands/apps/get.ts","../src/commands/apps/run-app-list.ts","../src/commands/apps/list.ts","../src/commands/apps/search.ts","../src/commands/apps/generate-app-stub.ts","../src/commands/apps/run-app-sync.ts","../src/commands/apps/sync.ts","../src/commands/apps/index.ts","../src/commands/templates/apply-template-files.ts","../src/commands/templates/apply.ts","../src/commands/templates/list.ts","../src/commands/templates/show.ts","../src/commands/templates/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/connect/parse-connect-scopes.ts","../src/commands/credentials/parse-set-scopes.ts","../src/commands/credentials/duplicate.ts","../src/commands/credentials/get.ts","../src/commands/credentials/list.ts","../src/project/env-ref.ts","../src/commands/credentials/parse-value.ts","../src/commands/credentials/rotate-key.ts","../src/commands/credentials/format-set-conflict-error.ts","../src/commands/credentials/set.ts","../src/commands/credentials/parse-update-scope.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/update/ensure-sdk-current.ts","../src/commands/build.ts","../src/tooling/resolve-configs-dir.ts","../src/tooling/run-tool.ts","../src/tooling/run-lint.ts","../src/tooling/run-typecheck.ts","../src/commands/deploy.ts","../src/resolve-local-api-origin.ts","../src/project/runtime-child-env.ts","../src/project/bootstrap-run.ts","../src/process/run-processes.ts","../src/runtime/ensure-native-deps.ts","../src/runtime/resolve-runtime-node-modules.ts","../src/commands/dev.ts","../src/commands/docs/run-docs.ts","../src/commands/docs/docs-mcp-url.ts","../src/commands/docs/query.ts","../src/commands/docs/search.ts","../src/commands/docs/index.ts","../src/commands/feedback/create.ts","../src/commands/feedback/index.ts","../src/commands/history/run-history.ts","../src/commands/history/index.ts","../src/commands/health.ts","../src/init/project-name.ts","../src/init/prompts.ts","../src/init/copy-template.ts","../src/init/resolve-template-dir.ts","../src/init/project-files.ts","../src/skills/agents-guide-version.ts","../src/skills/resolve-skills-bundle-dir.ts","../src/skills/scaffold-agents-guide.ts","../src/project/write-project-config.ts","../src/init/scaffold-empty-src-dirs.ts","../src/init/scaffold-project-dotfiles.ts","../src/init/run-init.ts","../src/commands/init.ts","../src/commands/lint.ts","../src/commands/test.ts","../src/commands/typecheck.ts","../src/commands/organization/run-organization.ts","../src/commands/organization/index.ts","../src/commands/projects/run-project-link.ts","../src/commands/projects/run-project-members.ts","../src/commands/projects/members.ts","../src/commands/projects/run-project-settings.ts","../src/commands/projects/settings.ts","../src/commands/projects/index.ts","../src/commands/pull/run-pull.ts","../src/commands/pull/index.ts","../src/commands/start.ts","../src/commands/triggers/list.ts","../src/commands/triggers/resolve-trigger-attachment.ts","../src/commands/triggers/invoke.ts","../src/commands/triggers/runs.ts","../src/commands/triggers/run-attachment-enabled.ts","../src/commands/triggers/toggle.ts","../src/commands/triggers/index.ts","../src/update/update-project-packages.ts","../src/commands/update.ts","../src/commands/workflows/forms.ts","../src/commands/workflows/list.ts","../src/commands/workflows/run.ts","../src/commands/workflows/cancel-run.ts","../src/commands/workflows/runs.ts","../src/commands/workflows/index.ts","../src/commands/channels/run-channel.ts","../src/commands/channels/platforms.ts","../src/commands/channels/resolve-channel-project.ts","../src/commands/channels/list.ts","../src/commands/channels/index.ts","../src/commands/config/preferences-patch.ts","../src/commands/config/preferences.ts","../src/commands/config/index.ts","../src/command-path.ts","../src/skills/sync-agents-guide.ts","../src/program.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, PromptInputSchema, PromptResponseSchema, QueuedAgentPromptResponseSchema, QueuedRunResponseSchema, SkipResponseSchema, TriggerDetailResponseSchema, TriggerListResponseSchema, TriggerRunDetailResponseSchema, TriggerRunListResponseSchema, UpdateCredentialInstanceBodySchema, WorkflowRunDetailResponseSchema, WorkflowRunHooksResponseSchema, WorkflowRunListResponseSchema, parseErrorResponse } from \"@keystrokehq/shared\";\n//#region src/auth.ts\nfunction normalizeBaseUrl(baseUrl) {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\nfunction applyActiveOrganizationHeader(request, organizationId) {\n\tif (organizationId) request.headers.set(ACTIVE_ORG_HEADER, organizationId);\n}\nfunction applyAuthHeaders(request, auth, getToken) {\n\tif (!auth || auth.type === \"none\") return;\n\tif (auth.type === \"apiKey\") {\n\t\tconst key = auth.getKey();\n\t\tif (key) request.headers.set(\"x-api-key\", key);\n\t\treturn;\n\t}\n\tif (auth.type === \"bearer\") {\n\t\tconst tokenPromise = getToken?.() ?? auth.getToken();\n\t\treturn Promise.resolve(tokenPromise).then((token) => {\n\t\t\tif (token) request.headers.set(\"Authorization\", `Bearer ${token}`);\n\t\t});\n\t}\n}\n//#endregion\n//#region src/errors.ts\nvar KeystrokeError = class extends Error {\n\tstatus;\n\tbody;\n\tconstructor(message, status, body) {\n\t\tsuper(message);\n\t\tthis.name = \"KeystrokeError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n};\nasync function toKeystrokeError(error) {\n\tif (!isHTTPError(error)) return new KeystrokeError(error instanceof Error ? error.message : \"Request failed\", 0, null);\n\tconst status = error.response.status;\n\tconst body = error.data ?? null;\n\tconst parsed = parseErrorResponse(body);\n\treturn new KeystrokeError(parsed ? parsed.message ?? parsed.error : `Request failed with status ${status}`, status, body);\n}\n//#endregion\n//#region src/resources/shared.ts\nasync function readJson(response) {\n\treturn response.json();\n}\n//#endregion\n//#region src/resources/agents.ts\nfunction isQueuedAgentPromptResponse(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (\"messages\" in value) return false;\n\treturn QueuedAgentPromptResponseSchema.safeParse(value).success;\n}\nfunction listSessionsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.status) params.status = query.status;\n\tif (query.source) params.source = query.source;\n\treturn params;\n}\nfunction detailSearchParams$2(query) {\n\tif (!query?.include) return {};\n\treturn { include: query.include };\n}\nfunction createAgentsResource(http) {\n\treturn {\n\t\tasync prompt(id, input) {\n\t\t\tconst body = PromptInputSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`agents/${id}`, { json: body });\n\t\t\t\tconst data = await readJson(response);\n\t\t\t\tif (response.status === 202) return QueuedAgentPromptResponseSchema.parse(data);\n\t\t\t\treturn PromptResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listSessions(agentId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`agents/${agentId}/sessions`, { searchParams: listSessionsSearchParams(query) }).json();\n\t\t\t\treturn AgentSessionListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getSession(agentId, sessionId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`agents/${agentId}/sessions/${sessionId}`, { searchParams: detailSearchParams$2(query) }).json();\n\t\t\t\treturn AgentSessionDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/connect.ts\nfunction routeFromPath(path) {\n\treturn path.replace(/^\\//, \"\");\n}\nfunction createConnectResource(http) {\n\treturn {\n\t\tasync listProviders() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"connect/providers\").json();\n\t\t\t\treturn ConnectProvidersResponseSchema.parse(data).providers;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getAuthorizeUrl(path) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(routeFromPath(path)).json();\n\t\t\t\treturn ConnectAuthorizeUrlResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/credentials.ts\nfunction createCredentialsResource(http) {\n\treturn {\n\t\tasync listInstances(options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = options?.key ? { key: options.key } : void 0;\n\t\t\t\tconst data = await http.get(\"credentials/instances\", { searchParams }).json();\n\t\t\t\treturn CredentialInstanceListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync createInstance(body) {\n\t\t\ttry {\n\t\t\t\tconst payload = CreateCredentialInstanceBodySchema.parse(body);\n\t\t\t\tconst data = await http.post(\"credentials/instances\", { json: payload }).json();\n\t\t\t\treturn CredentialInstanceRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateInstance(id, body) {\n\t\t\ttry {\n\t\t\t\tconst payload = UpdateCredentialInstanceBodySchema.parse(body);\n\t\t\t\tconst data = await http.put(`credentials/instances/${id}`, { json: payload }).json();\n\t\t\t\treturn CredentialInstanceRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync deleteInstance(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`credentials/instances/${id}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listAssignments(query) {\n\t\t\ttry {\n\t\t\t\tconst params = CredentialAssignmentListQuerySchema.parse(query);\n\t\t\t\tconst data = await http.get(\"credentials/assignments\", { searchParams: params }).json();\n\t\t\t\treturn CredentialAssignmentListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync assignCredential(body) {\n\t\t\ttry {\n\t\t\t\tconst payload = AssignCredentialBodySchema.parse(body);\n\t\t\t\tconst data = await http.put(\"credentials/assignments\", { json: payload }).json();\n\t\t\t\treturn CredentialAssignmentRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync unassignCredential(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`credentials/assignments/${id}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listConsumers(query) {\n\t\t\ttry {\n\t\t\t\tconst params = CredentialConsumerListQuerySchema.parse(query);\n\t\t\t\tconst data = await http.get(\"credentials/consumers\", { searchParams: params }).json();\n\t\t\t\treturn CredentialConsumerListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/health.ts\nfunction createHealthResource(http) {\n\treturn { async check() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"health\").json();\n\t\t\treturn HealthResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toKeystrokeError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/resources/openapi.ts\nfunction createOpenApiResource(http) {\n\treturn { async fetch() {\n\t\ttry {\n\t\t\treturn await http.get(\"openapi.json\").json();\n\t\t} catch (error) {\n\t\t\tthrow await toKeystrokeError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/resources/triggers.ts\nfunction 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\tif (query.outcome) params.outcome = query.outcome;\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 listRuns(attachmentId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`triggers/${attachmentId}/runs`, { searchParams: listRunsSearchParams$1(query) }).json();\n\t\t\t\treturn TriggerRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRun(attachmentId, runId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`triggers/${attachmentId}/runs/${runId}`, { searchParams: detailSearchParams$1(query) }).json();\n\t\t\t\treturn TriggerRunDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\nfunction isSkippedTriggerResponse(value) {\n\treturn SkipResponseSchema.safeParse(value).success;\n}\n//#endregion\n//#region src/resources/workflows.ts\nfunction isQueuedRunResponse(value) {\n\treturn QueuedRunResponseSchema.safeParse(value).success;\n}\nfunction listRunsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.status) params.status = query.status;\n\tif (query.trigger) params.trigger = query.trigger;\n\treturn params;\n}\nfunction detailSearchParams(query) {\n\tif (!query?.include) return {};\n\treturn { include: query.include };\n}\nfunction createWorkflowsResource(http) {\n\treturn {\n\t\tasync run(id, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`workflows/${id}`, { json: input });\n\t\t\t\tconst data = await readJson(response);\n\t\t\t\tif (response.status === 202) return QueuedRunResponseSchema.parse(data);\n\t\t\t\treturn data;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listRuns(workflowId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs`, { searchParams: listRunsSearchParams(query) }).json();\n\t\t\t\treturn WorkflowRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRun(workflowId, runId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs/${runId}`, { searchParams: detailSearchParams(query) }).json();\n\t\t\t\treturn WorkflowRunDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listHooks(workflowId, runId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs/${runId}/hooks`).json();\n\t\t\t\treturn WorkflowRunHooksResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/index.ts\nfunction createKeystrokeClient(options) {\n\tconst auth = options.auth ?? { type: \"none\" };\n\tconst base = normalizeBaseUrl(options.baseUrl);\n\tconst getActiveOrganizationId = options.getActiveOrganizationId;\n\tconst http = ky.create({\n\t\tprefix: base === \"\" ? void 0 : `${base}/`,\n\t\tcredentials: \"omit\",\n\t\thooks: { beforeRequest: [({ request }) => {\n\t\t\tapplyActiveOrganizationHeader(request, getActiveOrganizationId?.());\n\t\t\treturn applyAuthHeaders(request, auth);\n\t\t}] },\n\t\t...options.ky\n\t});\n\treturn {\n\t\thttp,\n\t\thealth: createHealthResource(http),\n\t\tconnect: createConnectResource(http),\n\t\tcredentials: createCredentialsResource(http),\n\t\topenapi: createOpenApiResource(http),\n\t\tagents: createAgentsResource(http),\n\t\tworkflows: createWorkflowsResource(http),\n\t\ttriggers: createTriggersResource(http)\n\t};\n}\n//#endregion\nexport { KeystrokeError, createKeystrokeClient, isQueuedAgentPromptResponse, isQueuedRunResponse, isSkippedTriggerResponse, toKeystrokeError };\n\n//# sourceMappingURL=index.mjs.map","import {\n chmodSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n renameSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nimport { getCliConfigDir } from \"../config\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\n\nconst CREDENTIALS_FILE_NAME = \"credentials.json\";\n\nexport const CREDENTIALS_DIR_MODE = 0o700;\nexport const CREDENTIALS_FILE_MODE = 0o600;\n\ntype CredentialsFile = {\n tokens: Record<string, string>;\n};\n\nfunction accountForUrl(url: string): string {\n return new URL(url).hostname;\n}\n\nexport function credentialsFilePath(configDir = getCliConfigDir()): string {\n return join(configDir, CREDENTIALS_FILE_NAME);\n}\n\nfunction assertSafeCredentialsPath(path: string): void {\n if (!existsSync(path)) {\n return;\n }\n\n const stats = lstatSync(path);\n if (stats.isSymbolicLink() || !stats.isFile()) {\n throw new ExpectedCliError(\n `Refusing to use credentials path that is not a regular file: ${path}`,\n );\n }\n}\n\nfunction ensureCredentialsDir(path: string): void {\n const dir = dirname(path);\n mkdirSync(dir, { recursive: true, mode: CREDENTIALS_DIR_MODE });\n try {\n chmodSync(dir, CREDENTIALS_DIR_MODE);\n } catch {\n // Best-effort on platforms that ignore POSIX modes.\n }\n}\n\nfunction emptyCredentials(): CredentialsFile {\n return { tokens: {} };\n}\n\nfunction readCredentialsFile(path: string): CredentialsFile {\n assertSafeCredentialsPath(path);\n if (!existsSync(path)) {\n return emptyCredentials();\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(path, \"utf8\"));\n } catch {\n throw new ExpectedCliError(`Credentials file is not valid JSON: ${path}`);\n }\n\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n !(\"tokens\" in parsed) ||\n typeof (parsed as { tokens: unknown }).tokens !== \"object\" ||\n (parsed as { tokens: unknown }).tokens === null ||\n Array.isArray((parsed as { tokens: unknown }).tokens)\n ) {\n throw new ExpectedCliError(`Credentials file has an invalid shape: ${path}`);\n }\n\n const tokens: Record<string, string> = {};\n for (const [key, value] of Object.entries((parsed as CredentialsFile).tokens)) {\n if (typeof value === \"string\" && value.length > 0) {\n tokens[key] = value;\n }\n }\n\n return { tokens };\n}\n\nfunction writeCredentialsFile(path: string, data: CredentialsFile): void {\n ensureCredentialsDir(path);\n assertSafeCredentialsPath(path);\n\n const tempPath = `${path}.${process.pid}.${Date.now()}.tmp`;\n const payload = `${JSON.stringify(data, null, 2)}\\n`;\n\n try {\n writeFileSync(tempPath, payload, {\n encoding: \"utf8\",\n mode: CREDENTIALS_FILE_MODE,\n flag: \"wx\",\n });\n try {\n chmodSync(tempPath, CREDENTIALS_FILE_MODE);\n } catch {\n // Best-effort on platforms that ignore POSIX modes.\n }\n renameSync(tempPath, path);\n try {\n chmodSync(path, CREDENTIALS_FILE_MODE);\n } catch {\n // Best-effort on platforms that ignore POSIX modes.\n }\n } catch (error) {\n try {\n unlinkSync(tempPath);\n } catch {\n // Ignore cleanup failures for the temp file.\n }\n throw error;\n }\n}\n\nexport function getFileToken(url: string, configDir = getCliConfigDir()): string | undefined {\n const path = credentialsFilePath(configDir);\n return readCredentialsFile(path).tokens[accountForUrl(url)];\n}\n\nexport function setFileToken(url: string, token: string, configDir = getCliConfigDir()): void {\n const path = credentialsFilePath(configDir);\n const data = readCredentialsFile(path);\n data.tokens[accountForUrl(url)] = token;\n writeCredentialsFile(path, data);\n}\n\nexport function clearFileToken(url: string, configDir = getCliConfigDir()): void {\n const path = credentialsFilePath(configDir);\n if (!existsSync(path)) {\n return;\n }\n\n const account = accountForUrl(url);\n const data = readCredentialsFile(path);\n if (!(account in data.tokens)) {\n return;\n }\n\n delete data.tokens[account];\n\n if (Object.keys(data.tokens).length === 0) {\n assertSafeCredentialsPath(path);\n unlinkSync(path);\n return;\n }\n\n writeCredentialsFile(path, data);\n}\n","import { spawnSync } from \"node:child_process\";\nimport { Entry } from \"@napi-rs/keyring\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\n\n/** Stable service for the Apple `/usr/bin/security` backend (not Node-bound). */\nexport const KEYCHAIN_SERVICE = \"keystroke-cli\";\n\n/** Legacy `@napi-rs/keyring` service — migrated once into KEYCHAIN_SERVICE on macOS. */\nexport const LEGACY_KEYCHAIN_SERVICE = \"keystroke\";\n\nconst SECURITY_BIN = \"/usr/bin/security\";\n\nexport const KEYCHAIN_UNAVAILABLE_MESSAGE =\n \"OS keychain is unavailable or locked. For headless environments, set KEYSTROKE_API_KEY instead of using `keystroke auth login`, or run `keystroke auth login --credential-storage file`.\";\n\n/** Match storage-specific keychain/keyring failures only — avoid generic OS permission phrases. */\nexport function isKeychainFailure(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const message = error.message.toLowerCase();\n return (\n message.includes(\"keychain\") ||\n message.includes(\"keyring\") ||\n message.includes(\"secret service\") ||\n message.includes(\"libsecret\") ||\n message.includes(\"password store\") ||\n message.includes(\"no password store\") ||\n message.includes(\"dbus\") ||\n message.includes(\"no such interface\") ||\n message.includes(\"platform secure storage\") ||\n message.includes(\"user interaction is not allowed\") ||\n message.includes(\"errsec\") ||\n message.includes(\"keychain access failed via security\") ||\n /security.*(denied|locked|unable|failed)/i.test(message)\n );\n}\n\nexport function withKeychain<T>(fn: () => T): T {\n try {\n return fn();\n } catch (error) {\n if (isKeychainFailure(error)) {\n throw new ExpectedCliError(KEYCHAIN_UNAVAILABLE_MESSAGE, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n throw error;\n }\n}\n\nfunction accountForUrl(url: string): string {\n return new URL(url).hostname;\n}\n\ntype SecurityResult = {\n status: number | null;\n stdout: string;\n stderr: string;\n};\n\nfunction runSecurity(args: string[], input?: string): SecurityResult {\n const result = spawnSync(SECURITY_BIN, args, {\n encoding: \"utf8\",\n input,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n if (result.error) {\n throw result.error;\n }\n\n return {\n status: result.status,\n stdout: result.stdout ?? \"\",\n stderr: result.stderr ?? \"\",\n };\n}\n\nfunction securityErrorMessage(result: SecurityResult): string {\n const detail = (result.stderr || result.stdout).trim();\n return detail.length > 0\n ? `Keychain access failed via security: ${detail}`\n : `Keychain access failed via security (exit ${result.status ?? \"unknown\"})`;\n}\n\n/** errSecItemNotFound — item does not exist. */\nfunction isSecurityNotFound(result: SecurityResult): boolean {\n if (result.status === 44) {\n return true;\n }\n const text = `${result.stderr}\\n${result.stdout}`.toLowerCase();\n return text.includes(\"could not be found\") || text.includes(\"item not found\");\n}\n\nfunction getViaSecurity(account: string, service: string): string | undefined {\n const result = runSecurity([\"find-generic-password\", \"-s\", service, \"-a\", account, \"-w\"]);\n if (isSecurityNotFound(result)) {\n return undefined;\n }\n if (result.status !== 0) {\n throw new Error(securityErrorMessage(result));\n }\n // Trim a single trailing newline security may append; keep other whitespace.\n const password = result.stdout.replace(/\\n$/, \"\");\n // Empty items can be left behind when `security -w` falls back to a TTY prompt.\n return password.length > 0 ? password : undefined;\n}\n\nfunction setViaSecurity(account: string, service: string, token: string): void {\n if (token.length === 0) {\n throw new Error(\"Refusing to store an empty keychain token\");\n }\n // Pass the password as `-w <token>`. Using `-w` as the final flag with no value\n // makes `security` open /dev/tty and prompt interactively (ignoring piped stdin).\n const result = runSecurity([\n \"add-generic-password\",\n \"-U\",\n \"-s\",\n service,\n \"-a\",\n account,\n \"-w\",\n token,\n ]);\n if (result.status !== 0) {\n throw new Error(securityErrorMessage(result));\n }\n}\n\nfunction deleteViaSecurity(account: string, service: string): void {\n const result = runSecurity([\"delete-generic-password\", \"-s\", service, \"-a\", account]);\n if (isSecurityNotFound(result)) {\n return;\n }\n if (result.status !== 0) {\n throw new Error(securityErrorMessage(result));\n }\n}\n\nfunction getLegacyNapi(account: string): string | undefined {\n const entry = new Entry(LEGACY_KEYCHAIN_SERVICE, account);\n const password = entry.getPassword();\n return password === null ? undefined : password;\n}\n\nfunction clearLegacyNapi(account: string): void {\n const entry = new Entry(LEGACY_KEYCHAIN_SERVICE, account);\n try {\n entry.deletePassword();\n } catch {\n // Best-effort cleanup after a successful migration write.\n }\n}\n\nfunction getNapi(account: string, service = KEYCHAIN_SERVICE): string | undefined {\n const entry = new Entry(service, account);\n const password = entry.getPassword();\n return password === null ? undefined : password;\n}\n\nfunction setNapi(account: string, token: string, service = KEYCHAIN_SERVICE): void {\n const entry = new Entry(service, account);\n entry.setPassword(token);\n}\n\nfunction deleteNapi(account: string, service = KEYCHAIN_SERVICE): void {\n const entry = new Entry(service, account);\n entry.deletePassword();\n}\n\nfunction migrateLegacyMacToken(account: string): string | undefined {\n let legacy: string | undefined;\n try {\n legacy = getLegacyNapi(account);\n } catch (error) {\n if (isKeychainFailure(error)) {\n throw error;\n }\n return undefined;\n }\n\n if (!legacy) {\n return undefined;\n }\n\n setViaSecurity(account, KEYCHAIN_SERVICE, legacy);\n const verified = getViaSecurity(account, KEYCHAIN_SERVICE);\n if (verified !== legacy) {\n throw new Error(\n \"Keychain migration failed: wrote legacy token via security but could not read it back\",\n );\n }\n clearLegacyNapi(account);\n return legacy;\n}\n\nexport function getKeychainToken(url: string): string | undefined {\n return withKeychain(() => {\n const account = accountForUrl(url);\n\n if (process.platform === \"darwin\") {\n const current = getViaSecurity(account, KEYCHAIN_SERVICE);\n if (current !== undefined) {\n return current;\n }\n return migrateLegacyMacToken(account);\n }\n\n return getNapi(account);\n });\n}\n\nexport function setKeychainToken(url: string, token: string): void {\n withKeychain(() => {\n const account = accountForUrl(url);\n if (process.platform === \"darwin\") {\n setViaSecurity(account, KEYCHAIN_SERVICE, token);\n clearLegacyNapi(account);\n return;\n }\n setNapi(account, token);\n });\n}\n\nexport function clearKeychainToken(url: string): void {\n withKeychain(() => {\n const account = accountForUrl(url);\n if (process.platform === \"darwin\") {\n deleteViaSecurity(account, KEYCHAIN_SERVICE);\n clearLegacyNapi(account);\n return;\n }\n try {\n deleteNapi(account);\n } catch (error) {\n // Treat missing entries as success for logout.\n if (error instanceof Error && /no.?entry|not found|password not found/i.test(error.message)) {\n return;\n }\n throw error;\n }\n });\n}\n","import type { CredentialStorage } from \"./credential-storage\";\nimport { clearFileToken, getFileToken, setFileToken } from \"./credentials-file\";\nimport { clearKeychainToken, getKeychainToken, setKeychainToken } from \"./credentials-keychain\";\n\nexport type { CredentialStorage } from \"./credential-storage\";\nexport {\n CREDENTIAL_STORAGE_VALUES,\n isCredentialStorage,\n parseCredentialStorage,\n} from \"./credential-storage\";\n\nexport type CredentialOptions = {\n storage?: CredentialStorage;\n /** Override `~/.keystroke` for file-backed credentials (tests). */\n configDir?: string;\n};\n\ntype CacheKey = `${CredentialStorage}:${string}`;\n\nconst MISSING = Symbol(\"missing\");\ntype CacheValue = string | typeof MISSING;\n\nconst tokenCache = new Map<CacheKey, CacheValue>();\n\nfunction accountForUrl(url: string): string {\n return new URL(url).hostname;\n}\n\nfunction resolveStorage(storage?: CredentialStorage): CredentialStorage {\n return storage ?? \"keychain\";\n}\n\nfunction cacheKey(url: string, storage: CredentialStorage): CacheKey {\n return `${storage}:${accountForUrl(url)}`;\n}\n\nfunction readFromBackend(\n url: string,\n storage: CredentialStorage,\n configDir?: string,\n): string | undefined {\n if (storage === \"file\") {\n return getFileToken(url, configDir);\n }\n return getKeychainToken(url);\n}\n\nfunction writeToBackend(\n url: string,\n token: string,\n storage: CredentialStorage,\n configDir?: string,\n): void {\n if (storage === \"file\") {\n setFileToken(url, token, configDir);\n return;\n }\n setKeychainToken(url, token);\n}\n\nfunction deleteFromBackend(url: string, storage: CredentialStorage, configDir?: string): void {\n if (storage === \"file\") {\n clearFileToken(url, configDir);\n return;\n }\n clearKeychainToken(url);\n}\n\n/** Clear the in-process credential cache (tests / logout). */\nexport function clearAccessTokenCache(): void {\n tokenCache.clear();\n}\n\nexport function getAccessToken(url: string, options: CredentialOptions = {}): string | undefined {\n const storage = resolveStorage(options.storage);\n const key = cacheKey(url, storage);\n const cached = tokenCache.get(key);\n if (cached !== undefined) {\n return cached === MISSING ? undefined : cached;\n }\n\n const token = readFromBackend(url, storage, options.configDir);\n tokenCache.set(key, token === undefined ? MISSING : token);\n return token;\n}\n\nexport function setAccessToken(url: string, token: string, options: CredentialOptions = {}): void {\n const storage = resolveStorage(options.storage);\n writeToBackend(url, token, storage, options.configDir);\n tokenCache.set(cacheKey(url, storage), token);\n}\n\nexport function clearAccessToken(url: string, options: CredentialOptions = {}): void {\n const storage = resolveStorage(options.storage);\n deleteFromBackend(url, storage, options.configDir);\n tokenCache.set(cacheKey(url, storage), MISSING);\n}\n\n/**\n * Persist a token to `storage`, then best-effort clear the other backend when switching.\n * Does not discard the newly stored credential if cleanup fails.\n */\nexport function setAccessTokenSwitchingStorage(\n url: string,\n token: string,\n options: {\n storage: CredentialStorage;\n previousStorage?: CredentialStorage;\n configDir?: string;\n },\n): { cleanupWarning?: string } {\n setAccessToken(url, token, { storage: options.storage, configDir: options.configDir });\n\n const previous = options.previousStorage;\n if (!previous || previous === options.storage) {\n return {};\n }\n\n try {\n clearAccessToken(url, { storage: previous, configDir: options.configDir });\n return {};\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n return {\n cleanupWarning: `Stored credentials in ${options.storage}, but failed to clear ${previous} storage: ${detail}`,\n };\n }\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.23\";\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","//#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 = 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\nconst SLASH_CHAR_CODE = \"/\".charCodeAt(0);\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 trimTrailingSlashes(value) {\n\tlet end = value.length;\n\twhile (end > 0 && value.charCodeAt(end - 1) === SLASH_CHAR_CODE) end--;\n\treturn end === value.length ? value : value.slice(0, end);\n}\nfunction checkHasPath(url) {\n\ttry {\n\t\treturn (trimTrailingSlashes(new URL(url).pathname) || \"/\") !== \"/\";\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 = trimTrailingSlashes(url);\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, trimTrailingSlashes };\n","//#region src/utils/url.ts\n/**\n* Normalizes a request pathname by removing the basePath prefix and trailing slashes.\n* This is useful for matching paths against configured path lists.\n*\n* @param requestUrl - The full request URL\n* @param basePath - The base path of the auth API (e.g., \"/api/auth\")\n* @returns The normalized path without basePath prefix or trailing slashes,\n* or \"/\" if URL parsing fails\n*\n* @example\n* normalizePathname(\"http://localhost:3000/api/auth/sso/saml2/callback/provider1\", \"/api/auth\")\n* // Returns: \"/sso/saml2/callback/provider1\"\n*\n* normalizePathname(\"http://localhost:3000/sso/saml2/callback/provider1/\", \"/\")\n* // Returns: \"/sso/saml2/callback/provider1\"\n*/\nfunction normalizePathname(requestUrl, basePath) {\n\tlet pathname;\n\ttry {\n\t\tpathname = new URL(requestUrl).pathname.replace(/\\/+$/, \"\") || \"/\";\n\t} catch {\n\t\treturn \"/\";\n\t}\n\tconst normalizedBasePath = basePath.replace(/\\/+$/, \"\");\n\tif (normalizedBasePath === \"\") return pathname;\n\tif (pathname === normalizedBasePath) return \"/\";\n\tif (pathname.startsWith(normalizedBasePath + \"/\")) return pathname.slice(normalizedBasePath.length).replace(/\\/+$/, \"\") || \"/\";\n\treturn pathname;\n}\n/**\n* Schemes that execute or embed code when navigated to or accepted as a\n* redirect target. These are never safe as an OAuth `redirect_uri` or as a\n* client-side navigation target (`window.location.href`, `location.assign`, ...).\n*/\nconst DANGEROUS_URL_SCHEMES = [\n\t\"javascript:\",\n\t\"data:\",\n\t\"vbscript:\"\n];\n/**\n* Returns `false` only when `value` is an absolute URL using a dangerous scheme\n* (`javascript:`, `data:`, `vbscript:`). Relative URLs (e.g. `/dashboard`) and\n* safe absolute schemes (`http`, `https`, custom app schemes such as\n* `myapp://`) return `true`.\n*\n* Use this to guard browser navigation sinks and any redirect target that may\n* originate from untrusted input. It is intentionally narrow: it blocks code\n* execution schemes without rejecting relative paths or mobile deep links.\n*/\nfunction isSafeUrlScheme(value) {\n\tlet parsed;\n\ttry {\n\t\tparsed = new URL(value);\n\t} catch {\n\t\treturn true;\n\t}\n\treturn !DANGEROUS_URL_SCHEMES.includes(parsed.protocol);\n}\n//#endregion\nexport { DANGEROUS_URL_SCHEMES, isSafeUrlScheme, normalizePathname };\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 { onSet } from \"nanostores\";\n//#region src/client/equality.ts\nfunction isPlainObject(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\n/**\n* Deep structural equality for JSON-serializable values.\n* Handles: primitives, null, arrays, and plain objects.\n* Short-circuits on referential equality at every recursion level.\n*/\nfunction isJsonEqual(a, b) {\n\tif (a === b) return true;\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\tif (a.length !== b.length) return false;\n\t\tfor (let i = 0; i < a.length; i++) if (!isJsonEqual(a[i], b[i])) return false;\n\t\treturn true;\n\t}\n\tif (isPlainObject(a) && isPlainObject(b)) {\n\t\tconst keysA = Object.keys(a);\n\t\tconst keysB = Object.keys(b);\n\t\tif (keysA.length !== keysB.length) return false;\n\t\tfor (const key of keysA) if (!(key in b) || !isJsonEqual(a[key], b[key])) return false;\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Attach an equality gate to a nanostores atom via `onSet`.\n* When `isEqual(currentValue, newValue)` returns true, the `set()` call\n* is aborted: no listeners fire, no framework re-renders occur.\n*\n* Returns the unsubscribe function from `onSet`.\n*/\nfunction withEquality(store, isEqual) {\n\treturn onSet(store, ({ newValue, abort }) => {\n\t\tif (isEqual(store.value, newValue)) abort();\n\t});\n}\n//#endregion\nexport { isJsonEqual, withEquality };\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\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* 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 { fetchSession, shouldPollSession = () => true, sessionSignal, 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\tisInitialized: false,\n\t\tlastSessionRequest: 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\tfetchSession();\n\t\t\treturn;\n\t\t}\n\t\tif (event?.event === \"poll\") {\n\t\t\tstate.lastSessionRequest = now();\n\t\t\tfetchSession();\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\tfetchSession();\n\t\t\treturn;\n\t\t}\n\t\tfetchSession();\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 (shouldPollSession()) 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 setupSignalSubscription = () => {\n\t\tstate.unsubscribeSignal = sessionSignal.listen(() => {\n\t\t\tfetchSession();\n\t\t});\n\t};\n\tconst init = () => {\n\t\tif (state.isInitialized) return;\n\t\tstate.isInitialized = true;\n\t\tsetupPolling();\n\t\tsetupBroadcast();\n\t\tsetupFocusRefetch();\n\t\tsetupOnlineRefetch();\n\t\tsetupSignalSubscription();\n\t\tstate.cleanupBroadcastSetup = getGlobalBroadcastChannel().setup();\n\t\tstate.cleanupFocusSetup = getGlobalFocusManager().setup();\n\t\tstate.cleanupOnlineSetup = getGlobalOnlineManager().setup();\n\t};\n\tconst cleanup = () => {\n\t\tif (!state.isInitialized) return;\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\tif (state.unsubscribeSignal) {\n\t\t\tstate.unsubscribeSignal();\n\t\t\tstate.unsubscribeSignal = void 0;\n\t\t}\n\t\tif (state.cleanupBroadcastSetup) {\n\t\t\tstate.cleanupBroadcastSetup();\n\t\t\tstate.cleanupBroadcastSetup = void 0;\n\t\t}\n\t\tif (state.cleanupFocusSetup) {\n\t\t\tstate.cleanupFocusSetup();\n\t\t\tstate.cleanupFocusSetup = void 0;\n\t\t}\n\t\tif (state.cleanupOnlineSetup) {\n\t\t\tstate.cleanupOnlineSetup();\n\t\t\tstate.cleanupOnlineSetup = void 0;\n\t\t}\n\t\tstate.isInitialized = false;\n\t\tstate.lastSessionRequest = 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","import { isSafeUrlScheme } from \"@better-auth/core/utils/url\";\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 && isSafeUrlScheme(context.data.url)) {\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 { isJsonEqual, withEquality } from \"./equality.mjs\";\nimport { createSessionRefreshManager } from \"./session-refresh.mjs\";\nimport { atom, onMount } from \"nanostores\";\n//#region src/client/session-atom.ts\nconst isServer = () => typeof window === \"undefined\";\n/**\n* Normalize $fetch response: `throw: true` returns data directly,\n* 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}\nfunction normalizeSessionData(data) {\n\tif (!data) return null;\n\tif (data.session === null && data.user === null) return null;\n\treturn data;\n}\nfunction isSessionAtomEqual(a, b) {\n\treturn isJsonEqual(a.data, b.data) && a.error === b.error && a.isPending === b.isPending && a.isRefetching === b.isRefetching && a.refetch === b.refetch;\n}\nfunction getSessionAtom($fetch, options) {\n\tconst $signal = atom(false);\n\tlet abortController;\n\tconst refetch = (queryParams) => fetchSession(queryParams);\n\tconst session = atom({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: true,\n\t\tisRefetching: false,\n\t\trefetch\n\t});\n\twithEquality(session, isSessionAtomEqual);\n\tconst settleAbortedFetch = (controller) => {\n\t\tif (abortController !== controller) return;\n\t\tconst current = session.get();\n\t\tabortController = void 0;\n\t\tif (!current.isPending && !current.isRefetching) return;\n\t\tsession.set({\n\t\t\t...current,\n\t\t\tisPending: false,\n\t\t\tisRefetching: false,\n\t\t\trefetch\n\t\t});\n\t};\n\tconst fetchSession = async (queryParams) => {\n\t\tabortController?.abort();\n\t\tconst controller = new AbortController();\n\t\tabortController = controller;\n\t\tconst current = session.get();\n\t\tsession.set({\n\t\t\t...current,\n\t\t\tisPending: current.data === null,\n\t\t\tisRefetching: true,\n\t\t\terror: null,\n\t\t\trefetch\n\t\t});\n\t\ttry {\n\t\t\tconst res = await $fetch(\"/get-session\", {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: queryParams?.query,\n\t\t\t\tsignal: controller.signal\n\t\t\t});\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet { data, error } = normalizeSessionResponse(res);\n\t\t\tif (data?.needsRefresh) try {\n\t\t\t\tconst refreshRes = await $fetch(\"/get-session\", {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tsignal: controller.signal\n\t\t\t\t});\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t({data, error} = normalizeSessionResponse(refreshRes));\n\t\t\t} catch {\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tconst latest = session.get();\n\t\t\t\tconst isUnauthorized = error?.status === 401;\n\t\t\t\tsession.set({\n\t\t\t\t\tdata: isUnauthorized ? null : latest.data,\n\t\t\t\t\terror,\n\t\t\t\t\tisPending: false,\n\t\t\t\t\tisRefetching: false,\n\t\t\t\t\trefetch\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst sessionData = normalizeSessionData(data);\n\t\t\tconst current = session.get();\n\t\t\tconst stableData = current.data != null && sessionData != null && isJsonEqual(current.data, sessionData) ? current.data : sessionData;\n\t\t\tsession.set({\n\t\t\t\tdata: stableData,\n\t\t\t\terror: null,\n\t\t\t\tisPending: false,\n\t\t\t\tisRefetching: false,\n\t\t\t\trefetch\n\t\t\t});\n\t\t} catch (fetchError) {\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst latest = session.get();\n\t\t\tsession.set({\n\t\t\t\tdata: latest.data,\n\t\t\t\terror: fetchError,\n\t\t\t\tisPending: false,\n\t\t\t\tisRefetching: false,\n\t\t\t\trefetch\n\t\t\t});\n\t\t}\n\t};\n\tlet broadcastSessionUpdate = () => {};\n\tonMount(session, () => {\n\t\tlet timeoutId;\n\t\tif (!isServer()) timeoutId = setTimeout(() => {\n\t\t\tfetchSession();\n\t\t}, 0);\n\t\tconst refreshManager = createSessionRefreshManager({\n\t\t\tfetchSession,\n\t\t\tshouldPollSession: () => session.get().data != null,\n\t\t\tsessionSignal: $signal,\n\t\t\toptions\n\t\t});\n\t\trefreshManager.init();\n\t\tbroadcastSessionUpdate = refreshManager.broadcastSessionUpdate;\n\t\treturn () => {\n\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\tconst controller = abortController;\n\t\t\tcontroller?.abort();\n\t\t\tif (controller) settleAbortedFetch(controller);\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}\nfunction mergeHeaders(...sources) {\n const merged = {};\n for (const source of sources) {\n if (!source) {\n continue;\n }\n if (source instanceof Headers) {\n source.forEach((value, key) => {\n merged[key] = value;\n });\n } else {\n const entries = Array.isArray(source) ? source : Object.entries(source);\n for (const [key, value] of entries) {\n if (value !== null && value !== void 0) {\n merged[key] = value;\n }\n }\n }\n }\n return merged;\n}\nasync function getHeaders(opts) {\n const headers = new Headers(mergeHeaders(opts == null ? void 0 : opts.headers, await getAuthHeader(opts)));\n if (!headers.has(\"content-type\")) {\n const contentType = detectContentType(opts == null ? void 0 : opts.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\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 getMediaType(headers) {\n const contentType = headers.get(\"content-type\");\n return contentType ? contentType.split(\";\")[0].trim().toLowerCase() : null;\n}\nfunction getBody(options, headers) {\n const { body } = options;\n if (!body) {\n return null;\n }\n if (!isJSONSerializable(body)) {\n return body;\n }\n if (typeof body === \"string\") {\n return body;\n }\n if (getMediaType(headers) === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n return JSON.stringify(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 if (urlKey.startsWith(\"/\") && urlKey.charAt(1) === \"@\") {\n urlKey = urlKey.substring(1);\n }\n const keySchema = schema.schema[urlKey];\n if (keySchema) {\n let validatedHeaders = options == null ? void 0 : options.headers;\n if (keySchema.headers && !(options == null ? void 0 : options.disableValidation)) {\n const normalizedHeaders = {};\n if (options == null ? void 0 : options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((value, key) => {\n normalizedHeaders[key.toLowerCase()] = value;\n });\n } else if (typeof options.headers === \"object\") {\n for (const [key, value] of Object.entries(options.headers)) {\n if (value !== null && value !== void 0) {\n normalizedHeaders[key.toLowerCase()] = value;\n }\n }\n }\n }\n const validated = await parseStandardSchema(\n keySchema.headers,\n normalizedHeaders\n );\n const finalHeaders = {};\n for (const [key, value] of Object.entries(validated)) {\n finalHeaders[key.toLowerCase()] = value;\n }\n validatedHeaders = finalHeaders;\n }\n let opts = __spreadProps(__spreadValues({}, options), {\n method: keySchema.method,\n output: keySchema.output,\n headers: validatedHeaders\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 headers: mergeHeaders(config == null ? void 0 : config.headers, options == null ? void 0 : options.headers),\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\nvar isReservedPathSegment = (value) => value === \".\" || value === \"..\";\nfunction encodePathSegment(segment, pathParams) {\n let pathSegment = segment;\n for (const [key, value] of pathParams) {\n pathSegment = pathSegment.replace(key, value);\n }\n if (isReservedPathSegment(pathSegment)) {\n throw new TypeError(\"Path parameters cannot be reserved path segments\");\n }\n return encodeURIComponent(pathSegment);\n}\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 const pathParams = /* @__PURE__ */ new Map();\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 pathParams.set(key, String(value));\n }\n } else {\n for (const [key, value] of Object.entries(params)) {\n pathParams.set(`:${key}`, String(value));\n }\n }\n }\n path = path.split(\"/\").map((segment) => encodePathSegment(segment, pathParams)).join(\"/\");\n path = path.replace(/^\\/+/, \"\");\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 headers = await getHeaders(opts);\n const body = getBody(opts, headers);\n const method = getMethod(__url, opts);\n const 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 Object.assign(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 mergeHeaders,\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","//#region src/utils/string.ts\nfunction capitalizeFirstLetter(str) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst WORD_PATTERN = /[\\p{Ll}\\d]+|\\p{Lu}+(?!\\p{Ll})|\\p{Lu}[\\p{Ll}\\d]+|\\p{Lo}+/gu;\nconst APOSTROPHE_PATTERN = /['\\u2019]/g;\nfunction splitWords(input) {\n\treturn input.replace(APOSTROPHE_PATTERN, \"\").match(WORD_PATTERN) ?? [];\n}\nfunction toSnakeCase(input) {\n\treturn splitWords(input).map((word) => word.toLowerCase()).join(\"_\");\n}\nfunction toKebabCase(input) {\n\treturn splitWords(input).map((word) => word.toLowerCase()).join(\"-\");\n}\nfunction toCamelCase(input) {\n\treturn splitWords(input).reduce((acc, word, i) => {\n\t\treturn acc + (i === 0 ? word.toLowerCase() : `${word[0].toUpperCase()}${word.slice(1)}`);\n\t}, \"\");\n}\nfunction toPascalCase(input) {\n\treturn splitWords(input).map((word) => `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}`).join(\"\");\n}\n//#endregion\nexport { capitalizeFirstLetter, toCamelCase, toKebabCase, toPascalCase, toSnakeCase };\n","import { isAtom } from \"../utils/is-atom.mjs\";\nimport { toKebabCase } from \"@better-auth/core/utils/string\";\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(toKebabCase).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","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}\n/** Better Auth (and some proxies) return this instead of OAuth slow_down. */\nfunction isRateLimitedError(error) {\n\tif (error.status === 429) return true;\n\treturn typeof error.message === \"string\" && error.message.toLowerCase().includes(\"too many requests\");\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 === \"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\tif (oauthError?.error === \"slow_down\" || isRateLimitedError(errorPayload)) {\n\t\t\tpollIntervalMs += 5e3;\n\t\t\tawait sleep(pollIntervalMs);\n\t\t\tcontinue;\n\t\t}\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 type { CredentialStorage } from \"./credential-storage\";\nimport { getAccessToken } from \"./credentials\";\n\nconst caches = new Map<string, JwtTokenCache>();\n\nfunction cacheKey(platformUrl: string, storage: CredentialStorage): string {\n return `${storage}:${platformUrl}`;\n}\n\nexport function clearCliJwtCache(): void {\n caches.clear();\n}\n\nexport async function getCliJwt(\n platformUrl: string,\n force = false,\n storage: CredentialStorage = \"keychain\",\n): Promise<string | undefined> {\n if (!getAccessToken(platformUrl, { storage })) {\n caches.delete(cacheKey(platformUrl, storage));\n return undefined;\n }\n\n const key = cacheKey(platformUrl, storage);\n let cache = caches.get(key);\n if (!cache) {\n cache = createJwtTokenCache(async () => {\n const sessionToken = getAccessToken(platformUrl, { storage });\n return sessionToken ? getJwtWithBearer(platformUrl, sessionToken) : null;\n });\n caches.set(key, 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 { getCredentialStorage, getPlatformUrl, type CliConfig } from \"../config\";\n\n/** Returns API key, JWT bearer, or none auth for platform requests. */\nexport function resolveCliAuth(config: Conf<CliConfig>): AuthStrategy {\n const apiKey = process.env.KEYSTROKE_API_KEY?.trim();\n if (apiKey) {\n return { type: \"apiKey\", getKey: () => apiKey };\n }\n\n const platformUrl = getPlatformUrl(config);\n const storage = getCredentialStorage(config);\n if (!getAccessToken(platformUrl, { storage })) {\n return { type: \"none\" };\n }\n\n return {\n type: \"bearer\",\n getToken: () => getCliJwt(platformUrl, false, storage),\n };\n}\n","import type { ApiTargetOptions } from \"./resolve-api-target\";\n\nlet targetOptions: ApiTargetOptions = {};\nlet resolvedOrganizationId: string | undefined;\n\nexport function setCliTargetOptions(options: ApiTargetOptions): void {\n targetOptions = options;\n resolvedOrganizationId = undefined;\n}\n\nexport function getCliTargetOptions(): ApiTargetOptions {\n return targetOptions;\n}\n\nexport function setResolvedOrganizationId(organizationId: string | undefined): void {\n resolvedOrganizationId = organizationId;\n}\n\nexport function getResolvedOrganizationId(): string | undefined {\n return resolvedOrganizationId;\n}\n","import { createKeystrokeClient, type KeystrokeClient } from \"@keystrokehq/sdk\";\nimport { CLIENT_CHANNEL_HEADER } from \"@keystrokehq/shared\";\nimport type Conf from \"conf\";\nimport { resolveCliAuth } from \"./auth/resolve-cli-auth\";\nimport type { CliConfig } from \"./config\";\nimport { getResolvedOrganizationId } from \"./target-options\";\n\nexport function createCliClient(\n config: Conf<CliConfig>,\n options: { baseUrl: string; platform?: boolean; organizationId?: string },\n): KeystrokeClient {\n return createKeystrokeClient({\n baseUrl: options.baseUrl,\n auth: resolveCliAuth(config),\n getActiveOrganizationId: options.platform\n ? () => options.organizationId ?? getResolvedOrganizationId() ?? null\n : undefined,\n ky: {\n headers: {\n [CLIENT_CHANNEL_HEADER]: \"cli\",\n },\n },\n });\n}\n","import ky, { isHTTPError } from \"ky\";\nimport { ACTIVE_ORG_HEADER, AcceptOrganizationInvitationResponseSchema, ActiveOrganizationResponseSchema, AgentSessionDetailResponseSchema, AgentSessionListResponseSchema, AgentSummaryDetailResponseSchema, AgentSummaryListResponseSchema, AgentTriggerSummaryListResponseSchema, AppSlugAvailabilityResponseSchema, AutoTopupSummarySchema, BillingActivityResponseSchema, BillingInvoiceUrlResponseSchema, BillingRedirectResponseSchema, BillingSummaryResponseSchema, BillingUsageResponseSchema, BindChannelBodySchema, CatalogActionDetailResponseSchema, CatalogActionsPageResponseSchema, CatalogAppDetailResponseSchema, CatalogAppsPageResponseSchema, ChannelAccountListResponseSchema, ChannelConnectionListResponseSchema, ChannelConnectionSchema, ChannelDirectoryListResponseSchema, CompleteProjectArtifactResponseSchema, ConfirmCheckoutRequestSchema, ConfirmCheckoutResponseSchema, ConnectAuthorizeUrlResponseSchema, ConnectManagedServiceCredentialRequestSchema, CreateApiKeyRequestSchema, CreateApiKeyResponseSchema, CreateBillingPortalRequestSchema, CreateCredentialsRequestSchema, CreateCredentialsResponseSchema, CreateCreditsCheckoutRequestSchema, CreateCustomAppRequestSchema, CreateCustomAppResponseSchema, CreateOrganizationRequestSchema, CreateOrganizationResponseSchema, CreateProjectArtifactResponseSchema, CreateProjectRequestSchema, CreateProjectResponseSchema, CreateSubscriptionCheckoutRequestSchema, DEFAULT_ORGANIZATION_SIDEBAR_BRANDING, DEFAULT_USER_PREFERENCES, DeclineOrganizationInvitationResponseSchema, DownloadActiveProjectArtifactResponseSchema, DownloadActiveProjectSourceResponseSchema, DuplicateCredentialRequestSchema, DuplicateCredentialsResponseSchema, ExecuteKeystrokeToolRequestSchema, FinalizeCustomAppLogoRequestSchema, FinalizeCustomAppLogoResponseSchema, GatewayAttachmentRecordSchema, GetAppCatalogEntryResponseSchema, GetCredentialResponseSchema, GetCustomAppResponseSchema, GetTemplateResponseSchema, GraphqlDiscoverResponseSchema, HealthResponseSchema, HistoryRunCancelResponseSchema, HistoryRunDetailResponseSchema, HistoryRunListQuerySchema, HistoryRunListResponseSchema, InviteOrganizationMembersRequestSchema, InviteOrganizationMembersResponseSchema, InviteProjectMembersRequestSchema, InviteProjectMembersResponseSchema, ListAgentMemoryFilesResponseSchema, ListAgentWorkspaceFilesResponseSchema, ListApiKeysResponseSchema, ListAppsResponseSchema, ListChannelPlatformsResponseSchema, ListCredentialsPageQuerySchema, ListCredentialsPageResponseSchema, ListManagedServiceCredentialsResponseSchema, ListOrganizationInvitationsResponseSchema, ListOrganizationMembersPageQuerySchema, ListOrganizationMembersPageResponseSchema, ListOrganizationsResponseSchema, ListProjectDeploymentsResponseSchema, ListProjectFilesResponseSchema, ListProjectMembersResponseSchema, ListProjectMetricsResponseSchema, ListProjectsResponseSchema, ListTemplatesResponseSchema, ManagedServiceCredentialSchema, McpDiscoverResponseSchema, OpenApiDiscoverResponseSchema, OrganizationSidebarBrandingPatchSchema, OrganizationSidebarBrandingSchema, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, PresignChatAttachmentRequestSchema, PresignChatAttachmentResponseSchema, PresignCustomAppLogoRequestSchema, PresignCustomAppLogoResponseSchema, PresignOrgLogoRequestSchema, PresignOrgLogoResponseSchema, PresignProjectSourceRequestSchema, PresignProjectSourceResponseSchema, PresignUserAvatarRequestSchema, PresignUserAvatarResponseSchema, ProjectReachabilityResponseSchema, ProjectResponseSchema, ProjectSettingsResponseSchema, ProjectSlugAvailabilityResponseSchema, PromptInputSchema, PublicFormMetadataSchema, PublicFormSubmitBodySchema, PublicFormSubmitResponseSchema, PublishedFormListResponseSchema, PublishedFormSchema, QueuedAgentPromptResponseSchema, RecentResourceListResponseSchema, SkillSummaryDetailResponseSchema, SkillSummaryListResponseSchema, SlugAvailabilityResponseSchema, StartKeystrokeConnectionInputSchema, StartKeystrokeConnectionResultSchema, StartMcpOAuthConnectionInputSchema, StartMcpOAuthConnectionResultSchema, StartOAuthConnectionInputSchema, StartOAuthConnectionResultSchema, SubmitAgentFeedbackRequestSchema, SubmitMarketingContactRequestSchema, SubmitTeamRequestRequestSchema, TemplateFilesResponseSchema, TriggerInvokeInputsSchema, TriggerInvokeResponseSchema, UpdateAutoTopupRequestSchema, UpdateChannelBindingBodySchema, UpdateCredentialRequestSchema, UpdateManagedServiceCredentialRequestSchema, UpdateOrganizationMemberRequestSchema, UpdateOrganizationMemberResponseSchema, UpdateOrganizationRequestSchema, UpdateProjectMemberRequestSchema, UpdateProjectMemberResponseSchema, UpdateProjectRequestSchema, UpdateProjectSettingsRequestSchema, UploadProjectSourceManifestRequestSchema, UploadProjectSourceResponseSchema, UpsertGatewayAttachmentBodySchema, UserAvatarPatchSchema, UserAvatarSchema, UserPreferencesPatchSchema, UserPreferencesSchema, WorkflowCanvasCredentialBindingsSchema, WorkflowCanvasRunSchema, WorkflowCanvasSchema, WorkflowFormResponseSchema, WorkflowFormUpsertBodySchema, WorkflowRunInputsPutBodySchema, WorkflowRunInputsSchema, WorkflowRunResponseSchema, WorkflowSummaryDetailResponseSchema, WorkflowSummaryListResponseSchema, WorkspaceTriggerDetailSchema, WorkspaceTriggerFileSchema, WorkspaceTriggerListResponseSchema, WorkspaceTriggerOverviewSchema, WorkspaceTriggerRunListResponseSchema, WorkspaceWorkflowOverviewSchema, mergeOrganizationSidebarBranding, mergeUserPreferences, normalizeOrganizationSidebarBranding, normalizeUserPreferences, parseChatAttachmentServePath, parseErrorResponse } from \"@keystrokehq/shared\";\n//#region src/platform/active-organization.ts\nconst STORAGE_KEY = \"keystroke-active-org-id\";\nfunction browserLocalStorage() {\n\tif (typeof localStorage === \"undefined\" || typeof localStorage.getItem !== \"function\") return null;\n\treturn localStorage;\n}\nfunction readActiveOrganizationId() {\n\treturn browserLocalStorage()?.getItem(STORAGE_KEY) ?? null;\n}\nfunction writeActiveOrganizationId(organizationId) {\n\tconst storage = browserLocalStorage();\n\tif (!storage) return;\n\tif (organizationId) {\n\t\tstorage.setItem(STORAGE_KEY, organizationId);\n\t\treturn;\n\t}\n\tstorage.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 = parseErrorResponse(body);\n\tconst message = parsed ? parsed.message ?? parsed.error : `Request failed with status ${status}`;\n\tconst code = parsed?.code;\n\treturn new PlatformError(message, status, body, code);\n}\n//#endregion\n//#region src/platform/resources/artifacts.ts\nfunction createArtifactsResource(http) {\n\treturn {\n\t\tasync create(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts`).json();\n\t\t\t\treturn CreateProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync complete(projectId, artifactId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/complete`).json();\n\t\t\t\treturn CompleteProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Ask which source blobs are missing and get presigned PUTs for them. */\n\t\tasync presignSource(projectId, artifactId, blobs) {\n\t\t\tconst body = PresignProjectSourceRequestSchema.parse({ blobs });\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/source/presign`, { json: body }).json();\n\t\t\t\treturn PresignProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Finalize the deploy's source manifest (path -> hash tree + resource refs). */\n\t\tasync uploadManifest(projectId, artifactId, manifest) {\n\t\t\tconst body = UploadProjectSourceManifestRequestSchema.parse(manifest);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/source/manifest`, { json: body }).json();\n\t\t\t\treturn UploadProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Presigned GET for the project's currently active deploy artifact tarball. */\n\t\tasync downloadActive(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/active/download`).json();\n\t\t\t\treturn DownloadActiveProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Download all source files from the project's active deploy snapshot. */\n\t\tasync downloadActiveSource(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/active/source`).json();\n\t\t\t\treturn DownloadActiveProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Download the active artifact tarball bytes via the presigned URL. */\n\t\tasync downloadActiveArchive(projectId) {\n\t\t\tconst { artifactId, downloadUrl } = await this.downloadActive(projectId);\n\t\t\tconst response = await fetch(downloadUrl);\n\t\t\tif (!response.ok) throw new Error(`Active artifact download failed (${response.status})`);\n\t\t\tconst bytes = await response.arrayBuffer();\n\t\t\treturn {\n\t\t\t\tartifactId,\n\t\t\t\tbuffer: Buffer.from(bytes)\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/deployments.ts\nfunction createDeploymentsResource(http) {\n\treturn { async listForProject(projectId) {\n\t\ttry {\n\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/deployments`).json();\n\t\t\treturn ListProjectDeploymentsResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/gateway-attachments.ts\nfunction createGatewayAttachmentsResource(http) {\n\tconst projectPrefix = (projectId) => `/api/projects/${encodeURIComponent(projectId)}/gateways/slack/attachments`;\n\treturn { async upsertSlackAttachment(projectId, channelId, body) {\n\t\tconst payload = UpsertGatewayAttachmentBodySchema.parse(body);\n\t\ttry {\n\t\t\tconst data = await http.put(`${projectPrefix(projectId)}/${encodeURIComponent(channelId)}`, { json: payload }).json();\n\t\t\treturn GatewayAttachmentRecordSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/project-files.ts\nfunction createProjectFilesResource(http) {\n\treturn {\n\t\t/** File tree (no contents) for a project's active deploy; empty before first deploy. */\n\t\tasync listForProject(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/files`).json();\n\t\t\t\treturn ListProjectFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Lazily fetch a single file's contents by path for a specific deploy. */\n\t\tasync getContent(projectId, artifactId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/health.ts\nfunction createHealthResource(http) {\n\treturn { async check() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/health\").json();\n\t\t\treturn HealthResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/organizations.ts\nfunction createOrganizationsResource(http, options = {}) {\n\tasync function get(organizationId) {\n\t\ttry {\n\t\t\tconst data = await http.get(`/api/organizations/${organizationId}`).json();\n\t\t\tconst organization = ActiveOrganizationResponseSchema.parse(data);\n\t\t\tif (!organization) throw new Error(\"Organization was not returned\");\n\t\t\treturn organization;\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\tasync function update(input) {\n\t\tconst body = UpdateOrganizationRequestSchema.parse(input);\n\t\tconst organizationId = options.getActiveOrganizationId?.();\n\t\tif (!organizationId) throw new Error(\"No active organization\");\n\t\ttry {\n\t\t\tconst data = await http.patch(`/api/organizations/${organizationId}`, { json: body }).json();\n\t\t\tconst organization = ActiveOrganizationResponseSchema.parse(data);\n\t\t\tif (!organization) throw new Error(\"Active organization was not returned\");\n\t\t\treturn organization;\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\treturn {\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/organizations\").json();\n\t\t\t\treturn ListOrganizationsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tget,\n\t\tasync getActive() {\n\t\t\tconst organizationId = options.getActiveOrganizationId?.();\n\t\t\tif (!organizationId) return null;\n\t\t\ttry {\n\t\t\t\treturn await get(organizationId);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof PlatformError && (error.status === 401 || error.status === 403)) return null;\n\t\t\t\tif (isHTTPError(error) && (error.response.status === 401 || error.response.status === 403)) return null;\n\t\t\t\tthrow error instanceof PlatformError ? error : await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync setActive(input) {\n\t\t\tconst organizationId = input.organizationId.trim();\n\t\t\tif (!organizationId) throw new Error(\"Organization id is required\");\n\t\t\tconst membership = await get(organizationId);\n\t\t\toptions.onActiveOrganizationChange?.(organizationId);\n\t\t\treturn membership;\n\t\t},\n\t\tasync clearActive() {\n\t\t\toptions.onActiveOrganizationChange?.(null);\n\t\t},\n\t\tupdate,\n\t\tasync create(input) {\n\t\t\tconst body = CreateOrganizationRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/organizations\", { json: body }).json();\n\t\t\t\treturn CreateOrganizationResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkSlug(slug, slugOptions = {}) {\n\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\tif (slugOptions.excludeOrganizationId) searchParams.set(\"excludeOrganizationId\", slugOptions.excludeOrganizationId);\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/organizations/slug-available?${searchParams}`).json();\n\t\t\t\treturn SlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/agents.ts\nfunction listSearchParams(options) {\n\tconst params = {};\n\tconst projectId = options?.projectId?.trim();\n\tif (projectId) params.projectId = projectId;\n\tif (options?.admin) params.admin = \"true\";\n\treturn Object.keys(params).length > 0 ? params : void 0;\n}\nfunction createAgentsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/agents\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn AgentSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/agents/${encodeURIComponent(agentId)}`).json();\n\t\t\t\treturn AgentSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync cancelSession(sessionId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`api/agents/sessions/${encodeURIComponent(sessionId)}/cancel`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\tconst data = await response.json();\n\t\t\t\treturn HistoryRunCancelResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Prompting goes through the project-scoped runtime route\n\t\t* (`POST /api/projects/:projectId/agents/:slug`) so it reuses the runtime's\n\t\t* `requireProject` + `requireProjectMembership` auth — a user must belong to\n\t\t* the project to prompt its agents.\n\t\t*/\n\t\tasync prompt(projectId, agentSlug, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PromptInputSchema.parse(input);\n\t\t\t\tconst data = await (await http.post(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}`, { json: payload })).json();\n\t\t\t\treturn QueuedAgentPromptResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync presignAttachment(projectId, agentSlug, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PresignChatAttachmentRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/attachments/presign`, { json: payload }).json();\n\t\t\t\treturn PresignChatAttachmentResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Session detail; defaults to the lightweight record-only response. */\n\t\tasync getSession(projectId, agentSlug, sessionId, options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/sessions/${encodeURIComponent(sessionId)}`, { searchParams: { include: options?.include ?? \"none\" } }).json();\n\t\t\t\treturn AgentSessionDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listSessions(projectId, agentSlug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/sessions`).json();\n\t\t\t\treturn AgentSessionListResponseSchema.parse(data).items;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listTriggers(projectId, agentSlug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/triggers`).json();\n\t\t\t\treturn AgentTriggerSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Deletes an agent-owned ephemeral trigger; throws if it is not deletable (404). */\n\t\tasync deleteTrigger(projectId, agentSlug, triggerId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/triggers/${encodeURIComponent(triggerId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listMemoryFiles(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/agents/${encodeURIComponent(agentId)}/memory/files`).json();\n\t\t\t\treturn ListAgentMemoryFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getMemoryFileContent(agentId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`api/agents/${encodeURIComponent(agentId)}/memory/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Persistent agent workspace files under `/workspace/agent`. */\n\t\tasync listWorkspaceFiles(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/agents/${encodeURIComponent(agentId)}/workspace/files`).json();\n\t\t\t\treturn ListAgentWorkspaceFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Content for a path from {@link listWorkspaceFiles}. */\n\t\tasync getWorkspaceFileContent(agentId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`api/agents/${encodeURIComponent(agentId)}/workspace/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/projects.ts\nfunction createProjectsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/projects\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn ListProjectsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\tconst body = CreateProjectRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/projects\", { json: body }).json();\n\t\t\t\treturn CreateProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}`).json();\n\t\t\t\treturn ProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync update(projectId, patch) {\n\t\t\tconst body = UpdateProjectRequestSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/projects/${encodeURIComponent(projectId)}`, { json: body }).json();\n\t\t\t\treturn ProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync delete(projectId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/projects/${encodeURIComponent(projectId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkReachability(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/reachability`, { timeout: PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS }).json();\n\t\t\t\treturn ProjectReachabilityResponseSchema.parse(data).reachable;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkSlug(slug, options = {}) {\n\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\tif (options.excludeProjectId) searchParams.set(\"excludeProjectId\", options.excludeProjectId);\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/slug-available?${searchParams}`).json();\n\t\t\t\treturn ProjectSlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\nfunction createProjectMetricsResource(http) {\n\treturn { async list(options) {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/api/projects/metrics\", { searchParams: listSearchParams(options) }).json();\n\t\t\treturn ListProjectMetricsResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/workflows.ts\n/**\n* `platform.workflows` resource.\n*\n* Every method calls a real platform route: list/detail, file, run history,\n* run-inputs, canvas, overview, the canvas run overlay (`getCanvasRun`), the\n* credential overlay (`getCanvasCredentialBindings`), and manual `run`.\n*/\nfunction createWorkflowsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/workflows\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn WorkflowSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}`).json();\n\t\t\t\treturn WorkflowSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* LLM-generated overview (summary + guided-tour phases), content-hash cached\n\t\t* and served stale-while-revalidating; poll while `status` is \"generating\".\n\t\t*/\n\t\tasync getOverview(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/overview`).json();\n\t\t\t\treturn WorkspaceWorkflowOverviewSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* The workflow source file from the active deploy source snapshot. Takes the\n\t\t* workflow's `projectId`/`slug`/`sourcePath` (already on `WorkflowSummary`) so\n\t\t* it resolves the file in two calls (project files + content) instead of\n\t\t* re-fetching the workflow detail the caller already holds.\n\t\t*/\n\t\tasync getFile(input) {\n\t\t\ttry {\n\t\t\t\tconst filesData = await http.get(`api/projects/${encodeURIComponent(input.projectId)}/files`).json();\n\t\t\t\tconst files = ListProjectFilesResponseSchema.parse(filesData);\n\t\t\t\tif (!files.artifactId) return null;\n\t\t\t\tconst path = files.resources.workflows.find((entry) => entry.slug === input.slug)?.path ?? input.sourcePath;\n\t\t\t\tif (!path) return null;\n\t\t\t\treturn {\n\t\t\t\t\tpath,\n\t\t\t\t\tcontents: await http.get(`api/projects/${encodeURIComponent(input.projectId)}/artifacts/${encodeURIComponent(files.artifactId)}/files/content`, { searchParams: { path } }).text()\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Read-only canvas graph (deterministic AST skeleton + manifest trigger\n\t\t* nodes) plus the gated code-block annotation layer. Returns null when the\n\t\t* active deploy has no flow graph for the workflow (404).\n\t\t*/\n\t\tasync getCanvas(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowCanvasSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Live credential overlay: canvas node id → how each of its step's credential\n\t\t* requirements currently resolves (bound instance + policy). Resolved per view\n\t\t* (not cached) since credential state changes without a redeploy.\n\t\t*/\n\t\tasync getCanvasCredentialBindings(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas/credentials`).json();\n\t\t\t\treturn WorkflowCanvasCredentialBindingsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Per-node run state for a finished/live run, projected onto the canvas skeleton. */\n\t\tasync getCanvasRun(workflowId, runId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas/runs/${encodeURIComponent(runId)}`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowCanvasRunSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listCanvasRuns(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/runs`).json();\n\t\t\t\treturn HistoryRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRunInputs(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/run-inputs`).json();\n\t\t\t\treturn WorkflowRunInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync saveRunInputs(workflowId, values) {\n\t\t\ttry {\n\t\t\t\tconst body = WorkflowRunInputsPutBodySchema.parse(values);\n\t\t\t\tconst data = await http.put(`api/workflows/${encodeURIComponent(workflowId)}/run-inputs`, { json: body }).json();\n\t\t\t\treturn WorkflowRunInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Manually start a workflow run from the dashboard. Validates the input\n\t\t* against the active deploy's request schema, enqueues the run, and returns\n\t\t* its id (surface the new run by refetching {@link listCanvasRuns}).\n\t\t*/\n\t\tasync run(workflowId, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/run`, { json: input }).json();\n\t\t\t\treturn WorkflowRunResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Presign an upload for a file attached to a manual workflow run. */\n\t\tasync presignAttachment(workflowId, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PresignChatAttachmentRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/attachments/presign`, { json: payload }).json();\n\t\t\t\treturn PresignChatAttachmentResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync 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/workflow-forms.ts\nfunction createWorkflowFormsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/workflows/forms\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn PublishedFormListResponseSchema.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 response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/form`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowFormResponseSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync publish(workflowId, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst body = WorkflowFormUpsertBodySchema.parse(input);\n\t\t\t\tconst data = await http.put(`api/workflows/${encodeURIComponent(workflowId)}/form`, { json: body }).json();\n\t\t\t\treturn PublishedFormSchema.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 unpublish(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.delete(`api/workflows/${encodeURIComponent(workflowId)}/form`).json();\n\t\t\t\treturn PublishedFormSchema.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 rotate(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/form/rotate`).json();\n\t\t\t\treturn PublishedFormSchema.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 getPublic(token) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/public/forms/${encodeURIComponent(token)}`).json();\n\t\t\t\treturn PublicFormMetadataSchema.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 submitPublic(token, input) {\n\t\t\ttry {\n\t\t\t\tconst body = PublicFormSubmitBodySchema.parse(input);\n\t\t\t\tconst data = await http.post(`api/public/forms/${encodeURIComponent(token)}/submit`, { json: body }).json();\n\t\t\t\treturn PublicFormSubmitResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/skills.ts\nfunction createSkillsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/skills\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn SkillSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(skillId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/skills/${encodeURIComponent(skillId)}`).json();\n\t\t\t\treturn SkillSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/triggers.ts\nfunction listRunsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.triggerType) params.triggerType = query.triggerType;\n\tif (query.outcome) params.outcome = query.outcome;\n\treturn params;\n}\nfunction createTriggersResource(http) {\n\treturn {\n\t\t/** Triggers across the projects the caller can access in the active org. */\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/triggers\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn WorkspaceTriggerListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}`).json();\n\t\t\t\treturn WorkspaceTriggerDetailSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tconst platformError = await toPlatformError(error);\n\t\t\t\tif (platformError.status === 404) return null;\n\t\t\t\tthrow platformError;\n\t\t\t}\n\t\t},\n\t\t/** LLM-generated markdown overview of the trigger (generated lazily on the worker). */\n\t\tasync getOverview(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/overview`).json();\n\t\t\t\treturn WorkspaceTriggerOverviewSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** The trigger source file. */\n\t\tasync getFile(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/file`).json();\n\t\t\t\treturn WorkspaceTriggerFileSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tconst platformError = await toPlatformError(error);\n\t\t\t\tif (platformError.status === 404) return null;\n\t\t\t\tthrow platformError;\n\t\t\t}\n\t\t},\n\t\t/** Every fire of the trigger (poll/webhook/cron), dispatched or not. */\n\t\tasync listRuns(triggerId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/runs`, { searchParams: listRunsSearchParams(query) }).json();\n\t\t\t\treturn WorkspaceTriggerRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateAttachment(triggerId, attachmentId, body) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`api/triggers/${encodeURIComponent(triggerId)}/attachments/${encodeURIComponent(attachmentId)}`, { json: body }).json();\n\t\t\t\treturn WorkspaceTriggerDetailSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Form metadata for the dashboard invoke popover (webhook schemas / cron static payload). */\n\t\tasync getInvokeInputs(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/invoke-inputs`).json();\n\t\t\t\treturn TriggerInvokeInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Manually invoke a trigger. Webhook invokes validate `input` against stored attachment\n\t\t* schemas; cron/poll reject `input` and fire with their normal payload path.\n\t\t*/\n\t\tasync invoke(triggerId, body = {}) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`api/triggers/${encodeURIComponent(triggerId)}/invoke`, { json: body }).json();\n\t\t\t\treturn TriggerInvokeResponseSchema.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/agent-feedback.ts\nfunction createAgentFeedbackResource(http) {\n\treturn { async submit(input) {\n\t\tconst body = SubmitAgentFeedbackRequestSchema.parse(input);\n\t\ttry {\n\t\t\tawait http.post(\"/api/agent-feedback\", { 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/templates.ts\nfunction createTemplatesResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = new URLSearchParams();\n\t\t\t\tif (options?.kind) searchParams.set(\"kind\", options.kind);\n\t\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n\t\t\t\tconst data = await http.get(`/api/templates${suffix}`).json();\n\t\t\t\treturn ListTemplatesResponseSchema.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/templates/${encodeURIComponent(slug)}`).json();\n\t\t\t\treturn GetTemplateResponseSchema.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 files(slug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/templates/${encodeURIComponent(slug)}/files`).json();\n\t\t\t\treturn TemplateFilesResponseSchema.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/marketing-contact.ts\nfunction createMarketingContactResource(http) {\n\treturn { async submit(input) {\n\t\tconst body = SubmitMarketingContactRequestSchema.parse(input);\n\t\ttry {\n\t\t\tawait http.post(\"/api/public/contact\", { json: body }).json();\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/recents.ts\nfunction createRecentsResource(http) {\n\treturn { \n\t/** Always the viewer's own recents, scoped to their project memberships. */\nasync list() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/api/recents\").json();\n\t\t\treturn RecentResourceListResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/credentials.ts\nfunction buildOAuthAuthorizeSearchParams(input) {\n\tconst params = {};\n\tconst scopes = input.scopes ?? [];\n\tif (scopes.length > 0) params.scopes = scopes.join(\",\");\n\tconst projectIds = input.projects ?? [];\n\tif (projectIds.length > 0) params.projects = projectIds.join(\",\");\n\tif (input.createOrganizationCredential) params.org = \"true\";\n\tif (input.createUserProvidedCredential) params.user = \"true\";\n\tconst label = input.label?.trim();\n\tif (label) params.label = label;\n\tconst credentialInstanceId = input.credentialInstanceId?.trim();\n\tif (credentialInstanceId) params.credentialInstanceId = credentialInstanceId;\n\treturn params;\n}\nfunction createCredentialsResource(http) {\n\treturn {\n\t\tasync list(query) {\n\t\t\tconst params = ListCredentialsPageQuerySchema.parse(query ?? {});\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/credentials\", { searchParams: {\n\t\t\t\t\t...params.limit !== void 0 ? { limit: String(params.limit) } : {},\n\t\t\t\t\t...params.cursor ? { cursor: params.cursor } : {}\n\t\t\t\t} }).json();\n\t\t\t\treturn ListCredentialsPageResponseSchema.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 duplicate(credentialId, input) {\n\t\t\tconst body = DuplicateCredentialRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/credentials/${encodeURIComponent(credentialId)}/duplicate`, { json: body }).json();\n\t\t\t\treturn DuplicateCredentialsResponseSchema.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\t/** Full catalog entry (scopes + credential template) for connect UI. */\n\t\tasync getCatalogEntry(slug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/apps/${encodeURIComponent(slug)}/catalog`).json();\n\t\t\t\treturn GetAppCatalogEntryResponseSchema.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 executeTool(request) {\n\t\t\ttry {\n\t\t\t\tconst body = ExecuteKeystrokeToolRequestSchema.parse(request);\n\t\t\t\tconst data = await http.post(\"/mcp/execute\", { json: body }).json();\n\t\t\t\tif (typeof data !== \"object\" || data === null || !(\"ok\" in data) || data.ok !== true || !(\"result\" in data)) throw new PlatformError(\"Invalid MCP execute response\", 502, data);\n\t\t\t\treturn 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) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\t\tconst data = await http.get(`/api/apps/slug-available?${searchParams}`).json();\n\t\t\t\treturn AppSlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\ttry {\n\t\t\t\tconst body = CreateCustomAppRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(\"/api/apps\", { json: body }).json();\n\t\t\t\treturn CreateCustomAppResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(slug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/apps/${encodeURIComponent(slug)}`).json();\n\t\t\t\treturn GetCustomAppResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverMcp(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover\", { json: input }).json();\n\t\t\t\treturn McpDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverOpenApi(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover-openapi\", { json: input }).json();\n\t\t\t\treturn OpenApiDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverGraphql(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover-graphql\", { json: input }).json();\n\t\t\t\treturn GraphqlDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync startMcpOAuthConnection(slug, input) {\n\t\t\ttry {\n\t\t\t\tconst body = StartMcpOAuthConnectionInputSchema.parse({\n\t\t\t\t\t...input,\n\t\t\t\t\tappSlug: slug\n\t\t\t\t});\n\t\t\t\tconst data = await http.post(`/api/apps/${encodeURIComponent(slug)}/mcp/oauth/connections`, { json: body }).json();\n\t\t\t\treturn StartMcpOAuthConnectionResultSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/members.ts\nfunction createMembersResource(http) {\n\treturn {\n\t\tasync listOrganizationMembers(query) {\n\t\t\tconst params = ListOrganizationMembersPageQuerySchema.parse(query ?? {});\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/members\", { searchParams: {\n\t\t\t\t\t...params.limit !== void 0 ? { limit: String(params.limit) } : {},\n\t\t\t\t\t...params.cursor ? { cursor: params.cursor } : {}\n\t\t\t\t} }).json();\n\t\t\t\treturn ListOrganizationMembersPageResponseSchema.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/managed-service-credentials.ts\nfunction createManagedServiceCredentialsResource(http) {\n\treturn {\n\t\tasync list(kind) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = kind ? { kind } : void 0;\n\t\t\t\tconst data = await http.get(\"/api/managed-service-credentials\", { searchParams }).json();\n\t\t\t\treturn ListManagedServiceCredentialsResponseSchema.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 connect(input) {\n\t\t\tconst body = ConnectManagedServiceCredentialRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/managed-service-credentials\", { json: body }).json();\n\t\t\t\treturn ManagedServiceCredentialSchema.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(id, input) {\n\t\t\tconst body = UpdateManagedServiceCredentialRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/managed-service-credentials/${encodeURIComponent(id)}`, { json: body }).json();\n\t\t\t\treturn ManagedServiceCredentialSchema.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 disconnect(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/managed-service-credentials/${encodeURIComponent(id)}`);\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/billing.ts\nfunction createBillingResource(http) {\n\treturn {\n\t\tasync summary() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/billing\").json();\n\t\t\t\treturn BillingSummaryResponseSchema.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 usage() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/billing/usage\").json();\n\t\t\t\treturn BillingUsageResponseSchema.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 activity() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/billing/activity\").json();\n\t\t\t\treturn BillingActivityResponseSchema.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/** Fresh Stripe-hosted links for one invoice — resolve on click, don't cache. */\n\t\tasync invoiceUrl(invoiceId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/billing/invoice-url/${encodeURIComponent(invoiceId)}`).json();\n\t\t\t\treturn BillingInvoiceUrlResponseSchema.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 createSubscriptionCheckout(input = {}) {\n\t\t\tconst body = CreateSubscriptionCheckoutRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/checkout/subscription\", { json: body }).json();\n\t\t\t\treturn BillingRedirectResponseSchema.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 createCreditsCheckout(input) {\n\t\t\tconst body = CreateCreditsCheckoutRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/checkout/credits\", { json: body }).json();\n\t\t\t\treturn BillingRedirectResponseSchema.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 confirmCheckout(input) {\n\t\t\tconst body = ConfirmCheckoutRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/checkout/confirm\", { json: body }).json();\n\t\t\t\treturn ConfirmCheckoutResponseSchema.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 createPortalSession(input = {}) {\n\t\t\tconst body = CreateBillingPortalRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/portal\", { json: body }).json();\n\t\t\t\treturn BillingRedirectResponseSchema.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 updateAutoTopup(input) {\n\t\t\tconst body = UpdateAutoTopupRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(\"/api/billing/auto-topup\", { json: body }).json();\n\t\t\t\treturn AutoTopupSummarySchema.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/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/custom-app-logo.ts\nfunction createCustomAppLogoResource(http) {\n\tasync function presignUpload(contentType) {\n\t\tconst body = PresignCustomAppLogoRequestSchema.parse({ contentType });\n\t\tconst data = await http.post(\"/api/apps/logo/presign\", { json: body }).json();\n\t\treturn PresignCustomAppLogoResponseSchema.parse(data);\n\t}\n\tasync function finalize(storageKey) {\n\t\tconst body = FinalizeCustomAppLogoRequestSchema.parse({ storageKey });\n\t\ttry {\n\t\t\tconst data = await http.post(\"/api/apps/logo\", { json: body }).json();\n\t\t\treturn FinalizeCustomAppLogoResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\treturn { \n\t/** Upload an image to keystroke-assets and return its public logo URL. */\nasync upload(file) {\n\t\treturn presignPutAndFinalize({\n\t\t\tfile,\n\t\t\tpresign: presignUpload,\n\t\t\tfinalize,\n\t\t\tuploadFailedMessage: \"Logo upload failed\",\n\t\t\ttoPlatformError\n\t\t});\n\t} };\n}\n//#endregion\n//#region src/platform/resources/channels.ts\nfunction createChannelsResource(http) {\n\tconst projectPrefix = (projectId) => `/api/projects/${encodeURIComponent(projectId)}`;\n\treturn {\n\t\tasync listPlatforms() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/channel-platforms\").json();\n\t\t\t\treturn ListChannelPlatformsResponseSchema.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 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/agent-chat-transport.ts\n/**\n* ChatTransport for Keystroke queued agent prompts:\n* - sendMessages → POST prompt (202) then GET resumable SSE\n* - reconnectToStream → GET run/session stream (`204` when idle)\n*\n* Modeled on AI SDK WorkflowChatTransport (`x-workflow-run-id`, `startIndex`).\n*/\nfunction createAgentChatTransport(options) {\n\tconst base = options.baseUrl.replace(/\\/+$/, \"\");\n\tconst prefix = base === \"\" ? \"\" : `${base}/`;\n\tconst fetchImpl = options.fetch ?? globalThis.fetch;\n\tlet reconnectActive = false;\n\tasync function authHeaders(accept) {\n\t\tconst headers = { Accept: accept };\n\t\tconst token = await options.getToken();\n\t\tif (token) headers.Authorization = `Bearer ${token}`;\n\t\tconst orgId = options.getActiveOrganizationId?.();\n\t\tif (orgId) headers[ACTIVE_ORG_HEADER] = orgId;\n\t\treturn headers;\n\t}\n\tfunction promptUrl() {\n\t\treturn `${prefix}api/projects/${encodeURIComponent(options.projectId)}/agents/${encodeURIComponent(options.agentSlug)}`;\n\t}\n\tfunction runStreamUrl(runId, startIndex) {\n\t\treturn `${prefix}api/projects/${encodeURIComponent(options.projectId)}/runs/${encodeURIComponent(runId)}/stream?startIndex=${encodeURIComponent(String(startIndex))}`;\n\t}\n\tfunction sessionStreamUrl(sessionId, startIndex) {\n\t\treturn `${prefix}api/projects/${encodeURIComponent(options.projectId)}/sessions/${encodeURIComponent(sessionId)}/stream?startIndex=${encodeURIComponent(String(startIndex))}`;\n\t}\n\tasync function openStream(url, signal) {\n\t\tconst response = await fetchImpl(url, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: await authHeaders(\"text/event-stream\"),\n\t\t\tcredentials: \"omit\",\n\t\t\tsignal\n\t\t});\n\t\tif (response.status === 204) {\n\t\t\toptions.setRunId?.(null);\n\t\t\treturn null;\n\t\t}\n\t\tif (!response.ok) throw new Error(await response.text() || \"Failed to open agent stream\");\n\t\tif (!response.body) throw new Error(\"The agent stream response body is empty\");\n\t\tconst runId = response.headers.get(\"x-workflow-run-id\");\n\t\tif (runId) options.setRunId?.(runId);\n\t\treturn parseUiMessageSse(response.body);\n\t}\n\tfunction trackReconnect(stream) {\n\t\tconst reader = stream.getReader();\n\t\tlet released = false;\n\t\tconst release = () => {\n\t\t\tif (!released) {\n\t\t\t\treleased = true;\n\t\t\t\treconnectActive = false;\n\t\t\t}\n\t\t};\n\t\treturn new ReadableStream({\n\t\t\tasync pull(controller) {\n\t\t\t\ttry {\n\t\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\trelease();\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontroller.enqueue(value);\n\t\t\t\t} catch (error) {\n\t\t\t\t\trelease();\n\t\t\t\t\tcontroller.error(error);\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync cancel(reason) {\n\t\t\t\trelease();\n\t\t\t\tawait reader.cancel(reason);\n\t\t\t}\n\t\t});\n\t}\n\treturn {\n\t\tasync sendMessages({ messages, abortSignal }) {\n\t\t\tconst lastUser = [...messages].reverse().find((message) => message.role === \"user\");\n\t\t\tconst text = lastUser?.parts?.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\\n\") ?? \"\";\n\t\t\tconst files = lastUser?.parts?.filter((part) => part.type === \"file\" && typeof part.url === \"string\").map((part) => {\n\t\t\t\treturn {\n\t\t\t\t\tstorageKey: parseChatAttachmentServePath(part.url)?.storageKey ?? part.url,\n\t\t\t\t\tmediaType: part.mediaType,\n\t\t\t\t\t...part.filename ? { filename: part.filename } : {}\n\t\t\t\t};\n\t\t\t}).filter((part) => part.storageKey.length > 0) ?? [];\n\t\t\tconst sessionId = options.getSessionId();\n\t\t\tconst response = await fetchImpl(promptUrl(), {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t...await authHeaders(\"application/json\"),\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t},\n\t\t\t\tcredentials: \"omit\",\n\t\t\t\tsignal: abortSignal,\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tmessage: text,\n\t\t\t\t\t...sessionId ? { sessionId } : {},\n\t\t\t\t\t...files.length ? { files } : {}\n\t\t\t\t})\n\t\t\t});\n\t\t\tif (!response.ok) throw new Error(await response.text() || \"Failed to enqueue agent prompt\");\n\t\t\tconst queued = await response.json();\n\t\t\tif (!queued.sessionId || !queued.runId) throw new Error(\"Agent prompt response missing sessionId/runId\");\n\t\t\toptions.setSessionId?.(queued.sessionId);\n\t\t\toptions.setRunId?.(queued.runId);\n\t\t\toptions.onQueued?.({\n\t\t\t\tsessionId: queued.sessionId,\n\t\t\t\trunId: queued.runId\n\t\t\t});\n\t\t\tconst stream = await openStream(runStreamUrl(queued.runId, 0), abortSignal);\n\t\t\tif (!stream) throw new Error(\"Agent stream was not available after enqueue\");\n\t\t\treturn stream;\n\t\t},\n\t\tasync reconnectToStream({ chatId, body }) {\n\t\t\tif (reconnectActive) return null;\n\t\t\treconnectActive = true;\n\t\t\tconst startIndex = body && typeof body === \"object\" && \"startIndex\" in body ? Number(body.startIndex) : 0;\n\t\t\tconst index = Number.isFinite(startIndex) ? Math.max(0, Math.trunc(startIndex)) : 0;\n\t\t\ttry {\n\t\t\t\tconst runId = options.getRunId();\n\t\t\t\tif (runId) {\n\t\t\t\t\tconst stream = await openStream(runStreamUrl(runId, index));\n\t\t\t\t\tif (!stream) {\n\t\t\t\t\t\treconnectActive = false;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\treturn trackReconnect(stream);\n\t\t\t\t}\n\t\t\t\tconst sessionId = options.getSessionId() ?? chatId;\n\t\t\t\tif (!sessionId) {\n\t\t\t\t\treconnectActive = false;\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst stream = await openStream(sessionStreamUrl(sessionId, index));\n\t\t\t\tif (!stream) {\n\t\t\t\t\treconnectActive = false;\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn trackReconnect(stream);\n\t\t\t} catch (error) {\n\t\t\t\treconnectActive = false;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t};\n}\n/** Parse AI SDK UI message SSE (`data: {json}\\n\\n` + `data: [DONE]`). */\nfunction parseUiMessageSse(stream) {\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\treturn new ReadableStream({ async start(controller) {\n\t\tconst reader = stream.getReader();\n\t\ttry {\n\t\t\tfor (;;) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\tconst parts = buffer.split(\"\\n\\n\");\n\t\t\t\tbuffer = parts.pop() ?? \"\";\n\t\t\t\tfor (const part of parts) {\n\t\t\t\t\tconst lines = part.split(\"\\n\");\n\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\tif (!line.startsWith(\"data:\")) continue;\n\t\t\t\t\t\tconst data = line.slice(5).trimStart();\n\t\t\t\t\t\tif (!data || data === \"[DONE]\") continue;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcontroller.enqueue(JSON.parse(data));\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcontroller.error(error);\n\t\t\treturn;\n\t\t} finally {\n\t\t\treader.releaseLock();\n\t\t}\n\t\tcontroller.close();\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 resolveActiveOrganizationId = () => options.getActiveOrganizationId?.() ?? activeOrganizationId;\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, resolveActiveOrganizationId());\n\t\t\t\tconst extra = options.getExtraHeaders?.();\n\t\t\t\tif (extra) {\n\t\t\t\t\tfor (const [key, value] of Object.entries(extra)) if (value) request.headers.set(key, value);\n\t\t\t\t}\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: resolveActiveOrganizationId\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\tworkflowForms: createWorkflowFormsResource(http),\n\t\tskills: createSkillsResource(http),\n\t\ttriggers: createTriggersResource(http),\n\t\tapps: createAppsResource(http),\n\t\tcredentials: createCredentialsResource(http),\n\t\thistory: createHistoryResource(http),\n\t\tdeployments: createDeploymentsResource(http),\n\t\tgatewayAttachments: createGatewayAttachmentsResource(http),\n\t\tprojectMetrics: createProjectMetricsResource(http),\n\t\tprojectFiles: createProjectFilesResource(http),\n\t\tchannels: createChannelsResource(http),\n\t\tmembers: createMembersResource(http),\n\t\tinvitations: createInvitationsResource(http),\n\t\tapiKeys: createApiKeysResource(http),\n\t\tmanagedServiceCredentials: createManagedServiceCredentialsResource(http),\n\t\tbilling: createBillingResource(http),\n\t\trecents: createRecentsResource(http),\n\t\tuserPreferences: createUserPreferencesResource(http),\n\t\tuserAvatar: createUserAvatarResource(http),\n\t\tcustomAppLogo: createCustomAppLogoResource(http),\n\t\torganizationSidebarBranding: createOrganizationSidebarBrandingResource(http, { getActiveOrganizationId: resolveActiveOrganizationId }),\n\t\tteamRequests: createTeamRequestsResource(http),\n\t\tagentFeedback: createAgentFeedbackResource(http),\n\t\ttemplates: createTemplatesResource(http),\n\t\tmarketingContact: createMarketingContactResource(http),\n\t\tgetActiveOrganizationId: resolveActiveOrganizationId,\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\tgetExtraHeaders: options.getExtraHeaders\n\t});\n}\n//#endregion\nexport { DEFAULT_ORGANIZATION_SIDEBAR_BRANDING, DEFAULT_USER_AVATAR, DEFAULT_USER_PREFERENCES, PlatformError, browserAuthStrategy, createAgentChatTransport, createBrowserPlatformClient, createPlatformClient, mergeOrganizationSidebarBranding, mergeUserPreferences, normalizeBaseUrl, normalizeOrganizationSidebarBranding, normalizeUserPreferences, parseUiMessageSse, 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 { CLIENT_CHANNEL_HEADER } from \"@keystrokehq/shared\";\nimport type Conf from \"conf\";\n\nimport { resolveCliAuth } from \"./auth/resolve-cli-auth\";\nimport { getCliJwt } from \"./auth/jwt-cache\";\nimport { getCredentialStorage, getPlatformUrl, type CliConfig } from \"./config\";\nimport { getResolvedOrganizationId } from \"./target-options\";\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(\n config: Conf<CliConfig>,\n options: { organizationId?: string | null } = {},\n): PlatformClient {\n const platformUrl = getPlatformUrl(config);\n const storage = getCredentialStorage(config);\n\n return createPlatformClient({\n baseUrl: platformUrl,\n auth: toPlatformAuth(resolveCliAuth(config)),\n refreshBearerToken: () => getCliJwt(platformUrl, true, storage),\n getActiveOrganizationId: () =>\n options.organizationId === undefined\n ? (getResolvedOrganizationId() ?? null)\n : options.organizationId,\n getExtraHeaders: () => ({ [CLIENT_CHANNEL_HEADER]: \"cli\" }),\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 projects list\\`, then \\`keystroke projects link --project <slug>\\`.`,\n );\n }\n throw error;\n }\n }\n\n const projects = await platform.projects.list();\n const match = projects.find((project) => project.slug === ref);\n if (!match) {\n throw new Error(\n `Project \"${ref}\" not found in the active organization. Run \\`keystroke projects 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 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 async function listOrganizations(config: Conf<CliConfig>): Promise<UserOrganization[]> {\n const platform = createCliPlatformClient(config);\n return platform.organizations.list();\n}\n\nexport function resolveOrganizationIdFromMemberships(\n organizations: UserOrganization[],\n ref: string,\n): string {\n return resolveOrganizationRef(organizations, ref).organization.id;\n}\n\nexport async function listOrganizationsOrThrow(\n config: Conf<CliConfig>,\n): Promise<UserOrganization[]> {\n const organizations = await listOrganizations(config);\n if (organizations.length === 0) {\n throw new Error(`No organization found — create one at ${getWebUrl(config)}`);\n }\n return organizations;\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\n/** Walk up from `fromDir` and return the directory containing `keystroke.config.ts`, if any. */\nexport function resolveKeystrokeConfigRoot(fromDir = process.cwd()): string | null {\n let dir = resolve(fromDir);\n\n while (dir !== dirname(dir)) {\n if (existsSync(join(dir, KEYSTROKE_CONFIG))) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n if (existsSync(join(dir, KEYSTROKE_CONFIG))) {\n return dir;\n }\n\n return null;\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\n\nexport type LinkedProjectConfig = {\n project?: string;\n organization?: string;\n};\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\n/** Remove line and block comments before scanning config literals. */\nexport function stripConfigComments(source: string): string {\n return source.replace(/\\/\\/[^\\n]*/g, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n}\n\n/** Mask comments while preserving string length so match indices stay aligned. */\nexport function stripConfigCommentsPreservingLength(source: string): string {\n return source\n .replace(/\\/\\/[^\\n]*/g, (match) => \" \".repeat(match.length))\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, (match) => \" \".repeat(match.length));\n}\n\nfunction readStringLiteral(source: string, key: \"project\" | \"organization\"): string | undefined {\n const stripped = stripConfigComments(source);\n const pattern = new RegExp(`\\\\b${key}\\\\s*:\\\\s*(['\"])([^'\"]*)\\\\1`);\n const match = stripped.match(pattern);\n return match?.[2]?.trim() || undefined;\n}\n\nexport function parseLinkedProjectConfig(source: string): LinkedProjectConfig {\n const project = readStringLiteral(source, \"project\");\n const organization = readStringLiteral(source, \"organization\");\n\n return {\n ...(project ? { project } : {}),\n ...(organization ? { organization } : {}),\n };\n}\n\n/** Read optional project/organization slugs from keystroke.config.ts without executing it. */\nexport function readLinkedProjectConfig(fromDir = process.cwd()): LinkedProjectConfig {\n const root = resolveKeystrokeConfigRoot(fromDir);\n if (!root) {\n return {};\n }\n\n const source = readFileSync(join(root, KEYSTROKE_CONFIG), \"utf8\");\n return parseLinkedProjectConfig(source);\n}\n","import { ExpectedCliError } from \"./errors/expected-cli-error\";\n\nexport function missingOrganizationRefMessage(): string {\n return (\n \"No organization selected. Pass `--organization <slug>` or set `organization` in keystroke.config.ts \" +\n \"(via `keystroke projects link --project <slug>`).\"\n );\n}\n\nexport function missingProjectRefMessage(): string {\n return (\n \"No project selected. Pass `--project <slug>` or set `project` in keystroke.config.ts \" +\n \"(via `keystroke projects link --project <slug>`).\"\n );\n}\n\nexport function missingOrganizationRefError(): ExpectedCliError {\n return new ExpectedCliError(missingOrganizationRefMessage());\n}\n\nexport function missingProjectRefError(): ExpectedCliError {\n return new ExpectedCliError(missingProjectRefMessage());\n}\n","import type Conf from \"conf\";\nimport type { UserOrganization } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"./config\";\nimport { getWebUrl } from \"./config\";\nimport { listOrganizations } from \"./organization/active-organization\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { resolveOrganizationRef } from \"./resolve-resource-ref\";\nimport { getCliTargetOptions, setResolvedOrganizationId } from \"./target-options\";\nimport { missingOrganizationRefError } from \"./target-hints\";\n\n/**\n * The active organization reference for the current command: the explicit global\n * `--organization` flag when set, otherwise the `organization` recorded in\n * keystroke.config.ts. Single source of truth for \"which organization\" across\n * every CLI command — commands should never read the flag or linked config directly.\n */\nexport function resolveActiveOrganizationRef(fromDir = process.cwd()): string | undefined {\n const ref =\n getCliTargetOptions().organizationRef ?? readLinkedProjectConfig(fromDir).organization;\n return ref?.trim() || undefined;\n}\n\n/** Resolve the active organization slug to a membership and cache its id for platform requests. */\nexport async function resolveActiveOrganization(\n config: Conf<CliConfig>,\n fromDir = process.cwd(),\n): Promise<UserOrganization> {\n const ref = resolveActiveOrganizationRef(fromDir);\n if (!ref) {\n throw missingOrganizationRefError();\n }\n\n const organizations = await listOrganizations(config);\n if (organizations.length === 0) {\n throw new Error(`No organization found — create one at ${getWebUrl(config)}`);\n }\n\n const membership = resolveOrganizationRef(organizations, ref);\n setResolvedOrganizationId(membership.organization.id);\n return membership;\n}\n","import { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\n\nexport function resolveProjectRoot(fromDir = process.cwd()): string {\n const root = resolveKeystrokeConfigRoot(fromDir);\n if (!root) {\n throw new ExpectedCliError(\n \"Could not find keystroke project root (expected keystroke.config.ts)\",\n );\n }\n\n return root;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveProjectRoot } from \"./resolve-project-root\";\n\nlet loaded = false;\n\nexport function parseEnvFile(contents: string): Record<string, string> {\n const values: Record<string, string> = {};\n\n for (const line of contents.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) {\n continue;\n }\n\n const eq = trimmed.indexOf(\"=\");\n if (eq === -1) {\n continue;\n }\n\n const key = trimmed.slice(0, eq).trim();\n let value = trimmed.slice(eq + 1).trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n values[key] = value;\n }\n\n return values;\n}\n\nexport function loadProjectEnv(fromDir = process.cwd()): void {\n if (loaded) {\n return;\n }\n\n loaded = true;\n\n let envPath: string;\n try {\n envPath = join(resolveProjectRoot(fromDir), \".env\");\n } catch {\n return;\n }\n\n if (!existsSync(envPath)) {\n return;\n }\n\n for (const [key, value] of Object.entries(parseEnvFile(readFileSync(envPath, \"utf8\")))) {\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n}\n\nexport function resetProjectEnvLoadedForTests(): void {\n loaded = false;\n}\n","import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nimport { getCliConfigDir } from \"./config\";\n\nexport type DevSession = {\n pid: number;\n port: number;\n root: string;\n serverUrl: string;\n};\n\nexport function getDevSessionPath(configDir = getCliConfigDir()): string {\n return join(configDir, \"dev-session.json\");\n}\n\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function writeDevSession(session: DevSession, configDir = getCliConfigDir()): void {\n const path = getDevSessionPath(configDir);\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, `${JSON.stringify(session)}\\n`, \"utf8\");\n}\n\nexport function clearDevSession(configDir = getCliConfigDir()): void {\n const path = getDevSessionPath(configDir);\n if (existsSync(path)) {\n unlinkSync(path);\n }\n}\n\nexport function readDevSession(configDir = getCliConfigDir()): DevSession | undefined {\n const path = getDevSessionPath(configDir);\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n const session = JSON.parse(readFileSync(path, \"utf8\")) as DevSession;\n if (!isProcessAlive(session.pid)) {\n clearDevSession(configDir);\n return undefined;\n }\n return session;\n } catch {\n clearDevSession(configDir);\n return undefined;\n }\n}\n","import type Conf from \"conf\";\n\nimport { resolvePublicPlatformOrigin } from \"@keystrokehq/shared\";\n\nimport { getConfigDir, getEffectiveApiTarget, getPlatformUrl, type CliConfig } from \"./config\";\nimport { loadProjectEnv } from \"./project/load-project-env\";\n\n/** Standalone local server default project id — keep in sync with @keystrokehq/database. */\nconst DEFAULT_LOCAL_PROJECT_ID = \"default\";\nimport { readDevSession } from \"./dev-session\";\nimport { resolveActiveOrganization } from \"./resolve-organization-target\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { createCliPlatformClient } from \"./platform-client\";\nimport { formatProjectLabel, resolveProjectRef } from \"./resolve-resource-ref\";\nimport { missingProjectRefError } from \"./target-hints\";\n\nexport type ApiTargetOptions = {\n projectId?: string;\n organizationRef?: string;\n local?: boolean;\n /** Route to `/api/projects/:id` and require a project id. Default false. */\n projectScoped?: boolean;\n /** Org-level platform API; ignores `--project` and linked project config. */\n orgScoped?: boolean;\n};\n\nexport const projectScopedTarget: ApiTargetOptions = { projectScoped: true };\n\nexport type ResolvedApiTarget = {\n baseUrl: string;\n projectId?: string;\n mode: \"local\" | \"platform\";\n};\n\nfunction resolveLocalTargetFromOrigin(\n origin: string,\n options: ApiTargetOptions = {},\n): ResolvedApiTarget {\n const base = origin.replace(/\\/+$/, \"\");\n if (!options.projectScoped) {\n return { baseUrl: base, mode: \"local\" };\n }\n\n const projectPathMatch = base.match(/^(.*\\/api\\/projects\\/([^/]+))$/);\n if (projectPathMatch) {\n return {\n baseUrl: projectPathMatch[1]!,\n projectId: projectPathMatch[2]!,\n mode: \"local\",\n };\n }\n\n return {\n baseUrl: `${base}/api/projects/${DEFAULT_LOCAL_PROJECT_ID}`,\n projectId: DEFAULT_LOCAL_PROJECT_ID,\n mode: \"local\",\n };\n}\n\nfunction resolveLocalTarget(options: ApiTargetOptions = {}): ResolvedApiTarget {\n const origin = resolvePublicPlatformOrigin(process.env);\n return resolveLocalTargetFromOrigin(origin, options);\n}\n\nfunction resolveOrgPlatformTarget(config: Conf<CliConfig>): ResolvedApiTarget {\n return {\n baseUrl: `${getPlatformUrl(config).replace(/\\/+$/, \"\")}/api`,\n mode: \"platform\",\n };\n}\n\nasync function resolvePlatformTarget(\n config: Conf<CliConfig>,\n projectRef: string,\n): Promise<ResolvedApiTarget> {\n await resolveActiveOrganization(config);\n\n const platform = createCliPlatformClient(config);\n let project;\n try {\n project = await resolveProjectRef(platform, projectRef);\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw error;\n }\n if (project.status !== \"active\") {\n throw new Error(`Project ${formatProjectLabel(project)} is not active (${project.status})`);\n }\n\n const platformUrl = getPlatformUrl(config).replace(/\\/+$/, \"\");\n return {\n baseUrl: `${platformUrl}/api/projects/${encodeURIComponent(project.id)}`,\n projectId: project.id,\n mode: \"platform\",\n };\n}\n\nexport async function resolveApiTarget(\n config: Conf<CliConfig>,\n options: ApiTargetOptions = {},\n): Promise<ResolvedApiTarget> {\n loadProjectEnv(process.cwd());\n\n if (options.local) {\n return resolveLocalTarget(options);\n }\n\n const devSession = readDevSession(getConfigDir(config));\n if (devSession && getEffectiveApiTarget(config) !== \"platform\") {\n return resolveLocalTargetFromOrigin(devSession.serverUrl, options);\n }\n\n if (options.orgScoped || options.projectScoped === false) {\n if (getEffectiveApiTarget(config) === \"local\") {\n return resolveLocalTarget(options);\n }\n return resolveOrgPlatformTarget(config);\n }\n\n if (options.projectId) {\n return resolvePlatformTarget(config, options.projectId);\n }\n\n if (getEffectiveApiTarget(config) === \"local\") {\n return resolveLocalTarget(options);\n }\n\n if (!options.projectScoped) {\n return resolveOrgPlatformTarget(config);\n }\n\n const projectRef = options.projectId ?? readLinkedProjectConfig().project;\n if (!projectRef) {\n throw missingProjectRefError();\n }\n\n return resolvePlatformTarget(config, projectRef);\n}\n","import { PostHog } from \"posthog-node\";\n//#region src/posthog-node.ts\nconst MAX_EVENT_BYTES = 9e5;\nfunction createPostHogSink(options) {\n\tconst immediate = options.mode === \"immediate\";\n\tconst client = new PostHog(options.token, {\n\t\thost: options.host,\n\t\t...immediate ? {\n\t\t\tflushAt: 1,\n\t\t\tflushInterval: 0\n\t\t} : {}\n\t});\n\tclient.on(\"error\", options.onError ?? (() => {}));\n\treturn {\n\t\tasync captureException(input) {\n\t\t\tconst error = input.error instanceof Error ? input.error : new Error(String(input.error));\n\t\t\tconst distinctId = input.actorId?.trim() || input.analyticsId?.trim() || `${options.serviceName ?? \"keystroke\"}:anonymous`;\n\t\t\tconst properties = {\n\t\t\t\t...sanitizeProperties(input.properties),\n\t\t\t\t...commonProperties(options, input),\n\t\t\t\t...input.sessionId ? { $session_id: input.sessionId } : {},\n\t\t\t\t...input.actorId ? {} : { $process_person_profile: false }\n\t\t\t};\n\t\t\tclient.captureException(error, distinctId, properties);\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync event(input) {\n\t\t\tconst properties = {\n\t\t\t\t...sanitizeProperties(input.properties),\n\t\t\t\t...commonProperties(options, input),\n\t\t\t\t...input.anonymous ? { $process_person_profile: false } : {}\n\t\t\t};\n\t\t\tconst body = {\n\t\t\t\tdistinctId: input.actorId,\n\t\t\t\tevent: input.name,\n\t\t\t\tproperties,\n\t\t\t\tgroups: input.organizationId ? { organization: input.organizationId } : void 0,\n\t\t\t\ttimestamp: input.timestamp,\n\t\t\t\tuuid: input.uuid\n\t\t\t};\n\t\t\tconst encoded = Buffer.byteLength(JSON.stringify(body), \"utf8\");\n\t\t\tif (encoded > MAX_EVENT_BYTES) {\n\t\t\t\toptions.onError?.(/* @__PURE__ */ new Error(`Dropped oversized event ${input.name} (${encoded} bytes)`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclient.capture(body);\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync groupIdentify(input) {\n\t\t\tclient.groupIdentify({\n\t\t\t\tgroupType: input.groupType,\n\t\t\t\tgroupKey: input.groupKey,\n\t\t\t\tproperties: sanitizeProperties(input.properties)\n\t\t\t});\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync alias(input) {\n\t\t\tclient.alias({\n\t\t\t\tdistinctId: input.distinctId,\n\t\t\t\talias: input.alias\n\t\t\t});\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync flush() {\n\t\t\tawait client.flush();\n\t\t},\n\t\tasync shutdown() {\n\t\t\tawait client.shutdown();\n\t\t}\n\t};\n}\nfunction commonProperties(options, input) {\n\treturn sanitizeProperties({\n\t\torganization_id: input.organizationId,\n\t\tproject_id: input.projectId,\n\t\toperation: input.operation,\n\t\tservice: options.serviceName,\n\t\trelease: options.release,\n\t\tenvironment: options.environment\n\t});\n}\nfunction sanitizeProperties(properties) {\n\tif (!properties) return {};\n\treturn Object.fromEntries(Object.entries(properties).filter((entry) => entry[1] !== void 0));\n}\n//#endregion\nexport { createPostHogSink };\n\n//# sourceMappingURL=posthog-node.mjs.map","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 type { CliErrorContext } from \"./types\";\nimport { formatApiErrorMessage } from \"./format-api-message\";\n\nconst STORAGE_NETWORK_MESSAGE =\n \"Could not reach artifact storage. Check your network/DNS and retry; \" +\n \"corporate proxies or DNS policies sometimes block storage hosts.\";\n\nconst DISCOVERY_CODE_GUIDANCE: Record<string, string> = {\n invalid_url: \"The OpenAPI/GraphQL URL is invalid. Use a public http(s) URL.\",\n url_not_allowed:\n \"That URL host is not allowed (private/metadata hosts are blocked). Use a public URL.\",\n url_unreachable:\n \"Could not reach the OpenAPI/GraphQL URL. Check DNS, network policy, and that the host is publicly reachable.\",\n upstream_http_error:\n \"The OpenAPI/GraphQL URL returned an error. Confirm the spec/introspection endpoint is correct and publicly reachable.\",\n spec_too_large: \"The discovered spec/response is too large. Host a smaller OpenAPI document.\",\n spec_parse_error: \"The URL did not return valid JSON/YAML for discovery.\",\n invalid_openapi:\n \"The URL did not contain a valid OpenAPI/Swagger (or GraphQL introspection) document.\",\n connector_unavailable:\n \"The Slack connector is temporarily unavailable. Retry shortly, or reconnect with `keystroke connect slackbot`.\",\n};\n\nexport function 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(\"ECONNRESET\") ||\n error.message.includes(\"ETIMEDOUT\") ||\n error.message.includes(\"fetch failed\")\n );\n}\n\nexport function isArtifactStorageNetworkError(error: { message: string }): boolean {\n return (\n isUnreachableServerError(error) &&\n /t3\\.storage\\.dev|storage\\.dev|uploadUrl|downloadUrl|Artifact upload|Source blob upload|artifact storage|ENOTFOUND.*storage/i.test(\n error.message,\n )\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}.`;\n}\n\ntype HttpClientError = {\n status: number;\n body: unknown;\n message: string;\n code?: string;\n};\n\nfunction formatHttpClientError(error: HttpClientError, context?: CliErrorContext): string {\n if (error.status === 401) {\n // Do not re-read the credential store here — that can re-prompt macOS Keychain.\n // Callers that know there is no session can pass hasCredentials: false.\n if (context?.hasCredentials === false) {\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 (isArtifactStorageNetworkError(error)) {\n return STORAGE_NETWORK_MESSAGE;\n }\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 const code = error.code ?? parsed?.code;\n if (code && DISCOVERY_CODE_GUIDANCE[code]) {\n const summary = parsed ? (parsed.message ?? parsed.error) : error.message;\n return `${summary}\\n${DISCOVERY_CODE_GUIDANCE[code]}`;\n }\n\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 (isArtifactStorageNetworkError(error)) {\n return STORAGE_NETWORK_MESSAGE;\n }\n if (isUnreachableServerError(error)) {\n return unreachableServerMessage(unreachableTarget(context));\n }\n return error.message;\n }\n\n return fallback;\n}\n","import { isExpectedCliError } from \"./expected-cli-error\";\nimport { isArtifactStorageNetworkError, isUnreachableServerError } from \"./format-cli-error\";\n\nexport type CliExceptionReportContext = {\n command?: string;\n operation?: string;\n};\n\nfunction readStatus(error: unknown): number | undefined {\n if (!error || typeof error !== \"object\") {\n return undefined;\n }\n if (\"status\" in error && typeof error.status === \"number\") {\n return error.status;\n }\n if (\"statusCode\" in error && typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n return undefined;\n}\n\nfunction isAuthCommand(context: CliExceptionReportContext): boolean {\n const operation = context.operation ?? \"\";\n const command = context.command ?? \"\";\n return operation.startsWith(\"cli.auth\") || command.startsWith(\"auth\");\n}\n\nfunction isDeployCommand(context: CliExceptionReportContext): boolean {\n const operation = context.operation ?? \"\";\n const command = context.command ?? \"\";\n return operation === \"cli.deploy\" || command === \"deploy\";\n}\n\nfunction isSchemaExportError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"Cannot export schema to JSON Schema\");\n}\n\n/**\n * CLI Error Tracking allowlist — report only:\n * - HTTP 5xx responses\n * - unexpected failures on auth / deploy paths\n *\n * Validation, lint/typecheck, bad flags, schema export mistakes, and local\n * unreachable servers / artifact storage DNS stay quiet.\n */\nexport function shouldReportCliException(\n error: unknown,\n context: CliExceptionReportContext,\n): boolean {\n if (isExpectedCliError(error)) {\n return false;\n }\n\n if (isSchemaExportError(error)) {\n return false;\n }\n\n if (error instanceof Error && isArtifactStorageNetworkError(error)) {\n return false;\n }\n\n if (error instanceof Error && isUnreachableServerError(error)) {\n return false;\n }\n\n const status = readStatus(error);\n if (status !== undefined) {\n if (status === 0 || (status >= 400 && status < 500)) {\n return false;\n }\n if (status >= 500) {\n return true;\n }\n }\n\n return isAuthCommand(context) || isDeployCommand(context);\n}\n","import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { getCliConfigDir } from \"../config\";\n\nconst ANON_DISTINCT_ID_FILE = \"telemetry-distinct-id\";\nconst USER_ID_FILE = \"telemetry-user-id\";\n\nexport type CliTelemetryActor = {\n actorId: string;\n anonymous: boolean;\n};\n\nfunction readTrimmedFile(path: string): string | undefined {\n try {\n const value = readFileSync(path, \"utf8\").trim();\n return value || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writeSecretFile(path: string, value: string, configDir: string): void {\n try {\n mkdirSync(configDir, { recursive: true });\n writeFileSync(path, `${value}\\n`, { encoding: \"utf8\", mode: 0o600 });\n } catch {\n // Still usable for this process if disk is unavailable.\n }\n}\n\nexport function getOrCreateAnonymousDistinctId(configDir = getCliConfigDir()): string {\n const path = join(configDir, ANON_DISTINCT_ID_FILE);\n const existing = readTrimmedFile(path);\n if (existing) {\n return existing;\n }\n\n const id = globalThis.crypto.randomUUID();\n writeSecretFile(path, id, configDir);\n return id;\n}\n\n/** Persisted authenticated user id when present; otherwise the anonymous distinct id. */\nexport function getCliTelemetryActor(configDir = getCliConfigDir()): CliTelemetryActor {\n const userId = readTrimmedFile(join(configDir, USER_ID_FILE));\n if (userId) {\n return { actorId: userId, anonymous: false };\n }\n return { actorId: getOrCreateAnonymousDistinctId(configDir), anonymous: true };\n}\n\nexport function getCliTelemetryActorId(configDir = getCliConfigDir()): string {\n return getCliTelemetryActor(configDir).actorId;\n}\n\n/** Persist the authenticated user id next to the anonymous distinct id. */\nexport function persistCliTelemetryUserId(userId: string, configDir = getCliConfigDir()): void {\n const trimmed = userId.trim();\n if (!trimmed) {\n return;\n }\n writeSecretFile(join(configDir, USER_ID_FILE), trimmed, configDir);\n}\n\n/** Clear the authenticated user id on logout (keeps anonymous distinct id). */\nexport function clearCliTelemetryUserId(configDir = getCliConfigDir()): void {\n try {\n unlinkSync(join(configDir, USER_ID_FILE));\n } catch {\n // Already absent.\n }\n}\n","/**\n * Public PostHog project token (phc_) — safe to ship in client/CLI binaries.\n * Not a secret; rotate in PostHog if abused. Override via PUBLIC_POSTHOG_TOKEN /\n * KEYSTROKE_POSTHOG_TOKEN when needed.\n */\nexport const PUBLIC_POSTHOG_PROJECT_TOKEN = \"phc_CVZPXvV78726vW2hLKSrFBjzgcKS4oBQU2Nq8z2kxGxm\";\n\nexport const PUBLIC_POSTHOG_INGEST_HOST = \"https://t.keystroke.ai\";\n","import { platform, release as osRelease } from \"node:os\";\nimport {\n alias,\n captureException,\n configureTelemetry,\n event,\n flushTelemetry,\n resetTelemetryForTests,\n shutdownTelemetry,\n type TelemetryProperties,\n} from \"@keystrokehq/telemetry\";\nimport { createPostHogSink } from \"@keystrokehq/telemetry/posthog-node\";\n\nimport { isExpectedCliError } from \"../errors/expected-cli-error\";\nimport { shouldReportCliException } from \"../errors/should-report-cli-exception\";\nimport { readCliVersion } from \"../version\";\nimport {\n getCliTelemetryActor,\n getCliTelemetryActorId,\n getOrCreateAnonymousDistinctId,\n persistCliTelemetryUserId,\n} from \"./identity\";\nimport { PUBLIC_POSTHOG_INGEST_HOST, PUBLIC_POSTHOG_PROJECT_TOKEN } from \"./public-config\";\n\nexport type CliTelemetryEventName =\n | \"cli:init\"\n | \"cli:deploy\"\n | \"cli:auth_login\"\n | \"cli:command_ran\"\n | \"cli:dev_started\";\n\nlet enabled = false;\n\n/** Opt out of CLI analytics/error reporting (no OTEL is shipped for the CLI). */\nexport function isCliTelemetryDisabled(env: NodeJS.ProcessEnv = process.env): boolean {\n const flag = env.KEYSTROKE_DISABLE_TELEMETRY?.trim().toLowerCase();\n if (flag === \"1\" || flag === \"true\" || flag === \"yes\") {\n return true;\n }\n if (env.KEYSTROKE_DEV) {\n return true;\n }\n if (env.CI === \"true\" || env.CI === \"1\") {\n return true;\n }\n return false;\n}\n\nfunction readPostHogToken(env: NodeJS.ProcessEnv = process.env): string {\n return (\n env.KEYSTROKE_POSTHOG_TOKEN?.trim() ||\n env.PUBLIC_POSTHOG_TOKEN?.trim() ||\n PUBLIC_POSTHOG_PROJECT_TOKEN\n );\n}\n\nfunction readPostHogHost(env: NodeJS.ProcessEnv = process.env): string {\n return (\n env.KEYSTROKE_POSTHOG_HOST?.trim() ||\n env.PUBLIC_POSTHOG_HOST?.trim() ||\n PUBLIC_POSTHOG_INGEST_HOST\n );\n}\n\nfunction baseProperties(extra?: TelemetryProperties): TelemetryProperties {\n return {\n cli_version: readCliVersion(),\n os: platform(),\n os_release: osRelease(),\n ...extra,\n };\n}\n\nexport function initCliTelemetry(env: NodeJS.ProcessEnv = process.env): boolean {\n if (enabled) {\n return true;\n }\n if (isCliTelemetryDisabled(env)) {\n return false;\n }\n\n const token = readPostHogToken(env);\n if (!token) {\n return false;\n }\n\n const originalWarn = console.warn.bind(console);\n console.warn = (...args: unknown[]) => {\n const text = args.map(String).join(\" \");\n if (/No chunk id map found/i.test(text)) {\n return;\n }\n originalWarn(...args);\n };\n\n configureTelemetry({\n sink: createPostHogSink({\n token,\n host: readPostHogHost(env),\n mode: \"immediate\",\n serviceName: \"keystroke-cli\",\n release: readCliVersion(),\n environment: env.KEYSTROKE_ENVIRONMENT?.trim() || undefined,\n onError: (error) => {\n // posthog-node may warn about missing browser chunk maps in CLI captures.\n if (/No chunk id map found/i.test(error.message)) {\n return;\n }\n },\n }),\n });\n enabled = true;\n return true;\n}\n\nexport async function shutdownCliTelemetry(): Promise<void> {\n if (!enabled) {\n return;\n }\n try {\n await flushTelemetry();\n await shutdownTelemetry();\n } catch {\n // Fail open.\n }\n enabled = false;\n}\n\nexport async function reportCliException(\n error: unknown,\n context: { command?: string; operation?: string; organizationId?: string; projectId?: string },\n): Promise<void> {\n if (!enabled || isExpectedCliError(error) || !shouldReportCliException(error, context)) {\n return;\n }\n\n const actor = getCliTelemetryActor();\n await captureException({\n error,\n ...(actor.anonymous ? { analyticsId: actor.actorId } : { actorId: actor.actorId }),\n organizationId: context.organizationId,\n projectId: context.projectId,\n operation: context.operation ?? context.command ?? \"cli.command\",\n properties: baseProperties({\n ...(context.command ? { command: context.command } : {}),\n }),\n });\n}\n\nexport async function trackCliEvent(\n name: CliTelemetryEventName,\n input?: {\n userId?: string;\n organizationId?: string;\n projectId?: string;\n properties?: TelemetryProperties;\n },\n): Promise<void> {\n if (!enabled) {\n return;\n }\n\n const actor = getCliTelemetryActor();\n await event({\n name,\n actorId: actor.actorId,\n ...(actor.anonymous ? { anonymous: true } : {}),\n organizationId: input?.organizationId,\n projectId: input?.projectId,\n properties: baseProperties({\n ...(input?.userId ? { user_id: input.userId } : {}),\n ...input?.properties,\n }),\n });\n}\n\n/**\n * Stitch anonymous CLI identity to an authenticated user id (fail-open).\n * Persists the user id so later events use it as actorId.\n */\nexport async function aliasCliTelemetryUser(userId: string, configDir?: string): Promise<void> {\n const trimmed = userId.trim();\n if (!trimmed) {\n return;\n }\n\n const anonymousId = getOrCreateAnonymousDistinctId(configDir);\n persistCliTelemetryUserId(trimmed, configDir);\n\n if (!enabled || anonymousId === trimmed) {\n return;\n }\n\n await alias({ distinctId: trimmed, alias: anonymousId }).catch(() => {});\n}\n\n/** Test helper — marks telemetry active without constructing PostHog. */\nexport function enableCliTelemetryForTests(): void {\n enabled = true;\n}\n\n/** Test helper. */\nexport function resetCliTelemetryForTests(): void {\n enabled = false;\n resetTelemetryForTests();\n}\n\nexport { getCliTelemetryActorId };\n","import type Conf from \"conf\";\nimport { createCliClient } from \"../client\";\nimport { createCliConfig, getWebUrl, type CliConfig } from \"../config\";\nimport { resolveActiveOrganization } from \"../resolve-organization-target\";\nimport {\n projectScopedTarget,\n resolveApiTarget,\n type ApiTargetOptions,\n} from \"../resolve-api-target\";\nimport { getCliTargetOptions } from \"../target-options\";\nimport { reportCliException } from \"../telemetry/init\";\nimport type { CliContext, CliErrorContext } from \"./types\";\nimport { formatCliError } from \"./format-cli-error\";\n\n/**\n * Run a command that needs no project/org target or auth (e.g. public docs).\n * Builds config and formats errors, but skips `resolveApiTarget` / organization resolution,\n * so it works logged-out from any directory.\n */\nexport async function runStandaloneCliCommand(\n fallback: string,\n fn: (ctx: { config: Conf<CliConfig> }) => Promise<void>,\n errorContext?: CliErrorContext,\n): Promise<void> {\n const config = createCliConfig();\n try {\n await fn({ config });\n } catch (error) {\n await reportCliException(error, { command: fallback, operation: \"cli.command\" });\n process.stderr.write(\n `${formatCliError(error, fallback, { ...errorContext, webUrl: getWebUrl(config) })}\\n`,\n );\n process.exitCode = 1;\n }\n}\n\nexport async function runProjectCliCommand(\n fallback: string,\n fn: (ctx: CliContext) => Promise<void>,\n errorContext?: CliErrorContext,\n targetOptions: ApiTargetOptions = {},\n): Promise<void> {\n return runCliCommand(fallback, fn, errorContext, {\n ...projectScopedTarget,\n ...targetOptions,\n });\n}\n\nexport async function runCliCommand(\n fallback: string,\n fn: (ctx: CliContext) => Promise<void>,\n errorContext?: CliErrorContext,\n targetOptions: ApiTargetOptions = {},\n): Promise<void> {\n const config = createCliConfig();\n const target = await resolveApiTarget(config, {\n ...getCliTargetOptions(),\n ...targetOptions,\n });\n\n let organizationId: string | undefined;\n if (target.mode === \"platform\") {\n const membership = await resolveActiveOrganization(config);\n organizationId = membership.organization.id;\n }\n\n const ctx: CliContext = {\n config,\n client: createCliClient(config, {\n baseUrl: target.baseUrl,\n platform: target.mode === \"platform\",\n organizationId,\n }),\n serverUrl: target.baseUrl,\n webUrl: getWebUrl(config),\n apiTarget: target,\n };\n\n try {\n await fn(ctx);\n } catch (error) {\n await reportCliException(error, {\n command: fallback,\n operation: \"cli.command\",\n organizationId,\n projectId: target.projectId,\n });\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","import { ExpectedCliError } from \"./expected-cli-error\";\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 ExpectedCliError(`Invalid ${flag} JSON`);\n }\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../config\";\nimport { resolveActiveOrganization } from \"../resolve-organization-target\";\n\nexport async function requireAdminRole(config: Conf<CliConfig>): Promise<void> {\n const membership = await resolveActiveOrganization(config);\n if (membership.role !== \"owner\" && membership.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 { resolveActiveOrganization } from \"./resolve-organization-target\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { resolveProjectRef } from \"./resolve-resource-ref\";\nimport { getCliTargetOptions } from \"./target-options\";\n\n/**\n * The active project reference for the current command: the explicit global\n * `--project` flag when set, otherwise the `project` recorded in\n * keystroke.config.ts. Single source of truth for \"which project\" across every\n * CLI command — commands should never read the flag or linked config directly.\n */\nexport function resolveActiveProjectRef(fromDir = process.cwd()): string | undefined {\n const ref = getCliTargetOptions().projectId ?? readLinkedProjectConfig(fromDir).project;\n return ref?.trim() || undefined;\n}\n\nexport async function resolveActiveProject(\n config: Conf<CliConfig>,\n platform?: PlatformClient,\n fromDir = process.cwd(),\n): Promise<Project | undefined> {\n const ref = resolveActiveProjectRef(fromDir);\n if (!ref) {\n return undefined;\n }\n\n await resolveActiveOrganization(config, fromDir);\n\n const client = platform ?? createCliPlatformClient(config);\n return resolveProjectRef(client, ref);\n}\n\nexport async function resolveActiveProjectId(\n config: Conf<CliConfig>,\n fromDir = process.cwd(),\n): Promise<string | undefined> {\n const project = await resolveActiveProject(config, undefined, fromDir);\n return project?.id;\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"./config\";\nimport { requireAdminRole } from \"./organization/require-admin-role\";\nimport { resolveActiveProjectId } from \"./resolve-project-target\";\nimport { getCliTargetOptions } from \"./target-options\";\n\nexport type CliListOptions = {\n projectId?: string;\n admin?: boolean;\n};\n\n/**\n * Resolve list query options for org-scoped resources.\n *\n * `--admin` lists org-wide and ignores a linked `project` in keystroke.config.ts.\n * An explicit global `--project` still narrows the list.\n */\nexport async function resolveCliListOptions(\n config: Conf<CliConfig>,\n options: { admin?: boolean } = {},\n): Promise<CliListOptions> {\n if (options.admin) {\n await requireAdminRole(config);\n if (!getCliTargetOptions().projectId?.trim()) {\n return { admin: true };\n }\n }\n\n const projectId = await resolveActiveProjectId(config);\n return {\n ...(projectId ? { projectId } : {}),\n ...(options.admin ? { admin: true } : {}),\n };\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveCliListOptions } from \"../../resolve-list-options\";\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 resolveActiveOrganization(config);\n const result = await client.agents.list(await resolveCliListOptions(config, 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\";\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 { AgentSessionDetailResponse, WorkflowRunDetailResponse } from \"@keystrokehq/shared\";\n\nexport type InspectDetailOptions = {\n summary?: boolean;\n field?: string;\n include?: string;\n};\n\nexport type InspectDetailMode =\n | { kind: \"raw\"; include?: string }\n | { kind: \"summary\" }\n | { kind: \"field\"; field: string };\n\nconst WORKFLOW_RUN_FIELDS = [\"id\", \"status\", \"input\", \"output\", \"error\"] as const;\nconst AGENT_SESSION_FIELDS = [\n \"id\",\n \"status\",\n \"title\",\n \"error\",\n \"activeRunId\",\n \"messageCount\",\n] as const;\n\ntype WorkflowRunField = (typeof WORKFLOW_RUN_FIELDS)[number];\ntype AgentSessionField = (typeof AGENT_SESSION_FIELDS)[number];\n\nexport function parseInspectDetailOptions(options: InspectDetailOptions): InspectDetailMode {\n const summary = Boolean(options.summary);\n const field = options.field?.trim() || undefined;\n const include = options.include;\n\n if (summary && field) {\n throw new Error(\"Use --summary or --field, not both\");\n }\n if ((summary || field) && include !== undefined) {\n throw new Error(\"Do not combine --include with --summary or --field\");\n }\n if (summary) {\n return { kind: \"summary\" };\n }\n if (field) {\n return { kind: \"field\", field };\n }\n return { kind: \"raw\", include };\n}\n\nexport function includeForInspectMode(mode: InspectDetailMode): string | undefined {\n if (mode.kind === \"raw\") {\n return mode.include;\n }\n return \"none\";\n}\n\nexport function writeInspectJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport function projectWorkflowRunSummary(detail: WorkflowRunDetailResponse): {\n id: string;\n status: WorkflowRunDetailResponse[\"run\"][\"status\"];\n input: unknown;\n output: unknown;\n error: unknown;\n} {\n return {\n id: detail.run.id,\n status: detail.run.status,\n input: detail.run.input,\n output: detail.run.output,\n error: detail.run.error,\n };\n}\n\nexport function projectWorkflowRunField(detail: WorkflowRunDetailResponse, field: string): unknown {\n if (!isWorkflowRunField(field)) {\n throw new Error(`Unknown --field ${field}. Allowed: ${WORKFLOW_RUN_FIELDS.join(\", \")}`);\n }\n return detail.run[field];\n}\n\nexport function projectAgentSessionSummary(detail: AgentSessionDetailResponse): {\n id: string;\n status: AgentSessionDetailResponse[\"session\"][\"status\"];\n title: string | null;\n error: unknown;\n activeRunId: string | null;\n messageCount: number;\n} {\n return {\n id: detail.session.id,\n status: detail.session.status,\n title: detail.session.title,\n error: detail.session.error,\n activeRunId: detail.activeRunId,\n messageCount: detail.session.messageCount,\n };\n}\n\nexport function projectAgentSessionField(\n detail: AgentSessionDetailResponse,\n field: string,\n): unknown {\n if (!isAgentSessionField(field)) {\n throw new Error(`Unknown --field ${field}. Allowed: ${AGENT_SESSION_FIELDS.join(\", \")}`);\n }\n if (field === \"activeRunId\") {\n return detail.activeRunId;\n }\n return detail.session[field];\n}\n\nfunction isWorkflowRunField(field: string): field is WorkflowRunField {\n return (WORKFLOW_RUN_FIELDS as readonly string[]).includes(field);\n}\n\nfunction isAgentSessionField(field: string): field is AgentSessionField {\n return (AGENT_SESSION_FIELDS as readonly string[]).includes(field);\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 { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\n\nexport async function withActivePlatformClient(\n config: Conf<CliConfig>,\n fn: (platform: PlatformClient) => Promise<void>,\n fromDir = process.cwd(),\n): Promise<void> {\n await resolveActiveOrganization(config, fromDir);\n const platform = createCliPlatformClient(config);\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} projects link --project ${formatProjectLabel(project)}, then ${bin} deploy\\n`,\n );\n }\n}\n\nexport async function runProjectList(\n config: Conf<CliConfig>,\n options: { admin?: boolean } = {},\n): Promise<void> {\n if (options.admin) {\n await requireAdminRole(config);\n }\n\n await withActivePlatformClient(config, async (platform) => {\n const projects = await platform.projects.list(options.admin ? { admin: true } : undefined);\n process.stdout.write(`${JSON.stringify({ projects }, null, 2)}\\n`);\n\n if (projects.length === 0) {\n const bin = cliBinaryName();\n process.stderr.write(\n `No projects yet. Create one with: ${bin} projects 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 \"../projects/run-project\";\n\nexport async function runAgentSessionCancel(\n config: Conf<CliConfig>,\n _agentId: string,\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 {\n includeForInspectMode,\n parseInspectDetailOptions,\n projectAgentSessionField,\n projectAgentSessionSummary,\n writeInspectJson,\n} from \"../inspect-detail\";\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, or none\")\n .option(\n \"--summary\",\n \"Print a concise JSON summary (status, title, error, activeRunId, messageCount)\",\n )\n .option(\n \"--field <field>\",\n \"Print one field: id, status, title, error, activeRunId, messageCount\",\n )\n .action(\n (\n agentId: string,\n sessionId: string,\n options: { include?: string; summary?: boolean; field?: string },\n ) =>\n runProjectCliCommand(\"Get agent session failed\", async ({ client }) => {\n const mode = parseInspectDetailOptions(options);\n const result = await client.agents.getSession(agentId, sessionId, {\n include: includeForInspectMode(mode),\n });\n if (mode.kind === \"summary\") {\n writeInspectJson(projectAgentSessionSummary(result));\n return;\n }\n if (mode.kind === \"field\") {\n writeInspectJson(projectAgentSessionField(result, mode.field));\n return;\n }\n writeInspectJson(result);\n }),\n );\n\n sessions\n .command(\"cancel\")\n .description(\"Cancel a running agent session\")\n .argument(\"<agentId>\", \"Agent key / route id\")\n .argument(\"<sessionId>\", \"Agent session id\")\n .action(async (agentId: string, sessionId: string) => {\n const config = createCliConfig();\n try {\n await runAgentSessionCancel(config, agentId, 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 registerAgentsCommand(program: Command): void {\n const agents = program.command(\"agents\").description(\"Invoke and inspect agents\");\n\n registerAgentListCommand(agents);\n registerAgentPromptCommand(agents);\n registerAgentSessionsCommand(agents);\n}\n","import type Conf from \"conf\";\nimport type { CreateApiKeyRequest } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/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 Conf from \"conf\";\nimport type {\n ConnectManagedServiceCredentialRequest,\n ManagedServiceKind,\n UpdateManagedServiceCredentialRequest,\n} from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\n\nexport async function runManagedServicesList(\n config: Conf<CliConfig>,\n kind: ManagedServiceKind = \"llm\",\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedServices = await platform.managedServiceCredentials.list(kind);\n process.stdout.write(`${JSON.stringify({ managedServices }, null, 2)}\\n`);\n });\n}\n\nexport async function runManagedServicesConnect(\n config: Conf<CliConfig>,\n input: ConnectManagedServiceCredentialRequest,\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedService = await platform.managedServiceCredentials.connect(input);\n process.stdout.write(`${JSON.stringify({ managedService }, null, 2)}\\n`);\n });\n}\n\nexport async function runManagedServicesUpdate(\n config: Conf<CliConfig>,\n provider: string,\n input: UpdateManagedServiceCredentialRequest,\n kind: ManagedServiceKind = \"llm\",\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedServices = await platform.managedServiceCredentials.list(kind);\n const existing = managedServices.find((entry) => entry.provider === provider);\n if (!existing) {\n throw new Error(`No managed service credential connected for provider \"${provider}\"`);\n }\n\n const managedService = await platform.managedServiceCredentials.update(existing.id, input);\n process.stdout.write(`${JSON.stringify({ managedService }, null, 2)}\\n`);\n });\n}\n\nexport async function runManagedServicesDisconnect(\n config: Conf<CliConfig>,\n provider: string,\n kind: ManagedServiceKind = \"llm\",\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedServices = await platform.managedServiceCredentials.list(kind);\n const existing = managedServices.find((entry) => entry.provider === provider);\n if (!existing) {\n throw new Error(`No managed service credential connected for provider \"${provider}\"`);\n }\n\n await platform.managedServiceCredentials.disconnect(existing.id);\n process.stdout.write(`${JSON.stringify({ disconnected: provider }, null, 2)}\\n`);\n });\n}\n","import type { Command } from \"commander\";\nimport { ManagedServiceKindSchema, type ManagedServiceKind } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport {\n runManagedServicesConnect,\n runManagedServicesDisconnect,\n runManagedServicesList,\n runManagedServicesUpdate,\n} from \"./run-managed-services\";\n\nasync function handleManagedServicesError(\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\nfunction parseManagedServiceKind(kind: string): ManagedServiceKind {\n const parsed = ManagedServiceKindSchema.safeParse(kind);\n if (!parsed.success) {\n const validKinds = ManagedServiceKindSchema.options.join(\", \");\n throw new Error(`Invalid --kind \"${kind}\". Expected one of: ${validKinds}`);\n }\n return parsed.data;\n}\n\nfunction requireNonEmpty(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`${label} is required`);\n }\n return trimmed;\n}\n\nexport function registerManagedServicesCommand(program: Command): void {\n const managedServices = program\n .command(\"managed-services\")\n .description(\"Manage organization managed service credentials\");\n\n managedServices\n .command(\"list\")\n .description(\"List connected managed service credentials\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (options: { kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"List managed services failed\", async () => {\n await runManagedServicesList(config, parseManagedServiceKind(options.kind));\n });\n });\n\n managedServices\n .command(\"connect\")\n .description(\"Connect a managed service provider with your API key\")\n .argument(\"<provider>\", \"Provider slug (openai, anthropic, google, groq, xai)\")\n .requiredOption(\"--api-key <key>\", \"Provider API key\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (provider: string, options: { apiKey: string; kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"Connect managed service failed\", async () => {\n await runManagedServicesConnect(config, {\n kind: parseManagedServiceKind(options.kind),\n provider: requireNonEmpty(provider, \"Provider\"),\n apiKey: requireNonEmpty(options.apiKey, \"--api-key\"),\n });\n });\n });\n\n managedServices\n .command(\"update\")\n .description(\"Rotate the API key for a connected provider\")\n .argument(\"<provider>\", \"Provider slug (openai, anthropic, google, groq, xai)\")\n .requiredOption(\"--api-key <key>\", \"Provider API key\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (provider: string, options: { apiKey: string; kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"Update managed service failed\", async () => {\n await runManagedServicesUpdate(\n config,\n requireNonEmpty(provider, \"Provider\"),\n { apiKey: requireNonEmpty(options.apiKey, \"--api-key\") },\n parseManagedServiceKind(options.kind),\n );\n });\n });\n\n managedServices\n .command(\"disconnect\")\n .description(\"Disconnect a managed service provider\")\n .argument(\"<provider>\", \"Provider slug (openai, anthropic, google, groq, xai)\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (provider: string, options: { kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"Disconnect managed service failed\", async () => {\n await runManagedServicesDisconnect(\n config,\n requireNonEmpty(provider, \"Provider\"),\n parseManagedServiceKind(options.kind),\n );\n });\n });\n}\n","import { cliBinaryName } from \"../../errors\";\n\nfunction toCamelCase(value: string): string {\n const pascal = value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())\n .join(\"\");\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/** `github`, `GITHUB_CREATE_ISSUE` → `githubCreateIssue` (matches the generated action export). */\nexport function actionExportName(app: string, tool: string): string {\n const toolkit = app.toLowerCase();\n const upperTool = tool.toUpperCase();\n const prefix = `${toolkit.toUpperCase()}_`;\n const suffix = upperTool.startsWith(prefix) ? upperTool.slice(prefix.length) : upperTool;\n return toCamelCase(`${toolkit}-${suffix}`);\n}\n\n/** Best-effort code-import line for a catalog action. */\nexport function actionImportHint(app: string, tool: string): string {\n return `import { ${actionExportName(app, tool)} } from \"@keystrokehq/${app.toLowerCase()}/actions\"`;\n}\n\ntype InputSchemaProperty = {\n type?: string;\n enum?: unknown[];\n default?: unknown;\n};\n\ntype InputSchema = {\n properties?: Record<string, InputSchemaProperty>;\n required?: string[];\n};\n\nfunction placeholderValue(prop: InputSchemaProperty): string {\n if (prop.default !== undefined) {\n return JSON.stringify(prop.default);\n }\n if (prop.enum?.length) {\n return JSON.stringify(prop.enum[0]);\n }\n switch (prop.type) {\n case \"number\":\n case \"integer\":\n return \"0\";\n case \"boolean\":\n return \"false\";\n case \"array\":\n return \"[]\";\n case \"object\":\n return \"{}\";\n default:\n return '\"\"';\n }\n}\n\nfunction propertyKey(key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\n/**\n * Example typed `run()` call built from the action's input JSON Schema. Lists fields the\n * call type requires — schema-required fields plus defaulted ones (a `.default()` input\n * is still required at the `run()` call site) — and counts the rest as optional.\n */\nexport function actionRunSnippet(\n app: string,\n tool: string,\n inputParameters?: Record<string, unknown>,\n): string {\n const schema = (inputParameters ?? {}) as InputSchema;\n const properties = schema.properties ?? {};\n const required = new Set(schema.required ?? []);\n\n const included = Object.entries(properties).filter(\n ([key, prop]) => required.has(key) || prop.default !== undefined,\n );\n const optionalCount = Object.keys(properties).length - included.length;\n\n const fieldLines = included.map(([key, prop]) => {\n const comments = [prop.type ?? \"unknown\", prop.default !== undefined ? \"has default\" : \"\"];\n return ` ${propertyKey(key)}: ${placeholderValue(prop)}, // ${comments.filter(Boolean).join(\", \")}`;\n });\n if (optionalCount > 0) {\n fieldLines.push(` // +${optionalCount} optional field${optionalCount === 1 ? \"\" : \"s\"}`);\n }\n\n const args = fieldLines.length > 0 ? `{\\n${fieldLines.join(\"\\n\")}\\n}` : \"{}\";\n return `${actionImportHint(app, tool)};\\n\\nconst result = await ${actionExportName(app, tool)}.run(${args});`;\n}\n\n/** Next-step hint printed after listing an app's actions. */\nexport function listActionsHint(app: string): string {\n const bin = cliBinaryName();\n return (\n `\\nNext steps:\\n` +\n ` Inspect a tool: ${bin} apps actions get ${app} <TOOL_SLUG>\\n` +\n ` Run a tool: ${bin} apps execute ${app} <TOOL_SLUG> --input '{...}'\\n`\n );\n}\n\n/** Hint when listing actions for a custom org app (no toolkit tools). */\nexport function listCustomAppActionsHint(app: string): string {\n const bin = cliBinaryName();\n return (\n `\\nCustom org apps have no catalog action list.\\n` +\n ` Inspect app: ${bin} apps get ${app}\\n` +\n ` Scaffold code: ${bin} apps sync ${app}\\n` +\n ` Connect secret: ${bin} connect ${app}\\n` +\n ` Author actions: defineApp({ slug: \"${app}\", ... }).action(...)\\n`\n );\n}\n\n/** Next-step hint printed after showing one action's schema. */\nexport function showActionHint(\n app: string,\n tool: string,\n inputParameters?: Record<string, unknown>,\n): string {\n const bin = cliBinaryName();\n return (\n `\\nNext steps:\\n` +\n ` Run ad-hoc: ${bin} apps execute ${app} ${tool} --input '{...}'\\n` +\n ` Not connected? ${bin} connect ${app}\\n` +\n `\\nUse in code:\\n\\n${actionRunSnippet(app, tool, inputParameters)}\\n`\n );\n}\n","import { parseAppSlug } from \"@keystrokehq/shared\";\nimport type {\n CatalogActionDetail,\n CatalogActionsPage,\n CatalogAppDetail,\n CatalogAppsPage,\n CustomAppDetail,\n} from \"@keystrokehq/shared\";\nimport { PlatformError, type PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nexport type AppShowResult =\n | { kind: \"catalog\"; app: CatalogAppDetail }\n | { kind: \"custom\"; app: CustomAppDetail };\n\nexport type AppActionsListResult =\n | ({ kind: \"catalog\" } & CatalogActionsPage)\n | {\n kind: \"custom\";\n toolkit: string;\n items: [];\n message: string;\n };\n\nconst CUSTOM_APP_ACTIONS_MESSAGE =\n \"Custom org apps do not expose catalog actions. Actions live in your project as \" +\n \"defineApp(...).action(...). Use `keystroke apps get <slug>` for the credential template, \" +\n \"or `keystroke apps sync <slug>` to scaffold the app module.\";\n\nfunction isNotFoundError(error: unknown): boolean {\n if (!(error instanceof PlatformError)) {\n return false;\n }\n if (error.status === 404) {\n return true;\n }\n return /not found/i.test(error.message);\n}\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<AppShowResult> {\n const trimmed = slug.trim();\n if (!trimmed) {\n throw new Error(\"App slug is required\");\n }\n\n const parsed = parseAppSlug(trimmed);\n if (parsed.kind === \"org\") {\n const app = await client.apps.get(parsed.slug);\n return { kind: \"custom\", app };\n }\n\n try {\n const app = await client.apps.getCatalogApp(trimmed);\n return { kind: \"catalog\", app };\n } catch (error) {\n if (!isNotFoundError(error)) {\n throw error;\n }\n try {\n const app = await client.apps.get(trimmed);\n return { kind: \"custom\", app };\n } catch (fallbackError) {\n // Keep the catalog not-found when the custom path also misses; otherwise surface the real failure.\n if (isNotFoundError(fallbackError)) {\n throw error;\n }\n throw fallbackError;\n }\n }\n}\n\nexport async function runAppActions(\n client: PlatformClient,\n options: { slug?: string; search?: string; limit?: number; cursor?: string },\n): Promise<AppActionsListResult> {\n const slug = options.slug?.trim();\n const search = options.search?.trim();\n\n if (slug) {\n const parsed = parseAppSlug(slug);\n if (parsed.kind === \"org\") {\n return {\n kind: \"custom\",\n toolkit: parsed.slug,\n items: [],\n message: CUSTOM_APP_ACTIONS_MESSAGE,\n };\n }\n\n const page = await client.apps.listCatalogActions(slug, {\n search,\n limit: options.limit,\n cursor: options.cursor,\n });\n return { kind: \"catalog\", ...page };\n }\n\n if (!search) {\n throw new Error(\"App slug or --search is required\");\n }\n\n const page = await client.apps.searchCatalogActions({\n search,\n limit: options.limit,\n cursor: options.cursor,\n });\n return { kind: \"catalog\", ...page };\n}\n\nexport async function runAppAction(\n client: PlatformClient,\n toolSlug: string,\n): Promise<CatalogActionDetail> {\n const trimmed = toolSlug.trim().toUpperCase();\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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { listActionsHint, listCustomAppActionsHint, showActionHint } from \"./action-hints\";\nimport { runAppAction, runAppActions } from \"./run-app-catalog\";\n\nexport function registerAppActionsCommands(app: Command): void {\n const actions = app\n .command(\"actions\")\n .description(\"List and inspect built-in catalog app actions (not custom org apps)\");\n\n actions\n .command(\"list\")\n .description(\n \"List or search catalog toolkit actions; custom org apps return kind:custom with guidance\",\n )\n .argument(\"[slug]\", \"App slug (omit for cross-app search 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 list failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await runAppActions(client, { slug, ...options });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n const trimmedSlug = slug?.trim();\n if (!trimmedSlug) {\n return;\n }\n if (result.kind === \"custom\") {\n process.stderr.write(listCustomAppActionsHint(trimmedSlug));\n return;\n }\n process.stderr.write(listActionsHint(trimmedSlug.toLowerCase()));\n },\n undefined,\n { orgScoped: true },\n ),\n );\n\n actions\n .command(\"get\")\n .description(\"Get a catalog action schema, plus how to run and import it\")\n .argument(\"<app>\", \"Catalog app slug (e.g. github) — not a custom org app\")\n .argument(\"<tool>\", \"Tool slug (e.g. github_create_an_issue)\")\n .action((appSlug: string, toolSlug: string) =>\n runCliCommand(\n \"App action get failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await runAppAction(client, toolSlug);\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n process.stderr.write(\n showActionHint(\n appSlug.trim().toLowerCase(),\n toolSlug.trim().toUpperCase(),\n result.inputParameters,\n ),\n );\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import type { AppCredentialFields } from \"@keystrokehq/shared\";\n\nexport function parseCustomAppFieldFlag(value: string): {\n key: string;\n secret: boolean;\n optional: boolean;\n} {\n const parts = value\n .split(\":\")\n .map((part) => part.trim())\n .filter(Boolean);\n const key = parts[0];\n if (!key || !/^[a-zA-Z][a-zA-Z0-9_]*$/.test(key)) {\n throw new Error(`Invalid field key in --field ${JSON.stringify(value)}`);\n }\n\n const optional = parts.includes(\"optional\");\n const secret = parts.includes(\"public\") ? false : parts.includes(\"secret\") || !optional;\n\n return {\n key,\n secret,\n optional,\n };\n}\n\nexport function parseCustomAppFields(flags: string[]): AppCredentialFields {\n const fields: AppCredentialFields = {};\n\n for (const flag of flags) {\n const parsed = parseCustomAppFieldFlag(flag);\n fields[parsed.key] = {\n ...(parsed.secret ? { secret: true } : {}),\n ...(parsed.optional ? { optional: true } : {}),\n };\n }\n\n if (Object.keys(fields).length === 0) {\n throw new Error(\"At least one --field is required\");\n }\n\n if (!Object.values(fields).some((field) => field.optional !== true)) {\n return fields;\n }\n\n const hasRequired = Object.values(fields).some((field) => field.optional !== true);\n if (!hasRequired) {\n throw new Error(\"At least one --field must be required (omit :optional)\");\n }\n\n return fields;\n}\n\nfunction collectValues(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nexport { collectValues as collectAppFieldValues };\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { CreateCustomAppRequest, CustomAppDetail } from \"@keystrokehq/shared\";\n\nexport type AppCreatePreviewResult = {\n preview: true;\n request: CreateCustomAppRequest;\n slug: Awaited<ReturnType<PlatformClient[\"apps\"][\"checkSlug\"]>>;\n};\n\nexport async function runAppCreate(\n client: PlatformClient,\n input: CreateCustomAppRequest,\n options?: { preview?: boolean },\n): Promise<CustomAppDetail | AppCreatePreviewResult> {\n if (options?.preview) {\n const slug = await client.apps.checkSlug(input.slug);\n return { preview: true, request: input, slug };\n }\n\n return client.apps.create(input);\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type {\n AppAuthKind,\n AppCredentialFields,\n CreateCustomAppRequest,\n CustomAppDetail,\n} from \"@keystrokehq/shared\";\nimport { deriveCustomAppDisplay, slugifyAppName } from \"@keystrokehq/shared\";\n\nexport type DiscoverAppSource = \"mcp\" | \"openapi\" | \"graphql\";\n\nexport type RunAppCreateFromUrlInput = {\n source: DiscoverAppSource;\n url: string;\n name?: string;\n slug?: string;\n description?: string;\n logo?: string;\n authKind?: AppAuthKind;\n fields?: AppCredentialFields;\n preview: boolean;\n};\n\nexport type AppCreatePreviewResult = {\n preview: true;\n detected: true;\n request: CreateCustomAppRequest;\n slug: Awaited<ReturnType<PlatformClient[\"apps\"][\"checkSlug\"]>>;\n};\n\nasync function discoverApp(client: PlatformClient, source: DiscoverAppSource, url: string) {\n switch (source) {\n case \"mcp\":\n return client.apps.discoverMcp({ url });\n case \"openapi\":\n return client.apps.discoverOpenApi({ url });\n case \"graphql\":\n return client.apps.discoverGraphql({ url });\n }\n}\n\nfunction buildCreateRequest(\n input: RunAppCreateFromUrlInput,\n template: Awaited<ReturnType<typeof discoverApp>>[\"template\"],\n): CreateCustomAppRequest {\n const derived = deriveCustomAppDisplay(template, {\n url: input.url,\n mcp: input.source === \"mcp\",\n });\n\n const name = input.name?.trim() || derived.name;\n const description = input.description?.trim() || derived.description;\n const slug = input.slug?.trim() || slugifyAppName(name);\n const authKind = input.authKind ?? template.authKind;\n\n const request: CreateCustomAppRequest = {\n name,\n slug,\n description,\n source: input.source,\n url: input.url,\n authKind,\n ...(input.logo ? { logo: input.logo } : {}),\n ...(input.fields\n ? { fields: input.fields }\n : template.credentialFields\n ? { fields: template.credentialFields }\n : {}),\n ...(template.credentialScheme ? { credentialScheme: template.credentialScheme } : {}),\n ...(authKind === \"oauth\" && template.oauthScopes.length > 0\n ? { oauthScopes: template.oauthScopes }\n : {}),\n };\n\n return request;\n}\n\nexport async function runAppCreateFromUrl(\n client: PlatformClient,\n input: RunAppCreateFromUrlInput,\n): Promise<CustomAppDetail | AppCreatePreviewResult> {\n if (input.authKind && input.source !== \"mcp\") {\n throw new Error(\"--auth is only supported with --mcp\");\n }\n\n const discovery = await discoverApp(client, input.source, input.url);\n\n if (!discovery.detected) {\n throw new Error(\n input.source === \"mcp\"\n ? \"Couldn't reach this MCP server. Check the URL and try again.\"\n : input.source === \"openapi\"\n ? \"Couldn't read this OpenAPI spec. Check the URL and try again.\"\n : \"Couldn't introspect this GraphQL endpoint. Check the URL and try again.\",\n );\n }\n\n const request = buildCreateRequest(input, discovery.template);\n\n if (input.preview) {\n const slug = await client.apps.checkSlug(request.slug);\n return { preview: true, detected: true, request, slug };\n }\n\n return client.apps.create(request);\n}\n","import type { Command } from \"commander\";\nimport type { AppAuthKind } from \"@keystrokehq/shared\";\nimport { slugifyAppName } from \"@keystrokehq/shared\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { collectAppFieldValues, parseCustomAppFields } from \"./parse-custom-app-fields\";\nimport { runAppCreate } from \"./run-app-create\";\nimport { runAppCreateFromUrl, type DiscoverAppSource } from \"./run-app-create-from-url\";\n\ntype AppCreateOptions = {\n name?: string;\n slug?: string;\n description?: string;\n logo?: string;\n field: string[];\n mcp?: string;\n openapi?: string;\n graphql?: string;\n auth?: string;\n preview?: boolean;\n};\n\nfunction resolveDiscoverSource(options: AppCreateOptions): {\n source: DiscoverAppSource;\n url: string;\n} | null {\n const sources = [\n options.mcp ? { source: \"mcp\" as const, url: options.mcp } : null,\n options.openapi ? { source: \"openapi\" as const, url: options.openapi } : null,\n options.graphql ? { source: \"graphql\" as const, url: options.graphql } : null,\n ].filter((entry): entry is { source: DiscoverAppSource; url: string } => entry !== null);\n\n if (sources.length > 1) {\n throw new Error(\"Use only one of --mcp, --openapi, or --graphql\");\n }\n\n return sources[0] ?? null;\n}\n\nfunction parseAuthKind(value: string | undefined): AppAuthKind | undefined {\n if (!value) {\n return undefined;\n }\n\n if (value === \"oauth\" || value === \"api_key\") {\n return value;\n }\n\n throw new Error(\"--auth must be oauth or api_key\");\n}\n\nfunction parseLogoUrl(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n if (!trimmed) {\n return undefined;\n }\n\n try {\n const url = new URL(trimmed);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"--logo must be an http(s) URL\");\n }\n return url.href;\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"--logo\")) {\n throw error;\n }\n throw new Error(\"--logo must be a valid URL\");\n }\n}\n\nfunction parseFieldOverrides(flags: string[]) {\n if (flags.length === 0) {\n return undefined;\n }\n\n return parseCustomAppFields(flags);\n}\n\nexport function registerAppCreateCommand(app: Command): void {\n app\n .command(\"create\")\n .description(\"Create a custom org app\")\n .option(\"--name <name>\", \"App display name\")\n .option(\"--slug <slug>\", \"App slug segment (defaults from name)\")\n .option(\"--description <description>\", \"App description (defaults to --name)\")\n .option(\"--logo <url>\", \"Public logo image URL\")\n .option(\n \"--field <field>\",\n \"Credential field as key, key:secret, key:optional, or key:secret:optional (repeatable)\",\n collectAppFieldValues,\n [],\n )\n .option(\"--mcp <url>\", \"Create from an MCP server URL (auto-detect auth)\")\n .option(\"--openapi <url>\", \"Create from an OpenAPI spec URL (auto-detect auth)\")\n .option(\"--graphql <url>\", \"Create from a GraphQL endpoint URL (auto-detect auth)\")\n .option(\"--auth <kind>\", \"Override detected auth: oauth or api_key (MCP only)\")\n .option(\"--preview\", \"Show the request that would be created without creating\")\n .action((options: AppCreateOptions) =>\n runCliCommand(\n \"Create app failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n\n const discovery = resolveDiscoverSource(options);\n const logo = parseLogoUrl(options.logo);\n\n if (discovery) {\n const result = await runAppCreateFromUrl(client, {\n source: discovery.source,\n url: discovery.url.trim(),\n name: options.name,\n slug: options.slug,\n description: options.description,\n logo,\n authKind: parseAuthKind(options.auth),\n fields: parseFieldOverrides(options.field),\n preview: options.preview ?? false,\n });\n\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n if (!options.name?.trim()) {\n throw new Error(\"--name is required for custom apps\");\n }\n\n const name = options.name.trim();\n const slug = options.slug?.trim() || slugifyAppName(name);\n // Default description from name so agents/docs examples without --description still work.\n const description = options.description?.trim() || name;\n\n const result = await runAppCreate(\n client,\n {\n name,\n slug,\n description,\n source: \"custom\",\n ...(logo ? { logo } : {}),\n fields: parseCustomAppFields(options.field),\n },\n { preview: options.preview ?? false },\n );\n\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nimport { cliBinaryName } from \"../../errors\";\n\nfunction isNotConnectedError(error: unknown): boolean {\n if (!(error instanceof PlatformError) || error.status !== 404) {\n return false;\n }\n\n const body = error.body;\n if (typeof body !== \"object\" || body === null || !(\"error\" in body)) {\n return false;\n }\n\n return (body as { error?: string }).error === \"not_found\";\n}\n\nexport async function runAppExecute(\n client: PlatformClient,\n appSlug: string,\n toolSlug: string,\n options: { input: unknown; version?: string; credentialSlug?: string; projectSlug?: string },\n): Promise<unknown> {\n const app = appSlug.trim().toLowerCase();\n const tool = toolSlug.trim().toUpperCase();\n if (!app || !tool) {\n throw new Error(\n \"App and tool slugs are required (e.g. github github_get_the_authenticated_user)\",\n );\n }\n\n const credentialSlug = options.credentialSlug?.trim() || undefined;\n const projectSlug = options.projectSlug?.trim() || undefined;\n\n const version =\n options.version?.trim() ||\n (await client.apps.getCatalogAction(tool)).version?.trim() ||\n undefined;\n\n if (!version) {\n throw new Error(`Catalog action \"${tool}\" has no pinned version. Pass --version explicitly.`);\n }\n\n try {\n const { result } = await client.apps.executeTool({\n app,\n tool,\n version,\n arguments:\n typeof options.input === \"object\" && options.input !== null && !Array.isArray(options.input)\n ? (options.input as Record<string, unknown>)\n : {},\n ...(credentialSlug ? { credentialSlug } : {}),\n ...(projectSlug ? { projectSlug } : {}),\n });\n return result;\n } catch (error) {\n // With an explicit --credential the not_found is about the slug, not a missing connection,\n // so surface the server's message instead of the connect hint.\n if (isNotConnectedError(error) && !credentialSlug) {\n throw new Error(`Not connected to ${app}. Run: ${cliBinaryName()} connect ${app}`);\n }\n\n throw error;\n }\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { cliBinaryName, parseJsonOption, runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveProject } from \"../../resolve-project-target\";\nimport { runAppExecute } from \"./run-app-execute\";\n\nexport function registerAppExecuteCommand(app: Command): void {\n app\n .command(\"execute\")\n .description(\"Run a connected catalog action against the cloud (no local server)\")\n .argument(\"<app>\", \"App slug (e.g. github)\")\n .argument(\"<tool>\", \"Tool slug (e.g. github_get_the_authenticated_user)\")\n .option(\"--input <json>\", \"JSON arguments (defaults to {})\", \"{}\")\n .option(\"--version <version>\", \"Pinned toolkit version (defaults to the catalog value)\")\n .option(\n \"--credential <slug>\",\n `Pin a specific credential by slug (see '${cliBinaryName()} credentials list'); overrides the default and is the only way to use a user credential`,\n )\n .addHelpText(\n \"after\",\n `\nCredential resolution matches the runtime: project default → org default. User credentials are\nnever a default — reach one with --credential <slug>. Target a project with the global\n--project <slug> flag; without it, only org credentials resolve.\n\nExamples:\n ${cliBinaryName()} apps execute github github_get_the_authenticated_user\n ${cliBinaryName()} apps execute github github_get_the_authenticated_user --project my-app\n ${cliBinaryName()} apps execute github github_get_the_authenticated_user --credential work-github\n ${cliBinaryName()} apps execute acculynx acculynx_add_job_appointment --input '{\"jobId\":\"123\",\"startDate\":\"2026-01-01T09:00:00Z\",\"endDate\":\"2026-01-01T10:00:00Z\"}'\n`,\n )\n .action(\n (\n appSlug: string,\n toolSlug: string,\n options: { input: string; version?: string; credential?: string },\n ) =>\n runCliCommand(\n \"App execute failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const input = parseJsonOption(options.input, \"--input\");\n const project = await resolveActiveProject(config, client);\n const result = await runAppExecute(client, appSlug, toolSlug, {\n input,\n version: options.version,\n credentialSlug: options.credential,\n projectSlug: project?.slug,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n {\n usage: {\n command: `${cliBinaryName()} apps execute ${appSlug} ${toolSlug}`,\n flag: \"--input\",\n },\n },\n { orgScoped: true },\n ),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppShow } from \"./run-app-catalog\";\n\nexport function registerAppGetCommand(app: Command): void {\n app\n .command(\"get\")\n .description(\n \"Get an app: catalog toolkit detail, or custom org app credential template (kind: catalog|custom)\",\n )\n .argument(\"<slug>\", \"App slug (e.g. github or acme/internal-api)\")\n .action((slug) =>\n runCliCommand(\n \"App get failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await runAppShow(client, slug);\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import type { AppCatalogSummary } from \"@keystrokehq/shared\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nexport async function runAppList(client: PlatformClient): Promise<AppCatalogSummary[]> {\n return client.apps.listCatalog();\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 resolveActiveOrganization(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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 .usage('[options] \"{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 resolveActiveOrganization(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 { 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 apps 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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 resolveActiveOrganization(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 { registerAppActionsCommands } from \"./actions\";\nimport { registerAppCreateCommand } from \"./create\";\nimport { registerAppExecuteCommand } from \"./execute\";\nimport { registerAppGetCommand } from \"./get\";\nimport { registerAppListCommand } from \"./list\";\nimport { registerAppSearchCommand } from \"./search\";\nimport { registerAppSyncCommand } from \"./sync\";\n\nexport function registerAppsCommand(program: Command): void {\n const apps = program.command(\"apps\").description(\"Discover and run connectable integrations\");\n\n registerAppListCommand(apps);\n registerAppSearchCommand(apps);\n registerAppGetCommand(apps);\n registerAppActionsCommands(apps);\n registerAppExecuteCommand(apps);\n registerAppCreateCommand(apps);\n registerAppSyncCommand(apps);\n}\n","import { access, mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, posix, relative, resolve, sep } from \"node:path\";\n\nimport { ExpectedCliError } from \"../../errors/expected-cli-error\";\n\nexport type ApplyTemplateFilesOptions = {\n projectRoot: string;\n files: Readonly<Record<string, string>>;\n force?: boolean;\n};\n\nasync function pathExists(absolutePath: string): Promise<boolean> {\n try {\n await access(absolutePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction resolveTemplateFilePath(projectRoot: string, filePath: string): string {\n const normalizedRoot = resolve(projectRoot);\n const absolutePath = resolve(normalizedRoot, filePath);\n const relativePath = relative(normalizedRoot, absolutePath);\n const escapesRoot =\n relativePath === \"..\" || relativePath.startsWith(`..${sep}`) || isAbsolute(relativePath);\n const isCanonicalSourcePath =\n filePath.startsWith(\"src/\") &&\n !filePath.includes(\"\\\\\") &&\n !filePath.includes(\"\\0\") &&\n posix.normalize(filePath) === filePath;\n\n if (escapesRoot || !isCanonicalSourcePath) {\n throw new ExpectedCliError(`Unsafe template file path: ${filePath}`);\n }\n\n return absolutePath;\n}\n\n/**\n * Write template files into a project. Refuses to overwrite unless `force` is set.\n * Returns the relative paths written (sorted).\n */\nexport async function applyTemplateFiles(options: ApplyTemplateFilesOptions): Promise<string[]> {\n const paths = Object.keys(options.files).sort();\n const resolvedPaths = paths.map((filePath) => ({\n relative: filePath,\n absolute: resolveTemplateFilePath(options.projectRoot, filePath),\n }));\n\n if (!options.force) {\n const existing: string[] = [];\n for (const filePath of resolvedPaths) {\n if (await pathExists(filePath.absolute)) {\n existing.push(filePath.relative);\n }\n }\n if (existing.length > 0) {\n throw new ExpectedCliError(\n [\n \"Refusing to overwrite existing files (pass --force to overwrite):\",\n ...existing.map((path) => ` ${path}`),\n ].join(\"\\n\"),\n );\n }\n }\n\n for (const filePath of resolvedPaths) {\n await mkdir(dirname(filePath.absolute), { recursive: true });\n await writeFile(filePath.absolute, options.files[filePath.relative]!, \"utf8\");\n }\n\n return paths;\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveKeystrokeConfigRoot } from \"../../project/resolve-keystroke-config-root\";\nimport { applyTemplateFiles } from \"./apply-template-files\";\n\nexport function registerTemplatesApplyCommand(templates: Command): void {\n templates\n .command(\"apply\")\n .description(\n \"Copy a template's files into the current keystroke project (fails if paths exist; --force overwrites)\",\n )\n .argument(\"<slug>\", \"Template slug\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\"--force\", \"Overwrite existing files\", false)\n .action((slug: string, options: { dir: string; force: boolean }) =>\n runCliCommand(\n \"Apply template failed\",\n async () => {\n const projectRoot = resolveKeystrokeConfigRoot(options.dir);\n if (!projectRoot) {\n throw new Error(\"Not in a keystroke project (keystroke.config.ts not found)\");\n }\n\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const { files } = await client.templates.files(slug);\n\n const paths = await applyTemplateFiles({\n projectRoot,\n files,\n force: options.force,\n });\n\n process.stdout.write(\n `${JSON.stringify({ slug, projectRoot, written: paths, force: options.force }, null, 2)}\\n`,\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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport type { TemplateKind } from \"@keystrokehq/shared\";\n\nexport function registerTemplatesListCommand(templates: Command): void {\n templates\n .command(\"list\")\n .description(\"List official templates\")\n .option(\"--kind <kind>\", \"Filter by kind: agent, workflow, or both\")\n .action((options: { kind?: string }) =>\n runCliCommand(\n \"List templates failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const kind = parseKind(options.kind);\n const rows = await client.templates.list(kind ? { kind } : undefined);\n process.stdout.write(`${JSON.stringify(rows, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n\nfunction parseKind(value: string | undefined): TemplateKind | undefined {\n if (!value) {\n return undefined;\n }\n if (value === \"agent\" || value === \"workflow\" || value === \"both\") {\n return value;\n }\n throw new Error(`Invalid --kind ${value}. Expected agent, workflow, or both.`);\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\n\nexport function registerTemplatesShowCommand(templates: Command): void {\n templates\n .command(\"show\")\n .description(\"Show a template and its file paths\")\n .argument(\"<slug>\", \"Template slug\")\n .option(\"--files\", \"Include file contents in the output\")\n .action((slug: string, options: { files?: boolean }) =>\n runCliCommand(\n \"Show template failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const template = await client.templates.get(slug);\n if (!options.files) {\n const { files: _files, ...summary } = template;\n process.stdout.write(\n `${JSON.stringify({ ...summary, filePaths: Object.keys(template.files).sort() }, null, 2)}\\n`,\n );\n return;\n }\n process.stdout.write(`${JSON.stringify(template, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { registerTemplatesApplyCommand } from \"./apply\";\nimport { registerTemplatesListCommand } from \"./list\";\nimport { registerTemplatesShowCommand } from \"./show\";\n\nexport function registerTemplatesCommand(program: Command): void {\n const templates = program\n .command(\"templates\")\n .description(\"Browse and add official agent/workflow templates to a project\");\n\n registerTemplatesListCommand(templates);\n registerTemplatesShowCommand(templates);\n registerTemplatesApplyCommand(templates);\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 { AppCatalogSummary } from \"@keystrokehq/shared\";\nimport { buildConnectDeeplink, resolveConnectAppSlug } from \"@keystrokehq/shared\";\n\nimport { openUrl } from \"../../auth/open-url\";\n\nexport type ConnectPlatformClient = {\n apps: {\n listCatalog(): Promise<AppCatalogSummary[]>;\n };\n};\n\nexport { resolveConnectAppSlug };\n\nexport async function runConnect(options: {\n platform: ConnectPlatformClient;\n webUrl: string;\n orgSlug: string;\n slug: string;\n printUrl?: boolean;\n}): Promise<void> {\n const apps = await options.platform.apps.listCatalog();\n const requested = options.slug.trim();\n const app = resolveConnectAppSlug(requested, 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 if (requested === \"slack\" && app.id === \"slackbot\") {\n process.stdout.write(\n \"Note: External Channels use the Slackbot gateway connection (`slackbot`). \" +\n \"The separate `slack` toolkit is for action credentials, not channel binding.\\n\",\n );\n }\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getWebUrl } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 const membership = await resolveActiveOrganization(config);\n const platform = createCliPlatformClient(config);\n await runConnect({\n platform,\n webUrl: getWebUrl(config),\n orgSlug: membership.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: {\n agent?: string;\n workflow?: string;\n poll?: string;\n}): {\n targetType: CredentialAssignmentTargetType;\n targetKey: string;\n} {\n const agent = options.agent?.trim();\n const workflow = options.workflow?.trim();\n const poll = options.poll?.trim();\n const targets = [agent, workflow, poll].filter(Boolean);\n\n if (targets.length !== 1) {\n throw new Error(\"Exactly one of --agent, --workflow, or --poll 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 return { targetType: \"poll\", targetKey: poll! };\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, agent tool, or poll action\")\n .option(\"--agent <key>\", \"Agent slug\")\n .option(\"--workflow <key>\", \"Workflow slug\")\n .option(\"--poll <slug>\", \"Poll source 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: {\n agent?: string;\n workflow?: string;\n poll?: string;\n credential: string;\n consumer?: string;\n }) =>\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, agent, or poll\")\n .option(\"--agent <key>\", \"Agent slug\")\n .option(\"--workflow <key>\", \"Workflow slug\")\n .option(\"--poll <slug>\", \"Poll source slug\")\n .action((options: { agent?: string; workflow?: string; poll?: 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, agent, or poll\")\n .option(\"--agent <key>\", \"Agent slug\")\n .option(\"--workflow <key>\", \"Workflow slug\")\n .option(\"--poll <slug>\", \"Poll source 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; poll?: 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 \"../projects/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 scope?: UpdateCredentialRequest[\"scope\"];\n projectSlug?: 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 ...(args.scope !== undefined ? { scope: args.scope } : {}),\n ...(args.projectSlug !== undefined ? { projectSlug: args.projectSlug } : {}),\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","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 { parseCredentialSetScopes } from \"./parse-set-scopes\";\nimport { runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsDuplicateCommand(credentials: Command): void {\n credentials\n .command(\"duplicate\")\n .description(\"Duplicate a credential into one or more scopes\")\n .argument(\"<ref>\", \"Credential slug or id\")\n .option(\"--name <name>\", \"Display name for the copy\")\n .option(\"--label <label>\", \"Alias for --name\")\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 .action(\n (\n ref: string,\n options: {\n name?: string;\n label?: string;\n scope: string[];\n projectSlug: string[];\n },\n ) =>\n runCredentialsCommand(\"Duplicate credential failed\", async ({ platform, local }) => {\n if (local) {\n throw new Error(\"Duplicate is only supported for platform credentials\");\n }\n\n const targets = parseCredentialSetScopes(options.scope, options.projectSlug);\n const displayName = options.name ?? options.label;\n const credentials = await platform!.credentials.duplicate(ref, {\n projects: targets.projects,\n createOrganizationCredential: targets.createOrganizationCredential,\n createUserProvidedCredential: targets.createUserProvidedCredential,\n ...(displayName !== undefined ? { label: displayName } : {}),\n });\n process.stdout.write(`${JSON.stringify({ credentials }, null, 2)}\\n`);\n }),\n );\n}\n\nfunction collectValues(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n","import type { Command } from \"commander\";\nimport { createLocalCredentialsClient, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsGetCommand(credentials: Command): void {\n credentials\n .command(\"get\")\n .description(\"Get a credential instance by id\")\n .argument(\"<id>\", \"Credential instance id\")\n .action((id: string) =>\n runCredentialsCommand(\"Get credential failed\", async ({ platform, local }) => {\n if (local) {\n const { client } = await createLocalCredentialsClient();\n const result = await client.credentials.listInstances();\n const match = result.instances.find((instance) => instance.id === id);\n if (!match) {\n throw new Error(`Credential ${id} not found`);\n }\n process.stdout.write(`${JSON.stringify(match, null, 2)}\\n`);\n return;\n }\n\n const credential = await platform!.credentials.get(id);\n process.stdout.write(`${JSON.stringify({ credential }, null, 2)}\\n`);\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport { createLocalCredentialsClient, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsListCommand(credentials: Command): void {\n credentials\n .command(\"list\")\n .description(\"List stored credential instances\")\n .option(\"--key <key>\", \"Filter by credential key (local server only)\")\n .action((options: { key?: string }) =>\n runCredentialsCommand(\"List credential instances failed\", async ({ platform, local }) => {\n if (local) {\n const { client } = await createLocalCredentialsClient();\n const result = await client.credentials.listInstances(\n options.key ? { key: options.key } : undefined,\n );\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n const credentialsList = await platform!.credentials.list();\n process.stdout.write(`${JSON.stringify({ credentials: credentialsList }, null, 2)}\\n`);\n }),\n );\n}\n","export const ENV_REF_PREFIX = \"@env:\";\n\nexport function isEnvRef(raw: string): boolean {\n return raw.startsWith(ENV_REF_PREFIX);\n}\n\nexport function envRefName(raw: string): string {\n return raw.slice(ENV_REF_PREFIX.length);\n}\n","import { envRefName, isEnvRef } from \"../../project/env-ref\";\nimport { loadProjectEnv } from \"../../project/load-project-env\";\n\nexport function parseCredentialValueFields(fields: string[]): Record<string, string> {\n const value: Record<string, string> = {};\n\n for (const field of fields) {\n const separatorIndex = field.indexOf(\"=\");\n if (separatorIndex <= 0) {\n throw new Error(`Invalid --set value: ${field}`);\n }\n\n const key = field.slice(0, separatorIndex);\n let rawValue = field.slice(separatorIndex + 1);\n\n if (isEnvRef(rawValue)) {\n const envName = envRefName(rawValue);\n if (process.env[envName] === undefined) {\n loadProjectEnv();\n }\n rawValue = process.env[envName] ?? \"\";\n if (!rawValue) {\n throw new Error(`Environment variable ${envName} is not set`);\n }\n }\n\n value[key] = rawValue;\n }\n\n if (Object.keys(value).length === 0) {\n throw new Error(\"At least one --set field is required\");\n }\n\n return value;\n}\n\nexport function scopeTypeFromCli(scope: string): \"organization\" | \"user\" | \"project\" {\n switch (scope) {\n case \"org\":\n return \"organization\";\n case \"user\":\n return \"user\";\n case \"project\":\n return \"project\";\n default:\n throw new Error(`Unknown scope \"${scope}\". Expected org, user, or project.`);\n }\n}\n","import type { Command } from \"commander\";\nimport { parseCredentialValueFields } from \"./parse-value\";\nimport { buildPlatformUpdatePatch, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsRotateCommand(credentials: Command): void {\n const rotate = credentials\n .command(\"rotate\")\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 failed\", async ({ platform, local }) => {\n const value = parseCredentialValueFields(options.set);\n\n if (local) {\n throw new Error(\"credentials rotate requires the platform API target (omit --local)\");\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 rotate.alias(\"rotate-key\");\n}\n\n/** @deprecated Use registerCredentialsRotateCommand — `rotate-key` is an alias for `rotate`. */\nexport function registerCredentialsRotateKeyCommand(credentials: Command): void {\n registerCredentialsRotateCommand(credentials);\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","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 registerCredentialsCreateCommand(credentials: Command): void {\n const create = credentials\n .command(\"create\")\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 create.alias(\"set\");\n}\n\n/** @deprecated Use registerCredentialsCreateCommand — `set` is an alias for `create`. */\nexport function registerCredentialsSetCommand(credentials: Command): void {\n registerCredentialsCreateCommand(credentials);\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 { AppCredentialScope } from \"@keystrokehq/shared\";\n\nexport type ParsedUpdateScope = {\n scope: AppCredentialScope;\n projectSlug?: string;\n};\n\n/** Parse a single destination scope for `credentials update --scope`. */\nexport function parseCredentialUpdateScope(\n scopes: string[],\n projectSlugs: string[],\n): ParsedUpdateScope | undefined {\n if (scopes.length === 0) {\n return undefined;\n }\n\n if (scopes.length > 1) {\n throw new Error(\"Scope swap accepts a single --scope value (org, user, or project)\");\n }\n\n const scope = scopes[0]!;\n if (scope !== \"org\" && scope !== \"user\" && scope !== \"project\") {\n throw new Error(`Unknown scope \"${scope}\". Expected org, user, or project.`);\n }\n\n if (scope === \"project\") {\n if (projectSlugs.length !== 1) {\n throw new Error(\"--project-slug is required exactly once when scope is project\");\n }\n return { scope: \"project\", projectSlug: projectSlugs[0] };\n }\n\n if (projectSlugs.length > 0) {\n throw new Error(\"--project-slug is only valid when scope is project\");\n }\n\n return { scope: scope === \"org\" ? \"organization\" : \"user\" };\n}\n","import type { Command } from \"commander\";\nimport { parseCredentialUpdateScope } from \"./parse-update-scope\";\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(\"--scope <scope>\", \"Move to org, user, or project scope\", collectValues, [])\n .option(\"--project-slug <slug>\", \"Project slug when --scope is project\", collectValues, [])\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 scope: string[];\n projectSlug: string[];\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 const scopeTarget = parseCredentialUpdateScope(options.scope, options.projectSlug);\n\n if (local) {\n if (scopeTarget) {\n throw new Error(\"Scope swap is only supported for platform credentials\");\n }\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 ...(scopeTarget\n ? {\n scope: scopeTarget.scope,\n ...(scopeTarget.projectSlug !== undefined\n ? { projectSlug: scopeTarget.projectSlug }\n : {}),\n }\n : {}),\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\nfunction collectValues(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 { registerCredentialsDuplicateCommand } from \"./duplicate\";\nimport { registerCredentialsGetCommand } from \"./get\";\nimport { registerCredentialsListCommand } from \"./list\";\nimport { registerCredentialsRotateCommand } from \"./rotate-key\";\nimport { registerCredentialsCreateCommand } 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 registerCredentialsCreateCommand(credentials);\n registerCredentialsUpdateCommand(credentials);\n registerCredentialsDuplicateCommand(credentials);\n registerCredentialsRotateCommand(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 { parseCredentialStorage, setAccessTokenSwitchingStorage } from \"../../auth/credentials\";\nimport { clearCliJwtCache } from \"../../auth/jwt-cache\";\nimport { openUrl } from \"../../auth/open-url\";\nimport { resolveAuthLoginTargets } from \"../../auth/resolve-login-targets\";\nimport { createCliConfig, getCredentialStorage } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { aliasCliTelemetryUser, reportCliException, trackCliEvent } from \"../../telemetry/init\";\n\ntype LoginOptions = {\n webUrl?: string;\n platformUrl?: string;\n credentialStorage?: 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(\n \"--credential-storage <keychain|file>\",\n \"Where to store the session token (default: keychain; file is owner-only under ~/.keystroke)\",\n )\n .action(async (options: LoginOptions) => {\n const config = createCliConfig();\n const { webUrl, platformUrl } = resolveAuthLoginTargets(options, config);\n const previousStorage = getCredentialStorage(config);\n const storage = options.credentialStorage\n ? parseCredentialStorage(options.credentialStorage)\n : previousStorage;\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 const { cleanupWarning } = setAccessTokenSwitchingStorage(platformUrl, result.accessToken, {\n storage,\n previousStorage,\n });\n config.set(\"credentialStorage\", storage);\n clearCliJwtCache();\n\n if (cleanupWarning) {\n process.stderr.write(`${cleanupWarning}\\n`);\n }\n\n const user = await getSessionWithBearer(platformUrl, result.accessToken);\n\n if (user) {\n await aliasCliTelemetryUser(user.id);\n await trackCliEvent(\"cli:auth_login\", {\n userId: user.id,\n });\n process.stdout.write(`Logged in as ${user.name} (${user.email})\\n`);\n } else {\n await trackCliEvent(\"cli:auth_login\");\n process.stdout.write(`Logged in to ${webUrl}\\n`);\n }\n } catch (error) {\n await reportCliException(error, { command: \"auth login\", operation: \"cli.auth_login\" });\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, clearAccessTokenCache } from \"../../auth/credentials\";\nimport { clearCliJwtCache } from \"../../auth/jwt-cache\";\nimport { createCliConfig, getCredentialStorage, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { clearCliTelemetryUserId } from \"../../telemetry/identity\";\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 const storage = getCredentialStorage(config);\n clearAccessToken(platformUrl, { storage });\n clearAccessTokenCache();\n clearCliJwtCache();\n clearCliTelemetryUserId();\n process.stdout.write(\n `${JSON.stringify({ authenticated: false, webUrl, platformUrl, credentialStorage: storage })}\\n`,\n );\n });\n}\n","import { getSessionWithBearer } from \"@keystrokehq/auth/cli\";\nimport type { Command } from \"commander\";\nimport { getAccessToken } from \"../../auth/credentials\";\nimport { createCliConfig, getCredentialStorage, 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 credentialStorage = getCredentialStorage(config);\n const token = getAccessToken(platformUrl, { storage: credentialStorage });\n\n if (!token) {\n process.stdout.write(\n `${JSON.stringify({\n authenticated: false,\n webUrl,\n platformUrl,\n credentialStorage,\n })}\\n`,\n );\n return;\n }\n\n try {\n const user = await getSessionWithBearer(platformUrl, token);\n const organizations = user ? await listOrganizations(config).catch(() => []) : [];\n\n process.stdout.write(\n `${JSON.stringify({\n authenticated: user !== null,\n webUrl,\n platformUrl,\n credentialStorage,\n user,\n organizations: organizations.map((entry) => ({\n slug: entry.organization.slug,\n name: entry.organization.name,\n role: entry.role,\n })),\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 { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { isNewerVersion } from \"./compare-version\";\n\nexport const SDK_PACKAGE_NAME = \"@keystrokehq/keystroke\";\nexport const CLI_PACKAGE_NAME = \"@keystrokehq/cli\";\n\nconst KEYSTROKE_SCOPE = \"@keystrokehq/\";\nconst REGISTRY_TIMEOUT_MS = 3_000;\n\ntype ManagedPackage = {\n name: string;\n};\n\ntype OutdatedPackage = {\n name: string;\n installed?: string;\n latest?: string;\n};\n\nfunction shouldSkip(): boolean {\n return Boolean(\n process.env.KEYSTROKE_SKIP_UPDATE || process.env.CI === \"true\" || process.env.CI === \"1\",\n );\n}\n\nfunction readPackageJson(root: string):\n | {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n }\n | undefined {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n } catch {\n return undefined;\n }\n}\n\n/** Local/workspace specs are left alone; everything else (ranges and exact pins) must stay current. */\nexport function isLocalSdkSpec(spec: string | undefined): boolean {\n if (!spec) {\n return true;\n }\n\n const trimmed = spec.trim();\n return (\n trimmed.startsWith(\"workspace:\") || trimmed.startsWith(\"link:\") || trimmed.startsWith(\"file:\")\n );\n}\n\nfunction listManagedKeystrokePackages(root: string): ManagedPackage[] {\n const pkg = readPackageJson(root);\n if (!pkg) {\n return [];\n }\n\n const packages: ManagedPackage[] = [];\n\n for (const [name, spec] of Object.entries({\n ...pkg.dependencies,\n ...pkg.devDependencies,\n })) {\n // CLI is global + self-updating; never gate project deps on a local copy.\n if (name === CLI_PACKAGE_NAME) {\n continue;\n }\n if (name.startsWith(KEYSTROKE_SCOPE) && !isLocalSdkSpec(spec)) {\n packages.push({ name });\n }\n }\n\n return packages;\n}\n\nfunction readInstalledVersion(root: string, packageName: string): string | undefined {\n const path = join(root, \"node_modules\", ...packageName.split(\"/\"), \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n const pkg = JSON.parse(readFileSync(path, \"utf8\")) as { version?: string };\n const version = pkg.version?.trim();\n return version || undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function fetchLatestPackageVersion(packageName: string): Promise<string | undefined> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REGISTRY_TIMEOUT_MS);\n\n try {\n const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`, {\n signal: controller.signal,\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) {\n return undefined;\n }\n\n const payload = (await response.json()) as {\n \"dist-tags\"?: { latest?: string };\n };\n return payload[\"dist-tags\"]?.latest?.trim() || undefined;\n } catch {\n return undefined;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction formatOutdatedLine(pkg: OutdatedPackage): string {\n if (pkg.installed && pkg.latest) {\n return `- ${pkg.name} (${pkg.installed} → ${pkg.latest})`;\n }\n if (pkg.latest) {\n return `- ${pkg.name} (not installed → ${pkg.latest})`;\n }\n return `- ${pkg.name}`;\n}\n\nasync function packagesNeedingUpdate(\n root: string,\n packages: ManagedPackage[],\n): Promise<OutdatedPackage[]> {\n const checks = await Promise.all(\n packages.map(async (pkg): Promise<OutdatedPackage | undefined> => {\n const installed = readInstalledVersion(root, pkg.name);\n const latest = await fetchLatestPackageVersion(pkg.name);\n\n // Unknown registry: only fail when the package isn't present locally.\n if (!latest) {\n return installed ? undefined : { name: pkg.name, installed };\n }\n\n if (!installed || isNewerVersion(latest, installed)) {\n return { name: pkg.name, installed, latest };\n }\n\n return undefined;\n }),\n );\n\n return checks.flatMap((pkg) => (pkg ? [pkg] : []));\n}\n\n/**\n * Require @keystrokehq/* project dependencies to be on latest before build/deploy.\n * Skips `@keystrokehq/cli` (global + self-updating). Throws instead of auto-installing.\n */\nexport async function ensureSdkCurrent(root: string): Promise<void> {\n if (shouldSkip()) {\n return;\n }\n\n const packages = listManagedKeystrokePackages(root);\n if (packages.length === 0) {\n return;\n }\n\n const outdated = await packagesNeedingUpdate(root, packages);\n if (outdated.length === 0) {\n return;\n }\n\n const lines = outdated.map(formatOutdatedLine).join(\"\\n\");\n throw new ExpectedCliError(\n `Outdated @keystrokehq packages:\\n${lines}\\n\\nPlease run \\`keystroke update\\` before continuing.`,\n );\n}\n","import type { Command } from \"commander\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\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 await ensureSdkCurrent(root);\n const { buildApp } = await import(\"@keystrokehq/build\");\n await buildApp({ root });\n process.stdout.write(`Built ${root}\\n`);\n } catch (error) {\n const normalized =\n error instanceof Error && error.message.includes(\"Cannot export schema to JSON Schema\")\n ? new ExpectedCliError(error.message)\n : error;\n process.stderr.write(`Build failed: ${formatCliError(normalized, \"unknown error\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\n\n/** Directory holding bundled tool configs (oxlint/vitest). Ships under dist/ for end users. */\nexport function resolveConfigsDir(fromModuleUrl = import.meta.url): string {\n const cliRoot = resolveCliRoot(fromModuleUrl);\n // Source first so contributor edits apply without a rebuild; end users only have dist/.\n const candidates = [join(cliRoot, \"configs\"), join(cliRoot, \"dist\", \"configs\")];\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(\"Bundled tool configs not found — run `pnpm --filter @keystrokehq/cli build`\");\n}\n","import { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Resolve a bundled dev tool's executable from the CLI's own node_modules. The tools\n * (oxlint, vitest, typescript/`tsc6`) ship as CLI dependencies, so user projects don't\n * declare them. Their bins are Node launchers, so callers run them with `node <bin>`.\n */\nexport function resolveToolBin(pkg: string, binName: string): string {\n const packageJsonPath = require.resolve(`${pkg}/package.json`);\n const { bin } = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n\n const relative = typeof bin === \"string\" ? bin : bin?.[binName];\n if (!relative) {\n throw new Error(`Package \"${pkg}\" does not expose a \"${binName}\" bin`);\n }\n\n return join(dirname(packageJsonPath), relative);\n}\n\n/** Run a bundled tool bin as a child process, inheriting stdio. Resolves with its exit code. */\nexport function runToolBin(options: {\n pkg: string;\n binName: string;\n args: string[];\n cwd: string;\n env?: NodeJS.ProcessEnv;\n}): Promise<number> {\n const binPath = resolveToolBin(options.pkg, options.binName);\n\n return new Promise((resolve, reject) => {\n const child = spawn(process.execPath, [binPath, ...options.args], {\n cwd: options.cwd,\n env: options.env ?? process.env,\n stdio: \"inherit\",\n });\n\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => resolve(code ?? 1));\n });\n}\n","import { join } from \"node:path\";\nimport { resolveConfigsDir } from \"./resolve-configs-dir\";\nimport { runToolBin } from \"./run-tool\";\n\n/** Lint the project with the bundled oxlint + config. Resolves with the oxlint exit code. */\nexport function runLint(root: string, args: string[] = [\".\"]): Promise<number> {\n const config = join(resolveConfigsDir(), \"oxlintrc.json\");\n return runToolBin({\n pkg: \"oxlint\",\n binName: \"oxlint\",\n args: [\"--config\", config, ...args],\n cwd: root,\n });\n}\n","import { join } from \"node:path\";\nimport { runToolBin } from \"./run-tool\";\n\n/**\n * Type-check the project with the bundled TypeScript. tsdown (build) strips types without\n * checking them, so build/deploy call this as a gate. Resolves with the tsc exit code.\n *\n * Catalog `typescript` is `@typescript/typescript6`, whose bin is `tsc6` (not `tsc`).\n */\nexport async function runTypecheck(root: string): Promise<number> {\n return runToolBin({\n pkg: \"typescript\",\n binName: \"tsc6\",\n args: [\"--noEmit\", \"-p\", join(root, \"tsconfig.json\")],\n cwd: root,\n });\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport { mergeFilteredArtifact, packProjectArtifact } from \"@keystrokehq/storage/pack-artifact\";\nimport type { Command } from \"commander\";\nimport type { ProjectSourceFile } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getWebUrl } from \"../config\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { formatCliError, isUnreachableServerError } from \"../errors/format-cli-error\";\nimport { createCliPlatformClient } from \"../platform-client\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { resolveActiveOrganization } from \"../resolve-organization-target\";\nimport { resolveActiveProjectId } from \"../resolve-project-target\";\nimport { missingProjectRefError } from \"../target-hints\";\nimport { reportCliException, trackCliEvent } from \"../telemetry/init\";\nimport { runLint } from \"../tooling/run-lint\";\nimport { runTypecheck } from \"../tooling/run-typecheck\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\n\nconst POLL_INTERVAL_MS = 2_000;\nconst DEPLOY_TIMEOUT_MS = 120_000;\nconst SOURCE_BLOB_CONTENT_TYPE = \"text/plain; charset=utf-8\";\n\nconst ARTIFACT_STORAGE_NETWORK_MESSAGE =\n \"Could not reach artifact storage. Check your network/DNS and retry; \" +\n \"corporate proxies or DNS policies sometimes block storage hosts.\";\n\nfunction asExpectedAuthoringOrNetworkError(error: unknown): unknown {\n if (!(error instanceof Error)) {\n return error;\n }\n\n if (error.message.includes(\"Cannot export schema to JSON Schema\")) {\n return new ExpectedCliError(error.message);\n }\n\n const causeMessage =\n error.cause instanceof Error\n ? error.cause.message\n : typeof error.cause === \"string\"\n ? error.cause\n : \"\";\n const combined = `${error.message}\\n${causeMessage}`;\n if (\n isUnreachableServerError(error) &&\n /t3\\.storage\\.dev|storage\\.dev|Artifact upload|Source blob upload/i.test(combined)\n ) {\n return new ExpectedCliError(ARTIFACT_STORAGE_NETWORK_MESSAGE);\n }\n\n return error;\n}\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 await ensureSdkCurrent(root);\n // Deploy is the gate: lint + typecheck before building and shipping.\n if ((await runLint(root)) !== 0) {\n throw new ExpectedCliError(\"lint failed\");\n }\n if ((await runTypecheck(root)) !== 0) {\n throw new ExpectedCliError(\"typecheck failed\");\n }\n const config = createCliConfig();\n await resolveActiveOrganization(config, root);\n const client = createCliPlatformClient(config);\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 }).catch((error: unknown) => {\n if (error instanceof Error && isUnreachableServerError(error)) {\n throw new ExpectedCliError(ARTIFACT_STORAGE_NETWORK_MESSAGE);\n }\n throw asExpectedAuthoringOrNetworkError(error);\n });\n const sourcePromise = uploadProjectSourceSnapshot(\n client,\n project.id,\n created.artifact.id,\n sourceFiles,\n ).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : \"unknown error\";\n process.stderr.write(`Warning: failed to upload project source files: ${message}\\n`);\n });\n\n const upload = await uploadPromise;\n await sourcePromise;\n\n if (!upload.ok) {\n throw new Error(`Artifact upload failed (${upload.status})`);\n }\n\n const completed = await client.artifacts.complete(project.id, created.artifact.id);\n process.stdout.write(`Deploy ${completed.artifact.id} uploaded\\n`);\n\n const deadline = Date.now() + DEPLOY_TIMEOUT_MS;\n while (Date.now() < deadline) {\n const current = await client.projects.get(project.id);\n if (current.status === \"active\") {\n config.set(\"apiTarget\", \"platform\");\n process.stdout.write(`Project active${current.baseUrl ? `: ${current.baseUrl}` : \"\"}\\n`);\n return;\n }\n\n if (current.status === \"failed\") {\n throw new Error(current.lastError ?? \"Project runtime failed\");\n }\n\n await sleep(POLL_INTERVAL_MS);\n }\n\n throw new Error(\"Timed out waiting for project to become active\");\n}\n\nexport function registerDeployCommand(program: Command): void {\n program\n .command(\"deploy\")\n .description(\"Build, upload, and deploy the project to the platform\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\n \"--filter <entry>\",\n \"Build and deploy only matching module entry keys (repeatable)\",\n (value: string, previous: string[]) => [...previous, value],\n [],\n )\n .action(async (options) => {\n let config: ReturnType<typeof createCliConfig> | undefined;\n try {\n config = createCliConfig();\n const root = resolveProjectRoot(options.dir);\n const projectId = await resolveActiveProjectId(config, root);\n if (!projectId) {\n throw missingProjectRefError();\n }\n\n await runDeploy({\n dir: options.dir,\n projectId,\n filter: options.filter.length > 0 ? options.filter : undefined,\n });\n await trackCliEvent(\"cli:deploy\", {\n projectId,\n });\n } catch (error) {\n const normalized = asExpectedAuthoringOrNetworkError(error);\n await reportCliException(normalized, { command: \"deploy\", operation: \"cli.deploy\" });\n const message = formatCliError(normalized, \"unknown error\", {\n webUrl: config ? getWebUrl(config) : undefined,\n });\n process.stderr.write(`Deploy failed: ${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { resolvePublicPlatformOrigin } from \"@keystrokehq/shared\";\n\nimport { loadProjectEnv } from \"./project/load-project-env\";\n\n/** Local platform API origin from the project `.env` (`PUBLIC_PLATFORM_URL`). */\nexport function resolveLocalApiOrigin(fromDir = process.cwd()): string {\n loadProjectEnv(fromDir);\n return resolvePublicPlatformOrigin(process.env);\n}\n","/** Strip dev-only Node flags so the API child loads built `dist/`, not package `src/`. */\nexport function runtimeChildNodeOptions(nodeOptions: string | undefined): string | undefined {\n if (!nodeOptions?.trim()) {\n return undefined;\n }\n\n const parts = nodeOptions.trim().split(/\\s+/);\n const cleaned: string[] = [];\n\n for (let index = 0; index < parts.length; index++) {\n const part = parts[index]!;\n if (part === \"--conditions=development\") {\n continue;\n }\n if (part === \"--conditions\" && parts[index + 1] === \"development\") {\n index++;\n continue;\n }\n cleaned.push(part);\n }\n\n const result = cleaned.join(\" \").trim();\n return result || undefined;\n}\n\nexport function runtimeChildEnv(\n parentEnv: NodeJS.ProcessEnv,\n overrides: Record<string, string>,\n): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = { ...parentEnv, ...overrides };\n delete env.KEYSTROKE_DEV;\n\n const nodeOptions = runtimeChildNodeOptions(env.NODE_OPTIONS);\n if (nodeOptions) {\n env.NODE_OPTIONS = nodeOptions;\n } else {\n delete env.NODE_OPTIONS;\n }\n\n const hasExplicitDatabaseUrl = Boolean(env.DATABASE_URL?.trim());\n if (!hasExplicitDatabaseUrl) {\n // sqlite default: drop Infisical POSTGRES_* (platform/orchestrator only) so they\n // don't accidentally point the standalone control-plane DB at dev postgres.\n for (const key of [\n \"POSTGRES_HOST\",\n \"POSTGRES_PORT\",\n \"POSTGRES_DB\",\n \"POSTGRES_USER\",\n \"POSTGRES_PASSWORD\",\n \"DATABASE_SEARCH_PATH\",\n ]) {\n delete env[key];\n }\n // Standalone uses sqlite control-plane DB (public + per-org files under ./data).\n env.DATABASE_URL = \"file:./data/public.db\";\n }\n\n env.KEYSTROKE_APP_MODE ??= \"standalone\";\n\n return env;\n}\n","import { pathToFileURL } from \"node:url\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { listenPortFromPublicUrl } from \"@keystrokehq/shared\";\nimport { runtimeChildEnv } from \"./runtime-child-env\";\n\nexport type BootstrapRunOptions = {\n root: string;\n runtimeNodeModules: string;\n apiPort: number;\n};\n\nexport type BootstrapRun = {\n cwd: string;\n args: string[];\n env: NodeJS.ProcessEnv;\n};\n\n/** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */\nexport async function resolveBootstrapRun(options: BootstrapRunOptions): Promise<BootstrapRun> {\n const { resolveRuntimeBuildArtifact } = await import(\"@keystrokehq/build\");\n const loader = pathToFileURL(\n resolveRuntimeBuildArtifact(options.runtimeNodeModules, \"dist/runtime-loader.mjs\"),\n ).href;\n const bootstrap = resolveRuntimeBuildArtifact(\n options.runtimeNodeModules,\n \"dist/standalone-bootstrap.mjs\",\n );\n\n const args: string[] = [`--import=${loader}`];\n const envFile = join(options.root, \".env\");\n\n if (existsSync(envFile)) {\n args.push(`--env-file=${envFile}`);\n }\n\n args.push(bootstrap);\n\n const childEnv = runtimeChildEnv(process.env, {\n KEYSTROKE_ROOT: options.root,\n KEYSTROKE_RUNTIME_NODE_MODULES: options.runtimeNodeModules,\n KEYSTROKE_APP_MODE: \"standalone\",\n });\n childEnv.PORT = String(listenPortFromPublicUrl(childEnv.PUBLIC_PLATFORM_URL, options.apiPort));\n\n return {\n cwd: options.root,\n args,\n env: childEnv,\n };\n}\n","import { spawn, type ChildProcess } from \"node:child_process\";\n\nexport type ManagedProcess = {\n name: string;\n child: ChildProcess;\n};\n\nexport function waitForExit(child: ChildProcess): Promise<number | null> {\n return new Promise((resolve) => {\n child.on(\"exit\", (code) => resolve(code ?? null));\n });\n}\n\nexport async function runUntilExit(processes: ManagedProcess[]): Promise<number | null> {\n const shutdown = (signal: NodeJS.Signals = \"SIGTERM\") => {\n for (const { child } of processes) {\n if (!child.killed && child.pid !== undefined) {\n child.kill(signal);\n }\n }\n };\n\n const onSignal = () => {\n shutdown(\"SIGINT\");\n process.exit(0);\n };\n\n process.on(\"SIGINT\", onSignal);\n process.on(\"SIGTERM\", onSignal);\n\n try {\n const results = await Promise.race(\n processes.map(async ({ name, child }) => {\n const code = await waitForExit(child);\n return { name, code };\n }),\n );\n\n if (results.code !== 0 && results.code !== null) {\n shutdown();\n throw new Error(`${results.name} exited with status ${results.code}`);\n }\n\n shutdown();\n return results.code;\n } finally {\n process.off(\"SIGINT\", onSignal);\n process.off(\"SIGTERM\", onSignal);\n }\n}\n\nexport function spawnNodeScript(options: {\n cwd: string;\n args: string[];\n env: NodeJS.ProcessEnv;\n}): ChildProcess {\n return spawn(\"node\", options.args, {\n cwd: options.cwd,\n env: options.env,\n stdio: \"inherit\",\n });\n}\n","import { spawnSync } from \"node:child_process\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nconst NATIVE_PACKAGES = [\"better-sqlite3\"] as const;\n\nfunction isMissingBindingsError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"Could not locate the bindings file\");\n}\n\nfunction rebuildNativePackage(require: NodeRequire, pkg: string): void {\n const pkgDir = dirname(require.resolve(`${pkg}/package.json`));\n const npm = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n const result = spawnSync(npm, [\"run\", \"install\"], { cwd: pkgDir, stdio: \"inherit\" });\n\n if (result.status !== 0) {\n throw new Error(`Failed to build ${pkg} native bindings. Try: pnpm rebuild -g ${pkg}`);\n }\n}\n\n/** Compile native addons when pnpm skipped dependency install scripts (common on global install). */\nexport function ensureNativeDeps(nodeModulesRoot: string): void {\n const anchor = join(nodeModulesRoot, \"@keystrokehq\", \"server\", \"package.json\");\n const require = createRequire(anchor);\n\n for (const pkg of NATIVE_PACKAGES) {\n try {\n require(pkg);\n } catch (error) {\n if (!isMissingBindingsError(error)) {\n throw error;\n }\n\n process.stderr.write(`Building ${pkg} native bindings…\\n`);\n rebuildNativePackage(require, pkg);\n require(pkg);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/** Directory whose `node_modules/@keystrokehq/runtime` ships with the CLI pack. */\nexport function resolveCliRuntimeNodeModules(cliRoot: string): string {\n let dir = cliRoot;\n\n while (dir !== dirname(dir)) {\n const nodeModules = join(dir, \"node_modules\");\n if (existsSync(join(nodeModules, \"@keystrokehq\", \"runtime\"))) {\n return nodeModules;\n }\n dir = dirname(dir);\n }\n\n throw new Error(\n \"Keystroke runtime packages are missing. Reinstall or repack the CLI (expected @keystrokehq/runtime in node_modules).\",\n );\n}\n","/**\n * `keystroke dev` — watch-build + API restart.\n *\n * NOT true hot reload. On src/ changes tsdown rebuilds dist/, then we stop and\n * boot the API again so route discovery picks up new agents/workflows/triggers.\n */\nimport type { Command } from \"commander\";\nimport type { ChildProcess } from \"node:child_process\";\nimport { createCliConfig, getConfigDir } from \"../config\";\nimport { resolveLocalApiOrigin } from \"../resolve-local-api-origin\";\nimport { clearDevSession, writeDevSession } from \"../dev-session\";\nimport { resolveBootstrapRun } from \"../project/bootstrap-run\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { spawnNodeScript } from \"../process/run-processes\";\nimport { ensureNativeDeps } from \"../runtime/ensure-native-deps\";\nimport { resolveCliRuntimeNodeModules } from \"../runtime/resolve-runtime-node-modules\";\nimport { trackCliEvent } from \"../telemetry/init\";\n\nconst DEV_BANNER = \"keystroke dev: watch rebuilds dist/ and restarts the API — not hot reload.\\n\";\n\ntype DevOptions = {\n dir: string;\n port?: number;\n};\n\nfunction stopChild(child: ChildProcess | undefined): void {\n if (child && !child.killed && child.pid !== undefined) {\n child.kill(\"SIGTERM\");\n }\n}\n\nfunction resolveDevServerUrl(root: string, portOverride?: number): string {\n const url = new URL(resolveLocalApiOrigin(root));\n if (portOverride !== undefined) {\n url.port = String(portOverride);\n }\n return url.origin;\n}\n\nexport async function runDev(options: DevOptions): Promise<void> {\n void trackCliEvent(\"cli:dev_started\").catch(() => {});\n\n const root = resolveProjectRoot(options.dir);\n\n const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));\n ensureNativeDeps(runtimeNodeModules);\n\n const cliConfig = createCliConfig();\n const configDir = getConfigDir(cliConfig);\n\n process.stdout.write(DEV_BANNER);\n\n const serverUrl = resolveDevServerUrl(root, options.port);\n const apiPort = Number(new URL(serverUrl).port || 80);\n\n writeDevSession(\n {\n pid: process.pid,\n port: apiPort,\n root,\n serverUrl,\n },\n configDir,\n );\n\n let apiChild: ChildProcess | undefined;\n let restarting = false;\n let firstBoot = true;\n\n const restartApi = async () => {\n if (restarting) {\n return;\n }\n\n restarting = true;\n stopChild(apiChild);\n const bootstrap = await resolveBootstrapRun({\n root,\n runtimeNodeModules,\n apiPort,\n });\n apiChild = spawnNodeScript(bootstrap);\n\n if (firstBoot) {\n firstBoot = false;\n process.stdout.write(`API: ${serverUrl}\\n`);\n } else {\n process.stdout.write(\"API restarted after dist rebuild (not hot reload).\\n\");\n }\n\n restarting = false;\n };\n\n const shutdown = () => {\n clearDevSession(configDir);\n stopChild(apiChild);\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n try {\n const { watchApp } = await import(\"@keystrokehq/build\");\n await watchApp({\n root,\n clean: false,\n onRebuild: restartApi,\n });\n } finally {\n process.off(\"SIGINT\", shutdown);\n process.off(\"SIGTERM\", shutdown);\n clearDevSession(configDir);\n stopChild(apiChild);\n }\n}\n\nexport function registerDevCommand(program: Command): void {\n program\n .command(\"dev\")\n .description(\"Watch src/, rebuild dist/, and restart the API (not true hot reload)\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\"--port <number>\", \"API port\", (value) => Number(value))\n .action(async (options) => {\n try {\n await runDev({\n dir: options.dir,\n port: options.port,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Dev failed\";\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { McpReadClient } from \"@keystrokehq/mcp\";\n\ntype ToolResultLike = {\n content?: Array<{ type?: string; text?: string }>;\n};\n\n/**\n * Render an MCP tool result for the terminal. The docs tools return text/markdown\n * blocks (search hits, file contents, sandbox stdout/stderr), so we pass them through\n * verbatim and only fall back to JSON when a result carries no text.\n */\nexport function renderToolResult(result: unknown): string {\n const blocks = (result as ToolResultLike)?.content;\n if (Array.isArray(blocks)) {\n const text = blocks\n .filter((block) => block?.type === \"text\" && typeof block.text === \"string\")\n .map((block) => block.text)\n .join(\"\\n\");\n if (text.length > 0) {\n return text;\n }\n }\n return JSON.stringify(result, null, 2);\n}\n\n/** Call a docs MCP tool and render its result as text. */\nexport async function callDocsTool(\n client: McpReadClient,\n name: string,\n args: Record<string, unknown>,\n): Promise<string> {\n const result = await client.callTool({ name, arguments: args });\n return renderToolResult(result);\n}\n","import { resolveDocsMcpUrl } from \"@keystrokehq/shared\";\nimport type Conf from \"conf\";\n\nimport { getWebUrl, type CliConfig } from \"../../config\";\n\n/**\n * Public Keystroke docs MCP endpoint (Mintlify-hosted, no auth).\n * Derived from the configured web URL; `KEYSTROKE_DOCS_MCP_URL` overrides for dev/testing.\n */\nexport function getDocsMcpUrl(config: Conf<CliConfig>): string {\n return resolveDocsMcpUrl({\n webUrl: getWebUrl(config),\n override: process.env.KEYSTROKE_DOCS_MCP_URL,\n });\n}\n","import { withMcpReadClient } from \"@keystrokehq/mcp\";\nimport { DOCS_QUERY_TOOL } from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { callDocsTool } from \"./run-docs\";\nimport { getDocsMcpUrl } from \"./docs-mcp-url\";\n\nexport function registerDocsQueryCommand(docs: Command): void {\n docs\n .command(\"query\")\n .description(\n \"Read the Keystroke docs filesystem with a shell-style command (cat, rg, ls, tree)\",\n )\n .argument(\"<command>\", 'Read-only command, e.g. \"cat /quickstart.mdx\" or \"rg -il auth /\"')\n .action((command: string) =>\n runStandaloneCliCommand(\"Docs query failed\", async ({ config }) => {\n const url = getDocsMcpUrl(config);\n // The command runs in Mintlify's server-side sandbox, not on this machine.\n const output = await withMcpReadClient(url, (client) =>\n callDocsTool(client, DOCS_QUERY_TOOL, { command }),\n );\n process.stdout.write(`${output}\\n`);\n }),\n );\n}\n","import { withMcpReadClient } from \"@keystrokehq/mcp\";\nimport { DOCS_SEARCH_TOOL, normalizeDocsSearchPaths } from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { callDocsTool } from \"./run-docs\";\nimport { getDocsMcpUrl } from \"./docs-mcp-url\";\n\nexport function registerDocsSearchCommand(docs: Command): void {\n docs\n .command(\"search\")\n .description(\"Search the Keystroke documentation for relevant pages and examples\")\n .argument(\"<query>\", \"Search query\")\n .action((query: string) =>\n runStandaloneCliCommand(\"Docs search failed\", async ({ config }) => {\n const url = getDocsMcpUrl(config);\n const output = await withMcpReadClient(url, (client) =>\n callDocsTool(client, DOCS_SEARCH_TOOL, { query }),\n );\n // Mintlify returns extensionless web routes; query needs `.mdx` filesystem paths.\n process.stdout.write(`${normalizeDocsSearchPaths(output)}\\n`);\n }),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { registerDocsQueryCommand } from \"./query\";\nimport { registerDocsSearchCommand } from \"./search\";\n\nexport function registerDocsCommand(program: Command): void {\n const docs = program.command(\"docs\").description(\"Search and read the Keystroke documentation\");\n\n registerDocsSearchCommand(docs);\n registerDocsQueryCommand(docs);\n}\n","import type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { readCliVersion } from \"../../version\";\n\nconst MESSAGE_WRITING_GUIDE = `\nWrite the message for a Keystroke team member with zero context on your session:\n\n- Start with 1-2 plain sentences on what you were building and what happened.\n- Then a numbered list with one item per distinct issue.\n- Lead each item with the plain-English problem and what you expected instead;\n put technical detail (paths, commands, error text) after — not instead.\n- Avoid internal function names, codenames, or jargon a cold reader can't know.\n- Never include secrets, tokens, credentials, proprietary code, or personal data.\n\nThe message renders in Slack as mrkdwn: *bold*, _italic_, \\`code\\`.\n\nTemplate:\n\n keystroke feedback create --message \"$(cat <<'EOF'\n *Quick Recap and Context*\n\n One or two sentences on what you were building and what happened.\n\n -------------------------\n\n *Feedback for Keystroke Team*\n\n *1. Plain-English title of the issue*\n What happened, what you expected, and any workaround. Technical detail last.\n EOF\n )\"\n`;\n\nexport function registerFeedbackCreateCommand(feedback: Command): void {\n feedback\n .command(\"create\")\n .description(\n \"Send a build-experience report (snags, unclear docs, papercuts) to the Keystroke team\",\n )\n .requiredOption(\n \"--message <text>\",\n \"Freeform report (recap + feedback). Prefer a heredoc for multi-line messages.\",\n )\n .addHelpText(\"after\", MESSAGE_WRITING_GUIDE)\n .action((options: { message: string }) =>\n runStandaloneCliCommand(\"Feedback create failed\", async ({ config }) => {\n await resolveActiveOrganization(config);\n const platform = createCliPlatformClient(config);\n const linked = readLinkedProjectConfig();\n\n await platform.agentFeedback.submit({\n message: options.message,\n cliVersion: readCliVersion(),\n ...(linked.project ? { projectSlug: linked.project } : {}),\n });\n\n process.stdout.write(`${JSON.stringify({ ok: true }, null, 2)}\\n`);\n }),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { registerFeedbackCreateCommand } from \"./create\";\n\nexport function registerFeedbackCommand(program: Command): void {\n const feedback = program\n .command(\"feedback\")\n .description(\"Send build-experience reports to the Keystroke team\");\n\n registerFeedbackCreateCommand(feedback);\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 \"../projects/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 { resolveCliListOptions } from \"../../resolve-list-options\";\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(\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(async (options: { status?: string; kind?: string; admin?: boolean }) => {\n const config = createCliConfig();\n try {\n // History filters by project id. `--admin` ignores a linked project;\n // an explicit `--project` still narrows. Undefined project lists org-wide.\n const listOptions = await resolveCliListOptions(config, { admin: options.admin });\n await runHistoryList(config, {\n ...(listOptions.projectId ? { project: listOptions.projectId } : {}),\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 ...(listOptions.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 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","import { ExpectedCliError } from \"../errors/expected-cli-error\";\n\nconst 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 ExpectedCliError(\"Project name is required\");\n }\n\n if (!KEBAB_CASE.test(trimmed)) {\n throw new ExpectedCliError(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","import { readdir, readFile, stat, writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport type TemplateVariables = {\n projectName: string;\n};\n\nfunction renderTemplate(content: string, variables: TemplateVariables): string {\n return content.replaceAll(\"{{projectName}}\", variables.projectName);\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 { writeFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\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: \"keystroke lint\",\n typecheck: \"keystroke typecheck\",\n test: \"keystroke test\",\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: \"latest\",\n },\n devDependencies: {\n \"@types/node\": \"latest\",\n typescript: \"latest\",\n vitest: \"latest\",\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","import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { readCliVersion } from \"../version\";\n\nconst VERSION_MARKER_RE = /<!-- keystroke-agents-guide: (.+?) -->/;\n\nexport function agentsGuideDir(projectRoot: string): string {\n return join(projectRoot, \".agents\");\n}\n\nexport function agentsMdPath(projectRoot: string): string {\n return join(projectRoot, \"AGENTS.md\");\n}\n\n/**\n * Append the CLI version as a trailing HTML comment so auto-sync can detect\n * staleness without writing a sidecar `.agents/` directory. The marker is\n * invisible in rendered markdown and re-stamped (not stacked) on each write.\n */\nexport function stampAgentsGuideVersion(content: string, version = readCliVersion()): string {\n const stripped = content.replace(/\\n*<!-- keystroke-agents-guide: .+? -->\\n*$/, \"\\n\");\n const base = stripped.endsWith(\"\\n\") ? stripped : `${stripped}\\n`;\n return `${base}\\n<!-- keystroke-agents-guide: ${version} -->\\n`;\n}\n\nexport async function readBundleVersion(projectRoot: string): Promise<string | null> {\n try {\n const content = await readFile(agentsMdPath(projectRoot), \"utf8\");\n return content.match(VERSION_MARKER_RE)?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\n\nconst SKILLS_BUNDLE = \"skills-bundle\";\n\nexport function resolveSkillsBundleDir(fromModuleUrl = import.meta.url): string {\n const cliRoot = resolveCliRoot(fromModuleUrl);\n // The real skills source lives in `packages/skills/`. Check it first so\n // contributor edits are picked up without rebuilding the CLI. End users\n // don't have those paths — they get the bundled copy under `dist/`.\n const candidates = [\n join(cliRoot, \"..\", \"..\", \"packages\", \"skills\", \"bundled\"),\n join(cliRoot, \"..\", \"..\", \"packages\", \"skills\", \"dist\"),\n join(cliRoot, \"dist\", SKILLS_BUNDLE),\n join(cliRoot, SKILLS_BUNDLE),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(join(candidate, \"_AGENTS.md\"))) {\n return candidate;\n }\n }\n\n throw new Error(\"Bundled AGENTS guide not found — run `pnpm --filter @keystrokehq/cli build`\");\n}\n","import { lstat, mkdir, readFile, rm, symlink, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative } from \"node:path\";\nimport { agentsMdPath, stampAgentsGuideVersion } from \"./agents-guide-version\";\nimport { resolveSkillsBundleDir } from \"./resolve-skills-bundle-dir\";\n\nfunction isSymlinkUnsupported(error: unknown): boolean {\n if (!error || typeof error !== \"object\" || !(\"code\" in error)) {\n return false;\n }\n const code = error.code;\n return code === \"EPERM\" || code === \"EACCES\" || code === \"ENOTSUP\";\n}\n\ntype CreateLink = (target: string, linkPath: string, type?: \"file\") => Promise<void>;\n\n/** Prefer a symlink; on Windows without symlink privileges, write a regular file copy. */\nexport async function ensureClaudeMdLink(\n guidePath: string,\n linkPath: string,\n createLink: CreateLink = symlink,\n): Promise<void> {\n await mkdir(dirname(linkPath), { recursive: true });\n await rm(linkPath, { recursive: true, force: true });\n\n const target = relative(dirname(linkPath), guidePath);\n try {\n await createLink(target, linkPath, \"file\");\n } catch (error) {\n if (!isSymlinkUnsupported(error)) {\n throw error;\n }\n const contents = await readFile(guidePath, \"utf8\");\n await writeFile(linkPath, contents);\n }\n}\n\n/** Writes AGENTS.md from the CLI bundle and recreates the CLAUDE.md symlink (or copy). */\nexport async function scaffoldAgentsGuide(\n projectRoot: string,\n fromModuleUrl = import.meta.url,\n): Promise<void> {\n const bundleDir = resolveSkillsBundleDir(fromModuleUrl);\n const guidePath = agentsMdPath(projectRoot);\n\n const agentsStat = await lstat(guidePath).catch(() => null);\n if (agentsStat?.isSymbolicLink()) {\n await rm(guidePath, { force: true });\n }\n\n const bundle = await readFile(join(bundleDir, \"_AGENTS.md\"), \"utf8\");\n await writeFile(guidePath, stampAgentsGuideVersion(bundle));\n\n await ensureClaudeMdLink(guidePath, join(projectRoot, \"CLAUDE.md\"));\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\nimport { stripConfigCommentsPreservingLength } from \"./read-project-config\";\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\nexport type LinkedProjectConfigInput = {\n project?: string;\n organization?: string;\n};\n\nfunction upsertStringLiteral(\n source: string,\n key: \"project\" | \"organization\",\n value: string | undefined,\n): string {\n const stripped = stripConfigCommentsPreservingLength(source);\n const entryPattern = new RegExp(`\\\\b${key}\\\\s*:\\\\s*(['\"])[^'\"]*\\\\1,?\\\\s*\\\\n?`);\n const entry = value === undefined ? undefined : ` ${key}: \"${value}\",\\n`;\n\n const match = stripped.match(entryPattern);\n if (match?.index !== undefined) {\n const start = match.index;\n const end = start + match[0].length;\n if (value === undefined) {\n return source.slice(0, start) + source.slice(end);\n }\n return source.slice(0, start) + entry! + source.slice(end);\n }\n\n if (value === undefined) {\n return source;\n }\n\n const defineConfigPattern = /defineConfig\\(\\{\\s*\\n?/;\n if (defineConfigPattern.test(source)) {\n return source.replace(defineConfigPattern, `defineConfig({\\n${entry}`);\n }\n\n throw new Error(`Could not find defineConfig({ ... }) in ${KEYSTROKE_CONFIG}`);\n}\n\nexport function upsertLinkedProjectConfig(source: string, input: LinkedProjectConfigInput): string {\n let next = source;\n if (input.project !== undefined) {\n next = upsertStringLiteral(next, \"project\", input.project);\n }\n if (input.organization !== undefined) {\n next = upsertStringLiteral(next, \"organization\", input.organization);\n }\n return next;\n}\n\n/** Write project/organization slugs into keystroke.config.ts. */\nexport function writeLinkedProjectConfig(\n input: LinkedProjectConfigInput,\n fromDir = process.cwd(),\n): string {\n const root = resolveKeystrokeConfigRoot(fromDir);\n if (!root) {\n throw new Error(`No ${KEYSTROKE_CONFIG} found — run from a keystroke project directory`);\n }\n\n const configPath = join(root, KEYSTROKE_CONFIG);\n const source = readFileSync(configPath, \"utf8\");\n const next = upsertLinkedProjectConfig(source, input);\n writeFileSync(configPath, next);\n return configPath;\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nconst EMPTY_SRC_DIRS = [\"files\", \"skills\", \"triggers\"] as const;\n\n/** Ensure standard empty `src/` folders exist (git does not track empty directories). */\nexport async function scaffoldEmptySrcDirs(targetDir: string): Promise<void> {\n await Promise.all(\n EMPTY_SRC_DIRS.map((dir) => mkdir(join(targetDir, \"src\", dir), { recursive: true })),\n );\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { PROJECT_GITIGNORE } 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, \".gitignore\"), PROJECT_GITIGNORE);\n}\n","import { existsSync } from \"node:fs\";\nimport { access, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { basename, isAbsolute, join, relative, resolve } from \"node:path\";\nimport {\n buildPlaygroundWorkspace,\n installDependencies,\n installPlaygroundDependencies,\n resolvePackageManager,\n} from \"./package-manager\";\nimport { assertProjectName, projectNameFromDirectory } from \"./project-name\";\nimport { confirmTargetDir, promptInitOptions } from \"./prompts\";\nimport { copyTemplate } from \"./copy-template\";\nimport { resolveTemplateDir } from \"./resolve-template-dir\";\nimport { applyPlaygroundManifest } from \"./project-files\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { scaffoldAgentsGuide } from \"../skills/scaffold-agents-guide\";\nimport { writeLinkedProjectConfig } from \"../project/write-project-config\";\nimport { scaffoldEmptySrcDirs } from \"./scaffold-empty-src-dirs\";\nimport { scaffoldProjectDotfiles } from \"./scaffold-project-dotfiles\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport type { InitOptions } from \"./types\";\n\nexport type RunInitOptions = InitOptions;\n\nfunction monorepoRoot(): string | null {\n const root = join(resolveCliRoot(import.meta.url), \"..\", \"..\");\n return existsSync(join(root, \"pnpm-workspace.yaml\")) ? root : null;\n}\n\nfunction resolvePlaygroundRoot(targetDir: string): string | null {\n if (process.env.KEYSTROKE_DEV !== \"1\") {\n return null;\n }\n\n const root = monorepoRoot();\n if (!root) {\n return null;\n }\n\n const rel = relative(join(root, \"playground\"), resolve(targetDir));\n return rel.length > 0 && !rel.startsWith(\"..\") && !isAbsolute(rel) ? root : null;\n}\n\n/** Example primitives the hello-world template ships; removed when --no-example is set. */\nconst EXAMPLE_FILES = [\n \"src/actions/greet.ts\",\n \"src/agents/hello.ts\",\n \"src/agents/hello.int.test.ts\",\n \"src/workflows/greeting.ts\",\n \"src/workflows/greeting.test.ts\",\n] as const;\n\nasync function removeExampleFiles(targetDir: string): Promise<void> {\n await Promise.all(EXAMPLE_FILES.map((rel) => rm(join(targetDir, rel), { force: true })));\n}\n\n/**\n * Drop the README sections that walk through the example hello agent / greeting\n * workflow — those primitives don't exist in a --no-example scaffold (e.g. MCP\n * sprite bootstrap), so shipping their usage docs is misleading. Example-only\n * prose is fenced with `<!-- example:start -->` / `<!-- example:end -->` markers\n * so this stays robust to README wording changes.\n */\nasync function stripExampleReadme(targetDir: string): Promise<void> {\n const readmePath = join(targetDir, \"README.md\");\n let content: string;\n try {\n content = await readFile(readmePath, \"utf8\");\n } catch {\n return;\n }\n\n const next = content.replace(/\\n?<!-- example:start -->\\n[\\s\\S]*?<!-- example:end -->\\n/g, \"\");\n\n if (next !== content) {\n await writeFile(readmePath, next);\n }\n}\n\nasync function directoryExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function directoryIsEmpty(path: string): Promise<boolean> {\n if (!(await directoryExists(path))) {\n return true;\n }\n\n const entries = await readdir(path);\n return entries.length === 0;\n}\n\nfunction resolveHeadlessOptions(options: RunInitOptions): {\n projectName: string;\n targetDir: string;\n} {\n const targetDir = resolve(options.directory ?? options.name ?? \"my-keystroke\");\n const projectName = assertProjectName(\n options.name ?? projectNameFromDirectory(basename(targetDir)),\n );\n\n return { projectName, targetDir };\n}\n\nexport async function runInit(\n options: RunInitOptions,\n): Promise<{ targetDir: string; projectName: string }> {\n const interactive = !options.yes && process.stdin.isTTY;\n const resolved = interactive ? await promptInitOptions(options) : resolveHeadlessOptions(options);\n const { projectName, targetDir } = resolved;\n const playgroundRoot = resolvePlaygroundRoot(targetDir);\n\n if (!(await directoryIsEmpty(targetDir))) {\n if (interactive) {\n const ok = await confirmTargetDir(targetDir);\n if (!ok) {\n throw new ExpectedCliError(\"Init cancelled\");\n }\n } else if (!options.yes) {\n throw new ExpectedCliError(\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 });\n await scaffoldEmptySrcDirs(targetDir);\n\n if (options.noExample) {\n await removeExampleFiles(targetDir);\n await stripExampleReadme(targetDir);\n }\n\n if (playgroundRoot) {\n await applyPlaygroundManifest(targetDir, projectName, playgroundRoot);\n } else {\n await scaffoldProjectDotfiles(targetDir);\n }\n\n await scaffoldAgentsGuide(targetDir);\n\n if (options.project || options.organization) {\n writeLinkedProjectConfig(\n {\n ...(options.project ? { project: options.project } : {}),\n ...(options.organization ? { organization: options.organization } : {}),\n },\n targetDir,\n );\n }\n\n if (!options.skipInstall) {\n if (playgroundRoot) {\n installPlaygroundDependencies(targetDir);\n // `link:` deps consume each package's built dist/; build so `keystroke dev`\n // works immediately instead of failing with ERR_MODULE_NOT_FOUND.\n buildPlaygroundWorkspace(playgroundRoot);\n } else {\n const manager = resolvePackageManager(options.packageManager);\n installDependencies(targetDir, manager);\n }\n }\n\n return { targetDir, projectName };\n}\n","import type { Command } from \"commander\";\nimport { runInit } from \"../init/run-init\";\nimport { getCliTargetOptions } from \"../target-options\";\nimport { reportCliException, trackCliEvent } from \"../telemetry/init\";\n\nexport function registerInitCommand(program: Command): void {\n program\n .command(\"init\")\n .description(\"Create a new keystroke project from a template\")\n .argument(\"[directory]\", \"Directory to create the project in\")\n .option(\"--name <name>\", \"Project name (kebab-case)\")\n .option(\"--template <name>\", \"Template to use\", \"hello-world\")\n .option(\"-y, --yes\", \"Skip prompts (headless mode for scripts and AI agents)\")\n .option(\"--skip-install\", \"Skip dependency installation\")\n .option(\"--pm <manager>\", \"Package manager: npm, pnpm, yarn, or bun\")\n .option(\"--no-example\", \"Scaffold without the example action, agent, and workflow\")\n .option(\"--organization <slug>\", \"Platform organization slug to write into keystroke.config.ts\")\n .action(async (directory: string | undefined, options) => {\n try {\n const project = getCliTargetOptions().projectId;\n const result = await runInit({\n directory,\n name: options.name,\n template: options.template,\n yes: options.yes,\n skipInstall: options.skipInstall,\n packageManager: options.pm,\n noExample: options.example === false,\n project,\n organization: options.organization,\n });\n\n await trackCliEvent(\"cli:init\", {\n properties: {\n template: options.template,\n skip_install: Boolean(options.skipInstall),\n },\n });\n\n process.stdout.write(\n `Created keystroke project \"${result.projectName}\" at ${result.targetDir}\\n`,\n );\n process.stdout.write(\"\\nNext steps:\\n\");\n process.stdout.write(` cd ${result.targetDir}\\n`);\n process.stdout.write(\" keystroke auth login # once\\n\");\n if (!project) {\n process.stdout.write(\n \" keystroke projects link --project <slug> # link this directory to a platform project\\n\",\n );\n }\n process.stdout.write(\n \" keystroke deploy # lint + typecheck + build + ship dist/\\n\",\n );\n } catch (error) {\n await reportCliException(error, { command: \"init\", operation: \"cli.init\" });\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 { Command } from \"commander\";\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { runLint } from \"../tooling/run-lint\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\n\nexport function registerLintCommand(program: Command): void {\n program\n .command(\"lint\")\n .description(\"Lint the project with the bundled oxlint\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .allowUnknownOption(true)\n .argument(\"[args...]\", \"Extra arguments forwarded to oxlint\")\n .action(async (args: string[], options: { dir: string }) => {\n try {\n const root = resolveProjectRoot(options.dir);\n await ensureSdkCurrent(root);\n process.exitCode = await runLint(root, args.length > 0 ? args : undefined);\n } catch (error) {\n process.stderr.write(`${formatCliError(error, \"lint failed\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { Command } from \"commander\";\nimport { join } from \"node:path\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { resolveConfigsDir } from \"../tooling/resolve-configs-dir\";\nimport { runToolBin } from \"../tooling/run-tool\";\n\nexport function registerTestCommand(program: Command): void {\n program\n .command(\"test\")\n .description(\"Run tests with the bundled vitest (--project unit|integration)\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .allowUnknownOption(true)\n .argument(\"[args...]\", \"Extra arguments forwarded to vitest\")\n .action(async (args: string[], options: { dir: string }) => {\n const root = resolveProjectRoot(options.dir);\n const config = join(resolveConfigsDir(), \"vitest.config.mjs\");\n const code = await runToolBin({\n pkg: \"vitest\",\n binName: \"vitest\",\n args: [\"run\", \"--root\", root, \"--config\", config, ...args],\n cwd: root,\n });\n process.exitCode = code;\n });\n}\n","import type { Command } from \"commander\";\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { runTypecheck } from \"../tooling/run-typecheck\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\n\nexport function registerTypecheckCommand(program: Command): void {\n program\n .command(\"typecheck\")\n .description(\"Type-check the project with the bundled TypeScript\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .action(async (options: { dir: string }) => {\n try {\n const root = resolveProjectRoot(options.dir);\n await ensureSdkCurrent(root);\n process.exitCode = await runTypecheck(root);\n } catch (error) {\n process.stderr.write(`${formatCliError(error, \"typecheck failed\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { getSessionWithBearer } from \"@keystrokehq/auth/cli\";\nimport type Conf from \"conf\";\nimport type {\n InvitableOrganizationMemberRole,\n UpdateOrganizationRequest,\n} from \"@keystrokehq/shared\";\n\nimport { getAccessToken } from \"../../auth/credentials\";\nimport type { CliConfig } from \"../../config\";\nimport { getCredentialStorage, getPlatformUrl } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/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 storage = getCredentialStorage(config);\n const token = getAccessToken(platformUrl, { storage });\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 process.stdout.write(`${JSON.stringify({ left: user.id }, null, 2)}\\n`);\n });\n}\n","import type { Command } from \"commander\";\nimport type { InvitableOrganizationMemberRole } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport {\n runOrganizationLeave,\n runOrganizationMembersInvite,\n runOrganizationMembersList,\n runOrganizationMembersRemove,\n runOrganizationMembersRole,\n runOrganizationUpdate,\n} from \"./run-organization\";\n\nfunction collectEmails(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction parseInvitableRole(role: string): InvitableOrganizationMemberRole {\n if (role === \"admin\" || role === \"builder\") {\n return role;\n }\n\n throw new Error(\"Role must be admin or builder\");\n}\n\nasync function handleOrganizationError(\n fallback: string,\n action: () => Promise<void>,\n): Promise<void> {\n const config = createCliConfig();\n try {\n await action();\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, fallback, {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n}\n\nexport function registerOrganizationCommand(program: Command): void {\n const organization = program\n .command(\"organization\")\n .alias(\"org\")\n .description(\"Manage the active organization\");\n\n organization\n .command(\"update\")\n .description(\"Update the active organization's display name\")\n .requiredOption(\"--name <name>\", \"Organization display name\")\n .action(async (options: { name: string }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Update organization failed\", async () => {\n await runOrganizationUpdate(config, { name: options.name });\n });\n });\n\n organization\n .command(\"leave\")\n .description(\"Leave the active organization\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(async (options: { yes?: boolean }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Leave organization failed\", async () => {\n if (!options.yes) {\n throw new Error(\"Pass --yes to confirm leaving the active organization\");\n }\n await runOrganizationLeave(config);\n });\n });\n\n const members = organization\n .command(\"members\")\n .description(\"Manage organization members in the active organization\");\n\n members\n .command(\"list\")\n .description(\"List members in the active organization\")\n .action(async () => {\n const config = createCliConfig();\n await handleOrganizationError(\"List organization members failed\", async () => {\n await runOrganizationMembersList(config);\n });\n });\n\n members\n .command(\"invite\")\n .description(\"Invite people to the active organization\")\n .requiredOption(\"--email <email>\", \"Email address (repeat for multiple)\", collectEmails, [])\n .requiredOption(\"--role <role>\", \"Member role (admin or builder)\")\n .action(async (options: { email: string[]; role: string }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Invite organization members failed\", async () => {\n await runOrganizationMembersInvite(config, {\n emails: options.email,\n role: parseInvitableRole(options.role),\n });\n });\n });\n\n members\n .command(\"role\")\n .description(\"Update a member's role in the active organization\")\n .argument(\"<userId>\", \"Member user id\")\n .requiredOption(\"--role <role>\", \"Member role (admin or builder)\")\n .action(async (userId: string, options: { role: string }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Update organization member role failed\", async () => {\n await runOrganizationMembersRole(config, {\n userId,\n role: parseInvitableRole(options.role),\n });\n });\n });\n\n members\n .command(\"remove\")\n .description(\"Remove a member from the active organization\")\n .argument(\"<userId>\", \"Member user id\")\n .action(async (userId: string) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Remove organization member failed\", async () => {\n await runOrganizationMembersRemove(config, userId);\n });\n });\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { cliBinaryName } from \"../../errors/command-input\";\nimport { listOrganizations } from \"../../organization/active-organization\";\nimport { writeLinkedProjectConfig } from \"../../project/write-project-config\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nexport async function runProjectLink(\n config: Conf<CliConfig>,\n projectRef: string,\n fromDir = process.cwd(),\n): Promise<void> {\n await withActivePlatformClient(\n config,\n async (platform) => {\n const project = await resolveProjectRef(platform, projectRef);\n const organizations = await listOrganizations(config);\n const membership = organizations.find(\n (entry) => entry.organization.id === project.organizationId,\n );\n if (!membership) {\n throw new Error(\n `Organization for project ${formatProjectLabel(project)} was not found or you do not have access`,\n );\n }\n\n const configPath = writeLinkedProjectConfig(\n {\n project: project.slug,\n organization: membership.organization.slug,\n },\n fromDir,\n );\n\n process.stdout.write(\n `Linked ${configPath} to ${membership.organization.slug}/${formatProjectLabel(project)}\\n` +\n `Deploy with: ${cliBinaryName()} deploy\\n`,\n );\n },\n fromDir,\n );\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 { resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport { missingProjectRefError } from \"../../target-hints\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nasync function resolveMembersProject(platform: PlatformClient) {\n const ref = resolveActiveProjectRef();\n if (!ref) {\n throw missingProjectRefError();\n }\n\n return resolveProjectRef(platform, ref);\n}\n\nexport async function runProjectMembersList(config: Conf<CliConfig>): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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,\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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: { userId: string; role: ProjectUserRole },\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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: { userId: string },\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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(config: Conf<CliConfig>): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\n await platform.members.leaveProject(project.id);\n process.stdout.write(`${JSON.stringify({ left: project.id }, null, 2)}\\n`);\n });\n}\n","import type { Command } from \"commander\";\nimport type { ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\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\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 .action(async () => {\n const config = createCliConfig();\n await handleProjectMembersError(\"List project members failed\", async () => {\n await runProjectMembersList(config);\n });\n });\n\n members\n .command(\"invite\")\n .description(\"Invite people to a project\")\n .requiredOption(\"--email <email>\", \"Email address (repeat for multiple)\", collectEmails, [])\n .requiredOption(\"--role <role>\", \"Project role (admin or builder)\")\n .action(async (options: { email: string[]; role: string }) => {\n const config = createCliConfig();\n await handleProjectMembersError(\"Invite project members failed\", async () => {\n await runProjectMembersInvite(config, {\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 .requiredOption(\"--role <role>\", \"Project role (admin or builder)\")\n .action(async (userId: string, options: { role: string }) => {\n const config = createCliConfig();\n await handleProjectMembersError(\"Update project member role failed\", async () => {\n await runProjectMembersRole(config, {\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 .action(async (userId: string) => {\n const config = createCliConfig();\n await handleProjectMembersError(\"Remove project member failed\", async () => {\n await runProjectMembersRemove(config, {\n userId,\n });\n });\n });\n\n members\n .command(\"leave\")\n .description(\"Leave a project as the current user\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(async (options: { 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);\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 { resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport { missingProjectRefError } from \"../../target-hints\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nasync function resolveSettingsProject(platform: PlatformClient) {\n const ref = resolveActiveProjectRef();\n if (!ref) {\n throw missingProjectRefError();\n }\n\n return resolveProjectRef(platform, ref);\n}\n\nexport async function runProjectSettingsGet(config: Conf<CliConfig>): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveSettingsProject(platform);\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 patch: UpdateProjectSettingsRequest,\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveSettingsProject(platform);\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 { ProjectInvitePermission, ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runProjectSettingsGet, runProjectSettingsUpdate } from \"./run-project-settings\";\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 .action(async () => {\n const config = createCliConfig();\n await handleProjectSettingsError(\"Get project settings failed\", async () => {\n await runProjectSettingsGet(config);\n });\n });\n\n settings\n .command(\"update\")\n .description(\"Update settings for a project\")\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 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 ...(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 { missingProjectRefError } from \"../../target-hints\";\nimport { resolveActiveProjectId, resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport {\n runProjectCreate,\n runProjectList,\n runProjectMetrics,\n runProjectDeploymentsList,\n runProjectUpdate,\n runProjectDelete,\n} from \"./run-project\";\nimport { runProjectLink } from \"./run-project-link\";\nimport { registerProjectMembersCommand } from \"./members\";\nimport { registerProjectSettingsCommand } from \"./settings\";\n\nexport function registerProjectsCommand(program: Command): void {\n const projects = program\n .command(\"projects\")\n .description(\"List, create, update, and delete platform projects\");\n\n projects\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 projects\n .command(\"metrics\")\n .description(\"List rollup metrics for 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 const projectRef = resolveActiveProjectRef();\n await runProjectMetrics(config, {\n ...(projectRef ? { projectRef } : {}),\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 = projects\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 .action(async () => {\n const config = createCliConfig();\n try {\n const projectRef = resolveActiveProjectRef();\n if (!projectRef) {\n throw missingProjectRefError();\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 projects\n .command(\"link\")\n .description(\"Link this directory to a platform project in keystroke.config.ts\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .action(async (options: { dir: string }) => {\n const config = createCliConfig();\n try {\n const projectRef = resolveActiveProjectRef(options.dir);\n if (!projectRef) {\n throw missingProjectRefError();\n }\n\n await runProjectLink(config, projectRef, options.dir);\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"Link project failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n });\n\n projects\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 projects\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 missingProjectRefError();\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 projects\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 missingProjectRefError();\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(projects);\n registerProjectSettingsCommand(projects);\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport {\n PROJECT_PULL_STATE_RELATIVE_PATH,\n ProjectPullStateSchema,\n detectProjectPackageManagerFromSnapshot,\n isAcceptableInstallExit,\n type ProjectPackageManager,\n} from \"@keystrokehq/shared\";\nimport { spawnSync } from \"node:child_process\";\n\nimport { DEFAULT_PARALLEL_BATCH_SIZE, mapInParallelBatches } from \"@keystrokehq/storage\";\n\nimport { scaffoldAgentsGuide } from \"../../skills/scaffold-agents-guide\";\n\nexport type RunPullOptions = {\n client: PlatformClient;\n projectId: string;\n targetDir: string;\n force?: boolean;\n};\n\nasync function readPullState(targetDir: string) {\n try {\n const raw = await readFile(join(targetDir, PROJECT_PULL_STATE_RELATIVE_PATH), \"utf8\");\n const parsed = ProjectPullStateSchema.safeParse(JSON.parse(raw));\n return parsed.success ? parsed.data : undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function writePullState(input: {\n targetDir: string;\n projectId: string;\n artifactId: string;\n}): Promise<void> {\n const state = ProjectPullStateSchema.parse({\n projectId: input.projectId,\n artifactId: input.artifactId,\n pulledAt: new Date().toISOString(),\n });\n const path = join(input.targetDir, PROJECT_PULL_STATE_RELATIVE_PATH);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(state, null, 2)}\\n`);\n}\n\nasync function writeSourceTree(\n targetDir: string,\n files: Array<{ path: string; contents: string }>,\n) {\n await mapInParallelBatches(files, DEFAULT_PARALLEL_BATCH_SIZE, async (file) => {\n const absolute = join(targetDir, file.path);\n await mkdir(dirname(absolute), { recursive: true });\n await writeFile(absolute, file.contents);\n });\n}\n\nfunction installDependencies(targetDir: string, manager: ProjectPackageManager): void {\n // Capture output (rather than inheriting stdio) so we can distinguish a real\n // failure from pnpm's non-zero exit on ignored build scripts, then re-print it.\n const result = spawnSync(manager, [\"install\"], { cwd: targetDir, encoding: \"utf8\" });\n const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n process.stdout.write(output);\n\n if (!isAcceptableInstallExit(manager, result.status ?? 1, output)) {\n throw new Error(`${manager} install failed`);\n }\n}\n\nexport async function runPull(options: RunPullOptions): Promise<void> {\n const targetDir = resolve(options.targetDir);\n await mkdir(targetDir, { recursive: true });\n\n // Fast-fail before the network download: refuse to overwrite an existing\n // project unless it was created by a prior pull of this same project (a\n // managed pull dir, which we may safely refresh) or --force is set.\n const existing = await readPullState(targetDir);\n const isManagedPull = existing?.projectId === options.projectId;\n const hasLocalProject = await readFile(join(targetDir, \"package.json\"), \"utf8\").then(\n () => true,\n () => false,\n );\n\n if (hasLocalProject && !isManagedPull && !options.force) {\n throw new Error(\n \"Target directory already contains a project. Re-run with --force to overwrite from the active deploy.\",\n );\n }\n\n const source = await options.client.artifacts.downloadActiveSource(options.projectId);\n\n if (existing?.artifactId === source.artifactId) {\n process.stdout.write(\"Project is already up to date with the active deploy.\\n\");\n return;\n }\n\n await writeSourceTree(targetDir, source.files);\n installDependencies(targetDir, detectProjectPackageManagerFromSnapshot(source.files));\n await scaffoldAgentsGuide(targetDir);\n await writePullState({\n targetDir,\n projectId: options.projectId,\n artifactId: source.artifactId,\n });\n\n process.stdout.write(\n `Pulled ${source.files.length} files from active deploy (${source.artifactId}).\\n`,\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\nimport { missingProjectRefError } from \"../../target-hints\";\nimport { runPull } from \"./run-pull\";\n\nexport function registerPullCommand(program: Command): void {\n program\n .command(\"pull\")\n .description(\"Download the active deploy source snapshot into a local directory\")\n .option(\"--dir <path>\", \"Target directory\", process.cwd())\n .option(\"--force\", \"Overwrite an existing local project tree\")\n .action(async (options: { dir: string; force?: boolean }) =>\n runCliCommand(\"Pull failed\", async () => {\n const config = createCliConfig();\n // Unlike other commands, pull must work in an empty directory (like a\n // git clone), so don't require an existing project root here.\n const projectId = await resolveActiveProjectId(config, options.dir);\n if (!projectId) {\n throw missingProjectRefError();\n }\n\n const client = createCliPlatformClient(config);\n await runPull({\n client,\n projectId,\n targetDir: options.dir,\n force: options.force,\n });\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport { resolveLocalApiOrigin } from \"../resolve-local-api-origin\";\nimport { resolveBootstrapRun } from \"../project/bootstrap-run\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { runUntilExit, spawnNodeScript, type ManagedProcess } from \"../process/run-processes\";\nimport { ensureNativeDeps } from \"../runtime/ensure-native-deps\";\nimport { resolveCliRuntimeNodeModules } from \"../runtime/resolve-runtime-node-modules\";\n\ntype StartOptions = {\n dir: string;\n port?: number;\n};\n\nfunction resolveStartServerUrl(root: string, portOverride?: number): string {\n const url = new URL(resolveLocalApiOrigin(root));\n if (portOverride !== undefined) {\n url.port = String(portOverride);\n }\n return url.origin;\n}\n\nexport async function runStart(options: StartOptions): Promise<void> {\n const root = resolveProjectRoot(options.dir);\n const serverUrl = resolveStartServerUrl(root, options.port);\n const apiPort = Number(new URL(serverUrl).port || 80);\n\n const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));\n ensureNativeDeps(runtimeNodeModules);\n const { buildApp } = await import(\"@keystrokehq/build\");\n await buildApp({ root, clean: false });\n\n const bootstrap = await resolveBootstrapRun({\n root,\n runtimeNodeModules,\n apiPort,\n });\n\n const processes: ManagedProcess[] = [\n {\n name: \"api\",\n child: spawnNodeScript(bootstrap),\n },\n ];\n\n process.stdout.write(`API: ${serverUrl}\\n`);\n\n await runUntilExit(processes);\n}\n\nexport function registerStartCommand(program: Command): void {\n program\n .command(\"start\")\n .description(\"Build and run the API server\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\"--port <number>\", \"API port\", (value) => Number(value))\n .action(async (options) => {\n try {\n await runStart({\n dir: options.dir,\n port: options.port,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Start failed\";\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../errors\";\n\n/** Copy-ready pause/resume commands, printed to stderr so stdout JSON stays pipeable. */\nfunction writeToggleHints(triggers: { slug: string }[]): void {\n if (triggers.length === 0) {\n return;\n }\n process.stderr.write(\"\\nPause/resume without redeploy (disabled state survives deploys):\\n\");\n for (const entry of triggers) {\n process.stderr.write(\n ` keystroke triggers disable ${entry.slug} # enable to resume; --workflow/--agent to narrow\\n`,\n );\n }\n}\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 writeToggleHints(result.triggers);\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(\"<triggerSlug>\", \"Trigger id or slug\")\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 { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { TriggerAssignment, WorkspaceTriggerDetail } from \"@keystrokehq/shared\";\n\n/** Narrow a trigger's attachments to a single workflow or agent target. */\nexport type TriggerAttachmentTarget =\n | { kind: \"workflow\"; slug: string }\n | { kind: \"agent\"; slug: string };\n\nexport type ResolvedTriggerAttachments = {\n trigger: WorkspaceTriggerDetail;\n attachments: TriggerAssignment[];\n};\n\nasync function loadTrigger(\n platform: PlatformClient,\n triggerRef: string,\n): Promise<WorkspaceTriggerDetail> {\n let trigger = await platform.triggers.get(triggerRef);\n if (!trigger) {\n const triggers = await platform.triggers.list();\n const summary =\n triggers.find((entry) => entry.id === triggerRef || entry.slug === triggerRef) ?? null;\n if (summary) {\n trigger = await platform.triggers.get(summary.id);\n }\n }\n if (!trigger) {\n throw new Error(`Trigger not found: ${triggerRef}`);\n }\n return trigger;\n}\n\n/**\n * Resolve which attachments a toggle applies to. With no target, every attachment on the\n * trigger is returned (\"disable the trigger\"). A `--workflow`/`--agent` target narrows to\n * the single binding for that workflow/agent — so callers never handle attachment ids.\n */\nexport async function resolveTriggerAttachments(\n platform: PlatformClient,\n triggerRef: string,\n target?: TriggerAttachmentTarget,\n): Promise<ResolvedTriggerAttachments> {\n const trigger = await loadTrigger(platform, triggerRef);\n\n if (!target) {\n if (trigger.assignments.length === 0) {\n throw new Error(`Trigger ${trigger.slug} has no attachments`);\n }\n return { trigger, attachments: trigger.assignments };\n }\n\n const match = trigger.assignments.find(\n (entry) => entry.kind === target.kind && entry.slug === target.slug,\n );\n if (!match) {\n const available = trigger.assignments.map((entry) => `${entry.kind} ${entry.slug}`).join(\", \");\n throw new Error(\n `No ${target.kind} \"${target.slug}\" attached to trigger ${trigger.slug}` +\n (available ? ` (attached: ${available})` : \"\"),\n );\n }\n return { trigger, attachments: [match] };\n}\n\n/** Attachment slug passed to runtime trigger run APIs (one target required). */\nexport function attachmentSlugForRuns(attachments: TriggerAssignment[]): string {\n if (attachments.length === 1) {\n return attachments[0]!.attachmentSlug;\n }\n throw new Error(\n `Trigger has ${attachments.length} attachments — pass --workflow or --agent to list runs for one target`,\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { cliBinaryName, parseJsonOption } from \"../../errors\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\nimport {\n resolveTriggerAttachments,\n type TriggerAttachmentTarget,\n} from \"./resolve-trigger-attachment\";\n\nfunction resolveTarget(options: {\n workflow?: string;\n agent?: string;\n}): TriggerAttachmentTarget | undefined {\n if (options.workflow && options.agent) {\n throw new Error(\"Pass only one of --workflow or --agent\");\n }\n if (options.workflow) {\n return { kind: \"workflow\", slug: options.workflow };\n }\n if (options.agent) {\n return { kind: \"agent\", slug: options.agent };\n }\n return undefined;\n}\n\nexport function registerTriggerInvokeCommand(trigger: Command): void {\n trigger\n .command(\"invoke\")\n .description(\"Manually invoke a trigger (webhook, cron, or poll)\")\n .argument(\"<trigger-slug>\", \"Trigger id or slug\")\n .option(\"--input <json>\", \"JSON body for webhook triggers only\")\n .option(\"--workflow <slug>\", \"Only the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Only the attachment bound to this agent\")\n .addHelpText(\n \"after\",\n `\nExamples:\n ${cliBinaryName()} triggers invoke incoming-message --input '{\"text\":\"hi\"}'\n ${cliBinaryName()} triggers invoke morning --workflow report\n ${cliBinaryName()} triggers invoke inbox-sync\n`,\n )\n .action(\n async (\n triggerRef: string,\n options: { input?: string; workflow?: string; agent?: string },\n ) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n const inputProvided = options.input !== undefined;\n\n await withActivePlatformClient(config, async (platform) => {\n const { trigger } = await resolveTriggerAttachments(platform, triggerRef, target);\n\n if (inputProvided && trigger.type !== \"webhook\") {\n throw new Error(`input is only supported for webhook triggers (got ${trigger.type})`);\n }\n\n const result = await platform.triggers.invoke(trigger.id, {\n ...(inputProvided ? { input: parseJsonOption(options.input!, \"--input\") } : {}),\n ...(options.workflow ? { workflow: options.workflow } : {}),\n ...(options.agent ? { agent: options.agent } : {}),\n });\n\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n\n const targetHint =\n options.workflow != null\n ? ` --workflow ${options.workflow}`\n : options.agent != null\n ? ` --agent ${options.agent}`\n : \"\";\n process.stderr.write(\n `Trigger invoked. Track progress:\\n` +\n ` ${cliBinaryName()} triggers runs list ${trigger.slug}${targetHint}\\n`,\n );\n });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"Invoke trigger failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n usage: {\n command: `${cliBinaryName()} triggers invoke ${triggerRef}`,\n flag: options.input !== undefined ? \"--input\" : undefined,\n },\n })}\\n`,\n );\n process.exitCode = 1;\n }\n },\n );\n}\n","import type { Command } from \"commander\";\nimport { createCliConfig } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runProjectCliCommand } from \"../../errors\";\nimport { getPlatformUrl, getWebUrl } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\nimport {\n attachmentSlugForRuns,\n resolveTriggerAttachments,\n type TriggerAttachmentTarget,\n} from \"./resolve-trigger-attachment\";\n\nfunction resolveTarget(options: {\n workflow?: string;\n agent?: string;\n}): TriggerAttachmentTarget | undefined {\n if (options.workflow && options.agent) {\n throw new Error(\"Pass only one of --workflow or --agent\");\n }\n if (options.workflow) {\n return { kind: \"workflow\", slug: options.workflow };\n }\n if (options.agent) {\n return { kind: \"agent\", slug: options.agent };\n }\n return undefined;\n}\n\nasync function resolveRunsAttachmentSlug(\n triggerRef: string,\n target?: TriggerAttachmentTarget,\n): Promise<string> {\n const config = createCliConfig();\n let attachmentSlug = \"\";\n await withActivePlatformClient(config, async (platform) => {\n const { attachments } = await resolveTriggerAttachments(platform, triggerRef, target);\n attachmentSlug = attachmentSlugForRuns(attachments);\n });\n return attachmentSlug;\n}\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\")\n .argument(\"<triggerSlug>\", \"Trigger id or slug\")\n .option(\"--workflow <slug>\", \"Narrow to the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Narrow to the attachment bound to this agent\")\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 .option(\"--outcome <outcome>\", \"Filter by outcome (dispatched, skipped, failed)\")\n .action(async (triggerSlug: string, options: Record<string, string | undefined>) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n const attachmentSlug = await resolveRunsAttachmentSlug(triggerSlug, target);\n await runProjectCliCommand(\"List trigger runs failed\", async ({ client }) => {\n const result = await client.triggers.listRuns(attachmentSlug, {\n limit: Number(options.limit),\n ...(options.cursor ? { cursor: options.cursor } : {}),\n ...(options.triggerType\n ? { triggerType: options.triggerType as \"cron\" | \"webhook\" | \"poll\" }\n : {}),\n ...(options.outcome\n ? { outcome: options.outcome as \"dispatched\" | \"skipped\" | \"failed\" }\n : {}),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"List trigger runs failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n });\n\n runs\n .command(\"get\")\n .description(\"Get full details for a trigger run\")\n .argument(\"<triggerSlug>\", \"Trigger id or slug\")\n .argument(\"<runId>\", \"Trigger run id\")\n .option(\"--workflow <slug>\", \"Narrow to the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Narrow to the attachment bound to this agent\")\n .option(\"--include <parts>\", \"Comma-separated: workflows, trace\")\n .action(\n async (\n triggerSlug: string,\n runId: string,\n options: { workflow?: string; agent?: string; include?: string },\n ) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n const attachmentSlug = await resolveRunsAttachmentSlug(triggerSlug, target);\n await runProjectCliCommand(\"Get trigger run failed\", async ({ client }) => {\n const result = await client.triggers.getRun(attachmentSlug, runId, {\n include: options.include,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"Get trigger run failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n },\n );\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\nimport {\n resolveTriggerAttachments,\n type TriggerAttachmentTarget,\n} from \"./resolve-trigger-attachment\";\n\nexport async function runTriggerEnabled(\n config: Conf<CliConfig>,\n options: { triggerRef: string; target?: TriggerAttachmentTarget; enabled: boolean },\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const { trigger, attachments } = await resolveTriggerAttachments(\n platform,\n options.triggerRef,\n options.target,\n );\n\n let detail = trigger;\n for (const attachment of attachments) {\n detail = await platform.triggers.updateAttachment(trigger.id, attachment.attachmentId, {\n enabled: options.enabled,\n });\n }\n\n process.stdout.write(`${JSON.stringify(detail, 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 type { TriggerAttachmentTarget } from \"./resolve-trigger-attachment\";\nimport { runTriggerEnabled } from \"./run-attachment-enabled\";\n\nfunction resolveTarget(options: {\n workflow?: string;\n agent?: string;\n}): TriggerAttachmentTarget | undefined {\n if (options.workflow && options.agent) {\n throw new Error(\"Pass only one of --workflow or --agent\");\n }\n if (options.workflow) {\n return { kind: \"workflow\", slug: options.workflow };\n }\n if (options.agent) {\n return { kind: \"agent\", slug: options.agent };\n }\n return undefined;\n}\n\nfunction registerToggle(trigger: Command, command: \"enable\" | \"disable\", enabled: boolean): void {\n trigger\n .command(command)\n .description(\n `${command === \"enable\" ? \"Enable\" : \"Disable\"} a trigger — all attachments by default, or one with --workflow/--agent`,\n )\n .argument(\"<trigger-slug>\", \"Trigger id or slug\")\n .option(\"--workflow <slug>\", \"Only the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Only the attachment bound to this agent\")\n .action(async (triggerRef: string, options: { workflow?: string; agent?: string }) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n await runTriggerEnabled(config, { triggerRef, target, enabled });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, `${command} trigger failed`, {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n });\n}\n\nexport function registerTriggerToggleCommands(trigger: Command): void {\n registerToggle(trigger, \"disable\", false);\n registerToggle(trigger, \"enable\", true);\n}\n","import type { Command } from \"commander\";\nimport {\n registerTriggerGetCommand,\n registerTriggerListCommand,\n registerTriggerUrlCommand,\n} from \"./list\";\nimport { registerTriggerInvokeCommand } from \"./invoke\";\nimport { registerTriggerRunsCommand } from \"./runs\";\nimport { registerTriggerToggleCommands } from \"./toggle\";\n\nexport function registerTriggersCommand(program: Command): void {\n const triggers = program.command(\"triggers\").description(\"Invoke and inspect triggers\");\n\n registerTriggerListCommand(triggers);\n registerTriggerGetCommand(triggers);\n registerTriggerUrlCommand(triggers);\n registerTriggerInvokeCommand(triggers);\n registerTriggerRunsCommand(triggers);\n registerTriggerToggleCommands(triggers);\n}\n","import { spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport {\n detectPackageManager,\n resolveGithubPackagesToken,\n type PackageManager,\n} from \"../init/package-manager\";\nimport { detectManagerFromLockfile } from \"./detect-cli-install\";\nimport { isReleaseAgeBlock } from \"./detect-release-age-block\";\nimport { CLI_PACKAGE_NAME, isLocalSdkSpec } from \"./ensure-sdk-current\";\n\nconst KEYSTROKE_SCOPE = \"@keystrokehq/\";\n\nexport type UpdatablePackage = {\n name: string;\n dev: boolean;\n};\n\nexport type UpdatedPackage = {\n name: string;\n from?: string;\n to?: string;\n};\n\nexport type UpdateProjectPackagesResult = {\n updated: UpdatedPackage[];\n skippedReleaseAge: string[];\n};\n\nfunction readPackageJson(root: string):\n | {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n }\n | undefined {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to read package.json at ${path}: ${detail}`);\n }\n}\n\n/** Registry-managed @keystrokehq/* deps (excludes workspace/link/file). */\nexport function listUpdatableKeystrokePackages(root: string): UpdatablePackage[] {\n const pkg = readPackageJson(root);\n if (!pkg) {\n return [];\n }\n\n const packages: UpdatablePackage[] = [];\n\n for (const [name, spec] of Object.entries(pkg.dependencies ?? {})) {\n if (name === CLI_PACKAGE_NAME) {\n continue;\n }\n if (name.startsWith(KEYSTROKE_SCOPE) && !isLocalSdkSpec(spec)) {\n packages.push({ name, dev: false });\n }\n }\n\n for (const [name, spec] of Object.entries(pkg.devDependencies ?? {})) {\n if (name === CLI_PACKAGE_NAME) {\n continue;\n }\n if (name.startsWith(KEYSTROKE_SCOPE) && !isLocalSdkSpec(spec)) {\n packages.push({ name, dev: true });\n }\n }\n\n return packages;\n}\n\nfunction readInstalledVersion(root: string, packageName: string): string | undefined {\n const path = join(root, \"node_modules\", ...packageName.split(\"/\"), \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n const pkg = JSON.parse(readFileSync(path, \"utf8\")) as { version?: string };\n const version = pkg.version?.trim();\n return version || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction updateCommand(\n manager: PackageManager,\n packageName: string,\n dev: boolean,\n): { command: string; args: string[] } {\n const spec = `${packageName}@latest`;\n\n if (manager === \"npm\") {\n return {\n command: \"npm\",\n args: dev ? [\"install\", \"-D\", spec] : [\"install\", spec],\n };\n }\n\n return {\n command: manager,\n args: dev ? [\"add\", \"-D\", spec] : [\"add\", spec],\n };\n}\n\nfunction warnReleaseAgeBlock(packageName: string): void {\n process.stderr.write(\n `Warning: ${packageName}@latest is held back by your minimum-release-age setting; ` +\n `continuing with the currently installed version.\\n`,\n );\n}\n\n/**\n * Install @latest for every managed project @keystrokehq/* dependency.\n * Skips `@keystrokehq/cli` (global; refreshed separately by `keystroke update`).\n * Release-age blocks warn and continue; other install failures throw.\n */\nexport function updateProjectPackages(root: string): UpdateProjectPackagesResult {\n const packages = listUpdatableKeystrokePackages(root);\n if (packages.length === 0) {\n return { updated: [], skippedReleaseAge: [] };\n }\n\n const manager = detectManagerFromLockfile(root) ?? detectPackageManager();\n const token = resolveGithubPackagesToken();\n const env = token ? { ...process.env, NODE_AUTH_TOKEN: token } : process.env;\n\n const updated: UpdatedPackage[] = [];\n const skippedReleaseAge: string[] = [];\n\n for (const pkg of packages) {\n const from = readInstalledVersion(root, pkg.name);\n const { command, args } = updateCommand(manager, pkg.name, pkg.dev);\n process.stderr.write(`Updating ${pkg.name}...\\n`);\n const result = spawnSync(command, args, { cwd: root, env, encoding: \"utf8\" });\n\n if (result.status === 0) {\n const to = readInstalledVersion(root, pkg.name);\n if (to && to !== from) {\n updated.push({ name: pkg.name, from, to });\n }\n continue;\n }\n\n const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n if (isReleaseAgeBlock(output)) {\n warnReleaseAgeBlock(pkg.name);\n skippedReleaseAge.push(pkg.name);\n continue;\n }\n\n throw new Error(\n `Failed to update ${pkg.name}:\\n${output.trim() || `${command} exited ${result.status}`}`,\n );\n }\n\n return { updated, skippedReleaseAge };\n}\n","import type { Command } from \"commander\";\n\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { isNewerVersion } from \"../update/compare-version\";\nimport { detectCliInstall } from \"../update/detect-cli-install\";\nimport {\n formatReleaseAgeBlockMessage,\n isReleaseAgeBlock,\n} from \"../update/detect-release-age-block\";\nimport { fetchLatestCliRelease } from \"../update/fetch-latest-version\";\nimport {\n computeReleaseAgeRetryAfter,\n readPnpmMinimumReleaseAgeMinutes,\n} from \"../update/read-pnpm-release-age-minutes\";\nimport { runPackageManagerUpdate } from \"../update/run-package-manager-update\";\nimport { updateProjectPackages } from \"../update/update-project-packages\";\nimport { readCliVersion } from \"../version\";\n\nasync function updateCliInstall(): Promise<void> {\n if (process.env.KEYSTROKE_DEV) {\n return;\n }\n\n const install = detectCliInstall(resolveCliRoot(import.meta.url));\n if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const release = await fetchLatestCliRelease();\n\n if (!release || !isNewerVersion(release.version, currentVersion)) {\n process.stdout.write(`@keystrokehq/cli is up to date (${currentVersion}).\\n`);\n return;\n }\n\n process.stderr.write(\n `Updating @keystrokehq/cli ${currentVersion} -> ${release.version} via ${install.packageManager}...\\n`,\n );\n\n const result = runPackageManagerUpdate(install);\n const installedVersion = readCliVersion();\n\n if (isNewerVersion(installedVersion, currentVersion)) {\n process.stdout.write(`Updated @keystrokehq/cli ${currentVersion} -> ${installedVersion}.\\n`);\n return;\n }\n\n if (result.ok) {\n process.stdout.write(`@keystrokehq/cli is up to date (${installedVersion}).\\n`);\n return;\n }\n\n if (isReleaseAgeBlock(result.output)) {\n const retryAfter =\n install.packageManager === \"pnpm\"\n ? computeReleaseAgeRetryAfter(release.publishedAt, readPnpmMinimumReleaseAgeMinutes())\n : undefined;\n process.stderr.write(\n `${formatReleaseAgeBlockMessage({\n currentVersion,\n availableVersion: release.version,\n retryAfter,\n })}\\n`,\n );\n return;\n }\n\n throw new Error(\n `Failed to update @keystrokehq/cli:\\n${result.output.trim() || \"package manager update failed\"}`,\n );\n}\n\nexport async function runUpdate(options: { dir: string }): Promise<void> {\n const root = resolveProjectRoot(options.dir);\n const result = updateProjectPackages(root);\n\n if (result.updated.length === 0 && result.skippedReleaseAge.length === 0) {\n process.stdout.write(\"Project @keystrokehq packages are up to date.\\n\");\n } else {\n for (const pkg of result.updated) {\n const range =\n pkg.from && pkg.to ? `${pkg.from} -> ${pkg.to}` : pkg.to ? `-> ${pkg.to}` : \"updated\";\n process.stdout.write(`Updated ${pkg.name} (${range}).\\n`);\n }\n if (result.updated.length === 0 && result.skippedReleaseAge.length > 0) {\n process.stdout.write(\"No project @keystrokehq packages were updated.\\n\");\n }\n }\n\n await updateCliInstall();\n}\n\nexport function registerUpdateCommand(program: Command): void {\n program\n .command(\"update\")\n .description(\"Update @keystrokehq packages and the CLI to latest\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .action(async (options: { dir: string }) => {\n try {\n await runUpdate(options);\n } catch (error) {\n process.stderr.write(`${formatCliError(error, \"update failed\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport {\n FormFieldConfigSchema,\n WorkflowFormUpsertBodySchema,\n type WorkflowFormUpsertBody,\n} from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { cliBinaryName, parseJsonOption, runCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveCliListOptions } from \"../../resolve-list-options\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\n\ntype PublishOptions = {\n title?: string;\n description?: string;\n config?: string;\n fieldConfig?: string;\n};\n\nexport function registerWorkflowFormsCommand(workflows: Command): void {\n const forms = workflows.command(\"forms\").description(\"Publish and manage workflow forms\");\n\n forms\n .command(\"list\")\n .description(\"List published workflow forms in the active organization\")\n .option(\"--admin\", \"List forms across all org projects (org owner or admin only)\")\n .action((options: { admin?: boolean }) =>\n runCliCommand(\n \"List workflow forms failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await client.workflowForms.list(\n await resolveCliListOptions(config, options),\n );\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n\n forms\n .command(\"get\")\n .description(\"Get a workflow's published form\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\"Get workflow form failed\", workflowSlug, async (client, workflowId) => {\n const form = await client.workflowForms.get(workflowId);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n }),\n );\n\n forms\n .command(\"url\")\n .description(\"Print a workflow form's public URL\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\"Get workflow form URL failed\", workflowSlug, async (client, workflowId) => {\n const form = await client.workflowForms.get(workflowId);\n if (!form?.enabled) {\n throw new Error(`Workflow \"${workflowSlug}\" does not have a published form.`);\n }\n process.stdout.write(`${form.publicUrl}\\n`);\n }),\n );\n\n forms\n .command(\"publish\")\n .description(\"Publish or update a workflow form\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .option(\"--title <text>\", \"Public form title override\")\n .option(\"--description <text>\", \"Public form description override\")\n .option(\"--config <json>\", \"Complete JSON form configuration\")\n .option(\"--field-config <json>\", \"JSON per-field presentation configuration\")\n .addHelpText(\n \"after\",\n `\nExamples:\n ${cliBinaryName()} workflows forms publish request-review\n ${cliBinaryName()} workflows forms publish request-review --field-config '{\"message\":{\"label\":\"What needs review?\",\"control\":\"textarea\"}}'\n ${cliBinaryName()} workflows forms publish request-review --config '{\"title\":\"Request a review\",\"enabled\":true}'\n`,\n )\n .action((workflowSlug: string, options: PublishOptions) =>\n runFormCommand(\"Publish workflow form failed\", workflowSlug, async (client, workflowId) => {\n const input = parsePublishInput(options);\n const form = await client.workflowForms.publish(workflowId, input);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n }),\n );\n\n forms\n .command(\"unpublish\")\n .description(\"Stop accepting submissions for a workflow form\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\"Unpublish workflow form failed\", workflowSlug, async (client, workflowId) => {\n const form = await client.workflowForms.unpublish(workflowId);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n }),\n );\n\n forms\n .command(\"rotate\")\n .description(\"Rotate a workflow form's public link\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\n \"Rotate workflow form link failed\",\n workflowSlug,\n async (client, workflowId) => {\n const form = await client.workflowForms.rotate(workflowId);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n },\n ),\n );\n}\n\nfunction parsePublishInput(options: PublishOptions): WorkflowFormUpsertBody {\n const config =\n options.config === undefined\n ? {}\n : WorkflowFormUpsertBodySchema.parse(parseJsonOption(options.config, \"--config\"));\n const fieldConfig =\n options.fieldConfig === undefined\n ? undefined\n : FormFieldConfigSchema.parse(parseJsonOption(options.fieldConfig, \"--field-config\"));\n\n return WorkflowFormUpsertBodySchema.parse({\n ...config,\n ...(options.title !== undefined ? { title: options.title } : {}),\n ...(options.description !== undefined ? { description: options.description } : {}),\n ...(fieldConfig !== undefined ? { fieldConfig } : {}),\n });\n}\n\nfunction runFormCommand(\n title: string,\n workflowSlug: string,\n action: (client: PlatformClient, workflowId: string) => Promise<void>,\n) {\n return runCliCommand(\n title,\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const projectId = await resolveActiveProjectId(config);\n const workflows = await client.workflows.list(projectId ? { projectId } : undefined);\n const matches = workflows.filter((workflow) => workflow.slug === workflowSlug);\n\n if (matches.length === 0) {\n throw new Error(`Workflow \"${workflowSlug}\" was not found in the active organization.`);\n }\n if (matches.length > 1) {\n throw new Error(\n `Workflow \"${workflowSlug}\" is ambiguous. Link a project or pass --project to choose one.`,\n );\n }\n\n await action(client, matches[0]!.id);\n },\n undefined,\n { orgScoped: true },\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveCliListOptions } from \"../../resolve-list-options\";\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 resolveActiveOrganization(config);\n const result = await client.workflows.list(await resolveCliListOptions(config, options));\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()} workflows run math --input '{\"first\":1,\"second\":2}'\n ${cliBinaryName()} workflows 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()} workflows runs get ${workflowId} ${result.runId} --summary\\n`,\n );\n }\n },\n {\n usage: {\n command: `${cliBinaryName()} workflows 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 \"../projects/run-project\";\n\nexport async function runWorkflowRunCancel(\n config: Conf<CliConfig>,\n _workflowId: string,\n runId: string,\n): 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 {\n includeForInspectMode,\n parseInspectDetailOptions,\n projectWorkflowRunField,\n projectWorkflowRunSummary,\n writeInspectJson,\n} from \"../inspect-detail\";\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, or none\")\n .option(\"--summary\", \"Print a concise JSON summary (status, input, output, error)\")\n .option(\"--field <field>\", \"Print one field: id, status, input, output, error\")\n .action(\n (\n workflowId: string,\n runId: string,\n options: { include?: string; summary?: boolean; field?: string },\n ) =>\n runProjectCliCommand(\"Get workflow run failed\", async ({ client }) => {\n const mode = parseInspectDetailOptions(options);\n const result = await client.workflows.getRun(workflowId, runId, {\n include: includeForInspectMode(mode),\n });\n if (mode.kind === \"summary\") {\n writeInspectJson(projectWorkflowRunSummary(result));\n return;\n }\n if (mode.kind === \"field\") {\n writeInspectJson(projectWorkflowRunField(result, mode.field));\n return;\n }\n writeInspectJson(result);\n }),\n );\n\n runs\n .command(\"hooks\")\n .description(\"List hook tokens and resume URLs for a workflow run\")\n .argument(\"<workflowId>\", \"Workflow key / route id\")\n .argument(\"<runId>\", \"Workflow run id\")\n .action((workflowId: string, runId: string) =>\n runProjectCliCommand(\"List workflow run hooks failed\", async ({ client }) => {\n const result = await client.workflows.listHooks(workflowId, runId);\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n }),\n );\n\n runs\n .command(\"cancel\")\n .description(\"Cancel a running or queued workflow run\")\n .argument(\"<workflowId>\", \"Workflow key / route id\")\n .argument(\"<runId>\", \"Workflow run id\")\n .action(async (workflowId: string, runId: string) => {\n const config = createCliConfig();\n try {\n await runWorkflowRunCancel(config, workflowId, 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 { registerWorkflowFormsCommand } from \"./forms\";\nimport { registerWorkflowListCommand } from \"./list\";\nimport { registerWorkflowRunCommand } from \"./run\";\nimport { registerWorkflowRunsCommand } from \"./runs\";\n\nexport function registerWorkflowsCommand(program: Command): void {\n const workflows = program.command(\"workflows\").description(\"Invoke and inspect workflows\");\n\n registerWorkflowListCommand(workflows);\n registerWorkflowRunCommand(workflows);\n registerWorkflowRunsCommand(workflows);\n registerWorkflowFormsCommand(workflows);\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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 resolveActiveOrganization(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 { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { missingProjectRefError } from \"../../target-hints\";\n\nexport async function resolveChannelProjectId(config: Conf<CliConfig>): Promise<string> {\n await resolveActiveOrganization(config);\n const platform = createCliPlatformClient(config);\n\n const ref = resolveActiveProjectRef();\n if (!ref) {\n throw missingProjectRefError();\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 { 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 .action(async (options: { platform: string }) =>\n runCliCommand(\"List channel accounts failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(config);\n const accounts = await runChannelAccounts(\n client,\n projectId,\n options.platform as ChannelPlatformKey,\n );\n if (accounts.length === 0 && options.platform === \"slack\") {\n process.stdout.write(\n \"No Slack workspaces connected. Run `keystroke connect slackbot` to connect a workspace for External Channels.\\n\",\n );\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 .action(async (options: { agent: string }) =>\n runCliCommand(\"List agent channels failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 .action(async (options: { platform: string; account: string }) =>\n runCliCommand(\"List channel directory failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 .argument(\"<agent>\", \"Agent id or slug\")\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 (resolved from Slack when omitted)\")\n .option(\"--mode <mode>\", \"Listen mode (mention, all, dm)\", \"mention\")\n .action(\n async (\n agent: string,\n options: {\n platform: string;\n account: string;\n channel: string;\n channelName?: string;\n mode?: string;\n },\n ) =>\n runCliCommand(\"Bind channel failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(config);\n const connection = await runChannelBind(client, projectId, {\n agentId: agent,\n platform: options.platform as ChannelPlatformKey,\n accountId: options.account,\n binding: {\n channelId: options.channel,\n ...(options.channelName ? { channelName: options.channelName } : {}),\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 .action(async (options: { agent: string; binding: string }) =>\n runCliCommand(\"Unbind channel failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 .action(async (options: { agent: string; binding: string; mode?: string; threads?: boolean }) =>\n runCliCommand(\"Update channel binding failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 registerChannelsCommand(program: Command): void {\n const channels = program\n .command(\"channels\")\n .description(\"Manage agent external channel bindings\");\n\n registerChannelPlatformsCommand(channels);\n registerChannelAccountsCommand(channels);\n registerChannelListCommand(channels);\n registerChannelDirectoryCommand(channels);\n registerChannelBindCommand(channels);\n registerChannelUnbindCommand(channels);\n registerChannelUpdateBindingCommand(channels);\n}\n","import { UserPreferencesPatchSchema, type UserPreferencesPatch } from \"@keystrokehq/shared\";\n\nexport function parsePreferenceValue(rawValue: string): unknown {\n try {\n return JSON.parse(rawValue);\n } catch {\n return rawValue;\n }\n}\n\nexport function buildPreferencesPatchFromKeyValue(\n key: string,\n rawValue: string,\n): UserPreferencesPatch {\n const trimmedKey = key.trim();\n if (!trimmedKey) {\n throw new Error(\"Preference key is required\");\n }\n\n const value = parsePreferenceValue(rawValue);\n const segments = trimmedKey.split(\".\").filter(Boolean);\n if (segments.length === 0) {\n throw new Error(\"Preference key is required\");\n }\n\n let patch: Record<string, unknown> = { [segments.at(-1)!]: value };\n\n for (let index = segments.length - 2; index >= 0; index -= 1) {\n patch = { [segments[index]!]: patch };\n }\n\n const parsed = UserPreferencesPatchSchema.safeParse(patch);\n if (!parsed.success) {\n const message = parsed.error.issues[0]?.message ?? \"invalid value\";\n throw new Error(`Invalid preference ${trimmedKey}: ${message}`);\n }\n\n return parsed.data;\n}\n","import type { Command } from \"commander\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nimport { createCliConfig } from \"../../config\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { buildPreferencesPatchFromKeyValue } from \"./preferences-patch\";\n\nexport async function runConfigPreferencesGet(platform: PlatformClient): Promise<string> {\n const preferences = await platform.userPreferences.get();\n return `${JSON.stringify(preferences, null, 2)}\\n`;\n}\n\nexport async function runConfigPreferencesSet(\n platform: PlatformClient,\n key: string,\n value: string,\n): Promise<string> {\n const patch = buildPreferencesPatchFromKeyValue(key, value);\n const preferences = await platform.userPreferences.update(patch);\n return `${JSON.stringify(preferences, null, 2)}\\n`;\n}\n\nexport function registerConfigPreferencesCommand(config: Command): void {\n const preferences = config.command(\"preferences\").description(\"Manage user preferences\");\n\n preferences\n .command(\"get\")\n .description(\"Show current user preferences as JSON\")\n .action(async () => {\n const cliConfig = createCliConfig();\n const platform = createCliPlatformClient(cliConfig);\n process.stdout.write(await runConfigPreferencesGet(platform));\n });\n\n preferences\n .command(\"set\")\n .description(\"Update a user preference by dot-path key\")\n .argument(\"<key>\", \"Preference key, e.g. interfaceTheme or sidebar.navIconVisibility\")\n .argument(\"<value>\", \"Preference value (JSON or plain string)\")\n .action(async (key: string, value: string) => {\n const cliConfig = createCliConfig();\n const platform = createCliPlatformClient(cliConfig);\n process.stdout.write(await runConfigPreferencesSet(platform, key, value));\n });\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getConfigDir, getEffectiveApiTarget, getPlatformUrl } from \"../../config\";\nimport { resolveLocalApiOrigin } from \"../../resolve-local-api-origin\";\nimport { readDevSession } from \"../../dev-session\";\nimport { listOrganizations } from \"../../organization/active-organization\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { registerConfigPreferencesCommand } from \"./preferences\";\n\nexport function registerConfigCommand(program: Command): void {\n const config = program.command(\"config\").description(\"Manage CLI configuration\");\n\n registerConfigPreferencesCommand(config);\n\n config\n .command(\"show\")\n .description(\"Show CLI configuration\")\n .action(() => {\n const cliConfig = createCliConfig();\n const configDir = getConfigDir(cliConfig);\n const linked = readLinkedProjectConfig();\n process.stdout.write(\n `${JSON.stringify(\n {\n webUrl: cliConfig.get(\"webUrl\"),\n platformUrl: getPlatformUrl(cliConfig),\n localApiUrl: resolveLocalApiOrigin(process.cwd()),\n linkedProject: linked.project ?? null,\n linkedOrganization: linked.organization ?? null,\n apiTarget: getEffectiveApiTarget(cliConfig),\n devSession: readDevSession(configDir) ?? null,\n },\n null,\n 2,\n )}\\n`,\n );\n });\n\n config\n .command(\"use\")\n .description(\"Switch API target (local or cloud)\")\n .argument(\"[mode]\", \"local or cloud\")\n .action(async (mode?: string) => {\n const cliConfig = createCliConfig();\n\n if (!mode || mode === \"local\") {\n cliConfig.set(\"apiTarget\", \"local\");\n process.stdout.write(\"Using local keystroke server\\n\");\n return;\n }\n\n if (mode === \"cloud\") {\n cliConfig.set(\"apiTarget\", \"platform\");\n process.stdout.write(\"Using platform API\\n\");\n return;\n }\n\n throw new Error(\"Usage: keystroke config use [local|cloud]\");\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\n/** Leaf-to-root command names under `keystroke`, e.g. `[\"auth\", \"login\"]`. */\nexport function 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","import { existsSync, lstatSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { commandPath } from \"../command-path\";\nimport { resolveKeystrokeConfigRoot } from \"../project/resolve-keystroke-config-root\";\nimport { readCliVersion } from \"../version\";\nimport { agentsGuideDir, readBundleVersion } from \"./agents-guide-version\";\nimport { scaffoldAgentsGuide } from \"./scaffold-agents-guide\";\n\nfunction 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 return false;\n}\n\nfunction resolveAutoSyncRoot(command: Command): string | null {\n const opts = command.opts<{ dir?: string }>();\n return resolveKeystrokeConfigRoot(opts.dir ?? process.cwd());\n}\n\n/** Sync AGENTS.md when stale; no-op when not in a project or already up to date. */\nexport async function syncAgentsGuide(command: Command): Promise<void> {\n if (shouldSkipAutoSync(command)) {\n return;\n }\n\n const projectRoot = resolveAutoSyncRoot(command);\n if (!projectRoot) {\n return;\n }\n\n const agentsMdPath = join(projectRoot, \"AGENTS.md\");\n if (!existsSync(agentsMdPath)) {\n return;\n }\n\n if (lstatSync(agentsMdPath).isSymbolicLink()) {\n return;\n }\n\n const legacySkillsDir = join(agentsGuideDir(projectRoot), \"skills\");\n if (existsSync(legacySkillsDir) && lstatSync(legacySkillsDir).isSymbolicLink()) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const bundledVersion = await readBundleVersion(projectRoot);\n if (bundledVersion === currentVersion) {\n return;\n }\n\n try {\n await scaffoldAgentsGuide(projectRoot);\n process.stderr.write(`Synced AGENTS.md to ${currentVersion}\\n`);\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`Failed to sync AGENTS.md (${detail}); continuing.\\n`);\n }\n}\n","import { Command } from \"commander\";\nimport { registerAgentsCommand } from \"./commands/agents\";\nimport { registerApiKeyCommand } from \"./commands/api-key\";\nimport { registerManagedServicesCommand } from \"./commands/managed-services\";\nimport { registerAppsCommand } from \"./commands/apps\";\nimport { registerTemplatesCommand } from \"./commands/templates\";\nimport { registerConnectCommand } from \"./commands/connect\";\nimport { registerCredentialsCommand } from \"./commands/credentials\";\nimport { registerAuthCommand } from \"./commands/auth\";\nimport { registerBuildCommand } from \"./commands/build\";\nimport { registerDeployCommand } from \"./commands/deploy\";\nimport { registerDevCommand } from \"./commands/dev\";\nimport { registerDocsCommand } from \"./commands/docs\";\nimport { registerFeedbackCommand } from \"./commands/feedback\";\nimport { registerHistoryCommand } from \"./commands/history\";\nimport { registerHealthCommand } from \"./commands/health\";\nimport { registerInitCommand } from \"./commands/init\";\nimport { registerLintCommand } from \"./commands/lint\";\nimport { registerTestCommand } from \"./commands/test\";\nimport { registerTypecheckCommand } from \"./commands/typecheck\";\nimport { registerOrganizationCommand } from \"./commands/organization\";\nimport { registerProjectsCommand } from \"./commands/projects\";\nimport { registerPullCommand } from \"./commands/pull\";\nimport { registerStartCommand } from \"./commands/start\";\nimport { registerTriggersCommand } from \"./commands/triggers\";\nimport { registerUpdateCommand } from \"./commands/update\";\nimport { registerWorkflowsCommand } from \"./commands/workflows\";\nimport { registerChannelsCommand } from \"./commands/channels\";\nimport { registerConfigCommand } from \"./commands/config\";\nimport { commandPath } from \"./command-path\";\nimport { syncAgentsGuide } from \"./skills/sync-agents-guide\";\nimport { initCliTelemetry, shutdownCliTelemetry, trackCliEvent } from \"./telemetry/init\";\nimport { readCliVersion } from \"./version\";\nimport { setCliTargetOptions } from \"./target-options\";\n\nconst commandStartTimes = new WeakMap<Command, number>();\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(\"--organization <slug>\", \"Platform organization slug (org-scoped API target)\")\n .option(\"--local\", \"Force local keystroke server URL\")\n .hook(\"preAction\", async (thisCommand, actionCommand) => {\n const opts = thisCommand.opts<{ project?: string; organization?: string; local?: boolean }>();\n setCliTargetOptions({\n projectId: opts.project,\n organizationRef: opts.organization,\n local: opts.local,\n });\n commandStartTimes.set(actionCommand, Date.now());\n await syncAgentsGuide(actionCommand);\n })\n .hook(\"postAction\", async (_thisCommand, actionCommand) => {\n const startedAt = commandStartTimes.get(actionCommand);\n const path = commandPath(actionCommand);\n if (path.length === 0) {\n return;\n }\n void trackCliEvent(\"cli:command_ran\", {\n properties: {\n command_path: path.join(\" \"),\n success: !process.exitCode,\n duration_ms: startedAt !== undefined ? Date.now() - startedAt : 0,\n },\n }).catch(() => {});\n });\n\n registerAuthCommand(program);\n registerConnectCommand(program);\n registerConfigCommand(program);\n registerOrganizationCommand(program);\n registerApiKeyCommand(program);\n registerManagedServicesCommand(program);\n registerProjectsCommand(program);\n registerHistoryCommand(program);\n registerCredentialsCommand(program);\n registerHealthCommand(program);\n registerDocsCommand(program);\n registerFeedbackCommand(program);\n registerInitCommand(program);\n registerBuildCommand(program);\n registerLintCommand(program);\n registerTypecheckCommand(program);\n registerTestCommand(program);\n registerDeployCommand(program);\n registerPullCommand(program);\n registerUpdateCommand(program);\n registerDevCommand(program);\n registerStartCommand(program);\n registerAgentsCommand(program);\n registerChannelsCommand(program);\n registerAppsCommand(program);\n registerTemplatesCommand(program);\n registerWorkflowsCommand(program);\n registerTriggersCommand(program);\n return program;\n}\n\nexport async function runCli(argv: string[]): Promise<void> {\n initCliTelemetry();\n try {\n const { maybeAutoUpdate } = await import(\"./update/maybe-auto-update\");\n await maybeAutoUpdate(argv);\n await createProgram().parseAsync(argv);\n } finally {\n await shutdownCliTelemetry();\n }\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"mappings":"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"}
1
+ {"version":3,"file":"program-OcNo9lRF.mjs","names":["mergeHeaders","isPlainObject","objectToString","#options","#runBeforeRequestHooks","#retry","#fetch","#consumeReturnedResponseFromBeforeRetryHook","#runAfterResponseHooks","#retryFromError","#getResponseRequest","#getNormalizedOptions","#getResponseData","#decorateResponse","#cancelResponseBody","#beforeRetryHookErrors","#retryCount","#originalRequest","#cancelBody","#normalizeSearchParams","#input","mergeHeaders","#userProvidedAbortSignal","#abortController","#createManagedSignal","#startTime","#getCurrentTime","#calculateRetryDelay","#calculateDelay","#readResponseText","#getErrorDataTimeout","#throwIfTotalTimeoutExhausted","#isJsonContentType","#parseJson","#getRemainingTotalTimeout","#assignRequest","#setResponseRequest","#returnedResponseFromBeforeRetryHook","#wrapRequestWithUploadProgress","#cachedNormalizedOptions","#responseRequests","normalizeBaseUrl","applyActiveOrganizationHeader","applyAuthHeaders","createAgentsResource","createCredentialsResource","createHealthResource","createTriggersResource","listRunsSearchParams","createWorkflowsResource","accountForUrl","accountForUrl","cacheKey","#hiddenStack","isPlainObject","now","getMethod","sleep","KEYSTROKE_CONFIG","KEYSTROKE_CONFIG","osRelease","collectValues","collectAppFieldValues","collectValues","collectSetValues","collectValues","collectSetValues","KEYSTROKE_SCOPE","readPackageJson","readInstalledVersion","collectEmails","parseProjectRole","resolveTarget","resolveTarget"],"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-file.ts","../src/auth/credentials-keychain.ts","../src/auth/credentials.ts","../../../packages/auth/dist/jwt-BVJ7dVm9.mjs","../../../packages/auth/dist/jwt-cache-4YqHn3jM.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/package.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/version.mjs","../../../node_modules/.pnpm/better-call@1.3.7_zod@4.4.3/node_modules/better-call/dist/error.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/error/index.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/plugins/device-authorization/client.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/env/env-impl.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/utils/url.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/utils/url.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.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/equality.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/broadcast-channel.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/focus-manager.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/online-manager.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/parser.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/session-refresh.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/fetch-plugins.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/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.3.1/node_modules/@better-fetch/fetch/dist/index.js","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/config.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/utils/is-atom.mjs","../../../node_modules/.pnpm/@better-auth+core@1.6.23_@better-auth+utils@0.4.2_@better-fetch+fetch@1.3.1_@openteleme_398718bcf9b56a2240f5e645ad2d451e/node_modules/@better-auth/core/dist/utils/string.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/node_modules/better-auth/dist/client/proxy.mjs","../../../node_modules/.pnpm/better-auth@1.6.23_@opentelemetry+api@1.9.1_@tanstack+react-start@1.168.26_crossws@0.4._c472a772c8203e3e5cd8f6066a81eb33/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/target-options.ts","../src/client.ts","../../../packages/sdk/dist/platform/index.mjs","../src/platform-client.ts","../src/resolve-resource-ref.ts","../src/organization/active-organization.ts","../src/project/resolve-keystroke-config-root.ts","../src/project/read-project-config.ts","../src/target-hints.ts","../src/resolve-organization-target.ts","../src/project/resolve-project-root.ts","../src/project/load-project-env.ts","../src/dev-session.ts","../src/resolve-api-target.ts","../../../packages/telemetry/dist/posthog-node.mjs","../src/errors/example-input.ts","../src/errors/format-api-message.ts","../src/errors/format-cli-error.ts","../src/errors/should-report-cli-exception.ts","../src/telemetry/identity.ts","../src/telemetry/public-config.ts","../src/telemetry/init.ts","../src/errors/run-command.ts","../src/errors/command-input.ts","../src/organization/require-admin-role.ts","../src/resolve-project-target.ts","../src/resolve-list-options.ts","../src/commands/agents/list.ts","../src/commands/agents/prompt.ts","../src/commands/inspect-detail.ts","../src/commands/projects/run-project.ts","../src/commands/agents/cancel-session.ts","../src/commands/agents/sessions.ts","../src/commands/agents/index.ts","../src/commands/api-key/run-api-key.ts","../src/commands/api-key/index.ts","../src/commands/managed-services/run-managed-services.ts","../src/commands/managed-services/index.ts","../src/commands/apps/action-hints.ts","../src/commands/apps/run-app-catalog.ts","../src/commands/apps/actions.ts","../src/commands/apps/parse-custom-app-fields.ts","../src/commands/apps/run-app-create.ts","../src/commands/apps/run-app-create-from-url.ts","../src/commands/apps/create.ts","../src/commands/apps/run-app-execute.ts","../src/commands/apps/execute.ts","../src/commands/apps/get.ts","../src/commands/apps/run-app-list.ts","../src/commands/apps/list.ts","../src/commands/apps/search.ts","../src/commands/apps/generate-app-stub.ts","../src/commands/apps/run-app-sync.ts","../src/commands/apps/sync.ts","../src/commands/apps/index.ts","../src/commands/templates/apply-template-files.ts","../src/commands/templates/apply.ts","../src/commands/templates/list.ts","../src/commands/templates/show.ts","../src/commands/templates/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/connect/parse-connect-scopes.ts","../src/commands/credentials/parse-set-scopes.ts","../src/commands/credentials/duplicate.ts","../src/commands/credentials/get.ts","../src/commands/credentials/list.ts","../src/project/env-ref.ts","../src/commands/credentials/parse-value.ts","../src/commands/credentials/rotate-key.ts","../src/commands/credentials/format-set-conflict-error.ts","../src/commands/credentials/set.ts","../src/commands/credentials/parse-update-scope.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/update/ensure-sdk-current.ts","../src/commands/build.ts","../src/tooling/resolve-configs-dir.ts","../src/tooling/run-tool.ts","../src/tooling/run-lint.ts","../src/tooling/run-typecheck.ts","../src/commands/deploy.ts","../src/resolve-local-api-origin.ts","../src/project/runtime-child-env.ts","../src/project/bootstrap-run.ts","../src/process/run-processes.ts","../src/runtime/ensure-native-deps.ts","../src/runtime/resolve-runtime-node-modules.ts","../src/commands/dev.ts","../src/commands/docs/run-docs.ts","../src/commands/docs/docs-mcp-url.ts","../src/commands/docs/query.ts","../src/commands/docs/search.ts","../src/commands/docs/index.ts","../src/commands/feedback/create.ts","../src/commands/feedback/index.ts","../src/commands/history/run-history.ts","../src/commands/history/index.ts","../src/commands/health.ts","../src/init/project-name.ts","../src/init/prompts.ts","../src/init/copy-template.ts","../src/init/resolve-template-dir.ts","../src/init/project-files.ts","../src/skills/agents-guide-version.ts","../src/skills/resolve-skills-bundle-dir.ts","../src/skills/scaffold-agents-guide.ts","../src/project/write-project-config.ts","../src/init/scaffold-empty-src-dirs.ts","../src/init/scaffold-project-dotfiles.ts","../src/init/run-init.ts","../src/commands/init.ts","../src/commands/lint.ts","../src/commands/test.ts","../src/commands/typecheck.ts","../src/commands/organization/run-organization.ts","../src/commands/organization/index.ts","../src/commands/projects/run-project-link.ts","../src/commands/projects/run-project-members.ts","../src/commands/projects/members.ts","../src/commands/projects/run-project-settings.ts","../src/commands/projects/settings.ts","../src/commands/projects/index.ts","../src/commands/pull/run-pull.ts","../src/commands/pull/index.ts","../src/commands/start.ts","../src/commands/triggers/list.ts","../src/commands/triggers/resolve-trigger-attachment.ts","../src/commands/triggers/invoke.ts","../src/commands/triggers/runs.ts","../src/commands/triggers/run-attachment-enabled.ts","../src/commands/triggers/toggle.ts","../src/commands/triggers/index.ts","../src/update/update-project-packages.ts","../src/commands/update.ts","../src/commands/workflows/forms.ts","../src/commands/workflows/list.ts","../src/commands/workflows/run.ts","../src/commands/workflows/cancel-run.ts","../src/commands/workflows/runs.ts","../src/commands/workflows/index.ts","../src/commands/channels/run-channel.ts","../src/commands/channels/platforms.ts","../src/commands/channels/resolve-channel-project.ts","../src/commands/channels/list.ts","../src/commands/channels/index.ts","../src/commands/config/preferences-patch.ts","../src/commands/config/preferences.ts","../src/commands/config/index.ts","../src/command-path.ts","../src/skills/sync-agents-guide.ts","../src/program.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, PromptInputSchema, PromptResponseSchema, QueuedAgentPromptResponseSchema, QueuedRunResponseSchema, SkipResponseSchema, TriggerDetailResponseSchema, TriggerListResponseSchema, TriggerRunDetailResponseSchema, TriggerRunListResponseSchema, UpdateCredentialInstanceBodySchema, WorkflowRunDetailResponseSchema, WorkflowRunHooksResponseSchema, WorkflowRunListResponseSchema, parseErrorResponse } from \"@keystrokehq/shared\";\n//#region src/auth.ts\nfunction normalizeBaseUrl(baseUrl) {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\nfunction applyActiveOrganizationHeader(request, organizationId) {\n\tif (organizationId) request.headers.set(ACTIVE_ORG_HEADER, organizationId);\n}\nfunction applyAuthHeaders(request, auth, getToken) {\n\tif (!auth || auth.type === \"none\") return;\n\tif (auth.type === \"apiKey\") {\n\t\tconst key = auth.getKey();\n\t\tif (key) request.headers.set(\"x-api-key\", key);\n\t\treturn;\n\t}\n\tif (auth.type === \"bearer\") {\n\t\tconst tokenPromise = getToken?.() ?? auth.getToken();\n\t\treturn Promise.resolve(tokenPromise).then((token) => {\n\t\t\tif (token) request.headers.set(\"Authorization\", `Bearer ${token}`);\n\t\t});\n\t}\n}\n//#endregion\n//#region src/errors.ts\nvar KeystrokeError = class extends Error {\n\tstatus;\n\tbody;\n\tconstructor(message, status, body) {\n\t\tsuper(message);\n\t\tthis.name = \"KeystrokeError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n};\nasync function toKeystrokeError(error) {\n\tif (!isHTTPError(error)) return new KeystrokeError(error instanceof Error ? error.message : \"Request failed\", 0, null);\n\tconst status = error.response.status;\n\tconst body = error.data ?? null;\n\tconst parsed = parseErrorResponse(body);\n\treturn new KeystrokeError(parsed ? parsed.message ?? parsed.error : `Request failed with status ${status}`, status, body);\n}\n//#endregion\n//#region src/resources/shared.ts\nasync function readJson(response) {\n\treturn response.json();\n}\n//#endregion\n//#region src/resources/agents.ts\nfunction isQueuedAgentPromptResponse(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (\"messages\" in value) return false;\n\treturn QueuedAgentPromptResponseSchema.safeParse(value).success;\n}\nfunction listSessionsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.status) params.status = query.status;\n\tif (query.source) params.source = query.source;\n\treturn params;\n}\nfunction detailSearchParams$2(query) {\n\tif (!query?.include) return {};\n\treturn { include: query.include };\n}\nfunction createAgentsResource(http) {\n\treturn {\n\t\tasync prompt(id, input) {\n\t\t\tconst body = PromptInputSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`agents/${id}`, { json: body });\n\t\t\t\tconst data = await readJson(response);\n\t\t\t\tif (response.status === 202) return QueuedAgentPromptResponseSchema.parse(data);\n\t\t\t\treturn PromptResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listSessions(agentId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`agents/${agentId}/sessions`, { searchParams: listSessionsSearchParams(query) }).json();\n\t\t\t\treturn AgentSessionListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getSession(agentId, sessionId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`agents/${agentId}/sessions/${sessionId}`, { searchParams: detailSearchParams$2(query) }).json();\n\t\t\t\treturn AgentSessionDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/connect.ts\nfunction routeFromPath(path) {\n\treturn path.replace(/^\\//, \"\");\n}\nfunction createConnectResource(http) {\n\treturn {\n\t\tasync listProviders() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"connect/providers\").json();\n\t\t\t\treturn ConnectProvidersResponseSchema.parse(data).providers;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getAuthorizeUrl(path) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(routeFromPath(path)).json();\n\t\t\t\treturn ConnectAuthorizeUrlResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/credentials.ts\nfunction createCredentialsResource(http) {\n\treturn {\n\t\tasync listInstances(options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = options?.key ? { key: options.key } : void 0;\n\t\t\t\tconst data = await http.get(\"credentials/instances\", { searchParams }).json();\n\t\t\t\treturn CredentialInstanceListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync createInstance(body) {\n\t\t\ttry {\n\t\t\t\tconst payload = CreateCredentialInstanceBodySchema.parse(body);\n\t\t\t\tconst data = await http.post(\"credentials/instances\", { json: payload }).json();\n\t\t\t\treturn CredentialInstanceRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateInstance(id, body) {\n\t\t\ttry {\n\t\t\t\tconst payload = UpdateCredentialInstanceBodySchema.parse(body);\n\t\t\t\tconst data = await http.put(`credentials/instances/${id}`, { json: payload }).json();\n\t\t\t\treturn CredentialInstanceRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync deleteInstance(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`credentials/instances/${id}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listAssignments(query) {\n\t\t\ttry {\n\t\t\t\tconst params = CredentialAssignmentListQuerySchema.parse(query);\n\t\t\t\tconst data = await http.get(\"credentials/assignments\", { searchParams: params }).json();\n\t\t\t\treturn CredentialAssignmentListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync assignCredential(body) {\n\t\t\ttry {\n\t\t\t\tconst payload = AssignCredentialBodySchema.parse(body);\n\t\t\t\tconst data = await http.put(\"credentials/assignments\", { json: payload }).json();\n\t\t\t\treturn CredentialAssignmentRecordSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync unassignCredential(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`credentials/assignments/${id}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listConsumers(query) {\n\t\t\ttry {\n\t\t\t\tconst params = CredentialConsumerListQuerySchema.parse(query);\n\t\t\t\tconst data = await http.get(\"credentials/consumers\", { searchParams: params }).json();\n\t\t\t\treturn CredentialConsumerListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/resources/health.ts\nfunction createHealthResource(http) {\n\treturn { async check() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"health\").json();\n\t\t\treturn HealthResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toKeystrokeError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/resources/openapi.ts\nfunction createOpenApiResource(http) {\n\treturn { async fetch() {\n\t\ttry {\n\t\t\treturn await http.get(\"openapi.json\").json();\n\t\t} catch (error) {\n\t\t\tthrow await toKeystrokeError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/resources/triggers.ts\nfunction 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\tif (query.outcome) params.outcome = query.outcome;\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 listRuns(attachmentId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`triggers/${attachmentId}/runs`, { searchParams: listRunsSearchParams$1(query) }).json();\n\t\t\t\treturn TriggerRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRun(attachmentId, runId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`triggers/${attachmentId}/runs/${runId}`, { searchParams: detailSearchParams$1(query) }).json();\n\t\t\t\treturn TriggerRunDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\nfunction isSkippedTriggerResponse(value) {\n\treturn SkipResponseSchema.safeParse(value).success;\n}\n//#endregion\n//#region src/resources/workflows.ts\nfunction isQueuedRunResponse(value) {\n\treturn QueuedRunResponseSchema.safeParse(value).success;\n}\nfunction listRunsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.status) params.status = query.status;\n\tif (query.trigger) params.trigger = query.trigger;\n\treturn params;\n}\nfunction detailSearchParams(query) {\n\tif (!query?.include) return {};\n\treturn { include: query.include };\n}\nfunction createWorkflowsResource(http) {\n\treturn {\n\t\tasync run(id, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`workflows/${id}`, { json: input });\n\t\t\t\tconst data = await readJson(response);\n\t\t\t\tif (response.status === 202) return QueuedRunResponseSchema.parse(data);\n\t\t\t\treturn data;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listRuns(workflowId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs`, { searchParams: listRunsSearchParams(query) }).json();\n\t\t\t\treturn WorkflowRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRun(workflowId, runId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs/${runId}`, { searchParams: detailSearchParams(query) }).json();\n\t\t\t\treturn WorkflowRunDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t},\n\t\tasync listHooks(workflowId, runId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`workflows/${workflowId}/runs/${runId}/hooks`).json();\n\t\t\t\treturn WorkflowRunHooksResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toKeystrokeError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/index.ts\nfunction createKeystrokeClient(options) {\n\tconst auth = options.auth ?? { type: \"none\" };\n\tconst base = normalizeBaseUrl(options.baseUrl);\n\tconst getActiveOrganizationId = options.getActiveOrganizationId;\n\tconst http = ky.create({\n\t\tprefix: base === \"\" ? void 0 : `${base}/`,\n\t\tcredentials: \"omit\",\n\t\thooks: { beforeRequest: [({ request }) => {\n\t\t\tapplyActiveOrganizationHeader(request, getActiveOrganizationId?.());\n\t\t\treturn applyAuthHeaders(request, auth);\n\t\t}] },\n\t\t...options.ky\n\t});\n\treturn {\n\t\thttp,\n\t\thealth: createHealthResource(http),\n\t\tconnect: createConnectResource(http),\n\t\tcredentials: createCredentialsResource(http),\n\t\topenapi: createOpenApiResource(http),\n\t\tagents: createAgentsResource(http),\n\t\tworkflows: createWorkflowsResource(http),\n\t\ttriggers: createTriggersResource(http)\n\t};\n}\n//#endregion\nexport { KeystrokeError, createKeystrokeClient, isQueuedAgentPromptResponse, isQueuedRunResponse, isSkippedTriggerResponse, toKeystrokeError };\n\n//# sourceMappingURL=index.mjs.map","import {\n chmodSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n renameSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nimport { getCliConfigDir } from \"../config\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\n\nconst CREDENTIALS_FILE_NAME = \"credentials.json\";\n\nexport const CREDENTIALS_DIR_MODE = 0o700;\nexport const CREDENTIALS_FILE_MODE = 0o600;\n\ntype CredentialsFile = {\n tokens: Record<string, string>;\n};\n\nfunction accountForUrl(url: string): string {\n return new URL(url).hostname;\n}\n\nexport function credentialsFilePath(configDir = getCliConfigDir()): string {\n return join(configDir, CREDENTIALS_FILE_NAME);\n}\n\nfunction assertSafeCredentialsPath(path: string): void {\n if (!existsSync(path)) {\n return;\n }\n\n const stats = lstatSync(path);\n if (stats.isSymbolicLink() || !stats.isFile()) {\n throw new ExpectedCliError(\n `Refusing to use credentials path that is not a regular file: ${path}`,\n );\n }\n}\n\nfunction ensureCredentialsDir(path: string): void {\n const dir = dirname(path);\n mkdirSync(dir, { recursive: true, mode: CREDENTIALS_DIR_MODE });\n try {\n chmodSync(dir, CREDENTIALS_DIR_MODE);\n } catch {\n // Best-effort on platforms that ignore POSIX modes.\n }\n}\n\nfunction emptyCredentials(): CredentialsFile {\n return { tokens: {} };\n}\n\nfunction readCredentialsFile(path: string): CredentialsFile {\n assertSafeCredentialsPath(path);\n if (!existsSync(path)) {\n return emptyCredentials();\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(path, \"utf8\"));\n } catch {\n throw new ExpectedCliError(`Credentials file is not valid JSON: ${path}`);\n }\n\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n !(\"tokens\" in parsed) ||\n typeof (parsed as { tokens: unknown }).tokens !== \"object\" ||\n (parsed as { tokens: unknown }).tokens === null ||\n Array.isArray((parsed as { tokens: unknown }).tokens)\n ) {\n throw new ExpectedCliError(`Credentials file has an invalid shape: ${path}`);\n }\n\n const tokens: Record<string, string> = {};\n for (const [key, value] of Object.entries((parsed as CredentialsFile).tokens)) {\n if (typeof value === \"string\" && value.length > 0) {\n tokens[key] = value;\n }\n }\n\n return { tokens };\n}\n\nfunction writeCredentialsFile(path: string, data: CredentialsFile): void {\n ensureCredentialsDir(path);\n assertSafeCredentialsPath(path);\n\n const tempPath = `${path}.${process.pid}.${Date.now()}.tmp`;\n const payload = `${JSON.stringify(data, null, 2)}\\n`;\n\n try {\n writeFileSync(tempPath, payload, {\n encoding: \"utf8\",\n mode: CREDENTIALS_FILE_MODE,\n flag: \"wx\",\n });\n try {\n chmodSync(tempPath, CREDENTIALS_FILE_MODE);\n } catch {\n // Best-effort on platforms that ignore POSIX modes.\n }\n renameSync(tempPath, path);\n try {\n chmodSync(path, CREDENTIALS_FILE_MODE);\n } catch {\n // Best-effort on platforms that ignore POSIX modes.\n }\n } catch (error) {\n try {\n unlinkSync(tempPath);\n } catch {\n // Ignore cleanup failures for the temp file.\n }\n throw error;\n }\n}\n\nexport function getFileToken(url: string, configDir = getCliConfigDir()): string | undefined {\n const path = credentialsFilePath(configDir);\n return readCredentialsFile(path).tokens[accountForUrl(url)];\n}\n\nexport function setFileToken(url: string, token: string, configDir = getCliConfigDir()): void {\n const path = credentialsFilePath(configDir);\n const data = readCredentialsFile(path);\n data.tokens[accountForUrl(url)] = token;\n writeCredentialsFile(path, data);\n}\n\nexport function clearFileToken(url: string, configDir = getCliConfigDir()): void {\n const path = credentialsFilePath(configDir);\n if (!existsSync(path)) {\n return;\n }\n\n const account = accountForUrl(url);\n const data = readCredentialsFile(path);\n if (!(account in data.tokens)) {\n return;\n }\n\n delete data.tokens[account];\n\n if (Object.keys(data.tokens).length === 0) {\n assertSafeCredentialsPath(path);\n unlinkSync(path);\n return;\n }\n\n writeCredentialsFile(path, data);\n}\n","import { spawnSync } from \"node:child_process\";\nimport { Entry } from \"@napi-rs/keyring\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\n\n/** Stable service for the Apple `/usr/bin/security` backend (not Node-bound). */\nexport const KEYCHAIN_SERVICE = \"keystroke-cli\";\n\n/** Legacy `@napi-rs/keyring` service — migrated once into KEYCHAIN_SERVICE on macOS. */\nexport const LEGACY_KEYCHAIN_SERVICE = \"keystroke\";\n\nconst SECURITY_BIN = \"/usr/bin/security\";\n\nexport const KEYCHAIN_UNAVAILABLE_MESSAGE =\n \"OS keychain is unavailable or locked. For headless environments, set KEYSTROKE_API_KEY instead of using `keystroke auth login`, or run `keystroke auth login --credential-storage file`.\";\n\n/** Match storage-specific keychain/keyring failures only — avoid generic OS permission phrases. */\nexport function isKeychainFailure(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const message = error.message.toLowerCase();\n return (\n message.includes(\"keychain\") ||\n message.includes(\"keyring\") ||\n message.includes(\"secret service\") ||\n message.includes(\"libsecret\") ||\n message.includes(\"password store\") ||\n message.includes(\"no password store\") ||\n message.includes(\"dbus\") ||\n message.includes(\"no such interface\") ||\n message.includes(\"platform secure storage\") ||\n message.includes(\"user interaction is not allowed\") ||\n message.includes(\"errsec\") ||\n message.includes(\"keychain access failed via security\") ||\n /security.*(denied|locked|unable|failed)/i.test(message)\n );\n}\n\nexport function withKeychain<T>(fn: () => T): T {\n try {\n return fn();\n } catch (error) {\n if (isKeychainFailure(error)) {\n throw new ExpectedCliError(KEYCHAIN_UNAVAILABLE_MESSAGE, {\n cause: error instanceof Error ? error : undefined,\n });\n }\n throw error;\n }\n}\n\nfunction accountForUrl(url: string): string {\n return new URL(url).hostname;\n}\n\ntype SecurityResult = {\n status: number | null;\n stdout: string;\n stderr: string;\n};\n\nfunction runSecurity(args: string[], input?: string): SecurityResult {\n const result = spawnSync(SECURITY_BIN, args, {\n encoding: \"utf8\",\n input,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n if (result.error) {\n throw result.error;\n }\n\n return {\n status: result.status,\n stdout: result.stdout ?? \"\",\n stderr: result.stderr ?? \"\",\n };\n}\n\nfunction securityErrorMessage(result: SecurityResult): string {\n const detail = (result.stderr || result.stdout).trim();\n return detail.length > 0\n ? `Keychain access failed via security: ${detail}`\n : `Keychain access failed via security (exit ${result.status ?? \"unknown\"})`;\n}\n\n/** errSecItemNotFound — item does not exist. */\nfunction isSecurityNotFound(result: SecurityResult): boolean {\n if (result.status === 44) {\n return true;\n }\n const text = `${result.stderr}\\n${result.stdout}`.toLowerCase();\n return text.includes(\"could not be found\") || text.includes(\"item not found\");\n}\n\nfunction getViaSecurity(account: string, service: string): string | undefined {\n const result = runSecurity([\"find-generic-password\", \"-s\", service, \"-a\", account, \"-w\"]);\n if (isSecurityNotFound(result)) {\n return undefined;\n }\n if (result.status !== 0) {\n throw new Error(securityErrorMessage(result));\n }\n // Trim a single trailing newline security may append; keep other whitespace.\n const password = result.stdout.replace(/\\n$/, \"\");\n // Empty items can be left behind when `security -w` falls back to a TTY prompt.\n return password.length > 0 ? password : undefined;\n}\n\nfunction setViaSecurity(account: string, service: string, token: string): void {\n if (token.length === 0) {\n throw new Error(\"Refusing to store an empty keychain token\");\n }\n // Pass the password as `-w <token>`. Using `-w` as the final flag with no value\n // makes `security` open /dev/tty and prompt interactively (ignoring piped stdin).\n const result = runSecurity([\n \"add-generic-password\",\n \"-U\",\n \"-s\",\n service,\n \"-a\",\n account,\n \"-w\",\n token,\n ]);\n if (result.status !== 0) {\n throw new Error(securityErrorMessage(result));\n }\n}\n\nfunction deleteViaSecurity(account: string, service: string): void {\n const result = runSecurity([\"delete-generic-password\", \"-s\", service, \"-a\", account]);\n if (isSecurityNotFound(result)) {\n return;\n }\n if (result.status !== 0) {\n throw new Error(securityErrorMessage(result));\n }\n}\n\nfunction getLegacyNapi(account: string): string | undefined {\n const entry = new Entry(LEGACY_KEYCHAIN_SERVICE, account);\n const password = entry.getPassword();\n return password === null ? undefined : password;\n}\n\nfunction clearLegacyNapi(account: string): void {\n const entry = new Entry(LEGACY_KEYCHAIN_SERVICE, account);\n try {\n entry.deletePassword();\n } catch {\n // Best-effort cleanup after a successful migration write.\n }\n}\n\nfunction getNapi(account: string, service = KEYCHAIN_SERVICE): string | undefined {\n const entry = new Entry(service, account);\n const password = entry.getPassword();\n return password === null ? undefined : password;\n}\n\nfunction setNapi(account: string, token: string, service = KEYCHAIN_SERVICE): void {\n const entry = new Entry(service, account);\n entry.setPassword(token);\n}\n\nfunction deleteNapi(account: string, service = KEYCHAIN_SERVICE): void {\n const entry = new Entry(service, account);\n entry.deletePassword();\n}\n\nfunction migrateLegacyMacToken(account: string): string | undefined {\n let legacy: string | undefined;\n try {\n legacy = getLegacyNapi(account);\n } catch (error) {\n if (isKeychainFailure(error)) {\n throw error;\n }\n return undefined;\n }\n\n if (!legacy) {\n return undefined;\n }\n\n setViaSecurity(account, KEYCHAIN_SERVICE, legacy);\n const verified = getViaSecurity(account, KEYCHAIN_SERVICE);\n if (verified !== legacy) {\n throw new Error(\n \"Keychain migration failed: wrote legacy token via security but could not read it back\",\n );\n }\n clearLegacyNapi(account);\n return legacy;\n}\n\nexport function getKeychainToken(url: string): string | undefined {\n return withKeychain(() => {\n const account = accountForUrl(url);\n\n if (process.platform === \"darwin\") {\n const current = getViaSecurity(account, KEYCHAIN_SERVICE);\n if (current !== undefined) {\n return current;\n }\n return migrateLegacyMacToken(account);\n }\n\n return getNapi(account);\n });\n}\n\nexport function setKeychainToken(url: string, token: string): void {\n withKeychain(() => {\n const account = accountForUrl(url);\n if (process.platform === \"darwin\") {\n setViaSecurity(account, KEYCHAIN_SERVICE, token);\n clearLegacyNapi(account);\n return;\n }\n setNapi(account, token);\n });\n}\n\nexport function clearKeychainToken(url: string): void {\n withKeychain(() => {\n const account = accountForUrl(url);\n if (process.platform === \"darwin\") {\n deleteViaSecurity(account, KEYCHAIN_SERVICE);\n clearLegacyNapi(account);\n return;\n }\n try {\n deleteNapi(account);\n } catch (error) {\n // Treat missing entries as success for logout.\n if (error instanceof Error && /no.?entry|not found|password not found/i.test(error.message)) {\n return;\n }\n throw error;\n }\n });\n}\n","import type { CredentialStorage } from \"./credential-storage\";\nimport { clearFileToken, getFileToken, setFileToken } from \"./credentials-file\";\nimport { clearKeychainToken, getKeychainToken, setKeychainToken } from \"./credentials-keychain\";\n\nexport type { CredentialStorage } from \"./credential-storage\";\nexport {\n CREDENTIAL_STORAGE_VALUES,\n isCredentialStorage,\n parseCredentialStorage,\n} from \"./credential-storage\";\n\nexport type CredentialOptions = {\n storage?: CredentialStorage;\n /** Override `~/.keystroke` for file-backed credentials (tests). */\n configDir?: string;\n};\n\ntype CacheKey = `${CredentialStorage}:${string}`;\n\nconst MISSING = Symbol(\"missing\");\ntype CacheValue = string | typeof MISSING;\n\nconst tokenCache = new Map<CacheKey, CacheValue>();\n\nfunction accountForUrl(url: string): string {\n return new URL(url).hostname;\n}\n\nfunction resolveStorage(storage?: CredentialStorage): CredentialStorage {\n return storage ?? \"keychain\";\n}\n\nfunction cacheKey(url: string, storage: CredentialStorage): CacheKey {\n return `${storage}:${accountForUrl(url)}`;\n}\n\nfunction readFromBackend(\n url: string,\n storage: CredentialStorage,\n configDir?: string,\n): string | undefined {\n if (storage === \"file\") {\n return getFileToken(url, configDir);\n }\n return getKeychainToken(url);\n}\n\nfunction writeToBackend(\n url: string,\n token: string,\n storage: CredentialStorage,\n configDir?: string,\n): void {\n if (storage === \"file\") {\n setFileToken(url, token, configDir);\n return;\n }\n setKeychainToken(url, token);\n}\n\nfunction deleteFromBackend(url: string, storage: CredentialStorage, configDir?: string): void {\n if (storage === \"file\") {\n clearFileToken(url, configDir);\n return;\n }\n clearKeychainToken(url);\n}\n\n/** Clear the in-process credential cache (tests / logout). */\nexport function clearAccessTokenCache(): void {\n tokenCache.clear();\n}\n\nexport function getAccessToken(url: string, options: CredentialOptions = {}): string | undefined {\n const storage = resolveStorage(options.storage);\n const key = cacheKey(url, storage);\n const cached = tokenCache.get(key);\n if (cached !== undefined) {\n return cached === MISSING ? undefined : cached;\n }\n\n const token = readFromBackend(url, storage, options.configDir);\n tokenCache.set(key, token === undefined ? MISSING : token);\n return token;\n}\n\nexport function setAccessToken(url: string, token: string, options: CredentialOptions = {}): void {\n const storage = resolveStorage(options.storage);\n writeToBackend(url, token, storage, options.configDir);\n tokenCache.set(cacheKey(url, storage), token);\n}\n\nexport function clearAccessToken(url: string, options: CredentialOptions = {}): void {\n const storage = resolveStorage(options.storage);\n deleteFromBackend(url, storage, options.configDir);\n tokenCache.set(cacheKey(url, storage), MISSING);\n}\n\n/**\n * Persist a token to `storage`, then best-effort clear the other backend when switching.\n * Does not discard the newly stored credential if cleanup fails.\n */\nexport function setAccessTokenSwitchingStorage(\n url: string,\n token: string,\n options: {\n storage: CredentialStorage;\n previousStorage?: CredentialStorage;\n configDir?: string;\n },\n): { cleanupWarning?: string } {\n setAccessToken(url, token, { storage: options.storage, configDir: options.configDir });\n\n const previous = options.previousStorage;\n if (!previous || previous === options.storage) {\n return {};\n }\n\n try {\n clearAccessToken(url, { storage: previous, configDir: options.configDir });\n return {};\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n return {\n cleanupWarning: `Stored credentials in ${options.storage}, but failed to clear ${previous} storage: ${detail}`,\n };\n }\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.23\";\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","//#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 = 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\nconst SLASH_CHAR_CODE = \"/\".charCodeAt(0);\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 trimTrailingSlashes(value) {\n\tlet end = value.length;\n\twhile (end > 0 && value.charCodeAt(end - 1) === SLASH_CHAR_CODE) end--;\n\treturn end === value.length ? value : value.slice(0, end);\n}\nfunction checkHasPath(url) {\n\ttry {\n\t\treturn (trimTrailingSlashes(new URL(url).pathname) || \"/\") !== \"/\";\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 = trimTrailingSlashes(url);\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, trimTrailingSlashes };\n","//#region src/utils/url.ts\n/**\n* Normalizes a request pathname by removing the basePath prefix and trailing slashes.\n* This is useful for matching paths against configured path lists.\n*\n* @param requestUrl - The full request URL\n* @param basePath - The base path of the auth API (e.g., \"/api/auth\")\n* @returns The normalized path without basePath prefix or trailing slashes,\n* or \"/\" if URL parsing fails\n*\n* @example\n* normalizePathname(\"http://localhost:3000/api/auth/sso/saml2/callback/provider1\", \"/api/auth\")\n* // Returns: \"/sso/saml2/callback/provider1\"\n*\n* normalizePathname(\"http://localhost:3000/sso/saml2/callback/provider1/\", \"/\")\n* // Returns: \"/sso/saml2/callback/provider1\"\n*/\nfunction normalizePathname(requestUrl, basePath) {\n\tlet pathname;\n\ttry {\n\t\tpathname = new URL(requestUrl).pathname.replace(/\\/+$/, \"\") || \"/\";\n\t} catch {\n\t\treturn \"/\";\n\t}\n\tconst normalizedBasePath = basePath.replace(/\\/+$/, \"\");\n\tif (normalizedBasePath === \"\") return pathname;\n\tif (pathname === normalizedBasePath) return \"/\";\n\tif (pathname.startsWith(normalizedBasePath + \"/\")) return pathname.slice(normalizedBasePath.length).replace(/\\/+$/, \"\") || \"/\";\n\treturn pathname;\n}\n/**\n* Schemes that execute or embed code when navigated to or accepted as a\n* redirect target. These are never safe as an OAuth `redirect_uri` or as a\n* client-side navigation target (`window.location.href`, `location.assign`, ...).\n*/\nconst DANGEROUS_URL_SCHEMES = [\n\t\"javascript:\",\n\t\"data:\",\n\t\"vbscript:\"\n];\n/**\n* Returns `false` only when `value` is an absolute URL using a dangerous scheme\n* (`javascript:`, `data:`, `vbscript:`). Relative URLs (e.g. `/dashboard`) and\n* safe absolute schemes (`http`, `https`, custom app schemes such as\n* `myapp://`) return `true`.\n*\n* Use this to guard browser navigation sinks and any redirect target that may\n* originate from untrusted input. It is intentionally narrow: it blocks code\n* execution schemes without rejecting relative paths or mobile deep links.\n*/\nfunction isSafeUrlScheme(value) {\n\tlet parsed;\n\ttry {\n\t\tparsed = new URL(value);\n\t} catch {\n\t\treturn true;\n\t}\n\treturn !DANGEROUS_URL_SCHEMES.includes(parsed.protocol);\n}\n//#endregion\nexport { DANGEROUS_URL_SCHEMES, isSafeUrlScheme, normalizePathname };\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 { onSet } from \"nanostores\";\n//#region src/client/equality.ts\nfunction isPlainObject(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\n/**\n* Deep structural equality for JSON-serializable values.\n* Handles: primitives, null, arrays, and plain objects.\n* Short-circuits on referential equality at every recursion level.\n*/\nfunction isJsonEqual(a, b) {\n\tif (a === b) return true;\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\tif (a.length !== b.length) return false;\n\t\tfor (let i = 0; i < a.length; i++) if (!isJsonEqual(a[i], b[i])) return false;\n\t\treturn true;\n\t}\n\tif (isPlainObject(a) && isPlainObject(b)) {\n\t\tconst keysA = Object.keys(a);\n\t\tconst keysB = Object.keys(b);\n\t\tif (keysA.length !== keysB.length) return false;\n\t\tfor (const key of keysA) if (!(key in b) || !isJsonEqual(a[key], b[key])) return false;\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Attach an equality gate to a nanostores atom via `onSet`.\n* When `isEqual(currentValue, newValue)` returns true, the `set()` call\n* is aborted: no listeners fire, no framework re-renders occur.\n*\n* Returns the unsubscribe function from `onSet`.\n*/\nfunction withEquality(store, isEqual) {\n\treturn onSet(store, ({ newValue, abort }) => {\n\t\tif (isEqual(store.value, newValue)) abort();\n\t});\n}\n//#endregion\nexport { isJsonEqual, withEquality };\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\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* 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 { fetchSession, shouldPollSession = () => true, sessionSignal, 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\tisInitialized: false,\n\t\tlastSessionRequest: 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\tfetchSession();\n\t\t\treturn;\n\t\t}\n\t\tif (event?.event === \"poll\") {\n\t\t\tstate.lastSessionRequest = now();\n\t\t\tfetchSession();\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\tfetchSession();\n\t\t\treturn;\n\t\t}\n\t\tfetchSession();\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 (shouldPollSession()) 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 setupSignalSubscription = () => {\n\t\tstate.unsubscribeSignal = sessionSignal.listen(() => {\n\t\t\tfetchSession();\n\t\t});\n\t};\n\tconst init = () => {\n\t\tif (state.isInitialized) return;\n\t\tstate.isInitialized = true;\n\t\tsetupPolling();\n\t\tsetupBroadcast();\n\t\tsetupFocusRefetch();\n\t\tsetupOnlineRefetch();\n\t\tsetupSignalSubscription();\n\t\tstate.cleanupBroadcastSetup = getGlobalBroadcastChannel().setup();\n\t\tstate.cleanupFocusSetup = getGlobalFocusManager().setup();\n\t\tstate.cleanupOnlineSetup = getGlobalOnlineManager().setup();\n\t};\n\tconst cleanup = () => {\n\t\tif (!state.isInitialized) return;\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\tif (state.unsubscribeSignal) {\n\t\t\tstate.unsubscribeSignal();\n\t\t\tstate.unsubscribeSignal = void 0;\n\t\t}\n\t\tif (state.cleanupBroadcastSetup) {\n\t\t\tstate.cleanupBroadcastSetup();\n\t\t\tstate.cleanupBroadcastSetup = void 0;\n\t\t}\n\t\tif (state.cleanupFocusSetup) {\n\t\t\tstate.cleanupFocusSetup();\n\t\t\tstate.cleanupFocusSetup = void 0;\n\t\t}\n\t\tif (state.cleanupOnlineSetup) {\n\t\t\tstate.cleanupOnlineSetup();\n\t\t\tstate.cleanupOnlineSetup = void 0;\n\t\t}\n\t\tstate.isInitialized = false;\n\t\tstate.lastSessionRequest = 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","import { isSafeUrlScheme } from \"@better-auth/core/utils/url\";\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 && isSafeUrlScheme(context.data.url)) {\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 { isJsonEqual, withEquality } from \"./equality.mjs\";\nimport { createSessionRefreshManager } from \"./session-refresh.mjs\";\nimport { atom, onMount } from \"nanostores\";\n//#region src/client/session-atom.ts\nconst isServer = () => typeof window === \"undefined\";\n/**\n* Normalize $fetch response: `throw: true` returns data directly,\n* 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}\nfunction normalizeSessionData(data) {\n\tif (!data) return null;\n\tif (data.session === null && data.user === null) return null;\n\treturn data;\n}\nfunction isSessionAtomEqual(a, b) {\n\treturn isJsonEqual(a.data, b.data) && a.error === b.error && a.isPending === b.isPending && a.isRefetching === b.isRefetching && a.refetch === b.refetch;\n}\nfunction getSessionAtom($fetch, options) {\n\tconst $signal = atom(false);\n\tlet abortController;\n\tconst refetch = (queryParams) => fetchSession(queryParams);\n\tconst session = atom({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: true,\n\t\tisRefetching: false,\n\t\trefetch\n\t});\n\twithEquality(session, isSessionAtomEqual);\n\tconst settleAbortedFetch = (controller) => {\n\t\tif (abortController !== controller) return;\n\t\tconst current = session.get();\n\t\tabortController = void 0;\n\t\tif (!current.isPending && !current.isRefetching) return;\n\t\tsession.set({\n\t\t\t...current,\n\t\t\tisPending: false,\n\t\t\tisRefetching: false,\n\t\t\trefetch\n\t\t});\n\t};\n\tconst fetchSession = async (queryParams) => {\n\t\tabortController?.abort();\n\t\tconst controller = new AbortController();\n\t\tabortController = controller;\n\t\tconst current = session.get();\n\t\tsession.set({\n\t\t\t...current,\n\t\t\tisPending: current.data === null,\n\t\t\tisRefetching: true,\n\t\t\terror: null,\n\t\t\trefetch\n\t\t});\n\t\ttry {\n\t\t\tconst res = await $fetch(\"/get-session\", {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: queryParams?.query,\n\t\t\t\tsignal: controller.signal\n\t\t\t});\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet { data, error } = normalizeSessionResponse(res);\n\t\t\tif (data?.needsRefresh) try {\n\t\t\t\tconst refreshRes = await $fetch(\"/get-session\", {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tsignal: controller.signal\n\t\t\t\t});\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t({data, error} = normalizeSessionResponse(refreshRes));\n\t\t\t} catch {\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tconst latest = session.get();\n\t\t\t\tconst isUnauthorized = error?.status === 401;\n\t\t\t\tsession.set({\n\t\t\t\t\tdata: isUnauthorized ? null : latest.data,\n\t\t\t\t\terror,\n\t\t\t\t\tisPending: false,\n\t\t\t\t\tisRefetching: false,\n\t\t\t\t\trefetch\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst sessionData = normalizeSessionData(data);\n\t\t\tconst current = session.get();\n\t\t\tconst stableData = current.data != null && sessionData != null && isJsonEqual(current.data, sessionData) ? current.data : sessionData;\n\t\t\tsession.set({\n\t\t\t\tdata: stableData,\n\t\t\t\terror: null,\n\t\t\t\tisPending: false,\n\t\t\t\tisRefetching: false,\n\t\t\t\trefetch\n\t\t\t});\n\t\t} catch (fetchError) {\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tsettleAbortedFetch(controller);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst latest = session.get();\n\t\t\tsession.set({\n\t\t\t\tdata: latest.data,\n\t\t\t\terror: fetchError,\n\t\t\t\tisPending: false,\n\t\t\t\tisRefetching: false,\n\t\t\t\trefetch\n\t\t\t});\n\t\t}\n\t};\n\tlet broadcastSessionUpdate = () => {};\n\tonMount(session, () => {\n\t\tlet timeoutId;\n\t\tif (!isServer()) timeoutId = setTimeout(() => {\n\t\t\tfetchSession();\n\t\t}, 0);\n\t\tconst refreshManager = createSessionRefreshManager({\n\t\t\tfetchSession,\n\t\t\tshouldPollSession: () => session.get().data != null,\n\t\t\tsessionSignal: $signal,\n\t\t\toptions\n\t\t});\n\t\trefreshManager.init();\n\t\tbroadcastSessionUpdate = refreshManager.broadcastSessionUpdate;\n\t\treturn () => {\n\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\tconst controller = abortController;\n\t\t\tcontroller?.abort();\n\t\t\tif (controller) settleAbortedFetch(controller);\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}\nfunction mergeHeaders(...sources) {\n const merged = {};\n for (const source of sources) {\n if (!source) {\n continue;\n }\n if (source instanceof Headers) {\n source.forEach((value, key) => {\n merged[key] = value;\n });\n } else {\n const entries = Array.isArray(source) ? source : Object.entries(source);\n for (const [key, value] of entries) {\n if (value !== null && value !== void 0) {\n merged[key] = value;\n }\n }\n }\n }\n return merged;\n}\nasync function getHeaders(opts) {\n const headers = new Headers(mergeHeaders(opts == null ? void 0 : opts.headers, await getAuthHeader(opts)));\n if (!headers.has(\"content-type\")) {\n const contentType = detectContentType(opts == null ? void 0 : opts.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\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 getMediaType(headers) {\n const contentType = headers.get(\"content-type\");\n return contentType ? contentType.split(\";\")[0].trim().toLowerCase() : null;\n}\nfunction getBody(options, headers) {\n const { body } = options;\n if (!body) {\n return null;\n }\n if (!isJSONSerializable(body)) {\n return body;\n }\n if (typeof body === \"string\") {\n return body;\n }\n if (getMediaType(headers) === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n return JSON.stringify(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 if (urlKey.startsWith(\"/\") && urlKey.charAt(1) === \"@\") {\n urlKey = urlKey.substring(1);\n }\n const keySchema = schema.schema[urlKey];\n if (keySchema) {\n let validatedHeaders = options == null ? void 0 : options.headers;\n if (keySchema.headers && !(options == null ? void 0 : options.disableValidation)) {\n const normalizedHeaders = {};\n if (options == null ? void 0 : options.headers) {\n if (options.headers instanceof Headers) {\n options.headers.forEach((value, key) => {\n normalizedHeaders[key.toLowerCase()] = value;\n });\n } else if (typeof options.headers === \"object\") {\n for (const [key, value] of Object.entries(options.headers)) {\n if (value !== null && value !== void 0) {\n normalizedHeaders[key.toLowerCase()] = value;\n }\n }\n }\n }\n const validated = await parseStandardSchema(\n keySchema.headers,\n normalizedHeaders\n );\n const finalHeaders = {};\n for (const [key, value] of Object.entries(validated)) {\n finalHeaders[key.toLowerCase()] = value;\n }\n validatedHeaders = finalHeaders;\n }\n let opts = __spreadProps(__spreadValues({}, options), {\n method: keySchema.method,\n output: keySchema.output,\n headers: validatedHeaders\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 headers: mergeHeaders(config == null ? void 0 : config.headers, options == null ? void 0 : options.headers),\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\nvar isReservedPathSegment = (value) => value === \".\" || value === \"..\";\nfunction encodePathSegment(segment, pathParams) {\n let pathSegment = segment;\n for (const [key, value] of pathParams) {\n pathSegment = pathSegment.replace(key, value);\n }\n if (isReservedPathSegment(pathSegment)) {\n throw new TypeError(\"Path parameters cannot be reserved path segments\");\n }\n return encodeURIComponent(pathSegment);\n}\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 const pathParams = /* @__PURE__ */ new Map();\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 pathParams.set(key, String(value));\n }\n } else {\n for (const [key, value] of Object.entries(params)) {\n pathParams.set(`:${key}`, String(value));\n }\n }\n }\n path = path.split(\"/\").map((segment) => encodePathSegment(segment, pathParams)).join(\"/\");\n path = path.replace(/^\\/+/, \"\");\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 headers = await getHeaders(opts);\n const body = getBody(opts, headers);\n const method = getMethod(__url, opts);\n const 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 Object.assign(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 mergeHeaders,\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","//#region src/utils/string.ts\nfunction capitalizeFirstLetter(str) {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst WORD_PATTERN = /[\\p{Ll}\\d]+|\\p{Lu}+(?!\\p{Ll})|\\p{Lu}[\\p{Ll}\\d]+|\\p{Lo}+/gu;\nconst APOSTROPHE_PATTERN = /['\\u2019]/g;\nfunction splitWords(input) {\n\treturn input.replace(APOSTROPHE_PATTERN, \"\").match(WORD_PATTERN) ?? [];\n}\nfunction toSnakeCase(input) {\n\treturn splitWords(input).map((word) => word.toLowerCase()).join(\"_\");\n}\nfunction toKebabCase(input) {\n\treturn splitWords(input).map((word) => word.toLowerCase()).join(\"-\");\n}\nfunction toCamelCase(input) {\n\treturn splitWords(input).reduce((acc, word, i) => {\n\t\treturn acc + (i === 0 ? word.toLowerCase() : `${word[0].toUpperCase()}${word.slice(1)}`);\n\t}, \"\");\n}\nfunction toPascalCase(input) {\n\treturn splitWords(input).map((word) => `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}`).join(\"\");\n}\n//#endregion\nexport { capitalizeFirstLetter, toCamelCase, toKebabCase, toPascalCase, toSnakeCase };\n","import { isAtom } from \"../utils/is-atom.mjs\";\nimport { toKebabCase } from \"@better-auth/core/utils/string\";\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(toKebabCase).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","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}\n/** Better Auth (and some proxies) return this instead of OAuth slow_down. */\nfunction isRateLimitedError(error) {\n\tif (error.status === 429) return true;\n\treturn typeof error.message === \"string\" && error.message.toLowerCase().includes(\"too many requests\");\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 === \"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\tif (oauthError?.error === \"slow_down\" || isRateLimitedError(errorPayload)) {\n\t\t\tpollIntervalMs += 5e3;\n\t\t\tawait sleep(pollIntervalMs);\n\t\t\tcontinue;\n\t\t}\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 type { CredentialStorage } from \"./credential-storage\";\nimport { getAccessToken } from \"./credentials\";\n\nconst caches = new Map<string, JwtTokenCache>();\n\nfunction cacheKey(platformUrl: string, storage: CredentialStorage): string {\n return `${storage}:${platformUrl}`;\n}\n\nexport function clearCliJwtCache(): void {\n caches.clear();\n}\n\nexport async function getCliJwt(\n platformUrl: string,\n force = false,\n storage: CredentialStorage = \"keychain\",\n): Promise<string | undefined> {\n if (!getAccessToken(platformUrl, { storage })) {\n caches.delete(cacheKey(platformUrl, storage));\n return undefined;\n }\n\n const key = cacheKey(platformUrl, storage);\n let cache = caches.get(key);\n if (!cache) {\n cache = createJwtTokenCache(async () => {\n const sessionToken = getAccessToken(platformUrl, { storage });\n return sessionToken ? getJwtWithBearer(platformUrl, sessionToken) : null;\n });\n caches.set(key, 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 { getCredentialStorage, getPlatformUrl, type CliConfig } from \"../config\";\n\n/** Returns API key, JWT bearer, or none auth for platform requests. */\nexport function resolveCliAuth(config: Conf<CliConfig>): AuthStrategy {\n const apiKey = process.env.KEYSTROKE_API_KEY?.trim();\n if (apiKey) {\n return { type: \"apiKey\", getKey: () => apiKey };\n }\n\n const platformUrl = getPlatformUrl(config);\n const storage = getCredentialStorage(config);\n if (!getAccessToken(platformUrl, { storage })) {\n return { type: \"none\" };\n }\n\n return {\n type: \"bearer\",\n getToken: () => getCliJwt(platformUrl, false, storage),\n };\n}\n","import type { ApiTargetOptions } from \"./resolve-api-target\";\n\nlet targetOptions: ApiTargetOptions = {};\nlet resolvedOrganizationId: string | undefined;\n\nexport function setCliTargetOptions(options: ApiTargetOptions): void {\n targetOptions = options;\n resolvedOrganizationId = undefined;\n}\n\nexport function getCliTargetOptions(): ApiTargetOptions {\n return targetOptions;\n}\n\nexport function setResolvedOrganizationId(organizationId: string | undefined): void {\n resolvedOrganizationId = organizationId;\n}\n\nexport function getResolvedOrganizationId(): string | undefined {\n return resolvedOrganizationId;\n}\n","import { createKeystrokeClient, type KeystrokeClient } from \"@keystrokehq/sdk\";\nimport { CLIENT_CHANNEL_HEADER } from \"@keystrokehq/shared\";\nimport type Conf from \"conf\";\nimport { resolveCliAuth } from \"./auth/resolve-cli-auth\";\nimport type { CliConfig } from \"./config\";\nimport { getResolvedOrganizationId } from \"./target-options\";\n\nexport function createCliClient(\n config: Conf<CliConfig>,\n options: { baseUrl: string; platform?: boolean; organizationId?: string },\n): KeystrokeClient {\n return createKeystrokeClient({\n baseUrl: options.baseUrl,\n auth: resolveCliAuth(config),\n getActiveOrganizationId: options.platform\n ? () => options.organizationId ?? getResolvedOrganizationId() ?? null\n : undefined,\n ky: {\n headers: {\n [CLIENT_CHANNEL_HEADER]: \"cli\",\n },\n },\n });\n}\n","import ky, { isHTTPError } from \"ky\";\nimport { ACTIVE_ORG_HEADER, AcceptOrganizationInvitationResponseSchema, ActiveOrganizationResponseSchema, AgentSessionDetailResponseSchema, AgentSessionListResponseSchema, AgentSummaryDetailResponseSchema, AgentSummaryListResponseSchema, AgentTriggerSummaryListResponseSchema, AppSlugAvailabilityResponseSchema, AutoTopupSummarySchema, BillingActivityResponseSchema, BillingInvoiceUrlResponseSchema, BillingRedirectResponseSchema, BillingSummaryResponseSchema, BillingUsageResponseSchema, BindChannelBodySchema, CatalogActionDetailResponseSchema, CatalogActionsPageResponseSchema, CatalogAppDetailResponseSchema, CatalogAppsPageResponseSchema, ChannelAccountListResponseSchema, ChannelConnectionListResponseSchema, ChannelConnectionSchema, ChannelDirectoryListResponseSchema, CompleteProjectArtifactResponseSchema, ConfirmCheckoutRequestSchema, ConfirmCheckoutResponseSchema, ConnectAuthorizeUrlResponseSchema, ConnectManagedServiceCredentialRequestSchema, CreateApiKeyRequestSchema, CreateApiKeyResponseSchema, CreateBillingPortalRequestSchema, CreateCredentialsRequestSchema, CreateCredentialsResponseSchema, CreateCreditsCheckoutRequestSchema, CreateCustomAppRequestSchema, CreateCustomAppResponseSchema, CreateOrganizationRequestSchema, CreateOrganizationResponseSchema, CreateProjectArtifactResponseSchema, CreateProjectRequestSchema, CreateProjectResponseSchema, CreateSubscriptionCheckoutRequestSchema, DEFAULT_ORGANIZATION_SIDEBAR_BRANDING, DEFAULT_USER_PREFERENCES, DeclineOrganizationInvitationResponseSchema, DownloadActiveProjectArtifactResponseSchema, DownloadActiveProjectSourceResponseSchema, DuplicateCredentialRequestSchema, DuplicateCredentialsResponseSchema, ExecuteKeystrokeToolRequestSchema, FinalizeCustomAppLogoRequestSchema, FinalizeCustomAppLogoResponseSchema, GatewayAttachmentRecordSchema, GetAppCatalogEntryResponseSchema, GetCredentialResponseSchema, GetCustomAppResponseSchema, GetTemplateResponseSchema, GraphqlDiscoverResponseSchema, HealthResponseSchema, HistoryRunCancelResponseSchema, HistoryRunDetailResponseSchema, HistoryRunListQuerySchema, HistoryRunListResponseSchema, InviteOrganizationMembersRequestSchema, InviteOrganizationMembersResponseSchema, InviteProjectMembersRequestSchema, InviteProjectMembersResponseSchema, ListAgentMemoryFilesResponseSchema, ListAgentWorkspaceFilesResponseSchema, ListApiKeysResponseSchema, ListAppsResponseSchema, ListChannelPlatformsResponseSchema, ListCredentialsPageQuerySchema, ListCredentialsPageResponseSchema, ListManagedServiceCredentialsResponseSchema, ListOrganizationInvitationsResponseSchema, ListOrganizationMembersPageQuerySchema, ListOrganizationMembersPageResponseSchema, ListOrganizationsResponseSchema, ListProjectDeploymentsResponseSchema, ListProjectFilesResponseSchema, ListProjectMembersResponseSchema, ListProjectMetricsResponseSchema, ListProjectsResponseSchema, ListTemplatesResponseSchema, ManagedServiceCredentialSchema, McpDiscoverResponseSchema, OpenApiDiscoverResponseSchema, OrganizationSidebarBrandingPatchSchema, OrganizationSidebarBrandingSchema, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, PresignChatAttachmentRequestSchema, PresignChatAttachmentResponseSchema, PresignCustomAppLogoRequestSchema, PresignCustomAppLogoResponseSchema, PresignOrgLogoRequestSchema, PresignOrgLogoResponseSchema, PresignProjectSourceRequestSchema, PresignProjectSourceResponseSchema, PresignUserAvatarRequestSchema, PresignUserAvatarResponseSchema, ProjectReachabilityResponseSchema, ProjectResponseSchema, ProjectSettingsResponseSchema, ProjectSlugAvailabilityResponseSchema, PromptInputSchema, PublicFormMetadataSchema, PublicFormSubmitBodySchema, PublicFormSubmitResponseSchema, PublishedFormListResponseSchema, PublishedFormSchema, QueuedAgentPromptResponseSchema, RecentResourceListResponseSchema, SkillSummaryDetailResponseSchema, SkillSummaryListResponseSchema, SlugAvailabilityResponseSchema, StartKeystrokeConnectionInputSchema, StartKeystrokeConnectionResultSchema, StartMcpOAuthConnectionInputSchema, StartMcpOAuthConnectionResultSchema, StartOAuthConnectionInputSchema, StartOAuthConnectionResultSchema, SubmitAgentFeedbackRequestSchema, SubmitMarketingContactRequestSchema, SubmitTeamRequestRequestSchema, TemplateFilesResponseSchema, TriggerInvokeInputsSchema, TriggerInvokeResponseSchema, UpdateAutoTopupRequestSchema, UpdateChannelBindingBodySchema, UpdateCredentialRequestSchema, UpdateManagedServiceCredentialRequestSchema, UpdateOrganizationMemberRequestSchema, UpdateOrganizationMemberResponseSchema, UpdateOrganizationRequestSchema, UpdateProjectMemberRequestSchema, UpdateProjectMemberResponseSchema, UpdateProjectRequestSchema, UpdateProjectSettingsRequestSchema, UploadProjectSourceManifestRequestSchema, UploadProjectSourceResponseSchema, UpsertGatewayAttachmentBodySchema, UserAvatarPatchSchema, UserAvatarSchema, UserPreferencesPatchSchema, UserPreferencesSchema, WorkflowCanvasCredentialBindingsSchema, WorkflowCanvasRunSchema, WorkflowCanvasSchema, WorkflowFormResponseSchema, WorkflowFormUpsertBodySchema, WorkflowRunInputsPutBodySchema, WorkflowRunInputsSchema, WorkflowRunResponseSchema, WorkflowSummaryDetailResponseSchema, WorkflowSummaryListResponseSchema, WorkspaceTriggerDetailSchema, WorkspaceTriggerFileSchema, WorkspaceTriggerListResponseSchema, WorkspaceTriggerOverviewSchema, WorkspaceTriggerRunListResponseSchema, WorkspaceWorkflowOverviewSchema, mergeOrganizationSidebarBranding, mergeUserPreferences, normalizeOrganizationSidebarBranding, normalizeUserPreferences, parseChatAttachmentServePath, parseErrorResponse } from \"@keystrokehq/shared\";\n//#region src/platform/active-organization.ts\nconst STORAGE_KEY = \"keystroke-active-org-id\";\nfunction browserLocalStorage() {\n\tif (typeof localStorage === \"undefined\" || typeof localStorage.getItem !== \"function\") return null;\n\treturn localStorage;\n}\nfunction readActiveOrganizationId() {\n\treturn browserLocalStorage()?.getItem(STORAGE_KEY) ?? null;\n}\nfunction writeActiveOrganizationId(organizationId) {\n\tconst storage = browserLocalStorage();\n\tif (!storage) return;\n\tif (organizationId) {\n\t\tstorage.setItem(STORAGE_KEY, organizationId);\n\t\treturn;\n\t}\n\tstorage.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 = parseErrorResponse(body);\n\tconst message = parsed ? parsed.message ?? parsed.error : `Request failed with status ${status}`;\n\tconst code = parsed?.code;\n\treturn new PlatformError(message, status, body, code);\n}\n//#endregion\n//#region src/platform/resources/artifacts.ts\nfunction createArtifactsResource(http) {\n\treturn {\n\t\tasync create(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts`).json();\n\t\t\t\treturn CreateProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync complete(projectId, artifactId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/complete`).json();\n\t\t\t\treturn CompleteProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Ask which source blobs are missing and get presigned PUTs for them. */\n\t\tasync presignSource(projectId, artifactId, blobs) {\n\t\t\tconst body = PresignProjectSourceRequestSchema.parse({ blobs });\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/source/presign`, { json: body }).json();\n\t\t\t\treturn PresignProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Finalize the deploy's source manifest (path -> hash tree + resource refs). */\n\t\tasync uploadManifest(projectId, artifactId, manifest) {\n\t\t\tconst body = UploadProjectSourceManifestRequestSchema.parse(manifest);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/source/manifest`, { json: body }).json();\n\t\t\t\treturn UploadProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Presigned GET for the project's currently active deploy artifact tarball. */\n\t\tasync downloadActive(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/active/download`).json();\n\t\t\t\treturn DownloadActiveProjectArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Download all source files from the project's active deploy snapshot. */\n\t\tasync downloadActiveSource(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/active/source`).json();\n\t\t\t\treturn DownloadActiveProjectSourceResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Download the active artifact tarball bytes via the presigned URL. */\n\t\tasync downloadActiveArchive(projectId) {\n\t\t\tconst { artifactId, downloadUrl } = await this.downloadActive(projectId);\n\t\t\tconst response = await fetch(downloadUrl);\n\t\t\tif (!response.ok) throw new Error(`Active artifact download failed (${response.status})`);\n\t\t\tconst bytes = await response.arrayBuffer();\n\t\t\treturn {\n\t\t\t\tartifactId,\n\t\t\t\tbuffer: Buffer.from(bytes)\n\t\t\t};\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/deployments.ts\nfunction createDeploymentsResource(http) {\n\treturn { async listForProject(projectId) {\n\t\ttry {\n\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/deployments`).json();\n\t\t\treturn ListProjectDeploymentsResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/gateway-attachments.ts\nfunction createGatewayAttachmentsResource(http) {\n\tconst projectPrefix = (projectId) => `/api/projects/${encodeURIComponent(projectId)}/gateways/slack/attachments`;\n\treturn { async upsertSlackAttachment(projectId, channelId, body) {\n\t\tconst payload = UpsertGatewayAttachmentBodySchema.parse(body);\n\t\ttry {\n\t\t\tconst data = await http.put(`${projectPrefix(projectId)}/${encodeURIComponent(channelId)}`, { json: payload }).json();\n\t\t\treturn GatewayAttachmentRecordSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/project-files.ts\nfunction createProjectFilesResource(http) {\n\treturn {\n\t\t/** File tree (no contents) for a project's active deploy; empty before first deploy. */\n\t\tasync listForProject(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/files`).json();\n\t\t\t\treturn ListProjectFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Lazily fetch a single file's contents by path for a specific deploy. */\n\t\tasync getContent(projectId, artifactId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/health.ts\nfunction createHealthResource(http) {\n\treturn { async check() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/health\").json();\n\t\t\treturn HealthResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/organizations.ts\nfunction createOrganizationsResource(http, options = {}) {\n\tasync function get(organizationId) {\n\t\ttry {\n\t\t\tconst data = await http.get(`/api/organizations/${organizationId}`).json();\n\t\t\tconst organization = ActiveOrganizationResponseSchema.parse(data);\n\t\t\tif (!organization) throw new Error(\"Organization was not returned\");\n\t\t\treturn organization;\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\tasync function update(input) {\n\t\tconst body = UpdateOrganizationRequestSchema.parse(input);\n\t\tconst organizationId = options.getActiveOrganizationId?.();\n\t\tif (!organizationId) throw new Error(\"No active organization\");\n\t\ttry {\n\t\t\tconst data = await http.patch(`/api/organizations/${organizationId}`, { json: body }).json();\n\t\t\tconst organization = ActiveOrganizationResponseSchema.parse(data);\n\t\t\tif (!organization) throw new Error(\"Active organization was not returned\");\n\t\t\treturn organization;\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\treturn {\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/organizations\").json();\n\t\t\t\treturn ListOrganizationsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tget,\n\t\tasync getActive() {\n\t\t\tconst organizationId = options.getActiveOrganizationId?.();\n\t\t\tif (!organizationId) return null;\n\t\t\ttry {\n\t\t\t\treturn await get(organizationId);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof PlatformError && (error.status === 401 || error.status === 403)) return null;\n\t\t\t\tif (isHTTPError(error) && (error.response.status === 401 || error.response.status === 403)) return null;\n\t\t\t\tthrow error instanceof PlatformError ? error : await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync setActive(input) {\n\t\t\tconst organizationId = input.organizationId.trim();\n\t\t\tif (!organizationId) throw new Error(\"Organization id is required\");\n\t\t\tconst membership = await get(organizationId);\n\t\t\toptions.onActiveOrganizationChange?.(organizationId);\n\t\t\treturn membership;\n\t\t},\n\t\tasync clearActive() {\n\t\t\toptions.onActiveOrganizationChange?.(null);\n\t\t},\n\t\tupdate,\n\t\tasync create(input) {\n\t\t\tconst body = CreateOrganizationRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/organizations\", { json: body }).json();\n\t\t\t\treturn CreateOrganizationResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkSlug(slug, slugOptions = {}) {\n\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\tif (slugOptions.excludeOrganizationId) searchParams.set(\"excludeOrganizationId\", slugOptions.excludeOrganizationId);\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/organizations/slug-available?${searchParams}`).json();\n\t\t\t\treturn SlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/agents.ts\nfunction listSearchParams(options) {\n\tconst params = {};\n\tconst projectId = options?.projectId?.trim();\n\tif (projectId) params.projectId = projectId;\n\tif (options?.admin) params.admin = \"true\";\n\treturn Object.keys(params).length > 0 ? params : void 0;\n}\nfunction createAgentsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/agents\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn AgentSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/agents/${encodeURIComponent(agentId)}`).json();\n\t\t\t\treturn AgentSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync cancelSession(sessionId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.post(`api/agents/sessions/${encodeURIComponent(sessionId)}/cancel`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\tconst data = await response.json();\n\t\t\t\treturn HistoryRunCancelResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Prompting goes through the project-scoped runtime route\n\t\t* (`POST /api/projects/:projectId/agents/:slug`) so it reuses the runtime's\n\t\t* `requireProject` + `requireProjectMembership` auth — a user must belong to\n\t\t* the project to prompt its agents.\n\t\t*/\n\t\tasync prompt(projectId, agentSlug, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PromptInputSchema.parse(input);\n\t\t\t\tconst data = await (await http.post(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}`, { json: payload })).json();\n\t\t\t\treturn QueuedAgentPromptResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync presignAttachment(projectId, agentSlug, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PresignChatAttachmentRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/attachments/presign`, { json: payload }).json();\n\t\t\t\treturn PresignChatAttachmentResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Session detail; defaults to the lightweight record-only response. */\n\t\tasync getSession(projectId, agentSlug, sessionId, options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/sessions/${encodeURIComponent(sessionId)}`, { searchParams: { include: options?.include ?? \"none\" } }).json();\n\t\t\t\treturn AgentSessionDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listSessions(projectId, agentSlug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/sessions`).json();\n\t\t\t\treturn AgentSessionListResponseSchema.parse(data).items;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listTriggers(projectId, agentSlug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/triggers`).json();\n\t\t\t\treturn AgentTriggerSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Deletes an agent-owned ephemeral trigger; throws if it is not deletable (404). */\n\t\tasync deleteTrigger(projectId, agentSlug, triggerId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`api/projects/${encodeURIComponent(projectId)}/agents/${encodeURIComponent(agentSlug)}/triggers/${encodeURIComponent(triggerId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listMemoryFiles(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/agents/${encodeURIComponent(agentId)}/memory/files`).json();\n\t\t\t\treturn ListAgentMemoryFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getMemoryFileContent(agentId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`api/agents/${encodeURIComponent(agentId)}/memory/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Persistent agent workspace files under `/workspace/agent`. */\n\t\tasync listWorkspaceFiles(agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/agents/${encodeURIComponent(agentId)}/workspace/files`).json();\n\t\t\t\treturn ListAgentWorkspaceFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Content for a path from {@link listWorkspaceFiles}. */\n\t\tasync getWorkspaceFileContent(agentId, path) {\n\t\t\ttry {\n\t\t\t\treturn await http.get(`api/agents/${encodeURIComponent(agentId)}/workspace/files/content`, { searchParams: { path } }).text();\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/projects.ts\nfunction createProjectsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/projects\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn ListProjectsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\tconst body = CreateProjectRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/projects\", { json: body }).json();\n\t\t\t\treturn CreateProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}`).json();\n\t\t\t\treturn ProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync update(projectId, patch) {\n\t\t\tconst body = UpdateProjectRequestSchema.parse(patch);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/projects/${encodeURIComponent(projectId)}`, { json: body }).json();\n\t\t\t\treturn ProjectResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync delete(projectId) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/projects/${encodeURIComponent(projectId)}`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkReachability(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/reachability`, { timeout: PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS }).json();\n\t\t\t\treturn ProjectReachabilityResponseSchema.parse(data).reachable;\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync checkSlug(slug, options = {}) {\n\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\tif (options.excludeProjectId) searchParams.set(\"excludeProjectId\", options.excludeProjectId);\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/slug-available?${searchParams}`).json();\n\t\t\t\treturn ProjectSlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\nfunction createProjectMetricsResource(http) {\n\treturn { async list(options) {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/api/projects/metrics\", { searchParams: listSearchParams(options) }).json();\n\t\t\treturn ListProjectMetricsResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/workflows.ts\n/**\n* `platform.workflows` resource.\n*\n* Every method calls a real platform route: list/detail, file, run history,\n* run-inputs, canvas, overview, the canvas run overlay (`getCanvasRun`), the\n* credential overlay (`getCanvasCredentialBindings`), and manual `run`.\n*/\nfunction createWorkflowsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/workflows\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn WorkflowSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}`).json();\n\t\t\t\treturn WorkflowSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* LLM-generated overview (summary + guided-tour phases), content-hash cached\n\t\t* and served stale-while-revalidating; poll while `status` is \"generating\".\n\t\t*/\n\t\tasync getOverview(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/overview`).json();\n\t\t\t\treturn WorkspaceWorkflowOverviewSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* The workflow source file from the active deploy source snapshot. Takes the\n\t\t* workflow's `projectId`/`slug`/`sourcePath` (already on `WorkflowSummary`) so\n\t\t* it resolves the file in two calls (project files + content) instead of\n\t\t* re-fetching the workflow detail the caller already holds.\n\t\t*/\n\t\tasync getFile(input) {\n\t\t\ttry {\n\t\t\t\tconst filesData = await http.get(`api/projects/${encodeURIComponent(input.projectId)}/files`).json();\n\t\t\t\tconst files = ListProjectFilesResponseSchema.parse(filesData);\n\t\t\t\tif (!files.artifactId) return null;\n\t\t\t\tconst path = files.resources.workflows.find((entry) => entry.slug === input.slug)?.path ?? input.sourcePath;\n\t\t\t\tif (!path) return null;\n\t\t\t\treturn {\n\t\t\t\t\tpath,\n\t\t\t\t\tcontents: await http.get(`api/projects/${encodeURIComponent(input.projectId)}/artifacts/${encodeURIComponent(files.artifactId)}/files/content`, { searchParams: { path } }).text()\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Read-only canvas graph (deterministic AST skeleton + manifest trigger\n\t\t* nodes) plus the gated code-block annotation layer. Returns null when the\n\t\t* active deploy has no flow graph for the workflow (404).\n\t\t*/\n\t\tasync getCanvas(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowCanvasSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Live credential overlay: canvas node id → how each of its step's credential\n\t\t* requirements currently resolves (bound instance + policy). Resolved per view\n\t\t* (not cached) since credential state changes without a redeploy.\n\t\t*/\n\t\tasync getCanvasCredentialBindings(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas/credentials`).json();\n\t\t\t\treturn WorkflowCanvasCredentialBindingsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Per-node run state for a finished/live run, projected onto the canvas skeleton. */\n\t\tasync getCanvasRun(workflowId, runId) {\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/canvas/runs/${encodeURIComponent(runId)}`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowCanvasRunSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync listCanvasRuns(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/runs`).json();\n\t\t\t\treturn HistoryRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRunInputs(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/run-inputs`).json();\n\t\t\t\treturn WorkflowRunInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync saveRunInputs(workflowId, values) {\n\t\t\ttry {\n\t\t\t\tconst body = WorkflowRunInputsPutBodySchema.parse(values);\n\t\t\t\tconst data = await http.put(`api/workflows/${encodeURIComponent(workflowId)}/run-inputs`, { json: body }).json();\n\t\t\t\treturn WorkflowRunInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Manually start a workflow run from the dashboard. Validates the input\n\t\t* against the active deploy's request schema, enqueues the run, and returns\n\t\t* its id (surface the new run by refetching {@link listCanvasRuns}).\n\t\t*/\n\t\tasync run(workflowId, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/run`, { json: input }).json();\n\t\t\t\treturn WorkflowRunResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Presign an upload for a file attached to a manual workflow run. */\n\t\tasync presignAttachment(workflowId, input) {\n\t\t\ttry {\n\t\t\t\tconst payload = PresignChatAttachmentRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/attachments/presign`, { json: payload }).json();\n\t\t\t\treturn PresignChatAttachmentResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync 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/workflow-forms.ts\nfunction createWorkflowFormsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/workflows/forms\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn PublishedFormListResponseSchema.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 response = await http.get(`api/workflows/${encodeURIComponent(workflowId)}/form`);\n\t\t\t\tif (response.status === 404) return null;\n\t\t\t\treturn WorkflowFormResponseSchema.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync publish(workflowId, input = {}) {\n\t\t\ttry {\n\t\t\t\tconst body = WorkflowFormUpsertBodySchema.parse(input);\n\t\t\t\tconst data = await http.put(`api/workflows/${encodeURIComponent(workflowId)}/form`, { json: body }).json();\n\t\t\t\treturn PublishedFormSchema.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 unpublish(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.delete(`api/workflows/${encodeURIComponent(workflowId)}/form`).json();\n\t\t\t\treturn PublishedFormSchema.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 rotate(workflowId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`api/workflows/${encodeURIComponent(workflowId)}/form/rotate`).json();\n\t\t\t\treturn PublishedFormSchema.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 getPublic(token) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/public/forms/${encodeURIComponent(token)}`).json();\n\t\t\t\treturn PublicFormMetadataSchema.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 submitPublic(token, input) {\n\t\t\ttry {\n\t\t\t\tconst body = PublicFormSubmitBodySchema.parse(input);\n\t\t\t\tconst data = await http.post(`api/public/forms/${encodeURIComponent(token)}/submit`, { json: body }).json();\n\t\t\t\treturn PublicFormSubmitResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/skills.ts\nfunction createSkillsResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/skills\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn SkillSummaryListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(skillId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/skills/${encodeURIComponent(skillId)}`).json();\n\t\t\t\treturn SkillSummaryDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/triggers.ts\nfunction listRunsSearchParams(query) {\n\tif (!query) return {};\n\tconst params = {};\n\tif (query.limit !== void 0) params.limit = String(query.limit);\n\tif (query.cursor) params.cursor = query.cursor;\n\tif (query.triggerType) params.triggerType = query.triggerType;\n\tif (query.outcome) params.outcome = query.outcome;\n\treturn params;\n}\nfunction createTriggersResource(http) {\n\treturn {\n\t\t/** Triggers across the projects the caller can access in the active org. */\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"api/triggers\", { searchParams: listSearchParams(options) }).json();\n\t\t\t\treturn WorkspaceTriggerListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}`).json();\n\t\t\t\treturn WorkspaceTriggerDetailSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tconst platformError = await toPlatformError(error);\n\t\t\t\tif (platformError.status === 404) return null;\n\t\t\t\tthrow platformError;\n\t\t\t}\n\t\t},\n\t\t/** LLM-generated markdown overview of the trigger (generated lazily on the worker). */\n\t\tasync getOverview(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/overview`).json();\n\t\t\t\treturn WorkspaceTriggerOverviewSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** The trigger source file. */\n\t\tasync getFile(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/file`).json();\n\t\t\t\treturn WorkspaceTriggerFileSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tconst platformError = await toPlatformError(error);\n\t\t\t\tif (platformError.status === 404) return null;\n\t\t\t\tthrow platformError;\n\t\t\t}\n\t\t},\n\t\t/** Every fire of the trigger (poll/webhook/cron), dispatched or not. */\n\t\tasync listRuns(triggerId, query) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/runs`, { searchParams: listRunsSearchParams(query) }).json();\n\t\t\t\treturn WorkspaceTriggerRunListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync updateAttachment(triggerId, attachmentId, body) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`api/triggers/${encodeURIComponent(triggerId)}/attachments/${encodeURIComponent(attachmentId)}`, { json: body }).json();\n\t\t\t\treturn WorkspaceTriggerDetailSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/** Form metadata for the dashboard invoke popover (webhook schemas / cron static payload). */\n\t\tasync getInvokeInputs(triggerId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`api/triggers/${encodeURIComponent(triggerId)}/invoke-inputs`).json();\n\t\t\t\treturn TriggerInvokeInputsSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Manually invoke a trigger. Webhook invokes validate `input` against stored attachment\n\t\t* schemas; cron/poll reject `input` and fire with their normal payload path.\n\t\t*/\n\t\tasync invoke(triggerId, body = {}) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`api/triggers/${encodeURIComponent(triggerId)}/invoke`, { json: body }).json();\n\t\t\t\treturn TriggerInvokeResponseSchema.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/agent-feedback.ts\nfunction createAgentFeedbackResource(http) {\n\treturn { async submit(input) {\n\t\tconst body = SubmitAgentFeedbackRequestSchema.parse(input);\n\t\ttry {\n\t\t\tawait http.post(\"/api/agent-feedback\", { 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/templates.ts\nfunction createTemplatesResource(http) {\n\treturn {\n\t\tasync list(options) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = new URLSearchParams();\n\t\t\t\tif (options?.kind) searchParams.set(\"kind\", options.kind);\n\t\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n\t\t\t\tconst data = await http.get(`/api/templates${suffix}`).json();\n\t\t\t\treturn ListTemplatesResponseSchema.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/templates/${encodeURIComponent(slug)}`).json();\n\t\t\t\treturn GetTemplateResponseSchema.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 files(slug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/templates/${encodeURIComponent(slug)}/files`).json();\n\t\t\t\treturn TemplateFilesResponseSchema.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/marketing-contact.ts\nfunction createMarketingContactResource(http) {\n\treturn { async submit(input) {\n\t\tconst body = SubmitMarketingContactRequestSchema.parse(input);\n\t\ttry {\n\t\t\tawait http.post(\"/api/public/contact\", { json: body }).json();\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/recents.ts\nfunction createRecentsResource(http) {\n\treturn { \n\t/** Always the viewer's own recents, scoped to their project memberships. */\nasync list() {\n\t\ttry {\n\t\t\tconst data = await http.get(\"/api/recents\").json();\n\t\t\treturn RecentResourceListResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t} };\n}\n//#endregion\n//#region src/platform/resources/credentials.ts\nfunction buildOAuthAuthorizeSearchParams(input) {\n\tconst params = {};\n\tconst scopes = input.scopes ?? [];\n\tif (scopes.length > 0) params.scopes = scopes.join(\",\");\n\tconst projectIds = input.projects ?? [];\n\tif (projectIds.length > 0) params.projects = projectIds.join(\",\");\n\tif (input.createOrganizationCredential) params.org = \"true\";\n\tif (input.createUserProvidedCredential) params.user = \"true\";\n\tconst label = input.label?.trim();\n\tif (label) params.label = label;\n\tconst credentialInstanceId = input.credentialInstanceId?.trim();\n\tif (credentialInstanceId) params.credentialInstanceId = credentialInstanceId;\n\treturn params;\n}\nfunction createCredentialsResource(http) {\n\treturn {\n\t\tasync list(query) {\n\t\t\tconst params = ListCredentialsPageQuerySchema.parse(query ?? {});\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/credentials\", { searchParams: {\n\t\t\t\t\t...params.limit !== void 0 ? { limit: String(params.limit) } : {},\n\t\t\t\t\t...params.cursor ? { cursor: params.cursor } : {}\n\t\t\t\t} }).json();\n\t\t\t\treturn ListCredentialsPageResponseSchema.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 duplicate(credentialId, input) {\n\t\t\tconst body = DuplicateCredentialRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/credentials/${encodeURIComponent(credentialId)}/duplicate`, { json: body }).json();\n\t\t\t\treturn DuplicateCredentialsResponseSchema.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\t/** Full catalog entry (scopes + credential template) for connect UI. */\n\t\tasync getCatalogEntry(slug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/apps/${encodeURIComponent(slug)}/catalog`).json();\n\t\t\t\treturn GetAppCatalogEntryResponseSchema.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 executeTool(request) {\n\t\t\ttry {\n\t\t\t\tconst body = ExecuteKeystrokeToolRequestSchema.parse(request);\n\t\t\t\tconst data = await http.post(\"/mcp/execute\", { json: body }).json();\n\t\t\t\tif (typeof data !== \"object\" || data === null || !(\"ok\" in data) || data.ok !== true || !(\"result\" in data)) throw new PlatformError(\"Invalid MCP execute response\", 502, data);\n\t\t\t\treturn 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) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = new URLSearchParams({ slug });\n\t\t\t\tconst data = await http.get(`/api/apps/slug-available?${searchParams}`).json();\n\t\t\t\treturn AppSlugAvailabilityResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync create(input) {\n\t\t\ttry {\n\t\t\t\tconst body = CreateCustomAppRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(\"/api/apps\", { json: body }).json();\n\t\t\t\treturn CreateCustomAppResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync get(slug) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/apps/${encodeURIComponent(slug)}`).json();\n\t\t\t\treturn GetCustomAppResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverMcp(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover\", { json: input }).json();\n\t\t\t\treturn McpDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverOpenApi(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover-openapi\", { json: input }).json();\n\t\t\t\treturn OpenApiDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync discoverGraphql(input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/apps/discover-graphql\", { json: input }).json();\n\t\t\t\treturn GraphqlDiscoverResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync startMcpOAuthConnection(slug, input) {\n\t\t\ttry {\n\t\t\t\tconst body = StartMcpOAuthConnectionInputSchema.parse({\n\t\t\t\t\t...input,\n\t\t\t\t\tappSlug: slug\n\t\t\t\t});\n\t\t\t\tconst data = await http.post(`/api/apps/${encodeURIComponent(slug)}/mcp/oauth/connections`, { json: body }).json();\n\t\t\t\treturn StartMcpOAuthConnectionResultSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/resources/members.ts\nfunction createMembersResource(http) {\n\treturn {\n\t\tasync listOrganizationMembers(query) {\n\t\t\tconst params = ListOrganizationMembersPageQuerySchema.parse(query ?? {});\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/members\", { searchParams: {\n\t\t\t\t\t...params.limit !== void 0 ? { limit: String(params.limit) } : {},\n\t\t\t\t\t...params.cursor ? { cursor: params.cursor } : {}\n\t\t\t\t} }).json();\n\t\t\t\treturn ListOrganizationMembersPageResponseSchema.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/managed-service-credentials.ts\nfunction createManagedServiceCredentialsResource(http) {\n\treturn {\n\t\tasync list(kind) {\n\t\t\ttry {\n\t\t\t\tconst searchParams = kind ? { kind } : void 0;\n\t\t\t\tconst data = await http.get(\"/api/managed-service-credentials\", { searchParams }).json();\n\t\t\t\treturn ListManagedServiceCredentialsResponseSchema.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 connect(input) {\n\t\t\tconst body = ConnectManagedServiceCredentialRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/managed-service-credentials\", { json: body }).json();\n\t\t\t\treturn ManagedServiceCredentialSchema.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(id, input) {\n\t\t\tconst body = UpdateManagedServiceCredentialRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(`/api/managed-service-credentials/${encodeURIComponent(id)}`, { json: body }).json();\n\t\t\t\treturn ManagedServiceCredentialSchema.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 disconnect(id) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/managed-service-credentials/${encodeURIComponent(id)}`);\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/billing.ts\nfunction createBillingResource(http) {\n\treturn {\n\t\tasync summary() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/billing\").json();\n\t\t\t\treturn BillingSummaryResponseSchema.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 usage() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/billing/usage\").json();\n\t\t\t\treturn BillingUsageResponseSchema.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 activity() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/billing/activity\").json();\n\t\t\t\treturn BillingActivityResponseSchema.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/** Fresh Stripe-hosted links for one invoice — resolve on click, don't cache. */\n\t\tasync invoiceUrl(invoiceId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/billing/invoice-url/${encodeURIComponent(invoiceId)}`).json();\n\t\t\t\treturn BillingInvoiceUrlResponseSchema.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 createSubscriptionCheckout(input = {}) {\n\t\t\tconst body = CreateSubscriptionCheckoutRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/checkout/subscription\", { json: body }).json();\n\t\t\t\treturn BillingRedirectResponseSchema.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 createCreditsCheckout(input) {\n\t\t\tconst body = CreateCreditsCheckoutRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/checkout/credits\", { json: body }).json();\n\t\t\t\treturn BillingRedirectResponseSchema.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 confirmCheckout(input) {\n\t\t\tconst body = ConfirmCheckoutRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/checkout/confirm\", { json: body }).json();\n\t\t\t\treturn ConfirmCheckoutResponseSchema.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 createPortalSession(input = {}) {\n\t\t\tconst body = CreateBillingPortalRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/billing/portal\", { json: body }).json();\n\t\t\t\treturn BillingRedirectResponseSchema.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 updateAutoTopup(input) {\n\t\t\tconst body = UpdateAutoTopupRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.patch(\"/api/billing/auto-topup\", { json: body }).json();\n\t\t\t\treturn AutoTopupSummarySchema.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/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/custom-app-logo.ts\nfunction createCustomAppLogoResource(http) {\n\tasync function presignUpload(contentType) {\n\t\tconst body = PresignCustomAppLogoRequestSchema.parse({ contentType });\n\t\tconst data = await http.post(\"/api/apps/logo/presign\", { json: body }).json();\n\t\treturn PresignCustomAppLogoResponseSchema.parse(data);\n\t}\n\tasync function finalize(storageKey) {\n\t\tconst body = FinalizeCustomAppLogoRequestSchema.parse({ storageKey });\n\t\ttry {\n\t\t\tconst data = await http.post(\"/api/apps/logo\", { json: body }).json();\n\t\t\treturn FinalizeCustomAppLogoResponseSchema.parse(data);\n\t\t} catch (error) {\n\t\t\tthrow await toPlatformError(error);\n\t\t}\n\t}\n\treturn { \n\t/** Upload an image to keystroke-assets and return its public logo URL. */\nasync upload(file) {\n\t\treturn presignPutAndFinalize({\n\t\t\tfile,\n\t\t\tpresign: presignUpload,\n\t\t\tfinalize,\n\t\t\tuploadFailedMessage: \"Logo upload failed\",\n\t\t\ttoPlatformError\n\t\t});\n\t} };\n}\n//#endregion\n//#region src/platform/resources/channels.ts\nfunction createChannelsResource(http) {\n\tconst projectPrefix = (projectId) => `/api/projects/${encodeURIComponent(projectId)}`;\n\treturn {\n\t\tasync listPlatforms() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/channel-platforms\").json();\n\t\t\t\treturn ListChannelPlatformsResponseSchema.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 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/agent-chat-transport.ts\n/**\n* ChatTransport for Keystroke queued agent prompts:\n* - sendMessages → POST prompt (202) then GET resumable SSE\n* - reconnectToStream → GET run/session stream (`204` when idle)\n*\n* Modeled on AI SDK WorkflowChatTransport (`x-workflow-run-id`, `startIndex`).\n*/\nfunction createAgentChatTransport(options) {\n\tconst base = options.baseUrl.replace(/\\/+$/, \"\");\n\tconst prefix = base === \"\" ? \"\" : `${base}/`;\n\tconst fetchImpl = options.fetch ?? globalThis.fetch;\n\tlet reconnectActive = false;\n\tasync function authHeaders(accept) {\n\t\tconst headers = { Accept: accept };\n\t\tconst token = await options.getToken();\n\t\tif (token) headers.Authorization = `Bearer ${token}`;\n\t\tconst orgId = options.getActiveOrganizationId?.();\n\t\tif (orgId) headers[ACTIVE_ORG_HEADER] = orgId;\n\t\treturn headers;\n\t}\n\tfunction promptUrl() {\n\t\treturn `${prefix}api/projects/${encodeURIComponent(options.projectId)}/agents/${encodeURIComponent(options.agentSlug)}`;\n\t}\n\tfunction runStreamUrl(runId, startIndex) {\n\t\treturn `${prefix}api/projects/${encodeURIComponent(options.projectId)}/runs/${encodeURIComponent(runId)}/stream?startIndex=${encodeURIComponent(String(startIndex))}`;\n\t}\n\tfunction sessionStreamUrl(sessionId, startIndex) {\n\t\treturn `${prefix}api/projects/${encodeURIComponent(options.projectId)}/sessions/${encodeURIComponent(sessionId)}/stream?startIndex=${encodeURIComponent(String(startIndex))}`;\n\t}\n\tasync function openStream(url, signal) {\n\t\tconst response = await fetchImpl(url, {\n\t\t\tmethod: \"GET\",\n\t\t\theaders: await authHeaders(\"text/event-stream\"),\n\t\t\tcredentials: \"omit\",\n\t\t\tsignal\n\t\t});\n\t\tif (response.status === 204) {\n\t\t\toptions.setRunId?.(null);\n\t\t\treturn null;\n\t\t}\n\t\tif (!response.ok) throw new Error(await response.text() || \"Failed to open agent stream\");\n\t\tif (!response.body) throw new Error(\"The agent stream response body is empty\");\n\t\tconst runId = response.headers.get(\"x-workflow-run-id\");\n\t\tif (runId) options.setRunId?.(runId);\n\t\treturn parseUiMessageSse(response.body);\n\t}\n\tfunction trackReconnect(stream) {\n\t\tconst reader = stream.getReader();\n\t\tlet released = false;\n\t\tconst release = () => {\n\t\t\tif (!released) {\n\t\t\t\treleased = true;\n\t\t\t\treconnectActive = false;\n\t\t\t}\n\t\t};\n\t\treturn new ReadableStream({\n\t\t\tasync pull(controller) {\n\t\t\t\ttry {\n\t\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\trelease();\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontroller.enqueue(value);\n\t\t\t\t} catch (error) {\n\t\t\t\t\trelease();\n\t\t\t\t\tcontroller.error(error);\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync cancel(reason) {\n\t\t\t\trelease();\n\t\t\t\tawait reader.cancel(reason);\n\t\t\t}\n\t\t});\n\t}\n\treturn {\n\t\tasync sendMessages({ messages, abortSignal }) {\n\t\t\tconst lastUser = [...messages].reverse().find((message) => message.role === \"user\");\n\t\t\tconst text = lastUser?.parts?.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\\n\") ?? \"\";\n\t\t\tconst files = lastUser?.parts?.filter((part) => part.type === \"file\" && typeof part.url === \"string\").map((part) => {\n\t\t\t\treturn {\n\t\t\t\t\tstorageKey: parseChatAttachmentServePath(part.url)?.storageKey ?? part.url,\n\t\t\t\t\tmediaType: part.mediaType,\n\t\t\t\t\t...part.filename ? { filename: part.filename } : {}\n\t\t\t\t};\n\t\t\t}).filter((part) => part.storageKey.length > 0) ?? [];\n\t\t\tconst sessionId = options.getSessionId();\n\t\t\tconst response = await fetchImpl(promptUrl(), {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t...await authHeaders(\"application/json\"),\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t},\n\t\t\t\tcredentials: \"omit\",\n\t\t\t\tsignal: abortSignal,\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tmessage: text,\n\t\t\t\t\t...sessionId ? { sessionId } : {},\n\t\t\t\t\t...files.length ? { files } : {}\n\t\t\t\t})\n\t\t\t});\n\t\t\tif (!response.ok) throw new Error(await response.text() || \"Failed to enqueue agent prompt\");\n\t\t\tconst queued = await response.json();\n\t\t\tif (!queued.sessionId || !queued.runId) throw new Error(\"Agent prompt response missing sessionId/runId\");\n\t\t\toptions.setSessionId?.(queued.sessionId);\n\t\t\toptions.setRunId?.(queued.runId);\n\t\t\toptions.onQueued?.({\n\t\t\t\tsessionId: queued.sessionId,\n\t\t\t\trunId: queued.runId\n\t\t\t});\n\t\t\tconst stream = await openStream(runStreamUrl(queued.runId, 0), abortSignal);\n\t\t\tif (!stream) throw new Error(\"Agent stream was not available after enqueue\");\n\t\t\treturn stream;\n\t\t},\n\t\tasync reconnectToStream({ chatId, body }) {\n\t\t\tif (reconnectActive) return null;\n\t\t\treconnectActive = true;\n\t\t\tconst startIndex = body && typeof body === \"object\" && \"startIndex\" in body ? Number(body.startIndex) : 0;\n\t\t\tconst index = Number.isFinite(startIndex) ? Math.max(0, Math.trunc(startIndex)) : 0;\n\t\t\ttry {\n\t\t\t\tconst runId = options.getRunId();\n\t\t\t\tif (runId) {\n\t\t\t\t\tconst stream = await openStream(runStreamUrl(runId, index));\n\t\t\t\t\tif (!stream) {\n\t\t\t\t\t\treconnectActive = false;\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\treturn trackReconnect(stream);\n\t\t\t\t}\n\t\t\t\tconst sessionId = options.getSessionId() ?? chatId;\n\t\t\t\tif (!sessionId) {\n\t\t\t\t\treconnectActive = false;\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst stream = await openStream(sessionStreamUrl(sessionId, index));\n\t\t\t\tif (!stream) {\n\t\t\t\t\treconnectActive = false;\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn trackReconnect(stream);\n\t\t\t} catch (error) {\n\t\t\t\treconnectActive = false;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t};\n}\n/** Parse AI SDK UI message SSE (`data: {json}\\n\\n` + `data: [DONE]`). */\nfunction parseUiMessageSse(stream) {\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\treturn new ReadableStream({ async start(controller) {\n\t\tconst reader = stream.getReader();\n\t\ttry {\n\t\t\tfor (;;) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) break;\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\tconst parts = buffer.split(\"\\n\\n\");\n\t\t\t\tbuffer = parts.pop() ?? \"\";\n\t\t\t\tfor (const part of parts) {\n\t\t\t\t\tconst lines = part.split(\"\\n\");\n\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\tif (!line.startsWith(\"data:\")) continue;\n\t\t\t\t\t\tconst data = line.slice(5).trimStart();\n\t\t\t\t\t\tif (!data || data === \"[DONE]\") continue;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcontroller.enqueue(JSON.parse(data));\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tcontroller.error(error);\n\t\t\treturn;\n\t\t} finally {\n\t\t\treader.releaseLock();\n\t\t}\n\t\tcontroller.close();\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 resolveActiveOrganizationId = () => options.getActiveOrganizationId?.() ?? activeOrganizationId;\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, resolveActiveOrganizationId());\n\t\t\t\tconst extra = options.getExtraHeaders?.();\n\t\t\t\tif (extra) {\n\t\t\t\t\tfor (const [key, value] of Object.entries(extra)) if (value) request.headers.set(key, value);\n\t\t\t\t}\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: resolveActiveOrganizationId\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\tworkflowForms: createWorkflowFormsResource(http),\n\t\tskills: createSkillsResource(http),\n\t\ttriggers: createTriggersResource(http),\n\t\tapps: createAppsResource(http),\n\t\tcredentials: createCredentialsResource(http),\n\t\thistory: createHistoryResource(http),\n\t\tdeployments: createDeploymentsResource(http),\n\t\tgatewayAttachments: createGatewayAttachmentsResource(http),\n\t\tprojectMetrics: createProjectMetricsResource(http),\n\t\tprojectFiles: createProjectFilesResource(http),\n\t\tchannels: createChannelsResource(http),\n\t\tmembers: createMembersResource(http),\n\t\tinvitations: createInvitationsResource(http),\n\t\tapiKeys: createApiKeysResource(http),\n\t\tmanagedServiceCredentials: createManagedServiceCredentialsResource(http),\n\t\tbilling: createBillingResource(http),\n\t\trecents: createRecentsResource(http),\n\t\tuserPreferences: createUserPreferencesResource(http),\n\t\tuserAvatar: createUserAvatarResource(http),\n\t\tcustomAppLogo: createCustomAppLogoResource(http),\n\t\torganizationSidebarBranding: createOrganizationSidebarBrandingResource(http, { getActiveOrganizationId: resolveActiveOrganizationId }),\n\t\tteamRequests: createTeamRequestsResource(http),\n\t\tagentFeedback: createAgentFeedbackResource(http),\n\t\ttemplates: createTemplatesResource(http),\n\t\tmarketingContact: createMarketingContactResource(http),\n\t\tgetActiveOrganizationId: resolveActiveOrganizationId,\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\tgetExtraHeaders: options.getExtraHeaders\n\t});\n}\n//#endregion\nexport { DEFAULT_ORGANIZATION_SIDEBAR_BRANDING, DEFAULT_USER_AVATAR, DEFAULT_USER_PREFERENCES, PlatformError, browserAuthStrategy, createAgentChatTransport, createBrowserPlatformClient, createPlatformClient, mergeOrganizationSidebarBranding, mergeUserPreferences, normalizeBaseUrl, normalizeOrganizationSidebarBranding, normalizeUserPreferences, parseUiMessageSse, 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 { CLIENT_CHANNEL_HEADER } from \"@keystrokehq/shared\";\nimport type Conf from \"conf\";\n\nimport { resolveCliAuth } from \"./auth/resolve-cli-auth\";\nimport { getCliJwt } from \"./auth/jwt-cache\";\nimport { getCredentialStorage, getPlatformUrl, type CliConfig } from \"./config\";\nimport { getResolvedOrganizationId } from \"./target-options\";\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(\n config: Conf<CliConfig>,\n options: { organizationId?: string | null } = {},\n): PlatformClient {\n const platformUrl = getPlatformUrl(config);\n const storage = getCredentialStorage(config);\n\n return createPlatformClient({\n baseUrl: platformUrl,\n auth: toPlatformAuth(resolveCliAuth(config)),\n refreshBearerToken: () => getCliJwt(platformUrl, true, storage),\n getActiveOrganizationId: () =>\n options.organizationId === undefined\n ? (getResolvedOrganizationId() ?? null)\n : options.organizationId,\n getExtraHeaders: () => ({ [CLIENT_CHANNEL_HEADER]: \"cli\" }),\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 projects list\\`, then \\`keystroke projects link --project <slug>\\`.`,\n );\n }\n throw error;\n }\n }\n\n const projects = await platform.projects.list();\n const match = projects.find((project) => project.slug === ref);\n if (!match) {\n throw new Error(\n `Project \"${ref}\" not found in the active organization. Run \\`keystroke projects 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 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 async function listOrganizations(config: Conf<CliConfig>): Promise<UserOrganization[]> {\n const platform = createCliPlatformClient(config);\n return platform.organizations.list();\n}\n\nexport function resolveOrganizationIdFromMemberships(\n organizations: UserOrganization[],\n ref: string,\n): string {\n return resolveOrganizationRef(organizations, ref).organization.id;\n}\n\nexport async function listOrganizationsOrThrow(\n config: Conf<CliConfig>,\n): Promise<UserOrganization[]> {\n const organizations = await listOrganizations(config);\n if (organizations.length === 0) {\n throw new Error(`No organization found — create one at ${getWebUrl(config)}`);\n }\n return organizations;\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\n/** Walk up from `fromDir` and return the directory containing `keystroke.config.ts`, if any. */\nexport function resolveKeystrokeConfigRoot(fromDir = process.cwd()): string | null {\n let dir = resolve(fromDir);\n\n while (dir !== dirname(dir)) {\n if (existsSync(join(dir, KEYSTROKE_CONFIG))) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n if (existsSync(join(dir, KEYSTROKE_CONFIG))) {\n return dir;\n }\n\n return null;\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\n\nexport type LinkedProjectConfig = {\n project?: string;\n organization?: string;\n};\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\n/** Remove line and block comments before scanning config literals. */\nexport function stripConfigComments(source: string): string {\n return source.replace(/\\/\\/[^\\n]*/g, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n}\n\n/** Mask comments while preserving string length so match indices stay aligned. */\nexport function stripConfigCommentsPreservingLength(source: string): string {\n return source\n .replace(/\\/\\/[^\\n]*/g, (match) => \" \".repeat(match.length))\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, (match) => \" \".repeat(match.length));\n}\n\nfunction readStringLiteral(source: string, key: \"project\" | \"organization\"): string | undefined {\n const stripped = stripConfigComments(source);\n const pattern = new RegExp(`\\\\b${key}\\\\s*:\\\\s*(['\"])([^'\"]*)\\\\1`);\n const match = stripped.match(pattern);\n return match?.[2]?.trim() || undefined;\n}\n\nexport function parseLinkedProjectConfig(source: string): LinkedProjectConfig {\n const project = readStringLiteral(source, \"project\");\n const organization = readStringLiteral(source, \"organization\");\n\n return {\n ...(project ? { project } : {}),\n ...(organization ? { organization } : {}),\n };\n}\n\n/** Read optional project/organization slugs from keystroke.config.ts without executing it. */\nexport function readLinkedProjectConfig(fromDir = process.cwd()): LinkedProjectConfig {\n const root = resolveKeystrokeConfigRoot(fromDir);\n if (!root) {\n return {};\n }\n\n const source = readFileSync(join(root, KEYSTROKE_CONFIG), \"utf8\");\n return parseLinkedProjectConfig(source);\n}\n","import { ExpectedCliError } from \"./errors/expected-cli-error\";\n\nexport function missingOrganizationRefMessage(): string {\n return (\n \"No organization selected. Pass `--organization <slug>` or set `organization` in keystroke.config.ts \" +\n \"(via `keystroke projects link --project <slug>`).\"\n );\n}\n\nexport function missingProjectRefMessage(): string {\n return (\n \"No project selected. Pass `--project <slug>` or set `project` in keystroke.config.ts \" +\n \"(via `keystroke projects link --project <slug>`).\"\n );\n}\n\nexport function missingOrganizationRefError(): ExpectedCliError {\n return new ExpectedCliError(missingOrganizationRefMessage());\n}\n\nexport function missingProjectRefError(): ExpectedCliError {\n return new ExpectedCliError(missingProjectRefMessage());\n}\n","import type Conf from \"conf\";\nimport type { UserOrganization } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"./config\";\nimport { getWebUrl } from \"./config\";\nimport { listOrganizations } from \"./organization/active-organization\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { resolveOrganizationRef } from \"./resolve-resource-ref\";\nimport { getCliTargetOptions, setResolvedOrganizationId } from \"./target-options\";\nimport { missingOrganizationRefError } from \"./target-hints\";\n\n/**\n * The active organization reference for the current command: the explicit global\n * `--organization` flag when set, otherwise the `organization` recorded in\n * keystroke.config.ts. Single source of truth for \"which organization\" across\n * every CLI command — commands should never read the flag or linked config directly.\n */\nexport function resolveActiveOrganizationRef(fromDir = process.cwd()): string | undefined {\n const ref =\n getCliTargetOptions().organizationRef ?? readLinkedProjectConfig(fromDir).organization;\n return ref?.trim() || undefined;\n}\n\n/** Resolve the active organization slug to a membership and cache its id for platform requests. */\nexport async function resolveActiveOrganization(\n config: Conf<CliConfig>,\n fromDir = process.cwd(),\n): Promise<UserOrganization> {\n const ref = resolveActiveOrganizationRef(fromDir);\n if (!ref) {\n throw missingOrganizationRefError();\n }\n\n const organizations = await listOrganizations(config);\n if (organizations.length === 0) {\n throw new Error(`No organization found — create one at ${getWebUrl(config)}`);\n }\n\n const membership = resolveOrganizationRef(organizations, ref);\n setResolvedOrganizationId(membership.organization.id);\n return membership;\n}\n","import { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\n\nexport function resolveProjectRoot(fromDir = process.cwd()): string {\n const root = resolveKeystrokeConfigRoot(fromDir);\n if (!root) {\n throw new ExpectedCliError(\n \"Could not find keystroke project root (expected keystroke.config.ts)\",\n );\n }\n\n return root;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveProjectRoot } from \"./resolve-project-root\";\n\nlet loaded = false;\n\nexport function parseEnvFile(contents: string): Record<string, string> {\n const values: Record<string, string> = {};\n\n for (const line of contents.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) {\n continue;\n }\n\n const eq = trimmed.indexOf(\"=\");\n if (eq === -1) {\n continue;\n }\n\n const key = trimmed.slice(0, eq).trim();\n let value = trimmed.slice(eq + 1).trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n values[key] = value;\n }\n\n return values;\n}\n\nexport function loadProjectEnv(fromDir = process.cwd()): void {\n if (loaded) {\n return;\n }\n\n loaded = true;\n\n let envPath: string;\n try {\n envPath = join(resolveProjectRoot(fromDir), \".env\");\n } catch {\n return;\n }\n\n if (!existsSync(envPath)) {\n return;\n }\n\n for (const [key, value] of Object.entries(parseEnvFile(readFileSync(envPath, \"utf8\")))) {\n if (process.env[key] === undefined) {\n process.env[key] = value;\n }\n }\n}\n\nexport function resetProjectEnvLoadedForTests(): void {\n loaded = false;\n}\n","import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nimport { getCliConfigDir } from \"./config\";\n\nexport type DevSession = {\n pid: number;\n port: number;\n root: string;\n serverUrl: string;\n};\n\nexport function getDevSessionPath(configDir = getCliConfigDir()): string {\n return join(configDir, \"dev-session.json\");\n}\n\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function writeDevSession(session: DevSession, configDir = getCliConfigDir()): void {\n const path = getDevSessionPath(configDir);\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, `${JSON.stringify(session)}\\n`, \"utf8\");\n}\n\nexport function clearDevSession(configDir = getCliConfigDir()): void {\n const path = getDevSessionPath(configDir);\n if (existsSync(path)) {\n unlinkSync(path);\n }\n}\n\nexport function readDevSession(configDir = getCliConfigDir()): DevSession | undefined {\n const path = getDevSessionPath(configDir);\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n const session = JSON.parse(readFileSync(path, \"utf8\")) as DevSession;\n if (!isProcessAlive(session.pid)) {\n clearDevSession(configDir);\n return undefined;\n }\n return session;\n } catch {\n clearDevSession(configDir);\n return undefined;\n }\n}\n","import type Conf from \"conf\";\n\nimport { resolvePublicPlatformOrigin } from \"@keystrokehq/shared\";\n\nimport { getConfigDir, getEffectiveApiTarget, getPlatformUrl, type CliConfig } from \"./config\";\nimport { loadProjectEnv } from \"./project/load-project-env\";\n\n/** Standalone local server default project id — keep in sync with @keystrokehq/database. */\nconst DEFAULT_LOCAL_PROJECT_ID = \"default\";\nimport { readDevSession } from \"./dev-session\";\nimport { resolveActiveOrganization } from \"./resolve-organization-target\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { createCliPlatformClient } from \"./platform-client\";\nimport { formatProjectLabel, resolveProjectRef } from \"./resolve-resource-ref\";\nimport { missingProjectRefError } from \"./target-hints\";\n\nexport type ApiTargetOptions = {\n projectId?: string;\n organizationRef?: string;\n local?: boolean;\n /** Route to `/api/projects/:id` and require a project id. Default false. */\n projectScoped?: boolean;\n /** Org-level platform API; ignores `--project` and linked project config. */\n orgScoped?: boolean;\n};\n\nexport const projectScopedTarget: ApiTargetOptions = { projectScoped: true };\n\nexport type ResolvedApiTarget = {\n baseUrl: string;\n projectId?: string;\n mode: \"local\" | \"platform\";\n};\n\nfunction resolveLocalTargetFromOrigin(\n origin: string,\n options: ApiTargetOptions = {},\n): ResolvedApiTarget {\n const base = origin.replace(/\\/+$/, \"\");\n if (!options.projectScoped) {\n return { baseUrl: base, mode: \"local\" };\n }\n\n const projectPathMatch = base.match(/^(.*\\/api\\/projects\\/([^/]+))$/);\n if (projectPathMatch) {\n return {\n baseUrl: projectPathMatch[1]!,\n projectId: projectPathMatch[2]!,\n mode: \"local\",\n };\n }\n\n return {\n baseUrl: `${base}/api/projects/${DEFAULT_LOCAL_PROJECT_ID}`,\n projectId: DEFAULT_LOCAL_PROJECT_ID,\n mode: \"local\",\n };\n}\n\nfunction resolveLocalTarget(options: ApiTargetOptions = {}): ResolvedApiTarget {\n const origin = resolvePublicPlatformOrigin(process.env);\n return resolveLocalTargetFromOrigin(origin, options);\n}\n\nfunction resolveOrgPlatformTarget(config: Conf<CliConfig>): ResolvedApiTarget {\n return {\n baseUrl: `${getPlatformUrl(config).replace(/\\/+$/, \"\")}/api`,\n mode: \"platform\",\n };\n}\n\nasync function resolvePlatformTarget(\n config: Conf<CliConfig>,\n projectRef: string,\n): Promise<ResolvedApiTarget> {\n await resolveActiveOrganization(config);\n\n const platform = createCliPlatformClient(config);\n let project;\n try {\n project = await resolveProjectRef(platform, projectRef);\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw error;\n }\n if (project.status !== \"active\") {\n throw new Error(`Project ${formatProjectLabel(project)} is not active (${project.status})`);\n }\n\n const platformUrl = getPlatformUrl(config).replace(/\\/+$/, \"\");\n return {\n baseUrl: `${platformUrl}/api/projects/${encodeURIComponent(project.id)}`,\n projectId: project.id,\n mode: \"platform\",\n };\n}\n\nexport async function resolveApiTarget(\n config: Conf<CliConfig>,\n options: ApiTargetOptions = {},\n): Promise<ResolvedApiTarget> {\n loadProjectEnv(process.cwd());\n\n if (options.local) {\n return resolveLocalTarget(options);\n }\n\n const devSession = readDevSession(getConfigDir(config));\n if (devSession && getEffectiveApiTarget(config) !== \"platform\") {\n return resolveLocalTargetFromOrigin(devSession.serverUrl, options);\n }\n\n if (options.orgScoped || options.projectScoped === false) {\n if (getEffectiveApiTarget(config) === \"local\") {\n return resolveLocalTarget(options);\n }\n return resolveOrgPlatformTarget(config);\n }\n\n if (options.projectId) {\n return resolvePlatformTarget(config, options.projectId);\n }\n\n if (getEffectiveApiTarget(config) === \"local\") {\n return resolveLocalTarget(options);\n }\n\n if (!options.projectScoped) {\n return resolveOrgPlatformTarget(config);\n }\n\n const projectRef = options.projectId ?? readLinkedProjectConfig().project;\n if (!projectRef) {\n throw missingProjectRefError();\n }\n\n return resolvePlatformTarget(config, projectRef);\n}\n","import { PostHog } from \"posthog-node\";\n//#region src/posthog-node.ts\nconst MAX_EVENT_BYTES = 9e5;\nfunction createPostHogSink(options) {\n\tconst immediate = options.mode === \"immediate\";\n\tconst client = new PostHog(options.token, {\n\t\thost: options.host,\n\t\t...immediate ? {\n\t\t\tflushAt: 1,\n\t\t\tflushInterval: 0\n\t\t} : {}\n\t});\n\tclient.on(\"error\", options.onError ?? (() => {}));\n\treturn {\n\t\tasync captureException(input) {\n\t\t\tconst error = input.error instanceof Error ? input.error : new Error(String(input.error));\n\t\t\tconst distinctId = input.actorId?.trim() || input.analyticsId?.trim() || `${options.serviceName ?? \"keystroke\"}:anonymous`;\n\t\t\tconst properties = {\n\t\t\t\t...sanitizeProperties(input.properties),\n\t\t\t\t...commonProperties(options, input),\n\t\t\t\t...input.sessionId ? { $session_id: input.sessionId } : {},\n\t\t\t\t...input.actorId ? {} : { $process_person_profile: false }\n\t\t\t};\n\t\t\tclient.captureException(error, distinctId, properties);\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync event(input) {\n\t\t\tconst properties = {\n\t\t\t\t...sanitizeProperties(input.properties),\n\t\t\t\t...commonProperties(options, input),\n\t\t\t\t...input.anonymous ? { $process_person_profile: false } : {}\n\t\t\t};\n\t\t\tconst body = {\n\t\t\t\tdistinctId: input.actorId,\n\t\t\t\tevent: input.name,\n\t\t\t\tproperties,\n\t\t\t\tgroups: input.organizationId ? { organization: input.organizationId } : void 0,\n\t\t\t\ttimestamp: input.timestamp,\n\t\t\t\tuuid: input.uuid\n\t\t\t};\n\t\t\tconst encoded = Buffer.byteLength(JSON.stringify(body), \"utf8\");\n\t\t\tif (encoded > MAX_EVENT_BYTES) {\n\t\t\t\toptions.onError?.(/* @__PURE__ */ new Error(`Dropped oversized event ${input.name} (${encoded} bytes)`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclient.capture(body);\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync groupIdentify(input) {\n\t\t\tclient.groupIdentify({\n\t\t\t\tgroupType: input.groupType,\n\t\t\t\tgroupKey: input.groupKey,\n\t\t\t\tproperties: sanitizeProperties(input.properties)\n\t\t\t});\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync alias(input) {\n\t\t\tclient.alias({\n\t\t\t\tdistinctId: input.distinctId,\n\t\t\t\talias: input.alias\n\t\t\t});\n\t\t\tif (immediate) await client.flush();\n\t\t},\n\t\tasync flush() {\n\t\t\tawait client.flush();\n\t\t},\n\t\tasync shutdown() {\n\t\t\tawait client.shutdown();\n\t\t}\n\t};\n}\nfunction commonProperties(options, input) {\n\treturn sanitizeProperties({\n\t\torganization_id: input.organizationId,\n\t\tproject_id: input.projectId,\n\t\toperation: input.operation,\n\t\tservice: options.serviceName,\n\t\trelease: options.release,\n\t\tenvironment: options.environment\n\t});\n}\nfunction sanitizeProperties(properties) {\n\tif (!properties) return {};\n\treturn Object.fromEntries(Object.entries(properties).filter((entry) => entry[1] !== void 0));\n}\n//#endregion\nexport { createPostHogSink };\n\n//# sourceMappingURL=posthog-node.mjs.map","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 type { CliErrorContext } from \"./types\";\nimport { formatApiErrorMessage } from \"./format-api-message\";\n\nconst STORAGE_NETWORK_MESSAGE =\n \"Could not reach artifact storage. Check your network/DNS and retry; \" +\n \"corporate proxies or DNS policies sometimes block storage hosts.\";\n\nconst DISCOVERY_CODE_GUIDANCE: Record<string, string> = {\n invalid_url: \"The OpenAPI/GraphQL URL is invalid. Use a public http(s) URL.\",\n url_not_allowed:\n \"That URL host is not allowed (private/metadata hosts are blocked). Use a public URL.\",\n url_unreachable:\n \"Could not reach the OpenAPI/GraphQL URL. Check DNS, network policy, and that the host is publicly reachable.\",\n upstream_http_error:\n \"The OpenAPI/GraphQL URL returned an error. Confirm the spec/introspection endpoint is correct and publicly reachable.\",\n spec_too_large: \"The discovered spec/response is too large. Host a smaller OpenAPI document.\",\n spec_parse_error: \"The URL did not return valid JSON/YAML for discovery.\",\n invalid_openapi:\n \"The URL did not contain a valid OpenAPI/Swagger (or GraphQL introspection) document.\",\n connector_unavailable:\n \"The Slack connector is temporarily unavailable. Retry shortly, or reconnect with `keystroke connect slackbot`.\",\n};\n\nexport function 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(\"ECONNRESET\") ||\n error.message.includes(\"ETIMEDOUT\") ||\n error.message.includes(\"fetch failed\")\n );\n}\n\nexport function isArtifactStorageNetworkError(error: { message: string }): boolean {\n return (\n isUnreachableServerError(error) &&\n /t3\\.storage\\.dev|storage\\.dev|uploadUrl|downloadUrl|Artifact upload|Source blob upload|artifact storage|ENOTFOUND.*storage/i.test(\n error.message,\n )\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}.`;\n}\n\ntype HttpClientError = {\n status: number;\n body: unknown;\n message: string;\n code?: string;\n};\n\nfunction formatHttpClientError(error: HttpClientError, context?: CliErrorContext): string {\n if (error.status === 401) {\n // Do not re-read the credential store here — that can re-prompt macOS Keychain.\n // Callers that know there is no session can pass hasCredentials: false.\n if (context?.hasCredentials === false) {\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 (isArtifactStorageNetworkError(error)) {\n return STORAGE_NETWORK_MESSAGE;\n }\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 const code = error.code ?? parsed?.code;\n if (code && DISCOVERY_CODE_GUIDANCE[code]) {\n const summary = parsed ? (parsed.message ?? parsed.error) : error.message;\n return `${summary}\\n${DISCOVERY_CODE_GUIDANCE[code]}`;\n }\n\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 (isArtifactStorageNetworkError(error)) {\n return STORAGE_NETWORK_MESSAGE;\n }\n if (isUnreachableServerError(error)) {\n return unreachableServerMessage(unreachableTarget(context));\n }\n return error.message;\n }\n\n return fallback;\n}\n","import { isExpectedCliError } from \"./expected-cli-error\";\nimport { isArtifactStorageNetworkError, isUnreachableServerError } from \"./format-cli-error\";\n\nexport type CliExceptionReportContext = {\n command?: string;\n operation?: string;\n};\n\nfunction readStatus(error: unknown): number | undefined {\n if (!error || typeof error !== \"object\") {\n return undefined;\n }\n if (\"status\" in error && typeof error.status === \"number\") {\n return error.status;\n }\n if (\"statusCode\" in error && typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n return undefined;\n}\n\nfunction isAuthCommand(context: CliExceptionReportContext): boolean {\n const operation = context.operation ?? \"\";\n const command = context.command ?? \"\";\n return operation.startsWith(\"cli.auth\") || command.startsWith(\"auth\");\n}\n\nfunction isDeployCommand(context: CliExceptionReportContext): boolean {\n const operation = context.operation ?? \"\";\n const command = context.command ?? \"\";\n return operation === \"cli.deploy\" || command === \"deploy\";\n}\n\nfunction isSchemaExportError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"Cannot export schema to JSON Schema\");\n}\n\n/**\n * CLI Error Tracking allowlist — report only:\n * - HTTP 5xx responses\n * - unexpected failures on auth / deploy paths\n *\n * Validation, lint/typecheck, bad flags, schema export mistakes, and local\n * unreachable servers / artifact storage DNS stay quiet.\n */\nexport function shouldReportCliException(\n error: unknown,\n context: CliExceptionReportContext,\n): boolean {\n if (isExpectedCliError(error)) {\n return false;\n }\n\n if (isSchemaExportError(error)) {\n return false;\n }\n\n if (error instanceof Error && isArtifactStorageNetworkError(error)) {\n return false;\n }\n\n if (error instanceof Error && isUnreachableServerError(error)) {\n return false;\n }\n\n const status = readStatus(error);\n if (status !== undefined) {\n if (status === 0 || (status >= 400 && status < 500)) {\n return false;\n }\n if (status >= 500) {\n return true;\n }\n }\n\n return isAuthCommand(context) || isDeployCommand(context);\n}\n","import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { getCliConfigDir } from \"../config\";\n\nconst ANON_DISTINCT_ID_FILE = \"telemetry-distinct-id\";\nconst USER_ID_FILE = \"telemetry-user-id\";\n\nexport type CliTelemetryActor = {\n actorId: string;\n anonymous: boolean;\n};\n\nfunction readTrimmedFile(path: string): string | undefined {\n try {\n const value = readFileSync(path, \"utf8\").trim();\n return value || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writeSecretFile(path: string, value: string, configDir: string): void {\n try {\n mkdirSync(configDir, { recursive: true });\n writeFileSync(path, `${value}\\n`, { encoding: \"utf8\", mode: 0o600 });\n } catch {\n // Still usable for this process if disk is unavailable.\n }\n}\n\nexport function getOrCreateAnonymousDistinctId(configDir = getCliConfigDir()): string {\n const path = join(configDir, ANON_DISTINCT_ID_FILE);\n const existing = readTrimmedFile(path);\n if (existing) {\n return existing;\n }\n\n const id = globalThis.crypto.randomUUID();\n writeSecretFile(path, id, configDir);\n return id;\n}\n\n/** Persisted authenticated user id when present; otherwise the anonymous distinct id. */\nexport function getCliTelemetryActor(configDir = getCliConfigDir()): CliTelemetryActor {\n const userId = readTrimmedFile(join(configDir, USER_ID_FILE));\n if (userId) {\n return { actorId: userId, anonymous: false };\n }\n return { actorId: getOrCreateAnonymousDistinctId(configDir), anonymous: true };\n}\n\nexport function getCliTelemetryActorId(configDir = getCliConfigDir()): string {\n return getCliTelemetryActor(configDir).actorId;\n}\n\n/** Persist the authenticated user id next to the anonymous distinct id. */\nexport function persistCliTelemetryUserId(userId: string, configDir = getCliConfigDir()): void {\n const trimmed = userId.trim();\n if (!trimmed) {\n return;\n }\n writeSecretFile(join(configDir, USER_ID_FILE), trimmed, configDir);\n}\n\n/** Clear the authenticated user id on logout (keeps anonymous distinct id). */\nexport function clearCliTelemetryUserId(configDir = getCliConfigDir()): void {\n try {\n unlinkSync(join(configDir, USER_ID_FILE));\n } catch {\n // Already absent.\n }\n}\n","/**\n * Public PostHog project token (phc_) — safe to ship in client/CLI binaries.\n * Not a secret; rotate in PostHog if abused. Override via PUBLIC_POSTHOG_TOKEN /\n * KEYSTROKE_POSTHOG_TOKEN when needed.\n */\nexport const PUBLIC_POSTHOG_PROJECT_TOKEN = \"phc_CVZPXvV78726vW2hLKSrFBjzgcKS4oBQU2Nq8z2kxGxm\";\n\nexport const PUBLIC_POSTHOG_INGEST_HOST = \"https://t.keystroke.ai\";\n","import { platform, release as osRelease } from \"node:os\";\nimport {\n alias,\n captureException,\n configureTelemetry,\n event,\n flushTelemetry,\n resetTelemetryForTests,\n shutdownTelemetry,\n type TelemetryProperties,\n} from \"@keystrokehq/telemetry\";\nimport { createPostHogSink } from \"@keystrokehq/telemetry/posthog-node\";\n\nimport { isExpectedCliError } from \"../errors/expected-cli-error\";\nimport { shouldReportCliException } from \"../errors/should-report-cli-exception\";\nimport { readCliVersion } from \"../version\";\nimport {\n getCliTelemetryActor,\n getCliTelemetryActorId,\n getOrCreateAnonymousDistinctId,\n persistCliTelemetryUserId,\n} from \"./identity\";\nimport { PUBLIC_POSTHOG_INGEST_HOST, PUBLIC_POSTHOG_PROJECT_TOKEN } from \"./public-config\";\n\nexport type CliTelemetryEventName =\n | \"cli:init\"\n | \"cli:deploy\"\n | \"cli:auth_login\"\n | \"cli:command_ran\"\n | \"cli:dev_started\";\n\nlet enabled = false;\n\n/** Opt out of CLI analytics/error reporting (no OTEL is shipped for the CLI). */\nexport function isCliTelemetryDisabled(env: NodeJS.ProcessEnv = process.env): boolean {\n const flag = env.KEYSTROKE_DISABLE_TELEMETRY?.trim().toLowerCase();\n if (flag === \"1\" || flag === \"true\" || flag === \"yes\") {\n return true;\n }\n if (env.KEYSTROKE_DEV) {\n return true;\n }\n if (env.CI === \"true\" || env.CI === \"1\") {\n return true;\n }\n return false;\n}\n\nfunction readPostHogToken(env: NodeJS.ProcessEnv = process.env): string {\n return (\n env.KEYSTROKE_POSTHOG_TOKEN?.trim() ||\n env.PUBLIC_POSTHOG_TOKEN?.trim() ||\n PUBLIC_POSTHOG_PROJECT_TOKEN\n );\n}\n\nfunction readPostHogHost(env: NodeJS.ProcessEnv = process.env): string {\n return (\n env.KEYSTROKE_POSTHOG_HOST?.trim() ||\n env.PUBLIC_POSTHOG_HOST?.trim() ||\n PUBLIC_POSTHOG_INGEST_HOST\n );\n}\n\nfunction baseProperties(extra?: TelemetryProperties): TelemetryProperties {\n return {\n cli_version: readCliVersion(),\n os: platform(),\n os_release: osRelease(),\n ...extra,\n };\n}\n\nexport function initCliTelemetry(env: NodeJS.ProcessEnv = process.env): boolean {\n if (enabled) {\n return true;\n }\n if (isCliTelemetryDisabled(env)) {\n return false;\n }\n\n const token = readPostHogToken(env);\n if (!token) {\n return false;\n }\n\n const originalWarn = console.warn.bind(console);\n console.warn = (...args: unknown[]) => {\n const text = args.map(String).join(\" \");\n if (/No chunk id map found/i.test(text)) {\n return;\n }\n originalWarn(...args);\n };\n\n configureTelemetry({\n sink: createPostHogSink({\n token,\n host: readPostHogHost(env),\n mode: \"immediate\",\n serviceName: \"keystroke-cli\",\n release: readCliVersion(),\n environment: env.KEYSTROKE_ENVIRONMENT?.trim() || undefined,\n onError: (error) => {\n // posthog-node may warn about missing browser chunk maps in CLI captures.\n if (/No chunk id map found/i.test(error.message)) {\n return;\n }\n },\n }),\n });\n enabled = true;\n return true;\n}\n\nexport async function shutdownCliTelemetry(): Promise<void> {\n if (!enabled) {\n return;\n }\n try {\n await flushTelemetry();\n await shutdownTelemetry();\n } catch {\n // Fail open.\n }\n enabled = false;\n}\n\nexport async function reportCliException(\n error: unknown,\n context: { command?: string; operation?: string; organizationId?: string; projectId?: string },\n): Promise<void> {\n if (!enabled || isExpectedCliError(error) || !shouldReportCliException(error, context)) {\n return;\n }\n\n const actor = getCliTelemetryActor();\n await captureException({\n error,\n ...(actor.anonymous ? { analyticsId: actor.actorId } : { actorId: actor.actorId }),\n organizationId: context.organizationId,\n projectId: context.projectId,\n operation: context.operation ?? context.command ?? \"cli.command\",\n properties: baseProperties({\n ...(context.command ? { command: context.command } : {}),\n }),\n });\n}\n\nexport async function trackCliEvent(\n name: CliTelemetryEventName,\n input?: {\n userId?: string;\n organizationId?: string;\n projectId?: string;\n properties?: TelemetryProperties;\n },\n): Promise<void> {\n if (!enabled) {\n return;\n }\n\n const actor = getCliTelemetryActor();\n await event({\n name,\n actorId: actor.actorId,\n ...(actor.anonymous ? { anonymous: true } : {}),\n organizationId: input?.organizationId,\n projectId: input?.projectId,\n properties: baseProperties({\n ...(input?.userId ? { user_id: input.userId } : {}),\n ...input?.properties,\n }),\n });\n}\n\n/**\n * Stitch anonymous CLI identity to an authenticated user id (fail-open).\n * Persists the user id so later events use it as actorId.\n */\nexport async function aliasCliTelemetryUser(userId: string, configDir?: string): Promise<void> {\n const trimmed = userId.trim();\n if (!trimmed) {\n return;\n }\n\n const anonymousId = getOrCreateAnonymousDistinctId(configDir);\n persistCliTelemetryUserId(trimmed, configDir);\n\n if (!enabled || anonymousId === trimmed) {\n return;\n }\n\n await alias({ distinctId: trimmed, alias: anonymousId }).catch(() => {});\n}\n\n/** Test helper — marks telemetry active without constructing PostHog. */\nexport function enableCliTelemetryForTests(): void {\n enabled = true;\n}\n\n/** Test helper. */\nexport function resetCliTelemetryForTests(): void {\n enabled = false;\n resetTelemetryForTests();\n}\n\nexport { getCliTelemetryActorId };\n","import type Conf from \"conf\";\nimport { createCliClient } from \"../client\";\nimport { createCliConfig, getWebUrl, type CliConfig } from \"../config\";\nimport { resolveActiveOrganization } from \"../resolve-organization-target\";\nimport {\n projectScopedTarget,\n resolveApiTarget,\n type ApiTargetOptions,\n} from \"../resolve-api-target\";\nimport { getCliTargetOptions } from \"../target-options\";\nimport { reportCliException } from \"../telemetry/init\";\nimport type { CliContext, CliErrorContext } from \"./types\";\nimport { formatCliError } from \"./format-cli-error\";\n\n/**\n * Run a command that needs no project/org target or auth (e.g. public docs).\n * Builds config and formats errors, but skips `resolveApiTarget` / organization resolution,\n * so it works logged-out from any directory.\n */\nexport async function runStandaloneCliCommand(\n fallback: string,\n fn: (ctx: { config: Conf<CliConfig> }) => Promise<void>,\n errorContext?: CliErrorContext,\n): Promise<void> {\n const config = createCliConfig();\n try {\n await fn({ config });\n } catch (error) {\n await reportCliException(error, { command: fallback, operation: \"cli.command\" });\n process.stderr.write(\n `${formatCliError(error, fallback, { ...errorContext, webUrl: getWebUrl(config) })}\\n`,\n );\n process.exitCode = 1;\n }\n}\n\nexport async function runProjectCliCommand(\n fallback: string,\n fn: (ctx: CliContext) => Promise<void>,\n errorContext?: CliErrorContext,\n targetOptions: ApiTargetOptions = {},\n): Promise<void> {\n return runCliCommand(fallback, fn, errorContext, {\n ...projectScopedTarget,\n ...targetOptions,\n });\n}\n\nexport async function runCliCommand(\n fallback: string,\n fn: (ctx: CliContext) => Promise<void>,\n errorContext?: CliErrorContext,\n targetOptions: ApiTargetOptions = {},\n): Promise<void> {\n const config = createCliConfig();\n const target = await resolveApiTarget(config, {\n ...getCliTargetOptions(),\n ...targetOptions,\n });\n\n let organizationId: string | undefined;\n if (target.mode === \"platform\") {\n const membership = await resolveActiveOrganization(config);\n organizationId = membership.organization.id;\n }\n\n const ctx: CliContext = {\n config,\n client: createCliClient(config, {\n baseUrl: target.baseUrl,\n platform: target.mode === \"platform\",\n organizationId,\n }),\n serverUrl: target.baseUrl,\n webUrl: getWebUrl(config),\n apiTarget: target,\n };\n\n try {\n await fn(ctx);\n } catch (error) {\n await reportCliException(error, {\n command: fallback,\n operation: \"cli.command\",\n organizationId,\n projectId: target.projectId,\n });\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","import { ExpectedCliError } from \"./expected-cli-error\";\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 ExpectedCliError(`Invalid ${flag} JSON`);\n }\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../config\";\nimport { resolveActiveOrganization } from \"../resolve-organization-target\";\n\nexport async function requireAdminRole(config: Conf<CliConfig>): Promise<void> {\n const membership = await resolveActiveOrganization(config);\n if (membership.role !== \"owner\" && membership.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 { resolveActiveOrganization } from \"./resolve-organization-target\";\nimport { readLinkedProjectConfig } from \"./project/read-project-config\";\nimport { resolveProjectRef } from \"./resolve-resource-ref\";\nimport { getCliTargetOptions } from \"./target-options\";\n\n/**\n * The active project reference for the current command: the explicit global\n * `--project` flag when set, otherwise the `project` recorded in\n * keystroke.config.ts. Single source of truth for \"which project\" across every\n * CLI command — commands should never read the flag or linked config directly.\n */\nexport function resolveActiveProjectRef(fromDir = process.cwd()): string | undefined {\n const ref = getCliTargetOptions().projectId ?? readLinkedProjectConfig(fromDir).project;\n return ref?.trim() || undefined;\n}\n\nexport async function resolveActiveProject(\n config: Conf<CliConfig>,\n platform?: PlatformClient,\n fromDir = process.cwd(),\n): Promise<Project | undefined> {\n const ref = resolveActiveProjectRef(fromDir);\n if (!ref) {\n return undefined;\n }\n\n await resolveActiveOrganization(config, fromDir);\n\n const client = platform ?? createCliPlatformClient(config);\n return resolveProjectRef(client, ref);\n}\n\nexport async function resolveActiveProjectId(\n config: Conf<CliConfig>,\n fromDir = process.cwd(),\n): Promise<string | undefined> {\n const project = await resolveActiveProject(config, undefined, fromDir);\n return project?.id;\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"./config\";\nimport { requireAdminRole } from \"./organization/require-admin-role\";\nimport { resolveActiveProjectId } from \"./resolve-project-target\";\nimport { getCliTargetOptions } from \"./target-options\";\n\nexport type CliListOptions = {\n projectId?: string;\n admin?: boolean;\n};\n\n/**\n * Resolve list query options for org-scoped resources.\n *\n * `--admin` lists org-wide and ignores a linked `project` in keystroke.config.ts.\n * An explicit global `--project` still narrows the list.\n */\nexport async function resolveCliListOptions(\n config: Conf<CliConfig>,\n options: { admin?: boolean } = {},\n): Promise<CliListOptions> {\n if (options.admin) {\n await requireAdminRole(config);\n if (!getCliTargetOptions().projectId?.trim()) {\n return { admin: true };\n }\n }\n\n const projectId = await resolveActiveProjectId(config);\n return {\n ...(projectId ? { projectId } : {}),\n ...(options.admin ? { admin: true } : {}),\n };\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveCliListOptions } from \"../../resolve-list-options\";\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 resolveActiveOrganization(config);\n const result = await client.agents.list(await resolveCliListOptions(config, 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\";\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 { AgentSessionDetailResponse, WorkflowRunDetailResponse } from \"@keystrokehq/shared\";\n\nexport type InspectDetailOptions = {\n summary?: boolean;\n field?: string;\n include?: string;\n};\n\nexport type InspectDetailMode =\n | { kind: \"raw\"; include?: string }\n | { kind: \"summary\" }\n | { kind: \"field\"; field: string };\n\nconst WORKFLOW_RUN_FIELDS = [\"id\", \"status\", \"input\", \"output\", \"error\"] as const;\nconst AGENT_SESSION_FIELDS = [\n \"id\",\n \"status\",\n \"title\",\n \"error\",\n \"activeRunId\",\n \"messageCount\",\n] as const;\n\ntype WorkflowRunField = (typeof WORKFLOW_RUN_FIELDS)[number];\ntype AgentSessionField = (typeof AGENT_SESSION_FIELDS)[number];\n\nexport function parseInspectDetailOptions(options: InspectDetailOptions): InspectDetailMode {\n const summary = Boolean(options.summary);\n const field = options.field?.trim() || undefined;\n const include = options.include;\n\n if (summary && field) {\n throw new Error(\"Use --summary or --field, not both\");\n }\n if ((summary || field) && include !== undefined) {\n throw new Error(\"Do not combine --include with --summary or --field\");\n }\n if (summary) {\n return { kind: \"summary\" };\n }\n if (field) {\n return { kind: \"field\", field };\n }\n return { kind: \"raw\", include };\n}\n\nexport function includeForInspectMode(mode: InspectDetailMode): string | undefined {\n if (mode.kind === \"raw\") {\n return mode.include;\n }\n return \"none\";\n}\n\nexport function writeInspectJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport function projectWorkflowRunSummary(detail: WorkflowRunDetailResponse): {\n id: string;\n status: WorkflowRunDetailResponse[\"run\"][\"status\"];\n input: unknown;\n output: unknown;\n error: unknown;\n} {\n return {\n id: detail.run.id,\n status: detail.run.status,\n input: detail.run.input,\n output: detail.run.output,\n error: detail.run.error,\n };\n}\n\nexport function projectWorkflowRunField(detail: WorkflowRunDetailResponse, field: string): unknown {\n if (!isWorkflowRunField(field)) {\n throw new Error(`Unknown --field ${field}. Allowed: ${WORKFLOW_RUN_FIELDS.join(\", \")}`);\n }\n return detail.run[field];\n}\n\nexport function projectAgentSessionSummary(detail: AgentSessionDetailResponse): {\n id: string;\n status: AgentSessionDetailResponse[\"session\"][\"status\"];\n title: string | null;\n error: unknown;\n activeRunId: string | null;\n messageCount: number;\n} {\n return {\n id: detail.session.id,\n status: detail.session.status,\n title: detail.session.title,\n error: detail.session.error,\n activeRunId: detail.activeRunId,\n messageCount: detail.session.messageCount,\n };\n}\n\nexport function projectAgentSessionField(\n detail: AgentSessionDetailResponse,\n field: string,\n): unknown {\n if (!isAgentSessionField(field)) {\n throw new Error(`Unknown --field ${field}. Allowed: ${AGENT_SESSION_FIELDS.join(\", \")}`);\n }\n if (field === \"activeRunId\") {\n return detail.activeRunId;\n }\n return detail.session[field];\n}\n\nfunction isWorkflowRunField(field: string): field is WorkflowRunField {\n return (WORKFLOW_RUN_FIELDS as readonly string[]).includes(field);\n}\n\nfunction isAgentSessionField(field: string): field is AgentSessionField {\n return (AGENT_SESSION_FIELDS as readonly string[]).includes(field);\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 { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\n\nexport async function withActivePlatformClient(\n config: Conf<CliConfig>,\n fn: (platform: PlatformClient) => Promise<void>,\n fromDir = process.cwd(),\n): Promise<void> {\n await resolveActiveOrganization(config, fromDir);\n const platform = createCliPlatformClient(config);\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} projects link --project ${formatProjectLabel(project)}, then ${bin} deploy\\n`,\n );\n }\n}\n\nexport async function runProjectList(\n config: Conf<CliConfig>,\n options: { admin?: boolean } = {},\n): Promise<void> {\n if (options.admin) {\n await requireAdminRole(config);\n }\n\n await withActivePlatformClient(config, async (platform) => {\n const projects = await platform.projects.list(options.admin ? { admin: true } : undefined);\n process.stdout.write(`${JSON.stringify({ projects }, null, 2)}\\n`);\n\n if (projects.length === 0) {\n const bin = cliBinaryName();\n process.stderr.write(\n `No projects yet. Create one with: ${bin} projects 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 \"../projects/run-project\";\n\nexport async function runAgentSessionCancel(\n config: Conf<CliConfig>,\n _agentId: string,\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 {\n includeForInspectMode,\n parseInspectDetailOptions,\n projectAgentSessionField,\n projectAgentSessionSummary,\n writeInspectJson,\n} from \"../inspect-detail\";\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, or none\")\n .option(\n \"--summary\",\n \"Print a concise JSON summary (status, title, error, activeRunId, messageCount)\",\n )\n .option(\n \"--field <field>\",\n \"Print one field: id, status, title, error, activeRunId, messageCount\",\n )\n .action(\n (\n agentId: string,\n sessionId: string,\n options: { include?: string; summary?: boolean; field?: string },\n ) =>\n runProjectCliCommand(\"Get agent session failed\", async ({ client }) => {\n const mode = parseInspectDetailOptions(options);\n const result = await client.agents.getSession(agentId, sessionId, {\n include: includeForInspectMode(mode),\n });\n if (mode.kind === \"summary\") {\n writeInspectJson(projectAgentSessionSummary(result));\n return;\n }\n if (mode.kind === \"field\") {\n writeInspectJson(projectAgentSessionField(result, mode.field));\n return;\n }\n writeInspectJson(result);\n }),\n );\n\n sessions\n .command(\"cancel\")\n .description(\"Cancel a running agent session\")\n .argument(\"<agentId>\", \"Agent key / route id\")\n .argument(\"<sessionId>\", \"Agent session id\")\n .action(async (agentId: string, sessionId: string) => {\n const config = createCliConfig();\n try {\n await runAgentSessionCancel(config, agentId, 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 registerAgentsCommand(program: Command): void {\n const agents = program.command(\"agents\").description(\"Invoke and inspect agents\");\n\n registerAgentListCommand(agents);\n registerAgentPromptCommand(agents);\n registerAgentSessionsCommand(agents);\n}\n","import type Conf from \"conf\";\nimport type { CreateApiKeyRequest } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/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 Conf from \"conf\";\nimport type {\n ConnectManagedServiceCredentialRequest,\n ManagedServiceKind,\n UpdateManagedServiceCredentialRequest,\n} from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\n\nexport async function runManagedServicesList(\n config: Conf<CliConfig>,\n kind: ManagedServiceKind = \"llm\",\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedServices = await platform.managedServiceCredentials.list(kind);\n process.stdout.write(`${JSON.stringify({ managedServices }, null, 2)}\\n`);\n });\n}\n\nexport async function runManagedServicesConnect(\n config: Conf<CliConfig>,\n input: ConnectManagedServiceCredentialRequest,\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedService = await platform.managedServiceCredentials.connect(input);\n process.stdout.write(`${JSON.stringify({ managedService }, null, 2)}\\n`);\n });\n}\n\nexport async function runManagedServicesUpdate(\n config: Conf<CliConfig>,\n provider: string,\n input: UpdateManagedServiceCredentialRequest,\n kind: ManagedServiceKind = \"llm\",\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedServices = await platform.managedServiceCredentials.list(kind);\n const existing = managedServices.find((entry) => entry.provider === provider);\n if (!existing) {\n throw new Error(`No managed service credential connected for provider \"${provider}\"`);\n }\n\n const managedService = await platform.managedServiceCredentials.update(existing.id, input);\n process.stdout.write(`${JSON.stringify({ managedService }, null, 2)}\\n`);\n });\n}\n\nexport async function runManagedServicesDisconnect(\n config: Conf<CliConfig>,\n provider: string,\n kind: ManagedServiceKind = \"llm\",\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const managedServices = await platform.managedServiceCredentials.list(kind);\n const existing = managedServices.find((entry) => entry.provider === provider);\n if (!existing) {\n throw new Error(`No managed service credential connected for provider \"${provider}\"`);\n }\n\n await platform.managedServiceCredentials.disconnect(existing.id);\n process.stdout.write(`${JSON.stringify({ disconnected: provider }, null, 2)}\\n`);\n });\n}\n","import type { Command } from \"commander\";\nimport { ManagedServiceKindSchema, type ManagedServiceKind } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport {\n runManagedServicesConnect,\n runManagedServicesDisconnect,\n runManagedServicesList,\n runManagedServicesUpdate,\n} from \"./run-managed-services\";\n\nasync function handleManagedServicesError(\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\nfunction parseManagedServiceKind(kind: string): ManagedServiceKind {\n const parsed = ManagedServiceKindSchema.safeParse(kind);\n if (!parsed.success) {\n const validKinds = ManagedServiceKindSchema.options.join(\", \");\n throw new Error(`Invalid --kind \"${kind}\". Expected one of: ${validKinds}`);\n }\n return parsed.data;\n}\n\nfunction requireNonEmpty(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`${label} is required`);\n }\n return trimmed;\n}\n\nexport function registerManagedServicesCommand(program: Command): void {\n const managedServices = program\n .command(\"managed-services\")\n .description(\"Manage organization managed service credentials\");\n\n managedServices\n .command(\"list\")\n .description(\"List connected managed service credentials\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (options: { kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"List managed services failed\", async () => {\n await runManagedServicesList(config, parseManagedServiceKind(options.kind));\n });\n });\n\n managedServices\n .command(\"connect\")\n .description(\"Connect a managed service provider with your API key\")\n .argument(\"<provider>\", \"Provider slug (openai, anthropic, google, groq, xai)\")\n .requiredOption(\"--api-key <key>\", \"Provider API key\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (provider: string, options: { apiKey: string; kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"Connect managed service failed\", async () => {\n await runManagedServicesConnect(config, {\n kind: parseManagedServiceKind(options.kind),\n provider: requireNonEmpty(provider, \"Provider\"),\n apiKey: requireNonEmpty(options.apiKey, \"--api-key\"),\n });\n });\n });\n\n managedServices\n .command(\"update\")\n .description(\"Rotate the API key for a connected provider\")\n .argument(\"<provider>\", \"Provider slug (openai, anthropic, google, groq, xai)\")\n .requiredOption(\"--api-key <key>\", \"Provider API key\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (provider: string, options: { apiKey: string; kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"Update managed service failed\", async () => {\n await runManagedServicesUpdate(\n config,\n requireNonEmpty(provider, \"Provider\"),\n { apiKey: requireNonEmpty(options.apiKey, \"--api-key\") },\n parseManagedServiceKind(options.kind),\n );\n });\n });\n\n managedServices\n .command(\"disconnect\")\n .description(\"Disconnect a managed service provider\")\n .argument(\"<provider>\", \"Provider slug (openai, anthropic, google, groq, xai)\")\n .option(\"--kind <kind>\", \"Managed service kind\", \"llm\")\n .action(async (provider: string, options: { kind: string }) => {\n const config = createCliConfig();\n await handleManagedServicesError(\"Disconnect managed service failed\", async () => {\n await runManagedServicesDisconnect(\n config,\n requireNonEmpty(provider, \"Provider\"),\n parseManagedServiceKind(options.kind),\n );\n });\n });\n}\n","import { cliBinaryName } from \"../../errors\";\n\nfunction toCamelCase(value: string): string {\n const pascal = value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())\n .join(\"\");\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/** `github`, `GITHUB_CREATE_ISSUE` → `githubCreateIssue` (matches the generated action export). */\nexport function actionExportName(app: string, tool: string): string {\n const toolkit = app.toLowerCase();\n const upperTool = tool.toUpperCase();\n const prefix = `${toolkit.toUpperCase()}_`;\n const suffix = upperTool.startsWith(prefix) ? upperTool.slice(prefix.length) : upperTool;\n return toCamelCase(`${toolkit}-${suffix}`);\n}\n\n/** Best-effort code-import line for a catalog action. */\nexport function actionImportHint(app: string, tool: string): string {\n return `import { ${actionExportName(app, tool)} } from \"@keystrokehq/${app.toLowerCase()}/actions\"`;\n}\n\ntype InputSchemaProperty = {\n type?: string;\n enum?: unknown[];\n default?: unknown;\n};\n\ntype InputSchema = {\n properties?: Record<string, InputSchemaProperty>;\n required?: string[];\n};\n\nfunction placeholderValue(prop: InputSchemaProperty): string {\n if (prop.default !== undefined) {\n return JSON.stringify(prop.default);\n }\n if (prop.enum?.length) {\n return JSON.stringify(prop.enum[0]);\n }\n switch (prop.type) {\n case \"number\":\n case \"integer\":\n return \"0\";\n case \"boolean\":\n return \"false\";\n case \"array\":\n return \"[]\";\n case \"object\":\n return \"{}\";\n default:\n return '\"\"';\n }\n}\n\nfunction propertyKey(key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\n/**\n * Example typed `run()` call built from the action's input JSON Schema. Lists fields the\n * call type requires — schema-required fields plus defaulted ones (a `.default()` input\n * is still required at the `run()` call site) — and counts the rest as optional.\n */\nexport function actionRunSnippet(\n app: string,\n tool: string,\n inputParameters?: Record<string, unknown>,\n): string {\n const schema = (inputParameters ?? {}) as InputSchema;\n const properties = schema.properties ?? {};\n const required = new Set(schema.required ?? []);\n\n const included = Object.entries(properties).filter(\n ([key, prop]) => required.has(key) || prop.default !== undefined,\n );\n const optionalCount = Object.keys(properties).length - included.length;\n\n const fieldLines = included.map(([key, prop]) => {\n const comments = [prop.type ?? \"unknown\", prop.default !== undefined ? \"has default\" : \"\"];\n return ` ${propertyKey(key)}: ${placeholderValue(prop)}, // ${comments.filter(Boolean).join(\", \")}`;\n });\n if (optionalCount > 0) {\n fieldLines.push(` // +${optionalCount} optional field${optionalCount === 1 ? \"\" : \"s\"}`);\n }\n\n const args = fieldLines.length > 0 ? `{\\n${fieldLines.join(\"\\n\")}\\n}` : \"{}\";\n return `${actionImportHint(app, tool)};\\n\\nconst result = await ${actionExportName(app, tool)}.run(${args});`;\n}\n\n/** Next-step hint printed after listing an app's actions. */\nexport function listActionsHint(app: string): string {\n const bin = cliBinaryName();\n return (\n `\\nNext steps:\\n` +\n ` Inspect a tool: ${bin} apps actions get ${app} <TOOL_SLUG>\\n` +\n ` Run a tool: ${bin} apps execute ${app} <TOOL_SLUG> --input '{...}'\\n`\n );\n}\n\n/** Hint when listing actions for a custom org app (no toolkit tools). */\nexport function listCustomAppActionsHint(app: string): string {\n const bin = cliBinaryName();\n return (\n `\\nCustom org apps have no catalog action list.\\n` +\n ` Inspect app: ${bin} apps get ${app}\\n` +\n ` Scaffold code: ${bin} apps sync ${app}\\n` +\n ` Connect secret: ${bin} connect ${app}\\n` +\n ` Author actions: defineApp({ slug: \"${app}\", ... }).action(...)\\n`\n );\n}\n\n/** Next-step hint printed after showing one action's schema. */\nexport function showActionHint(\n app: string,\n tool: string,\n inputParameters?: Record<string, unknown>,\n): string {\n const bin = cliBinaryName();\n return (\n `\\nNext steps:\\n` +\n ` Run ad-hoc: ${bin} apps execute ${app} ${tool} --input '{...}'\\n` +\n ` Not connected? ${bin} connect ${app}\\n` +\n `\\nUse in code:\\n\\n${actionRunSnippet(app, tool, inputParameters)}\\n`\n );\n}\n","import { parseAppSlug } from \"@keystrokehq/shared\";\nimport type {\n CatalogActionDetail,\n CatalogActionsPage,\n CatalogAppDetail,\n CatalogAppsPage,\n CustomAppDetail,\n} from \"@keystrokehq/shared\";\nimport { PlatformError, type PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nexport type AppShowResult =\n | { kind: \"catalog\"; app: CatalogAppDetail }\n | { kind: \"custom\"; app: CustomAppDetail };\n\nexport type AppActionsListResult =\n | ({ kind: \"catalog\" } & CatalogActionsPage)\n | {\n kind: \"custom\";\n toolkit: string;\n items: [];\n message: string;\n };\n\nconst CUSTOM_APP_ACTIONS_MESSAGE =\n \"Custom org apps do not expose catalog actions. Actions live in your project as \" +\n \"defineApp(...).action(...). Use `keystroke apps get <slug>` for the credential template, \" +\n \"or `keystroke apps sync <slug>` to scaffold the app module.\";\n\nfunction isNotFoundError(error: unknown): boolean {\n if (!(error instanceof PlatformError)) {\n return false;\n }\n if (error.status === 404) {\n return true;\n }\n return /not found/i.test(error.message);\n}\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<AppShowResult> {\n const trimmed = slug.trim();\n if (!trimmed) {\n throw new Error(\"App slug is required\");\n }\n\n const parsed = parseAppSlug(trimmed);\n if (parsed.kind === \"org\") {\n const app = await client.apps.get(parsed.slug);\n return { kind: \"custom\", app };\n }\n\n try {\n const app = await client.apps.getCatalogApp(trimmed);\n return { kind: \"catalog\", app };\n } catch (error) {\n if (!isNotFoundError(error)) {\n throw error;\n }\n try {\n const app = await client.apps.get(trimmed);\n return { kind: \"custom\", app };\n } catch (fallbackError) {\n // Keep the catalog not-found when the custom path also misses; otherwise surface the real failure.\n if (isNotFoundError(fallbackError)) {\n throw error;\n }\n throw fallbackError;\n }\n }\n}\n\nexport async function runAppActions(\n client: PlatformClient,\n options: { slug?: string; search?: string; limit?: number; cursor?: string },\n): Promise<AppActionsListResult> {\n const slug = options.slug?.trim();\n const search = options.search?.trim();\n\n if (slug) {\n const parsed = parseAppSlug(slug);\n if (parsed.kind === \"org\") {\n return {\n kind: \"custom\",\n toolkit: parsed.slug,\n items: [],\n message: CUSTOM_APP_ACTIONS_MESSAGE,\n };\n }\n\n const page = await client.apps.listCatalogActions(slug, {\n search,\n limit: options.limit,\n cursor: options.cursor,\n });\n return { kind: \"catalog\", ...page };\n }\n\n if (!search) {\n throw new Error(\"App slug or --search is required\");\n }\n\n const page = await client.apps.searchCatalogActions({\n search,\n limit: options.limit,\n cursor: options.cursor,\n });\n return { kind: \"catalog\", ...page };\n}\n\nexport async function runAppAction(\n client: PlatformClient,\n toolSlug: string,\n): Promise<CatalogActionDetail> {\n const trimmed = toolSlug.trim().toUpperCase();\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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { listActionsHint, listCustomAppActionsHint, showActionHint } from \"./action-hints\";\nimport { runAppAction, runAppActions } from \"./run-app-catalog\";\n\nexport function registerAppActionsCommands(app: Command): void {\n const actions = app\n .command(\"actions\")\n .description(\"List and inspect built-in catalog app actions (not custom org apps)\");\n\n actions\n .command(\"list\")\n .description(\n \"List or search catalog toolkit actions; custom org apps return kind:custom with guidance\",\n )\n .argument(\"[slug]\", \"App slug (omit for cross-app search 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 list failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await runAppActions(client, { slug, ...options });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n const trimmedSlug = slug?.trim();\n if (!trimmedSlug) {\n return;\n }\n if (result.kind === \"custom\") {\n process.stderr.write(listCustomAppActionsHint(trimmedSlug));\n return;\n }\n process.stderr.write(listActionsHint(trimmedSlug.toLowerCase()));\n },\n undefined,\n { orgScoped: true },\n ),\n );\n\n actions\n .command(\"get\")\n .description(\"Get a catalog action schema, plus how to run and import it\")\n .argument(\"<app>\", \"Catalog app slug (e.g. github) — not a custom org app\")\n .argument(\"<tool>\", \"Tool slug (e.g. github_create_an_issue)\")\n .action((appSlug: string, toolSlug: string) =>\n runCliCommand(\n \"App action get failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await runAppAction(client, toolSlug);\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n process.stderr.write(\n showActionHint(\n appSlug.trim().toLowerCase(),\n toolSlug.trim().toUpperCase(),\n result.inputParameters,\n ),\n );\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import type { AppCredentialFields } from \"@keystrokehq/shared\";\n\nexport function parseCustomAppFieldFlag(value: string): {\n key: string;\n secret: boolean;\n optional: boolean;\n} {\n const parts = value\n .split(\":\")\n .map((part) => part.trim())\n .filter(Boolean);\n const key = parts[0];\n if (!key || !/^[a-zA-Z][a-zA-Z0-9_]*$/.test(key)) {\n throw new Error(`Invalid field key in --field ${JSON.stringify(value)}`);\n }\n\n const optional = parts.includes(\"optional\");\n const secret = parts.includes(\"public\") ? false : parts.includes(\"secret\") || !optional;\n\n return {\n key,\n secret,\n optional,\n };\n}\n\nexport function parseCustomAppFields(flags: string[]): AppCredentialFields {\n const fields: AppCredentialFields = {};\n\n for (const flag of flags) {\n const parsed = parseCustomAppFieldFlag(flag);\n fields[parsed.key] = {\n ...(parsed.secret ? { secret: true } : {}),\n ...(parsed.optional ? { optional: true } : {}),\n };\n }\n\n if (Object.keys(fields).length === 0) {\n throw new Error(\"At least one --field is required\");\n }\n\n if (!Object.values(fields).some((field) => field.optional !== true)) {\n return fields;\n }\n\n const hasRequired = Object.values(fields).some((field) => field.optional !== true);\n if (!hasRequired) {\n throw new Error(\"At least one --field must be required (omit :optional)\");\n }\n\n return fields;\n}\n\nfunction collectValues(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nexport { collectValues as collectAppFieldValues };\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { CreateCustomAppRequest, CustomAppDetail } from \"@keystrokehq/shared\";\n\nexport type AppCreatePreviewResult = {\n preview: true;\n request: CreateCustomAppRequest;\n slug: Awaited<ReturnType<PlatformClient[\"apps\"][\"checkSlug\"]>>;\n};\n\nexport async function runAppCreate(\n client: PlatformClient,\n input: CreateCustomAppRequest,\n options?: { preview?: boolean },\n): Promise<CustomAppDetail | AppCreatePreviewResult> {\n if (options?.preview) {\n const slug = await client.apps.checkSlug(input.slug);\n return { preview: true, request: input, slug };\n }\n\n return client.apps.create(input);\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type {\n AppAuthKind,\n AppCredentialFields,\n CreateCustomAppRequest,\n CustomAppDetail,\n} from \"@keystrokehq/shared\";\nimport { deriveCustomAppDisplay, slugifyAppName } from \"@keystrokehq/shared\";\n\nexport type DiscoverAppSource = \"mcp\" | \"openapi\" | \"graphql\";\n\nexport type RunAppCreateFromUrlInput = {\n source: DiscoverAppSource;\n url: string;\n name?: string;\n slug?: string;\n description?: string;\n logo?: string;\n authKind?: AppAuthKind;\n fields?: AppCredentialFields;\n preview: boolean;\n};\n\nexport type AppCreatePreviewResult = {\n preview: true;\n detected: true;\n request: CreateCustomAppRequest;\n slug: Awaited<ReturnType<PlatformClient[\"apps\"][\"checkSlug\"]>>;\n};\n\nasync function discoverApp(client: PlatformClient, source: DiscoverAppSource, url: string) {\n switch (source) {\n case \"mcp\":\n return client.apps.discoverMcp({ url });\n case \"openapi\":\n return client.apps.discoverOpenApi({ url });\n case \"graphql\":\n return client.apps.discoverGraphql({ url });\n }\n}\n\nfunction buildCreateRequest(\n input: RunAppCreateFromUrlInput,\n template: Awaited<ReturnType<typeof discoverApp>>[\"template\"],\n): CreateCustomAppRequest {\n const derived = deriveCustomAppDisplay(template, {\n url: input.url,\n mcp: input.source === \"mcp\",\n });\n\n const name = input.name?.trim() || derived.name;\n const description = input.description?.trim() || derived.description;\n const slug = input.slug?.trim() || slugifyAppName(name);\n const authKind = input.authKind ?? template.authKind;\n\n const request: CreateCustomAppRequest = {\n name,\n slug,\n description,\n source: input.source,\n url: input.url,\n authKind,\n ...(input.logo ? { logo: input.logo } : {}),\n ...(input.fields\n ? { fields: input.fields }\n : template.credentialFields\n ? { fields: template.credentialFields }\n : {}),\n ...(template.credentialScheme ? { credentialScheme: template.credentialScheme } : {}),\n ...(authKind === \"oauth\" && template.oauthScopes.length > 0\n ? { oauthScopes: template.oauthScopes }\n : {}),\n };\n\n return request;\n}\n\nexport async function runAppCreateFromUrl(\n client: PlatformClient,\n input: RunAppCreateFromUrlInput,\n): Promise<CustomAppDetail | AppCreatePreviewResult> {\n if (input.authKind && input.source !== \"mcp\") {\n throw new Error(\"--auth is only supported with --mcp\");\n }\n\n const discovery = await discoverApp(client, input.source, input.url);\n\n if (!discovery.detected) {\n throw new Error(\n input.source === \"mcp\"\n ? \"Couldn't reach this MCP server. Check the URL and try again.\"\n : input.source === \"openapi\"\n ? \"Couldn't read this OpenAPI spec. Check the URL and try again.\"\n : \"Couldn't introspect this GraphQL endpoint. Check the URL and try again.\",\n );\n }\n\n const request = buildCreateRequest(input, discovery.template);\n\n if (input.preview) {\n const slug = await client.apps.checkSlug(request.slug);\n return { preview: true, detected: true, request, slug };\n }\n\n return client.apps.create(request);\n}\n","import type { Command } from \"commander\";\nimport type { AppAuthKind } from \"@keystrokehq/shared\";\nimport { slugifyAppName } from \"@keystrokehq/shared\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { collectAppFieldValues, parseCustomAppFields } from \"./parse-custom-app-fields\";\nimport { runAppCreate } from \"./run-app-create\";\nimport { runAppCreateFromUrl, type DiscoverAppSource } from \"./run-app-create-from-url\";\n\ntype AppCreateOptions = {\n name?: string;\n slug?: string;\n description?: string;\n logo?: string;\n field: string[];\n mcp?: string;\n openapi?: string;\n graphql?: string;\n auth?: string;\n preview?: boolean;\n};\n\nfunction resolveDiscoverSource(options: AppCreateOptions): {\n source: DiscoverAppSource;\n url: string;\n} | null {\n const sources = [\n options.mcp ? { source: \"mcp\" as const, url: options.mcp } : null,\n options.openapi ? { source: \"openapi\" as const, url: options.openapi } : null,\n options.graphql ? { source: \"graphql\" as const, url: options.graphql } : null,\n ].filter((entry): entry is { source: DiscoverAppSource; url: string } => entry !== null);\n\n if (sources.length > 1) {\n throw new Error(\"Use only one of --mcp, --openapi, or --graphql\");\n }\n\n return sources[0] ?? null;\n}\n\nfunction parseAuthKind(value: string | undefined): AppAuthKind | undefined {\n if (!value) {\n return undefined;\n }\n\n if (value === \"oauth\" || value === \"api_key\") {\n return value;\n }\n\n throw new Error(\"--auth must be oauth or api_key\");\n}\n\nfunction parseLogoUrl(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n if (!trimmed) {\n return undefined;\n }\n\n try {\n const url = new URL(trimmed);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"--logo must be an http(s) URL\");\n }\n return url.href;\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"--logo\")) {\n throw error;\n }\n throw new Error(\"--logo must be a valid URL\");\n }\n}\n\nfunction parseFieldOverrides(flags: string[]) {\n if (flags.length === 0) {\n return undefined;\n }\n\n return parseCustomAppFields(flags);\n}\n\nexport function registerAppCreateCommand(app: Command): void {\n app\n .command(\"create\")\n .description(\"Create a custom org app\")\n .option(\"--name <name>\", \"App display name\")\n .option(\"--slug <slug>\", \"App slug segment (defaults from name)\")\n .option(\"--description <description>\", \"App description (defaults to --name)\")\n .option(\"--logo <url>\", \"Public logo image URL\")\n .option(\n \"--field <field>\",\n \"Credential field as key, key:secret, key:optional, or key:secret:optional (repeatable)\",\n collectAppFieldValues,\n [],\n )\n .option(\"--mcp <url>\", \"Create from an MCP server URL (auto-detect auth)\")\n .option(\"--openapi <url>\", \"Create from an OpenAPI spec URL (auto-detect auth)\")\n .option(\"--graphql <url>\", \"Create from a GraphQL endpoint URL (auto-detect auth)\")\n .option(\"--auth <kind>\", \"Override detected auth: oauth or api_key (MCP only)\")\n .option(\"--preview\", \"Show the request that would be created without creating\")\n .action((options: AppCreateOptions) =>\n runCliCommand(\n \"Create app failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n\n const discovery = resolveDiscoverSource(options);\n const logo = parseLogoUrl(options.logo);\n\n if (discovery) {\n const result = await runAppCreateFromUrl(client, {\n source: discovery.source,\n url: discovery.url.trim(),\n name: options.name,\n slug: options.slug,\n description: options.description,\n logo,\n authKind: parseAuthKind(options.auth),\n fields: parseFieldOverrides(options.field),\n preview: options.preview ?? false,\n });\n\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n if (!options.name?.trim()) {\n throw new Error(\"--name is required for custom apps\");\n }\n\n const name = options.name.trim();\n const slug = options.slug?.trim() || slugifyAppName(name);\n // Default description from name so agents/docs examples without --description still work.\n const description = options.description?.trim() || name;\n\n const result = await runAppCreate(\n client,\n {\n name,\n slug,\n description,\n source: \"custom\",\n ...(logo ? { logo } : {}),\n fields: parseCustomAppFields(options.field),\n },\n { preview: options.preview ?? false },\n );\n\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nimport { cliBinaryName } from \"../../errors\";\n\nfunction isNotConnectedError(error: unknown): boolean {\n if (!(error instanceof PlatformError) || error.status !== 404) {\n return false;\n }\n\n const body = error.body;\n if (typeof body !== \"object\" || body === null || !(\"error\" in body)) {\n return false;\n }\n\n return (body as { error?: string }).error === \"not_found\";\n}\n\nexport async function runAppExecute(\n client: PlatformClient,\n appSlug: string,\n toolSlug: string,\n options: { input: unknown; version?: string; credentialSlug?: string; projectSlug?: string },\n): Promise<unknown> {\n const app = appSlug.trim().toLowerCase();\n const tool = toolSlug.trim().toUpperCase();\n if (!app || !tool) {\n throw new Error(\n \"App and tool slugs are required (e.g. github github_get_the_authenticated_user)\",\n );\n }\n\n const credentialSlug = options.credentialSlug?.trim() || undefined;\n const projectSlug = options.projectSlug?.trim() || undefined;\n\n const version =\n options.version?.trim() ||\n (await client.apps.getCatalogAction(tool)).version?.trim() ||\n undefined;\n\n if (!version) {\n throw new Error(`Catalog action \"${tool}\" has no pinned version. Pass --version explicitly.`);\n }\n\n try {\n const { result } = await client.apps.executeTool({\n app,\n tool,\n version,\n arguments:\n typeof options.input === \"object\" && options.input !== null && !Array.isArray(options.input)\n ? (options.input as Record<string, unknown>)\n : {},\n ...(credentialSlug ? { credentialSlug } : {}),\n ...(projectSlug ? { projectSlug } : {}),\n });\n return result;\n } catch (error) {\n // With an explicit --credential the not_found is about the slug, not a missing connection,\n // so surface the server's message instead of the connect hint.\n if (isNotConnectedError(error) && !credentialSlug) {\n throw new Error(`Not connected to ${app}. Run: ${cliBinaryName()} connect ${app}`);\n }\n\n throw error;\n }\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { cliBinaryName, parseJsonOption, runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveProject } from \"../../resolve-project-target\";\nimport { runAppExecute } from \"./run-app-execute\";\n\nexport function registerAppExecuteCommand(app: Command): void {\n app\n .command(\"execute\")\n .description(\"Run a connected catalog action against the cloud (no local server)\")\n .argument(\"<app>\", \"App slug (e.g. github)\")\n .argument(\"<tool>\", \"Tool slug (e.g. github_get_the_authenticated_user)\")\n .option(\"--input <json>\", \"JSON arguments (defaults to {})\", \"{}\")\n .option(\"--version <version>\", \"Pinned toolkit version (defaults to the catalog value)\")\n .option(\n \"--credential <slug>\",\n `Pin a specific credential by slug (see '${cliBinaryName()} credentials list'); overrides the default and is the only way to use a user credential`,\n )\n .addHelpText(\n \"after\",\n `\nCredential resolution matches the runtime: project default → org default. User credentials are\nnever a default — reach one with --credential <slug>. Target a project with the global\n--project <slug> flag; without it, only org credentials resolve.\n\nExamples:\n ${cliBinaryName()} apps execute github github_get_the_authenticated_user\n ${cliBinaryName()} apps execute github github_get_the_authenticated_user --project my-app\n ${cliBinaryName()} apps execute github github_get_the_authenticated_user --credential work-github\n ${cliBinaryName()} apps execute acculynx acculynx_add_job_appointment --input '{\"jobId\":\"123\",\"startDate\":\"2026-01-01T09:00:00Z\",\"endDate\":\"2026-01-01T10:00:00Z\"}'\n`,\n )\n .action(\n (\n appSlug: string,\n toolSlug: string,\n options: { input: string; version?: string; credential?: string },\n ) =>\n runCliCommand(\n \"App execute failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const input = parseJsonOption(options.input, \"--input\");\n const project = await resolveActiveProject(config, client);\n const result = await runAppExecute(client, appSlug, toolSlug, {\n input,\n version: options.version,\n credentialSlug: options.credential,\n projectSlug: project?.slug,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n {\n usage: {\n command: `${cliBinaryName()} apps execute ${appSlug} ${toolSlug}`,\n flag: \"--input\",\n },\n },\n { orgScoped: true },\n ),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { runAppShow } from \"./run-app-catalog\";\n\nexport function registerAppGetCommand(app: Command): void {\n app\n .command(\"get\")\n .description(\n \"Get an app: catalog toolkit detail, or custom org app credential template (kind: catalog|custom)\",\n )\n .argument(\"<slug>\", \"App slug (e.g. github or acme/internal-api)\")\n .action((slug) =>\n runCliCommand(\n \"App get failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await runAppShow(client, slug);\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import type { AppCatalogSummary } from \"@keystrokehq/shared\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nexport async function runAppList(client: PlatformClient): Promise<AppCatalogSummary[]> {\n return client.apps.listCatalog();\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 resolveActiveOrganization(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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 .usage('[options] \"{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 resolveActiveOrganization(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 { 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 apps 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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 resolveActiveOrganization(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 { registerAppActionsCommands } from \"./actions\";\nimport { registerAppCreateCommand } from \"./create\";\nimport { registerAppExecuteCommand } from \"./execute\";\nimport { registerAppGetCommand } from \"./get\";\nimport { registerAppListCommand } from \"./list\";\nimport { registerAppSearchCommand } from \"./search\";\nimport { registerAppSyncCommand } from \"./sync\";\n\nexport function registerAppsCommand(program: Command): void {\n const apps = program.command(\"apps\").description(\"Discover and run connectable integrations\");\n\n registerAppListCommand(apps);\n registerAppSearchCommand(apps);\n registerAppGetCommand(apps);\n registerAppActionsCommands(apps);\n registerAppExecuteCommand(apps);\n registerAppCreateCommand(apps);\n registerAppSyncCommand(apps);\n}\n","import { access, mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, posix, relative, resolve, sep } from \"node:path\";\n\nimport { ExpectedCliError } from \"../../errors/expected-cli-error\";\n\nexport type ApplyTemplateFilesOptions = {\n projectRoot: string;\n files: Readonly<Record<string, string>>;\n force?: boolean;\n};\n\nasync function pathExists(absolutePath: string): Promise<boolean> {\n try {\n await access(absolutePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction resolveTemplateFilePath(projectRoot: string, filePath: string): string {\n const normalizedRoot = resolve(projectRoot);\n const absolutePath = resolve(normalizedRoot, filePath);\n const relativePath = relative(normalizedRoot, absolutePath);\n const escapesRoot =\n relativePath === \"..\" || relativePath.startsWith(`..${sep}`) || isAbsolute(relativePath);\n const isCanonicalSourcePath =\n filePath.startsWith(\"src/\") &&\n !filePath.includes(\"\\\\\") &&\n !filePath.includes(\"\\0\") &&\n posix.normalize(filePath) === filePath;\n\n if (escapesRoot || !isCanonicalSourcePath) {\n throw new ExpectedCliError(`Unsafe template file path: ${filePath}`);\n }\n\n return absolutePath;\n}\n\n/**\n * Write template files into a project. Refuses to overwrite unless `force` is set.\n * Returns the relative paths written (sorted).\n */\nexport async function applyTemplateFiles(options: ApplyTemplateFilesOptions): Promise<string[]> {\n const paths = Object.keys(options.files).sort();\n const resolvedPaths = paths.map((filePath) => ({\n relative: filePath,\n absolute: resolveTemplateFilePath(options.projectRoot, filePath),\n }));\n\n if (!options.force) {\n const existing: string[] = [];\n for (const filePath of resolvedPaths) {\n if (await pathExists(filePath.absolute)) {\n existing.push(filePath.relative);\n }\n }\n if (existing.length > 0) {\n throw new ExpectedCliError(\n [\n \"Refusing to overwrite existing files (pass --force to overwrite):\",\n ...existing.map((path) => ` ${path}`),\n ].join(\"\\n\"),\n );\n }\n }\n\n for (const filePath of resolvedPaths) {\n await mkdir(dirname(filePath.absolute), { recursive: true });\n await writeFile(filePath.absolute, options.files[filePath.relative]!, \"utf8\");\n }\n\n return paths;\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveKeystrokeConfigRoot } from \"../../project/resolve-keystroke-config-root\";\nimport { applyTemplateFiles } from \"./apply-template-files\";\n\nexport function registerTemplatesApplyCommand(templates: Command): void {\n templates\n .command(\"apply\")\n .description(\n \"Copy a template's files into the current keystroke project (fails if paths exist; --force overwrites)\",\n )\n .argument(\"<slug>\", \"Template slug\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\"--force\", \"Overwrite existing files\", false)\n .action((slug: string, options: { dir: string; force: boolean }) =>\n runCliCommand(\n \"Apply template failed\",\n async () => {\n const projectRoot = resolveKeystrokeConfigRoot(options.dir);\n if (!projectRoot) {\n throw new Error(\"Not in a keystroke project (keystroke.config.ts not found)\");\n }\n\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const { files } = await client.templates.files(slug);\n\n const paths = await applyTemplateFiles({\n projectRoot,\n files,\n force: options.force,\n });\n\n process.stdout.write(\n `${JSON.stringify({ slug, projectRoot, written: paths, force: options.force }, null, 2)}\\n`,\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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport type { TemplateKind } from \"@keystrokehq/shared\";\n\nexport function registerTemplatesListCommand(templates: Command): void {\n templates\n .command(\"list\")\n .description(\"List official templates\")\n .option(\"--kind <kind>\", \"Filter by kind: agent, workflow, or both\")\n .action((options: { kind?: string }) =>\n runCliCommand(\n \"List templates failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const kind = parseKind(options.kind);\n const rows = await client.templates.list(kind ? { kind } : undefined);\n process.stdout.write(`${JSON.stringify(rows, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n\nfunction parseKind(value: string | undefined): TemplateKind | undefined {\n if (!value) {\n return undefined;\n }\n if (value === \"agent\" || value === \"workflow\" || value === \"both\") {\n return value;\n }\n throw new Error(`Invalid --kind ${value}. Expected agent, workflow, or both.`);\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\n\nexport function registerTemplatesShowCommand(templates: Command): void {\n templates\n .command(\"show\")\n .description(\"Show a template and its file paths\")\n .argument(\"<slug>\", \"Template slug\")\n .option(\"--files\", \"Include file contents in the output\")\n .action((slug: string, options: { files?: boolean }) =>\n runCliCommand(\n \"Show template failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const template = await client.templates.get(slug);\n if (!options.files) {\n const { files: _files, ...summary } = template;\n process.stdout.write(\n `${JSON.stringify({ ...summary, filePaths: Object.keys(template.files).sort() }, null, 2)}\\n`,\n );\n return;\n }\n process.stdout.write(`${JSON.stringify(template, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { registerTemplatesApplyCommand } from \"./apply\";\nimport { registerTemplatesListCommand } from \"./list\";\nimport { registerTemplatesShowCommand } from \"./show\";\n\nexport function registerTemplatesCommand(program: Command): void {\n const templates = program\n .command(\"templates\")\n .description(\"Browse and add official agent/workflow templates to a project\");\n\n registerTemplatesListCommand(templates);\n registerTemplatesShowCommand(templates);\n registerTemplatesApplyCommand(templates);\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 { AppCatalogSummary } from \"@keystrokehq/shared\";\nimport { buildConnectDeeplink, resolveConnectAppSlug } from \"@keystrokehq/shared\";\n\nimport { openUrl } from \"../../auth/open-url\";\n\nexport type ConnectPlatformClient = {\n apps: {\n listCatalog(): Promise<AppCatalogSummary[]>;\n };\n};\n\nexport { resolveConnectAppSlug };\n\nexport async function runConnect(options: {\n platform: ConnectPlatformClient;\n webUrl: string;\n orgSlug: string;\n slug: string;\n printUrl?: boolean;\n}): Promise<void> {\n const apps = await options.platform.apps.listCatalog();\n const requested = options.slug.trim();\n const app = resolveConnectAppSlug(requested, 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 if (requested === \"slack\" && app.id === \"slackbot\") {\n process.stdout.write(\n \"Note: External Channels use the Slackbot gateway connection (`slackbot`). \" +\n \"The separate `slack` toolkit is for action credentials, not channel binding.\\n\",\n );\n }\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getWebUrl } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 const membership = await resolveActiveOrganization(config);\n const platform = createCliPlatformClient(config);\n await runConnect({\n platform,\n webUrl: getWebUrl(config),\n orgSlug: membership.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: {\n agent?: string;\n workflow?: string;\n poll?: string;\n}): {\n targetType: CredentialAssignmentTargetType;\n targetKey: string;\n} {\n const agent = options.agent?.trim();\n const workflow = options.workflow?.trim();\n const poll = options.poll?.trim();\n const targets = [agent, workflow, poll].filter(Boolean);\n\n if (targets.length !== 1) {\n throw new Error(\"Exactly one of --agent, --workflow, or --poll 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 return { targetType: \"poll\", targetKey: poll! };\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, agent tool, or poll action\")\n .option(\"--agent <key>\", \"Agent slug\")\n .option(\"--workflow <key>\", \"Workflow slug\")\n .option(\"--poll <slug>\", \"Poll source 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: {\n agent?: string;\n workflow?: string;\n poll?: string;\n credential: string;\n consumer?: string;\n }) =>\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, agent, or poll\")\n .option(\"--agent <key>\", \"Agent slug\")\n .option(\"--workflow <key>\", \"Workflow slug\")\n .option(\"--poll <slug>\", \"Poll source slug\")\n .action((options: { agent?: string; workflow?: string; poll?: 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, agent, or poll\")\n .option(\"--agent <key>\", \"Agent slug\")\n .option(\"--workflow <key>\", \"Workflow slug\")\n .option(\"--poll <slug>\", \"Poll source 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; poll?: 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 \"../projects/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 scope?: UpdateCredentialRequest[\"scope\"];\n projectSlug?: 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 ...(args.scope !== undefined ? { scope: args.scope } : {}),\n ...(args.projectSlug !== undefined ? { projectSlug: args.projectSlug } : {}),\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","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 { parseCredentialSetScopes } from \"./parse-set-scopes\";\nimport { runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsDuplicateCommand(credentials: Command): void {\n credentials\n .command(\"duplicate\")\n .description(\"Duplicate a credential into one or more scopes\")\n .argument(\"<ref>\", \"Credential slug or id\")\n .option(\"--name <name>\", \"Display name for the copy\")\n .option(\"--label <label>\", \"Alias for --name\")\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 .action(\n (\n ref: string,\n options: {\n name?: string;\n label?: string;\n scope: string[];\n projectSlug: string[];\n },\n ) =>\n runCredentialsCommand(\"Duplicate credential failed\", async ({ platform, local }) => {\n if (local) {\n throw new Error(\"Duplicate is only supported for platform credentials\");\n }\n\n const targets = parseCredentialSetScopes(options.scope, options.projectSlug);\n const displayName = options.name ?? options.label;\n const credentials = await platform!.credentials.duplicate(ref, {\n projects: targets.projects,\n createOrganizationCredential: targets.createOrganizationCredential,\n createUserProvidedCredential: targets.createUserProvidedCredential,\n ...(displayName !== undefined ? { label: displayName } : {}),\n });\n process.stdout.write(`${JSON.stringify({ credentials }, null, 2)}\\n`);\n }),\n );\n}\n\nfunction collectValues(value: string, previous: string[]): string[] {\n return previous.concat([value]);\n}\n","import type { Command } from \"commander\";\nimport { createLocalCredentialsClient, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsGetCommand(credentials: Command): void {\n credentials\n .command(\"get\")\n .description(\"Get a credential instance by id\")\n .argument(\"<id>\", \"Credential instance id\")\n .action((id: string) =>\n runCredentialsCommand(\"Get credential failed\", async ({ platform, local }) => {\n if (local) {\n const { client } = await createLocalCredentialsClient();\n const result = await client.credentials.listInstances();\n const match = result.instances.find((instance) => instance.id === id);\n if (!match) {\n throw new Error(`Credential ${id} not found`);\n }\n process.stdout.write(`${JSON.stringify(match, null, 2)}\\n`);\n return;\n }\n\n const credential = await platform!.credentials.get(id);\n process.stdout.write(`${JSON.stringify({ credential }, null, 2)}\\n`);\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport { createLocalCredentialsClient, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsListCommand(credentials: Command): void {\n credentials\n .command(\"list\")\n .description(\"List stored credential instances\")\n .option(\"--key <key>\", \"Filter by credential key (local server only)\")\n .action((options: { key?: string }) =>\n runCredentialsCommand(\"List credential instances failed\", async ({ platform, local }) => {\n if (local) {\n const { client } = await createLocalCredentialsClient();\n const result = await client.credentials.listInstances(\n options.key ? { key: options.key } : undefined,\n );\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n const credentialsList = await platform!.credentials.list();\n process.stdout.write(`${JSON.stringify({ credentials: credentialsList }, null, 2)}\\n`);\n }),\n );\n}\n","export const ENV_REF_PREFIX = \"@env:\";\n\nexport function isEnvRef(raw: string): boolean {\n return raw.startsWith(ENV_REF_PREFIX);\n}\n\nexport function envRefName(raw: string): string {\n return raw.slice(ENV_REF_PREFIX.length);\n}\n","import { envRefName, isEnvRef } from \"../../project/env-ref\";\nimport { loadProjectEnv } from \"../../project/load-project-env\";\n\nexport function parseCredentialValueFields(fields: string[]): Record<string, string> {\n const value: Record<string, string> = {};\n\n for (const field of fields) {\n const separatorIndex = field.indexOf(\"=\");\n if (separatorIndex <= 0) {\n throw new Error(`Invalid --set value: ${field}`);\n }\n\n const key = field.slice(0, separatorIndex);\n let rawValue = field.slice(separatorIndex + 1);\n\n if (isEnvRef(rawValue)) {\n const envName = envRefName(rawValue);\n if (process.env[envName] === undefined) {\n loadProjectEnv();\n }\n rawValue = process.env[envName] ?? \"\";\n if (!rawValue) {\n throw new Error(`Environment variable ${envName} is not set`);\n }\n }\n\n value[key] = rawValue;\n }\n\n if (Object.keys(value).length === 0) {\n throw new Error(\"At least one --set field is required\");\n }\n\n return value;\n}\n\nexport function scopeTypeFromCli(scope: string): \"organization\" | \"user\" | \"project\" {\n switch (scope) {\n case \"org\":\n return \"organization\";\n case \"user\":\n return \"user\";\n case \"project\":\n return \"project\";\n default:\n throw new Error(`Unknown scope \"${scope}\". Expected org, user, or project.`);\n }\n}\n","import type { Command } from \"commander\";\nimport { parseCredentialValueFields } from \"./parse-value\";\nimport { buildPlatformUpdatePatch, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsRotateCommand(credentials: Command): void {\n const rotate = credentials\n .command(\"rotate\")\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 failed\", async ({ platform, local }) => {\n const value = parseCredentialValueFields(options.set);\n\n if (local) {\n throw new Error(\"credentials rotate requires the platform API target (omit --local)\");\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 rotate.alias(\"rotate-key\");\n}\n\n/** @deprecated Use registerCredentialsRotateCommand — `rotate-key` is an alias for `rotate`. */\nexport function registerCredentialsRotateKeyCommand(credentials: Command): void {\n registerCredentialsRotateCommand(credentials);\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","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 registerCredentialsCreateCommand(credentials: Command): void {\n const create = credentials\n .command(\"create\")\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 create.alias(\"set\");\n}\n\n/** @deprecated Use registerCredentialsCreateCommand — `set` is an alias for `create`. */\nexport function registerCredentialsSetCommand(credentials: Command): void {\n registerCredentialsCreateCommand(credentials);\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 { AppCredentialScope } from \"@keystrokehq/shared\";\n\nexport type ParsedUpdateScope = {\n scope: AppCredentialScope;\n projectSlug?: string;\n};\n\n/** Parse a single destination scope for `credentials update --scope`. */\nexport function parseCredentialUpdateScope(\n scopes: string[],\n projectSlugs: string[],\n): ParsedUpdateScope | undefined {\n if (scopes.length === 0) {\n return undefined;\n }\n\n if (scopes.length > 1) {\n throw new Error(\"Scope swap accepts a single --scope value (org, user, or project)\");\n }\n\n const scope = scopes[0]!;\n if (scope !== \"org\" && scope !== \"user\" && scope !== \"project\") {\n throw new Error(`Unknown scope \"${scope}\". Expected org, user, or project.`);\n }\n\n if (scope === \"project\") {\n if (projectSlugs.length !== 1) {\n throw new Error(\"--project-slug is required exactly once when scope is project\");\n }\n return { scope: \"project\", projectSlug: projectSlugs[0] };\n }\n\n if (projectSlugs.length > 0) {\n throw new Error(\"--project-slug is only valid when scope is project\");\n }\n\n return { scope: scope === \"org\" ? \"organization\" : \"user\" };\n}\n","import type { Command } from \"commander\";\nimport { parseCredentialUpdateScope } from \"./parse-update-scope\";\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(\"--scope <scope>\", \"Move to org, user, or project scope\", collectValues, [])\n .option(\"--project-slug <slug>\", \"Project slug when --scope is project\", collectValues, [])\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 scope: string[];\n projectSlug: string[];\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 const scopeTarget = parseCredentialUpdateScope(options.scope, options.projectSlug);\n\n if (local) {\n if (scopeTarget) {\n throw new Error(\"Scope swap is only supported for platform credentials\");\n }\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 ...(scopeTarget\n ? {\n scope: scopeTarget.scope,\n ...(scopeTarget.projectSlug !== undefined\n ? { projectSlug: scopeTarget.projectSlug }\n : {}),\n }\n : {}),\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\nfunction collectValues(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 { registerCredentialsDuplicateCommand } from \"./duplicate\";\nimport { registerCredentialsGetCommand } from \"./get\";\nimport { registerCredentialsListCommand } from \"./list\";\nimport { registerCredentialsRotateCommand } from \"./rotate-key\";\nimport { registerCredentialsCreateCommand } 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 registerCredentialsCreateCommand(credentials);\n registerCredentialsUpdateCommand(credentials);\n registerCredentialsDuplicateCommand(credentials);\n registerCredentialsRotateCommand(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 { parseCredentialStorage, setAccessTokenSwitchingStorage } from \"../../auth/credentials\";\nimport { clearCliJwtCache } from \"../../auth/jwt-cache\";\nimport { openUrl } from \"../../auth/open-url\";\nimport { resolveAuthLoginTargets } from \"../../auth/resolve-login-targets\";\nimport { createCliConfig, getCredentialStorage } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { aliasCliTelemetryUser, reportCliException, trackCliEvent } from \"../../telemetry/init\";\n\ntype LoginOptions = {\n webUrl?: string;\n platformUrl?: string;\n credentialStorage?: 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(\n \"--credential-storage <keychain|file>\",\n \"Where to store the session token (default: keychain; file is owner-only under ~/.keystroke)\",\n )\n .action(async (options: LoginOptions) => {\n const config = createCliConfig();\n const { webUrl, platformUrl } = resolveAuthLoginTargets(options, config);\n const previousStorage = getCredentialStorage(config);\n const storage = options.credentialStorage\n ? parseCredentialStorage(options.credentialStorage)\n : previousStorage;\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 const { cleanupWarning } = setAccessTokenSwitchingStorage(platformUrl, result.accessToken, {\n storage,\n previousStorage,\n });\n config.set(\"credentialStorage\", storage);\n clearCliJwtCache();\n\n if (cleanupWarning) {\n process.stderr.write(`${cleanupWarning}\\n`);\n }\n\n const user = await getSessionWithBearer(platformUrl, result.accessToken);\n\n if (user) {\n await aliasCliTelemetryUser(user.id);\n await trackCliEvent(\"cli:auth_login\", {\n userId: user.id,\n });\n process.stdout.write(`Logged in as ${user.name} (${user.email})\\n`);\n } else {\n await trackCliEvent(\"cli:auth_login\");\n process.stdout.write(`Logged in to ${webUrl}\\n`);\n }\n } catch (error) {\n await reportCliException(error, { command: \"auth login\", operation: \"cli.auth_login\" });\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, clearAccessTokenCache } from \"../../auth/credentials\";\nimport { clearCliJwtCache } from \"../../auth/jwt-cache\";\nimport { createCliConfig, getCredentialStorage, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { clearCliTelemetryUserId } from \"../../telemetry/identity\";\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 const storage = getCredentialStorage(config);\n clearAccessToken(platformUrl, { storage });\n clearAccessTokenCache();\n clearCliJwtCache();\n clearCliTelemetryUserId();\n process.stdout.write(\n `${JSON.stringify({ authenticated: false, webUrl, platformUrl, credentialStorage: storage })}\\n`,\n );\n });\n}\n","import { getSessionWithBearer } from \"@keystrokehq/auth/cli\";\nimport type { Command } from \"commander\";\nimport { getAccessToken } from \"../../auth/credentials\";\nimport { createCliConfig, getCredentialStorage, 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 credentialStorage = getCredentialStorage(config);\n const token = getAccessToken(platformUrl, { storage: credentialStorage });\n\n if (!token) {\n process.stdout.write(\n `${JSON.stringify({\n authenticated: false,\n webUrl,\n platformUrl,\n credentialStorage,\n })}\\n`,\n );\n return;\n }\n\n try {\n const user = await getSessionWithBearer(platformUrl, token);\n const organizations = user ? await listOrganizations(config).catch(() => []) : [];\n\n process.stdout.write(\n `${JSON.stringify({\n authenticated: user !== null,\n webUrl,\n platformUrl,\n credentialStorage,\n user,\n organizations: organizations.map((entry) => ({\n slug: entry.organization.slug,\n name: entry.organization.name,\n role: entry.role,\n })),\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 { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { isNewerVersion } from \"./compare-version\";\n\nexport const SDK_PACKAGE_NAME = \"@keystrokehq/keystroke\";\nexport const CLI_PACKAGE_NAME = \"@keystrokehq/cli\";\n\nconst KEYSTROKE_SCOPE = \"@keystrokehq/\";\nconst REGISTRY_TIMEOUT_MS = 3_000;\n\ntype ManagedPackage = {\n name: string;\n};\n\ntype OutdatedPackage = {\n name: string;\n installed?: string;\n latest?: string;\n};\n\nfunction shouldSkip(): boolean {\n return Boolean(\n process.env.KEYSTROKE_SKIP_UPDATE || process.env.CI === \"true\" || process.env.CI === \"1\",\n );\n}\n\nfunction readPackageJson(root: string):\n | {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n }\n | undefined {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n } catch {\n return undefined;\n }\n}\n\n/** Local/workspace specs are left alone; everything else (ranges and exact pins) must stay current. */\nexport function isLocalSdkSpec(spec: string | undefined): boolean {\n if (!spec) {\n return true;\n }\n\n const trimmed = spec.trim();\n return (\n trimmed.startsWith(\"workspace:\") || trimmed.startsWith(\"link:\") || trimmed.startsWith(\"file:\")\n );\n}\n\nfunction listManagedKeystrokePackages(root: string): ManagedPackage[] {\n const pkg = readPackageJson(root);\n if (!pkg) {\n return [];\n }\n\n const packages: ManagedPackage[] = [];\n\n for (const [name, spec] of Object.entries({\n ...pkg.dependencies,\n ...pkg.devDependencies,\n })) {\n // CLI is global + self-updating; never gate project deps on a local copy.\n if (name === CLI_PACKAGE_NAME) {\n continue;\n }\n if (name.startsWith(KEYSTROKE_SCOPE) && !isLocalSdkSpec(spec)) {\n packages.push({ name });\n }\n }\n\n return packages;\n}\n\nfunction readInstalledVersion(root: string, packageName: string): string | undefined {\n const path = join(root, \"node_modules\", ...packageName.split(\"/\"), \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n const pkg = JSON.parse(readFileSync(path, \"utf8\")) as { version?: string };\n const version = pkg.version?.trim();\n return version || undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function fetchLatestPackageVersion(packageName: string): Promise<string | undefined> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REGISTRY_TIMEOUT_MS);\n\n try {\n const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`, {\n signal: controller.signal,\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) {\n return undefined;\n }\n\n const payload = (await response.json()) as {\n \"dist-tags\"?: { latest?: string };\n };\n return payload[\"dist-tags\"]?.latest?.trim() || undefined;\n } catch {\n return undefined;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction formatOutdatedLine(pkg: OutdatedPackage): string {\n if (pkg.installed && pkg.latest) {\n return `- ${pkg.name} (${pkg.installed} → ${pkg.latest})`;\n }\n if (pkg.latest) {\n return `- ${pkg.name} (not installed → ${pkg.latest})`;\n }\n return `- ${pkg.name}`;\n}\n\nasync function packagesNeedingUpdate(\n root: string,\n packages: ManagedPackage[],\n): Promise<OutdatedPackage[]> {\n const checks = await Promise.all(\n packages.map(async (pkg): Promise<OutdatedPackage | undefined> => {\n const installed = readInstalledVersion(root, pkg.name);\n const latest = await fetchLatestPackageVersion(pkg.name);\n\n // Unknown registry: only fail when the package isn't present locally.\n if (!latest) {\n return installed ? undefined : { name: pkg.name, installed };\n }\n\n if (!installed || isNewerVersion(latest, installed)) {\n return { name: pkg.name, installed, latest };\n }\n\n return undefined;\n }),\n );\n\n return checks.flatMap((pkg) => (pkg ? [pkg] : []));\n}\n\n/**\n * Require @keystrokehq/* project dependencies to be on latest before build/deploy.\n * Skips `@keystrokehq/cli` (global + self-updating). Throws instead of auto-installing.\n */\nexport async function ensureSdkCurrent(root: string): Promise<void> {\n if (shouldSkip()) {\n return;\n }\n\n const packages = listManagedKeystrokePackages(root);\n if (packages.length === 0) {\n return;\n }\n\n const outdated = await packagesNeedingUpdate(root, packages);\n if (outdated.length === 0) {\n return;\n }\n\n const lines = outdated.map(formatOutdatedLine).join(\"\\n\");\n throw new ExpectedCliError(\n `Outdated @keystrokehq packages:\\n${lines}\\n\\nPlease run \\`keystroke update\\` before continuing.`,\n );\n}\n","import type { Command } from \"commander\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\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 await ensureSdkCurrent(root);\n const { buildApp } = await import(\"@keystrokehq/build\");\n await buildApp({ root });\n process.stdout.write(`Built ${root}\\n`);\n } catch (error) {\n const normalized =\n error instanceof Error && error.message.includes(\"Cannot export schema to JSON Schema\")\n ? new ExpectedCliError(error.message)\n : error;\n process.stderr.write(`Build failed: ${formatCliError(normalized, \"unknown error\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\n\n/** Directory holding bundled tool configs (oxlint/vitest). Ships under dist/ for end users. */\nexport function resolveConfigsDir(fromModuleUrl = import.meta.url): string {\n const cliRoot = resolveCliRoot(fromModuleUrl);\n // Source first so contributor edits apply without a rebuild; end users only have dist/.\n const candidates = [join(cliRoot, \"configs\"), join(cliRoot, \"dist\", \"configs\")];\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(\"Bundled tool configs not found — run `pnpm --filter @keystrokehq/cli build`\");\n}\n","import { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Resolve a bundled dev tool's executable from the CLI's own node_modules. The tools\n * (oxlint, vitest, typescript/`tsc6`) ship as CLI dependencies, so user projects don't\n * declare them. Their bins are Node launchers, so callers run them with `node <bin>`.\n */\nexport function resolveToolBin(pkg: string, binName: string): string {\n const packageJsonPath = require.resolve(`${pkg}/package.json`);\n const { bin } = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n\n const relative = typeof bin === \"string\" ? bin : bin?.[binName];\n if (!relative) {\n throw new Error(`Package \"${pkg}\" does not expose a \"${binName}\" bin`);\n }\n\n return join(dirname(packageJsonPath), relative);\n}\n\n/** Run a bundled tool bin as a child process, inheriting stdio. Resolves with its exit code. */\nexport function runToolBin(options: {\n pkg: string;\n binName: string;\n args: string[];\n cwd: string;\n env?: NodeJS.ProcessEnv;\n}): Promise<number> {\n const binPath = resolveToolBin(options.pkg, options.binName);\n\n return new Promise((resolve, reject) => {\n const child = spawn(process.execPath, [binPath, ...options.args], {\n cwd: options.cwd,\n env: options.env ?? process.env,\n stdio: \"inherit\",\n });\n\n child.on(\"error\", reject);\n child.on(\"exit\", (code) => resolve(code ?? 1));\n });\n}\n","import { join } from \"node:path\";\nimport { resolveConfigsDir } from \"./resolve-configs-dir\";\nimport { runToolBin } from \"./run-tool\";\n\n/** Lint the project with the bundled oxlint + config. Resolves with the oxlint exit code. */\nexport function runLint(root: string, args: string[] = [\".\"]): Promise<number> {\n const config = join(resolveConfigsDir(), \"oxlintrc.json\");\n return runToolBin({\n pkg: \"oxlint\",\n binName: \"oxlint\",\n args: [\"--config\", config, ...args],\n cwd: root,\n });\n}\n","import { join } from \"node:path\";\nimport { runToolBin } from \"./run-tool\";\n\n/**\n * Type-check the project with the bundled TypeScript. tsdown (build) strips types without\n * checking them, so build/deploy call this as a gate. Resolves with the tsc exit code.\n *\n * Catalog `typescript` is `@typescript/typescript6`, whose bin is `tsc6` (not `tsc`).\n */\nexport async function runTypecheck(root: string): Promise<number> {\n return runToolBin({\n pkg: \"typescript\",\n binName: \"tsc6\",\n args: [\"--noEmit\", \"-p\", join(root, \"tsconfig.json\")],\n cwd: root,\n });\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport { mergeFilteredArtifact, packProjectArtifact } from \"@keystrokehq/storage/pack-artifact\";\nimport type { Command } from \"commander\";\nimport type { ProjectSourceFile } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getWebUrl } from \"../config\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { formatCliError, isUnreachableServerError } from \"../errors/format-cli-error\";\nimport { createCliPlatformClient } from \"../platform-client\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { resolveActiveOrganization } from \"../resolve-organization-target\";\nimport { resolveActiveProjectId } from \"../resolve-project-target\";\nimport { missingProjectRefError } from \"../target-hints\";\nimport { reportCliException, trackCliEvent } from \"../telemetry/init\";\nimport { runLint } from \"../tooling/run-lint\";\nimport { runTypecheck } from \"../tooling/run-typecheck\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\n\nconst POLL_INTERVAL_MS = 2_000;\nconst DEPLOY_TIMEOUT_MS = 120_000;\nconst SOURCE_BLOB_CONTENT_TYPE = \"text/plain; charset=utf-8\";\n\nconst ARTIFACT_STORAGE_NETWORK_MESSAGE =\n \"Could not reach artifact storage. Check your network/DNS and retry; \" +\n \"corporate proxies or DNS policies sometimes block storage hosts.\";\n\nfunction asExpectedAuthoringOrNetworkError(error: unknown): unknown {\n if (!(error instanceof Error)) {\n return error;\n }\n\n if (error.message.includes(\"Cannot export schema to JSON Schema\")) {\n return new ExpectedCliError(error.message);\n }\n\n const causeMessage =\n error.cause instanceof Error\n ? error.cause.message\n : typeof error.cause === \"string\"\n ? error.cause\n : \"\";\n const combined = `${error.message}\\n${causeMessage}`;\n if (\n isUnreachableServerError(error) &&\n /t3\\.storage\\.dev|storage\\.dev|Artifact upload|Source blob upload/i.test(combined)\n ) {\n return new ExpectedCliError(ARTIFACT_STORAGE_NETWORK_MESSAGE);\n }\n\n return error;\n}\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 await ensureSdkCurrent(root);\n // Deploy is the gate: lint + typecheck before building and shipping.\n if ((await runLint(root)) !== 0) {\n throw new ExpectedCliError(\"lint failed\");\n }\n if ((await runTypecheck(root)) !== 0) {\n throw new ExpectedCliError(\"typecheck failed\");\n }\n const config = createCliConfig();\n await resolveActiveOrganization(config, root);\n const client = createCliPlatformClient(config);\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 }).catch((error: unknown) => {\n if (error instanceof Error && isUnreachableServerError(error)) {\n throw new ExpectedCliError(ARTIFACT_STORAGE_NETWORK_MESSAGE);\n }\n throw asExpectedAuthoringOrNetworkError(error);\n });\n const sourcePromise = uploadProjectSourceSnapshot(\n client,\n project.id,\n created.artifact.id,\n sourceFiles,\n ).catch((error: unknown) => {\n const message = error instanceof Error ? error.message : \"unknown error\";\n process.stderr.write(`Warning: failed to upload project source files: ${message}\\n`);\n });\n\n const upload = await uploadPromise;\n await sourcePromise;\n\n if (!upload.ok) {\n throw new Error(`Artifact upload failed (${upload.status})`);\n }\n\n const completed = await client.artifacts.complete(project.id, created.artifact.id);\n process.stdout.write(`Deploy ${completed.artifact.id} uploaded\\n`);\n\n const deadline = Date.now() + DEPLOY_TIMEOUT_MS;\n while (Date.now() < deadline) {\n const current = await client.projects.get(project.id);\n if (current.status === \"active\") {\n config.set(\"apiTarget\", \"platform\");\n process.stdout.write(`Project active${current.baseUrl ? `: ${current.baseUrl}` : \"\"}\\n`);\n return;\n }\n\n if (current.status === \"failed\") {\n throw new Error(current.lastError ?? \"Project runtime failed\");\n }\n\n await sleep(POLL_INTERVAL_MS);\n }\n\n throw new Error(\"Timed out waiting for project to become active\");\n}\n\nexport function registerDeployCommand(program: Command): void {\n program\n .command(\"deploy\")\n .description(\"Build, upload, and deploy the project to the platform\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\n \"--filter <entry>\",\n \"Build and deploy only matching module entry keys (repeatable)\",\n (value: string, previous: string[]) => [...previous, value],\n [],\n )\n .action(async (options) => {\n let config: ReturnType<typeof createCliConfig> | undefined;\n try {\n config = createCliConfig();\n const root = resolveProjectRoot(options.dir);\n const projectId = await resolveActiveProjectId(config, root);\n if (!projectId) {\n throw missingProjectRefError();\n }\n\n await runDeploy({\n dir: options.dir,\n projectId,\n filter: options.filter.length > 0 ? options.filter : undefined,\n });\n await trackCliEvent(\"cli:deploy\", {\n projectId,\n });\n } catch (error) {\n const normalized = asExpectedAuthoringOrNetworkError(error);\n await reportCliException(normalized, { command: \"deploy\", operation: \"cli.deploy\" });\n const message = formatCliError(normalized, \"unknown error\", {\n webUrl: config ? getWebUrl(config) : undefined,\n });\n process.stderr.write(`Deploy failed: ${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { resolvePublicPlatformOrigin } from \"@keystrokehq/shared\";\n\nimport { loadProjectEnv } from \"./project/load-project-env\";\n\n/** Local platform API origin from the project `.env` (`PUBLIC_PLATFORM_URL`). */\nexport function resolveLocalApiOrigin(fromDir = process.cwd()): string {\n loadProjectEnv(fromDir);\n return resolvePublicPlatformOrigin(process.env);\n}\n","/** Strip dev-only Node flags so the API child loads built `dist/`, not package `src/`. */\nexport function runtimeChildNodeOptions(nodeOptions: string | undefined): string | undefined {\n if (!nodeOptions?.trim()) {\n return undefined;\n }\n\n const parts = nodeOptions.trim().split(/\\s+/);\n const cleaned: string[] = [];\n\n for (let index = 0; index < parts.length; index++) {\n const part = parts[index]!;\n if (part === \"--conditions=development\") {\n continue;\n }\n if (part === \"--conditions\" && parts[index + 1] === \"development\") {\n index++;\n continue;\n }\n cleaned.push(part);\n }\n\n const result = cleaned.join(\" \").trim();\n return result || undefined;\n}\n\nexport function runtimeChildEnv(\n parentEnv: NodeJS.ProcessEnv,\n overrides: Record<string, string>,\n): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = { ...parentEnv, ...overrides };\n delete env.KEYSTROKE_DEV;\n\n const nodeOptions = runtimeChildNodeOptions(env.NODE_OPTIONS);\n if (nodeOptions) {\n env.NODE_OPTIONS = nodeOptions;\n } else {\n delete env.NODE_OPTIONS;\n }\n\n const hasExplicitDatabaseUrl = Boolean(env.DATABASE_URL?.trim());\n if (!hasExplicitDatabaseUrl) {\n // sqlite default: drop Infisical POSTGRES_* (platform/orchestrator only) so they\n // don't accidentally point the standalone control-plane DB at dev postgres.\n for (const key of [\n \"POSTGRES_HOST\",\n \"POSTGRES_PORT\",\n \"POSTGRES_DB\",\n \"POSTGRES_USER\",\n \"POSTGRES_PASSWORD\",\n \"DATABASE_SEARCH_PATH\",\n ]) {\n delete env[key];\n }\n // Standalone uses sqlite control-plane DB (public + per-org files under ./data).\n env.DATABASE_URL = \"file:./data/public.db\";\n }\n\n env.KEYSTROKE_APP_MODE ??= \"standalone\";\n\n return env;\n}\n","import { pathToFileURL } from \"node:url\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { listenPortFromPublicUrl } from \"@keystrokehq/shared\";\nimport { runtimeChildEnv } from \"./runtime-child-env\";\n\nexport type BootstrapRunOptions = {\n root: string;\n runtimeNodeModules: string;\n apiPort: number;\n};\n\nexport type BootstrapRun = {\n cwd: string;\n args: string[];\n env: NodeJS.ProcessEnv;\n};\n\n/** Node args + env for `@keystrokehq/build` bootstrap (shared by start + dev). */\nexport async function resolveBootstrapRun(options: BootstrapRunOptions): Promise<BootstrapRun> {\n const { resolveRuntimeBuildArtifact } = await import(\"@keystrokehq/build\");\n const loader = pathToFileURL(\n resolveRuntimeBuildArtifact(options.runtimeNodeModules, \"dist/runtime-loader.mjs\"),\n ).href;\n const bootstrap = resolveRuntimeBuildArtifact(\n options.runtimeNodeModules,\n \"dist/standalone-bootstrap.mjs\",\n );\n\n const args: string[] = [`--import=${loader}`];\n const envFile = join(options.root, \".env\");\n\n if (existsSync(envFile)) {\n args.push(`--env-file=${envFile}`);\n }\n\n args.push(bootstrap);\n\n const childEnv = runtimeChildEnv(process.env, {\n KEYSTROKE_ROOT: options.root,\n KEYSTROKE_RUNTIME_NODE_MODULES: options.runtimeNodeModules,\n KEYSTROKE_APP_MODE: \"standalone\",\n });\n childEnv.PORT = String(listenPortFromPublicUrl(childEnv.PUBLIC_PLATFORM_URL, options.apiPort));\n\n return {\n cwd: options.root,\n args,\n env: childEnv,\n };\n}\n","import { spawn, type ChildProcess } from \"node:child_process\";\n\nexport type ManagedProcess = {\n name: string;\n child: ChildProcess;\n};\n\nexport function waitForExit(child: ChildProcess): Promise<number | null> {\n return new Promise((resolve) => {\n child.on(\"exit\", (code) => resolve(code ?? null));\n });\n}\n\nexport async function runUntilExit(processes: ManagedProcess[]): Promise<number | null> {\n const shutdown = (signal: NodeJS.Signals = \"SIGTERM\") => {\n for (const { child } of processes) {\n if (!child.killed && child.pid !== undefined) {\n child.kill(signal);\n }\n }\n };\n\n const onSignal = () => {\n shutdown(\"SIGINT\");\n process.exit(0);\n };\n\n process.on(\"SIGINT\", onSignal);\n process.on(\"SIGTERM\", onSignal);\n\n try {\n const results = await Promise.race(\n processes.map(async ({ name, child }) => {\n const code = await waitForExit(child);\n return { name, code };\n }),\n );\n\n if (results.code !== 0 && results.code !== null) {\n shutdown();\n throw new Error(`${results.name} exited with status ${results.code}`);\n }\n\n shutdown();\n return results.code;\n } finally {\n process.off(\"SIGINT\", onSignal);\n process.off(\"SIGTERM\", onSignal);\n }\n}\n\nexport function spawnNodeScript(options: {\n cwd: string;\n args: string[];\n env: NodeJS.ProcessEnv;\n}): ChildProcess {\n return spawn(\"node\", options.args, {\n cwd: options.cwd,\n env: options.env,\n stdio: \"inherit\",\n });\n}\n","import { spawnSync } from \"node:child_process\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\n\nconst NATIVE_PACKAGES = [\"better-sqlite3\"] as const;\n\nfunction isMissingBindingsError(error: unknown): boolean {\n return error instanceof Error && error.message.includes(\"Could not locate the bindings file\");\n}\n\nfunction rebuildNativePackage(require: NodeRequire, pkg: string): void {\n const pkgDir = dirname(require.resolve(`${pkg}/package.json`));\n const npm = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n const result = spawnSync(npm, [\"run\", \"install\"], { cwd: pkgDir, stdio: \"inherit\" });\n\n if (result.status !== 0) {\n throw new Error(`Failed to build ${pkg} native bindings. Try: pnpm rebuild -g ${pkg}`);\n }\n}\n\n/** Compile native addons when pnpm skipped dependency install scripts (common on global install). */\nexport function ensureNativeDeps(nodeModulesRoot: string): void {\n const anchor = join(nodeModulesRoot, \"@keystrokehq\", \"server\", \"package.json\");\n const require = createRequire(anchor);\n\n for (const pkg of NATIVE_PACKAGES) {\n try {\n require(pkg);\n } catch (error) {\n if (!isMissingBindingsError(error)) {\n throw error;\n }\n\n process.stderr.write(`Building ${pkg} native bindings…\\n`);\n rebuildNativePackage(require, pkg);\n require(pkg);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/** Directory whose `node_modules/@keystrokehq/runtime` ships with the CLI pack. */\nexport function resolveCliRuntimeNodeModules(cliRoot: string): string {\n let dir = cliRoot;\n\n while (dir !== dirname(dir)) {\n const nodeModules = join(dir, \"node_modules\");\n if (existsSync(join(nodeModules, \"@keystrokehq\", \"runtime\"))) {\n return nodeModules;\n }\n dir = dirname(dir);\n }\n\n throw new Error(\n \"Keystroke runtime packages are missing. Reinstall or repack the CLI (expected @keystrokehq/runtime in node_modules).\",\n );\n}\n","/**\n * `keystroke dev` — watch-build + API restart.\n *\n * NOT true hot reload. On src/ changes tsdown rebuilds dist/, then we stop and\n * boot the API again so route discovery picks up new agents/workflows/triggers.\n */\nimport type { Command } from \"commander\";\nimport type { ChildProcess } from \"node:child_process\";\nimport { createCliConfig, getConfigDir } from \"../config\";\nimport { resolveLocalApiOrigin } from \"../resolve-local-api-origin\";\nimport { clearDevSession, writeDevSession } from \"../dev-session\";\nimport { resolveBootstrapRun } from \"../project/bootstrap-run\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { spawnNodeScript } from \"../process/run-processes\";\nimport { ensureNativeDeps } from \"../runtime/ensure-native-deps\";\nimport { resolveCliRuntimeNodeModules } from \"../runtime/resolve-runtime-node-modules\";\nimport { trackCliEvent } from \"../telemetry/init\";\n\nconst DEV_BANNER = \"keystroke dev: watch rebuilds dist/ and restarts the API — not hot reload.\\n\";\n\ntype DevOptions = {\n dir: string;\n port?: number;\n};\n\nfunction stopChild(child: ChildProcess | undefined): void {\n if (child && !child.killed && child.pid !== undefined) {\n child.kill(\"SIGTERM\");\n }\n}\n\nfunction resolveDevServerUrl(root: string, portOverride?: number): string {\n const url = new URL(resolveLocalApiOrigin(root));\n if (portOverride !== undefined) {\n url.port = String(portOverride);\n }\n return url.origin;\n}\n\nexport async function runDev(options: DevOptions): Promise<void> {\n void trackCliEvent(\"cli:dev_started\").catch(() => {});\n\n const root = resolveProjectRoot(options.dir);\n\n const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));\n ensureNativeDeps(runtimeNodeModules);\n\n const cliConfig = createCliConfig();\n const configDir = getConfigDir(cliConfig);\n\n process.stdout.write(DEV_BANNER);\n\n const serverUrl = resolveDevServerUrl(root, options.port);\n const apiPort = Number(new URL(serverUrl).port || 80);\n\n writeDevSession(\n {\n pid: process.pid,\n port: apiPort,\n root,\n serverUrl,\n },\n configDir,\n );\n\n let apiChild: ChildProcess | undefined;\n let restarting = false;\n let firstBoot = true;\n\n const restartApi = async () => {\n if (restarting) {\n return;\n }\n\n restarting = true;\n stopChild(apiChild);\n const bootstrap = await resolveBootstrapRun({\n root,\n runtimeNodeModules,\n apiPort,\n });\n apiChild = spawnNodeScript(bootstrap);\n\n if (firstBoot) {\n firstBoot = false;\n process.stdout.write(`API: ${serverUrl}\\n`);\n } else {\n process.stdout.write(\"API restarted after dist rebuild (not hot reload).\\n\");\n }\n\n restarting = false;\n };\n\n const shutdown = () => {\n clearDevSession(configDir);\n stopChild(apiChild);\n process.exit(0);\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n try {\n const { watchApp } = await import(\"@keystrokehq/build\");\n await watchApp({\n root,\n clean: false,\n onRebuild: restartApi,\n });\n } finally {\n process.off(\"SIGINT\", shutdown);\n process.off(\"SIGTERM\", shutdown);\n clearDevSession(configDir);\n stopChild(apiChild);\n }\n}\n\nexport function registerDevCommand(program: Command): void {\n program\n .command(\"dev\")\n .description(\"Watch src/, rebuild dist/, and restart the API (not true hot reload)\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\"--port <number>\", \"API port\", (value) => Number(value))\n .action(async (options) => {\n try {\n await runDev({\n dir: options.dir,\n port: options.port,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Dev failed\";\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { McpReadClient } from \"@keystrokehq/mcp\";\n\ntype ToolResultLike = {\n content?: Array<{ type?: string; text?: string }>;\n};\n\n/**\n * Render an MCP tool result for the terminal. The docs tools return text/markdown\n * blocks (search hits, file contents, sandbox stdout/stderr), so we pass them through\n * verbatim and only fall back to JSON when a result carries no text.\n */\nexport function renderToolResult(result: unknown): string {\n const blocks = (result as ToolResultLike)?.content;\n if (Array.isArray(blocks)) {\n const text = blocks\n .filter((block) => block?.type === \"text\" && typeof block.text === \"string\")\n .map((block) => block.text)\n .join(\"\\n\");\n if (text.length > 0) {\n return text;\n }\n }\n return JSON.stringify(result, null, 2);\n}\n\n/** Call a docs MCP tool and render its result as text. */\nexport async function callDocsTool(\n client: McpReadClient,\n name: string,\n args: Record<string, unknown>,\n): Promise<string> {\n const result = await client.callTool({ name, arguments: args });\n return renderToolResult(result);\n}\n","import { resolveDocsMcpUrl } from \"@keystrokehq/shared\";\nimport type Conf from \"conf\";\n\nimport { getWebUrl, type CliConfig } from \"../../config\";\n\n/**\n * Public Keystroke docs MCP endpoint (Mintlify-hosted, no auth).\n * Derived from the configured web URL; `KEYSTROKE_DOCS_MCP_URL` overrides for dev/testing.\n */\nexport function getDocsMcpUrl(config: Conf<CliConfig>): string {\n return resolveDocsMcpUrl({\n webUrl: getWebUrl(config),\n override: process.env.KEYSTROKE_DOCS_MCP_URL,\n });\n}\n","import { withMcpReadClient } from \"@keystrokehq/mcp\";\nimport { DOCS_QUERY_TOOL } from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { callDocsTool } from \"./run-docs\";\nimport { getDocsMcpUrl } from \"./docs-mcp-url\";\n\nexport function registerDocsQueryCommand(docs: Command): void {\n docs\n .command(\"query\")\n .description(\n \"Read the Keystroke docs filesystem with a shell-style command (cat, rg, ls, tree)\",\n )\n .argument(\"<command>\", 'Read-only command, e.g. \"cat /quickstart.mdx\" or \"rg -il auth /\"')\n .action((command: string) =>\n runStandaloneCliCommand(\"Docs query failed\", async ({ config }) => {\n const url = getDocsMcpUrl(config);\n // The command runs in Mintlify's server-side sandbox, not on this machine.\n const output = await withMcpReadClient(url, (client) =>\n callDocsTool(client, DOCS_QUERY_TOOL, { command }),\n );\n process.stdout.write(`${output}\\n`);\n }),\n );\n}\n","import { withMcpReadClient } from \"@keystrokehq/mcp\";\nimport { DOCS_SEARCH_TOOL, normalizeDocsSearchPaths } from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { callDocsTool } from \"./run-docs\";\nimport { getDocsMcpUrl } from \"./docs-mcp-url\";\n\nexport function registerDocsSearchCommand(docs: Command): void {\n docs\n .command(\"search\")\n .description(\"Search the Keystroke documentation for relevant pages and examples\")\n .argument(\"<query>\", \"Search query\")\n .action((query: string) =>\n runStandaloneCliCommand(\"Docs search failed\", async ({ config }) => {\n const url = getDocsMcpUrl(config);\n const output = await withMcpReadClient(url, (client) =>\n callDocsTool(client, DOCS_SEARCH_TOOL, { query }),\n );\n // Mintlify returns extensionless web routes; query needs `.mdx` filesystem paths.\n process.stdout.write(`${normalizeDocsSearchPaths(output)}\\n`);\n }),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { registerDocsQueryCommand } from \"./query\";\nimport { registerDocsSearchCommand } from \"./search\";\n\nexport function registerDocsCommand(program: Command): void {\n const docs = program.command(\"docs\").description(\"Search and read the Keystroke documentation\");\n\n registerDocsSearchCommand(docs);\n registerDocsQueryCommand(docs);\n}\n","import type { Command } from \"commander\";\n\nimport { runStandaloneCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { readCliVersion } from \"../../version\";\n\nconst MESSAGE_WRITING_GUIDE = `\nWrite the message for a Keystroke team member with zero context on your session:\n\n- Start with 1-2 plain sentences on what you were building and what happened.\n- Then a numbered list with one item per distinct issue.\n- Lead each item with the plain-English problem and what you expected instead;\n put technical detail (paths, commands, error text) after — not instead.\n- Avoid internal function names, codenames, or jargon a cold reader can't know.\n- Never include secrets, tokens, credentials, proprietary code, or personal data.\n\nThe message renders in Slack as mrkdwn: *bold*, _italic_, \\`code\\`.\n\nTemplate:\n\n keystroke feedback create --message \"$(cat <<'EOF'\n *Quick Recap and Context*\n\n One or two sentences on what you were building and what happened.\n\n -------------------------\n\n *Feedback for Keystroke Team*\n\n *1. Plain-English title of the issue*\n What happened, what you expected, and any workaround. Technical detail last.\n EOF\n )\"\n`;\n\nexport function registerFeedbackCreateCommand(feedback: Command): void {\n feedback\n .command(\"create\")\n .description(\n \"Send a build-experience report (snags, unclear docs, papercuts) to the Keystroke team\",\n )\n .requiredOption(\n \"--message <text>\",\n \"Freeform report (recap + feedback). Prefer a heredoc for multi-line messages.\",\n )\n .addHelpText(\"after\", MESSAGE_WRITING_GUIDE)\n .action((options: { message: string }) =>\n runStandaloneCliCommand(\"Feedback create failed\", async ({ config }) => {\n await resolveActiveOrganization(config);\n const platform = createCliPlatformClient(config);\n const linked = readLinkedProjectConfig();\n\n await platform.agentFeedback.submit({\n message: options.message,\n cliVersion: readCliVersion(),\n ...(linked.project ? { projectSlug: linked.project } : {}),\n });\n\n process.stdout.write(`${JSON.stringify({ ok: true }, null, 2)}\\n`);\n }),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { registerFeedbackCreateCommand } from \"./create\";\n\nexport function registerFeedbackCommand(program: Command): void {\n const feedback = program\n .command(\"feedback\")\n .description(\"Send build-experience reports to the Keystroke team\");\n\n registerFeedbackCreateCommand(feedback);\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 \"../projects/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 { resolveCliListOptions } from \"../../resolve-list-options\";\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(\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(async (options: { status?: string; kind?: string; admin?: boolean }) => {\n const config = createCliConfig();\n try {\n // History filters by project id. `--admin` ignores a linked project;\n // an explicit `--project` still narrows. Undefined project lists org-wide.\n const listOptions = await resolveCliListOptions(config, { admin: options.admin });\n await runHistoryList(config, {\n ...(listOptions.projectId ? { project: listOptions.projectId } : {}),\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 ...(listOptions.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 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","import { ExpectedCliError } from \"../errors/expected-cli-error\";\n\nconst 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 ExpectedCliError(\"Project name is required\");\n }\n\n if (!KEBAB_CASE.test(trimmed)) {\n throw new ExpectedCliError(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","import { readdir, readFile, stat, writeFile, mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport type TemplateVariables = {\n projectName: string;\n};\n\nfunction renderTemplate(content: string, variables: TemplateVariables): string {\n return content.replaceAll(\"{{projectName}}\", variables.projectName);\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 { writeFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\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: \"keystroke lint\",\n typecheck: \"keystroke typecheck\",\n test: \"keystroke test\",\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: \"latest\",\n },\n devDependencies: {\n \"@types/node\": \"latest\",\n typescript: \"latest\",\n vitest: \"latest\",\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","import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { readCliVersion } from \"../version\";\n\nconst VERSION_MARKER_RE = /<!-- keystroke-agents-guide: (.+?) -->/;\n\nexport function agentsGuideDir(projectRoot: string): string {\n return join(projectRoot, \".agents\");\n}\n\nexport function agentsMdPath(projectRoot: string): string {\n return join(projectRoot, \"AGENTS.md\");\n}\n\n/**\n * Append the CLI version as a trailing HTML comment so auto-sync can detect\n * staleness without writing a sidecar `.agents/` directory. The marker is\n * invisible in rendered markdown and re-stamped (not stacked) on each write.\n */\nexport function stampAgentsGuideVersion(content: string, version = readCliVersion()): string {\n const stripped = content.replace(/\\n*<!-- keystroke-agents-guide: .+? -->\\n*$/, \"\\n\");\n const base = stripped.endsWith(\"\\n\") ? stripped : `${stripped}\\n`;\n return `${base}\\n<!-- keystroke-agents-guide: ${version} -->\\n`;\n}\n\nexport async function readBundleVersion(projectRoot: string): Promise<string | null> {\n try {\n const content = await readFile(agentsMdPath(projectRoot), \"utf8\");\n return content.match(VERSION_MARKER_RE)?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\n\nconst SKILLS_BUNDLE = \"skills-bundle\";\n\nexport function resolveSkillsBundleDir(fromModuleUrl = import.meta.url): string {\n const cliRoot = resolveCliRoot(fromModuleUrl);\n // The real skills source lives in `packages/skills/`. Check it first so\n // contributor edits are picked up without rebuilding the CLI. End users\n // don't have those paths — they get the bundled copy under `dist/`.\n const candidates = [\n join(cliRoot, \"..\", \"..\", \"packages\", \"skills\", \"bundled\"),\n join(cliRoot, \"..\", \"..\", \"packages\", \"skills\", \"dist\"),\n join(cliRoot, \"dist\", SKILLS_BUNDLE),\n join(cliRoot, SKILLS_BUNDLE),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(join(candidate, \"_AGENTS.md\"))) {\n return candidate;\n }\n }\n\n throw new Error(\"Bundled AGENTS guide not found — run `pnpm --filter @keystrokehq/cli build`\");\n}\n","import { lstat, mkdir, readFile, rm, symlink, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative } from \"node:path\";\nimport { agentsMdPath, stampAgentsGuideVersion } from \"./agents-guide-version\";\nimport { resolveSkillsBundleDir } from \"./resolve-skills-bundle-dir\";\n\nfunction isSymlinkUnsupported(error: unknown): boolean {\n if (!error || typeof error !== \"object\" || !(\"code\" in error)) {\n return false;\n }\n const code = error.code;\n return code === \"EPERM\" || code === \"EACCES\" || code === \"ENOTSUP\";\n}\n\ntype CreateLink = (target: string, linkPath: string, type?: \"file\") => Promise<void>;\n\n/** Prefer a symlink; on Windows without symlink privileges, write a regular file copy. */\nexport async function ensureClaudeMdLink(\n guidePath: string,\n linkPath: string,\n createLink: CreateLink = symlink,\n): Promise<void> {\n await mkdir(dirname(linkPath), { recursive: true });\n await rm(linkPath, { recursive: true, force: true });\n\n const target = relative(dirname(linkPath), guidePath);\n try {\n await createLink(target, linkPath, \"file\");\n } catch (error) {\n if (!isSymlinkUnsupported(error)) {\n throw error;\n }\n const contents = await readFile(guidePath, \"utf8\");\n await writeFile(linkPath, contents);\n }\n}\n\n/** Writes AGENTS.md from the CLI bundle and recreates the CLAUDE.md symlink (or copy). */\nexport async function scaffoldAgentsGuide(\n projectRoot: string,\n fromModuleUrl = import.meta.url,\n): Promise<void> {\n const bundleDir = resolveSkillsBundleDir(fromModuleUrl);\n const guidePath = agentsMdPath(projectRoot);\n\n const agentsStat = await lstat(guidePath).catch(() => null);\n if (agentsStat?.isSymbolicLink()) {\n await rm(guidePath, { force: true });\n }\n\n const bundle = await readFile(join(bundleDir, \"_AGENTS.md\"), \"utf8\");\n await writeFile(guidePath, stampAgentsGuideVersion(bundle));\n\n await ensureClaudeMdLink(guidePath, join(projectRoot, \"CLAUDE.md\"));\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { resolveKeystrokeConfigRoot } from \"./resolve-keystroke-config-root\";\nimport { stripConfigCommentsPreservingLength } from \"./read-project-config\";\n\nconst KEYSTROKE_CONFIG = \"keystroke.config.ts\";\n\nexport type LinkedProjectConfigInput = {\n project?: string;\n organization?: string;\n};\n\nfunction upsertStringLiteral(\n source: string,\n key: \"project\" | \"organization\",\n value: string | undefined,\n): string {\n const stripped = stripConfigCommentsPreservingLength(source);\n const entryPattern = new RegExp(`\\\\b${key}\\\\s*:\\\\s*(['\"])[^'\"]*\\\\1,?\\\\s*\\\\n?`);\n const entry = value === undefined ? undefined : ` ${key}: \"${value}\",\\n`;\n\n const match = stripped.match(entryPattern);\n if (match?.index !== undefined) {\n const start = match.index;\n const end = start + match[0].length;\n if (value === undefined) {\n return source.slice(0, start) + source.slice(end);\n }\n return source.slice(0, start) + entry! + source.slice(end);\n }\n\n if (value === undefined) {\n return source;\n }\n\n const defineConfigPattern = /defineConfig\\(\\{\\s*\\n?/;\n if (defineConfigPattern.test(source)) {\n return source.replace(defineConfigPattern, `defineConfig({\\n${entry}`);\n }\n\n throw new Error(`Could not find defineConfig({ ... }) in ${KEYSTROKE_CONFIG}`);\n}\n\nexport function upsertLinkedProjectConfig(source: string, input: LinkedProjectConfigInput): string {\n let next = source;\n if (input.project !== undefined) {\n next = upsertStringLiteral(next, \"project\", input.project);\n }\n if (input.organization !== undefined) {\n next = upsertStringLiteral(next, \"organization\", input.organization);\n }\n return next;\n}\n\n/** Write project/organization slugs into keystroke.config.ts. */\nexport function writeLinkedProjectConfig(\n input: LinkedProjectConfigInput,\n fromDir = process.cwd(),\n): string {\n const root = resolveKeystrokeConfigRoot(fromDir);\n if (!root) {\n throw new Error(`No ${KEYSTROKE_CONFIG} found — run from a keystroke project directory`);\n }\n\n const configPath = join(root, KEYSTROKE_CONFIG);\n const source = readFileSync(configPath, \"utf8\");\n const next = upsertLinkedProjectConfig(source, input);\n writeFileSync(configPath, next);\n return configPath;\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nconst EMPTY_SRC_DIRS = [\"files\", \"skills\", \"triggers\"] as const;\n\n/** Ensure standard empty `src/` folders exist (git does not track empty directories). */\nexport async function scaffoldEmptySrcDirs(targetDir: string): Promise<void> {\n await Promise.all(\n EMPTY_SRC_DIRS.map((dir) => mkdir(join(targetDir, \"src\", dir), { recursive: true })),\n );\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { PROJECT_GITIGNORE } 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, \".gitignore\"), PROJECT_GITIGNORE);\n}\n","import { existsSync } from \"node:fs\";\nimport { access, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { basename, isAbsolute, join, relative, resolve } from \"node:path\";\nimport {\n buildPlaygroundWorkspace,\n installDependencies,\n installPlaygroundDependencies,\n resolvePackageManager,\n} from \"./package-manager\";\nimport { assertProjectName, projectNameFromDirectory } from \"./project-name\";\nimport { confirmTargetDir, promptInitOptions } from \"./prompts\";\nimport { copyTemplate } from \"./copy-template\";\nimport { resolveTemplateDir } from \"./resolve-template-dir\";\nimport { applyPlaygroundManifest } from \"./project-files\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { scaffoldAgentsGuide } from \"../skills/scaffold-agents-guide\";\nimport { writeLinkedProjectConfig } from \"../project/write-project-config\";\nimport { scaffoldEmptySrcDirs } from \"./scaffold-empty-src-dirs\";\nimport { scaffoldProjectDotfiles } from \"./scaffold-project-dotfiles\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport type { InitOptions } from \"./types\";\n\nexport type RunInitOptions = InitOptions;\n\nfunction monorepoRoot(): string | null {\n const root = join(resolveCliRoot(import.meta.url), \"..\", \"..\");\n return existsSync(join(root, \"pnpm-workspace.yaml\")) ? root : null;\n}\n\nfunction resolvePlaygroundRoot(targetDir: string): string | null {\n if (process.env.KEYSTROKE_DEV !== \"1\") {\n return null;\n }\n\n const root = monorepoRoot();\n if (!root) {\n return null;\n }\n\n const rel = relative(join(root, \"playground\"), resolve(targetDir));\n return rel.length > 0 && !rel.startsWith(\"..\") && !isAbsolute(rel) ? root : null;\n}\n\n/** Example primitives the hello-world template ships; removed when --no-example is set. */\nconst EXAMPLE_FILES = [\n \"src/actions/greet.ts\",\n \"src/agents/hello.ts\",\n \"src/agents/hello.int.test.ts\",\n \"src/workflows/greeting.ts\",\n \"src/workflows/greeting.test.ts\",\n] as const;\n\nasync function removeExampleFiles(targetDir: string): Promise<void> {\n await Promise.all(EXAMPLE_FILES.map((rel) => rm(join(targetDir, rel), { force: true })));\n}\n\n/**\n * Drop the README sections that walk through the example hello agent / greeting\n * workflow — those primitives don't exist in a --no-example scaffold (e.g. MCP\n * sprite bootstrap), so shipping their usage docs is misleading. Example-only\n * prose is fenced with `<!-- example:start -->` / `<!-- example:end -->` markers\n * so this stays robust to README wording changes.\n */\nasync function stripExampleReadme(targetDir: string): Promise<void> {\n const readmePath = join(targetDir, \"README.md\");\n let content: string;\n try {\n content = await readFile(readmePath, \"utf8\");\n } catch {\n return;\n }\n\n const next = content.replace(/\\n?<!-- example:start -->\\n[\\s\\S]*?<!-- example:end -->\\n/g, \"\");\n\n if (next !== content) {\n await writeFile(readmePath, next);\n }\n}\n\nasync function directoryExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function directoryIsEmpty(path: string): Promise<boolean> {\n if (!(await directoryExists(path))) {\n return true;\n }\n\n const entries = await readdir(path);\n return entries.length === 0;\n}\n\nfunction resolveHeadlessOptions(options: RunInitOptions): {\n projectName: string;\n targetDir: string;\n} {\n const targetDir = resolve(options.directory ?? options.name ?? \"my-keystroke\");\n const projectName = assertProjectName(\n options.name ?? projectNameFromDirectory(basename(targetDir)),\n );\n\n return { projectName, targetDir };\n}\n\nexport async function runInit(\n options: RunInitOptions,\n): Promise<{ targetDir: string; projectName: string }> {\n const interactive = !options.yes && process.stdin.isTTY;\n const resolved = interactive ? await promptInitOptions(options) : resolveHeadlessOptions(options);\n const { projectName, targetDir } = resolved;\n const playgroundRoot = resolvePlaygroundRoot(targetDir);\n\n if (!(await directoryIsEmpty(targetDir))) {\n if (interactive) {\n const ok = await confirmTargetDir(targetDir);\n if (!ok) {\n throw new ExpectedCliError(\"Init cancelled\");\n }\n } else if (!options.yes) {\n throw new ExpectedCliError(\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 });\n await scaffoldEmptySrcDirs(targetDir);\n\n if (options.noExample) {\n await removeExampleFiles(targetDir);\n await stripExampleReadme(targetDir);\n }\n\n if (playgroundRoot) {\n await applyPlaygroundManifest(targetDir, projectName, playgroundRoot);\n } else {\n await scaffoldProjectDotfiles(targetDir);\n }\n\n await scaffoldAgentsGuide(targetDir);\n\n if (options.project || options.organization) {\n writeLinkedProjectConfig(\n {\n ...(options.project ? { project: options.project } : {}),\n ...(options.organization ? { organization: options.organization } : {}),\n },\n targetDir,\n );\n }\n\n if (!options.skipInstall) {\n if (playgroundRoot) {\n installPlaygroundDependencies(targetDir);\n // `link:` deps consume each package's built dist/; build so `keystroke dev`\n // works immediately instead of failing with ERR_MODULE_NOT_FOUND.\n buildPlaygroundWorkspace(playgroundRoot);\n } else {\n const manager = resolvePackageManager(options.packageManager);\n installDependencies(targetDir, manager);\n }\n }\n\n return { targetDir, projectName };\n}\n","import type { Command } from \"commander\";\nimport { runInit } from \"../init/run-init\";\nimport { getCliTargetOptions } from \"../target-options\";\nimport { reportCliException, trackCliEvent } from \"../telemetry/init\";\n\nexport function registerInitCommand(program: Command): void {\n program\n .command(\"init\")\n .description(\"Create a new keystroke project from a template\")\n .argument(\"[directory]\", \"Directory to create the project in\")\n .option(\"--name <name>\", \"Project name (kebab-case)\")\n .option(\"--template <name>\", \"Template to use\", \"hello-world\")\n .option(\"-y, --yes\", \"Skip prompts (headless mode for scripts and AI agents)\")\n .option(\"--skip-install\", \"Skip dependency installation\")\n .option(\"--pm <manager>\", \"Package manager: npm, pnpm, yarn, or bun\")\n .option(\"--no-example\", \"Scaffold without the example action, agent, and workflow\")\n .option(\"--organization <slug>\", \"Platform organization slug to write into keystroke.config.ts\")\n .action(async (directory: string | undefined, options) => {\n try {\n const project = getCliTargetOptions().projectId;\n const result = await runInit({\n directory,\n name: options.name,\n template: options.template,\n yes: options.yes,\n skipInstall: options.skipInstall,\n packageManager: options.pm,\n noExample: options.example === false,\n project,\n organization: options.organization,\n });\n\n await trackCliEvent(\"cli:init\", {\n properties: {\n template: options.template,\n skip_install: Boolean(options.skipInstall),\n },\n });\n\n process.stdout.write(\n `Created keystroke project \"${result.projectName}\" at ${result.targetDir}\\n`,\n );\n process.stdout.write(\"\\nNext steps:\\n\");\n process.stdout.write(` cd ${result.targetDir}\\n`);\n process.stdout.write(\" keystroke auth login # once\\n\");\n if (!project) {\n process.stdout.write(\n \" keystroke projects link --project <slug> # link this directory to a platform project\\n\",\n );\n }\n process.stdout.write(\n \" keystroke deploy # lint + typecheck + build + ship dist/\\n\",\n );\n } catch (error) {\n await reportCliException(error, { command: \"init\", operation: \"cli.init\" });\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 { Command } from \"commander\";\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { runLint } from \"../tooling/run-lint\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\n\nexport function registerLintCommand(program: Command): void {\n program\n .command(\"lint\")\n .description(\"Lint the project with the bundled oxlint\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .allowUnknownOption(true)\n .argument(\"[args...]\", \"Extra arguments forwarded to oxlint\")\n .action(async (args: string[], options: { dir: string }) => {\n try {\n const root = resolveProjectRoot(options.dir);\n await ensureSdkCurrent(root);\n process.exitCode = await runLint(root, args.length > 0 ? args : undefined);\n } catch (error) {\n process.stderr.write(`${formatCliError(error, \"lint failed\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { Command } from \"commander\";\nimport { join } from \"node:path\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { resolveConfigsDir } from \"../tooling/resolve-configs-dir\";\nimport { runToolBin } from \"../tooling/run-tool\";\n\nexport function registerTestCommand(program: Command): void {\n program\n .command(\"test\")\n .description(\"Run tests with the bundled vitest (--project unit|integration)\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .allowUnknownOption(true)\n .argument(\"[args...]\", \"Extra arguments forwarded to vitest\")\n .action(async (args: string[], options: { dir: string }) => {\n const root = resolveProjectRoot(options.dir);\n const config = join(resolveConfigsDir(), \"vitest.config.mjs\");\n const code = await runToolBin({\n pkg: \"vitest\",\n binName: \"vitest\",\n args: [\"run\", \"--root\", root, \"--config\", config, ...args],\n cwd: root,\n });\n process.exitCode = code;\n });\n}\n","import type { Command } from \"commander\";\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { runTypecheck } from \"../tooling/run-typecheck\";\nimport { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\n\nexport function registerTypecheckCommand(program: Command): void {\n program\n .command(\"typecheck\")\n .description(\"Type-check the project with the bundled TypeScript\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .action(async (options: { dir: string }) => {\n try {\n const root = resolveProjectRoot(options.dir);\n await ensureSdkCurrent(root);\n process.exitCode = await runTypecheck(root);\n } catch (error) {\n process.stderr.write(`${formatCliError(error, \"typecheck failed\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import { getSessionWithBearer } from \"@keystrokehq/auth/cli\";\nimport type Conf from \"conf\";\nimport type {\n InvitableOrganizationMemberRole,\n UpdateOrganizationRequest,\n} from \"@keystrokehq/shared\";\n\nimport { getAccessToken } from \"../../auth/credentials\";\nimport type { CliConfig } from \"../../config\";\nimport { getCredentialStorage, getPlatformUrl } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/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 storage = getCredentialStorage(config);\n const token = getAccessToken(platformUrl, { storage });\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 process.stdout.write(`${JSON.stringify({ left: user.id }, null, 2)}\\n`);\n });\n}\n","import type { Command } from \"commander\";\nimport type { InvitableOrganizationMemberRole } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport {\n runOrganizationLeave,\n runOrganizationMembersInvite,\n runOrganizationMembersList,\n runOrganizationMembersRemove,\n runOrganizationMembersRole,\n runOrganizationUpdate,\n} from \"./run-organization\";\n\nfunction collectEmails(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction parseInvitableRole(role: string): InvitableOrganizationMemberRole {\n if (role === \"admin\" || role === \"builder\") {\n return role;\n }\n\n throw new Error(\"Role must be admin or builder\");\n}\n\nasync function handleOrganizationError(\n fallback: string,\n action: () => Promise<void>,\n): Promise<void> {\n const config = createCliConfig();\n try {\n await action();\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, fallback, {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n}\n\nexport function registerOrganizationCommand(program: Command): void {\n const organization = program\n .command(\"organization\")\n .alias(\"org\")\n .description(\"Manage the active organization\");\n\n organization\n .command(\"update\")\n .description(\"Update the active organization's display name\")\n .requiredOption(\"--name <name>\", \"Organization display name\")\n .action(async (options: { name: string }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Update organization failed\", async () => {\n await runOrganizationUpdate(config, { name: options.name });\n });\n });\n\n organization\n .command(\"leave\")\n .description(\"Leave the active organization\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(async (options: { yes?: boolean }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Leave organization failed\", async () => {\n if (!options.yes) {\n throw new Error(\"Pass --yes to confirm leaving the active organization\");\n }\n await runOrganizationLeave(config);\n });\n });\n\n const members = organization\n .command(\"members\")\n .description(\"Manage organization members in the active organization\");\n\n members\n .command(\"list\")\n .description(\"List members in the active organization\")\n .action(async () => {\n const config = createCliConfig();\n await handleOrganizationError(\"List organization members failed\", async () => {\n await runOrganizationMembersList(config);\n });\n });\n\n members\n .command(\"invite\")\n .description(\"Invite people to the active organization\")\n .requiredOption(\"--email <email>\", \"Email address (repeat for multiple)\", collectEmails, [])\n .requiredOption(\"--role <role>\", \"Member role (admin or builder)\")\n .action(async (options: { email: string[]; role: string }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Invite organization members failed\", async () => {\n await runOrganizationMembersInvite(config, {\n emails: options.email,\n role: parseInvitableRole(options.role),\n });\n });\n });\n\n members\n .command(\"role\")\n .description(\"Update a member's role in the active organization\")\n .argument(\"<userId>\", \"Member user id\")\n .requiredOption(\"--role <role>\", \"Member role (admin or builder)\")\n .action(async (userId: string, options: { role: string }) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Update organization member role failed\", async () => {\n await runOrganizationMembersRole(config, {\n userId,\n role: parseInvitableRole(options.role),\n });\n });\n });\n\n members\n .command(\"remove\")\n .description(\"Remove a member from the active organization\")\n .argument(\"<userId>\", \"Member user id\")\n .action(async (userId: string) => {\n const config = createCliConfig();\n await handleOrganizationError(\"Remove organization member failed\", async () => {\n await runOrganizationMembersRemove(config, userId);\n });\n });\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { cliBinaryName } from \"../../errors/command-input\";\nimport { listOrganizations } from \"../../organization/active-organization\";\nimport { writeLinkedProjectConfig } from \"../../project/write-project-config\";\nimport { formatProjectLabel, resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nexport async function runProjectLink(\n config: Conf<CliConfig>,\n projectRef: string,\n fromDir = process.cwd(),\n): Promise<void> {\n await withActivePlatformClient(\n config,\n async (platform) => {\n const project = await resolveProjectRef(platform, projectRef);\n const organizations = await listOrganizations(config);\n const membership = organizations.find(\n (entry) => entry.organization.id === project.organizationId,\n );\n if (!membership) {\n throw new Error(\n `Organization for project ${formatProjectLabel(project)} was not found or you do not have access`,\n );\n }\n\n const configPath = writeLinkedProjectConfig(\n {\n project: project.slug,\n organization: membership.organization.slug,\n },\n fromDir,\n );\n\n process.stdout.write(\n `Linked ${configPath} to ${membership.organization.slug}/${formatProjectLabel(project)}\\n` +\n `Deploy with: ${cliBinaryName()} deploy\\n`,\n );\n },\n fromDir,\n );\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 { resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport { missingProjectRefError } from \"../../target-hints\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nasync function resolveMembersProject(platform: PlatformClient) {\n const ref = resolveActiveProjectRef();\n if (!ref) {\n throw missingProjectRefError();\n }\n\n return resolveProjectRef(platform, ref);\n}\n\nexport async function runProjectMembersList(config: Conf<CliConfig>): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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,\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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: { userId: string; role: ProjectUserRole },\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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: { userId: string },\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\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(config: Conf<CliConfig>): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveMembersProject(platform);\n await platform.members.leaveProject(project.id);\n process.stdout.write(`${JSON.stringify({ left: project.id }, null, 2)}\\n`);\n });\n}\n","import type { Command } from \"commander\";\nimport type { ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\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\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 .action(async () => {\n const config = createCliConfig();\n await handleProjectMembersError(\"List project members failed\", async () => {\n await runProjectMembersList(config);\n });\n });\n\n members\n .command(\"invite\")\n .description(\"Invite people to a project\")\n .requiredOption(\"--email <email>\", \"Email address (repeat for multiple)\", collectEmails, [])\n .requiredOption(\"--role <role>\", \"Project role (admin or builder)\")\n .action(async (options: { email: string[]; role: string }) => {\n const config = createCliConfig();\n await handleProjectMembersError(\"Invite project members failed\", async () => {\n await runProjectMembersInvite(config, {\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 .requiredOption(\"--role <role>\", \"Project role (admin or builder)\")\n .action(async (userId: string, options: { role: string }) => {\n const config = createCliConfig();\n await handleProjectMembersError(\"Update project member role failed\", async () => {\n await runProjectMembersRole(config, {\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 .action(async (userId: string) => {\n const config = createCliConfig();\n await handleProjectMembersError(\"Remove project member failed\", async () => {\n await runProjectMembersRemove(config, {\n userId,\n });\n });\n });\n\n members\n .command(\"leave\")\n .description(\"Leave a project as the current user\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .action(async (options: { 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);\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 { resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport { missingProjectRefError } from \"../../target-hints\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { withActivePlatformClient } from \"./run-project\";\n\nasync function resolveSettingsProject(platform: PlatformClient) {\n const ref = resolveActiveProjectRef();\n if (!ref) {\n throw missingProjectRefError();\n }\n\n return resolveProjectRef(platform, ref);\n}\n\nexport async function runProjectSettingsGet(config: Conf<CliConfig>): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveSettingsProject(platform);\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 patch: UpdateProjectSettingsRequest,\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const project = await resolveSettingsProject(platform);\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 { ProjectInvitePermission, ProjectUserRole } from \"@keystrokehq/shared\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runProjectSettingsGet, runProjectSettingsUpdate } from \"./run-project-settings\";\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 .action(async () => {\n const config = createCliConfig();\n await handleProjectSettingsError(\"Get project settings failed\", async () => {\n await runProjectSettingsGet(config);\n });\n });\n\n settings\n .command(\"update\")\n .description(\"Update settings for a project\")\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 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 ...(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 { missingProjectRefError } from \"../../target-hints\";\nimport { resolveActiveProjectId, resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport {\n runProjectCreate,\n runProjectList,\n runProjectMetrics,\n runProjectDeploymentsList,\n runProjectUpdate,\n runProjectDelete,\n} from \"./run-project\";\nimport { runProjectLink } from \"./run-project-link\";\nimport { registerProjectMembersCommand } from \"./members\";\nimport { registerProjectSettingsCommand } from \"./settings\";\n\nexport function registerProjectsCommand(program: Command): void {\n const projects = program\n .command(\"projects\")\n .description(\"List, create, update, and delete platform projects\");\n\n projects\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 projects\n .command(\"metrics\")\n .description(\"List rollup metrics for 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 const projectRef = resolveActiveProjectRef();\n await runProjectMetrics(config, {\n ...(projectRef ? { projectRef } : {}),\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 = projects\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 .action(async () => {\n const config = createCliConfig();\n try {\n const projectRef = resolveActiveProjectRef();\n if (!projectRef) {\n throw missingProjectRefError();\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 projects\n .command(\"link\")\n .description(\"Link this directory to a platform project in keystroke.config.ts\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .action(async (options: { dir: string }) => {\n const config = createCliConfig();\n try {\n const projectRef = resolveActiveProjectRef(options.dir);\n if (!projectRef) {\n throw missingProjectRefError();\n }\n\n await runProjectLink(config, projectRef, options.dir);\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"Link project failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n });\n\n projects\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 projects\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 missingProjectRefError();\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 projects\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 missingProjectRefError();\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(projects);\n registerProjectSettingsCommand(projects);\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport {\n PROJECT_PULL_STATE_RELATIVE_PATH,\n ProjectPullStateSchema,\n detectProjectPackageManagerFromSnapshot,\n isAcceptableInstallExit,\n type ProjectPackageManager,\n} from \"@keystrokehq/shared\";\nimport { spawnSync } from \"node:child_process\";\n\nimport { DEFAULT_PARALLEL_BATCH_SIZE, mapInParallelBatches } from \"@keystrokehq/storage\";\n\nimport { scaffoldAgentsGuide } from \"../../skills/scaffold-agents-guide\";\n\nexport type RunPullOptions = {\n client: PlatformClient;\n projectId: string;\n targetDir: string;\n force?: boolean;\n};\n\nasync function readPullState(targetDir: string) {\n try {\n const raw = await readFile(join(targetDir, PROJECT_PULL_STATE_RELATIVE_PATH), \"utf8\");\n const parsed = ProjectPullStateSchema.safeParse(JSON.parse(raw));\n return parsed.success ? parsed.data : undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function writePullState(input: {\n targetDir: string;\n projectId: string;\n artifactId: string;\n}): Promise<void> {\n const state = ProjectPullStateSchema.parse({\n projectId: input.projectId,\n artifactId: input.artifactId,\n pulledAt: new Date().toISOString(),\n });\n const path = join(input.targetDir, PROJECT_PULL_STATE_RELATIVE_PATH);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(state, null, 2)}\\n`);\n}\n\nasync function writeSourceTree(\n targetDir: string,\n files: Array<{ path: string; contents: string }>,\n) {\n await mapInParallelBatches(files, DEFAULT_PARALLEL_BATCH_SIZE, async (file) => {\n const absolute = join(targetDir, file.path);\n await mkdir(dirname(absolute), { recursive: true });\n await writeFile(absolute, file.contents);\n });\n}\n\nfunction installDependencies(targetDir: string, manager: ProjectPackageManager): void {\n // Capture output (rather than inheriting stdio) so we can distinguish a real\n // failure from pnpm's non-zero exit on ignored build scripts, then re-print it.\n const result = spawnSync(manager, [\"install\"], { cwd: targetDir, encoding: \"utf8\" });\n const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n process.stdout.write(output);\n\n if (!isAcceptableInstallExit(manager, result.status ?? 1, output)) {\n throw new Error(`${manager} install failed`);\n }\n}\n\nexport async function runPull(options: RunPullOptions): Promise<void> {\n const targetDir = resolve(options.targetDir);\n await mkdir(targetDir, { recursive: true });\n\n // Fast-fail before the network download: refuse to overwrite an existing\n // project unless it was created by a prior pull of this same project (a\n // managed pull dir, which we may safely refresh) or --force is set.\n const existing = await readPullState(targetDir);\n const isManagedPull = existing?.projectId === options.projectId;\n const hasLocalProject = await readFile(join(targetDir, \"package.json\"), \"utf8\").then(\n () => true,\n () => false,\n );\n\n if (hasLocalProject && !isManagedPull && !options.force) {\n throw new Error(\n \"Target directory already contains a project. Re-run with --force to overwrite from the active deploy.\",\n );\n }\n\n const source = await options.client.artifacts.downloadActiveSource(options.projectId);\n\n if (existing?.artifactId === source.artifactId) {\n process.stdout.write(\"Project is already up to date with the active deploy.\\n\");\n return;\n }\n\n await writeSourceTree(targetDir, source.files);\n installDependencies(targetDir, detectProjectPackageManagerFromSnapshot(source.files));\n await scaffoldAgentsGuide(targetDir);\n await writePullState({\n targetDir,\n projectId: options.projectId,\n artifactId: source.artifactId,\n });\n\n process.stdout.write(\n `Pulled ${source.files.length} files from active deploy (${source.artifactId}).\\n`,\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\nimport { missingProjectRefError } from \"../../target-hints\";\nimport { runPull } from \"./run-pull\";\n\nexport function registerPullCommand(program: Command): void {\n program\n .command(\"pull\")\n .description(\"Download the active deploy source snapshot into a local directory\")\n .option(\"--dir <path>\", \"Target directory\", process.cwd())\n .option(\"--force\", \"Overwrite an existing local project tree\")\n .action(async (options: { dir: string; force?: boolean }) =>\n runCliCommand(\"Pull failed\", async () => {\n const config = createCliConfig();\n // Unlike other commands, pull must work in an empty directory (like a\n // git clone), so don't require an existing project root here.\n const projectId = await resolveActiveProjectId(config, options.dir);\n if (!projectId) {\n throw missingProjectRefError();\n }\n\n const client = createCliPlatformClient(config);\n await runPull({\n client,\n projectId,\n targetDir: options.dir,\n force: options.force,\n });\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport { resolveLocalApiOrigin } from \"../resolve-local-api-origin\";\nimport { resolveBootstrapRun } from \"../project/bootstrap-run\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { runUntilExit, spawnNodeScript, type ManagedProcess } from \"../process/run-processes\";\nimport { ensureNativeDeps } from \"../runtime/ensure-native-deps\";\nimport { resolveCliRuntimeNodeModules } from \"../runtime/resolve-runtime-node-modules\";\n\ntype StartOptions = {\n dir: string;\n port?: number;\n};\n\nfunction resolveStartServerUrl(root: string, portOverride?: number): string {\n const url = new URL(resolveLocalApiOrigin(root));\n if (portOverride !== undefined) {\n url.port = String(portOverride);\n }\n return url.origin;\n}\n\nexport async function runStart(options: StartOptions): Promise<void> {\n const root = resolveProjectRoot(options.dir);\n const serverUrl = resolveStartServerUrl(root, options.port);\n const apiPort = Number(new URL(serverUrl).port || 80);\n\n const runtimeNodeModules = resolveCliRuntimeNodeModules(resolveCliRoot(import.meta.url));\n ensureNativeDeps(runtimeNodeModules);\n const { buildApp } = await import(\"@keystrokehq/build\");\n await buildApp({ root, clean: false });\n\n const bootstrap = await resolveBootstrapRun({\n root,\n runtimeNodeModules,\n apiPort,\n });\n\n const processes: ManagedProcess[] = [\n {\n name: \"api\",\n child: spawnNodeScript(bootstrap),\n },\n ];\n\n process.stdout.write(`API: ${serverUrl}\\n`);\n\n await runUntilExit(processes);\n}\n\nexport function registerStartCommand(program: Command): void {\n program\n .command(\"start\")\n .description(\"Build and run the API server\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\"--port <number>\", \"API port\", (value) => Number(value))\n .action(async (options) => {\n try {\n await runStart({\n dir: options.dir,\n port: options.port,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Start failed\";\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { Command } from \"commander\";\nimport { runProjectCliCommand } from \"../../errors\";\n\n/** Copy-ready pause/resume commands, printed to stderr so stdout JSON stays pipeable. */\nfunction writeToggleHints(triggers: { slug: string }[]): void {\n if (triggers.length === 0) {\n return;\n }\n process.stderr.write(\"\\nPause/resume without redeploy (disabled state survives deploys):\\n\");\n for (const entry of triggers) {\n process.stderr.write(\n ` keystroke triggers disable ${entry.slug} # enable to resume; --workflow/--agent to narrow\\n`,\n );\n }\n}\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 writeToggleHints(result.triggers);\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(\"<triggerSlug>\", \"Trigger id or slug\")\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 { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { TriggerAssignment, WorkspaceTriggerDetail } from \"@keystrokehq/shared\";\n\n/** Narrow a trigger's attachments to a single workflow or agent target. */\nexport type TriggerAttachmentTarget =\n | { kind: \"workflow\"; slug: string }\n | { kind: \"agent\"; slug: string };\n\nexport type ResolvedTriggerAttachments = {\n trigger: WorkspaceTriggerDetail;\n attachments: TriggerAssignment[];\n};\n\nasync function loadTrigger(\n platform: PlatformClient,\n triggerRef: string,\n): Promise<WorkspaceTriggerDetail> {\n let trigger = await platform.triggers.get(triggerRef);\n if (!trigger) {\n const triggers = await platform.triggers.list();\n const summary =\n triggers.find((entry) => entry.id === triggerRef || entry.slug === triggerRef) ?? null;\n if (summary) {\n trigger = await platform.triggers.get(summary.id);\n }\n }\n if (!trigger) {\n throw new Error(`Trigger not found: ${triggerRef}`);\n }\n return trigger;\n}\n\n/**\n * Resolve which attachments a toggle applies to. With no target, every attachment on the\n * trigger is returned (\"disable the trigger\"). A `--workflow`/`--agent` target narrows to\n * the single binding for that workflow/agent — so callers never handle attachment ids.\n */\nexport async function resolveTriggerAttachments(\n platform: PlatformClient,\n triggerRef: string,\n target?: TriggerAttachmentTarget,\n): Promise<ResolvedTriggerAttachments> {\n const trigger = await loadTrigger(platform, triggerRef);\n\n if (!target) {\n if (trigger.assignments.length === 0) {\n throw new Error(`Trigger ${trigger.slug} has no attachments`);\n }\n return { trigger, attachments: trigger.assignments };\n }\n\n const match = trigger.assignments.find(\n (entry) => entry.kind === target.kind && entry.slug === target.slug,\n );\n if (!match) {\n const available = trigger.assignments.map((entry) => `${entry.kind} ${entry.slug}`).join(\", \");\n throw new Error(\n `No ${target.kind} \"${target.slug}\" attached to trigger ${trigger.slug}` +\n (available ? ` (attached: ${available})` : \"\"),\n );\n }\n return { trigger, attachments: [match] };\n}\n\n/** Attachment slug passed to runtime trigger run APIs (one target required). */\nexport function attachmentSlugForRuns(attachments: TriggerAssignment[]): string {\n if (attachments.length === 1) {\n return attachments[0]!.attachmentSlug;\n }\n throw new Error(\n `Trigger has ${attachments.length} attachments — pass --workflow or --agent to list runs for one target`,\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { cliBinaryName, parseJsonOption } from \"../../errors\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\nimport {\n resolveTriggerAttachments,\n type TriggerAttachmentTarget,\n} from \"./resolve-trigger-attachment\";\n\nfunction resolveTarget(options: {\n workflow?: string;\n agent?: string;\n}): TriggerAttachmentTarget | undefined {\n if (options.workflow && options.agent) {\n throw new Error(\"Pass only one of --workflow or --agent\");\n }\n if (options.workflow) {\n return { kind: \"workflow\", slug: options.workflow };\n }\n if (options.agent) {\n return { kind: \"agent\", slug: options.agent };\n }\n return undefined;\n}\n\nexport function registerTriggerInvokeCommand(trigger: Command): void {\n trigger\n .command(\"invoke\")\n .description(\"Manually invoke a trigger (webhook, cron, or poll)\")\n .argument(\"<trigger-slug>\", \"Trigger id or slug\")\n .option(\"--input <json>\", \"JSON body for webhook triggers only\")\n .option(\"--workflow <slug>\", \"Only the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Only the attachment bound to this agent\")\n .addHelpText(\n \"after\",\n `\nExamples:\n ${cliBinaryName()} triggers invoke incoming-message --input '{\"text\":\"hi\"}'\n ${cliBinaryName()} triggers invoke morning --workflow report\n ${cliBinaryName()} triggers invoke inbox-sync\n`,\n )\n .action(\n async (\n triggerRef: string,\n options: { input?: string; workflow?: string; agent?: string },\n ) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n const inputProvided = options.input !== undefined;\n\n await withActivePlatformClient(config, async (platform) => {\n const { trigger } = await resolveTriggerAttachments(platform, triggerRef, target);\n\n if (inputProvided && trigger.type !== \"webhook\") {\n throw new Error(`input is only supported for webhook triggers (got ${trigger.type})`);\n }\n\n const result = await platform.triggers.invoke(trigger.id, {\n ...(inputProvided ? { input: parseJsonOption(options.input!, \"--input\") } : {}),\n ...(options.workflow ? { workflow: options.workflow } : {}),\n ...(options.agent ? { agent: options.agent } : {}),\n });\n\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n\n const targetHint =\n options.workflow != null\n ? ` --workflow ${options.workflow}`\n : options.agent != null\n ? ` --agent ${options.agent}`\n : \"\";\n process.stderr.write(\n `Trigger invoked. Track progress:\\n` +\n ` ${cliBinaryName()} triggers runs list ${trigger.slug}${targetHint}\\n`,\n );\n });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"Invoke trigger failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n usage: {\n command: `${cliBinaryName()} triggers invoke ${triggerRef}`,\n flag: options.input !== undefined ? \"--input\" : undefined,\n },\n })}\\n`,\n );\n process.exitCode = 1;\n }\n },\n );\n}\n","import type { Command } from \"commander\";\nimport { createCliConfig } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { runProjectCliCommand } from \"../../errors\";\nimport { getPlatformUrl, getWebUrl } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\nimport {\n attachmentSlugForRuns,\n resolveTriggerAttachments,\n type TriggerAttachmentTarget,\n} from \"./resolve-trigger-attachment\";\n\nfunction resolveTarget(options: {\n workflow?: string;\n agent?: string;\n}): TriggerAttachmentTarget | undefined {\n if (options.workflow && options.agent) {\n throw new Error(\"Pass only one of --workflow or --agent\");\n }\n if (options.workflow) {\n return { kind: \"workflow\", slug: options.workflow };\n }\n if (options.agent) {\n return { kind: \"agent\", slug: options.agent };\n }\n return undefined;\n}\n\nasync function resolveRunsAttachmentSlug(\n triggerRef: string,\n target?: TriggerAttachmentTarget,\n): Promise<string> {\n const config = createCliConfig();\n let attachmentSlug = \"\";\n await withActivePlatformClient(config, async (platform) => {\n const { attachments } = await resolveTriggerAttachments(platform, triggerRef, target);\n attachmentSlug = attachmentSlugForRuns(attachments);\n });\n return attachmentSlug;\n}\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\")\n .argument(\"<triggerSlug>\", \"Trigger id or slug\")\n .option(\"--workflow <slug>\", \"Narrow to the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Narrow to the attachment bound to this agent\")\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 .option(\"--outcome <outcome>\", \"Filter by outcome (dispatched, skipped, failed)\")\n .action(async (triggerSlug: string, options: Record<string, string | undefined>) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n const attachmentSlug = await resolveRunsAttachmentSlug(triggerSlug, target);\n await runProjectCliCommand(\"List trigger runs failed\", async ({ client }) => {\n const result = await client.triggers.listRuns(attachmentSlug, {\n limit: Number(options.limit),\n ...(options.cursor ? { cursor: options.cursor } : {}),\n ...(options.triggerType\n ? { triggerType: options.triggerType as \"cron\" | \"webhook\" | \"poll\" }\n : {}),\n ...(options.outcome\n ? { outcome: options.outcome as \"dispatched\" | \"skipped\" | \"failed\" }\n : {}),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"List trigger runs failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n });\n\n runs\n .command(\"get\")\n .description(\"Get full details for a trigger run\")\n .argument(\"<triggerSlug>\", \"Trigger id or slug\")\n .argument(\"<runId>\", \"Trigger run id\")\n .option(\"--workflow <slug>\", \"Narrow to the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Narrow to the attachment bound to this agent\")\n .option(\"--include <parts>\", \"Comma-separated: workflows, trace\")\n .action(\n async (\n triggerSlug: string,\n runId: string,\n options: { workflow?: string; agent?: string; include?: string },\n ) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n const attachmentSlug = await resolveRunsAttachmentSlug(triggerSlug, target);\n await runProjectCliCommand(\"Get trigger run failed\", async ({ client }) => {\n const result = await client.triggers.getRun(attachmentSlug, runId, {\n include: options.include,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, \"Get trigger run failed\", {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n },\n );\n}\n","import type Conf from \"conf\";\n\nimport type { CliConfig } from \"../../config\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\nimport {\n resolveTriggerAttachments,\n type TriggerAttachmentTarget,\n} from \"./resolve-trigger-attachment\";\n\nexport async function runTriggerEnabled(\n config: Conf<CliConfig>,\n options: { triggerRef: string; target?: TriggerAttachmentTarget; enabled: boolean },\n): Promise<void> {\n await withActivePlatformClient(config, async (platform) => {\n const { trigger, attachments } = await resolveTriggerAttachments(\n platform,\n options.triggerRef,\n options.target,\n );\n\n let detail = trigger;\n for (const attachment of attachments) {\n detail = await platform.triggers.updateAttachment(trigger.id, attachment.attachmentId, {\n enabled: options.enabled,\n });\n }\n\n process.stdout.write(`${JSON.stringify(detail, 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 type { TriggerAttachmentTarget } from \"./resolve-trigger-attachment\";\nimport { runTriggerEnabled } from \"./run-attachment-enabled\";\n\nfunction resolveTarget(options: {\n workflow?: string;\n agent?: string;\n}): TriggerAttachmentTarget | undefined {\n if (options.workflow && options.agent) {\n throw new Error(\"Pass only one of --workflow or --agent\");\n }\n if (options.workflow) {\n return { kind: \"workflow\", slug: options.workflow };\n }\n if (options.agent) {\n return { kind: \"agent\", slug: options.agent };\n }\n return undefined;\n}\n\nfunction registerToggle(trigger: Command, command: \"enable\" | \"disable\", enabled: boolean): void {\n trigger\n .command(command)\n .description(\n `${command === \"enable\" ? \"Enable\" : \"Disable\"} a trigger — all attachments by default, or one with --workflow/--agent`,\n )\n .argument(\"<trigger-slug>\", \"Trigger id or slug\")\n .option(\"--workflow <slug>\", \"Only the attachment bound to this workflow\")\n .option(\"--agent <slug>\", \"Only the attachment bound to this agent\")\n .action(async (triggerRef: string, options: { workflow?: string; agent?: string }) => {\n const config = createCliConfig();\n try {\n const target = resolveTarget(options);\n await runTriggerEnabled(config, { triggerRef, target, enabled });\n } catch (error) {\n process.stderr.write(\n `${formatCliError(error, `${command} trigger failed`, {\n serverUrl: getPlatformUrl(config),\n webUrl: getWebUrl(config),\n })}\\n`,\n );\n process.exitCode = 1;\n }\n });\n}\n\nexport function registerTriggerToggleCommands(trigger: Command): void {\n registerToggle(trigger, \"disable\", false);\n registerToggle(trigger, \"enable\", true);\n}\n","import type { Command } from \"commander\";\nimport {\n registerTriggerGetCommand,\n registerTriggerListCommand,\n registerTriggerUrlCommand,\n} from \"./list\";\nimport { registerTriggerInvokeCommand } from \"./invoke\";\nimport { registerTriggerRunsCommand } from \"./runs\";\nimport { registerTriggerToggleCommands } from \"./toggle\";\n\nexport function registerTriggersCommand(program: Command): void {\n const triggers = program.command(\"triggers\").description(\"Invoke and inspect triggers\");\n\n registerTriggerListCommand(triggers);\n registerTriggerGetCommand(triggers);\n registerTriggerUrlCommand(triggers);\n registerTriggerInvokeCommand(triggers);\n registerTriggerRunsCommand(triggers);\n registerTriggerToggleCommands(triggers);\n}\n","import { spawnSync } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport {\n detectPackageManager,\n resolveGithubPackagesToken,\n type PackageManager,\n} from \"../init/package-manager\";\nimport { detectManagerFromLockfile } from \"./detect-cli-install\";\nimport { isReleaseAgeBlock } from \"./detect-release-age-block\";\nimport { CLI_PACKAGE_NAME, isLocalSdkSpec } from \"./ensure-sdk-current\";\n\nconst KEYSTROKE_SCOPE = \"@keystrokehq/\";\n\nexport type UpdatablePackage = {\n name: string;\n dev: boolean;\n};\n\nexport type UpdatedPackage = {\n name: string;\n from?: string;\n to?: string;\n};\n\nexport type UpdateProjectPackagesResult = {\n updated: UpdatedPackage[];\n skippedReleaseAge: string[];\n};\n\nfunction readPackageJson(root: string):\n | {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n }\n | undefined {\n const path = join(root, \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n return JSON.parse(readFileSync(path, \"utf8\")) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to read package.json at ${path}: ${detail}`);\n }\n}\n\n/** Registry-managed @keystrokehq/* deps (excludes workspace/link/file). */\nexport function listUpdatableKeystrokePackages(root: string): UpdatablePackage[] {\n const pkg = readPackageJson(root);\n if (!pkg) {\n return [];\n }\n\n const packages: UpdatablePackage[] = [];\n\n for (const [name, spec] of Object.entries(pkg.dependencies ?? {})) {\n if (name === CLI_PACKAGE_NAME) {\n continue;\n }\n if (name.startsWith(KEYSTROKE_SCOPE) && !isLocalSdkSpec(spec)) {\n packages.push({ name, dev: false });\n }\n }\n\n for (const [name, spec] of Object.entries(pkg.devDependencies ?? {})) {\n if (name === CLI_PACKAGE_NAME) {\n continue;\n }\n if (name.startsWith(KEYSTROKE_SCOPE) && !isLocalSdkSpec(spec)) {\n packages.push({ name, dev: true });\n }\n }\n\n return packages;\n}\n\nfunction readInstalledVersion(root: string, packageName: string): string | undefined {\n const path = join(root, \"node_modules\", ...packageName.split(\"/\"), \"package.json\");\n if (!existsSync(path)) {\n return undefined;\n }\n\n try {\n const pkg = JSON.parse(readFileSync(path, \"utf8\")) as { version?: string };\n const version = pkg.version?.trim();\n return version || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction updateCommand(\n manager: PackageManager,\n packageName: string,\n dev: boolean,\n): { command: string; args: string[] } {\n const spec = `${packageName}@latest`;\n\n if (manager === \"npm\") {\n return {\n command: \"npm\",\n args: dev ? [\"install\", \"-D\", spec] : [\"install\", spec],\n };\n }\n\n return {\n command: manager,\n args: dev ? [\"add\", \"-D\", spec] : [\"add\", spec],\n };\n}\n\nfunction warnReleaseAgeBlock(packageName: string): void {\n process.stderr.write(\n `Warning: ${packageName}@latest is held back by your minimum-release-age setting; ` +\n `continuing with the currently installed version.\\n`,\n );\n}\n\n/**\n * Install @latest for every managed project @keystrokehq/* dependency.\n * Skips `@keystrokehq/cli` (global; refreshed separately by `keystroke update`).\n * Release-age blocks warn and continue; other install failures throw.\n */\nexport function updateProjectPackages(root: string): UpdateProjectPackagesResult {\n const packages = listUpdatableKeystrokePackages(root);\n if (packages.length === 0) {\n return { updated: [], skippedReleaseAge: [] };\n }\n\n const manager = detectManagerFromLockfile(root) ?? detectPackageManager();\n const token = resolveGithubPackagesToken();\n const env = token ? { ...process.env, NODE_AUTH_TOKEN: token } : process.env;\n\n const updated: UpdatedPackage[] = [];\n const skippedReleaseAge: string[] = [];\n\n for (const pkg of packages) {\n const from = readInstalledVersion(root, pkg.name);\n const { command, args } = updateCommand(manager, pkg.name, pkg.dev);\n process.stderr.write(`Updating ${pkg.name}...\\n`);\n const result = spawnSync(command, args, { cwd: root, env, encoding: \"utf8\" });\n\n if (result.status === 0) {\n const to = readInstalledVersion(root, pkg.name);\n if (to && to !== from) {\n updated.push({ name: pkg.name, from, to });\n }\n continue;\n }\n\n const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n if (isReleaseAgeBlock(output)) {\n warnReleaseAgeBlock(pkg.name);\n skippedReleaseAge.push(pkg.name);\n continue;\n }\n\n throw new Error(\n `Failed to update ${pkg.name}:\\n${output.trim() || `${command} exited ${result.status}`}`,\n );\n }\n\n return { updated, skippedReleaseAge };\n}\n","import type { Command } from \"commander\";\n\nimport { formatCliError } from \"../errors/format-cli-error\";\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { resolveProjectRoot } from \"../project/resolve-project-root\";\nimport { isNewerVersion } from \"../update/compare-version\";\nimport { detectCliInstall } from \"../update/detect-cli-install\";\nimport {\n formatReleaseAgeBlockMessage,\n isReleaseAgeBlock,\n} from \"../update/detect-release-age-block\";\nimport { fetchLatestCliRelease } from \"../update/fetch-latest-version\";\nimport {\n computeReleaseAgeRetryAfter,\n readPnpmMinimumReleaseAgeMinutes,\n} from \"../update/read-pnpm-release-age-minutes\";\nimport { runPackageManagerUpdate } from \"../update/run-package-manager-update\";\nimport { updateProjectPackages } from \"../update/update-project-packages\";\nimport { readCliVersion } from \"../version\";\n\nasync function updateCliInstall(): Promise<void> {\n if (process.env.KEYSTROKE_DEV) {\n return;\n }\n\n const install = detectCliInstall(resolveCliRoot(import.meta.url));\n if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const release = await fetchLatestCliRelease();\n\n if (!release || !isNewerVersion(release.version, currentVersion)) {\n process.stdout.write(`@keystrokehq/cli is up to date (${currentVersion}).\\n`);\n return;\n }\n\n process.stderr.write(\n `Updating @keystrokehq/cli ${currentVersion} -> ${release.version} via ${install.packageManager}...\\n`,\n );\n\n const result = runPackageManagerUpdate(install);\n const installedVersion = readCliVersion();\n\n if (isNewerVersion(installedVersion, currentVersion)) {\n process.stdout.write(`Updated @keystrokehq/cli ${currentVersion} -> ${installedVersion}.\\n`);\n return;\n }\n\n if (result.ok) {\n process.stdout.write(`@keystrokehq/cli is up to date (${installedVersion}).\\n`);\n return;\n }\n\n if (isReleaseAgeBlock(result.output)) {\n const retryAfter =\n install.packageManager === \"pnpm\"\n ? computeReleaseAgeRetryAfter(release.publishedAt, readPnpmMinimumReleaseAgeMinutes())\n : undefined;\n process.stderr.write(\n `${formatReleaseAgeBlockMessage({\n currentVersion,\n availableVersion: release.version,\n retryAfter,\n })}\\n`,\n );\n return;\n }\n\n throw new Error(\n `Failed to update @keystrokehq/cli:\\n${result.output.trim() || \"package manager update failed\"}`,\n );\n}\n\nexport async function runUpdate(options: { dir: string }): Promise<void> {\n const root = resolveProjectRoot(options.dir);\n const result = updateProjectPackages(root);\n\n if (result.updated.length === 0 && result.skippedReleaseAge.length === 0) {\n process.stdout.write(\"Project @keystrokehq packages are up to date.\\n\");\n } else {\n for (const pkg of result.updated) {\n const range =\n pkg.from && pkg.to ? `${pkg.from} -> ${pkg.to}` : pkg.to ? `-> ${pkg.to}` : \"updated\";\n process.stdout.write(`Updated ${pkg.name} (${range}).\\n`);\n }\n if (result.updated.length === 0 && result.skippedReleaseAge.length > 0) {\n process.stdout.write(\"No project @keystrokehq packages were updated.\\n\");\n }\n }\n\n await updateCliInstall();\n}\n\nexport function registerUpdateCommand(program: Command): void {\n program\n .command(\"update\")\n .description(\"Update @keystrokehq packages and the CLI to latest\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .action(async (options: { dir: string }) => {\n try {\n await runUpdate(options);\n } catch (error) {\n process.stderr.write(`${formatCliError(error, \"update failed\")}\\n`);\n process.exitCode = 1;\n }\n });\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport {\n FormFieldConfigSchema,\n WorkflowFormUpsertBodySchema,\n type WorkflowFormUpsertBody,\n} from \"@keystrokehq/shared\";\nimport type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { cliBinaryName, parseJsonOption, runCliCommand } from \"../../errors\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveCliListOptions } from \"../../resolve-list-options\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { resolveActiveProjectId } from \"../../resolve-project-target\";\n\ntype PublishOptions = {\n title?: string;\n description?: string;\n config?: string;\n fieldConfig?: string;\n};\n\nexport function registerWorkflowFormsCommand(workflows: Command): void {\n const forms = workflows.command(\"forms\").description(\"Publish and manage workflow forms\");\n\n forms\n .command(\"list\")\n .description(\"List published workflow forms in the active organization\")\n .option(\"--admin\", \"List forms across all org projects (org owner or admin only)\")\n .action((options: { admin?: boolean }) =>\n runCliCommand(\n \"List workflow forms failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const result = await client.workflowForms.list(\n await resolveCliListOptions(config, options),\n );\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n\n forms\n .command(\"get\")\n .description(\"Get a workflow's published form\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\"Get workflow form failed\", workflowSlug, async (client, workflowId) => {\n const form = await client.workflowForms.get(workflowId);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n }),\n );\n\n forms\n .command(\"url\")\n .description(\"Print a workflow form's public URL\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\"Get workflow form URL failed\", workflowSlug, async (client, workflowId) => {\n const form = await client.workflowForms.get(workflowId);\n if (!form?.enabled) {\n throw new Error(`Workflow \"${workflowSlug}\" does not have a published form.`);\n }\n process.stdout.write(`${form.publicUrl}\\n`);\n }),\n );\n\n forms\n .command(\"publish\")\n .description(\"Publish or update a workflow form\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .option(\"--title <text>\", \"Public form title override\")\n .option(\"--description <text>\", \"Public form description override\")\n .option(\"--config <json>\", \"Complete JSON form configuration\")\n .option(\"--field-config <json>\", \"JSON per-field presentation configuration\")\n .addHelpText(\n \"after\",\n `\nExamples:\n ${cliBinaryName()} workflows forms publish request-review\n ${cliBinaryName()} workflows forms publish request-review --field-config '{\"message\":{\"label\":\"What needs review?\",\"control\":\"textarea\"}}'\n ${cliBinaryName()} workflows forms publish request-review --config '{\"title\":\"Request a review\",\"enabled\":true}'\n`,\n )\n .action((workflowSlug: string, options: PublishOptions) =>\n runFormCommand(\"Publish workflow form failed\", workflowSlug, async (client, workflowId) => {\n const input = parsePublishInput(options);\n const form = await client.workflowForms.publish(workflowId, input);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n }),\n );\n\n forms\n .command(\"unpublish\")\n .description(\"Stop accepting submissions for a workflow form\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\"Unpublish workflow form failed\", workflowSlug, async (client, workflowId) => {\n const form = await client.workflowForms.unpublish(workflowId);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n }),\n );\n\n forms\n .command(\"rotate\")\n .description(\"Rotate a workflow form's public link\")\n .argument(\"<workflowSlug>\", \"Workflow slug\")\n .action((workflowSlug: string) =>\n runFormCommand(\n \"Rotate workflow form link failed\",\n workflowSlug,\n async (client, workflowId) => {\n const form = await client.workflowForms.rotate(workflowId);\n process.stdout.write(`${JSON.stringify(form, null, 2)}\\n`);\n },\n ),\n );\n}\n\nfunction parsePublishInput(options: PublishOptions): WorkflowFormUpsertBody {\n const config =\n options.config === undefined\n ? {}\n : WorkflowFormUpsertBodySchema.parse(parseJsonOption(options.config, \"--config\"));\n const fieldConfig =\n options.fieldConfig === undefined\n ? undefined\n : FormFieldConfigSchema.parse(parseJsonOption(options.fieldConfig, \"--field-config\"));\n\n return WorkflowFormUpsertBodySchema.parse({\n ...config,\n ...(options.title !== undefined ? { title: options.title } : {}),\n ...(options.description !== undefined ? { description: options.description } : {}),\n ...(fieldConfig !== undefined ? { fieldConfig } : {}),\n });\n}\n\nfunction runFormCommand(\n title: string,\n workflowSlug: string,\n action: (client: PlatformClient, workflowId: string) => Promise<void>,\n) {\n return runCliCommand(\n title,\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n const projectId = await resolveActiveProjectId(config);\n const workflows = await client.workflows.list(projectId ? { projectId } : undefined);\n const matches = workflows.filter((workflow) => workflow.slug === workflowSlug);\n\n if (matches.length === 0) {\n throw new Error(`Workflow \"${workflowSlug}\" was not found in the active organization.`);\n }\n if (matches.length > 1) {\n throw new Error(\n `Workflow \"${workflowSlug}\" is ambiguous. Link a project or pass --project to choose one.`,\n );\n }\n\n await action(client, matches[0]!.id);\n },\n undefined,\n { orgScoped: true },\n );\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig } from \"../../config\";\nimport { runCliCommand } from \"../../errors\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveCliListOptions } from \"../../resolve-list-options\";\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 resolveActiveOrganization(config);\n const result = await client.workflows.list(await resolveCliListOptions(config, options));\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()} workflows run math --input '{\"first\":1,\"second\":2}'\n ${cliBinaryName()} workflows 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()} workflows runs get ${workflowId} ${result.runId} --summary\\n`,\n );\n }\n },\n {\n usage: {\n command: `${cliBinaryName()} workflows 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 \"../projects/run-project\";\n\nexport async function runWorkflowRunCancel(\n config: Conf<CliConfig>,\n _workflowId: string,\n runId: string,\n): 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 {\n includeForInspectMode,\n parseInspectDetailOptions,\n projectWorkflowRunField,\n projectWorkflowRunSummary,\n writeInspectJson,\n} from \"../inspect-detail\";\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, or none\")\n .option(\"--summary\", \"Print a concise JSON summary (status, input, output, error)\")\n .option(\"--field <field>\", \"Print one field: id, status, input, output, error\")\n .action(\n (\n workflowId: string,\n runId: string,\n options: { include?: string; summary?: boolean; field?: string },\n ) =>\n runProjectCliCommand(\"Get workflow run failed\", async ({ client }) => {\n const mode = parseInspectDetailOptions(options);\n const result = await client.workflows.getRun(workflowId, runId, {\n include: includeForInspectMode(mode),\n });\n if (mode.kind === \"summary\") {\n writeInspectJson(projectWorkflowRunSummary(result));\n return;\n }\n if (mode.kind === \"field\") {\n writeInspectJson(projectWorkflowRunField(result, mode.field));\n return;\n }\n writeInspectJson(result);\n }),\n );\n\n runs\n .command(\"hooks\")\n .description(\"List hook tokens and resume URLs for a workflow run\")\n .argument(\"<workflowId>\", \"Workflow key / route id\")\n .argument(\"<runId>\", \"Workflow run id\")\n .action((workflowId: string, runId: string) =>\n runProjectCliCommand(\"List workflow run hooks failed\", async ({ client }) => {\n const result = await client.workflows.listHooks(workflowId, runId);\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n }),\n );\n\n runs\n .command(\"cancel\")\n .description(\"Cancel a running or queued workflow run\")\n .argument(\"<workflowId>\", \"Workflow key / route id\")\n .argument(\"<runId>\", \"Workflow run id\")\n .action(async (workflowId: string, runId: string) => {\n const config = createCliConfig();\n try {\n await runWorkflowRunCancel(config, workflowId, 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 { registerWorkflowFormsCommand } from \"./forms\";\nimport { registerWorkflowListCommand } from \"./list\";\nimport { registerWorkflowRunCommand } from \"./run\";\nimport { registerWorkflowRunsCommand } from \"./runs\";\n\nexport function registerWorkflowsCommand(program: Command): void {\n const workflows = program.command(\"workflows\").description(\"Invoke and inspect workflows\");\n\n registerWorkflowListCommand(workflows);\n registerWorkflowRunCommand(workflows);\n registerWorkflowRunsCommand(workflows);\n registerWorkflowFormsCommand(workflows);\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 { resolveActiveOrganization } from \"../../resolve-organization-target\";\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 resolveActiveOrganization(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 { createCliPlatformClient } from \"../../platform-client\";\nimport { resolveActiveOrganization } from \"../../resolve-organization-target\";\nimport { resolveActiveProjectRef } from \"../../resolve-project-target\";\nimport { resolveProjectRef } from \"../../resolve-resource-ref\";\nimport { missingProjectRefError } from \"../../target-hints\";\n\nexport async function resolveChannelProjectId(config: Conf<CliConfig>): Promise<string> {\n await resolveActiveOrganization(config);\n const platform = createCliPlatformClient(config);\n\n const ref = resolveActiveProjectRef();\n if (!ref) {\n throw missingProjectRefError();\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 { 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 .action(async (options: { platform: string }) =>\n runCliCommand(\"List channel accounts failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(config);\n const accounts = await runChannelAccounts(\n client,\n projectId,\n options.platform as ChannelPlatformKey,\n );\n if (accounts.length === 0 && options.platform === \"slack\") {\n process.stdout.write(\n \"No Slack workspaces connected. Run `keystroke connect slackbot` to connect a workspace for External Channels.\\n\",\n );\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 .action(async (options: { agent: string }) =>\n runCliCommand(\"List agent channels failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 .action(async (options: { platform: string; account: string }) =>\n runCliCommand(\"List channel directory failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 .argument(\"<agent>\", \"Agent id or slug\")\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 (resolved from Slack when omitted)\")\n .option(\"--mode <mode>\", \"Listen mode (mention, all, dm)\", \"mention\")\n .action(\n async (\n agent: string,\n options: {\n platform: string;\n account: string;\n channel: string;\n channelName?: string;\n mode?: string;\n },\n ) =>\n runCliCommand(\"Bind channel failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(config);\n const connection = await runChannelBind(client, projectId, {\n agentId: agent,\n platform: options.platform as ChannelPlatformKey,\n accountId: options.account,\n binding: {\n channelId: options.channel,\n ...(options.channelName ? { channelName: options.channelName } : {}),\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 .action(async (options: { agent: string; binding: string }) =>\n runCliCommand(\"Unbind channel failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 .action(async (options: { agent: string; binding: string; mode?: string; threads?: boolean }) =>\n runCliCommand(\"Update channel binding failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(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 registerChannelsCommand(program: Command): void {\n const channels = program\n .command(\"channels\")\n .description(\"Manage agent external channel bindings\");\n\n registerChannelPlatformsCommand(channels);\n registerChannelAccountsCommand(channels);\n registerChannelListCommand(channels);\n registerChannelDirectoryCommand(channels);\n registerChannelBindCommand(channels);\n registerChannelUnbindCommand(channels);\n registerChannelUpdateBindingCommand(channels);\n}\n","import { UserPreferencesPatchSchema, type UserPreferencesPatch } from \"@keystrokehq/shared\";\n\nexport function parsePreferenceValue(rawValue: string): unknown {\n try {\n return JSON.parse(rawValue);\n } catch {\n return rawValue;\n }\n}\n\nexport function buildPreferencesPatchFromKeyValue(\n key: string,\n rawValue: string,\n): UserPreferencesPatch {\n const trimmedKey = key.trim();\n if (!trimmedKey) {\n throw new Error(\"Preference key is required\");\n }\n\n const value = parsePreferenceValue(rawValue);\n const segments = trimmedKey.split(\".\").filter(Boolean);\n if (segments.length === 0) {\n throw new Error(\"Preference key is required\");\n }\n\n let patch: Record<string, unknown> = { [segments.at(-1)!]: value };\n\n for (let index = segments.length - 2; index >= 0; index -= 1) {\n patch = { [segments[index]!]: patch };\n }\n\n const parsed = UserPreferencesPatchSchema.safeParse(patch);\n if (!parsed.success) {\n const message = parsed.error.issues[0]?.message ?? \"invalid value\";\n throw new Error(`Invalid preference ${trimmedKey}: ${message}`);\n }\n\n return parsed.data;\n}\n","import type { Command } from \"commander\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\n\nimport { createCliConfig } from \"../../config\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport { buildPreferencesPatchFromKeyValue } from \"./preferences-patch\";\n\nexport async function runConfigPreferencesGet(platform: PlatformClient): Promise<string> {\n const preferences = await platform.userPreferences.get();\n return `${JSON.stringify(preferences, null, 2)}\\n`;\n}\n\nexport async function runConfigPreferencesSet(\n platform: PlatformClient,\n key: string,\n value: string,\n): Promise<string> {\n const patch = buildPreferencesPatchFromKeyValue(key, value);\n const preferences = await platform.userPreferences.update(patch);\n return `${JSON.stringify(preferences, null, 2)}\\n`;\n}\n\nexport function registerConfigPreferencesCommand(config: Command): void {\n const preferences = config.command(\"preferences\").description(\"Manage user preferences\");\n\n preferences\n .command(\"get\")\n .description(\"Show current user preferences as JSON\")\n .action(async () => {\n const cliConfig = createCliConfig();\n const platform = createCliPlatformClient(cliConfig);\n process.stdout.write(await runConfigPreferencesGet(platform));\n });\n\n preferences\n .command(\"set\")\n .description(\"Update a user preference by dot-path key\")\n .argument(\"<key>\", \"Preference key, e.g. interfaceTheme or sidebar.navIconVisibility\")\n .argument(\"<value>\", \"Preference value (JSON or plain string)\")\n .action(async (key: string, value: string) => {\n const cliConfig = createCliConfig();\n const platform = createCliPlatformClient(cliConfig);\n process.stdout.write(await runConfigPreferencesSet(platform, key, value));\n });\n}\n","import type { Command } from \"commander\";\n\nimport { createCliConfig, getConfigDir, getEffectiveApiTarget, getPlatformUrl } from \"../../config\";\nimport { resolveLocalApiOrigin } from \"../../resolve-local-api-origin\";\nimport { readDevSession } from \"../../dev-session\";\nimport { listOrganizations } from \"../../organization/active-organization\";\nimport { readLinkedProjectConfig } from \"../../project/read-project-config\";\nimport { registerConfigPreferencesCommand } from \"./preferences\";\n\nexport function registerConfigCommand(program: Command): void {\n const config = program.command(\"config\").description(\"Manage CLI configuration\");\n\n registerConfigPreferencesCommand(config);\n\n config\n .command(\"show\")\n .description(\"Show CLI configuration\")\n .action(() => {\n const cliConfig = createCliConfig();\n const configDir = getConfigDir(cliConfig);\n const linked = readLinkedProjectConfig();\n process.stdout.write(\n `${JSON.stringify(\n {\n webUrl: cliConfig.get(\"webUrl\"),\n platformUrl: getPlatformUrl(cliConfig),\n localApiUrl: resolveLocalApiOrigin(process.cwd()),\n linkedProject: linked.project ?? null,\n linkedOrganization: linked.organization ?? null,\n apiTarget: getEffectiveApiTarget(cliConfig),\n devSession: readDevSession(configDir) ?? null,\n },\n null,\n 2,\n )}\\n`,\n );\n });\n\n config\n .command(\"use\")\n .description(\"Switch API target (local or cloud)\")\n .argument(\"[mode]\", \"local or cloud\")\n .action(async (mode?: string) => {\n const cliConfig = createCliConfig();\n\n if (!mode || mode === \"local\") {\n cliConfig.set(\"apiTarget\", \"local\");\n process.stdout.write(\"Using local keystroke server\\n\");\n return;\n }\n\n if (mode === \"cloud\") {\n cliConfig.set(\"apiTarget\", \"platform\");\n process.stdout.write(\"Using platform API\\n\");\n return;\n }\n\n throw new Error(\"Usage: keystroke config use [local|cloud]\");\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\n/** Leaf-to-root command names under `keystroke`, e.g. `[\"auth\", \"login\"]`. */\nexport function 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","import { existsSync, lstatSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { commandPath } from \"../command-path\";\nimport { resolveKeystrokeConfigRoot } from \"../project/resolve-keystroke-config-root\";\nimport { readCliVersion } from \"../version\";\nimport { agentsGuideDir, readBundleVersion } from \"./agents-guide-version\";\nimport { scaffoldAgentsGuide } from \"./scaffold-agents-guide\";\n\nfunction 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 return false;\n}\n\nfunction resolveAutoSyncRoot(command: Command): string | null {\n const opts = command.opts<{ dir?: string }>();\n return resolveKeystrokeConfigRoot(opts.dir ?? process.cwd());\n}\n\n/** Sync AGENTS.md when stale; no-op when not in a project or already up to date. */\nexport async function syncAgentsGuide(command: Command): Promise<void> {\n if (shouldSkipAutoSync(command)) {\n return;\n }\n\n const projectRoot = resolveAutoSyncRoot(command);\n if (!projectRoot) {\n return;\n }\n\n const agentsMdPath = join(projectRoot, \"AGENTS.md\");\n if (!existsSync(agentsMdPath)) {\n return;\n }\n\n if (lstatSync(agentsMdPath).isSymbolicLink()) {\n return;\n }\n\n const legacySkillsDir = join(agentsGuideDir(projectRoot), \"skills\");\n if (existsSync(legacySkillsDir) && lstatSync(legacySkillsDir).isSymbolicLink()) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const bundledVersion = await readBundleVersion(projectRoot);\n if (bundledVersion === currentVersion) {\n return;\n }\n\n try {\n await scaffoldAgentsGuide(projectRoot);\n process.stderr.write(`Synced AGENTS.md to ${currentVersion}\\n`);\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n process.stderr.write(`Failed to sync AGENTS.md (${detail}); continuing.\\n`);\n }\n}\n","import { Command } from \"commander\";\nimport { registerAgentsCommand } from \"./commands/agents\";\nimport { registerApiKeyCommand } from \"./commands/api-key\";\nimport { registerManagedServicesCommand } from \"./commands/managed-services\";\nimport { registerAppsCommand } from \"./commands/apps\";\nimport { registerTemplatesCommand } from \"./commands/templates\";\nimport { registerConnectCommand } from \"./commands/connect\";\nimport { registerCredentialsCommand } from \"./commands/credentials\";\nimport { registerAuthCommand } from \"./commands/auth\";\nimport { registerBuildCommand } from \"./commands/build\";\nimport { registerDeployCommand } from \"./commands/deploy\";\nimport { registerDevCommand } from \"./commands/dev\";\nimport { registerDocsCommand } from \"./commands/docs\";\nimport { registerFeedbackCommand } from \"./commands/feedback\";\nimport { registerHistoryCommand } from \"./commands/history\";\nimport { registerHealthCommand } from \"./commands/health\";\nimport { registerInitCommand } from \"./commands/init\";\nimport { registerLintCommand } from \"./commands/lint\";\nimport { registerTestCommand } from \"./commands/test\";\nimport { registerTypecheckCommand } from \"./commands/typecheck\";\nimport { registerOrganizationCommand } from \"./commands/organization\";\nimport { registerProjectsCommand } from \"./commands/projects\";\nimport { registerPullCommand } from \"./commands/pull\";\nimport { registerStartCommand } from \"./commands/start\";\nimport { registerTriggersCommand } from \"./commands/triggers\";\nimport { registerUpdateCommand } from \"./commands/update\";\nimport { registerWorkflowsCommand } from \"./commands/workflows\";\nimport { registerChannelsCommand } from \"./commands/channels\";\nimport { registerConfigCommand } from \"./commands/config\";\nimport { commandPath } from \"./command-path\";\nimport { syncAgentsGuide } from \"./skills/sync-agents-guide\";\nimport { initCliTelemetry, shutdownCliTelemetry, trackCliEvent } from \"./telemetry/init\";\nimport { readCliVersion } from \"./version\";\nimport { setCliTargetOptions } from \"./target-options\";\n\nconst commandStartTimes = new WeakMap<Command, number>();\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(\"--organization <slug>\", \"Platform organization slug (org-scoped API target)\")\n .option(\"--local\", \"Force local keystroke server URL\")\n .hook(\"preAction\", async (thisCommand, actionCommand) => {\n const opts = thisCommand.opts<{ project?: string; organization?: string; local?: boolean }>();\n setCliTargetOptions({\n projectId: opts.project,\n organizationRef: opts.organization,\n local: opts.local,\n });\n commandStartTimes.set(actionCommand, Date.now());\n await syncAgentsGuide(actionCommand);\n })\n .hook(\"postAction\", async (_thisCommand, actionCommand) => {\n const startedAt = commandStartTimes.get(actionCommand);\n const path = commandPath(actionCommand);\n if (path.length === 0) {\n return;\n }\n void trackCliEvent(\"cli:command_ran\", {\n properties: {\n command_path: path.join(\" \"),\n success: !process.exitCode,\n duration_ms: startedAt !== undefined ? Date.now() - startedAt : 0,\n },\n }).catch(() => {});\n });\n\n registerAuthCommand(program);\n registerConnectCommand(program);\n registerConfigCommand(program);\n registerOrganizationCommand(program);\n registerApiKeyCommand(program);\n registerManagedServicesCommand(program);\n registerProjectsCommand(program);\n registerHistoryCommand(program);\n registerCredentialsCommand(program);\n registerHealthCommand(program);\n registerDocsCommand(program);\n registerFeedbackCommand(program);\n registerInitCommand(program);\n registerBuildCommand(program);\n registerLintCommand(program);\n registerTypecheckCommand(program);\n registerTestCommand(program);\n registerDeployCommand(program);\n registerPullCommand(program);\n registerUpdateCommand(program);\n registerDevCommand(program);\n registerStartCommand(program);\n registerAgentsCommand(program);\n registerChannelsCommand(program);\n registerAppsCommand(program);\n registerTemplatesCommand(program);\n registerWorkflowsCommand(program);\n registerTriggersCommand(program);\n return program;\n}\n\nexport async function runCli(argv: string[]): Promise<void> {\n initCliTelemetry();\n try {\n const { maybeAutoUpdate } = await import(\"./update/maybe-auto-update\");\n await maybeAutoUpdate(argv);\n await createProgram().parseAsync(argv);\n } finally {\n await shutdownCliTelemetry();\n }\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"mappings":"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"}