@keystrokehq/cli 0.1.148 → 0.1.149

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program-CyirDIA2.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","sleepMs","collectValues","collectAppFieldValues","ACCOUNT_POLL_MS","ACCOUNT_WAIT_DEFAULT_MS","_exhaustive","collectValues","collectSetValues","collectValues","collectSetValues","detectPackageManager","installDeps","defaultConfirm","collectEmails","parseProjectRole","resolveTarget","resolveTarget","detectPackageManager"],"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/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/inspect-detail.ts","../src/commands/wait-timeout.ts","../src/commands/agents/wait-for-session.ts","../src/commands/agents/prompt.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/delete.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/commands/channels/resolve-channel-project.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/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/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/commands/build.ts","../src/deploy/assert-portable-dependencies.ts","../src/git/git-credential.ts","../src/git/run-git.ts","../src/git/managed-git-env.ts","../src/git/diff-commit-trees.ts","../src/deploy/analyze-filtered-plan.ts","../src/deploy/managed-preflight.ts","../src/git/compute-working-tree-diff.ts","../src/git/commit-working-tree.ts","../src/git/managed-transport.ts","../src/git/merge-managed-main.ts","../src/drafts/managed-draft.ts","../src/git/build-exact-candidate.ts","../src/git/compose-managed-candidate.ts","../src/git/inspect-checkout.ts","../src/commands/deploy-output.ts","../src/commands/deploy.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/tooling/resolve-configs-dir.ts","../src/tooling/run-tool.ts","../src/tooling/run-lint.ts","../src/commands/lint.ts","../src/commands/test.ts","../src/tooling/run-typecheck.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/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/wait-for-run.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/resolve-channel-agent.ts","../src/commands/channels/run-channel.ts","../src/commands/channels/platforms.ts","../src/commands/channels/reply-behavior.ts","../src/commands/channels/list.ts","../src/commands/channels/setup.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(workflowIdOrRunId, runIdOrQuery, query) {\n\t\t\ttry {\n\t\t\t\tif (runIdOrQuery === void 0 || typeof runIdOrQuery === \"object\" && runIdOrQuery !== null) {\n\t\t\t\t\tconst detailQuery = typeof runIdOrQuery === \"object\" && runIdOrQuery !== null ? runIdOrQuery : query;\n\t\t\t\t\tconst data = await http.get(`workflows/runs/${workflowIdOrRunId}`, { searchParams: detailSearchParams(detailQuery) }).json();\n\t\t\t\t\treturn WorkflowRunDetailResponseSchema.parse(data);\n\t\t\t\t}\n\t\t\t\tconst runId = runIdOrQuery;\n\t\t\t\tconst data = await http.get(`workflows/${workflowIdOrRunId}/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(workflowIdOrRunId, runId) {\n\t\t\ttry {\n\t\t\t\tconst path = runId === void 0 ? `workflows/runs/${workflowIdOrRunId}/hooks` : `workflows/${workflowIdOrRunId}/runs/${runId}/hooks`;\n\t\t\t\tconst data = await http.get(path).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, ActiveProjectSourceRevisionSchema, AgentSessionDetailResponseSchema, AgentSessionListResponseSchema, AgentSummaryDetailResponseSchema, AgentSummaryListResponseSchema, AgentTriggerSummaryListResponseSchema, AppSlugAvailabilityResponseSchema, AutoTopupSummarySchema, BillingActivityResponseSchema, BillingInvoiceUrlResponseSchema, BillingRedirectResponseSchema, BillingSummaryResponseSchema, BillingUsageResponseSchema, BindAgentSlackAppBodySchema, BindChannelBodySchema, CancelManagedDeployRequestSchema, CancelManagedDeployResponseSchema, CatalogActionDetailResponseSchema, CatalogActionsPageResponseSchema, CatalogAppDetailResponseSchema, CatalogAppsPageResponseSchema, ChannelAccountListResponseSchema, ChannelConnectionListResponseSchema, ChannelConnectionSchema, ChannelDirectoryListResponseSchema, CompleteManagedDeployArtifactRequestSchema, CompleteManagedDeployArtifactResponseSchema, CompleteProjectArtifactRequestSchema, CompleteProjectArtifactResponseSchema, ConfirmCheckoutRequestSchema, ConfirmCheckoutResponseSchema, ConnectAuthorizeUrlResponseSchema, ConnectManagedServiceCredentialRequestSchema, CreateApiKeyRequestSchema, CreateApiKeyResponseSchema, CreateBillingPortalRequestSchema, CreateCredentialsRequestSchema, CreateCredentialsResponseSchema, CreateCreditsCheckoutRequestSchema, CreateCustomAppRequestSchema, CreateCustomAppResponseSchema, CreateDraftCommitRequestSchema, CreateDraftDiffCommitRequestSchema, CreateOrganizationRequestSchema, CreateOrganizationResponseSchema, CreateProjectArtifactRequestSchema, CreateProjectArtifactResponseSchema, CreateProjectRequestSchema, CreateProjectResponseSchema, CreateSlackAppRequestSchema, CreateSlackAppResponseSchema, CreateSlackChannelBodySchema, CreateSlackChannelResponseSchema, CreateSubscriptionCheckoutRequestSchema, DEFAULT_ORGANIZATION_SIDEBAR_BRANDING, DEFAULT_USER_PREFERENCES, DeclineOrganizationInvitationResponseSchema, DownloadActiveProjectArtifactResponseSchema, DownloadActiveProjectSourceResponseSchema, DraftCommitResponseSchema, DraftConflictResponseSchema, DraftFileContentResponseSchema, DraftRevisionResponseSchema, DraftUpdateEventSchema, DuplicateCredentialRequestSchema, DuplicateCredentialsResponseSchema, ExecuteKeystrokeToolRequestSchema, FinalizeCustomAppLogoRequestSchema, FinalizeCustomAppLogoResponseSchema, GatewayAttachmentRecordSchema, GetAppCatalogEntryResponseSchema, GetCredentialResponseSchema, GetCustomAppResponseSchema, GetTemplateResponseSchema, GraphqlDiscoverResponseSchema, HealthResponseSchema, HeartbeatManagedDeployRequestSchema, HeartbeatManagedDeployResponseSchema, HistoryRunCancelResponseSchema, HistoryRunDetailResponseSchema, HistoryRunListQuerySchema, HistoryRunListResponseSchema, InviteOrganizationMembersRequestSchema, InviteOrganizationMembersResponseSchema, InviteProjectMembersRequestSchema, InviteProjectMembersResponseSchema, ListAgentMemoryFilesResponseSchema, ListAgentWorkspaceFilesResponseSchema, ListApiKeysResponseSchema, ListAppsResponseSchema, ListChannelPlatformsResponseSchema, ListCredentialsPageQuerySchema, ListCredentialsPageResponseSchema, ListDraftFilesResponseSchema, ListManagedServiceCredentialsResponseSchema, ListMcpAppToolsResponseSchema, ListOrganizationInvitationsResponseSchema, ListOrganizationMembersPageQuerySchema, ListOrganizationMembersPageResponseSchema, ListOrganizationsResponseSchema, ListProjectDeploymentsResponseSchema, ListProjectFilesResponseSchema, ListProjectMembersResponseSchema, ListProjectMetricsResponseSchema, ListProjectsResponseSchema, ListTemplatesResponseSchema, MANAGED_DEPLOY_REQUEST_TIMEOUT_MS, ManagedServiceCredentialSchema, McpDiscoverResponseSchema, OpenApiDiscoverResponseSchema, OrganizationSidebarBrandingPatchSchema, OrganizationSidebarBrandingSchema, PROJECT_DRAFT_COMMIT_REQUEST_TIMEOUT_MS, PROJECT_REACHABILITY_REQUEST_TIMEOUT_MS, PlatformAgentCancelResponseSchema, PlatformAgentPromptInputSchema, PlatformAgentPromptResponseSchema, PlatformAgentSessionDetailResponseSchema, PlatformAgentSessionListResponseSchema, PrepareManagedDeployRequestSchema, PrepareManagedDeployResponseSchema, PresignChatAttachmentRequestSchema, PresignChatAttachmentResponseSchema, PresignCustomAppLogoRequestSchema, PresignCustomAppLogoResponseSchema, PresignOrgLogoRequestSchema, PresignOrgLogoResponseSchema, PresignProjectSourceRequestSchema, PresignProjectSourceResponseSchema, PresignUserAvatarRequestSchema, PresignUserAvatarResponseSchema, ProjectGitRemoteRequestSchema, ProjectGitRemoteResponseSchema, ProjectGitStatusResponseSchema, ProjectReachabilityResponseSchema, ProjectResponseSchema, ProjectSettingsResponseSchema, ProjectSlugAvailabilityResponseSchema, PromptInputSchema, PublicFormMetadataSchema, PublicFormSubmitBodySchema, PublicFormSubmitResponseSchema, PublishManagedDeployCandidateRequestSchema, PublishManagedDeployCandidateResponseSchema, PublishedFormListResponseSchema, PublishedFormSchema, QueuedAgentPromptResponseSchema, RecentResourceListResponseSchema, RenewManagedDeployUploadRequestSchema, RenewManagedDeployUploadResponseSchema, SkillSummaryDetailResponseSchema, SkillSummaryListResponseSchema, SlackAgentMembershipsResponseSchema, SlackAppInstallStartResponseSchema, SlackAppListResponseSchema, SlackAppManifestRequestSchema, SlackAppManifestResponseSchema, SlackMembershipChannelBodySchema, 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, parsePlatformAgentAttachmentServePath } 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, input) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts`, { ...input ? { json: CreateProjectArtifactRequestSchema.parse(input) } : {} }).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, body = {}) {\n\t\t\tconst json = CompleteProjectArtifactRequestSchema.parse(body);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/artifacts/${encodeURIComponent(artifactId)}/complete`, { json }).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/**\n\t\t* Metadata for the active published source revision (Git commit or legacy snapshot).\n\t\t* Contains no credentials — mint a remote separately when pulling Git.\n\t\t*/\n\t\tasync getActiveSourceRevision(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/artifacts/active/source/revision`).json();\n\t\t\t\treturn ActiveProjectSourceRevisionSchema.parse(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/project-draft.ts\nvar DraftConflictError = class extends PlatformError {\n\tcurrentHeadSha;\n\tconstructor(message, status, body, currentHeadSha) {\n\t\tsuper(message, status, body, void 0);\n\t\tthis.name = \"DraftConflictError\";\n\t\tthis.currentHeadSha = currentHeadSha;\n\t}\n};\n/** Terminal auth failure — subscribers must not reconnect. */\nvar DraftEventsAuthError = class extends Error {\n\tstatus;\n\tconstructor(status, message) {\n\t\tsuper(message);\n\t\tthis.name = \"DraftEventsAuthError\";\n\t\tthis.status = status;\n\t}\n};\nasync function toDraftError(error) {\n\tconst platformError = await toPlatformError(error);\n\tif (platformError.status !== 409) return platformError;\n\tconst parsed = DraftConflictResponseSchema.safeParse(platformError.body);\n\tif (!parsed.success) return platformError;\n\treturn new DraftConflictError(parsed.data.error, 409, platformError.body, parsed.data.currentHeadSha);\n}\nfunction normalizeBase$1(baseUrl) {\n\tif (!baseUrl) return \"\";\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\nfunction draftEventsUrl(baseUrl, projectId) {\n\tconst base = normalizeBase$1(baseUrl);\n\tconst path = `api/projects/${encodeURIComponent(projectId)}/draft/events`;\n\treturn base === \"\" ? `/${path}` : `${base}/${path}`;\n}\nfunction defaultDelay$1(ms, signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal.aborted) {\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\treturn;\n\t\t}\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\nfunction isAbortError$1(error) {\n\treturn error instanceof DOMException && error.name === \"AbortError\" || error instanceof Error && error.name === \"AbortError\";\n}\nfunction computeBackoffMs$1(attempt, initialBackoffMs, maxBackoffMs, random) {\n\tconst jitter = Math.min(maxBackoffMs, initialBackoffMs * 2 ** Math.max(0, attempt)) * (.5 + random() * .5);\n\treturn Math.min(maxBackoffMs, Math.floor(jitter));\n}\n/**\n* Subscribe to transient draft tip SSE for a project. No replay — only live\n* updates after connect. Reconnects after clean EOF and transient failures with\n* bounded exponential backoff. Returns an unsubscribe function.\n*/\nasync function subscribeProjectDraftUpdates(projectId, options) {\n\tconst fetchImpl = options.fetch ?? globalThis.fetch;\n\tconst delay = options.delay ?? defaultDelay$1;\n\tconst initialBackoffMs = options.initialBackoffMs ?? 500;\n\tconst maxBackoffMs = options.maxBackoffMs ?? 15e3;\n\tconst random = options.random ?? Math.random;\n\tconst controller = new AbortController();\n\tconst onOuterAbort = () => {\n\t\tcontroller.abort();\n\t};\n\toptions.signal?.addEventListener(\"abort\", onOuterAbort, { once: true });\n\tif (options.signal?.aborted) controller.abort();\n\tlet stopped = false;\n\tconst stop = () => {\n\t\tif (stopped) return;\n\t\tstopped = true;\n\t\toptions.signal?.removeEventListener(\"abort\", onOuterAbort);\n\t\tcontroller.abort();\n\t};\n\t(async () => {\n\t\tlet attempt = 0;\n\t\twhile (!stopped && !controller.signal.aborted) {\n\t\t\tconst url = draftEventsUrl(options.baseUrl, projectId);\n\t\t\ttry {\n\t\t\t\tconst headers = { Accept: \"text/event-stream\" };\n\t\t\t\tconst token = await options.getToken?.();\n\t\t\t\tif (token) headers.Authorization = `Bearer ${token}`;\n\t\t\t\tconst orgId = options.getActiveOrganizationId?.();\n\t\t\t\tif (orgId) headers[ACTIVE_ORG_HEADER] = orgId;\n\t\t\t\tconst response = await fetchImpl(url, {\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\theaders,\n\t\t\t\t\tcredentials: \"omit\",\n\t\t\t\t\tsignal: controller.signal\n\t\t\t\t});\n\t\t\t\tif (response.status === 401 || response.status === 403) throw new DraftEventsAuthError(response.status, await response.text() || `Draft events unauthorized (${response.status})`);\n\t\t\t\tif (!response.ok) throw new Error(await response.text() || `Draft events failed (${response.status})`);\n\t\t\t\tif (!response.body) throw new Error(\"Draft events response body is empty\");\n\t\t\t\tattempt = 0;\n\t\t\t\tconst reader = response.body.getReader();\n\t\t\t\tconst decoder = new TextDecoder();\n\t\t\t\tlet buffer = \"\";\n\t\t\t\tconst flush = (chunk) => {\n\t\t\t\t\tbuffer += chunk;\n\t\t\t\t\tconst parts = buffer.split(\"\\n\\n\");\n\t\t\t\t\tbuffer = parts.pop() ?? \"\";\n\t\t\t\t\tfor (const part of parts) {\n\t\t\t\t\t\tconst dataLines = part.split(\"\\n\").filter((line) => line.startsWith(\"data:\")).map((line) => line.slice(5).trimStart());\n\t\t\t\t\t\tif (dataLines.length === 0) continue;\n\t\t\t\t\t\tconst payload = dataLines.join(\"\\n\");\n\t\t\t\t\t\tif (payload === \"[DONE]\") continue;\n\t\t\t\t\t\tlet json;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tjson = JSON.parse(payload);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst parsed = DraftUpdateEventSchema.safeParse(json);\n\t\t\t\t\t\tif (parsed.success) options.onUpdate(parsed.data);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\t\tif (value) flush(decoder.decode(value, { stream: !done }));\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tflush(decoder.decode());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (stopped || controller.signal.aborted || isAbortError$1(error)) return;\n\t\t\t\tif (error instanceof DraftEventsAuthError) {\n\t\t\t\t\toptions.onError?.(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\toptions.onError?.(error);\n\t\t\t}\n\t\t\tif (stopped || controller.signal.aborted) return;\n\t\t\tconst waitMs = computeBackoffMs$1(attempt, initialBackoffMs, maxBackoffMs, random);\n\t\t\tattempt += 1;\n\t\t\ttry {\n\t\t\t\tawait delay(waitMs, controller.signal);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t})();\n\treturn stop;\n}\nfunction createProjectDraftResource(http, streamAuth) {\n\treturn {\n\t\tasync getRevision(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/draft/revision`).json();\n\t\t\t\treturn DraftRevisionResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toDraftError(error);\n\t\t\t}\n\t\t},\n\t\tasync listFiles(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/draft/files`).json();\n\t\t\t\treturn ListDraftFilesResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toDraftError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Read a draft file. Pass `commitSha` from a prior list/revision to pin the\n\t\t* immutable tree; omit it to read the current tip.\n\t\t*/\n\t\tasync getContent(projectId, path, options = {}) {\n\t\t\tconst searchParams = { path };\n\t\t\tif (options.commitSha) searchParams.commitSha = options.commitSha;\n\t\t\ttry {\n\t\t\t\tconst response = await http.get(`/api/projects/${encodeURIComponent(projectId)}/draft/files/content`, { searchParams });\n\t\t\t\tconst content = await response.text();\n\t\t\t\tconst commitSha = response.headers.get(\"x-keystroke-draft-commit-sha\") ?? options.commitSha ?? \"\";\n\t\t\t\treturn DraftFileContentResponseSchema.parse({\n\t\t\t\t\tcontent,\n\t\t\t\t\tcommitSha\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toDraftError(error);\n\t\t\t}\n\t\t},\n\t\tasync commit(projectId, request) {\n\t\t\tconst body = CreateDraftCommitRequestSchema.parse(request);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/draft/commits`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: PROJECT_DRAFT_COMMIT_REQUEST_TIMEOUT_MS\n\t\t\t\t}).json();\n\t\t\t\treturn DraftCommitResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toDraftError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Commit a `git diff --binary` patch against `ks/draft`. Used by\n\t\t* Used by `keystroke deploy` (upload before plan) and trusted workers.\n\t\t*/\n\t\tasync commitFromDiff(projectId, request) {\n\t\t\tconst body = CreateDraftDiffCommitRequestSchema.parse(request);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/draft/commits/from-diff`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: PROJECT_DRAFT_COMMIT_REQUEST_TIMEOUT_MS\n\t\t\t\t}).json();\n\t\t\t\treturn DraftCommitResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toDraftError(error);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t* Live draft tip updates via SSE using the platform client's base URL,\n\t\t* bearer token, and active organization — same auth as other resources.\n\t\t*/\n\t\tsubscribeUpdates(projectId, options) {\n\t\t\tif (!streamAuth) throw new Error(\"projectDraft.subscribeUpdates requires a platform client with stream auth\");\n\t\t\treturn subscribeProjectDraftUpdates(projectId, {\n\t\t\t\t...options,\n\t\t\t\tbaseUrl: streamAuth.baseUrl,\n\t\t\t\tgetToken: streamAuth.getToken,\n\t\t\t\tgetActiveOrganizationId: streamAuth.getActiveOrganizationId,\n\t\t\t\tfetch: streamAuth.fetch\n\t\t\t});\n\t\t}\n\t};\n}\n//#endregion\n//#region src/platform/platform-agent-stream.ts\n/** Terminal auth failure — subscribers must not reconnect. */\nvar PlatformAgentStreamAuthError = class extends Error {\n\tstatus;\n\tconstructor(status, message) {\n\t\tsuper(message);\n\t\tthis.name = \"PlatformAgentStreamAuthError\";\n\t\tthis.status = status;\n\t}\n};\nfunction normalizeBase(baseUrl) {\n\tif (!baseUrl) return \"\";\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\nfunction platformAgentRunStreamUrl(baseUrl, runId, sessionId, startIndex) {\n\tconst base = normalizeBase(baseUrl);\n\tconst path = `api/platform-agent/runs/${encodeURIComponent(runId)}/stream?sessionId=${encodeURIComponent(sessionId)}&startIndex=${encodeURIComponent(String(startIndex))}`;\n\treturn base === \"\" ? `/${path}` : `${base}/${path}`;\n}\nfunction platformAgentSessionStreamUrl(baseUrl, sessionId, startIndex) {\n\tconst base = normalizeBase(baseUrl);\n\tconst path = `api/platform-agent/sessions/${encodeURIComponent(sessionId)}/stream?startIndex=${encodeURIComponent(String(startIndex))}`;\n\treturn base === \"\" ? `/${path}` : `${base}/${path}`;\n}\nfunction defaultDelay(ms, signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal.aborted) {\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\treturn;\n\t\t}\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t};\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\nfunction isAbortError(error) {\n\treturn error instanceof DOMException && error.name === \"AbortError\" || error instanceof Error && error.name === \"AbortError\";\n}\nfunction computeBackoffMs(attempt, initialBackoffMs, maxBackoffMs, random) {\n\tconst jitter = Math.min(maxBackoffMs, initialBackoffMs * 2 ** Math.max(0, attempt)) * (.5 + random() * .5);\n\treturn Math.min(maxBackoffMs, Math.floor(jitter));\n}\nasync function authHeaders(accept, options) {\n\tconst headers = { Accept: accept };\n\tconst token = await options.getToken?.();\n\tif (token) headers.Authorization = `Bearer ${token}`;\n\tconst orgId = options.getActiveOrganizationId?.();\n\tif (orgId) headers[ACTIVE_ORG_HEADER] = orgId;\n\treturn headers;\n}\nfunction resolveStreamUrl(options, startIndex) {\n\tif (options.runId) return platformAgentRunStreamUrl(options.baseUrl, options.runId, options.sessionId, startIndex);\n\treturn platformAgentSessionStreamUrl(options.baseUrl, options.sessionId, startIndex);\n}\n/**\n* Read one SSE response body, enqueue UIMessage chunks, and advance `nextIndex`\n* for each delivered data event (so reconnects resume without duplicates).\n*/\nasync function readSseBody(options) {\n\tconst reader = options.body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\tlet nextIndex = options.startIndex;\n\tlet sawDone = false;\n\tconst flush = async (text) => {\n\t\tbuffer += text;\n\t\tconst parts = buffer.split(\"\\n\\n\");\n\t\tbuffer = parts.pop() ?? \"\";\n\t\tfor (const part of parts) {\n\t\t\tconst dataLines = part.split(\"\\n\").filter((line) => line.startsWith(\"data:\")).map((line) => line.slice(5).trimStart());\n\t\t\tif (dataLines.length === 0) continue;\n\t\t\tconst payload = dataLines.join(\"\\n\");\n\t\t\tif (payload === \"[DONE]\") {\n\t\t\t\tsawDone = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet chunk;\n\t\t\ttry {\n\t\t\t\tchunk = JSON.parse(payload);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tawait options.enqueue(chunk);\n\t\t\tnextIndex += 1;\n\t\t}\n\t};\n\ttry {\n\t\tfor (;;) {\n\t\t\tif (options.signal?.aborted) throw new DOMException(\"Aborted\", \"AbortError\");\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (value) await flush(decoder.decode(value, { stream: !done }));\n\t\t\tif (done) {\n\t\t\t\tawait flush(decoder.decode());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (isAbortError(error) || options.signal?.aborted) throw error;\n\t\treturn {\n\t\t\tkind: \"error\",\n\t\t\terror,\n\t\t\tnextIndex\n\t\t};\n\t} finally {\n\t\tif (options.signal?.aborted) await reader.cancel(options.signal.reason).catch(() => void 0);\n\t\treader.releaseLock();\n\t}\n\tif (sawDone) return { kind: \"done\" };\n\treturn {\n\t\tkind: \"eof\",\n\t\tnextIndex\n\t};\n}\n/**\n* Open a resumable platform-agent UIMessage SSE stream.\n*\n* Reconnects after clean EOF and transient failures with bounded exponential\n* backoff, resuming from the last delivered event index. Stops on `[DONE]`,\n* idle `204`, abort, or terminal auth errors.\n*/\nfunction openPlatformAgentUiMessageStream(options) {\n\tconst fetchImpl = options.fetch ?? globalThis.fetch;\n\tconst delay = options.delay ?? defaultDelay;\n\tconst initialBackoffMs = options.initialBackoffMs ?? 500;\n\tconst maxBackoffMs = options.maxBackoffMs ?? 15e3;\n\tconst random = options.random ?? Math.random;\n\tlet nextIndex = Math.max(0, Math.trunc(options.startIndex ?? 0));\n\tlet attempt = 0;\n\tlet stopped = false;\n\tlet demand = 0;\n\tlet releaseDemand;\n\tconst streamAbort = new AbortController();\n\tconst waitForDemand = async () => {\n\t\tif (demand > 0) {\n\t\t\tdemand -= 1;\n\t\t\treturn;\n\t\t}\n\t\tawait new Promise((resolve) => {\n\t\t\treleaseDemand = resolve;\n\t\t});\n\t\treleaseDemand = void 0;\n\t\tif (stopped) throw new DOMException(\"Aborted\", \"AbortError\");\n\t};\n\tconst provideDemand = () => {\n\t\tif (releaseDemand) {\n\t\t\treleaseDemand();\n\t\t\treturn;\n\t\t}\n\t\tdemand += 1;\n\t};\n\treturn new ReadableStream({\n\t\tstart(controller) {\n\t\t\tconst onAbort = () => {\n\t\t\t\tstopped = true;\n\t\t\t\tstreamAbort.abort(options.signal?.reason);\n\t\t\t\treleaseDemand?.();\n\t\t\t};\n\t\t\toptions.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\tif (options.signal?.aborted) {\n\t\t\t\tonAbort();\n\t\t\t\tcontroller.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\twhile (!stopped && !streamAbort.signal.aborted) {\n\t\t\t\t\t\tconst url = resolveStreamUrl(options, nextIndex);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst response = await fetchImpl(url, {\n\t\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t\t\theaders: await authHeaders(\"text/event-stream\", options),\n\t\t\t\t\t\t\t\tcredentials: \"omit\",\n\t\t\t\t\t\t\t\tsignal: streamAbort.signal\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (response.status === 204) {\n\t\t\t\t\t\t\t\toptions.onIdle?.();\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (response.status === 401 || response.status === 403) throw new PlatformAgentStreamAuthError(response.status, await response.text() || `Platform-agent stream unauthorized (${response.status})`);\n\t\t\t\t\t\t\tif (!response.ok) throw new Error(await response.text() || `Platform-agent stream failed (${response.status})`);\n\t\t\t\t\t\t\tif (!response.body) throw new Error(\"Platform-agent stream response body is empty\");\n\t\t\t\t\t\t\tconst runId = response.headers.get(\"x-workflow-run-id\");\n\t\t\t\t\t\t\tif (runId) options.onRunId?.(runId);\n\t\t\t\t\t\t\tattempt = 0;\n\t\t\t\t\t\t\tconst result = await readSseBody({\n\t\t\t\t\t\t\t\tbody: response.body,\n\t\t\t\t\t\t\t\tstartIndex: nextIndex,\n\t\t\t\t\t\t\t\tsignal: streamAbort.signal,\n\t\t\t\t\t\t\t\tenqueue: async (chunk) => {\n\t\t\t\t\t\t\t\t\tawait waitForDemand();\n\t\t\t\t\t\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (result.kind === \"done\" || result.kind === \"idle\") {\n\t\t\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnextIndex = result.nextIndex;\n\t\t\t\t\t\t\tif (result.kind === \"error\") {}\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tif (stopped || streamAbort.signal.aborted || isAbortError(error)) return;\n\t\t\t\t\t\t\tif (error instanceof PlatformAgentStreamAuthError) {\n\t\t\t\t\t\t\t\tcontroller.error(error);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (stopped || streamAbort.signal.aborted) return;\n\t\t\t\t\t\tconst waitMs = computeBackoffMs(attempt, initialBackoffMs, maxBackoffMs, random);\n\t\t\t\t\t\tattempt += 1;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait delay(waitMs, streamAbort.signal);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\toptions.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t})();\n\t\t},\n\t\tpull() {\n\t\t\tprovideDemand();\n\t\t},\n\t\tcancel() {\n\t\t\tstopped = true;\n\t\t\tstreamAbort.abort();\n\t\t\treleaseDemand?.();\n\t\t}\n\t});\n}\n/**\n* Callback-style subscribe over {@link openPlatformAgentUiMessageStream}.\n* Returns an unsubscribe / abort function.\n*/\nasync function subscribePlatformAgentStream(options) {\n\tconst controller = new AbortController();\n\tconst onOuterAbort = () => {\n\t\tcontroller.abort();\n\t};\n\toptions.signal?.addEventListener(\"abort\", onOuterAbort, { once: true });\n\tif (options.signal?.aborted) controller.abort();\n\tlet stopped = false;\n\tconst stop = () => {\n\t\tif (stopped) return;\n\t\tstopped = true;\n\t\toptions.signal?.removeEventListener(\"abort\", onOuterAbort);\n\t\tcontroller.abort();\n\t};\n\tlet index = Math.max(0, Math.trunc(options.startIndex ?? 0));\n\tconst stream = openPlatformAgentUiMessageStream({\n\t\t...options,\n\t\tstartIndex: index,\n\t\tsignal: controller.signal\n\t});\n\t(async () => {\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) {\n\t\t\t\t\tif (!stopped) options.onDone?.();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\toptions.onChunk(value, index);\n\t\t\t\tindex += 1;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (stopped || controller.signal.aborted || isAbortError(error)) return;\n\t\t\toptions.onError?.(error);\n\t\t} finally {\n\t\t\treader.releaseLock();\n\t\t\toptions.signal?.removeEventListener(\"abort\", onOuterAbort);\n\t\t}\n\t})();\n\treturn stop;\n}\n//#endregion\n//#region src/platform/resources/platform-agent.ts\n/**\n* Organization-scoped platform-agent client.\n*\n* Routes under `/api/platform-agent/…`. Streaming uses the same bearer token /\n* base URL / organization headers as authenticated draft SSE.\n*/\nfunction createPlatformAgentResource(http, options) {\n\tconst streamAuth = options?.streamAuth;\n\treturn {\n\t\tasync listSessions() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/platform-agent/sessions\").json();\n\t\t\t\treturn PlatformAgentSessionListResponseSchema.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 getSession(sessionId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/platform-agent/sessions/${encodeURIComponent(sessionId)}`).json();\n\t\t\t\treturn PlatformAgentSessionDetailResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync prompt(input) {\n\t\t\ttry {\n\t\t\t\tconst body = PlatformAgentPromptInputSchema.parse(input);\n\t\t\t\tconst data = await http.post(\"/api/platform-agent/prompt\", { json: body }).json();\n\t\t\t\treturn PlatformAgentPromptResponseSchema.parse(data);\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 data = await http.post(`/api/platform-agent/sessions/${encodeURIComponent(sessionId)}/cancel`).json();\n\t\t\t\treturn PlatformAgentCancelResponseSchema.parse(data);\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(input) {\n\t\t\ttry {\n\t\t\t\tconst request = PresignChatAttachmentRequestSchema.parse(input);\n\t\t\t\tconst data = await http.post(\"/api/platform-agent/attachments/presign\", { json: {\n\t\t\t\t\t...request,\n\t\t\t\t\tprojectId: input.projectId\n\t\t\t\t} }).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/**\n\t\t* Live UIMessage SSE for a run or session. Requires stream auth from the\n\t\t* platform client (bearer + org). Reconnects with `startIndex` resume.\n\t\t*/\n\t\tsubscribeStream(options) {\n\t\t\tif (!streamAuth) return Promise.reject(/* @__PURE__ */ new Error(\"platformAgent.subscribeStream requires a platform client with stream auth\"));\n\t\t\tif (!options.sessionId) return Promise.reject(/* @__PURE__ */ new Error(\"platformAgent.subscribeStream requires sessionId\"));\n\t\t\treturn subscribePlatformAgentStream({\n\t\t\t\t...options,\n\t\t\t\tbaseUrl: streamAuth.baseUrl,\n\t\t\t\tgetToken: streamAuth.getToken,\n\t\t\t\tgetActiveOrganizationId: streamAuth.getActiveOrganizationId,\n\t\t\t\tfetch: streamAuth.fetch\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/project-git.ts\nfunction createProjectGitResource(http) {\n\treturn {\n\t\tasync getStatus(projectId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/projects/${encodeURIComponent(projectId)}/git`).json();\n\t\t\t\treturn ProjectGitStatusResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync getRemote(projectId, options = {}) {\n\t\t\tconst body = ProjectGitRemoteRequestSchema.parse(options);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/git/remote`, { json: body }).json();\n\t\t\t\treturn ProjectGitRemoteResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync prepareDeploy(projectId, input, options = {}) {\n\t\t\tconst body = PrepareManagedDeployRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/deploy/prepare`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: MANAGED_DEPLOY_REQUEST_TIMEOUT_MS,\n\t\t\t\t\tsignal: options.signal\n\t\t\t\t}).json();\n\t\t\t\treturn PrepareManagedDeployResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync publishDeployCandidate(projectId, input, options = {}) {\n\t\t\tconst body = PublishManagedDeployCandidateRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/deploy/candidate`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: MANAGED_DEPLOY_REQUEST_TIMEOUT_MS,\n\t\t\t\t\tsignal: options.signal\n\t\t\t\t}).json();\n\t\t\t\treturn PublishManagedDeployCandidateResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync renewDeployUpload(projectId, input, options = {}) {\n\t\t\tconst body = RenewManagedDeployUploadRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/deploy/artifacts/${encodeURIComponent(body.artifactId)}/upload`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: MANAGED_DEPLOY_REQUEST_TIMEOUT_MS,\n\t\t\t\t\tsignal: options.signal\n\t\t\t\t}).json();\n\t\t\t\treturn RenewManagedDeployUploadResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync heartbeatDeploy(projectId, input, options = {}) {\n\t\t\tconst body = HeartbeatManagedDeployRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/deploy/artifacts/${encodeURIComponent(body.artifactId)}/heartbeat`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: MANAGED_DEPLOY_REQUEST_TIMEOUT_MS,\n\t\t\t\t\tsignal: options.signal\n\t\t\t\t}).json();\n\t\t\t\treturn HeartbeatManagedDeployResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync completeDeployArtifact(projectId, input, options = {}) {\n\t\t\tconst body = CompleteManagedDeployArtifactRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/deploy/artifacts/${encodeURIComponent(body.artifactId)}/complete`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: MANAGED_DEPLOY_REQUEST_TIMEOUT_MS,\n\t\t\t\t\tsignal: options.signal\n\t\t\t\t}).json();\n\t\t\t\treturn CompleteManagedDeployArtifactResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync cancelDeploy(projectId, input, options = {}) {\n\t\t\tconst body = CancelManagedDeployRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`/api/projects/${encodeURIComponent(projectId)}/deploy/artifacts/${encodeURIComponent(body.artifactId)}/cancel`, {\n\t\t\t\t\tjson: body,\n\t\t\t\t\ttimeout: MANAGED_DEPLOY_REQUEST_TIMEOUT_MS,\n\t\t\t\t\tsignal: options.signal\n\t\t\t\t}).json();\n\t\t\t\treturn CancelManagedDeployResponseSchema.parse(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/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 delete(slug) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/apps/${encodeURIComponent(slug)}`);\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\t/** Live MCP `tools/list` for a connected custom org MCP app. */\n\t\tasync listMcpTools(slug, options) {\n\t\t\ttry {\n\t\t\t\tconst query = catalogSearchParams({\n\t\t\t\t\tcredential: options?.credential,\n\t\t\t\t\tprojectId: options?.projectId\n\t\t\t\t}).toString();\n\t\t\t\tconst path = `/api/apps/${encodeURIComponent(slug)}/mcp/tools${query ? `?${query}` : \"\"}`;\n\t\t\t\tconst data = await http.get(path).json();\n\t\t\t\treturn ListMcpAppToolsResponseSchema.parse(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 createChannel(projectId, input) {\n\t\t\tconst body = CreateSlackChannelBodySchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`${projectPrefix(projectId)}/channels/slack/channels`, { json: body }).json();\n\t\t\t\treturn CreateSlackChannelResponseSchema.parse(data);\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 bindApp(projectId, input) {\n\t\t\tconst body = BindAgentSlackAppBodySchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(`${projectPrefix(projectId)}/agents/${encodeURIComponent(input.agentId)}/channels/apps`, { 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\tasync listMemberships(projectId, agentId) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`${projectPrefix(projectId)}/agents/${encodeURIComponent(agentId)}/channels/memberships`).json();\n\t\t\t\treturn SlackAgentMembershipsResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync joinMembership(projectId, input) {\n\t\t\tconst body = SlackMembershipChannelBodySchema.parse({ channelId: input.channelId });\n\t\t\ttry {\n\t\t\t\tawait http.post(`${projectPrefix(projectId)}/agents/${encodeURIComponent(input.agentId)}/channels/memberships/join`, { json: body });\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync leaveMembership(projectId, input) {\n\t\t\tconst body = SlackMembershipChannelBodySchema.parse({ channelId: input.channelId });\n\t\t\ttry {\n\t\t\t\tawait http.post(`${projectPrefix(projectId)}/agents/${encodeURIComponent(input.agentId)}/channels/memberships/leave`, { json: body });\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/slack-apps.ts\nfunction createSlackAppsResource(http) {\n\treturn {\n\t\tasync list() {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(\"/api/slack-apps\").json();\n\t\t\t\treturn SlackAppListResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync createManifest(input) {\n\t\t\tconst body = SlackAppManifestRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/slack-apps/manifest\", { json: body }).json();\n\t\t\t\treturn SlackAppManifestResponseSchema.parse(data);\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 = CreateSlackAppRequestSchema.parse(input);\n\t\t\ttry {\n\t\t\t\tconst data = await http.post(\"/api/slack-apps\", { json: body }).json();\n\t\t\t\treturn CreateSlackAppResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync install(slug, options) {\n\t\t\ttry {\n\t\t\t\tconst data = await http.get(`/api/slack-apps/${encodeURIComponent(slug)}/install`, { ...options?.projectId ? { searchParams: { projectId: options.projectId } } : {} }).json();\n\t\t\t\treturn SlackAppInstallStartResponseSchema.parse(data);\n\t\t\t} catch (error) {\n\t\t\t\tthrow await toPlatformError(error);\n\t\t\t}\n\t\t},\n\t\tasync remove(slug) {\n\t\t\ttry {\n\t\t\t\tawait http.delete(`/api/slack-apps/${encodeURIComponent(slug)}`);\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/platform-agent-chat-transport.ts\n/**\n* ChatTransport for the organization-scoped platform-agent:\n* - sendMessages → POST prompt (202) then resumable SSE with reconnect\n* - reconnectToStream → GET run/session stream from `startIndex` (`204` when idle)\n*\n* Auth matches authenticated draft SSE (bearer + org). No unauthenticated path.\n*/\nfunction createPlatformAgentChatTransport(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/platform-agent/prompt`;\n\t}\n\tfunction openStream(target, startIndex, signal) {\n\t\treturn openPlatformAgentUiMessageStream({\n\t\t\trunId: target.runId,\n\t\t\tsessionId: target.sessionId,\n\t\t\tstartIndex,\n\t\t\tsignal,\n\t\t\tbaseUrl: options.baseUrl,\n\t\t\tgetToken: options.getToken,\n\t\t\tgetActiveOrganizationId: options.getActiveOrganizationId,\n\t\t\tfetch: fetchImpl,\n\t\t\tdelay: options.delay,\n\t\t\tinitialBackoffMs: options.initialBackoffMs,\n\t\t\tmaxBackoffMs: options.maxBackoffMs,\n\t\t\trandom: options.random,\n\t\t\tonRunId: (runId) => {\n\t\t\t\toptions.setRunId?.(runId);\n\t\t\t},\n\t\t\tonIdle: () => {\n\t\t\t\toptions.setRunId?.(null);\n\t\t\t}\n\t\t});\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: parsePlatformAgentAttachmentServePath(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\tprojectId: options.getProjectId(),\n\t\t\t\t\tmodel: options.getModelId(),\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 platform-agent prompt\");\n\t\t\tconst queued = await response.json();\n\t\t\tif (!queued.sessionId || !queued.runId) throw new Error(\"Platform-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\treturn openStream({\n\t\t\t\trunId: queued.runId,\n\t\t\t\tsessionId: queued.sessionId\n\t\t\t}, 0, abortSignal);\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() ?? null;\n\t\t\t\tconst resolvedSessionId = options.getSessionId() ?? null ?? (chatId && chatId !== runId ? chatId : null);\n\t\t\t\tif (!resolvedSessionId) {\n\t\t\t\t\treconnectActive = false;\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (runId) return trackReconnect(openStream({\n\t\t\t\t\trunId,\n\t\t\t\t\tsessionId: resolvedSessionId\n\t\t\t\t}, index));\n\t\t\t\treturn trackReconnect(openStream({ sessionId: resolvedSessionId }, index));\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//#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\tconst platformAgent = createPlatformAgentResource(http, { streamAuth: {\n\t\tbaseUrl: base,\n\t\tgetToken: auth.type === \"bearer\" ? () => auth.getToken() : void 0,\n\t\tgetActiveOrganizationId: resolveActiveOrganizationId\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\tprojectGit: createProjectGitResource(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\tprojectDraft: createProjectDraftResource(http, {\n\t\t\tbaseUrl: base,\n\t\t\tgetToken: auth.type === \"bearer\" ? () => auth.getToken() : void 0,\n\t\t\tgetActiveOrganizationId: resolveActiveOrganizationId\n\t\t}),\n\t\tplatformAgent,\n\t\tprojectAgent: platformAgent,\n\t\tchannels: createChannelsResource(http),\n\t\tslackApps: createSlackAppsResource(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, DraftConflictError, DraftEventsAuthError, PlatformAgentStreamAuthError, PlatformError, browserAuthStrategy, createAgentChatTransport, createBrowserPlatformClient, createPlatformAgentChatTransport, createPlatformClient, mergeOrganizationSidebarBranding, mergeUserPreferences, normalizeBaseUrl, normalizeOrganizationSidebarBranding, normalizeUserPreferences, openPlatformAgentUiMessageStream, parseUiMessageSse, platformAgentRunStreamUrl, platformAgentSessionStreamUrl, readActiveOrganizationId, subscribePlatformAgentStream, subscribeProjectDraftUpdates, 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 type Conf from \"conf\";\n\nimport { getPlatformUrl, type CliConfig } from \"./config\";\nimport { loadProjectEnv } from \"./project/load-project-env\";\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 /** 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};\n\nfunction resolveOrgPlatformTarget(config: Conf<CliConfig>): ResolvedApiTarget {\n return {\n baseUrl: `${getPlatformUrl(config).replace(/\\/+$/, \"\")}/api`,\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 };\n}\n\n/** Resolve HTTP base URL from configured platformUrl (and optional project link). */\nexport async function resolveApiTarget(\n config: Conf<CliConfig>,\n options: ApiTargetOptions = {},\n): Promise<ResolvedApiTarget> {\n loadProjectEnv(process.cwd());\n\n if (options.orgScoped || options.projectScoped === false) {\n return resolveOrgPlatformTarget(config);\n }\n\n if (options.projectId) {\n return resolvePlatformTarget(config, options.projectId);\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\tif (options.captureExceptions === false) return;\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 the Keystroke Slack App with `keystroke connect slack --kind keystroke`.\",\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/** Customer deploy gates — quiet even if wrapped as PlatformError with status 500. */\nfunction isDeployGateFailureMessage(error: unknown): boolean {\n return error instanceof Error && /^(lint|typecheck|build) failed\\b/i.test(error.message);\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/build, 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 (isDeployGateFailureMessage(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 { createCliConfig, getPlatformUrl, getWebUrl } from \"../config\";\nimport { isExpectedCliError } from \"../errors/expected-cli-error\";\nimport { shouldReportCliException } from \"../errors/should-report-cli-exception\";\nimport { DEFAULT_PLATFORM_URL, DEFAULT_WEB_URL } from \"../resolve-platform-url\";\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\nlet enabled = false;\n/** Test-only override for prod-target gating. */\nlet exceptionTargetOverride: boolean | undefined;\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\n/** True when the URL origin is production web or API. */\nexport function isProductionCliEndpoint(url: string): boolean {\n try {\n const origin = new URL(url).origin;\n return origin === DEFAULT_PLATFORM_URL || origin === DEFAULT_WEB_URL;\n } catch {\n return false;\n }\n}\n\n/**\n * CLI Error Tracking only when pointed at production (`keystroke.ai` /\n * `api.keystroke.ai`). Product events still ship for all targets.\n */\nexport function shouldSendCliExceptions(): boolean {\n if (exceptionTargetOverride !== undefined) {\n return exceptionTargetOverride;\n }\n\n try {\n const config = createCliConfig();\n return (\n isProductionCliEndpoint(getPlatformUrl(config)) || isProductionCliEndpoint(getWebUrl(config))\n );\n } catch {\n return false;\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 (\n !enabled ||\n !shouldSendCliExceptions() ||\n isExpectedCliError(error) ||\n !shouldReportCliException(error, context)\n ) {\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(options?: { sendExceptions?: boolean }): void {\n enabled = true;\n exceptionTargetOverride = options?.sendExceptions ?? true;\n}\n\n/** Test helper. */\nexport function resetCliTelemetryForTests(): void {\n enabled = false;\n exceptionTargetOverride = undefined;\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 const membership = await resolveActiveOrganization(config);\n const organizationId = membership.organization.id;\n\n const ctx: CliContext = {\n config,\n client: createCliClient(config, {\n baseUrl: target.baseUrl,\n platform: true,\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 {\n AgentSessionDetailResponse,\n WorkflowRunChild,\n WorkflowRunChildDetail,\n WorkflowRunDetailResponse,\n} 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\"; include?: string }\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\nfunction isNestedChildDetail(child: WorkflowRunChild): child is WorkflowRunChildDetail {\n return \"run\" in child;\n}\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 (field && include !== undefined) {\n throw new Error(\"Do not combine --include with --field\");\n }\n if (summary) {\n return { kind: \"summary\", include };\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 if (mode.kind === \"summary\") {\n // Summary still needs children when requested so the projection can embed them.\n if (mode.include?.split(\",\").some((part) => part.trim() === \"children\")) {\n return mode.include.includes(\"none\") ? \"children\" : mode.include;\n }\n return \"none\";\n }\n return \"none\";\n}\n\nexport function writeInspectJson(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nfunction projectChildSummary(child: WorkflowRunChild): unknown {\n if (!isNestedChildDetail(child)) {\n return child;\n }\n return {\n id: child.run.id,\n status: child.run.status,\n input: child.run.input,\n output: child.run.output,\n error: child.run.error,\n children: child.children.map(projectChildSummary),\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 children?: unknown[];\n hooks?: WorkflowRunDetailResponse[\"hooks\"];\n} {\n const summary: {\n id: string;\n status: WorkflowRunDetailResponse[\"run\"][\"status\"];\n input: unknown;\n output: unknown;\n error: unknown;\n children?: unknown[];\n hooks?: WorkflowRunDetailResponse[\"hooks\"];\n } = {\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 if (detail.children.length > 0) {\n summary.children = detail.children.map(projectChildSummary);\n }\n\n if (detail.hooks.length > 0) {\n summary.hooks = detail.hooks;\n }\n\n return summary;\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","/** Shared `--timeout` parsing for CLI `--wait` flags. */\n\nexport const DEFAULT_WAIT_TIMEOUT_SECONDS = 60;\n\n/** Parse `--timeout <seconds>` into a positive integer. */\nexport function parseWaitTimeoutSeconds(\n value: string | undefined,\n fallback = DEFAULT_WAIT_TIMEOUT_SECONDS,\n): number {\n if (value === undefined || value.trim() === \"\") {\n return fallback;\n }\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`--timeout must be a positive integer (seconds); got ${value}`);\n }\n const parsed = Number(trimmed);\n if (!Number.isSafeInteger(parsed) || parsed < 1) {\n throw new Error(`--timeout must be a positive integer (seconds); got ${value}`);\n }\n return parsed;\n}\n","import type { createKeystrokeClient } from \"@keystrokehq/sdk\";\nimport type { AgentSessionDetailResponse } from \"@keystrokehq/shared\";\n\nimport { cliBinaryName } from \"../../errors\";\n\ntype KeystrokeClient = ReturnType<typeof createKeystrokeClient>;\n\n/** Terminal agent session statuses — `--wait` returns once the prompt is done. */\nexport const AGENT_SESSION_TERMINAL_STATUSES = new Set([\"completed\", \"failed\", \"canceled\"]);\n\n/** Agents often run longer than workflows — default wait is 120s (re-wait on timeout). */\nexport const DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS = 120;\nexport const DEFAULT_AGENT_WAIT_POLL_MS = 2_000;\n\nexport type WaitForAgentSessionOptions = {\n client: KeystrokeClient;\n agentId: string;\n sessionId: string;\n /**\n * When set (from `agents prompt --wait`), wait until this run is no longer\n * active — avoids false-complete on a prior completed session status.\n */\n runId?: string;\n /** Message count before a queued follow-up; zero for a new session. */\n initialMessageCount?: number;\n /** Fetch messages once after completion so callers can inspect the response. */\n includeMessagesOnComplete?: boolean;\n /** Max seconds to wait before returning the in-progress session (default 120). */\n timeoutSeconds?: number;\n /** Poll interval in ms (default 2000). */\n pollMs?: number;\n signal?: AbortSignal;\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n now?: () => number;\n};\n\nexport type WaitForAgentSessionResult = {\n detail: AgentSessionDetailResponse;\n timedOut: boolean;\n};\n\nfunction sleepMs(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason instanceof Error ? signal.reason : new Error(\"Aborted\"));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal?.reason instanceof Error ? signal.reason : new Error(\"Aborted\"));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction sessionIsInFlight(detail: AgentSessionDetailResponse, runId?: string): boolean {\n if (runId && detail.activeRunId === runId) {\n return true;\n }\n if (detail.session.status === \"running\") {\n return true;\n }\n if (!runId && detail.activeRunId !== null) {\n return true;\n }\n return false;\n}\n\nfunction sessionWaitComplete(\n detail: AgentSessionDetailResponse,\n options: { runId?: string; sawInFlight: boolean; initialMessageCount?: number },\n): boolean {\n if (sessionIsInFlight(detail, options.runId)) {\n return false;\n }\n if (options.runId) {\n // The run may finish before the first poll. A higher message count proves\n // that this prompt started even when its active-run pointer already cleared.\n const promptStarted =\n options.sawInFlight ||\n (options.initialMessageCount !== undefined &&\n detail.session.messageCount > options.initialMessageCount);\n return promptStarted && detail.activeRunId !== options.runId;\n }\n return AGENT_SESSION_TERMINAL_STATUSES.has(detail.session.status) || detail.activeRunId === null;\n}\n\n/**\n * Poll `agents.getSession` until the session is no longer in flight, or timeout.\n * On timeout, returns the latest detail with `timedOut: true` (exit 0 for the agent).\n */\nexport async function waitForAgentSession(\n options: WaitForAgentSessionOptions,\n): Promise<WaitForAgentSessionResult> {\n const timeoutSeconds = options.timeoutSeconds ?? DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS;\n const pollMs = options.pollMs ?? DEFAULT_AGENT_WAIT_POLL_MS;\n const sleep = options.sleep ?? sleepMs;\n const now = options.now ?? Date.now;\n const deadline = now() + timeoutSeconds * 1000;\n\n let detail = await options.client.agents.getSession(options.agentId, options.sessionId, {\n include: \"none\",\n });\n let sawInFlight = sessionIsInFlight(detail, options.runId);\n\n for (;;) {\n if (sessionIsInFlight(detail, options.runId)) {\n sawInFlight = true;\n }\n if (\n sessionWaitComplete(detail, {\n runId: options.runId,\n sawInFlight,\n initialMessageCount: options.initialMessageCount,\n })\n ) {\n if (options.includeMessagesOnComplete) {\n detail = await options.client.agents.getSession(options.agentId, options.sessionId, {\n include: \"messages\",\n });\n }\n return { detail, timedOut: false };\n }\n if (now() >= deadline || options.signal?.aborted) {\n return { detail, timedOut: true };\n }\n const remaining = deadline - now();\n await sleep(Math.min(pollMs, Math.max(0, remaining)), options.signal);\n detail = await options.client.agents.getSession(options.agentId, options.sessionId, {\n include: \"none\",\n });\n }\n}\n\n/** Stderr hint when `--wait` times out while the session is still active. */\nexport function agentSessionWaitTimeoutHint(agentId: string, sessionId: string): string {\n return (\n `Still running after --wait timeout. Re-check with:\\n` +\n ` ${cliBinaryName()} agents sessions get ${agentId} ${sessionId} --wait\\n`\n );\n}\n\n/**\n * Exit 0 for completed waits and in-progress timeouts (caller can re-wait).\n * Exit 1 for terminal failure / cancel so chat labels and scripts see a soft failure.\n */\nexport function applyAgentSessionWaitExitCode(input: { timedOut: boolean; status: string }): void {\n if (input.timedOut) {\n return;\n }\n if (input.status === \"failed\" || input.status === \"canceled\") {\n process.exitCode = 1;\n }\n}\n","import { isQueuedAgentPromptResponse } from \"@keystrokehq/sdk\";\nimport type { Command } from \"commander\";\n\nimport { cliBinaryName, runProjectCliCommand } from \"../../errors\";\nimport { projectAgentSessionSummary, writeInspectJson } from \"../inspect-detail\";\nimport { parseWaitTimeoutSeconds } from \"../wait-timeout\";\nimport {\n applyAgentSessionWaitExitCode,\n DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS,\n agentSessionWaitTimeoutHint,\n waitForAgentSession,\n} from \"./wait-for-session\";\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 .option(\"--wait\", \"Wait until the prompt finishes (or --timeout elapses)\")\n .option(\n \"--timeout <seconds>\",\n `Max seconds to wait with --wait (default ${DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS}); re-wait with agents sessions get --wait`,\n )\n .option(\"--summary\", \"With --wait, print a concise session JSON summary\")\n .addHelpText(\n \"after\",\n `\nExamples:\n ${cliBinaryName()} agents prompt support --message \"Hello\"\n ${cliBinaryName()} agents prompt support --message \"Hello\" --wait\n ${cliBinaryName()} agents prompt support --message \"Hello\" --wait --timeout 180 --summary\n`,\n )\n .action(\n (\n agentId: string,\n options: {\n message: string;\n sessionId?: string;\n wait?: boolean;\n timeout?: string;\n summary?: boolean;\n },\n ) =>\n runProjectCliCommand(\"Agent prompt failed\", async ({ client }) => {\n const initialMessageCount =\n options.wait && options.sessionId\n ? (\n await client.agents.getSession(agentId, options.sessionId, {\n include: \"none\",\n })\n ).session.messageCount\n : 0;\n const result = await client.agents.prompt(agentId, {\n message: options.message,\n ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n });\n\n if (!options.wait) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n if (isQueuedAgentPromptResponse(result)) {\n process.stderr.write(\n `Prompt queued. Wait for completion:\\n` +\n ` ${cliBinaryName()} agents sessions get ${agentId} ${result.sessionId} --wait\\n` +\n `Or track progress:\\n` +\n ` ${cliBinaryName()} agents sessions get ${agentId} ${result.sessionId} --summary\\n`,\n );\n } else if (result.error) {\n process.exitCode = 1;\n }\n return;\n }\n\n if (!isQueuedAgentPromptResponse(result)) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n if (result.error) {\n process.exitCode = 1;\n }\n return;\n }\n\n const timeoutSeconds = parseWaitTimeoutSeconds(\n options.timeout,\n DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS,\n );\n const waited = await waitForAgentSession({\n client,\n agentId,\n sessionId: result.sessionId,\n runId: result.runId,\n initialMessageCount,\n includeMessagesOnComplete: !options.summary,\n timeoutSeconds,\n });\n\n if (waited.timedOut) {\n process.stderr.write(agentSessionWaitTimeoutHint(agentId, result.sessionId));\n }\n applyAgentSessionWaitExitCode({\n timedOut: waited.timedOut,\n status: waited.detail.session.status,\n });\n\n if (options.summary) {\n writeInspectJson(projectAgentSessionSummary(waited.detail));\n return;\n }\n writeInspectJson(waited.detail);\n }),\n );\n}\n","import type Conf from \"conf\";\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport type { CreateProjectRequest, Project, UpdateProjectRequest } from \"@keystrokehq/shared\";\n\nimport type { CliConfig } from \"../../config\";\nimport { cliBinaryName } from \"../../errors/command-input\";\nimport { requireAdminRole } from \"../../organization/require-admin-role\";\nimport { 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 { parseWaitTimeoutSeconds } from \"../wait-timeout\";\nimport { runAgentSessionCancel } from \"./cancel-session\";\nimport {\n applyAgentSessionWaitExitCode,\n DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS,\n agentSessionWaitTimeoutHint,\n waitForAgentSession,\n} from \"./wait-for-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 .option(\"--wait\", \"Wait until the session finishes (or --timeout elapses)\")\n .option(\n \"--timeout <seconds>\",\n `Max seconds to wait with --wait (default ${DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS}); re-invoke --wait if still running`,\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n keystroke agents sessions get <agentSlug> <sessionId>\n keystroke agents sessions get <agentSlug> <sessionId> --summary\n keystroke agents sessions get <agentSlug> <sessionId> --wait --summary\n`,\n )\n .action(\n (\n agentId: string,\n sessionId: string,\n options: {\n include?: string;\n summary?: boolean;\n field?: string;\n wait?: boolean;\n timeout?: string;\n },\n ) =>\n runProjectCliCommand(\"Get agent session failed\", async ({ client }) => {\n if (options.wait && options.field) {\n throw new Error(\"Do not combine --wait with --field\");\n }\n\n if (options.wait) {\n const timeoutSeconds = parseWaitTimeoutSeconds(\n options.timeout,\n DEFAULT_AGENT_WAIT_TIMEOUT_SECONDS,\n );\n const waited = await waitForAgentSession({\n client,\n agentId,\n sessionId,\n timeoutSeconds,\n });\n if (waited.timedOut) {\n process.stderr.write(agentSessionWaitTimeoutHint(agentId, sessionId));\n }\n applyAgentSessionWaitExitCode({\n timedOut: waited.timedOut,\n status: waited.detail.session.status,\n });\n if (options.summary) {\n writeInspectJson(projectAgentSessionSummary(waited.detail));\n return;\n }\n if (options.include) {\n const mode = parseInspectDetailOptions({ include: options.include });\n const include = includeForInspectMode(mode);\n const result = await client.agents.getSession(agentId, sessionId, {\n ...(include !== undefined ? { include } : {}),\n });\n writeInspectJson(result);\n return;\n }\n writeInspectJson(waited.detail);\n return;\n }\n\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/** Hint after listing live tools on a connected custom MCP app. */\nexport function listMcpAppActionsHint(app: string): string {\n const bin = cliBinaryName();\n return (\n `\\nMCP tool registry (live tools/list).\\n` +\n ` Docs first: ${bin} docs search \"custom apps MCP\"\\n` +\n ` Inspect app: ${bin} apps get ${app}\\n` +\n ` Scaffold code: ${bin} apps sync ${app}\\n` +\n ` Author actions: defineApp({ slug: \"${app}\", ... }).action(...) for tools you need\\n` +\n ` Do not use defineMcp from @keystrokehq/keystroke/agent.\\n`\n );\n}\n\n/** Hint when MCP list fails because the app is not connected. */\nexport function listMcpAppConnectHint(app: string): string {\n const bin = cliBinaryName();\n return (\n `\\nConnect this MCP app, then re-list tools:\\n` +\n ` ${bin} docs search \"custom apps MCP\"\\n` +\n ` ${bin} connect ${app} --print-url\\n` +\n ` ${bin} apps actions list ${app}\\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 McpAppTool,\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 | {\n kind: \"mcp\";\n toolkit: string;\n url: string;\n items: McpAppTool[];\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\nconst MCP_CONNECT_HINT =\n \"Connect this MCP app first (`keystroke connect <slug> --print-url`), then re-run \" +\n \"`keystroke apps actions list <slug>`. Prefer `keystroke docs search` for Keystroke docs \" +\n \"before inventing integration code.\";\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: {\n slug?: string;\n search?: string;\n limit?: number;\n cursor?: string;\n credential?: string;\n projectId?: string;\n },\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 const app = await client.apps.get(parsed.slug);\n if (app.source === \"mcp\") {\n try {\n const listed = await client.apps.listMcpTools(parsed.slug, {\n credential: options.credential,\n projectId: options.projectId,\n });\n let items = listed.tools;\n if (search) {\n const needle = search.toLowerCase();\n items = items.filter(\n (tool) =>\n tool.name.toLowerCase().includes(needle) ||\n tool.description?.toLowerCase().includes(needle),\n );\n }\n if (options.limit !== undefined && options.limit > 0) {\n items = items.slice(0, options.limit);\n }\n return {\n kind: \"mcp\",\n toolkit: parsed.slug,\n url: listed.url,\n items,\n };\n } catch (error) {\n if (error instanceof PlatformError && (error.status === 409 || error.status === 502)) {\n return {\n kind: \"mcp\",\n toolkit: parsed.slug,\n url: app.url ?? \"\",\n items: [],\n message: error.message || MCP_CONNECT_HINT,\n };\n }\n throw error;\n }\n }\n\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 { resolveActiveProjectId } from \"../../resolve-project-target\";\nimport { createCliPlatformClient } from \"../../platform-client\";\nimport {\n listActionsHint,\n listCustomAppActionsHint,\n listMcpAppActionsHint,\n listMcpAppConnectHint,\n showActionHint,\n} 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(\n \"List and inspect catalog toolkit actions, or live MCP tools for connected custom MCP apps\",\n );\n\n actions\n .command(\"list\")\n .description(\n \"List catalog toolkit actions, or live MCP tools for a connected {org}/{name} MCP app\",\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 .option(\n \"--credential <id>\",\n \"Pin a credential instance id when listing live MCP tools (otherwise project/org default)\",\n )\n .action(\n (slug, options: { search?: string; limit?: number; cursor?: string; credential?: 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 projectId = await resolveActiveProjectId(config);\n const result = await runAppActions(client, {\n slug,\n search: options.search,\n limit: options.limit,\n cursor: options.cursor,\n credential: options.credential,\n projectId,\n });\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 if (result.kind === \"mcp\") {\n process.stderr.write(\n result.items.length > 0\n ? listMcpAppActionsHint(trimmedSlug)\n : listMcpAppConnectHint(trimmedSlug),\n );\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 if (\n discovery.source === \"mcp\" &&\n !options.preview &&\n result &&\n typeof result === \"object\" &&\n \"slug\" in result\n ) {\n const slug = String((result as { slug: string }).slug);\n process.stderr.write(\n `\\nNext: keystroke docs search \"custom apps MCP\"\\n` +\n ` keystroke connect ${slug} --print-url\\n` +\n ` keystroke apps actions list ${slug}\\n` +\n ` keystroke apps sync ${slug}\\n`,\n );\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 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 registerAppDeleteCommand(app: Command): void {\n app\n .command(\"delete\")\n .description(\"Delete a custom org app (and its credentials)\")\n .argument(\"<slug>\", \"App slug (e.g. acme/internal-api)\")\n .action((slug: string) =>\n runCliCommand(\n \"App delete failed\",\n async () => {\n const config = createCliConfig();\n const client = createCliPlatformClient(config);\n await resolveActiveOrganization(config);\n await client.apps.delete(slug);\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 mcpNote =\n app.source === \"mcp\"\n ? `\\n * MCP URL: ${app.url ?? \"(missing)\"}. Prefer \\`keystroke docs search \"custom apps MCP\"\\`, then \\`keystroke apps actions list ${app.slug}\\` after connect.`\n : \"\";\n\n if (app.authKind === \"oauth\") {\n return `import { defineApp } from \"@keystrokehq/keystroke/app\";\n\n/** Synced from platform app \\`${app.slug}\\`. Re-run \\`keystroke apps sync ${app.slug}\\` after template changes.${mcpNote} */\nexport const ${exportName} = defineApp({\n slug: ${JSON.stringify(app.slug)},\n auth: \"oauth\",\n});\n`;\n }\n\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.${mcpNote} */\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 { registerAppDeleteCommand } from \"./delete\";\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 registerAppDeleteCommand(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 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 { 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, ChannelAccount, SlackConnectFlow } from \"@keystrokehq/shared\";\nimport {\n SLACK_KEYSTROKE_APP_SLUG,\n SLACK_PERSONAL_APP_SLUG,\n buildConnectDeeplink,\n parseSlackConnectFlow,\n resolveConnectAppSlug,\n} from \"@keystrokehq/shared\";\n\nimport { openUrl } from \"../../auth/open-url\";\n\nexport type ConnectPlatformClient = {\n apps: {\n listCatalog(): Promise<AppCatalogSummary[]>;\n };\n channels?: {\n listAccounts(projectId: string, platform: \"slack\"): Promise<ChannelAccount[]>;\n };\n};\n\nexport { resolveConnectAppSlug };\n\nconst ACCOUNT_POLL_MS = 2_000;\nconst ACCOUNT_WAIT_DEFAULT_MS = 5 * 60_000;\n\nasync function waitForSlackAccounts(\n listAccounts: (projectId: string, platform: \"slack\") => Promise<ChannelAccount[]>,\n projectId: string,\n options?: { timeoutMs?: number; pollMs?: number; sleep?: (ms: number) => Promise<void> },\n): Promise<ChannelAccount[]> {\n const timeoutMs = options?.timeoutMs ?? ACCOUNT_WAIT_DEFAULT_MS;\n const pollMs = options?.pollMs ?? ACCOUNT_POLL_MS;\n const sleep = options?.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));\n const deadline = Date.now() + timeoutMs;\n\n for (;;) {\n const accounts = await listAccounts(projectId, \"slack\");\n if (accounts.length > 0) {\n return accounts;\n }\n if (Date.now() >= deadline) {\n throw new Error(\n \"Timed out waiting for a Slack workspace. Finish OAuth in the browser, then retry.\",\n );\n }\n await sleep(pollMs);\n }\n}\n\n/** One-line stdout note clarifying which Slack dialog a connect URL opens. */\nfunction slackConnectNote(appId: string, flow: SlackConnectFlow | undefined): string | null {\n if (appId === SLACK_KEYSTROKE_APP_SLUG) {\n return (\n \"Note: `slackbot` is the catalog slug for the Keystroke Slack App — \" +\n \"same dialog as `keystroke connect slack --kind keystroke`.\"\n );\n }\n if (appId !== SLACK_PERSONAL_APP_SLUG) {\n return null;\n }\n switch (flow) {\n case undefined:\n return (\n \"Note: this opens the Slack chooser. Pick a dialog directly with --kind: \" +\n \"keystroke = Keystroke Slack App (bot actions + External Channels; catalog slug `slackbot`), \" +\n \"personal = Personal Slack Account (user token; catalog slug `slack`), \" +\n \"custom = Custom Slack App wizard (dedicated @handle).\"\n );\n case \"keystroke\":\n return (\n \"Note: connects the Keystroke Slack App (catalog slug `slackbot`) — bot actions and \" +\n \"External Channels. Add --wait to block until the Slack workspace registers.\"\n );\n case \"personal\":\n return (\n \"Note: connects a Personal Slack Account (user token; catalog slug `slack`). \" +\n \"Actions run as the installing person — not for External Channels.\"\n );\n case \"custom\":\n return (\n \"Note: opens the Custom Slack App wizard (dedicated @handle). To set up a specific \" +\n \"agent, prefer `keystroke channels setup <agent> --custom`.\"\n );\n default: {\n const _exhaustive: never = flow;\n return _exhaustive;\n }\n }\n}\n\nexport async function runConnect(options: {\n platform: ConnectPlatformClient;\n webUrl: string;\n orgSlug: string;\n slug: string;\n /** Slack only: open a specific connect dialog (keystroke | personal | custom). */\n kind?: string;\n printUrl?: boolean;\n /** When connecting the Keystroke Slack App, poll until a gateway workspace appears. */\n wait?: boolean;\n projectId?: string;\n /** Injected for tests. */\n waitForAccounts?: typeof waitForSlackAccounts;\n}): Promise<void> {\n const apps = await options.platform.apps.listCatalog();\n const requested = options.slug.trim();\n\n let flow: SlackConnectFlow | undefined;\n if (options.kind !== undefined) {\n if (requested !== SLACK_PERSONAL_APP_SLUG) {\n throw new Error(\"--kind is only supported with `keystroke connect slack`.\");\n }\n const parsed = parseSlackConnectFlow(options.kind.trim());\n if (!parsed) {\n throw new Error(`Unknown --kind \"${options.kind}\". Use keystroke, personal, or custom.`);\n }\n flow = parsed;\n }\n\n const app = resolveConnectAppSlug(requested, apps);\n const url = buildConnectDeeplink({\n webUrl: options.webUrl,\n orgSlug: options.orgSlug,\n appSlug: app.id,\n flow,\n });\n\n if (options.printUrl) {\n process.stdout.write(`${url}\\n`);\n } else {\n openUrl(url);\n process.stdout.write(`Opening ${app.name} connect flow in your browser.\\n`);\n }\n\n const note = slackConnectNote(app.id, flow);\n if (note) {\n process.stdout.write(`${note}\\n`);\n }\n\n const connectsKeystrokeSlackApp =\n app.id === SLACK_KEYSTROKE_APP_SLUG ||\n (app.id === SLACK_PERSONAL_APP_SLUG && flow === \"keystroke\");\n const waitingForSlackGateway = options.wait && connectsKeystrokeSlackApp;\n if (!waitingForSlackGateway) {\n if (options.wait) {\n throw new Error(\n \"--wait is only supported when connecting the Keystroke Slack App \" +\n \"(`connect slack --kind keystroke` or `connect slackbot`).\",\n );\n }\n return;\n }\n\n const projectId = options.projectId?.trim();\n if (!projectId) {\n throw new Error(\"--wait requires a linked project (`keystroke projects link` or --project).\");\n }\n const listAccounts = options.platform.channels?.listAccounts;\n if (!listAccounts) {\n throw new Error(\"Platform client does not support channel accounts polling.\");\n }\n\n process.stdout.write(\"Waiting for Slack workspace OAuth to finish…\\n\");\n const waitForAccounts = options.waitForAccounts ?? waitForSlackAccounts;\n const accounts = await waitForAccounts(listAccounts.bind(options.platform.channels), projectId);\n process.stdout.write(\n `${JSON.stringify({ accounts, message: \"Slack workspace connected for External Channels.\" }, null, 2)}\\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 { resolveChannelProjectId } from \"../channels/resolve-channel-project\";\nimport { runConnect } from \"./run-connect\";\n\nexport function registerConnectCommand(program: Command): void {\n program\n .command(\"connect <slug>\")\n .description(\n \"Open the web app to connect an integration by catalog slug. \" +\n \"`connect slack` opens the Slack chooser; use --kind for a specific dialog.\",\n )\n .option(\"--print-url\", \"Print the connect URL without opening the browser\")\n .option(\n \"--kind <kind>\",\n \"For slack: keystroke = Keystroke Slack App (catalog slug `slackbot`; bot + External Channels), \" +\n \"personal = Personal Slack Account (user token), custom = Custom Slack App wizard\",\n )\n .option(\n \"--wait\",\n \"For the Keystroke Slack App (slack --kind keystroke, or slackbot): wait until a Slack \" +\n \"gateway workspace appears after OAuth (requires project)\",\n )\n .action((slug: string, options: { printUrl?: boolean; kind?: string; wait?: boolean }) =>\n runCliCommand(\n \"Connect failed\",\n async () => {\n const config = createCliConfig();\n const membership = await resolveActiveOrganization(config);\n const platform = createCliPlatformClient(config);\n const projectId = options.wait ? await resolveChannelProjectId(config) : undefined;\n await runConnect({\n platform,\n webUrl: getWebUrl(config),\n orgSlug: membership.organization.slug,\n slug,\n kind: options.kind,\n printUrl: options.printUrl,\n wait: options.wait,\n projectId,\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 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 type { CliConfig } from \"../../config\";\nimport { createCliConfig, getPlatformUrl, getWebUrl } from \"../../config\";\nimport { formatCliError } from \"../../errors/format-cli-error\";\nimport { withActivePlatformClient } from \"../projects/run-project\";\n\nexport async function runCredentialsCommand(\n fallback: string,\n fn: (ctx: { config: Conf<CliConfig>; platform: PlatformClient }) => Promise<void>,\n): Promise<void> {\n const config = createCliConfig();\n\n try {\n await withActivePlatformClient(config, async (platform) => {\n await fn({ config, platform });\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 label?: string;\n slug?: string;\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 ...(args.label !== undefined ? { label: args.label } : {}),\n ...(args.slug !== undefined ? { slug: args.slug } : {}),\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 { runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsDeleteCommand(credentials: Command): void {\n credentials\n .command(\"delete\")\n .description(\"Delete a credential\")\n .argument(\"<ref>\", \"Credential slug or id\")\n .action((ref: string) =>\n runCredentialsCommand(\"Delete credential failed\", async ({ platform }) => {\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 }) => {\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 { runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsGetCommand(credentials: Command): void {\n credentials\n .command(\"get\")\n .description(\"Get a credential by id\")\n .argument(\"<id>\", \"Credential id\")\n .action((id: string) =>\n runCredentialsCommand(\"Get credential failed\", async ({ platform }) => {\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 { runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsListCommand(credentials: Command): void {\n credentials\n .command(\"list\")\n .description(\"List stored credentials\")\n .action(() =>\n runCredentialsCommand(\"List credentials failed\", async ({ platform }) => {\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 }) => {\n const value = parseCredentialValueFields(options.set);\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 { Command } from \"commander\";\nimport { parseCredentialSetScopes } from \"./parse-set-scopes\";\nimport { parseCredentialValueFields } from \"./parse-value\";\nimport {\n buildPlatformCreateRequest,\n buildPlatformUpdatePatch,\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 credential\")\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 }) => {\n const value = parseCredentialValueFields(options.set);\n const parsedScopes = parseCredentialSetScopes(options.scope, options.projectSlug);\n const displayName = options.name ?? options.label;\n\n const created = await platform.credentials.create(\n buildPlatformCreateRequest({\n appId: key,\n value,\n targets: parsedScopes,\n ...(displayName !== undefined ? { label: displayName } : {}),\n ...(options.slug !== undefined ? { slug: options.slug } : {}),\n }),\n );\n\n if (options.default !== undefined) {\n const patch = buildPlatformUpdatePatch({\n 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","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 { buildPlatformUpdatePatch, runCredentialsCommand } from \"./run-credentials\";\n\nexport function registerCredentialsUpdateCommand(credentials: Command): void {\n credentials\n .command(\"update\")\n .description(\"Update a credential\")\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 }) => {\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 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.command(\"credentials\").description(\"Manage platform app credentials\");\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 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 { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\n\nconst NONPORTABLE_SPEC = /^(?:link:|workspace:|file:(?:\\.\\.?(?:\\/|$)|\\/|[A-Za-z]:\\\\|~))/i;\n\n/**\n * Reject tracked dependency specs that cannot resolve in disposable/server\n * checkouts (absolute/local link:, external file:, unresolved workspace:).\n */\nexport async function assertPortableProjectDependencies(projectRoot: string): Promise<void> {\n const packageJsonPath = join(projectRoot, \"package.json\");\n let raw: string;\n try {\n raw = await readFile(packageJsonPath, \"utf8\");\n } catch {\n return;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new ExpectedCliError(\"package.json is not valid JSON\");\n }\n if (!parsed || typeof parsed !== \"object\") {\n return;\n }\n\n const record = parsed as Record<string, unknown>;\n const sections = [\"dependencies\", \"devDependencies\", \"optionalDependencies\", \"peerDependencies\"];\n const offenders: string[] = [];\n\n for (const section of sections) {\n const deps = record[section];\n if (!deps || typeof deps !== \"object\") {\n continue;\n }\n for (const [name, spec] of Object.entries(deps as Record<string, unknown>)) {\n if (typeof spec !== \"string\") {\n continue;\n }\n if (NONPORTABLE_SPEC.test(spec.trim())) {\n offenders.push(`${name}@${spec}`);\n }\n }\n }\n\n if (offenders.length === 0) {\n return;\n }\n\n throw new ExpectedCliError(\n \"Deploy blocked: package.json contains non-portable local dependency specs that \" +\n \"cannot resolve outside this machine:\\n \" +\n offenders.slice(0, 12).join(\"\\n \") +\n (offenders.length > 12 ? `\\n …and ${offenders.length - 12} more` : \"\") +\n \"\\nReplace link:/file:/workspace: specs with published versions before deploying.\",\n );\n}\n","import { chmod, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nconst ENV_USERNAME = \"KEYSTROKE_GIT_USERNAME\";\nconst ENV_PASSWORD = \"KEYSTROKE_GIT_PASSWORD\";\n\nconst ASKPASS_SCRIPT = `#!/bin/sh\ncase \"$1\" in\n *Username*) printf '%s\\\\n' \"$${ENV_USERNAME}\" ;;\n *Password*) printf '%s\\\\n' \"$${ENV_PASSWORD}\" ;;\nesac\n`;\n\nexport async function withGitCredentials<T>(\n credential: { username: string; password: string },\n fn: (env: NodeJS.ProcessEnv) => Promise<T>,\n): Promise<T> {\n const dir = join(tmpdir(), `keystroke-git-${Date.now()}-${Math.random().toString(36).slice(2)}`);\n await mkdir(dir, { mode: 0o700, recursive: true });\n const askpassPath = join(dir, \"askpass\");\n\n try {\n await writeFile(askpassPath, ASKPASS_SCRIPT, { mode: 0o700 });\n await chmod(askpassPath, 0o700);\n\n const env: NodeJS.ProcessEnv = {\n GIT_ASKPASS: askpassPath,\n GIT_TERMINAL_PROMPT: \"0\",\n GCM_INTERACTIVE: \"never\",\n GIT_CONFIG_COUNT: \"1\",\n GIT_CONFIG_KEY_0: \"credential.helper\",\n GIT_CONFIG_VALUE_0: \"\",\n [ENV_USERNAME]: credential.username,\n [ENV_PASSWORD]: credential.password,\n };\n\n return await fn(env);\n } finally {\n await rm(dir, { recursive: true, force: true }).catch(() => {});\n }\n}\n","import { execFile } from \"node:child_process\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\n\nconst CREDENTIAL_PATTERNS = [/ghs_\\S+/g, /github_pat_\\S+/g, /x-access-token:[^\\s@]+/g];\nconst MAX_GIT_BUFFER = 50 * 1024 * 1024;\n\nfunction redactCredentials(text: string): string {\n let result = text;\n for (const pattern of CREDENTIAL_PATTERNS) {\n result = result.replace(pattern, \"***\");\n }\n return result;\n}\n\nfunction toText(value: string | Buffer): string {\n return typeof value === \"string\" ? value : value.toString(\"utf8\");\n}\n\nfunction exitCodeFromError(error: NodeJS.ErrnoException & { code?: string | number }): number {\n const code = error.code;\n return typeof code === \"number\" ? code : 1;\n}\n\nexport async function runGit(\n args: string[],\n options: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n reject?: boolean;\n },\n): Promise<{ stdout: string; stderr: string; code: number }> {\n const { cwd, env, reject: shouldReject = true } = options;\n\n return new Promise((resolve, rejectPromise) => {\n execFile(\n \"git\",\n args,\n {\n cwd,\n // Caller-supplied env is the full environment (see managedGitEnv /\n // worktreeGitEnv). Do not re-merge process.env — that would resurrect\n // GIT_DIR after worktreeGitEnv deleted it.\n env: env ?? process.env,\n maxBuffer: MAX_GIT_BUFFER,\n encoding: \"utf8\",\n },\n (error, stdout, stderr) => {\n if (error && \"code\" in error && error.code === \"ENOENT\") {\n rejectPromise(\n new ExpectedCliError(\n \"git is not installed or not in PATH. Install git to continue: https://git-scm.com\",\n ),\n );\n return;\n }\n\n const exitCode = error ? exitCodeFromError(error as NodeJS.ErrnoException) : 0;\n const stdoutText = toText(stdout);\n const stderrText = toText(stderr);\n\n if (shouldReject && exitCode !== 0) {\n rejectPromise(\n new Error(redactCredentials(`git ${args[0]} failed (exit ${exitCode}): ${stderrText}`)),\n );\n return;\n }\n\n resolve({ stdout: stdoutText, stderr: stderrText, code: exitCode });\n },\n );\n });\n}\n\n/** Like `runGit`, but returns raw stdout bytes (for `git diff --binary`). */\nexport async function runGitBuffer(\n args: string[],\n options: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n reject?: boolean;\n },\n): Promise<{ stdout: Buffer; stderr: Buffer; code: number }> {\n const { cwd, env, reject: shouldReject = true } = options;\n\n return new Promise((resolve, rejectPromise) => {\n execFile(\n \"git\",\n args,\n {\n cwd,\n env: env ?? process.env,\n maxBuffer: MAX_GIT_BUFFER,\n encoding: \"buffer\",\n },\n (error, stdout, stderr) => {\n if (error && \"code\" in error && error.code === \"ENOENT\") {\n rejectPromise(\n new ExpectedCliError(\n \"git is not installed or not in PATH. Install git to continue: https://git-scm.com\",\n ),\n );\n return;\n }\n\n const exitCode = error ? exitCodeFromError(error as NodeJS.ErrnoException) : 0;\n const stdoutBuf = Buffer.isBuffer(stdout) ? stdout : Buffer.from(stdout ?? \"\");\n const stderrBuf = Buffer.isBuffer(stderr) ? stderr : Buffer.from(stderr ?? \"\");\n\n if (shouldReject && exitCode !== 0) {\n rejectPromise(\n new Error(\n redactCredentials(\n `git ${args[0]} failed (exit ${exitCode}): ${stderrBuf.toString(\"utf8\")}`,\n ),\n ),\n );\n return;\n }\n\n resolve({ stdout: stdoutBuf, stderr: stderrBuf, code: exitCode });\n },\n );\n });\n}\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { runGit } from \"./run-git\";\n\n/** Project-relative git dir for Keystroke managed draft/main (never the user's `.git`). */\nexport const MANAGED_GIT_DIR_NAME = \".keystroke/git\";\n\n/** Work-tree ignore entry so `git add` never walks the in-tree `GIT_DIR`. */\nexport const MANAGED_GIT_EXCLUDE_ENTRY = \".keystroke/\";\n\n/** Internal selector: platform-agent injects `checkout`; absent means sidecar. */\nexport const KEYSTROKE_DEPLOY_GIT_MODE_ENV = \"KEYSTROKE_DEPLOY_GIT_MODE\";\n\nexport type DeployGitMode = \"sidecar\" | \"checkout\";\n\nexport type DeployGitContext = {\n kind: DeployGitMode;\n env: NodeJS.ProcessEnv;\n};\n\n/** Absolute path to the managed sidecar git directory. */\nexport function managedGitDir(projectRoot: string): string {\n return join(resolve(projectRoot), \".keystroke\", \"git\");\n}\n\n/**\n * Env for all managed-draft git operations: separate object store under\n * `.keystroke/git`, work tree = project root. Leaves the user's `.git` /\n * `origin` untouched.\n *\n * Returns a full process env (not a partial overlay). `runGit` uses the\n * provided `env` as-is so callers can also *remove* GIT_* vars (worktrees).\n */\nexport function managedGitEnv(projectRoot: string): NodeJS.ProcessEnv {\n const root = resolve(projectRoot);\n return {\n ...process.env,\n GIT_DIR: managedGitDir(root),\n GIT_WORK_TREE: root,\n };\n}\n\n/**\n * Full process env for the project's ordinary checkout. Removes ambient\n * `GIT_DIR` / `GIT_WORK_TREE` / `GIT_COMMON_DIR` so linked worktrees and\n * package scripts cannot inherit a sidecar override.\n */\nexport function checkoutGitEnv(base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const env = { ...process.env, ...base };\n delete env.GIT_DIR;\n delete env.GIT_WORK_TREE;\n delete env.GIT_COMMON_DIR;\n return env;\n}\n\n/**\n * Resolve deploy Git mode from process env. Absence → sidecar. Exact value\n * `checkout` → hosted checkout. Any other non-empty value fails closed.\n */\nexport function resolveDeployGitMode(processEnv: NodeJS.ProcessEnv = process.env): DeployGitMode {\n const raw = processEnv[KEYSTROKE_DEPLOY_GIT_MODE_ENV]?.trim();\n if (!raw) {\n return \"sidecar\";\n }\n if (raw === \"checkout\") {\n return \"checkout\";\n }\n throw new ExpectedCliError(\n `Invalid ${KEYSTROKE_DEPLOY_GIT_MODE_ENV}=${JSON.stringify(raw)}. ` +\n `Expected \"checkout\" or unset (sidecar).`,\n );\n}\n\n/**\n * Resolve the Git environment used for managed deploy. Sidecar mode creates\n * `.keystroke/git` as today; checkout mode reuses the ordinary project `.git`.\n */\nexport async function resolveDeployGitContext(\n projectRoot: string,\n processEnv: NodeJS.ProcessEnv = process.env,\n): Promise<DeployGitContext> {\n const kind = resolveDeployGitMode(processEnv);\n if (kind === \"checkout\") {\n return { kind, env: checkoutGitEnv(processEnv) };\n }\n const ensured = await ensureManagedGit(projectRoot);\n return { kind, env: ensured.env };\n}\n\nexport type EnsureManagedGitResult = {\n env: NodeJS.ProcessEnv;\n /** True when this call created a new sidecar repository. */\n created: boolean;\n};\n\n/**\n * Exclude `.keystroke/` from the sidecar work tree. Unlike `.git`, a custom\n * in-tree `GIT_DIR` is not skipped automatically — `git add -A` otherwise walks\n * `objects/` and can fatal on ephemeral pack/bitmap temp files.\n */\nexport async function ensureManagedGitExclude(\n projectRoot: string,\n env: NodeJS.ProcessEnv,\n): Promise<void> {\n const root = resolve(projectRoot);\n const excludeRel = (\n await runGit([\"rev-parse\", \"--git-path\", \"info/exclude\"], { cwd: root, env })\n ).stdout.trim();\n const excludePath = isAbsolute(excludeRel) ? excludeRel : resolve(root, excludeRel);\n await mkdir(dirname(excludePath), { recursive: true });\n\n let existing = \"\";\n try {\n existing = await readFile(excludePath, \"utf8\");\n } catch {\n // First write.\n }\n const lines = new Set(existing.split(/\\r?\\n/).filter((line) => line.length > 0));\n if (lines.has(MANAGED_GIT_EXCLUDE_ENTRY) || lines.has(\".keystroke\")) {\n return;\n }\n const prefix = existing.length === 0 || existing.endsWith(\"\\n\") ? \"\" : \"\\n\";\n await writeFile(excludePath, `${existing}${prefix}${MANAGED_GIT_EXCLUDE_ENTRY}\\n`);\n}\n\n/**\n * Ensure `.keystroke/git` exists as a git directory for `projectRoot`.\n * Never creates or modifies a project-root `.git`.\n */\nexport async function ensureManagedGit(projectRoot: string): Promise<EnsureManagedGitResult> {\n const root = resolve(projectRoot);\n const env = managedGitEnv(root);\n\n const existing = await runGit([\"rev-parse\", \"--git-dir\"], {\n cwd: root,\n env,\n reject: false,\n });\n if (existing.code === 0) {\n await ensureManagedGitExclude(root, env);\n return { env, created: false };\n }\n\n await mkdir(join(root, \".keystroke\"), { recursive: true });\n await runGit([\"init\", \"-b\", \"main\"], { cwd: root, env });\n await ensureManagedGitExclude(root, env);\n return { env, created: true };\n}\n\n/** True when the managed sidecar has an in-progress merge/rebase/cherry-pick. */\nexport async function isManagedGitOperationInProgress(\n projectRoot: string,\n env: NodeJS.ProcessEnv,\n): Promise<boolean> {\n for (const ref of [\"MERGE_HEAD\", \"REBASE_HEAD\", \"CHERRY_PICK_HEAD\", \"REVERT_HEAD\"] as const) {\n const result = await runGit([\"rev-parse\", \"--verify\", ref], {\n cwd: projectRoot,\n env,\n reject: false,\n });\n if (result.code === 0) {\n return true;\n }\n }\n return false;\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport { withGitCredentials } from \"./git-credential\";\nimport { ensureManagedGit, managedGitEnv } from \"./managed-git-env\";\nimport { runGit } from \"./run-git\";\n\nimport type { SourcePathChange } from \"@keystrokehq/build\";\n\n/**\n * Tip-to-tip (two-dot) path list between two commits already in the local\n * object store. Equivalent to `git diff --name-only <base> <head>`.\n */\nexport async function listCommitChangedPaths(input: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n baseSha: string;\n headSha: string;\n}): Promise<string[]> {\n if (input.baseSha === input.headSha) {\n return [];\n }\n const { stdout } = await runGit([\"diff\", \"--name-only\", \"-z\", input.baseSha, input.headSha], {\n cwd: input.cwd,\n env: input.env,\n });\n return stdout\n .split(\"\\0\")\n .filter((path) => path.length > 0)\n .sort();\n}\n\n/**\n * Classify tip-to-tip changes from the local object store. Rename detection is\n * disabled intentionally so a rename is represented as one delete + one add.\n */\nexport async function listCommitSourceChanges(input: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n baseSha: string;\n headSha: string;\n}): Promise<SourcePathChange[]> {\n if (input.baseSha === input.headSha) {\n return [];\n }\n const { stdout } = await runGit(\n [\"diff\", \"--name-status\", \"-z\", \"--no-renames\", input.baseSha, input.headSha],\n { cwd: input.cwd, env: input.env },\n );\n const fields = stdout.split(\"\\0\").filter((field) => field.length > 0);\n const changes: SourcePathChange[] = [];\n for (let index = 0; index < fields.length; index += 2) {\n const status = fields[index];\n const path = fields[index + 1];\n if (!status || !path || ![\"A\", \"D\", \"M\", \"T\"].includes(status)) {\n throw new Error(`Unexpected git diff --name-status output near field ${index}`);\n }\n changes.push({\n path,\n kind: status === \"A\" ? \"added\" : status === \"D\" ? \"deleted\" : \"modified\",\n });\n }\n return changes.sort((left, right) => left.path.localeCompare(right.path));\n}\n\nexport async function readCommitFileText(input: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n commitSha: string;\n path: string;\n}): Promise<string | null> {\n const result = await runGit([\"show\", `${input.commitSha}:${input.path}`], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n return result.code === 0 ? result.stdout : null;\n}\n\nexport async function resolveCommitTreeSha(input: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n commitSha: string;\n}): Promise<string> {\n const { stdout } = await runGit([\"rev-parse\", `${input.commitSha}^{tree}`], {\n cwd: input.cwd,\n env: input.env,\n });\n return stdout.trim().toLowerCase();\n}\n\n/**\n * Fetch remote `main` (+ ensure draft tip objects exist), then compute the\n * client-attested tip-to-tip changed path set for managed deploy preflight.\n *\n * When `env` is omitted, falls back to the managed sidecar (local CLI default).\n * Hosted checkout deploy must pass an explicit checkout env.\n */\nexport async function resolveManagedPlanChangedPaths(input: {\n cwd: string;\n draftSha: string;\n remote: { url: string; username: string; password: string };\n env?: NodeJS.ProcessEnv;\n}): Promise<{ mainSha: string; draftSha: string; changedPaths: string[] }> {\n const env =\n input.env ??\n (await (async () => {\n await ensureManagedGit(input.cwd);\n return managedGitEnv(input.cwd);\n })());\n const temporaryRef = `refs/keystroke/tmp/${randomUUID().slice(0, 8)}/main`;\n\n try {\n await withGitCredentials(\n { username: input.remote.username, password: input.remote.password },\n async (credEnv) => {\n await runGit(\n [\n \"fetch\",\n \"--no-tags\",\n \"--no-write-fetch-head\",\n input.remote.url,\n `refs/heads/main:${temporaryRef}`,\n input.draftSha,\n ],\n { cwd: input.cwd, env: { ...env, ...credEnv } },\n );\n },\n );\n\n const { stdout: mainLine } = await runGit([\"rev-parse\", temporaryRef], {\n cwd: input.cwd,\n env,\n });\n const mainSha = mainLine.trim().toLowerCase();\n const draftSha = input.draftSha.toLowerCase();\n const changedPaths = await listCommitChangedPaths({\n cwd: input.cwd,\n env,\n baseSha: mainSha,\n headSha: draftSha,\n });\n return { mainSha, draftSha, changedPaths };\n } finally {\n await runGit([\"update-ref\", \"-d\", temporaryRef], {\n cwd: input.cwd,\n env,\n reject: false,\n });\n }\n}\n","import { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nimport {\n ANALYZER_CONTRACT_VERSION,\n analyzeDeployableClosures,\n computeSafeFilteredDeploy,\n} from \"@keystrokehq/build\";\nimport {\n PNPM_FROZEN_INSTALL_ARGS,\n type InternalAnalyzeFilteredDeployResult,\n type ManagedDeployBaseManifestFile,\n type ManagedDeployResourceKey,\n type ManagedDeploySourcePathChange,\n} from \"@keystrokehq/shared\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { runGit } from \"../git/run-git\";\n\nasync function detectPackageManager(cwd: string): Promise<\"pnpm\" | \"npm\" | \"yarn\" | \"bun\"> {\n const { access } = await import(\"node:fs/promises\");\n try {\n await access(join(cwd, \"pnpm-lock.yaml\"));\n return \"pnpm\";\n } catch {\n // fall through\n }\n try {\n await access(join(cwd, \"yarn.lock\"));\n return \"yarn\";\n } catch {\n // fall through\n }\n try {\n await access(join(cwd, \"bun.lockb\"));\n return \"bun\";\n } catch {\n // fall through\n }\n try {\n await access(join(cwd, \"bun.lock\"));\n return \"bun\";\n } catch {\n // fall through\n }\n return \"npm\";\n}\n\nasync function runCommand(\n command: string,\n args: string[],\n cwd: string,\n env: NodeJS.ProcessEnv | undefined,\n timeoutMs: number,\n): Promise<{ code: number; stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n env: { ...process.env, ...env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n reject(new ExpectedCliError(`${command} ${args.join(\" \")} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString(\"utf8\");\n });\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString(\"utf8\");\n });\n child.on(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.on(\"close\", (code) => {\n clearTimeout(timer);\n resolve({ code: code ?? 1, stdout, stderr });\n });\n });\n}\n\nasync function installDeps(cwd: string, env?: NodeJS.ProcessEnv): Promise<void> {\n const manager = await detectPackageManager(cwd);\n const args =\n manager === \"pnpm\"\n ? [...PNPM_FROZEN_INSTALL_ARGS]\n : manager === \"yarn\"\n ? [\"install\", \"--frozen-lockfile\"]\n : manager === \"bun\"\n ? [\"install\", \"--frozen-lockfile\"]\n : [\"ci\"];\n const result = await runCommand(manager, args, cwd, env, 15 * 60_000);\n if (result.code !== 0) {\n throw new ExpectedCliError(\n `Dependency install failed before filtered analysis: ${result.stderr || result.stdout}`,\n );\n }\n}\n\n/**\n * Run dual-worktree filtered analysis from locally pinned Git objects.\n * Does not mutate the caller's working tree.\n */\nexport async function analyzeFilteredPlanLocally(input: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n mainSha: string;\n draftSha: string;\n filter: ManagedDeployResourceKey[];\n sourceChanges: ManagedDeploySourcePathChange[];\n baseManifestFiles: ManagedDeployBaseManifestFile[];\n}): Promise<InternalAnalyzeFilteredDeployResult> {\n if (input.filter.length === 0) {\n throw new ExpectedCliError(\"Filtered deploy requires at least one resource key\");\n }\n if (input.sourceChanges.length === 0) {\n throw new ExpectedCliError(\"Filtered deploy requires at least one source change\");\n }\n\n const draftRoot = await mkdtemp(join(tmpdir(), \"ks-filter-analyze-d0-\"));\n const mainRoot = await mkdtemp(join(tmpdir(), \"ks-filter-analyze-m0-\"));\n try {\n const draftAdd = await runGit([\"worktree\", \"add\", \"--detach\", draftRoot, input.draftSha], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n if (draftAdd.code !== 0) {\n throw new ExpectedCliError(\n `Failed to checkout draft ${input.draftSha}: ${draftAdd.stderr || draftAdd.stdout}`,\n );\n }\n\n const mainAdd = await runGit([\"worktree\", \"add\", \"--detach\", mainRoot, input.mainSha], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n if (mainAdd.code !== 0) {\n throw new ExpectedCliError(\n `Failed to checkout main ${input.mainSha}: ${mainAdd.stderr || mainAdd.stdout}`,\n );\n }\n\n try {\n await installDeps(draftRoot, input.env);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return {\n requireFull: true,\n code: \"unproven_safe\",\n reason,\n };\n }\n\n // Reuse draft node_modules for main-tree closure analysis.\n await runCommand(\n \"ln\",\n [\"-sfn\", join(draftRoot, \"node_modules\"), join(mainRoot, \"node_modules\")],\n mainRoot,\n input.env,\n 60_000,\n ).catch(() => undefined);\n\n const mainAnalysis = await analyzeDeployableClosures({\n root: mainRoot,\n phase: \"deploy\",\n });\n const computed = await computeSafeFilteredDeploy({\n root: draftRoot,\n phase: \"deploy\",\n selectedResourceKeys: input.filter,\n changedPaths: input.sourceChanges,\n baseManifestFiles: input.baseManifestFiles,\n mainClosures: mainAnalysis.closures,\n mainFailures: mainAnalysis.failures,\n });\n\n if (computed.requireFull) {\n return {\n requireFull: true,\n code: computed.code,\n reason: computed.reason,\n };\n }\n\n return {\n requireFull: false,\n resourceKeys: computed.resourceKeys,\n impactedResourceKeys: computed.impactedResourceKeys ?? [],\n expansions: computed.expansions,\n sourceDelta: computed.sourceDelta,\n impactCompleteness: computed.impactCompleteness ?? \"complete\",\n warnings: computed.warnings ?? [],\n candidateOps: computed.candidateOps ?? [],\n analyzerContractVersion: ANALYZER_CONTRACT_VERSION,\n };\n } finally {\n await runGit([\"worktree\", \"remove\", \"--force\", draftRoot], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n }).catch(() => undefined);\n await runGit([\"worktree\", \"remove\", \"--force\", mainRoot], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n }).catch(() => undefined);\n await rm(draftRoot, { recursive: true, force: true }).catch(() => undefined);\n await rm(mainRoot, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n","import { ANALYZER_CONTRACT_VERSION } from \"@keystrokehq/build\";\nimport type {\n ManagedDeployCandidateOp,\n ManagedDeployExpansion,\n ManagedDeployImpactCompleteness,\n ManagedDeployRequireFullCode,\n ManagedDeployResourceKey,\n} from \"@keystrokehq/shared\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport {\n listCommitSourceChanges,\n readCommitFileText,\n resolveManagedPlanChangedPaths,\n} from \"../git/diff-commit-trees\";\nimport { ensureManagedGit, managedGitEnv } from \"../git/managed-git-env\";\nimport { analyzeFilteredPlanLocally } from \"./analyze-filtered-plan\";\n\nconst MANIFEST_BASENAMES = new Set([\n \"package.json\",\n \"package-lock.json\",\n \"pnpm-lock.yaml\",\n \"yarn.lock\",\n \"bun.lock\",\n \"bun.lockb\",\n \"npm-shrinkwrap.json\",\n]);\n\ntype PreflightBase = {\n mainSha: string;\n draftSha: string;\n changedPaths: string[];\n};\n\nexport type ManagedDeployPreflight =\n | (PreflightBase & { mode: \"no_op\" })\n | (PreflightBase & {\n mode: \"blocked\";\n requestedResourceKeys: ManagedDeployResourceKey[];\n requireFull: { code: ManagedDeployRequireFullCode; reason: string };\n })\n | (PreflightBase & { mode: \"full\" })\n | (PreflightBase & {\n mode: \"filtered\";\n requestedResourceKeys: ManagedDeployResourceKey[];\n resourceKeys: ManagedDeployResourceKey[];\n impactedResourceKeys: ManagedDeployResourceKey[];\n impactCompleteness: ManagedDeployImpactCompleteness;\n warnings: string[];\n expansions: ManagedDeployExpansion[];\n candidateOps: ManagedDeployCandidateOp[];\n });\n\nfunction sortCandidateOps(ops: readonly ManagedDeployCandidateOp[]): ManagedDeployCandidateOp[] {\n return [...ops].sort((left, right) => {\n const byPath = left.path.localeCompare(right.path);\n return byPath !== 0 ? byPath : left.op.localeCompare(right.op);\n });\n}\n\nasync function readBaseManifestFiles(input: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainSha: string;\n changedPaths: string[];\n}): Promise<Array<{ path: string; contents: string }>> {\n const paths = [\n ...new Set(\n input.changedPaths.filter((path) =>\n MANIFEST_BASENAMES.has(path.replace(/\\\\/g, \"/\").split(\"/\").pop() ?? \"\"),\n ),\n ),\n ].sort();\n const files = await Promise.all(\n paths.map(async (path) => {\n const contents = await readCommitFileText({\n cwd: input.cwd,\n env: input.env,\n commitSha: input.mainSha,\n path,\n });\n return contents == null ? null : { path, contents };\n }),\n );\n return files.filter((file): file is { path: string; contents: string } => file != null);\n}\n\nexport async function resolveManagedDeployPreflight(input: {\n cwd: string;\n draftSha: string;\n remote: { url: string; username: string; password: string };\n filter?: ManagedDeployResourceKey[];\n /** Explicit Git env (sidecar or checkout). Defaults to managed sidecar. */\n env?: NodeJS.ProcessEnv;\n}): Promise<ManagedDeployPreflight> {\n const env =\n input.env ??\n (await (async () => {\n await ensureManagedGit(input.cwd);\n return managedGitEnv(input.cwd);\n })());\n const diff = await resolveManagedPlanChangedPaths({\n cwd: input.cwd,\n draftSha: input.draftSha,\n remote: input.remote,\n env,\n });\n const base = {\n mainSha: diff.mainSha,\n draftSha: diff.draftSha,\n changedPaths: diff.changedPaths,\n };\n if (diff.changedPaths.length === 0) {\n return { ...base, mode: \"no_op\" };\n }\n if (!input.filter?.length) {\n return { ...base, mode: \"full\" };\n }\n\n const [sourceChanges, baseManifestFiles] = await Promise.all([\n listCommitSourceChanges({\n cwd: input.cwd,\n env,\n baseSha: diff.mainSha,\n headSha: diff.draftSha,\n }),\n readBaseManifestFiles({\n cwd: input.cwd,\n env,\n mainSha: diff.mainSha,\n changedPaths: diff.changedPaths,\n }),\n ]);\n const analysis = await analyzeFilteredPlanLocally({\n cwd: input.cwd,\n env,\n mainSha: diff.mainSha,\n draftSha: diff.draftSha,\n filter: input.filter,\n sourceChanges,\n baseManifestFiles,\n });\n if (analysis.requireFull) {\n return {\n ...base,\n mode: \"blocked\",\n requestedResourceKeys: input.filter,\n requireFull: {\n code: analysis.code as ManagedDeployRequireFullCode,\n reason: analysis.reason,\n },\n };\n }\n if (\n analysis.analyzerContractVersion != null &&\n analysis.analyzerContractVersion !== ANALYZER_CONTRACT_VERSION\n ) {\n throw new ExpectedCliError(\n `Analyzer contract mismatch: got ${analysis.analyzerContractVersion}, expected ${ANALYZER_CONTRACT_VERSION}`,\n );\n }\n const candidateOps = sortCandidateOps(analysis.candidateOps ?? []);\n if (analysis.sourceDelta.length === 0 || candidateOps.length === 0) {\n return { ...base, mode: \"no_op\" };\n }\n return {\n ...base,\n mode: \"filtered\",\n requestedResourceKeys: [...input.filter].sort(),\n resourceKeys: [...analysis.resourceKeys].sort(),\n impactedResourceKeys: [...(analysis.impactedResourceKeys ?? [])].sort(),\n impactCompleteness: analysis.impactCompleteness ?? \"complete\",\n warnings: [...(analysis.warnings ?? [])],\n expansions: analysis.expansions\n .map((expansion) => ({\n resourceKey: expansion.resourceKey as ManagedDeployResourceKey,\n reason: expansion.reason,\n sharedInputs: [...expansion.sharedInputs].sort(),\n }))\n .sort((left, right) => left.resourceKey.localeCompare(right.resourceKey)),\n candidateOps,\n };\n}\n\nexport function managedDeployNeedsImpactAcceptance(preflight: ManagedDeployPreflight): boolean {\n return (\n preflight.mode === \"filtered\" &&\n (preflight.impactCompleteness === \"unknown\" ||\n preflight.impactedResourceKeys.length > 0 ||\n preflight.expansions.length > 0 ||\n preflight.requestedResourceKeys.length !== preflight.resourceKeys.length ||\n !preflight.requestedResourceKeys.every((key) => preflight.resourceKeys.includes(key)))\n );\n}\n","import { copyFile, mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\nimport { isIgnoredProjectSourcePath, PROJECT_DRAFT_DIFF_MAX_BYTES } from \"@keystrokehq/shared\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { runGit, runGitBuffer } from \"./run-git\";\n\nexport type ComputeWorkingTreeDiffInput = {\n cwd: string;\n /** Immutable base commit (typically the pinned remote draft tip D0). */\n baseSha: string;\n /** Git env (e.g. managed sidecar `GIT_DIR` / `GIT_WORK_TREE`). */\n env?: NodeJS.ProcessEnv;\n /** Test seam — override where the temporary index is written. */\n resolveTempIndexPath?: () => string;\n};\n\n/** Resolve a path returned by `git rev-parse --git-path` (absolute or cwd-relative). */\nexport function resolveGitPath(cwd: string, gitPath: string): string {\n return isAbsolute(gitPath) ? gitPath : resolve(cwd, gitPath);\n}\n\nasync function listNullSeparatedPaths(\n cwd: string,\n args: string[],\n env?: NodeJS.ProcessEnv,\n): Promise<string[]> {\n const { stdout } = await runGit(args, { cwd, env });\n return stdout.split(\"\\0\").filter((path) => path.length > 0);\n}\n\n/**\n * Build a `git diff --binary` from `baseSha` to the desired working tree\n * (staged + unstaged + untracked), without mutating the real index.\n *\n * Uses `GIT_INDEX_FILE` against a copied index. Source-excluded paths\n * (`.env`, `node_modules`, `.keystroke`, …) keep their `baseSha` blob when\n * present on D0 (so the patch never deletes or locally-edits them); otherwise\n * they are dropped from the temp index so untracked secrets stay out.\n */\nexport async function computeWorkingTreeDiff(\n input: ComputeWorkingTreeDiffInput,\n): Promise<Uint8Array> {\n const baseEnv = input.env;\n const gitIndexPath = (\n await runGit([\"rev-parse\", \"--git-path\", \"index\"], { cwd: input.cwd, env: baseEnv })\n ).stdout.trim();\n const realIndexPath = resolveGitPath(input.cwd, gitIndexPath);\n\n const tempDir = await mkdtemp(join(tmpdir(), \"keystroke-draft-index-\"));\n const tempIndexPath = input.resolveTempIndexPath?.() ?? join(tempDir, \"index\");\n\n try {\n await copyFile(realIndexPath, tempIndexPath);\n\n const indexEnv = { ...baseEnv, GIT_INDEX_FILE: tempIndexPath };\n // Managed sidecar sets `info/exclude` for `.keystroke/` (in-tree GIT_DIR is not\n // auto-skipped like `.git`). Do not pass pathspec excludes here — naming an\n // ignored path makes `git add` exit 1.\n await runGit([\"add\", \"-A\", \"--\", \".\"], { cwd: input.cwd, env: indexEnv });\n\n const baseExcluded = (\n await listNullSeparatedPaths(\n input.cwd,\n [\"ls-tree\", \"-r\", \"--name-only\", \"-z\", input.baseSha],\n baseEnv,\n )\n ).filter((path) => isIgnoredProjectSourcePath(path));\n\n for (const path of baseExcluded) {\n // Restore D0 into the temp index only — does not touch the working tree.\n await runGit([\"restore\", \"--source\", input.baseSha, \"--staged\", \"--\", path], {\n cwd: input.cwd,\n env: indexEnv,\n });\n }\n\n const indexExcluded = (\n await listNullSeparatedPaths(input.cwd, [\"ls-files\", \"-z\"], indexEnv)\n ).filter((path) => isIgnoredProjectSourcePath(path));\n\n const baseExcludedSet = new Set(baseExcluded);\n const toRemove = indexExcluded.filter((path) => !baseExcludedSet.has(path));\n if (toRemove.length > 0) {\n await runGit([\"rm\", \"--cached\", \"-f\", \"-q\", \"--\", ...toRemove], {\n cwd: input.cwd,\n env: indexEnv,\n });\n }\n\n const diff = await runGitBuffer([\"diff\", \"--binary\", \"--cached\", input.baseSha], {\n cwd: input.cwd,\n env: indexEnv,\n reject: false,\n });\n // Diff exit 0 = empty/no changes, 1 = changes present. Other codes are errors.\n if (diff.code !== 0 && diff.code !== 1) {\n throw new Error(\n `git diff --binary failed (exit ${diff.code}): ${diff.stderr.toString(\"utf8\")}`,\n );\n }\n\n if (diff.stdout.byteLength > PROJECT_DRAFT_DIFF_MAX_BYTES) {\n throw new ExpectedCliError(\n `Working tree diff exceeds the ${PROJECT_DRAFT_DIFF_MAX_BYTES} byte limit. ` +\n \"Reduce local changes or split them before syncing.\",\n );\n }\n\n return new Uint8Array(diff.stdout);\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {});\n }\n}\n","import { copyFile, mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { isIgnoredProjectSourcePath } from \"@keystrokehq/shared\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { resolveGitPath } from \"./compute-working-tree-diff\";\nimport { runGit } from \"./run-git\";\n\n/**\n * Create a local commit from the desired working tree (source-filtered),\n * parented by `baseSha`, without mutating the real index. Returns null when\n * the resulting tree matches `baseSha`.\n */\nexport async function commitWorkingTreeOntoBase(input: {\n cwd: string;\n baseSha: string;\n message: string;\n env?: NodeJS.ProcessEnv;\n}): Promise<string | null> {\n const baseEnv = input.env;\n const gitIndexPath = (\n await runGit([\"rev-parse\", \"--git-path\", \"index\"], { cwd: input.cwd, env: baseEnv })\n ).stdout.trim();\n const realIndexPath = resolveGitPath(input.cwd, gitIndexPath);\n\n const tempDir = await mkdtemp(join(tmpdir(), \"keystroke-draft-commit-\"));\n const tempIndexPath = join(tempDir, \"index\");\n\n try {\n await copyFile(realIndexPath, tempIndexPath);\n const indexEnv = { ...baseEnv, GIT_INDEX_FILE: tempIndexPath };\n await runGit([\"add\", \"-A\", \"--\", \".\"], { cwd: input.cwd, env: indexEnv });\n\n const baseExcluded = (\n await runGit([\"ls-tree\", \"-r\", \"--name-only\", \"-z\", input.baseSha], {\n cwd: input.cwd,\n env: baseEnv,\n })\n ).stdout\n .split(\"\\0\")\n .filter((path) => path.length > 0 && isIgnoredProjectSourcePath(path));\n\n for (const path of baseExcluded) {\n await runGit([\"restore\", \"--source\", input.baseSha, \"--staged\", \"--\", path], {\n cwd: input.cwd,\n env: indexEnv,\n });\n }\n\n const indexExcluded = (\n await runGit([\"ls-files\", \"-z\"], { cwd: input.cwd, env: indexEnv })\n ).stdout\n .split(\"\\0\")\n .filter((path) => path.length > 0 && isIgnoredProjectSourcePath(path));\n\n for (const path of indexExcluded) {\n if (baseExcluded.includes(path)) {\n continue;\n }\n await runGit([\"rm\", \"--cached\", \"-f\", \"--\", path], {\n cwd: input.cwd,\n env: indexEnv,\n reject: false,\n });\n }\n\n const tree = (await runGit([\"write-tree\"], { cwd: input.cwd, env: indexEnv })).stdout.trim();\n const baseTree = (\n await runGit([\"rev-parse\", `${input.baseSha}^{tree}`], { cwd: input.cwd, env: baseEnv })\n ).stdout.trim();\n if (tree === baseTree) {\n return null;\n }\n\n const commit = (\n await runGit([\"commit-tree\", tree, \"-p\", input.baseSha, \"-m\", input.message], {\n cwd: input.cwd,\n env: baseEnv,\n })\n ).stdout.trim();\n if (!/^[0-9a-f]{40}$/i.test(commit)) {\n throw new ExpectedCliError(\"Failed to create local draft commit\");\n }\n return commit.toLowerCase();\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { withGitCredentials } from \"./git-credential\";\nimport { runGit } from \"./run-git\";\n\n/**\n * Fetch a remote branch into a temporary ref, then pin to an exact commit SHA.\n *\n * Used by `keystroke pull` for the active published artifact revision. The\n * advertised branch tip may have moved past the published commit; we still\n * require the commit to exist and be an ancestor of (or equal to) the fetched tip.\n */\nexport async function fetchManagedRevision(input: {\n cwd: string;\n url: string;\n username: string;\n password: string;\n branch: string;\n commitSha: string;\n operationId?: string;\n /** Optional git env (e.g. managed sidecar `GIT_DIR` / `GIT_WORK_TREE`). */\n env?: NodeJS.ProcessEnv;\n}): Promise<{ temporaryRef: string; sha: string; cleanup: () => Promise<void> }> {\n const opId = input.operationId ?? randomUUID().slice(0, 8);\n const branchRef = `refs/keystroke/tmp/${opId}/branch`;\n const temporaryRef = `refs/keystroke/tmp/${opId}/revision`;\n const commitSha = input.commitSha.toLowerCase();\n const baseEnv = input.env;\n\n const cleanup = async () => {\n await runGit([\"update-ref\", \"-d\", temporaryRef], {\n cwd: input.cwd,\n env: baseEnv,\n reject: false,\n });\n await runGit([\"update-ref\", \"-d\", branchRef], {\n cwd: input.cwd,\n env: baseEnv,\n reject: false,\n });\n };\n\n try {\n await withGitCredentials(\n { username: input.username, password: input.password },\n async (credEnv) => {\n await runGit(\n [\n \"fetch\",\n \"--no-tags\",\n \"--no-write-fetch-head\",\n input.url,\n `refs/heads/${input.branch}:${branchRef}`,\n ],\n { cwd: input.cwd, env: { ...baseEnv, ...credEnv } },\n );\n },\n );\n\n const commitCheck = await runGit([\"cat-file\", \"-t\", commitSha], {\n cwd: input.cwd,\n env: baseEnv,\n reject: false,\n });\n if (commitCheck.code !== 0 || commitCheck.stdout.trim() !== \"commit\") {\n throw new ExpectedCliError(\n `Published commit ${commitSha} was not found after fetching ${input.branch}.\\n` +\n \"The active deploy revision may be unavailable from this remote.\",\n );\n }\n\n const ancestor = await runGit([\"merge-base\", \"--is-ancestor\", commitSha, branchRef], {\n cwd: input.cwd,\n env: baseEnv,\n reject: false,\n });\n if (ancestor.code !== 0) {\n throw new ExpectedCliError(\n `Published commit ${commitSha} is not on fetched branch ${input.branch}.\\n` +\n \"Refusing to pull a revision that is not reachable from the advertised branch.\",\n );\n }\n\n await runGit([\"update-ref\", temporaryRef, commitSha], { cwd: input.cwd, env: baseEnv });\n } catch (error) {\n await cleanup();\n throw error;\n }\n\n return { temporaryRef, sha: commitSha, cleanup };\n}\n\n/**\n * Fetch managed `ks/draft` into a temporary ref and pin its tip SHA (D0).\n * Credentials are scoped to the fetch via askpass and removed afterward.\n * Never pushes; never writes remotes into the local repo.\n */\nexport async function fetchManagedDraft(input: {\n cwd: string;\n url: string;\n username: string;\n password: string;\n draftBranch?: string;\n operationId?: string;\n /** Optional git env (e.g. managed sidecar `GIT_DIR` / `GIT_WORK_TREE`). */\n env?: NodeJS.ProcessEnv;\n}): Promise<{ temporaryRef: string; sha: string; cleanup: () => Promise<void> }> {\n const opId = input.operationId ?? randomUUID().slice(0, 8);\n const branch = input.draftBranch ?? \"ks/draft\";\n const temporaryRef = `refs/keystroke/tmp/${opId}/draft`;\n const baseEnv = input.env;\n\n const cleanup = async () => {\n await runGit([\"update-ref\", \"-d\", temporaryRef], {\n cwd: input.cwd,\n env: baseEnv,\n reject: false,\n });\n };\n\n try {\n await withGitCredentials(\n { username: input.username, password: input.password },\n async (credEnv) => {\n await runGit(\n [\n \"fetch\",\n \"--no-tags\",\n \"--no-write-fetch-head\",\n input.url,\n `refs/heads/${branch}:${temporaryRef}`,\n ],\n { cwd: input.cwd, env: { ...baseEnv, ...credEnv } },\n );\n },\n );\n\n const { stdout } = await runGit([\"rev-parse\", temporaryRef], {\n cwd: input.cwd,\n env: baseEnv,\n });\n const sha = stdout.trim().toLowerCase();\n return { temporaryRef, sha, cleanup };\n } catch (error) {\n await cleanup();\n throw error;\n }\n}\n","import { runGit } from \"./run-git\";\n\nexport async function mergePublishedRevisionForPull(input: {\n cwd: string;\n temporaryRef: string;\n env?: NodeJS.ProcessEnv;\n}): Promise<{ headSha: string } | { conflicted: true }> {\n const mergeResult = await runGit(\n [\"merge\", \"--no-edit\", \"--allow-unrelated-histories\", input.temporaryRef],\n { cwd: input.cwd, env: input.env, reject: false },\n );\n\n if (mergeResult.code !== 0) {\n return { conflicted: true };\n }\n\n const { stdout: headSha } = await runGit([\"rev-parse\", \"HEAD\"], {\n cwd: input.cwd,\n env: input.env,\n });\n return { headSha: headSha.trim() };\n}\n\n/**\n * Merge a fetched draft tip into the local checkout for `keystroke pull` /\n * managed draft upload before deploy.\n * Leaves conflict markers when a merge starts; distinguishes dirty-tree blocks.\n */\nexport async function mergeManagedDraftForSync(input: {\n cwd: string;\n temporaryRef: string;\n env?: NodeJS.ProcessEnv;\n}): Promise<{ headSha: string } | { conflicted: true } | { blocked: true; detail: string }> {\n const mergeResult = await runGit(\n [\"merge\", \"--no-edit\", \"--allow-unrelated-histories\", input.temporaryRef],\n { cwd: input.cwd, env: input.env, reject: false },\n );\n\n if (mergeResult.code === 0) {\n const { stdout: headSha } = await runGit([\"rev-parse\", \"HEAD\"], {\n cwd: input.cwd,\n env: input.env,\n });\n return { headSha: headSha.trim() };\n }\n\n const mergeHead = await runGit([\"rev-parse\", \"--verify\", \"MERGE_HEAD\"], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n if (mergeHead.code === 0) {\n return { conflicted: true };\n }\n\n return {\n blocked: true,\n detail: (mergeResult.stderr || mergeResult.stdout).trim(),\n };\n}\n\n/** @deprecated Prefer mergePublishedRevisionForPull — retained for existing imports. */\nexport const mergeManagedMainForPull = mergePublishedRevisionForPull;\n","import { readdir } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport { DraftConflictError } from \"@keystrokehq/sdk/platform\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { commitWorkingTreeOntoBase } from \"../git/commit-working-tree\";\nimport { computeWorkingTreeDiff } from \"../git/compute-working-tree-diff\";\nimport { withGitCredentials } from \"../git/git-credential\";\nimport {\n ensureManagedGit,\n isManagedGitOperationInProgress,\n managedGitEnv,\n} from \"../git/managed-git-env\";\nimport { fetchManagedDraft } from \"../git/managed-transport\";\nimport { mergeManagedDraftForSync } from \"../git/merge-managed-main\";\nimport { runGit } from \"../git/run-git\";\n\nexport type ManagedDraftOptions = {\n client: PlatformClient;\n projectId: string;\n targetDir: string;\n /** Wording for merge-conflict recovery (default `pull`). */\n conflictAction?: \"pull\" | \"deploy\";\n};\n\nexport type PullManagedDraftResult = {\n draftSha: string;\n bootstrapped: boolean;\n};\n\nexport type PushManagedDraftResult = {\n draftSha: string;\n /** New tip after upload; equals draftSha when there was nothing to upload. */\n commitSha: string;\n uploaded: boolean;\n /** Wall-clock ms for draft diff/commit/upload when uploaded. */\n uploadMs?: number;\n};\n\n/** True when the directory has no content besides optional `.git` / `.keystroke`. */\nasync function isBootstrapEmptyDir(dir: string): Promise<boolean> {\n try {\n const entries = await readdir(dir);\n return entries.every((entry) => entry === \".git\" || entry === \".keystroke\");\n } catch {\n return true;\n }\n}\n\nasync function hasHeadCommit(cwd: string, env: NodeJS.ProcessEnv): Promise<boolean> {\n const head = await runGit([\"rev-parse\", \"--verify\", \"HEAD\"], { cwd, env, reject: false });\n return head.code === 0 && head.stdout.trim().length > 0;\n}\n\nasync function readHeadSha(cwd: string, env: NodeJS.ProcessEnv): Promise<string | null> {\n const head = await runGit([\"rev-parse\", \"--verify\", \"HEAD\"], { cwd, env, reject: false });\n if (head.code !== 0) {\n return null;\n }\n const sha = head.stdout.trim().toLowerCase();\n return /^[0-9a-f]{40}$/.test(sha) ? sha : null;\n}\n\n/**\n * Point `main` / HEAD at the draft tip and load that tree into the index\n * without clobbering existing working-tree files. Missing draft paths are\n * filled from the index; paths that already exist on disk are left alone.\n */\nasync function attachHeadToDraftPreservingWorkTree(\n cwd: string,\n draftSha: string,\n env: NodeJS.ProcessEnv,\n): Promise<void> {\n await runGit([\"update-ref\", \"refs/heads/main\", draftSha], { cwd, env });\n await runGit([\"symbolic-ref\", \"HEAD\", \"refs/heads/main\"], { cwd, env });\n await runGit([\"read-tree\", draftSha], { cwd, env });\n\n const deleted = await runGit([\"ls-files\", \"-d\", \"-z\"], { cwd, env });\n const missing = deleted.stdout.split(\"\\0\").filter((path) => path.length > 0);\n const batchSize = 100;\n for (let i = 0; i < missing.length; i += batchSize) {\n const batch = missing.slice(i, i + batchSize);\n await runGit([\"checkout-index\", \"--\", ...batch], { cwd, env });\n }\n}\n\nasync function materializeDraftCheckout(\n cwd: string,\n temporaryRef: string,\n env: NodeJS.ProcessEnv,\n): Promise<void> {\n await runGit([\"checkout\", \"-B\", \"main\", temporaryRef], { cwd, env });\n}\n\nfunction conflictRecoveryHint(action: \"pull\" | \"deploy\"): string {\n if (action === \"pull\") {\n return \"Resolve them in your working tree, then re-run `keystroke pull`.\";\n }\n return (\n \"Resolve them in your working tree, then re-run `keystroke deploy` \" +\n \"(or `keystroke pull` first if you only need the remote draft).\"\n );\n}\n\n/**\n * Point managed `main` / HEAD at the uploaded draft tip when the object is\n * available locally (or after a fetch). Best-effort — callers pin plan/prepare\n * to the push SHA so brief remote tip lag is fine.\n */\nasync function pointLocalMainAtDraftTip(input: {\n client: PlatformClient;\n projectId: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n commitSha: string;\n}): Promise<void> {\n const commitSha = input.commitSha.toLowerCase();\n const existing = await runGit([\"cat-file\", \"-t\", commitSha], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n if (existing.code !== 0 || existing.stdout.trim() !== \"commit\") {\n const remote = await input.client.projectGit.getRemote(input.projectId);\n const fetched = await withGitCredentials(\n { username: remote.username, password: remote.password },\n async (credEnv) =>\n runGit([\"fetch\", \"--no-tags\", \"--no-write-fetch-head\", remote.url, commitSha], {\n cwd: input.cwd,\n env: { ...input.env, ...credEnv },\n reject: false,\n }),\n );\n if (fetched.code !== 0) {\n return;\n }\n }\n\n await runGit([\"update-ref\", \"refs/heads/main\", commitSha], {\n cwd: input.cwd,\n env: input.env,\n });\n await runGit([\"symbolic-ref\", \"HEAD\", \"refs/heads/main\"], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n}\n\n/**\n * Fetch/merge the shared `ks/draft` tip into the managed sidecar\n * (`.keystroke/git`) with work tree = project root. Never uploads. Never\n * touches the user's `.git` / remotes.\n */\nexport async function pullManagedDraft(\n options: ManagedDraftOptions,\n): Promise<PullManagedDraftResult> {\n const targetDir = resolve(options.targetDir);\n const bootstrapEmpty = await isBootstrapEmptyDir(targetDir);\n const { env, created } = await ensureManagedGit(targetDir);\n\n if (await isManagedGitOperationInProgress(targetDir, env)) {\n throw new ExpectedCliError(\n \"A merge, rebase, or other git operation is in progress in `.keystroke/git`. \" +\n \"Finish or abort it before continuing.\",\n );\n }\n\n const revision = await options.client.projectDraft.getRevision(options.projectId);\n const apiTip = revision.commitSha.toLowerCase();\n const localHead = await readHeadSha(targetDir, env);\n\n // Fast path: sidecar already at the remote draft tip — skip fetch/merge.\n if (localHead !== null && localHead === apiTip) {\n process.stdout.write(`Shared draft up to date (${apiTip.slice(0, 12)}).\\n`);\n return { draftSha: apiTip, bootstrapped: false };\n }\n\n const remotesBefore = (await runGit([\"remote\"], { cwd: targetDir, env, reject: false })).stdout\n .split(\"\\n\")\n .filter(Boolean);\n\n const remote = await options.client.projectGit.getRemote(options.projectId);\n const fetched = await fetchManagedDraft({\n cwd: targetDir,\n url: remote.url,\n username: remote.username,\n password: remote.password,\n draftBranch: remote.draftBranch,\n env,\n });\n\n const draftSha = fetched.sha;\n let mergeOutcome: Awaited<ReturnType<typeof mergeManagedDraftForSync>>;\n let bootstrapped = false;\n\n try {\n const needsBootstrap = created || !(await hasHeadCommit(targetDir, env));\n if (needsBootstrap) {\n bootstrapped = true;\n if (bootstrapEmpty) {\n await materializeDraftCheckout(targetDir, fetched.temporaryRef, env);\n } else {\n await attachHeadToDraftPreservingWorkTree(targetDir, draftSha, env);\n }\n process.stdout.write(\n `Initialized managed git (.keystroke/git) from shared draft (${draftSha.slice(0, 12)}).\\n`,\n );\n }\n\n mergeOutcome = await mergeManagedDraftForSync({\n cwd: targetDir,\n temporaryRef: fetched.temporaryRef,\n env,\n });\n } finally {\n await fetched.cleanup();\n }\n\n const remotesAfter = (await runGit([\"remote\"], { cwd: targetDir, env, reject: false })).stdout\n .split(\"\\n\")\n .filter(Boolean);\n if (remotesAfter.join(\"\\n\") !== remotesBefore.join(\"\\n\")) {\n throw new Error(\"Draft pull unexpectedly modified managed git remotes\");\n }\n\n if (\"conflicted\" in mergeOutcome) {\n const action = options.conflictAction ?? \"pull\";\n throw new ExpectedCliError(\n \"Merge conflicts detected while pulling the shared draft. \" +\n `${conflictRecoveryHint(action)}\\n\\n` +\n \"Conflict markers have been left in place.\\n\" +\n `Current draft tip: ${draftSha}`,\n );\n }\n\n if (\"blocked\" in mergeOutcome) {\n const action = options.conflictAction ?? \"pull\";\n const retry =\n action === \"deploy\"\n ? \"Commit or stash your changes, then re-run `keystroke deploy`.\"\n : \"Commit or stash your changes, then re-run `keystroke pull`.\";\n throw new ExpectedCliError(\n \"Could not merge the shared draft into your checkout without overwriting local edits.\\n\" +\n `${retry}\\n\\n` +\n `Current draft tip: ${draftSha}` +\n (mergeOutcome.detail ? `\\n${mergeOutcome.detail}` : \"\"),\n );\n }\n\n if (!bootstrapped) {\n process.stdout.write(`Pulled shared draft (${draftSha.slice(0, 12)}).\\n`);\n }\n\n return { draftSha, bootstrapped };\n}\n\n/**\n * Ensure the managed sidecar has merged the latest `ks/draft`, then upload\n * local working-tree changes. Code.Storage uses a Git-native draft_write push;\n * GitHub stays on the CAS patch API until a ref-scoped push proxy exists.\n */\nexport async function pushManagedDraft(\n options: ManagedDraftOptions,\n): Promise<PushManagedDraftResult> {\n const pulled = await pullManagedDraft({ ...options, conflictAction: \"deploy\" });\n const targetDir = resolve(options.targetDir);\n const env = managedGitEnv(targetDir);\n let draftSha = pulled.draftSha;\n const started = Date.now();\n\n // Tip match + clean porcelain → nothing to upload. Skip getStatus and tree staging.\n const porcelain = await runGit([\"status\", \"--porcelain\", \"--untracked-files=all\"], {\n cwd: targetDir,\n env,\n reject: false,\n });\n const dirty = porcelain.stdout\n .split(\"\\n\")\n .some((line) => line.length > 0 && !line.startsWith(\"!!\"));\n if (!dirty) {\n process.stdout.write(`Draft already up to date (${draftSha.slice(0, 12)}).\\n`);\n return { draftSha, commitSha: draftSha, uploaded: false };\n }\n\n const status = await options.client.projectGit.getStatus(options.projectId);\n const useGitPush = status.configured === true && status.repository.provider === \"code_storage\";\n\n if (useGitPush) {\n const attemptPush = async (\n baseSha: string,\n ): Promise<{ ok: true; commitSha: string } | { ok: false }> => {\n const localCommit = await commitWorkingTreeOntoBase({\n cwd: targetDir,\n baseSha,\n message: \"keystroke draft sync\",\n env,\n });\n if (localCommit == null) {\n return { ok: true, commitSha: baseSha };\n }\n\n const remote = await options.client.projectGit.getRemote(options.projectId, {\n capability: \"draft_write\",\n });\n await runGit([\"update-ref\", \"refs/heads/main\", localCommit], { cwd: targetDir, env });\n const result = await withGitCredentials(\n { username: remote.username, password: remote.password },\n async (credEnv) =>\n runGit([\"push\", remote.url, `${localCommit}:refs/heads/ks/draft`], {\n cwd: targetDir,\n env: { ...env, ...credEnv },\n reject: false,\n }),\n );\n if (result.code === 0) {\n return { ok: true, commitSha: localCommit };\n }\n if (\n /non-fast-forward|rejected|fetch first|\\[rejected\\]/i.test(\n `${result.stderr}\\n${result.stdout}`,\n )\n ) {\n return { ok: false };\n }\n throw new ExpectedCliError(`Draft push failed: ${result.stderr || result.stdout}`);\n };\n\n let outcome = await attemptPush(draftSha);\n if (!outcome.ok) {\n const retried = await pullManagedDraft({ ...options, conflictAction: \"deploy\" });\n draftSha = retried.draftSha;\n outcome = await attemptPush(draftSha);\n if (!outcome.ok) {\n throw new ExpectedCliError(\n `Draft push rejected after rebase. ${conflictRecoveryHint(\"deploy\")}`,\n );\n }\n }\n\n if (outcome.commitSha === draftSha) {\n process.stdout.write(`Draft already up to date (${draftSha.slice(0, 12)}).\\n`);\n return { draftSha, commitSha: draftSha, uploaded: false };\n }\n\n await pointLocalMainAtDraftTip({\n client: options.client,\n projectId: options.projectId,\n cwd: targetDir,\n env,\n commitSha: outcome.commitSha,\n });\n\n const uploadMs = Date.now() - started;\n process.stdout.write(\n `Uploaded draft ${outcome.commitSha.slice(0, 12)} (from ${draftSha.slice(0, 12)}) in ${uploadMs}ms.\\n`,\n );\n return {\n draftSha: outcome.commitSha,\n commitSha: outcome.commitSha,\n uploaded: true,\n uploadMs,\n };\n }\n\n const diff = await computeWorkingTreeDiff({ cwd: targetDir, baseSha: draftSha, env });\n if (diff.byteLength === 0) {\n process.stdout.write(`Draft already up to date (${draftSha.slice(0, 12)}).\\n`);\n return { draftSha, commitSha: draftSha, uploaded: false };\n }\n\n try {\n const result = await options.client.projectDraft.commitFromDiff(options.projectId, {\n expectedHeadSha: draftSha,\n diffBase64: Buffer.from(diff).toString(\"base64\"),\n });\n await pointLocalMainAtDraftTip({\n client: options.client,\n projectId: options.projectId,\n cwd: targetDir,\n env,\n commitSha: result.commitSha,\n });\n const uploadMs = Date.now() - started;\n process.stdout.write(\n `Uploaded draft ${result.commitSha.slice(0, 12)} (from ${draftSha.slice(0, 12)}) in ${uploadMs}ms.\\n`,\n );\n return {\n draftSha: result.commitSha,\n commitSha: result.commitSha,\n uploaded: true,\n uploadMs,\n };\n } catch (error) {\n if (error instanceof DraftConflictError) {\n throw new ExpectedCliError(\n `${error.message}\\n` +\n `Current draft SHA: ${error.currentHeadSha}\\n` +\n \"Your local edits were left intact. Re-run `keystroke deploy` after resolving.\",\n );\n }\n throw error;\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { mkdir, readFile, rm } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nimport { buildApp } from \"@keystrokehq/build\";\nimport {\n isAcceptableInstallExit,\n PNPM_FROZEN_INSTALL_ARGS,\n type ProjectArtifactIndex,\n type ProjectPackageManager,\n} from \"@keystrokehq/shared\";\nimport {\n artifactIndexFromModules,\n collectArtifactModules,\n moduleBlobRefsFromModules,\n type CollectedArtifactModule,\n} from \"@keystrokehq/storage\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { runGit } from \"./run-git\";\n\nexport type BuildExactCandidateResult = {\n modules: CollectedArtifactModule[];\n index: ProjectArtifactIndex;\n blobs: Array<{ hash: string; size: number }>;\n};\n\nexport type BuildExactCandidateInput = {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n candidateSha: string;\n /**\n * Project root that may already have a prior deploy dist cache.\n * Defaults to `cwd`.\n */\n depsRoot?: string;\n /**\n * Skip lint/typecheck in the build root. Hosted checkout mode already requires\n * a clean tip and agents are instructed to typecheck before deploy.\n */\n skipVerify?: boolean;\n /**\n * When true, build in `cwd` if HEAD already equals `candidateSha` (hosted\n * `ks/draft` checkout). Avoids a disposable worktree + cold install.\n */\n allowInPlace?: boolean;\n};\n\n/**\n * Persistent checkout for exact candidate builds.\n * Lives under `~/.keystroke/deploy-worktrees/` (not inside the project) so pnpm\n * does not walk up into the live package and install into the wrong tree.\n */\nexport function deployWorktreePath(depsRoot: string): string {\n const id = createHash(\"sha256\").update(resolve(depsRoot)).digest(\"hex\").slice(0, 16);\n return join(homedir(), \".keystroke\", \"deploy-worktrees\", id);\n}\n\n/** @deprecated Use {@link deployWorktreePath} — kept for test path assertions. */\nexport const DEPLOY_WORKTREE_REL = \".keystroke/deploy-worktrees\";\n\nconst LOCKFILE_NAMES = [\"pnpm-lock.yaml\", \"yarn.lock\", \"bun.lockb\", \"package-lock.json\"] as const;\nconst DEPS_FINGERPRINT_REL = join(\".keystroke\", \"deploy-deps.fingerprint\");\n/** Dist seed from the last successful deploy build (any tree). */\nconst PREVIOUS_ARTIFACT_CACHE_KEY = \"_previous\";\n\nasync function detectPackageManager(cwd: string): Promise<ProjectPackageManager> {\n try {\n await readFile(join(cwd, \"pnpm-lock.yaml\"));\n return \"pnpm\";\n } catch {\n // fall through\n }\n try {\n await readFile(join(cwd, \"yarn.lock\"));\n return \"yarn\";\n } catch {\n // fall through\n }\n try {\n await readFile(join(cwd, \"bun.lockb\"));\n return \"bun\";\n } catch {\n // fall through\n }\n return \"npm\";\n}\n\nasync function runScript(\n manager: ProjectPackageManager,\n script: string,\n cwd: string,\n timeoutMs: number,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<void> {\n const { spawn } = await import(\"node:child_process\");\n // pnpm may try to purge/reinstall modules during `run`; without a TTY it\n // aborts unless CI=true (or confirmModulesPurge=false).\n const childEnv = { ...env, CI: env.CI ?? \"true\" };\n await new Promise<void>((resolve, reject) => {\n const child = spawn(manager, [\"run\", script], {\n cwd,\n env: childEnv,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n reject(new ExpectedCliError(`${script} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString(\"utf8\");\n });\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString(\"utf8\");\n });\n child.on(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.on(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) {\n resolve();\n return;\n }\n reject(new ExpectedCliError(`${script} failed: ${stderr || stdout}`));\n });\n });\n}\n\nasync function installDeps(\n cwd: string,\n manager: ProjectPackageManager,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<void> {\n const { spawn } = await import(\"node:child_process\");\n const args =\n manager === \"pnpm\"\n ? [...PNPM_FROZEN_INSTALL_ARGS]\n : manager === \"yarn\"\n ? [\"install\", \"--frozen-lockfile\"]\n : manager === \"bun\"\n ? [\"install\", \"--frozen-lockfile\"]\n : [\"ci\"];\n const childEnv = { ...env, CI: env.CI ?? \"true\" };\n await new Promise<void>((resolve, reject) => {\n const child = spawn(manager, args, {\n cwd,\n env: childEnv,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n reject(new ExpectedCliError(`Dependency install timed out`));\n }, 15 * 60_000);\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString(\"utf8\");\n });\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString(\"utf8\");\n });\n child.on(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n child.on(\"close\", (code) => {\n clearTimeout(timer);\n const output = `${stdout}\\n${stderr}`;\n if (isAcceptableInstallExit(manager, code ?? 1, output)) {\n resolve();\n return;\n }\n reject(new ExpectedCliError(`Dependency install failed: ${stderr || stdout}`));\n });\n });\n}\n\n/**\n * Git env for commands that must run *inside* a linked worktree. Managed deploy\n * sets `GIT_DIR` / `GIT_WORK_TREE` to the sidecar; those must not leak into the\n * worktree or `git` ignores the worktree `.git` file and fails with\n * `fatal: not a git repository: '.keystroke/git'`.\n */\nfunction worktreeGitEnv(base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const env = { ...process.env, ...base };\n delete env.GIT_DIR;\n delete env.GIT_WORK_TREE;\n delete env.GIT_COMMON_DIR;\n return env;\n}\n\nfunction lockfileFingerprint(root: string): string | null {\n const hash = createHash(\"sha256\");\n let found = false;\n for (const name of LOCKFILE_NAMES) {\n const path = join(root, name);\n if (!existsSync(path)) {\n continue;\n }\n found = true;\n hash.update(name);\n hash.update(\"\\0\");\n hash.update(readFileSync(path));\n hash.update(\"\\0\");\n }\n const packageJson = join(root, \"package.json\");\n if (existsSync(packageJson)) {\n found = true;\n hash.update(\"package.json\");\n hash.update(\"\\0\");\n hash.update(readFileSync(packageJson));\n hash.update(\"\\0\");\n }\n return found ? hash.digest(\"hex\") : null;\n}\n\nfunction depsFingerprintPath(worktree: string): string {\n return join(worktree, DEPS_FINGERPRINT_REL);\n}\n\nfunction readStoredDepsFingerprint(worktree: string): string | null {\n const path = depsFingerprintPath(worktree);\n if (!existsSync(path)) {\n return null;\n }\n try {\n return readFileSync(path, \"utf8\").trim() || null;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredDepsFingerprint(worktree: string, fingerprint: string): void {\n const path = depsFingerprintPath(worktree);\n mkdirSync(join(worktree, \".keystroke\"), { recursive: true });\n writeFileSync(path, `${fingerprint}\\n`, \"utf8\");\n}\n\nfunction needsDependencyInstall(worktree: string): boolean {\n if (!existsSync(join(worktree, \"node_modules\"))) {\n return true;\n }\n const current = lockfileFingerprint(worktree);\n if (!current) {\n return true;\n }\n return current !== readStoredDepsFingerprint(worktree);\n}\n\nfunction deployArtifactCacheDir(depsRoot: string, treeSha: string): string {\n return join(depsRoot, \".keystroke\", \"cache\", \"deploy-artifacts\", treeSha.toLowerCase());\n}\n\nfunction hasBuildIndex(buildRoot: string): boolean {\n return existsSync(join(buildRoot, \"dist\", \".keystroke\", \"build-index.json\"));\n}\n\nfunction tryRestoreDeployArtifactCache(\n depsRoot: string,\n treeSha: string,\n buildRoot: string,\n): boolean {\n const cacheDir = deployArtifactCacheDir(depsRoot, treeSha);\n const cachedDist = join(cacheDir, \"dist\");\n if (!existsSync(join(cachedDist, \".keystroke\", \"build-index.json\"))) {\n return false;\n }\n const targetDist = join(buildRoot, \"dist\");\n try {\n rmSync(targetDist, { recursive: true, force: true });\n cpSync(cachedDist, targetDist, { recursive: true });\n return true;\n } catch {\n return false;\n }\n}\n\n/** Prefer an intact warm dist; else exact tree cache; else last deploy dist. */\nfunction seedDeployDist(depsRoot: string, treeSha: string, buildRoot: string): void {\n if (hasBuildIndex(buildRoot)) {\n return;\n }\n if (tryRestoreDeployArtifactCache(depsRoot, treeSha, buildRoot)) {\n return;\n }\n tryRestoreDeployArtifactCache(depsRoot, PREVIOUS_ARTIFACT_CACHE_KEY, buildRoot);\n}\n\nfunction storeDeployArtifactCache(depsRoot: string, treeSha: string, buildRoot: string): void {\n const dist = join(buildRoot, \"dist\");\n if (!existsSync(join(dist, \".keystroke\", \"build-index.json\"))) {\n return;\n }\n const write = (key: string) => {\n const cacheDir = deployArtifactCacheDir(depsRoot, key);\n rmSync(cacheDir, { recursive: true, force: true });\n cpSync(dist, join(cacheDir, \"dist\"), { recursive: true });\n };\n try {\n write(treeSha);\n write(PREVIOUS_ARTIFACT_CACHE_KEY);\n } catch {\n // Best-effort warm cache for the next deploy.\n }\n}\n\n/** Copy local route-manifest cache into the worktree when the worktree lacks one. */\nfunction trySeedRouteManifestCache(depsRoot: string, buildRoot: string): void {\n if (depsRoot === buildRoot) {\n return;\n }\n const srcKey = join(depsRoot, \".keystroke\", \"cache\", \"route-manifest.key\");\n const srcManifest = join(depsRoot, \".keystroke\", \"cache\", \"manifest\");\n if (!existsSync(srcKey) || !existsSync(srcManifest)) {\n return;\n }\n const destKey = join(buildRoot, \".keystroke\", \"cache\", \"route-manifest.key\");\n if (existsSync(destKey)) {\n return;\n }\n try {\n mkdirSync(join(buildRoot, \".keystroke\", \"cache\"), { recursive: true });\n cpSync(srcKey, destKey);\n cpSync(srcManifest, join(buildRoot, \".keystroke\", \"cache\", \"manifest\"), { recursive: true });\n } catch {\n // Best-effort.\n }\n}\n\nasync function resolveCandidateTreeSha(input: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n candidateSha: string;\n buildRoot: string;\n buildEnv: NodeJS.ProcessEnv;\n}): Promise<string> {\n const fromBuild = await runGit([\"rev-parse\", `${input.candidateSha}^{tree}`], {\n cwd: input.buildRoot,\n env: input.buildEnv,\n reject: false,\n });\n if (fromBuild.code === 0 && /^[0-9a-f]{40}$/i.test(fromBuild.stdout.trim())) {\n return fromBuild.stdout.trim().toLowerCase();\n }\n const fromCwd = await runGit([\"rev-parse\", `${input.candidateSha}^{tree}`], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n if (fromCwd.code === 0 && /^[0-9a-f]{40}$/i.test(fromCwd.stdout.trim())) {\n return fromCwd.stdout.trim().toLowerCase();\n }\n return input.candidateSha.toLowerCase();\n}\n\nasync function buildInRoot(input: {\n buildRoot: string;\n env: NodeJS.ProcessEnv;\n skipVerify: boolean;\n manager: ProjectPackageManager;\n needInstall: boolean;\n}): Promise<void> {\n if (input.needInstall) {\n await installDeps(input.buildRoot, input.manager, input.env);\n if (!existsSync(join(input.buildRoot, \"node_modules\"))) {\n throw new ExpectedCliError(\n `Dependency install finished but ${join(input.buildRoot, \"node_modules\")} is missing`,\n );\n }\n const fp = lockfileFingerprint(input.buildRoot);\n if (fp) {\n writeStoredDepsFingerprint(input.buildRoot, fp);\n }\n }\n if (!input.skipVerify) {\n await verifyProjectScripts(input.buildRoot, input.env, input.manager);\n }\n // Use this CLI's buildApp — not `pnpm run build` / the project's pinned\n // `@keystrokehq/cli`. Deploy artifacts must follow the running CLI's\n // bundling contract (e.g. inlining zod); an older project CLI can leave\n // runtime deps external and break org-worker bootstrap.\n try {\n await buildApp({ root: input.buildRoot, phase: \"deploy\", emitManifest: true });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new ExpectedCliError(`build failed: ${message}`);\n }\n}\n\n/**\n * Run project `lint` + `typecheck` in parallel (package scripts). Used by deploy\n * to verify outside the deploy worktree so it can overlap the exact build.\n */\nexport async function verifyProjectScripts(\n cwd: string,\n env: NodeJS.ProcessEnv = process.env,\n manager?: ProjectPackageManager,\n): Promise<void> {\n const resolved = manager ?? (await detectPackageManager(cwd));\n await Promise.all([\n runScript(resolved, \"lint\", cwd, 10 * 60_000, env),\n runScript(resolved, \"typecheck\", cwd, 10 * 60_000, env),\n ]);\n}\n\nasync function removeDeployWorktree(\n cwd: string,\n worktree: string,\n env?: NodeJS.ProcessEnv,\n): Promise<void> {\n await runGit([\"worktree\", \"remove\", \"--force\", worktree], {\n cwd,\n env,\n reject: false,\n }).catch(() => undefined);\n if (existsSync(worktree)) {\n await rm(worktree, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\nasync function isUsableDeployWorktree(\n worktree: string,\n cleanEnv: NodeJS.ProcessEnv,\n): Promise<boolean> {\n if (!existsSync(worktree)) {\n return false;\n }\n const head = await runGit([\"rev-parse\", \"HEAD\"], {\n cwd: worktree,\n env: cleanEnv,\n reject: false,\n });\n return head.code === 0 && /^[0-9a-f]{40}$/i.test(head.stdout.trim());\n}\n\n/**\n * Ensure the persistent deploy worktree is checked out at `candidateSha`.\n * Path is outside the project so pnpm installs into this tree, not the live one.\n * Keeps untracked `node_modules` / `dist` / `.keystroke` across resets.\n */\nasync function preparePersistentDeployWorktree(input: {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n depsRoot: string;\n candidateSha: string;\n cleanEnv: NodeJS.ProcessEnv;\n}): Promise<string> {\n const worktree = deployWorktreePath(input.depsRoot);\n await mkdir(join(homedir(), \".keystroke\", \"deploy-worktrees\"), { recursive: true });\n\n // Drop the old in-project path if present (pnpm nested wrongly into the live tree).\n const legacy = join(input.depsRoot, \".keystroke\", \"deploy-worktree\");\n if (existsSync(legacy)) {\n await removeDeployWorktree(input.cwd, legacy, input.env);\n }\n\n const resetExisting = async (): Promise<boolean> => {\n const reset = await runGit([\"reset\", \"--hard\", input.candidateSha], {\n cwd: worktree,\n env: input.cleanEnv,\n reject: false,\n });\n if (reset.code !== 0) {\n return false;\n }\n // Drop stale untracked sources; keep warm install + dist + local cache.\n await runGit([\"clean\", \"-fd\", \"-e\", \"node_modules\", \"-e\", \"dist\", \"-e\", \".keystroke\"], {\n cwd: worktree,\n env: input.cleanEnv,\n reject: false,\n });\n const head = await runGit([\"rev-parse\", \"HEAD\"], {\n cwd: worktree,\n env: input.cleanEnv,\n reject: false,\n });\n return head.code === 0 && head.stdout.trim().toLowerCase() === input.candidateSha.toLowerCase();\n };\n\n if (await isUsableDeployWorktree(worktree, input.cleanEnv)) {\n if (await resetExisting()) {\n return worktree;\n }\n await removeDeployWorktree(input.cwd, worktree, input.env);\n } else if (existsSync(worktree)) {\n await removeDeployWorktree(input.cwd, worktree, input.env);\n }\n\n const add = await runGit([\"worktree\", \"add\", \"--detach\", worktree, input.candidateSha], {\n cwd: input.cwd,\n env: input.env,\n reject: false,\n });\n if (add.code !== 0) {\n throw new ExpectedCliError(\n `Failed to checkout candidate ${input.candidateSha}: ${add.stderr || add.stdout}`,\n );\n }\n\n const head = await runGit([\"rev-parse\", \"HEAD\"], { cwd: worktree, env: input.cleanEnv });\n if (head.stdout.trim().toLowerCase() !== input.candidateSha.toLowerCase()) {\n throw new ExpectedCliError(\n `Candidate checkout HEAD mismatch: expected ${input.candidateSha}, got ${head.stdout.trim()}`,\n );\n }\n return worktree;\n}\n\n/**\n * Checkout an exact candidate SHA into the persistent deploy worktree (or reuse a\n * proven in-place checkout), install when the lockfile changed, optionally\n * lint/typecheck, and build modular dist modules.\n */\nexport async function buildExactCandidate(\n input: BuildExactCandidateInput,\n): Promise<BuildExactCandidateResult> {\n if (!/^[0-9a-f]{40}$/i.test(input.candidateSha)) {\n throw new ExpectedCliError(\"candidateSha must be a 40-character Git object id\");\n }\n\n const depsRoot = input.depsRoot ?? input.cwd;\n const cleanEnv = worktreeGitEnv();\n const skipVerify = input.skipVerify === true;\n\n if (input.allowInPlace) {\n const head = await runGit([\"rev-parse\", \"HEAD\"], {\n cwd: input.cwd,\n env: cleanEnv,\n reject: false,\n });\n if (head.code === 0 && head.stdout.trim().toLowerCase() === input.candidateSha.toLowerCase()) {\n const manager = await detectPackageManager(input.cwd);\n const treeSha = await resolveCandidateTreeSha({\n cwd: input.cwd,\n env: cleanEnv,\n candidateSha: input.candidateSha,\n buildRoot: input.cwd,\n buildEnv: cleanEnv,\n });\n seedDeployDist(depsRoot, treeSha, input.cwd);\n await buildInRoot({\n buildRoot: input.cwd,\n env: cleanEnv,\n skipVerify,\n manager,\n needInstall: needsDependencyInstall(input.cwd),\n });\n storeDeployArtifactCache(depsRoot, treeSha, input.cwd);\n const modules = collectArtifactModules(input.cwd);\n return {\n modules,\n index: artifactIndexFromModules(modules),\n blobs: moduleBlobRefsFromModules(modules),\n };\n }\n }\n\n const worktree = await preparePersistentDeployWorktree({\n cwd: input.cwd,\n env: input.env,\n depsRoot,\n candidateSha: input.candidateSha,\n cleanEnv,\n });\n\n const treeSha = await resolveCandidateTreeSha({\n cwd: input.cwd,\n env: input.env,\n candidateSha: input.candidateSha,\n buildRoot: worktree,\n buildEnv: cleanEnv,\n });\n seedDeployDist(depsRoot, treeSha, worktree);\n trySeedRouteManifestCache(depsRoot, worktree);\n\n const manager = await detectPackageManager(worktree);\n // Never symlink the live project's node_modules into the worktree — pnpm can\n // rewrite links and leave the live tree pointing at a deleted path. The\n // persistent worktree keeps its own install warm across deploys instead.\n await buildInRoot({\n buildRoot: worktree,\n env: cleanEnv,\n skipVerify,\n manager,\n needInstall: needsDependencyInstall(worktree),\n });\n storeDeployArtifactCache(depsRoot, treeSha, worktree);\n\n const modules = collectArtifactModules(worktree);\n return {\n modules,\n index: artifactIndexFromModules(modules),\n blobs: moduleBlobRefsFromModules(modules),\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { join } from \"node:path\";\n\nimport { runGit } from \"./run-git\";\n\nconst SHA_RE = /^[0-9a-f]{40}$/;\n\nexport type ManagedCandidateComposerEntry =\n | { path: string; op: \"upsert\"; mode: \"100644\" | \"100755\" | \"120000\" | \"160000\"; blobSha: string }\n | { path: string; op: \"delete\" };\n\nexport type ComposeManagedCandidateInput = {\n cwd: string;\n env?: NodeJS.ProcessEnv;\n mainSha: string;\n draftSha: string;\n mode: \"full\" | \"filtered\";\n /** Required for filtered; ignored for full */\n ops?: Array<{ path: string; op: \"upsert\" | \"delete\" }>;\n message: string;\n};\n\nexport type ComposeManagedCandidateResult = {\n candidateSha: string;\n treeSha: string;\n parentSha: string;\n recipe: {\n parentSha: string;\n treeSha: string;\n draftSha: string;\n mode: \"full\" | \"filtered\";\n entries: ManagedCandidateComposerEntry[];\n };\n};\n\nfunction assertSha(value: string, label: string): void {\n if (!SHA_RE.test(value)) {\n throw new Error(`${label} is not a valid 40-char hex SHA: ${value}`);\n }\n}\n\nexport async function composeManagedCandidate(\n input: ComposeManagedCandidateInput,\n): Promise<ComposeManagedCandidateResult> {\n const { cwd, env, mainSha, draftSha, mode, message } = input;\n\n assertSha(mainSha, \"mainSha\");\n assertSha(draftSha, \"draftSha\");\n\n const gitOpts = { cwd, env };\n\n if (mode === \"full\") {\n const { stdout: treeLine } = await runGit([\"rev-parse\", `${draftSha}^{tree}`], gitOpts);\n const treeSha = treeLine.trim();\n\n const { stdout: commitLine } = await runGit(\n [\"commit-tree\", treeSha, \"-p\", mainSha, \"-m\", message],\n gitOpts,\n );\n const candidateSha = commitLine.trim();\n\n return {\n candidateSha,\n treeSha,\n parentSha: mainSha,\n recipe: {\n parentSha: mainSha,\n treeSha,\n draftSha,\n mode: \"full\",\n entries: [],\n },\n };\n }\n\n // Filtered mode\n const ops = input.ops;\n if (!ops || ops.length === 0) {\n throw new Error(\"Filtered mode requires a non-empty ops array\");\n }\n\n const tmpIndex = join(cwd, `.git-index-tmp-${randomUUID().slice(0, 8)}`);\n const indexEnv = { ...env, GIT_INDEX_FILE: tmpIndex };\n const indexOpts = { cwd, env: indexEnv };\n\n try {\n await runGit([\"read-tree\", mainSha], indexOpts);\n\n const entries: ManagedCandidateComposerEntry[] = [];\n\n for (const op of ops) {\n if (op.op === \"delete\") {\n await runGit([\"update-index\", \"--force-remove\", \"--\", op.path], indexOpts);\n entries.push({ path: op.path, op: \"delete\" });\n } else {\n const { stdout: lsOut } = await runGit([\"ls-tree\", draftSha, \"--\", op.path], gitOpts);\n const line = lsOut.trim();\n if (!line) {\n throw new Error(`Upsert path \"${op.path}\" does not exist in draft commit ${draftSha}`);\n }\n // ls-tree output: <mode> <type> <sha>\\t<path>\n const match = line.match(/^(\\d{6}) \\S+ ([0-9a-f]{40})\\t/);\n if (!match) {\n throw new Error(`Unexpected ls-tree output for \"${op.path}\": ${line}`);\n }\n const fileMode = match[1]! as \"100644\" | \"100755\" | \"120000\" | \"160000\";\n const blobSha = match[2]!;\n\n await runGit(\n [\"update-index\", \"--add\", \"--cacheinfo\", `${fileMode},${blobSha},${op.path}`],\n indexOpts,\n );\n entries.push({ path: op.path, op: \"upsert\", mode: fileMode, blobSha });\n }\n }\n\n const { stdout: treeLine } = await runGit([\"write-tree\"], indexOpts);\n const treeSha = treeLine.trim();\n\n const { stdout: commitLine } = await runGit(\n [\"commit-tree\", treeSha, \"-p\", mainSha, \"-m\", message],\n gitOpts,\n );\n const candidateSha = commitLine.trim();\n\n return {\n candidateSha,\n treeSha,\n parentSha: mainSha,\n recipe: {\n parentSha: mainSha,\n treeSha,\n draftSha,\n mode: \"filtered\",\n entries,\n },\n };\n } finally {\n // Clean up temp index — best-effort\n const { unlink } = await import(\"node:fs/promises\");\n await unlink(tmpIndex).catch(() => {});\n }\n}\n","import { existsSync, realpathSync } from \"node:fs\";\nimport { isAbsolute, resolve } from \"node:path\";\n\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { checkoutGitEnv } from \"./managed-git-env\";\nimport { runGit } from \"./run-git\";\n\n/** Shared unpublished draft branch used by hosted platform-agent checkouts. */\nexport const HOSTED_DRAFT_BRANCH = \"ks/draft\";\n\nexport type CheckoutInspection = {\n gitRoot: string;\n branch: string | null;\n headSha: string | null;\n clean: boolean;\n operationInProgress: boolean;\n};\n\nconst OPERATION_FILES = [\n \"MERGE_HEAD\",\n \"REBASE_HEAD\",\n \"rebase-merge\",\n \"rebase-apply\",\n \"CHERRY_PICK_HEAD\",\n \"REVERT_HEAD\",\n \"BISECT_START\",\n] as const;\n\nexport async function inspectCheckout(\n cwd: string,\n env: NodeJS.ProcessEnv = checkoutGitEnv(),\n): Promise<CheckoutInspection> {\n const { stdout: gitRoot } = await runGit([\"rev-parse\", \"--show-toplevel\"], {\n cwd,\n env,\n reject: false,\n });\n\n const resolvedRoot = gitRoot.trim() || cwd;\n\n let branch: string | null = null;\n const branchResult = await runGit([\"symbolic-ref\", \"--short\", \"HEAD\"], {\n cwd: resolvedRoot,\n env,\n reject: false,\n });\n if (branchResult.code === 0 && branchResult.stdout.trim()) {\n branch = branchResult.stdout.trim();\n }\n\n let headSha: string | null = null;\n const headResult = await runGit([\"rev-parse\", \"HEAD\"], {\n cwd: resolvedRoot,\n env,\n reject: false,\n });\n if (headResult.code === 0 && headResult.stdout.trim()) {\n headSha = headResult.stdout.trim();\n }\n\n const statusResult = await runGit([\"status\", \"--porcelain\", \"--untracked-files=all\"], {\n cwd: resolvedRoot,\n env,\n reject: false,\n });\n const nonIgnoredLines = statusResult.stdout\n .split(\"\\n\")\n .filter((line) => line.length > 0 && !line.startsWith(\"!!\"));\n const clean = nonIgnoredLines.length === 0;\n\n let operationInProgress = false;\n for (const file of OPERATION_FILES) {\n const result = await runGit([\"rev-parse\", \"--git-path\", file], {\n cwd: resolvedRoot,\n env,\n reject: false,\n });\n if (result.code !== 0) {\n continue;\n }\n const gitPathRel = result.stdout.trim();\n if (!gitPathRel) {\n continue;\n }\n const gitPath = isAbsolute(gitPathRel) ? gitPathRel : resolve(resolvedRoot, gitPathRel);\n if (existsSync(gitPath)) {\n operationInProgress = true;\n break;\n }\n }\n\n return {\n gitRoot: resolvedRoot,\n branch,\n headSha,\n clean,\n operationInProgress,\n };\n}\n\nfunction realResolve(p: string): string {\n try {\n return realpathSync(resolve(p));\n } catch {\n return resolve(p);\n }\n}\n\nexport async function assertDeployableCheckout(\n projectRoot: string,\n env: NodeJS.ProcessEnv = checkoutGitEnv(),\n): Promise<CheckoutInspection> {\n const resolvedProjectRoot = realResolve(projectRoot);\n\n let inspection: CheckoutInspection;\n try {\n inspection = await inspectCheckout(resolvedProjectRoot, env);\n } catch {\n throw new ExpectedCliError(\n \"Not a git repository. Run `git init` and make an initial commit first.\",\n );\n }\n\n if (realResolve(inspection.gitRoot) !== resolvedProjectRoot) {\n throw new ExpectedCliError(\n `Git root (${inspection.gitRoot}) does not match project root (${resolvedProjectRoot}). ` +\n \"The project must be at the root of its git repository.\",\n );\n }\n\n if (!inspection.branch) {\n throw new ExpectedCliError(\n \"HEAD is detached. Check out a branch before deploying: `git checkout <branch>`\",\n );\n }\n\n if (!inspection.headSha) {\n throw new ExpectedCliError(\n \"No commits found. Make an initial commit before deploying: `git add . && git commit -m 'initial'`\",\n );\n }\n\n if (!inspection.clean) {\n throw new ExpectedCliError(\n \"Working tree has uncommitted changes. Commit or stash them before deploying:\\n\" +\n \" git add . && git commit -m 'your message'\",\n );\n }\n\n if (inspection.operationInProgress) {\n throw new ExpectedCliError(\n \"A merge, rebase, or other git operation is in progress. \" +\n \"Finish or abort it before deploying.\",\n );\n }\n\n return inspection;\n}\n\n/**\n * Hosted platform-agent checkouts must be a clean, exact tip of `ks/draft`.\n * Optionally verify HEAD against a server-pinned draft SHA.\n */\nexport async function assertHostedCheckoutDeployable(\n projectRoot: string,\n options: {\n env?: NodeJS.ProcessEnv;\n expectedDraftSha?: string;\n } = {},\n): Promise<CheckoutInspection> {\n const env = options.env ?? checkoutGitEnv();\n const inspection = await assertDeployableCheckout(projectRoot, env);\n\n if (inspection.branch !== HOSTED_DRAFT_BRANCH) {\n throw new ExpectedCliError(\n `Hosted deploy requires branch \\`${HOSTED_DRAFT_BRANCH}\\` ` +\n `(current: ${inspection.branch ?? \"detached\"}).`,\n );\n }\n\n if (options.expectedDraftSha) {\n assertCheckoutMatchesDraft(inspection, options.expectedDraftSha);\n }\n\n return inspection;\n}\n\nexport function assertCheckoutMatchesDraft(\n inspection: CheckoutInspection,\n expectedDraftSha: string,\n): void {\n const head = inspection.headSha?.toLowerCase() ?? \"\";\n const expected = expectedDraftSha.toLowerCase();\n if (!/^[0-9a-f]{40}$/.test(expected)) {\n throw new ExpectedCliError(`Invalid draft SHA: ${expectedDraftSha}`);\n }\n if (head !== expected) {\n throw new ExpectedCliError(\n `Hosted checkout HEAD (${head || \"unknown\"}) does not match draft tip ${expected}. ` +\n \"Sync the session workspace to ks/draft and retry.\",\n );\n }\n}\n","import { assertPublicHttpUrl, PublicHttpUrlError } from \"@keystrokehq/mcp\";\n\nimport type { ManagedDeployPreflight } from \"../deploy/managed-preflight\";\n\n/** Format elapsed deploy wall time for the success line. */\nexport function formatDeployDuration(ms: number): string {\n const seconds = Math.max(0, ms) / 1000;\n return `${seconds.toFixed(1)}s`;\n}\n\n/**\n * True for hosts that are not useful on CLI stdout (private / loopback / link-local).\n * Reuses the MCP SSRF host classifier so deploy URL filtering stays in sync.\n */\nexport function isPrivateDeployBaseUrl(baseUrl: string): boolean {\n try {\n assertPublicHttpUrl(baseUrl);\n return false;\n } catch (error) {\n if (error instanceof PublicHttpUrlError) {\n return true;\n }\n throw error;\n }\n}\n\n/** Short default progress line after local preflight. */\nexport function formatPlanProgress(plan: ManagedDeployPreflight): string {\n const fileCount = plan.changedPaths.length;\n const files = fileCount === 1 ? \"1 file changed\" : `${fileCount} files changed`;\n const lines = [`Deploying (${plan.mode}) — ${files}`];\n\n if (plan.mode === \"filtered\") {\n if (plan.requestedResourceKeys.length > 0) {\n lines.push(` Requested: ${plan.requestedResourceKeys.join(\", \")}`);\n }\n if (plan.impactedResourceKeys.length > 0) {\n lines.push(` Also rebuilding from main: ${plan.impactedResourceKeys.sort().join(\", \")}`);\n }\n if (plan.impactCompleteness === \"unknown\") {\n lines.push(\" Impact completeness: unknown (additional resources may be affected)\");\n }\n for (const warning of plan.warnings) {\n lines.push(` Warning: ${warning}`);\n }\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\n/** Full plan dump for `--verbose` (pins, paths, expansions). */\nexport function formatPlanSummary(plan: ManagedDeployPreflight): string {\n const lines = [\n `Pinned main (M0): ${plan.mainSha}`,\n `Pinned draft (D0): ${plan.draftSha}`,\n `Mode: ${plan.mode}`,\n ];\n if (\"requestedResourceKeys\" in plan && plan.requestedResourceKeys.length > 0) {\n lines.push(`Requested: ${plan.requestedResourceKeys.join(\", \")}`);\n }\n if (\"impactedResourceKeys\" in plan && plan.impactedResourceKeys.length > 0) {\n lines.push(`Impacted (rebuild from main): ${plan.impactedResourceKeys.join(\", \")}`);\n }\n if (\"resourceKeys\" in plan && plan.resourceKeys.length > 0) {\n lines.push(`Rebuild set: ${plan.resourceKeys.join(\", \")}`);\n }\n if (\"impactCompleteness\" in plan && plan.impactCompleteness === \"unknown\") {\n lines.push(\"Impact completeness: unknown (additional resources may be affected)\");\n }\n if (\"warnings\" in plan && plan.warnings.length > 0) {\n lines.push(\"Warnings:\");\n for (const warning of plan.warnings) {\n lines.push(` - ${warning}`);\n }\n }\n if (\"expansions\" in plan && plan.expansions.length > 0) {\n lines.push(\"Impacts:\");\n for (const expansion of plan.expansions) {\n lines.push(\n ` - ${expansion.resourceKey}: ${expansion.reason}` +\n (expansion.sharedInputs.length\n ? ` (${expansion.sharedInputs.slice(0, 3).join(\", \")}${expansion.sharedInputs.length > 3 ? \", …\" : \"\"})`\n : \"\"),\n );\n }\n }\n if (plan.mode === \"blocked\") {\n lines.push(\n `Blocked (${plan.requireFull?.code ?? \"unknown\"}): ${plan.requireFull?.reason ?? \"filtered deploy not safe\"}`,\n );\n }\n if (plan.changedPaths.length > 0) {\n const preview = plan.changedPaths.slice(0, 8).join(\", \");\n lines.push(\n `Changed paths (${plan.changedPaths.length}): ${preview}${plan.changedPaths.length > 8 ? \", …\" : \"\"}`,\n );\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport { PlatformError } from \"@keystrokehq/sdk/platform\";\nimport { ManagedDeployResourceKeySchema, type ManagedDeployResourceKey } from \"@keystrokehq/shared\";\nimport { confirm as defaultConfirm } from \"@inquirer/prompts\";\nimport type { Command } from \"commander\";\n\nimport { createCliConfig, getWebUrl } from \"../config\";\nimport { assertPortableProjectDependencies } from \"../deploy/assert-portable-dependencies\";\nimport {\n managedDeployNeedsImpactAcceptance,\n resolveManagedDeployPreflight,\n type ManagedDeployPreflight,\n} from \"../deploy/managed-preflight\";\nimport { pushManagedDraft } from \"../drafts/managed-draft\";\nimport { ExpectedCliError } from \"../errors/expected-cli-error\";\nimport { formatCliError, isUnreachableServerError } from \"../errors/format-cli-error\";\nimport { buildExactCandidate, verifyProjectScripts } from \"../git/build-exact-candidate\";\nimport { composeManagedCandidate } from \"../git/compose-managed-candidate\";\nimport { resolveCommitTreeSha } from \"../git/diff-commit-trees\";\nimport { withGitCredentials } from \"../git/git-credential\";\nimport {\n assertCheckoutMatchesDraft,\n assertHostedCheckoutDeployable,\n} from \"../git/inspect-checkout\";\nimport {\n ensureManagedGit,\n managedGitEnv,\n resolveDeployGitContext,\n type DeployGitContext,\n} from \"../git/managed-git-env\";\nimport { runGit } from \"../git/run-git\";\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 { ensureSdkCurrent } from \"../update/ensure-sdk-current\";\nimport {\n formatDeployDuration,\n formatPlanProgress,\n formatPlanSummary,\n isPrivateDeployBaseUrl,\n} from \"./deploy-output\";\n\n/**\n * Poll aggressively at first — sticky loads often finish in well under 2s.\n * The 120s budget still matches one org-runtime health wait.\n */\nconst POLL_INTERVAL_MS = 250;\nconst DEPLOY_TIMEOUT_MS = 120_000;\n/** Keep the managed deploy lease alive while packaging/uploading. */\nconst DEPLOY_LEASE_HEARTBEAT_MS = 30_000;\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\nconst NON_INTERACTIVE_CONFIRM_HINT =\n \"Pass --accept-impact to accept the current filtered deploy impact, or run interactively in a TTY.\";\n\nfunction asExpectedAuthoringOrNetworkError(error: unknown): unknown {\n if (!(error instanceof Error)) {\n return error;\n }\n\n if (error instanceof PlatformError) {\n if (error.status === 503 && /git provider is not configured/i.test(error.message)) {\n return new ExpectedCliError(\n \"Project git is not configured on this platform. Managed deploy requires a project git provider.\",\n );\n }\n if (error.status === 409) {\n return new ExpectedCliError(error.message);\n }\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/i.test(combined)\n ) {\n return new ExpectedCliError(ARTIFACT_STORAGE_NETWORK_MESSAGE);\n }\n\n return error;\n}\n\ntype DeployOptions = {\n dir: string;\n projectId: string;\n filter?: string[];\n /** Explicitly accept the current filtered deploy impact. */\n acceptImpact?: boolean;\n /** Print phase timings, pin SHAs, and bundler-adjacent detail. */\n verbose?: boolean;\n /** Injectable for tests. Defaults to `process.stdin.isTTY`. */\n isInteractive?: boolean;\n /** Injectable for tests. Defaults to an interactive confirm prompt. */\n confirm?: (message: string) => Promise<boolean>;\n};\n\nasync function sleep(ms: number): Promise<void> {\n await new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nasync function withDeployHeartbeat<T>(input: {\n client: PlatformClient;\n projectId: string;\n artifactId: string;\n run: (assertLease: () => void) => Promise<T>;\n}): Promise<T> {\n let leaseError: unknown;\n const timer = setInterval(() => {\n void input.client.projectGit\n .heartbeatDeploy(input.projectId, { artifactId: input.artifactId })\n .catch((error: unknown) => {\n if (error instanceof PlatformError && error.status === 409) {\n leaseError = error;\n }\n });\n }, DEPLOY_LEASE_HEARTBEAT_MS);\n timer.unref();\n const assertLease = () => {\n if (leaseError) {\n throw leaseError;\n }\n };\n try {\n return await input.run(assertLease);\n } finally {\n clearInterval(timer);\n }\n}\n\nfunction parseManagedFilter(filter: string[] | undefined): ManagedDeployResourceKey[] | undefined {\n if (!filter?.length) {\n return undefined;\n }\n const keys: ManagedDeployResourceKey[] = [];\n for (const entry of filter) {\n const parsed = ManagedDeployResourceKeySchema.safeParse(entry);\n if (!parsed.success) {\n throw new ExpectedCliError(\n `Invalid --filter \"${entry}\". Use exact resource keys like workflows/ping or agents/support.`,\n );\n }\n keys.push(parsed.data);\n }\n return keys;\n}\n\nfunction confirmationMessage(plan: ManagedDeployPreflight & { mode: \"filtered\" }): string {\n if (plan.impactCompleteness === \"unknown\") {\n return (\n \"Deploy impact may be incomplete — additional resources could be affected.\\n\" +\n \"Proceed with this managed deploy?\"\n );\n }\n if (plan.impactedResourceKeys.length > 0 || plan.expansions.length > 0) {\n const impacted = plan.impactedResourceKeys.sort().join(\", \");\n const reasons = plan.expansions\n .map((expansion) => ` - ${expansion.resourceKey}: ${expansion.reason}`)\n .join(\"\\n\");\n return (\n `Deploy will rebuild additional resources from main (their draft edits stay out):\\n ${impacted}\\n` +\n (reasons ? `${reasons}\\n` : \"\") +\n \"Proceed with this managed deploy?\"\n );\n }\n return \"Proceed with this managed deploy?\";\n}\n\nfunction isStaleDeployPlanError(error: unknown): boolean {\n return (\n error instanceof PlatformError && error.status === 409 && /stale|moved|pin/i.test(error.message)\n );\n}\n\n/**\n * Confirm filtered impact. `--accept-impact` accepts the current local\n * preflight; interactive TTY prompts; non-TTY fails fast.\n */\nasync function confirmManagedPlan(\n plan: ManagedDeployPreflight,\n options: {\n acceptImpact: boolean;\n interactive: boolean;\n confirm: (message: string) => Promise<boolean>;\n },\n): Promise<void> {\n if (!managedDeployNeedsImpactAcceptance(plan)) {\n return;\n }\n if (options.acceptImpact) {\n return;\n }\n if (options.interactive && plan.mode === \"filtered\") {\n const ok = await options.confirm(confirmationMessage(plan));\n if (!ok) {\n throw new ExpectedCliError(\"Deploy cancelled\");\n }\n return;\n }\n if (plan.mode === \"filtered\") {\n const filters = plan.requestedResourceKeys.map((key) => `--filter ${key}`).join(\" \");\n throw new ExpectedCliError(\n `Impacted resources require confirmation. Retry with: keystroke deploy ${filters} --accept-impact`,\n );\n }\n throw new ExpectedCliError(NON_INTERACTIVE_CONFIRM_HINT);\n}\n\nasync function pollProjectActive(\n client: PlatformClient,\n projectId: string,\n options: { artifactId?: string; verbose?: boolean } = {},\n): Promise<{ baseUrl?: string | null }> {\n const deadline = Date.now() + DEPLOY_TIMEOUT_MS;\n const requestedArtifactId = options.artifactId;\n while (Date.now() < deadline) {\n const current = await client.projects.get(projectId);\n\n if (current.status === \"failed\") {\n const lastError = current.lastError ?? \"Project runtime failed\";\n const unpackHint = /not in gzip|Expected gzip tarball|tar: Child returned/i.test(lastError)\n ? \" Worker tried to unpack a non-tarball artifact — check modular index.json vs legacy .tgz and runtime dual-read.\"\n : \"\";\n throw new Error(`${lastError}${unpackHint}`);\n }\n\n // An older active artifact must not end polling while this deploy is pending.\n if (\n current.status === \"active\" &&\n (!requestedArtifactId || current.activeArtifactId === requestedArtifactId)\n ) {\n if (options.verbose) {\n process.stdout.write(`Project active${current.baseUrl ? `: ${current.baseUrl}` : \"\"}\\n`);\n }\n return { baseUrl: current.baseUrl };\n }\n\n await sleep(POLL_INTERVAL_MS);\n }\n\n if (requestedArtifactId) {\n throw new ExpectedCliError(\n `Timed out after ${DEPLOY_TIMEOUT_MS}ms waiting for artifact ${requestedArtifactId} to become active. ` +\n \"Re-check with `keystroke projects get` \" +\n \"(status starting means still deploying; status failed includes the runtime error).\",\n );\n }\n\n throw new ExpectedCliError(\n `Timed out after ${DEPLOY_TIMEOUT_MS}ms waiting for the project to become active. ` +\n \"Re-check with `keystroke projects get` \" +\n \"(status starting means still deploying; status failed includes the runtime error).\",\n );\n}\n\nasync function runManagedDeploy(\n client: PlatformClient,\n config: ReturnType<typeof createCliConfig>,\n options: DeployOptions,\n): Promise<void> {\n const deployStarted = Date.now();\n const root = resolveProjectRoot(options.dir);\n await assertPortableProjectDependencies(root);\n const verbose = options.verbose === true;\n\n const phase = (label: string, started: number) => {\n if (!verbose) {\n return;\n }\n process.stdout.write(` ${label}: ${Date.now() - started}ms\\n`);\n };\n\n const writePlan = (activePlan: ManagedDeployPreflight) => {\n if (verbose) {\n process.stdout.write(formatPlanSummary(activePlan));\n return;\n }\n if (activePlan.mode === \"full\" || activePlan.mode === \"filtered\") {\n process.stdout.write(formatPlanProgress(activePlan));\n }\n };\n\n const gitContext = await resolveDeployGitContext(root);\n\n // Start lint/typecheck immediately so they overlap draft sync + plan + prepare.\n // Full deploys reuse this promise; no_op/blocked ignore failures.\n const gatesStarted = Date.now();\n let gatesMs = 0;\n const earlyGatesPromise =\n gitContext.kind === \"sidecar\"\n ? verifyProjectScripts(root).then(\n () => {\n gatesMs = Date.now() - gatesStarted;\n },\n (error: unknown) => {\n gatesMs = Date.now() - gatesStarted;\n throw error;\n },\n )\n : Promise.resolve();\n\n const remotePromise = client.projectGit.getRemote(options.projectId);\n\n const draftStarted = Date.now();\n const draftSha = await resolveManagedDeployDraftSha({\n client,\n projectId: options.projectId,\n root,\n gitContext,\n verbose,\n });\n phase(\"draft sync\", draftStarted);\n\n const filter = parseManagedFilter(options.filter);\n const acceptImpact = options.acceptImpact === true;\n const interactive = options.isInteractive ?? Boolean(process.stdin.isTTY);\n const confirmFn =\n options.confirm ??\n (async (message: string) =>\n defaultConfirm({\n message,\n default: false,\n }));\n\n const remote = await remotePromise;\n const planStarted = Date.now();\n let plan = await resolveManagedDeployPreflight({\n cwd: root,\n draftSha,\n remote,\n env: gitContext.env,\n ...(filter ? { filter } : {}),\n });\n phase(\"plan\", planStarted);\n writePlan(plan);\n\n if (plan.mode === \"no_op\") {\n void earlyGatesPromise.catch(() => undefined);\n process.stdout.write(\"Nothing to deploy — draft matches main.\\n\");\n return;\n }\n\n if (plan.mode === \"blocked\") {\n void earlyGatesPromise.catch(() => undefined);\n throw new ExpectedCliError(\n `Filtered deploy is blocked (${plan.requireFull?.code ?? \"blocked\"}): ${\n plan.requireFull?.reason ?? \"selected source delta cannot be proven\"\n }\\n` +\n \"Fix the draft selection / repository state, or run an explicit full deploy without --filter.\",\n );\n }\n\n await confirmManagedPlan(plan, { acceptImpact, interactive, confirm: confirmFn });\n\n const runTrusted = async (\n activePlan: ManagedDeployPreflight & { mode: \"full\" | \"filtered\" },\n ): Promise<string> => {\n const prepareRequest =\n activePlan.mode === \"full\"\n ? {\n mainSha: activePlan.mainSha,\n draftSha: activePlan.draftSha,\n mode: \"full\" as const,\n }\n : {\n mainSha: activePlan.mainSha,\n draftSha: activePlan.draftSha,\n mode: \"filtered\" as const,\n candidateOps: activePlan.candidateOps,\n requestedResourceKeys: activePlan.requestedResourceKeys,\n resourceKeys: activePlan.resourceKeys,\n impactCompleteness: activePlan.impactCompleteness,\n acceptImpact: managedDeployNeedsImpactAcceptance(activePlan),\n };\n const prepareStarted = Date.now();\n const prepared = await client.projectGit.prepareDeploy(options.projectId, prepareRequest);\n phase(\"prepare\", prepareStarted);\n\n try {\n return await withDeployHeartbeat({\n client,\n projectId: options.projectId,\n artifactId: prepared.artifact.id,\n run: async (assertLease) => {\n const gitEnv = await resolveTrustedDeployGitEnv({\n root,\n gitContext,\n preparedDraftSha: prepared.draftSha,\n });\n\n const composeStarted = Date.now();\n const composed = await composeManagedCandidate({\n cwd: root,\n env: gitEnv,\n mainSha: prepared.mainSha,\n draftSha: prepared.draftSha,\n mode: prepared.mode,\n ops: prepared.candidateOps ?? undefined,\n message: `keystroke deploy candidate ${prepared.artifact.id}`,\n });\n phase(\"compose candidate\", composeStarted);\n\n const draftTreeSha = await resolveCommitTreeSha({\n cwd: root,\n env: gitEnv,\n commitSha: prepared.draftSha,\n });\n const candidateTreeSha = await resolveCommitTreeSha({\n cwd: root,\n env: gitEnv,\n commitSha: composed.candidateSha,\n });\n if (prepared.mode === \"full\" && draftTreeSha !== candidateTreeSha) {\n throw new ExpectedCliError(\n \"Full-mode candidate tree must equal pinned draft tree (local check failed)\",\n );\n }\n\n assertLease();\n // Full mode: reuse early root gates (started before draft sync).\n // Filtered mode builds a different tree — verify inside the worktree.\n const hostedCheckout = gitContext.kind === \"checkout\";\n const verifyOutside = hostedCheckout || prepared.mode === \"full\";\n\n let publishMs = 0;\n let buildMs = 0;\n let publishedCandidateSha = composed.candidateSha;\n\n const gatesPromise =\n verifyOutside && !hostedCheckout\n ? earlyGatesPromise\n : Promise.resolve().then(() => {\n gatesMs = 0;\n });\n\n if (!verbose) {\n process.stdout.write(\"Building…\\n\");\n }\n\n const publishStarted = Date.now();\n const publishPromise = (async () => {\n if (prepared.publishMode === \"git_push\") {\n const writeRemote = prepared.candidateWriteRemote;\n if (!writeRemote) {\n throw new ExpectedCliError(\n \"Prepare response missing candidateWriteRemote for git_push\",\n );\n }\n await withGitCredentials(\n { username: writeRemote.username, password: writeRemote.password },\n async (credEnv) => {\n const pushed = await runGit(\n [\n \"push\",\n writeRemote.url,\n `${composed.candidateSha}:refs/heads/${prepared.candidateRef}`,\n ],\n { cwd: root, env: { ...gitEnv, ...credEnv }, reject: false },\n );\n if (pushed.code !== 0) {\n throw new ExpectedCliError(\n `Candidate push failed: ${pushed.stderr || pushed.stdout}`,\n );\n }\n },\n );\n const published = await client.projectGit.publishDeployCandidate(options.projectId, {\n artifactId: prepared.artifact.id,\n candidateSha: composed.candidateSha,\n recipe: composed.recipe,\n draftTreeSha,\n candidateTreeSha,\n });\n publishedCandidateSha = published.candidateSha;\n } else {\n const published = await client.projectGit.publishDeployCandidate(options.projectId, {\n artifactId: prepared.artifact.id,\n recipe: composed.recipe,\n draftTreeSha,\n candidateTreeSha,\n });\n publishedCandidateSha = published.candidateSha;\n await withGitCredentials(\n { username: remote.username, password: remote.password },\n async (credEnv) => {\n await runGit(\n [\n \"fetch\",\n \"--no-tags\",\n \"--no-write-fetch-head\",\n remote.url,\n publishedCandidateSha,\n ],\n { cwd: root, env: { ...gitEnv, ...credEnv }, reject: false },\n );\n },\n );\n }\n publishMs = Date.now() - publishStarted;\n })();\n\n const buildStarted = Date.now();\n const buildPromise = (async () => {\n const result = await buildExactCandidate({\n cwd: root,\n env: gitEnv,\n candidateSha: composed.candidateSha,\n depsRoot: root,\n skipVerify: verifyOutside,\n allowInPlace: hostedCheckout && prepared.mode === \"full\",\n });\n buildMs = Date.now() - buildStarted;\n return result;\n })();\n\n try {\n await Promise.all([gatesPromise, publishPromise, buildPromise]);\n } catch (error) {\n await Promise.allSettled([gatesPromise, publishPromise, buildPromise]);\n throw error;\n }\n if (verbose) {\n process.stdout.write(` publish candidate: ${publishMs}ms\\n`);\n if (gatesMs > 0) {\n process.stdout.write(` gates: ${gatesMs}ms\\n`);\n }\n }\n\n let built = await buildPromise;\n if (publishedCandidateSha.toLowerCase() !== composed.candidateSha.toLowerCase()) {\n const publishedTreeSha = await resolveCommitTreeSha({\n cwd: root,\n env: gitEnv,\n commitSha: publishedCandidateSha,\n });\n if (publishedTreeSha !== candidateTreeSha) {\n const rebuildStarted = Date.now();\n built = await buildExactCandidate({\n cwd: root,\n env: gitEnv,\n candidateSha: publishedCandidateSha,\n depsRoot: root,\n skipVerify: verifyOutside,\n allowInPlace: false,\n });\n buildMs += Date.now() - rebuildStarted;\n }\n }\n if (verbose) {\n process.stdout.write(` build: ${buildMs}ms\\n`);\n }\n\n assertLease();\n if (!verbose) {\n process.stdout.write(\"Uploading…\\n\");\n }\n const uploadStarted = Date.now();\n const renewed = await client.projectGit.renewDeployUpload(options.projectId, {\n artifactId: prepared.artifact.id,\n blobs: built.blobs,\n });\n const bytesByHash = new Map(built.modules.map((mod) => [mod.hash, mod.bytes] as const));\n await Promise.all(\n renewed.uploads.map(async (upload) => {\n const body = bytesByHash.get(upload.hash);\n if (!body) {\n throw new Error(`Missing bytes for module blob ${upload.hash}`);\n }\n const uploadResponse = await fetch(upload.url, {\n method: \"PUT\",\n body,\n headers: { \"Content-Type\": \"application/octet-stream\" },\n });\n if (!uploadResponse.ok) {\n throw new Error(\n `Module upload failed (${uploadResponse.status}) for ${upload.hash}`,\n );\n }\n }),\n );\n phase(\"upload\", uploadStarted);\n\n assertLease();\n const completeStarted = Date.now();\n const completed = await client.projectGit.completeDeployArtifact(options.projectId, {\n artifactId: prepared.artifact.id,\n index: built.index,\n });\n phase(\"complete\", completeStarted);\n if (verbose) {\n process.stdout.write(`Deploy ${completed.artifact.id} started (${completed.mode})\\n`);\n }\n return completed.artifact.id;\n },\n });\n } catch (error) {\n await client.projectGit\n .cancelDeploy(options.projectId, { artifactId: prepared.artifact.id })\n .catch(() => undefined);\n throw error;\n }\n };\n\n let artifactId: string;\n try {\n artifactId = await runTrusted(plan);\n } catch (error) {\n if (!isStaleDeployPlanError(error)) {\n throw error;\n }\n\n process.stdout.write(\"Deploy pins moved — recomputing local preflight once…\\n\");\n plan = await resolveManagedDeployPreflight({\n cwd: root,\n draftSha,\n remote,\n env: gitContext.env,\n ...(filter ? { filter } : {}),\n });\n writePlan(plan);\n\n if (plan.mode === \"no_op\") {\n process.stdout.write(\"Nothing to deploy — draft matches main.\\n\");\n return;\n }\n\n if (plan.mode === \"blocked\") {\n throw new ExpectedCliError(\n `Filtered deploy is blocked (${plan.requireFull.code}): ${plan.requireFull.reason}`,\n );\n }\n\n await confirmManagedPlan(plan, { acceptImpact, interactive, confirm: confirmFn });\n\n artifactId = await runTrusted(plan);\n }\n\n if (!verbose) {\n process.stdout.write(\"Activating…\\n\");\n }\n const healthStarted = Date.now();\n const active = await pollProjectActive(client, options.projectId, { artifactId, verbose });\n phase(\"health/promotion\", healthStarted);\n if (verbose) {\n process.stdout.write(`CLI→active: ${Date.now() - deployStarted}ms\\n`);\n } else {\n process.stdout.write(`Deployed in ${formatDeployDuration(Date.now() - deployStarted)}\\n`);\n if (active.baseUrl && !isPrivateDeployBaseUrl(active.baseUrl)) {\n process.stdout.write(`${active.baseUrl}\\n`);\n }\n }\n}\n\n/** @internal Exported for unit tests. */\nexport async function resolveManagedDeployDraftSha(input: {\n client: PlatformClient;\n projectId: string;\n root: string;\n gitContext: DeployGitContext;\n verbose?: boolean;\n}): Promise<string> {\n if (input.gitContext.kind === \"sidecar\") {\n const pushed = await pushManagedDraft({\n client: input.client,\n projectId: input.projectId,\n targetDir: input.root,\n });\n return pushed.commitSha;\n }\n\n const inspection = await assertHostedCheckoutDeployable(input.root, {\n env: input.gitContext.env,\n });\n const revision = await input.client.projectDraft.getRevision(input.projectId);\n assertCheckoutMatchesDraft(inspection, revision.commitSha);\n if (input.verbose) {\n process.stdout.write(\n `Hosted checkout ready (${revision.commitSha.slice(0, 12)} on ks/draft).\\n`,\n );\n }\n return revision.commitSha.toLowerCase();\n}\n\n/** @internal Exported for unit tests. */\nexport async function resolveTrustedDeployGitEnv(input: {\n root: string;\n gitContext: DeployGitContext;\n preparedDraftSha: string;\n}): Promise<NodeJS.ProcessEnv> {\n if (input.gitContext.kind === \"sidecar\") {\n await ensureManagedGit(input.root);\n return managedGitEnv(input.root);\n }\n\n await assertHostedCheckoutDeployable(input.root, {\n env: input.gitContext.env,\n expectedDraftSha: input.preparedDraftSha,\n });\n return input.gitContext.env;\n}\n\nexport async function runDeploy(options: DeployOptions): Promise<void> {\n if (options.acceptImpact && !options.filter?.length) {\n throw new ExpectedCliError(\"--accept-impact requires at least one --filter\");\n }\n const root = resolveProjectRoot(options.dir);\n await ensureSdkCurrent(root);\n\n const config = createCliConfig();\n await resolveActiveOrganization(config, root);\n const client = createCliPlatformClient(config);\n // Resolve project (validates access) before managed deploy. pushManagedDraft\n // provisions the remote repository lazily via getRevision / getRemote.\n await client.projects.get(options.projectId);\n await runManagedDeploy(client, config, options);\n}\n\nexport function registerDeployCommand(program: Command): void {\n program\n .command(\"deploy\")\n .description(\"Deploy the project via managed Git (draft sync, local analyze/build, cutover)\")\n .option(\"--dir <path>\", \"Project directory\", process.cwd())\n .option(\n \"--filter <entry>\",\n \"Deploy only matching workflow/agent keys (repeatable; e.g. workflows/ping)\",\n (value: string, previous: string[]) => [...previous, value],\n [],\n )\n .option(\n \"--accept-impact\",\n \"Accept the current filtered deploy impact (required for non-TTY expansion)\",\n )\n .option(\"--verbose\", \"Show phase timings, pin SHAs, and deploy detail\")\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 acceptImpact: options.acceptImpact === true,\n verbose: options.verbose === true,\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 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.keystroke/\n# pnpm may write allowBuilds placeholders here; not a real multi-package workspace.\npnpm-workspace.yaml\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 build: \"keystroke build\",\n lint: \"keystroke lint\",\n typecheck: \"keystroke typecheck\",\n test: \"keystroke test\",\n deploy: \"keystroke deploy\",\n },\n dependencies: {\n \"@keystrokehq/keystroke\": linkSpec(targetDir, join(monorepoRoot, \"packages/keystroke\")),\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 imports\n // resolve 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 { 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 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 { mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { runToolBin } from \"./run-tool\";\n\n/** Incremental build-info under the project `.keystroke/` cache (gitignored in templates). */\nexport function typecheckBuildInfoPath(root: string): string {\n return join(root, \".keystroke\", \"cache\", \"tsconfig.tsbuildinfo\");\n}\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 * Uses `--incremental` so warm deploys reuse a content-invalidated tsbuildinfo (safe).\n */\nexport async function runTypecheck(root: string): Promise<number> {\n const buildInfo = typecheckBuildInfoPath(root);\n mkdirSync(join(root, \".keystroke\", \"cache\"), { recursive: true });\n return runToolBin({\n pkg: \"typescript\",\n binName: \"tsc6\",\n args: [\n \"--noEmit\",\n \"--incremental\",\n \"--tsBuildInfoFile\",\n buildInfo,\n \"-p\",\n join(root, \"tsconfig.json\"),\n ],\n cwd: root,\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 { pullManagedDraft } from \"../../drafts/managed-draft\";\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 // Provision/ensure the remote managed repository (no hello-world scaffold).\n await platform.projectGit.getRemote(project.id);\n // Initialize local `.keystroke/git` and attach to remote ks/draft.\n await pullManagedDraft({\n client: platform,\n projectId: project.id,\n targetDir: fromDir,\n });\n\n process.stdout.write(\n `Linked ${configPath} to ${membership.organization.slug}/${formatProjectLabel(project)}\\n` +\n `Managed git ready (.keystroke/git).\\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 { existsSync, readFileSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\n\nimport type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport {\n PROJECT_PULL_STATE_RELATIVE_PATH,\n ProjectPullStateSchema,\n detectProjectPackageManagerFromSnapshot,\n isAcceptableInstallExit,\n type ActiveProjectSourceRevision,\n type ProjectPackageManager,\n} from \"@keystrokehq/shared\";\n\nimport { DEFAULT_PARALLEL_BATCH_SIZE, mapInParallelBatches } from \"@keystrokehq/storage\";\n\nimport { ExpectedCliError } from \"../../errors/expected-cli-error\";\nimport { pullManagedDraft } from \"../../drafts/managed-draft\";\nimport { assertDeployableCheckout } from \"../../git/inspect-checkout\";\nimport { fetchManagedRevision } from \"../../git/managed-transport\";\nimport { mergePublishedRevisionForPull } from \"../../git/merge-managed-main\";\nimport { runGit } from \"../../git/run-git\";\n\nexport type RunPullOptions = {\n client: PlatformClient;\n projectId: string;\n targetDir: string;\n /**\n * When true, pull the active published / artifact revision (legacy behavior).\n * Default pulls the shared managed draft (`ks/draft`).\n */\n published?: boolean;\n};\n\n// ---------------------------------------------------------------------------\n// Snapshot pull — legacy path for artifacts without Git provenance\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 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\nasync function snapshotPull(options: RunPullOptions): Promise<void> {\n const targetDir = resolve(options.targetDir);\n await mkdir(targetDir, { recursive: true });\n\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) {\n throw new Error(\n \"Target directory already contains a project. Use git-backed deploy or re-init.\",\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 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\n// ---------------------------------------------------------------------------\n// Detect package manager from on-disk files\n// ---------------------------------------------------------------------------\n\nconst LOCKFILE_MANAGERS: ReadonlyArray<[string, ProjectPackageManager]> = [\n [\"pnpm-lock.yaml\", \"pnpm\"],\n [\"yarn.lock\", \"yarn\"],\n [\"bun.lockb\", \"bun\"],\n [\"package-lock.json\", \"npm\"],\n];\n\nfunction detectPackageManagerFromDisk(dir: string): ProjectPackageManager {\n try {\n const raw = readFileSync(join(dir, \"package.json\"), \"utf8\");\n const parsed = JSON.parse(raw) as { packageManager?: string };\n if (typeof parsed.packageManager === \"string\") {\n const mgr = parsed.packageManager.split(\"@\")[0]?.trim().toLowerCase();\n if (mgr === \"npm\" || mgr === \"pnpm\" || mgr === \"yarn\" || mgr === \"bun\") {\n return mgr;\n }\n }\n } catch {\n // no package.json or unreadable\n }\n\n for (const [lockfile, manager] of LOCKFILE_MANAGERS) {\n if (existsSync(join(dir, lockfile))) {\n return manager;\n }\n }\n\n return \"npm\";\n}\n\n// ---------------------------------------------------------------------------\n// Git pull — pin to the active artifact's exact published commit\n// ---------------------------------------------------------------------------\n\nasync function isEmptyDir(dir: string): Promise<boolean> {\n try {\n const entries = await readdir(dir);\n return entries.length === 0;\n } catch {\n return true;\n }\n}\n\nasync function gitPull(\n options: RunPullOptions,\n revision: Extract<ActiveProjectSourceRevision, { kind: \"git\" }>,\n remote: { url: string; username: string; password: string },\n): Promise<void> {\n const targetDir = resolve(options.targetDir);\n await mkdir(targetDir, { recursive: true });\n\n const empty = await isEmptyDir(targetDir);\n const hasGit = existsSync(join(targetDir, \".git\"));\n\n if (empty) {\n await runGit([\"init\", \"-b\", \"main\"], { cwd: targetDir });\n\n const fetched = await fetchManagedRevision({\n cwd: targetDir,\n url: remote.url,\n username: remote.username,\n password: remote.password,\n branch: revision.branch,\n commitSha: revision.commitSha,\n });\n\n try {\n await runGit([\"checkout\", \"-B\", \"main\", fetched.temporaryRef], { cwd: targetDir });\n } finally {\n await fetched.cleanup();\n }\n\n installDependencies(targetDir, detectPackageManagerFromDisk(targetDir));\n process.stdout.write(\n `Pulled published revision ${revision.commitSha.slice(0, 12)} into empty directory.\\n`,\n );\n return;\n }\n\n if (!hasGit) {\n throw new ExpectedCliError(\n \"Directory contains files but is not a git repository.\\n\" +\n \"Initialize git first: `git init && git add . && git commit -m 'initial'`\",\n );\n }\n\n await assertDeployableCheckout(targetDir);\n\n const fetched = await fetchManagedRevision({\n cwd: targetDir,\n url: remote.url,\n username: remote.username,\n password: remote.password,\n branch: revision.branch,\n commitSha: revision.commitSha,\n });\n\n let conflicted = false;\n try {\n const result = await mergePublishedRevisionForPull({\n cwd: targetDir,\n temporaryRef: fetched.temporaryRef,\n });\n if (\"conflicted\" in result) {\n conflicted = true;\n }\n } finally {\n await fetched.cleanup();\n }\n\n if (conflicted) {\n throw new ExpectedCliError(\n \"Merge conflicts detected while merging the published revision. Resolve them in your working tree, then:\\n\" +\n \" git add . && git commit\\n\\n\" +\n \"Conflict markers have been left in place for you to resolve.\",\n );\n }\n\n installDependencies(targetDir, detectPackageManagerFromDisk(targetDir));\n process.stdout.write(\n `Pulled and merged published revision ${revision.commitSha.slice(0, 12)}.\\n`,\n );\n}\n\n// ---------------------------------------------------------------------------\n// Entry point — draft by default; --published keeps active-revision pull\n// ---------------------------------------------------------------------------\n\nexport async function runPull(options: RunPullOptions): Promise<void> {\n if (!options.published) {\n const gitStatus = await options.client.projectGit.getStatus(options.projectId);\n const gitReady = gitStatus.configured && gitStatus.repository.lifecycleStatus === \"ready\";\n if (gitReady) {\n await pullManagedDraft({\n client: options.client,\n projectId: options.projectId,\n targetDir: options.targetDir,\n });\n return;\n }\n }\n\n const revision = await options.client.artifacts.getActiveSourceRevision(options.projectId);\n\n if (revision.kind === \"snapshot\") {\n await snapshotPull(options);\n return;\n }\n\n const remote = await options.client.projectGit.getRemote(options.projectId);\n await gitPull(options, revision, remote);\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(\n \"Fetch and merge the shared project draft (`ks/draft`). Use --published for the active deploy revision.\",\n )\n .option(\"--dir <path>\", \"Target directory\", process.cwd())\n .option(\n \"--published\",\n \"Pull the active published / artifact revision instead of the shared draft\",\n )\n .action(async (options: { dir: string; published?: boolean }) =>\n runCliCommand(\"Pull failed\", async () => {\n const config = createCliConfig();\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 published: options.published === true,\n });\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. runId is the trigger run id (not a workflow run id).\\n` +\n `Track dispatched workflow/agent runs:\\n` +\n ` ${cliBinaryName()} triggers runs get ${result.triggerSlug} ${result.runId}${targetHint}\\n` +\n `Then inspect a workflow run:\\n` +\n ` ${cliBinaryName()} workflows runs get <workflowRunId>\\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 { ensureMinimumReleaseAgeExclude } from \"./ensure-release-age-exclude\";\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 /** Packages newly added to project `.npmrc` minimum-release-age-exclude. */\n releaseAgeExcludesAdded: 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 runInstall(\n root: string,\n manager: PackageManager,\n pkg: UpdatablePackage,\n env: NodeJS.ProcessEnv,\n): { status: number | null; output: string } {\n const { command, args } = updateCommand(manager, pkg.name, pkg.dev);\n const result = spawnSync(command, args, { cwd: root, env, encoding: \"utf8\" });\n return {\n status: result.status,\n output: `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`,\n };\n}\n\n/**\n * Install @latest for every managed project @keystrokehq/* dependency.\n * Skips `@keystrokehq/cli` (global; refreshed separately by `keystroke update`).\n *\n * For pnpm, ensures packages are listed in project `.npmrc`\n * `minimum-release-age-exclude` before installing, and retries once after\n * adding an exclude if a release-age block still occurs.\n */\nexport function updateProjectPackages(root: string): UpdateProjectPackagesResult {\n const packages = listUpdatableKeystrokePackages(root);\n if (packages.length === 0) {\n return { updated: [], skippedReleaseAge: [], releaseAgeExcludesAdded: [] };\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 releaseAgeExcludesAdded =\n manager === \"pnpm\"\n ? ensureMinimumReleaseAgeExclude(\n root,\n packages.map((pkg) => pkg.name),\n )\n : [];\n if (releaseAgeExcludesAdded.length > 0) {\n process.stderr.write(\n `Added to .npmrc minimum-release-age-exclude: ${releaseAgeExcludesAdded.join(\", \")}\\n`,\n );\n }\n\n const updated: UpdatedPackage[] = [];\n const skippedReleaseAge: string[] = [];\n\n for (const pkg of packages) {\n const from = readInstalledVersion(root, pkg.name);\n process.stderr.write(`Updating ${pkg.name}...\\n`);\n let result = runInstall(root, manager, pkg, env);\n\n if (result.status !== 0 && manager === \"pnpm\" && isReleaseAgeBlock(result.output)) {\n const added = ensureMinimumReleaseAgeExclude(root, [pkg.name]);\n if (added.length > 0) {\n releaseAgeExcludesAdded.push(...added);\n process.stderr.write(\n `Added ${pkg.name} to .npmrc minimum-release-age-exclude; retrying...\\n`,\n );\n }\n result = runInstall(root, manager, pkg, env);\n }\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 if (isReleaseAgeBlock(result.output)) {\n process.stderr.write(\n `Warning: ${pkg.name}@latest is still held back by minimum-release-age after ` +\n `updating .npmrc excludes; continuing with the currently installed version.\\n`,\n );\n skippedReleaseAge.push(pkg.name);\n continue;\n }\n\n throw new Error(\n `Failed to update ${pkg.name}:\\n${result.output.trim() || `install exited ${result.status}`}`,\n );\n }\n\n return {\n updated,\n skippedReleaseAge,\n releaseAgeExcludesAdded: [...new Set(releaseAgeExcludesAdded)].sort(),\n };\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 { shouldUpdateCliVersion } 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 { resolveCliDistTag } from \"../update/resolve-cli-dist-tag\";\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 distTag = resolveCliDistTag();\n const release = await fetchLatestCliRelease(distTag);\n\n if (!release) {\n throw new Error(\n `No @keystrokehq/cli version found for dist-tag \"${distTag}\". ` +\n `Check KEYSTROKE_CLI_DIST_TAG / KEYSTROKE_ENVIRONMENT / platform URL.`,\n );\n }\n\n if (\n !shouldUpdateCliVersion({\n registryVersion: release.version,\n currentVersion,\n distTag,\n })\n ) {\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} (@${distTag}) via ${install.packageManager}...\\n`,\n );\n\n const result = runPackageManagerUpdate(install, distTag);\n const installedVersion = readCliVersion();\n\n if (installedVersion.trim() !== currentVersion.trim()) {\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 (\n result.updated.length === 0 &&\n result.skippedReleaseAge.length === 0 &&\n result.releaseAgeExcludesAdded.length === 0\n ) {\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.releaseAgeExcludesAdded.length > 0) {\n process.stdout.write(\n `Updated .npmrc minimum-release-age-exclude (${result.releaseAgeExcludesAdded.join(\", \")}). ` +\n `Commit .npmrc with package.json/lockfile when present.\\n`,\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 if (result.skippedReleaseAge.length > 0) {\n process.stdout.write(\n `Still held by minimumReleaseAge after .npmrc exclude: ${result.skippedReleaseAge.join(\", \")}.\\n`,\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 (latest or staging dist-tag)\")\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 type { createKeystrokeClient } from \"@keystrokehq/sdk\";\nimport type { WorkflowRunDetailResponse } from \"@keystrokehq/shared\";\n\nimport { cliBinaryName } from \"../../errors\";\nimport { DEFAULT_WAIT_TIMEOUT_SECONDS } from \"../wait-timeout\";\n\nexport { parseWaitTimeoutSeconds } from \"../wait-timeout\";\n\ntype KeystrokeClient = ReturnType<typeof createKeystrokeClient>;\n\n/** Terminal workflow run statuses — `--wait` returns once one of these is reached. */\nexport const WORKFLOW_RUN_TERMINAL_STATUSES = new Set([\"completed\", \"failed\", \"canceled\"]);\n\nexport const DEFAULT_WORKFLOW_WAIT_TIMEOUT_SECONDS = DEFAULT_WAIT_TIMEOUT_SECONDS;\nexport const DEFAULT_WORKFLOW_WAIT_POLL_MS = 2_000;\n\nexport type WaitForWorkflowRunOptions = {\n client: KeystrokeClient;\n workflowId: string;\n runId: string;\n /** Max seconds to wait before returning the in-progress run (default 60). */\n timeoutSeconds?: number;\n /** Poll interval in ms (default 2000). */\n pollMs?: number;\n /** Optional abort (tests / signals). */\n signal?: AbortSignal;\n /** Injectable clock for tests. */\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n now?: () => number;\n};\n\nexport type WaitForWorkflowRunResult = {\n detail: WorkflowRunDetailResponse;\n timedOut: boolean;\n};\n\nfunction sleepMs(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason instanceof Error ? signal.reason : new Error(\"Aborted\"));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal?.reason instanceof Error ? signal.reason : new Error(\"Aborted\"));\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/**\n * Poll `workflows.getRun` until the run reaches a terminal status or the timeout elapses.\n * On timeout, returns the latest detail with `timedOut: true` (exit 0 for the agent).\n */\nexport async function waitForWorkflowRun(\n options: WaitForWorkflowRunOptions,\n): Promise<WaitForWorkflowRunResult> {\n const timeoutSeconds = options.timeoutSeconds ?? DEFAULT_WORKFLOW_WAIT_TIMEOUT_SECONDS;\n const pollMs = options.pollMs ?? DEFAULT_WORKFLOW_WAIT_POLL_MS;\n const sleep = options.sleep ?? sleepMs;\n const now = options.now ?? Date.now;\n const deadline = now() + timeoutSeconds * 1000;\n\n let detail = await options.client.workflows.getRun(options.workflowId, options.runId, {\n include: \"none\",\n });\n\n for (;;) {\n if (WORKFLOW_RUN_TERMINAL_STATUSES.has(detail.run.status)) {\n return { detail, timedOut: false };\n }\n if (now() >= deadline || options.signal?.aborted) {\n return { detail, timedOut: true };\n }\n const remaining = deadline - now();\n await sleep(Math.min(pollMs, Math.max(0, remaining)), options.signal);\n detail = await options.client.workflows.getRun(options.workflowId, options.runId, {\n include: \"none\",\n });\n }\n}\n\n/** Stderr hint when `--wait` times out while the run is still active. */\nexport function workflowWaitTimeoutHint(workflowId: string, runId: string): string {\n return (\n `Still running after --wait timeout. Re-check with:\\n` +\n ` ${cliBinaryName()} workflows runs get ${workflowId} ${runId} --wait\\n`\n );\n}\n\n/**\n * Exit 0 for completed waits and in-progress timeouts (agent can re-wait).\n * Exit 1 for terminal failure / cancel so chat labels and scripts see a soft failure.\n */\nexport function applyWorkflowWaitExitCode(input: { timedOut: boolean; status: string }): void {\n if (input.timedOut) {\n return;\n }\n if (input.status === \"failed\" || input.status === \"canceled\") {\n process.exitCode = 1;\n }\n}\n","import { isQueuedRunResponse } from \"@keystrokehq/sdk\";\nimport type { Command } from \"commander\";\nimport { cliBinaryName, parseJsonOption, runProjectCliCommand } from \"../../errors\";\nimport { projectWorkflowRunSummary, writeInspectJson } from \"../inspect-detail\";\nimport {\n applyWorkflowWaitExitCode,\n parseWaitTimeoutSeconds,\n waitForWorkflowRun,\n workflowWaitTimeoutHint,\n} from \"./wait-for-run\";\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 .option(\"--wait\", \"Wait until the run finishes (or --timeout elapses)\")\n .option(\n \"--timeout <seconds>\",\n \"Max seconds to wait with --wait (default 60); re-wait with workflows runs get --wait\",\n )\n .option(\"--summary\", \"With --wait, print a concise JSON summary\")\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 ${cliBinaryName()} workflows run digest --input '{}' --wait\n ${cliBinaryName()} workflows run digest --input '{}' --wait --timeout 90 --summary\n`,\n )\n .action(\n (\n workflowId: string,\n options: { input: string; wait?: boolean; timeout?: string; summary?: boolean },\n ) =>\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\n if (!options.wait) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n if (isQueuedRunResponse(result)) {\n process.stderr.write(\n `Run queued. Wait for completion:\\n` +\n ` ${cliBinaryName()} workflows runs get ${workflowId} ${result.runId} --wait\\n` +\n `Or track progress:\\n` +\n ` ${cliBinaryName()} workflows runs get ${workflowId} ${result.runId} --summary\\n`,\n );\n }\n return;\n }\n\n if (!isQueuedRunResponse(result)) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n const timeoutSeconds = parseWaitTimeoutSeconds(options.timeout);\n const waited = await waitForWorkflowRun({\n client,\n workflowId,\n runId: result.runId,\n timeoutSeconds,\n });\n\n if (waited.timedOut) {\n process.stderr.write(workflowWaitTimeoutHint(workflowId, result.runId));\n }\n applyWorkflowWaitExitCode({\n timedOut: waited.timedOut,\n status: waited.detail.run.status,\n });\n\n if (options.summary) {\n writeInspectJson(projectWorkflowRunSummary(waited.detail));\n return;\n }\n writeInspectJson(waited.detail);\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\";\nimport {\n applyWorkflowWaitExitCode,\n parseWaitTimeoutSeconds,\n waitForWorkflowRun,\n workflowWaitTimeoutHint,\n} from \"./wait-for-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(\"<workflowIdOrRunId>\", \"Workflow key, or bare workflow run id\")\n .argument(\"[runId]\", \"Workflow run id (omit when the first arg is the run id)\")\n .option(\"--include <parts>\", \"Comma-separated: trigger, steps, trace, children, 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 .option(\"--wait\", \"Wait until the run finishes (or --timeout elapses)\")\n .option(\n \"--timeout <seconds>\",\n \"Max seconds to wait with --wait (default 60); re-invoke --wait if still running\",\n )\n .addHelpText(\n \"after\",\n `\nExamples:\n keystroke workflows runs get <runId>\n keystroke workflows runs get <workflowSlug> <runId>\n keystroke workflows runs get <runId> --include steps,trace,children\n keystroke workflows runs get <workflowSlug> <runId> --wait --summary\n`,\n )\n .action(\n (\n workflowIdOrRunId: string,\n runId: string | undefined,\n options: {\n include?: string;\n summary?: boolean;\n field?: string;\n wait?: boolean;\n timeout?: string;\n },\n ) =>\n runProjectCliCommand(\"Get workflow run failed\", async ({ client }) => {\n if (options.wait && options.field) {\n throw new Error(\"Do not combine --wait with --field\");\n }\n if (options.wait && runId === undefined) {\n throw new Error(\n \"--wait requires both <workflowId> and <runId> (e.g. workflows runs get digest run_… --wait)\",\n );\n }\n\n if (options.wait && runId !== undefined) {\n const timeoutSeconds = parseWaitTimeoutSeconds(options.timeout);\n const waited = await waitForWorkflowRun({\n client,\n workflowId: workflowIdOrRunId,\n runId,\n timeoutSeconds,\n });\n if (waited.timedOut) {\n process.stderr.write(workflowWaitTimeoutHint(workflowIdOrRunId, runId));\n }\n applyWorkflowWaitExitCode({\n timedOut: waited.timedOut,\n status: waited.detail.run.status,\n });\n if (options.summary) {\n writeInspectJson(projectWorkflowRunSummary(waited.detail));\n return;\n }\n if (options.include) {\n const mode = parseInspectDetailOptions({ include: options.include });\n const include = includeForInspectMode(mode);\n const result = await client.workflows.getRun(workflowIdOrRunId, runId, {\n ...(include !== undefined ? { include } : {}),\n });\n writeInspectJson(result);\n return;\n }\n writeInspectJson(waited.detail);\n return;\n }\n\n const mode = parseInspectDetailOptions(options);\n const include = includeForInspectMode(mode);\n const result =\n runId === undefined\n ? await client.workflows.getRun(workflowIdOrRunId, {\n ...(include !== undefined ? { include } : {}),\n })\n : await client.workflows.getRun(workflowIdOrRunId, runId, {\n ...(include !== undefined ? { include } : {}),\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(\"<workflowIdOrRunId>\", \"Workflow key, or bare workflow run id\")\n .argument(\"[runId]\", \"Workflow run id (omit when the first arg is the run id)\")\n .action((workflowIdOrRunId: string, runId: string | undefined) =>\n runProjectCliCommand(\"List workflow run hooks failed\", async ({ client }) => {\n const result =\n runId === undefined\n ? await client.workflows.listHooks(workflowIdOrRunId)\n : await client.workflows.listHooks(workflowIdOrRunId, 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\";\n\n/**\n * Resolve an agent slug or id to the platform agent id used by channel routes.\n * Channel HTTP handlers look up agents by id only.\n */\nexport async function resolveChannelAgentId(\n client: PlatformClient,\n projectId: string,\n agentRef: string,\n): Promise<string> {\n const trimmed = agentRef.trim();\n if (!trimmed) {\n throw new Error(\"Agent slug or id is required\");\n }\n\n const agents = await client.agents.list({ projectId });\n const byId = agents.find((agent) => agent.id === trimmed);\n if (byId) {\n return byId.id;\n }\n\n const bySlug = agents.find((agent) => agent.slug === trimmed);\n if (bySlug) {\n return bySlug.id;\n }\n\n throw new Error(\n `Unknown agent \"${trimmed}\". Deploy the agent and pass its slug from defineAgent({ slug }), or its platform id.`,\n );\n}\n\n/** Resolve agent ref to summary (id + slug) for setup messaging and defaults. */\nexport async function resolveChannelAgent(\n client: PlatformClient,\n projectId: string,\n agentRef: string,\n): Promise<{ id: string; slug: string; name: string }> {\n const trimmed = agentRef.trim();\n if (!trimmed) {\n throw new Error(\"Agent slug or id is required\");\n }\n\n const agents = await client.agents.list({ projectId });\n const match =\n agents.find((agent) => agent.id === trimmed) ?? agents.find((agent) => agent.slug === trimmed);\n if (!match) {\n throw new Error(\n `Unknown agent \"${trimmed}\". Deploy the agent and pass its slug from defineAgent({ slug }), or its platform id.`,\n );\n }\n\n return { id: match.id, slug: match.slug, name: match.name };\n}\n","import type { PlatformClient } from \"@keystrokehq/sdk/platform\";\nimport {\n SLACK_PERSONAL_APP_SLUG,\n buildAgentSlackDeeplink,\n buildConnectDeeplink,\n type BindChannelInput,\n type ChannelAccount,\n type ChannelConnection,\n type ChannelDirectoryEntry,\n type ChannelPlatform,\n type ChannelPlatformKey,\n type CreateSlackChannelResponse,\n type RemoveChannelBindingInput,\n type UpdateChannelBindingInput,\n} from \"@keystrokehq/shared\";\n\nimport { openUrl } from \"../../auth/open-url\";\nimport { resolveChannelAgent } from \"./resolve-channel-agent\";\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\n/** Normalize a Slack channel name (no leading #, lowercase, slug-safe). */\nexport function normalizeSlackChannelName(value: string): string {\n return value\n .trim()\n .replace(/^#+/, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction findDirectoryChannelByName(\n entries: ChannelDirectoryEntry[],\n channelName: string,\n): ChannelDirectoryEntry | null {\n const target = normalizeSlackChannelName(channelName);\n if (!target) {\n return null;\n }\n return (\n entries.find(\n (entry) => !entry.isArchived && normalizeSlackChannelName(entry.name) === target,\n ) ?? null\n );\n}\n\nconst ACCOUNT_POLL_MS = 2_000;\nconst ACCOUNT_WAIT_DEFAULT_MS = 5 * 60_000;\n\nexport async function waitForSlackChannelAccounts(\n client: PlatformClient,\n projectId: string,\n options?: { timeoutMs?: number; pollMs?: number; sleep?: (ms: number) => Promise<void> },\n): Promise<ChannelAccount[]> {\n const timeoutMs = options?.timeoutMs ?? ACCOUNT_WAIT_DEFAULT_MS;\n const pollMs = options?.pollMs ?? ACCOUNT_POLL_MS;\n const sleep = options?.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));\n const deadline = Date.now() + timeoutMs;\n\n for (;;) {\n const accounts = await runChannelAccounts(client, projectId, \"slack\");\n if (accounts.length > 0) {\n return accounts;\n }\n if (Date.now() >= deadline) {\n throw new Error(\n \"Timed out waiting for a Slack workspace. Finish OAuth with `keystroke connect slack --kind keystroke`, then retry.\",\n );\n }\n await sleep(pollMs);\n }\n}\n\nexport type RunChannelSetupCustomResult = {\n kind: \"custom\";\n url: string;\n agentId: string;\n agentSlug: string;\n};\n\nexport type RunChannelSetupKeystrokeResult = {\n kind: \"keystroke\";\n connection: ChannelConnection;\n created?: CreateSlackChannelResponse;\n accountId: string;\n channelName: string;\n};\n\nexport type RunChannelSetupResult = RunChannelSetupCustomResult | RunChannelSetupKeystrokeResult;\n\nexport async function runChannelSetupCustom(options: {\n client: PlatformClient;\n projectId: string;\n agentRef: string;\n webUrl: string;\n orgSlug: string;\n printUrl?: boolean;\n}): Promise<RunChannelSetupCustomResult> {\n const agent = await resolveChannelAgent(options.client, options.projectId, options.agentRef);\n const url = buildAgentSlackDeeplink({\n webUrl: options.webUrl,\n orgSlug: options.orgSlug,\n agentId: agent.id,\n kind: \"custom\",\n });\n\n if (options.printUrl) {\n process.stdout.write(`${url}\\n`);\n } else {\n openUrl(url);\n process.stdout.write(\n `Opening custom Slack app wizard for agent \"${agent.slug}\" in your browser.\\n` +\n \"Finish the wizard (create the Slack app, paste credentials, install). \" +\n \"The agent binds automatically when install completes.\\n\",\n );\n }\n\n return { kind: \"custom\", url, agentId: agent.id, agentSlug: agent.slug };\n}\n\nexport async function runChannelSetupKeystroke(options: {\n client: PlatformClient;\n projectId: string;\n agentRef: string;\n channelName?: string;\n accountId?: string;\n isPrivate?: boolean;\n wait?: boolean;\n webUrl: string;\n orgSlug: string;\n /** Injected for tests. */\n waitForAccounts?: typeof waitForSlackChannelAccounts;\n}): Promise<RunChannelSetupKeystrokeResult> {\n const agent = await resolveChannelAgent(options.client, options.projectId, options.agentRef);\n const channelName =\n normalizeSlackChannelName(options.channelName ?? agent.slug) ||\n normalizeSlackChannelName(agent.slug) ||\n \"agent\";\n\n let accounts = await runChannelAccounts(options.client, options.projectId, \"slack\");\n if (accounts.length === 0) {\n const connectUrl = buildConnectDeeplink({\n webUrl: options.webUrl,\n orgSlug: options.orgSlug,\n appSlug: SLACK_PERSONAL_APP_SLUG,\n flow: \"keystroke\",\n });\n if (!options.wait) {\n throw new Error(\n \"No Slack workspaces connected for External Channels. \" +\n `Run \\`keystroke connect slack --kind keystroke\\` (or open ${connectUrl}), then retry, ` +\n \"or pass --wait to poll until OAuth finishes.\",\n );\n }\n process.stdout.write(\n `No Slack workspace yet. Open this link to connect the Keystroke Slack App:\\n${connectUrl}\\n` +\n \"Waiting for OAuth to finish…\\n\",\n );\n openUrl(connectUrl);\n const waitForAccounts = options.waitForAccounts ?? waitForSlackChannelAccounts;\n accounts = await waitForAccounts(options.client, options.projectId);\n }\n\n const account =\n (options.accountId ? accounts.find((entry) => entry.id === options.accountId) : undefined) ??\n accounts[0];\n if (!account) {\n throw new Error(\n options.accountId\n ? `Unknown Slack account \"${options.accountId}\". Run \\`keystroke channels accounts --platform slack\\`.`\n : \"No Slack workspaces connected. Run `keystroke connect slack --kind keystroke`.\",\n );\n }\n\n const directory = await runChannelDirectory(\n options.client,\n options.projectId,\n \"slack\",\n account.id,\n );\n const existing = findDirectoryChannelByName(directory, channelName);\n\n let created: CreateSlackChannelResponse | undefined;\n let channelId: string;\n let resolvedName: string;\n let channelKind: ChannelDirectoryEntry[\"kind\"];\n\n if (existing) {\n channelId = existing.id;\n resolvedName = existing.name;\n channelKind = existing.kind;\n } else {\n created = await options.client.channels.createChannel(options.projectId, {\n accountId: account.id,\n name: channelName,\n isPrivate: options.isPrivate ?? false,\n });\n channelId = created.id;\n resolvedName = created.name;\n channelKind = created.kind;\n }\n\n const connection = await runChannelBind(options.client, options.projectId, {\n agentId: agent.id,\n platform: \"slack\",\n accountId: account.id,\n binding: {\n channelId,\n channelName: resolvedName,\n channelKind,\n mode: \"mention\",\n subscribeOnMention: true,\n },\n });\n\n return {\n kind: \"keystroke\",\n connection,\n ...(created ? { created } : {}),\n accountId: account.id,\n channelName: resolvedName,\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 { 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","/**\n * CLI reply behavior for channel bindings — mirrors the External Channels UI\n * (\"Mentions only\" / \"Mentions + follow-ups\"). Wire API still uses mode +\n * subscribeOnMention; this maps the product language onto that patch.\n */\n\nexport const CHANNEL_REPLIES_VALUES = [\"mentions\", \"mentions-followups\"] as const;\n\nexport type ChannelRepliesOption = (typeof CHANNEL_REPLIES_VALUES)[number];\n\nexport type ChannelReplyBehaviorPatch = {\n mode: \"mention\";\n subscribeOnMention: boolean;\n};\n\n/** Default matches web \"Add to Slack\" / `channels setup` (mentions + follow-ups). */\nexport const DEFAULT_CHANNEL_REPLIES: ChannelRepliesOption = \"mentions-followups\";\n\nexport function isChannelRepliesOption(value: string): value is ChannelRepliesOption {\n return (CHANNEL_REPLIES_VALUES as readonly string[]).includes(value);\n}\n\nexport function parseChannelRepliesOption(value: string): ChannelReplyBehaviorPatch {\n if (value === \"mentions\") {\n return { mode: \"mention\", subscribeOnMention: false };\n }\n if (value === \"mentions-followups\") {\n return { mode: \"mention\", subscribeOnMention: true };\n }\n throw new Error(\n `Invalid --replies value \"${value}\". Use \"mentions\" (Mentions only) or \"mentions-followups\" (Mentions + follow-ups).`,\n );\n}\n\nexport const CHANNEL_REPLIES_OPTION_HELP =\n \"Reply behavior: mentions (Mentions only), mentions-followups (Mentions + follow-ups)\";\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 { resolveChannelAgentId } from \"./resolve-channel-agent\";\nimport { resolveChannelProjectId } from \"./resolve-channel-project\";\nimport {\n CHANNEL_REPLIES_OPTION_HELP,\n DEFAULT_CHANNEL_REPLIES,\n parseChannelRepliesOption,\n} from \"./reply-behavior\";\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 slack --kind keystroke` to connect the Keystroke Slack App 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 .argument(\"<agent>\", \"Agent slug or id\")\n .action(async (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 agentId = await resolveChannelAgentId(client, projectId, agent);\n const connections = await runChannelList(client, projectId, agentId);\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 slug or id\")\n .requiredOption(\"--platform <key>\", \"Platform key (slack)\")\n .requiredOption(\"--account <id>\", \"Workspace account id (team id)\")\n .requiredOption(\"--channel <id>\", \"Provider channel id\")\n .option(\"--channel-name <name>\", \"Provider channel name (resolved from Slack when omitted)\")\n .option(\"--replies <behavior>\", CHANNEL_REPLIES_OPTION_HELP, DEFAULT_CHANNEL_REPLIES)\n .action(\n async (\n agent: string,\n options: {\n platform: string;\n account: string;\n channel: string;\n channelName?: string;\n replies?: 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 agentId = await resolveChannelAgentId(client, projectId, agent);\n const replies = parseChannelRepliesOption(options.replies ?? DEFAULT_CHANNEL_REPLIES);\n const connection = await runChannelBind(client, projectId, {\n agentId,\n platform: options.platform as ChannelPlatformKey,\n accountId: options.account,\n binding: {\n channelId: options.channel,\n ...(options.channelName ? { channelName: options.channelName } : {}),\n ...replies,\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 .argument(\"<agent>\", \"Agent slug or id\")\n .argument(\"<binding>\", \"Binding id\")\n .action(async (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 agentId = await resolveChannelAgentId(client, projectId, agent);\n const connection = await runChannelUnbind(client, projectId, {\n agentId,\n bindingId: 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 reply behavior (matches External Channels UI)\")\n .argument(\"<agent>\", \"Agent slug or id\")\n .argument(\"<binding>\", \"Binding id\")\n .requiredOption(\"--replies <behavior>\", CHANNEL_REPLIES_OPTION_HELP)\n .action(async (agent: string, binding: string, options: { replies: string }) =>\n runCliCommand(\"Update channel binding failed\", async () => {\n const config = createCliConfig();\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(config);\n const agentId = await resolveChannelAgentId(client, projectId, agent);\n const connection = await runChannelUpdateBinding(client, projectId, {\n agentId,\n bindingId: binding,\n patch: parseChannelRepliesOption(options.replies),\n });\n process.stdout.write(`${JSON.stringify({ connection }, null, 2)}\\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 { resolveChannelProjectId } from \"./resolve-channel-project\";\nimport { runChannelSetupCustom, runChannelSetupKeystroke } from \"./run-channel\";\n\nexport function registerChannelSetupCommand(channel: Command): void {\n channel\n .command(\"setup\")\n .description(\n \"Connect an agent to Slack: create/bind a Keystroke channel, or open the custom-app wizard\",\n )\n .argument(\"<agent>\", \"Agent slug or id\")\n .option(\"--channel <name>\", \"Slack channel name (default: agent slug); Keystroke path only\")\n .option(\"--account <id>\", \"Slack workspace team id (default: first connected account)\")\n .option(\"--private\", \"Create a private channel when creating (Keystroke path)\")\n .option(\"--custom\", \"Open the custom Slack app wizard for this agent (web)\")\n .option(\"--wait\", \"Wait for Keystroke Slack App OAuth if no workspace is connected yet\")\n .option(\"--print-url\", \"With --custom, print the wizard URL without opening a browser\")\n .action(\n async (\n agent: string,\n options: {\n channel?: string;\n account?: string;\n private?: boolean;\n custom?: boolean;\n wait?: boolean;\n printUrl?: boolean;\n },\n ) =>\n runCliCommand(\n \"Channel setup failed\",\n async () => {\n if (options.custom) {\n if (options.channel || options.account || options.private || options.wait) {\n throw new Error(\n \"--custom cannot be combined with --channel, --account, --private, or --wait\",\n );\n }\n const config = createCliConfig();\n const membership = await resolveActiveOrganization(config);\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(config);\n const result = await runChannelSetupCustom({\n client,\n projectId,\n agentRef: agent,\n webUrl: getWebUrl(config),\n orgSlug: membership.organization.slug,\n printUrl: options.printUrl,\n });\n if (options.printUrl) {\n return;\n }\n process.stdout.write(`${JSON.stringify({ result }, null, 2)}\\n`);\n return;\n }\n\n if (options.printUrl) {\n throw new Error(\"--print-url is only valid with --custom\");\n }\n\n const config = createCliConfig();\n const membership = await resolveActiveOrganization(config);\n const projectId = await resolveChannelProjectId(config);\n const client = createCliPlatformClient(config);\n const result = await runChannelSetupKeystroke({\n client,\n projectId,\n agentRef: agent,\n channelName: options.channel,\n accountId: options.account,\n isPrivate: options.private,\n wait: options.wait,\n webUrl: getWebUrl(config),\n orgSlug: membership.organization.slug,\n });\n process.stdout.write(`${JSON.stringify({ result }, null, 2)}\\n`);\n },\n undefined,\n { orgScoped: true },\n ),\n );\n}\n","import type { Command } from \"commander\";\n\nimport { registerChannelPlatformsCommand } from \"./platforms\";\nimport {\n registerChannelAccountsCommand,\n registerChannelBindCommand,\n registerChannelDirectoryCommand,\n registerChannelListCommand,\n registerChannelUnbindCommand,\n registerChannelUpdateBindingCommand,\n} from \"./list\";\nimport { registerChannelSetupCommand } from \"./setup\";\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 registerChannelSetupCommand(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, getPlatformUrl } from \"../../config\";\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 linked = readLinkedProjectConfig();\n process.stdout.write(\n `${JSON.stringify(\n {\n webUrl: cliConfig.get(\"webUrl\"),\n platformUrl: getPlatformUrl(cliConfig),\n linkedProject: linked.project ?? null,\n linkedOrganization: linked.organization ?? null,\n },\n null,\n 2,\n )}\\n`,\n );\n });\n\n config\n .command(\"org\")\n .description(\"List organizations you belong to\")\n .action(async () => {\n const cliConfig = createCliConfig();\n const organizations = await listOrganizations(cliConfig);\n process.stdout.write(`${JSON.stringify({ organizations }, null, 2)}\\n`);\n });\n}\n","import type { Command } from \"commander\";\n\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 { 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 { 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 .hook(\"preAction\", async (thisCommand, actionCommand) => {\n const opts = thisCommand.opts<{ project?: string; organization?: string }>();\n setCliTargetOptions({\n projectId: opts.project,\n organizationRef: opts.organization,\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 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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"}