@dreamboard-games/cli 0.1.30-alpha.3 → 0.1.30-alpha.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -108
- package/dist/agent-verifier/agent-workspace-verifier.mjs +1988 -57
- package/dist/agent-verifier/agent-workspace-verifier.mjs.map +1 -1
- package/dist/agent-verifier/{chunk-XQXDOBYB.mjs → chunk-4I2WWAPK.mjs} +27 -10
- package/dist/agent-verifier/chunk-4I2WWAPK.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-O4YCPU7C.mjs → chunk-BWBN2TDJ.mjs} +539 -641
- package/dist/agent-verifier/chunk-BWBN2TDJ.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-TAEQKBJB.mjs → chunk-GWRZRWCF.mjs} +1 -1
- package/dist/agent-verifier/chunk-GWRZRWCF.mjs.map +1 -0
- package/dist/agent-verifier/chunk-H6XDQJ3N.mjs +11 -0
- package/dist/agent-verifier/chunk-HUBV22JQ.mjs +89 -0
- package/dist/agent-verifier/chunk-HUBV22JQ.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-VS573ERH.mjs → chunk-JZTH3EMV.mjs} +2 -2
- package/dist/agent-verifier/{chunk-XGWCY624.mjs → chunk-KDAQ4CZY.mjs} +34 -27
- package/dist/agent-verifier/chunk-KDAQ4CZY.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-IAYRNVUC.mjs → chunk-LMW66VBH.mjs} +2 -13
- package/dist/agent-verifier/{chunk-IAYRNVUC.mjs.map → chunk-LMW66VBH.mjs.map} +1 -1
- package/dist/agent-verifier/{chunk-776W3UGV.mjs → chunk-M6YNQZCC.mjs} +4 -13
- package/dist/agent-verifier/chunk-M6YNQZCC.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-H76MT5UR.mjs → chunk-M7UVBANQ.mjs} +2 -1
- package/dist/agent-verifier/chunk-M7UVBANQ.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-SH5JKYOB.mjs → chunk-MIRGCMUC.mjs} +112 -26
- package/dist/agent-verifier/chunk-MIRGCMUC.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-NAK77WXW.mjs → chunk-MYMVXTZT.mjs} +4 -5
- package/dist/agent-verifier/chunk-MYMVXTZT.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-7WWGFAAU.mjs → chunk-NBRUEJUK.mjs} +215 -223
- package/dist/agent-verifier/chunk-NBRUEJUK.mjs.map +1 -0
- package/dist/agent-verifier/chunk-OJFZVGEL.mjs +492 -0
- package/dist/agent-verifier/chunk-OJFZVGEL.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-LUZ7KE6H.mjs → chunk-QD4SQNUP.mjs} +4 -8
- package/dist/agent-verifier/{chunk-LUZ7KE6H.mjs.map → chunk-QD4SQNUP.mjs.map} +1 -1
- package/dist/agent-verifier/chunk-TTB7AIHZ.mjs +214 -0
- package/dist/agent-verifier/chunk-TTB7AIHZ.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-F2DIOJJZ.mjs → chunk-XCQQIPCO.mjs} +5 -46
- package/dist/agent-verifier/chunk-XCQQIPCO.mjs.map +1 -0
- package/dist/agent-verifier/{global-config-Y2NTSK4R.mjs → global-config-2NUESNEQ.mjs} +6 -6
- package/dist/agent-verifier/{keychain-backend-SPQWGKZN.mjs → keychain-backend-FF4I6ODB.mjs} +12 -7
- package/dist/agent-verifier/keychain-backend-FF4I6ODB.mjs.map +1 -0
- package/dist/agent-verifier/{local-files-JFOQQZDL.mjs → local-files-OF4QFISU.mjs} +10 -10
- package/dist/agent-verifier/{chunk-UIOLGH4A.mjs → local-typecheck-DHVLM37Z.mjs} +4 -4
- package/dist/agent-verifier/local-typecheck-DHVLM37Z.mjs.map +1 -0
- package/dist/agent-verifier/{materialize-workspace-ZAVGQQSF.mjs → materialize-workspace-MAGKDMK5.mjs} +23 -22
- package/dist/agent-verifier/materialize-workspace-MAGKDMK5.mjs.map +1 -0
- package/dist/agent-verifier/{project-state-K576C2TE.mjs → project-state-XKUSCFSV.mjs} +2 -2
- package/dist/agent-verifier/{prompt-MJRJMOGQ.mjs → prompt-VKHMCQT6.mjs} +2 -2
- package/dist/agent-verifier/{chunk-A64ZZUZV.mjs → reducer-bundle-preflight-GLUJKTWU.mjs} +76 -25
- package/dist/agent-verifier/reducer-bundle-preflight-GLUJKTWU.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-JGT4P4UD.mjs → reducer-contract-preflight-WVQQPW5F.mjs} +7 -6
- package/dist/agent-verifier/reducer-contract-preflight-WVQQPW5F.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-E7SSWJXJ.mjs → reducer-native-test-harness-UFMSNNDY.mjs} +463 -686
- package/dist/agent-verifier/reducer-native-test-harness-UFMSNNDY.mjs.map +1 -0
- package/dist/agent-verifier/static-scaffold-CLRRWXON.mjs +24 -0
- package/dist/agent-verifier/workspace-codegen-SPPVHURX.mjs +10 -0
- package/dist/agent-verifier/{workspace-dependencies-NOOQBK6I.mjs → workspace-dependencies-5HEEKZFP.mjs} +6 -4
- package/dist/authoring-compatibility-internal.js +12 -0
- package/dist/chunk-2H7UOFLK.js +11 -0
- package/dist/chunk-6NYVJYN4.js +313 -0
- package/dist/chunk-6NYVJYN4.js.map +1 -0
- package/dist/chunk-EQNBQVIW.js +204 -0
- package/dist/chunk-EQNBQVIW.js.map +1 -0
- package/dist/chunk-X244CUU4.js +3815 -0
- package/dist/chunk-X244CUU4.js.map +1 -0
- package/dist/{chunk-TAQKH67O.js → chunk-YNJVKC2T.js} +2587 -7278
- package/dist/chunk-YNJVKC2T.js.map +1 -0
- package/dist/{global-config-S4ZIPECE.js → global-config-RBMW7IVA.js} +4 -3
- package/dist/index.js +3099 -6187
- package/dist/index.js.map +1 -1
- package/dist/internal.js +36 -10
- package/dist/internal.js.map +1 -1
- package/dist/{keychain-backend-HDF4TZDL.js → keychain-backend-FSNTNTZE.js} +12 -7
- package/dist/keychain-backend-FSNTNTZE.js.map +1 -0
- package/dist/{prompt-NDV3AE5L.js → prompt-GMZABCJC.js} +2 -2
- package/package.json +9 -19
- package/release/authoring-release-set.json +38 -0
- package/skills/dreamboard/SKILL.md +30 -28
- package/skills/dreamboard/references/building-your-first-game.md +15 -15
- package/skills/dreamboard/references/cli.md +46 -47
- package/skills/dreamboard/references/manifest-authoring.md +11 -3
- package/skills/dreamboard/references/quickstart.md +16 -13
- package/skills/dreamboard/references/testing.md +6 -13
- package/dist/agent-verifier/chunk-3UKQVWLV.mjs +0 -1744
- package/dist/agent-verifier/chunk-3UKQVWLV.mjs.map +0 -1
- package/dist/agent-verifier/chunk-776W3UGV.mjs.map +0 -1
- package/dist/agent-verifier/chunk-7WWGFAAU.mjs.map +0 -1
- package/dist/agent-verifier/chunk-A64ZZUZV.mjs.map +0 -1
- package/dist/agent-verifier/chunk-E7SSWJXJ.mjs.map +0 -1
- package/dist/agent-verifier/chunk-F2DIOJJZ.mjs.map +0 -1
- package/dist/agent-verifier/chunk-G42BGGG2.mjs +0 -70
- package/dist/agent-verifier/chunk-G42BGGG2.mjs.map +0 -1
- package/dist/agent-verifier/chunk-H76MT5UR.mjs.map +0 -1
- package/dist/agent-verifier/chunk-HGMUAL33.mjs +0 -39
- package/dist/agent-verifier/chunk-HGMUAL33.mjs.map +0 -1
- package/dist/agent-verifier/chunk-JGT4P4UD.mjs.map +0 -1
- package/dist/agent-verifier/chunk-NAK77WXW.mjs.map +0 -1
- package/dist/agent-verifier/chunk-O4YCPU7C.mjs.map +0 -1
- package/dist/agent-verifier/chunk-S34FRJHS.mjs +0 -222
- package/dist/agent-verifier/chunk-S34FRJHS.mjs.map +0 -1
- package/dist/agent-verifier/chunk-SH5JKYOB.mjs.map +0 -1
- package/dist/agent-verifier/chunk-SKI2ESE5.mjs +0 -44
- package/dist/agent-verifier/chunk-TAEQKBJB.mjs.map +0 -1
- package/dist/agent-verifier/chunk-UIOLGH4A.mjs.map +0 -1
- package/dist/agent-verifier/chunk-UIZNWRM6.mjs +0 -2432
- package/dist/agent-verifier/chunk-UIZNWRM6.mjs.map +0 -1
- package/dist/agent-verifier/chunk-W3N3QJ4V.mjs +0 -624
- package/dist/agent-verifier/chunk-W3N3QJ4V.mjs.map +0 -1
- package/dist/agent-verifier/chunk-XGWCY624.mjs.map +0 -1
- package/dist/agent-verifier/chunk-XQXDOBYB.mjs.map +0 -1
- package/dist/agent-verifier/compile-TEQVA46V.mjs +0 -312
- package/dist/agent-verifier/compile-TEQVA46V.mjs.map +0 -1
- package/dist/agent-verifier/keychain-backend-SPQWGKZN.mjs.map +0 -1
- package/dist/agent-verifier/local-typecheck-XVGWI75X.mjs +0 -10
- package/dist/agent-verifier/materialize-workspace-ZAVGQQSF.mjs.map +0 -1
- package/dist/agent-verifier/reducer-bundle-preflight-LXNJUBKL.mjs +0 -20
- package/dist/agent-verifier/reducer-contract-preflight-TUMQ43JV.mjs +0 -11
- package/dist/agent-verifier/reducer-native-test-harness-CHX5MBL5.mjs +0 -50
- package/dist/agent-verifier/static-scaffold-R7SVDRQI.mjs +0 -27
- package/dist/agent-verifier/sync-THAI546U.mjs +0 -588
- package/dist/agent-verifier/sync-THAI546U.mjs.map +0 -1
- package/dist/agent-verifier/test-AFAQFKOB.mjs +0 -353
- package/dist/agent-verifier/test-AFAQFKOB.mjs.map +0 -1
- package/dist/agent-verifier/workspace-codegen-2ZMQRIKJ.mjs +0 -10
- package/dist/agent-verifier/workspace-dependencies-NOOQBK6I.mjs.map +0 -1
- package/dist/chunk-N7XPNNUI.js +0 -432
- package/dist/chunk-N7XPNNUI.js.map +0 -1
- package/dist/chunk-SEGVTWSK.js +0 -44
- package/dist/chunk-SEGVTWSK.js.map +0 -1
- package/dist/chunk-TAQKH67O.js.map +0 -1
- package/dist/dev-host/components/drawer.tsx +0 -132
- package/dist/dev-host/components/input.tsx +0 -21
- package/dist/dev-host/dev-api-proxy-plugin.ts +0 -328
- package/dist/dev-host/dev-author-dom-warnings.ts +0 -100
- package/dist/dev-host/dev-diagnostics.ts +0 -62
- package/dist/dev-host/dev-fallback-stylesheet.ts +0 -53
- package/dist/dev-host/dev-hmr-guard-plugin.ts +0 -47
- package/dist/dev-host/dev-host-controller.ts +0 -674
- package/dist/dev-host/dev-host-player-query.ts +0 -17
- package/dist/dev-host/dev-host-session-transport.ts +0 -52
- package/dist/dev-host/dev-host-storage.ts +0 -56
- package/dist/dev-host/dev-log-relay-plugin.ts +0 -510
- package/dist/dev-host/dev-runtime-config.ts +0 -14
- package/dist/dev-host/dev-runtime-platform.ts +0 -335
- package/dist/dev-host/dev-virtual-modules-plugin.ts +0 -64
- package/dist/dev-host/host-main.css +0 -224
- package/dist/dev-host/host-main.tsx +0 -948
- package/dist/dev-host/index.html +0 -56
- package/dist/dev-host/lib/utils.ts +0 -6
- package/dist/dev-host/plugin-main.ts +0 -61
- package/dist/dev-host/plugin.html +0 -24
- package/dist/dev-host/shared-styles.css +0 -144
- package/dist/dev-host/start-dev-server.ts +0 -140
- package/dist/dev-host/virtual-modules.d.ts +0 -27
- package/dist/global-config-S4ZIPECE.js.map +0 -1
- package/dist/keychain-backend-HDF4TZDL.js.map +0 -1
- package/skills/dreamboard/scripts/events-extract.mjs +0 -218
- /package/dist/agent-verifier/{chunk-SKI2ESE5.mjs.map → chunk-H6XDQJ3N.mjs.map} +0 -0
- /package/dist/agent-verifier/{chunk-VS573ERH.mjs.map → chunk-JZTH3EMV.mjs.map} +0 -0
- /package/dist/agent-verifier/{global-config-Y2NTSK4R.mjs.map → global-config-2NUESNEQ.mjs.map} +0 -0
- /package/dist/agent-verifier/{local-files-JFOQQZDL.mjs.map → local-files-OF4QFISU.mjs.map} +0 -0
- /package/dist/agent-verifier/{local-typecheck-XVGWI75X.mjs.map → project-state-XKUSCFSV.mjs.map} +0 -0
- /package/dist/agent-verifier/{prompt-MJRJMOGQ.mjs.map → prompt-VKHMCQT6.mjs.map} +0 -0
- /package/dist/agent-verifier/{project-state-K576C2TE.mjs.map → static-scaffold-CLRRWXON.mjs.map} +0 -0
- /package/dist/agent-verifier/{reducer-bundle-preflight-LXNJUBKL.mjs.map → workspace-codegen-SPPVHURX.mjs.map} +0 -0
- /package/dist/agent-verifier/{reducer-contract-preflight-TUMQ43JV.mjs.map → workspace-dependencies-5HEEKZFP.mjs.map} +0 -0
- /package/dist/{agent-verifier/reducer-native-test-harness-CHX5MBL5.mjs.map → authoring-compatibility-internal.js.map} +0 -0
- /package/dist/{agent-verifier/static-scaffold-R7SVDRQI.mjs.map → chunk-2H7UOFLK.js.map} +0 -0
- /package/dist/{agent-verifier/workspace-codegen-2ZMQRIKJ.mjs.map → global-config-RBMW7IVA.js.map} +0 -0
- /package/dist/{prompt-NDV3AE5L.js.map → prompt-GMZABCJC.js.map} +0 -0
- /package/{dist/scaffold → scaffold}/assets/static/app/tsconfig.framework.json +0 -0
- /package/{dist/scaffold → scaffold}/assets/static/app/tsconfig.json +0 -0
- /package/{dist/scaffold → scaffold}/assets/static/ui/index.tsx +0 -0
- /package/{dist/scaffold → scaffold}/assets/static/ui/style.css +0 -0
- /package/{dist/scaffold → scaffold}/assets/static/ui/tsconfig.framework.json +0 -0
- /package/{dist/scaffold → scaffold}/assets/static/ui/tsconfig.json +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/auth.ts","../../../node_modules/.pnpm/citty@0.2.2/node_modules/citty/dist/_chunks/libs/scule.mjs","../../../node_modules/.pnpm/citty@0.2.2/node_modules/citty/dist/index.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/core.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/index.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs","../src/auth/auth-server.ts","../src/commands/query.ts","../src/commands/clone.ts","../src/services/api/project-api.ts","../src/services/api/preview-api.ts","../../../packages/api-client/dist/source-revisions.js","../src/services/api/source-revisions-api.ts","../src/services/project/static-scaffold.ts","../src/services/project/framework-dependencies.ts","../src/services/project/sync.ts","../src/services/project/workspace-dependencies.ts","../src/services/project/dependency-tooling-messages.ts","../src/services/project/local-maintainer-registry.ts","../src/services/project/dependency-portability.ts","../src/services/project/local-typecheck.ts","../src/services/project/remote-project.ts","../src/commands/compile.ts","../src/commands/config.ts","../src/commands/dev.ts","../src/utils/dev-session.ts","../src/utils/player-count.ts","../src/dev-host/start-dev-server.ts","../src/dev-host/dev-api-proxy-plugin.ts","../src/dev-host/dev-runtime-platform.ts","../src/dev-host/dev-diagnostics.ts","../src/dev-host/dev-virtual-modules-plugin.ts","../src/dev-host/dev-log-relay-plugin.ts","../src/dev-host/dev-fallback-stylesheet.ts","../src/dev-host/dev-hmr-guard-plugin.ts","../src/services/project/reducer-contract-preflight.ts","../src/services/project/reducer-bundle-preflight.ts","../src/services/project/source-revision-paths.ts","../src/commands/join.ts","../src/services/join/jsonl-bot-session.ts","../src/utils/session-event-stream.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/new.ts","../src/services/project/materialize-workspace.ts","../src/utils/uuid-v7.ts","../src/commands/pull.ts","../src/commands/status.ts","../src/commands/sync.ts","../src/commands/test.ts","../src/services/testing/runtime-mode.ts","../src/services/workflows/resolve-latest-compiled-result.ts","../src/cli-main.ts","../src/index.ts"],"sourcesContent":["import crypto from \"node:crypto\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { startOAuthCallbackServer, openBrowser } from \"../auth/auth-server.js\";\nimport {\n buildClerkAuthorizationUrl,\n createPkcePair,\n exchangeClerkOAuthCode,\n} from \"../auth/clerk-oauth.js\";\nimport { DEFAULT_LOGIN_TIMEOUT_MS } from \"../constants.js\";\nimport {\n getGlobalAuthPath,\n getGlobalConfigPath,\n loadGlobalConfig,\n saveGlobalConfig,\n} from \"../config/global-config.js\";\nimport {\n clearCredentials,\n getActiveCredentialBackendName,\n getStoredSession,\n setAccessOnlySession,\n setCredentials,\n} from \"../config/credential-store.js\";\nimport {\n getAuthTokenExpiry,\n refreshResolvedAuthSession,\n resolveConfig,\n} from \"../config/resolve.js\";\nimport { parseAuthCommandArgs } from \"../flags.js\";\nimport { IS_PUBLISHED_BUILD, PUBLISHED_ENVIRONMENT } from \"../build-target.js\";\n\nasync function loginWithBrowser(\n config: ReturnType<typeof resolveConfig>,\n quiet: boolean,\n): Promise<{\n token: string;\n refreshToken: string;\n expiresAt?: string;\n tokenUrl: string;\n}> {\n const state = crypto.randomUUID();\n const pkce = createPkcePair();\n const server = await startOAuthCallbackServer(\n state,\n DEFAULT_LOGIN_TIMEOUT_MS,\n );\n const loginUrl = buildClerkAuthorizationUrl({\n config: {\n issuer: config.clerkOAuthIssuer,\n clientId: config.clerkOAuthClientId,\n tokenUrl: config.clerkOAuthTokenUrl,\n scope: config.clerkOAuthScope,\n },\n redirectUri: server.redirectUri,\n state,\n codeChallenge: pkce.challenge,\n }).toString();\n\n if (!quiet) {\n consola.info(\"Opening browser for login...\");\n consola.info(`If the browser does not open, visit: ${loginUrl}`);\n }\n\n openBrowser(loginUrl);\n\n if (!quiet) {\n consola.start(\"Waiting for login to complete...\");\n }\n\n try {\n const { code } = await server.waitForCode;\n const tokenResponse = await exchangeClerkOAuthCode({\n config: {\n issuer: config.clerkOAuthIssuer,\n clientId: config.clerkOAuthClientId,\n tokenUrl: config.clerkOAuthTokenUrl,\n },\n code,\n redirectUri: server.redirectUri,\n codeVerifier: pkce.verifier,\n });\n return {\n token: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n expiresAt: tokenResponse.expiresAt,\n tokenUrl: tokenResponse.tokenUrl,\n };\n } finally {\n server.close();\n }\n}\n\nexport default defineCommand({\n meta: { name: \"auth\", description: \"Manage stored Dreamboard sessions\" },\n args: {\n action: {\n type: \"positional\",\n description: IS_PUBLISHED_BUILD\n ? \"Action: clear | login\"\n : \"Action: set | clear | login | env | status\",\n required: true,\n },\n ...(IS_PUBLISHED_BUILD\n ? {}\n : {\n tokenValue: {\n type: \"positional\" as const,\n description: \"Token value (for set) or environment name (for env)\",\n required: false,\n },\n token: {\n type: \"string\" as const,\n description: \"Auth token (alternative)\",\n },\n jwt: {\n type: \"boolean\" as const,\n description: \"Print auth token JSON to stdout\",\n },\n env: {\n type: \"string\" as const,\n description: \"Environment: local | staging | prod\",\n },\n }),\n },\n async run({ args }) {\n const parsedArgs = parseAuthCommandArgs(args);\n const action = parsedArgs.action;\n const globalConfig = await loadGlobalConfig();\n\n if (IS_PUBLISHED_BUILD && action !== \"login\" && action !== \"clear\") {\n throw new Error(\n \"The published Dreamboard CLI only supports browser login and logout. Use `dreamboard login` or `dreamboard logout`.\",\n );\n }\n\n if (action === \"env\") {\n if (IS_PUBLISHED_BUILD) {\n throw new Error(\n \"The published Dreamboard CLI is production-only and does not support switching environments.\",\n );\n }\n const environment = parsedArgs.tokenValue ?? parsedArgs.env;\n if (!environment) {\n throw new Error(\"Usage: dreamboard auth env <local|staging|prod>\");\n }\n if (![\"local\", \"staging\", \"prod\"].includes(environment)) {\n throw new Error(\n `Invalid environment '${environment}'. Valid options: local, staging, prod`,\n );\n }\n await saveGlobalConfig({\n ...globalConfig,\n environment: environment as any,\n });\n consola.success(`Environment set to '${environment}'.`);\n return;\n }\n\n if (action === \"set\") {\n if (IS_PUBLISHED_BUILD) {\n throw new Error(\n \"Direct JWT injection is not supported in the published Dreamboard CLI. Use `dreamboard login` so the CLI can store a refreshable session.\",\n );\n }\n const token = parsedArgs.tokenValue ?? parsedArgs.token ?? \"\";\n if (!token) throw new Error(\"Usage: dreamboard auth set <token>\");\n\n // `auth set` is the power-user \"paste a JWT\" path. It has no\n // refresh token by construction; calling `setAccessOnlySession`\n // keeps the intent explicit at the storage layer rather than\n // piggybacking on a partial `setCredentials` write.\n await setAccessOnlySession(token);\n consola.success(`Auth token saved to ${getGlobalAuthPath()}.`);\n return;\n }\n\n if (action === \"clear\") {\n await clearCredentials();\n consola.success(\n `Stored Dreamboard session cleared from ${getGlobalAuthPath()}.`,\n );\n return;\n }\n\n if (action === \"login\") {\n const shouldPrintJwt = !IS_PUBLISHED_BUILD && parsedArgs.jwt === true;\n const environment = IS_PUBLISHED_BUILD\n ? PUBLISHED_ENVIRONMENT\n : parsedArgs.env || globalConfig.environment || \"staging\";\n\n const storedSession = await getStoredSession();\n let accessToken = storedSession?.accessToken;\n let refreshToken = storedSession?.refreshToken;\n let tokenExpiresAt = storedSession?.tokenExpiresAt;\n let clerkOAuthTokenUrl = storedSession?.clerkOAuthTokenUrl;\n let didRefreshStoredSession = false;\n let didUseBrowserLogin = false;\n const resolvedConfig = resolveConfig(\n globalConfig,\n { env: environment },\n undefined,\n storedSession,\n );\n\n if (accessToken && refreshToken) {\n try {\n const refreshed = await refreshResolvedAuthSession(resolvedConfig);\n accessToken = refreshed?.accessToken ?? accessToken;\n refreshToken = refreshed?.refreshToken ?? refreshToken;\n tokenExpiresAt = refreshed?.tokenExpiresAt ?? tokenExpiresAt;\n clerkOAuthTokenUrl =\n refreshed?.clerkOAuthTokenUrl ?? clerkOAuthTokenUrl;\n didRefreshStoredSession = Boolean(refreshed);\n } catch (error) {\n consola.warn(\n error instanceof Error\n ? error.message\n : \"Stored Dreamboard CLI session refresh failed.\",\n );\n accessToken = undefined;\n refreshToken = undefined;\n }\n }\n\n if (!accessToken) {\n const browserLogin = await loginWithBrowser(\n resolvedConfig,\n shouldPrintJwt,\n );\n accessToken = browserLogin.token;\n refreshToken = browserLogin.refreshToken;\n tokenExpiresAt = browserLogin.expiresAt;\n clerkOAuthTokenUrl = browserLogin.tokenUrl;\n didUseBrowserLogin = true;\n }\n\n if (!accessToken) {\n throw new Error(\"Login completed but no access token was returned.\");\n }\n\n await saveGlobalConfig({\n ...globalConfig,\n environment: environment as any,\n });\n\n if (refreshToken) {\n await setCredentials({\n accessToken,\n refreshToken,\n tokenExpiresAt,\n clerkOAuthIssuer: resolvedConfig.clerkOAuthIssuer,\n clerkOAuthClientId: resolvedConfig.clerkOAuthClientId,\n clerkOAuthTokenUrl,\n environment,\n });\n } else {\n await setAccessOnlySession(accessToken);\n }\n\n if (shouldPrintJwt) {\n process.stdout.write(\n `${JSON.stringify(\n {\n token: accessToken,\n refreshToken: refreshToken ?? null,\n environment,\n },\n null,\n 2,\n )}\\n`,\n );\n return;\n }\n\n if (didUseBrowserLogin) {\n consola.success(\n `Browser login successful. Session saved to ${getGlobalAuthPath()}`,\n );\n } else if (storedSession?.accessToken && didRefreshStoredSession) {\n consola.success(\n `Stored auth session refreshed and saved to ${getGlobalAuthPath()}`,\n );\n } else if (storedSession?.accessToken) {\n consola.success(\n `Stored auth token found. Session data remains in ${getGlobalAuthPath()}`,\n );\n }\n return;\n }\n\n if (action === \"status\") {\n const storedSession = await getStoredSession();\n const resolvedConfig = resolveConfig(\n globalConfig,\n { env: parsedArgs.env },\n undefined,\n storedSession,\n );\n const environment =\n parsedArgs.env || globalConfig.environment || \"staging\";\n const authTokenExpiry = getAuthTokenExpiry(resolvedConfig.authToken);\n const backendName = await getActiveCredentialBackendName();\n\n consola.log(`Environment: ${environment}`);\n consola.log(`Auth token source: ${resolvedConfig.authTokenSource}`);\n consola.log(`Refresh token source: ${resolvedConfig.refreshTokenSource}`);\n consola.log(\n `Credential backend: ${backendName}${\n backendName === \"keychain\"\n ? \" (OS keychain via @napi-rs/keyring)\"\n : ` (${getGlobalAuthPath()})`\n }`,\n );\n const preference = globalConfig.credentialBackend;\n if (preference) {\n consola.log(`Credential backend preference (config): ${preference}`);\n } else {\n consola.log(\n 'Credential backend preference (config): file (default; set `\"credentialBackend\": \"keychain\"` in config.json to opt in)',\n );\n }\n if (process.env.DREAMBOARD_CREDENTIAL_BACKEND) {\n consola.log(\n `Backend override: DREAMBOARD_CREDENTIAL_BACKEND=${process.env.DREAMBOARD_CREDENTIAL_BACKEND}`,\n );\n }\n consola.log(`Config path: ${getGlobalConfigPath()}`);\n\n if (!resolvedConfig.authToken) {\n consola.warn(\"No Dreamboard session found.\");\n return;\n }\n\n if (authTokenExpiry) {\n const isExpired = authTokenExpiry.getTime() <= Date.now();\n consola.log(\n `Access token expires at: ${authTokenExpiry.toISOString()} (${isExpired ? \"expired\" : \"active\"})`,\n );\n\n if (isExpired) {\n if (!resolvedConfig.refreshToken) {\n consola.warn(\n \"Access token is expired and no refresh token is available. Run `dreamboard login` to authenticate again.\",\n );\n return;\n }\n\n const refreshed = await refreshResolvedAuthSession(resolvedConfig);\n\n if (!refreshed?.accessToken) {\n consola.warn(\n \"Access token is expired and refresh did not return a new session.\",\n );\n return;\n }\n\n const refreshedExpiry = getAuthTokenExpiry(refreshed.accessToken);\n consola.success(\"Access token was expired and has been refreshed.\");\n if (refreshedExpiry) {\n consola.log(\n `Refreshed access token expires at: ${refreshedExpiry.toISOString()}`,\n );\n }\n return;\n }\n } else {\n consola.log(\"Access token expiry: unavailable\");\n }\n\n consola.success(\"Dreamboard session is active.\");\n return;\n }\n\n throw new Error(\n IS_PUBLISHED_BUILD\n ? \"Usage:\\n dreamboard auth clear\\n dreamboard auth login\"\n : \"Usage:\\n dreamboard auth clear\\n dreamboard auth login [--env <local|staging|prod>] [--jwt]\\n dreamboard auth set <token>\\n dreamboard auth env <local|staging|prod>\\n dreamboard auth status [--env <local|staging|prod>]\",\n );\n },\n});\n","//#region node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs\nconst NUMBER_CHAR_RE = /\\d/;\nconst STR_SPLITTERS = [\n\t\"-\",\n\t\"_\",\n\t\"/\",\n\t\".\"\n];\nfunction isUppercase(char = \"\") {\n\tif (NUMBER_CHAR_RE.test(char)) return;\n\treturn char !== char.toLowerCase();\n}\nfunction splitByCase(str, separators) {\n\tconst splitters = separators ?? STR_SPLITTERS;\n\tconst parts = [];\n\tif (!str || typeof str !== \"string\") return parts;\n\tlet buff = \"\";\n\tlet previousUpper;\n\tlet previousSplitter;\n\tfor (const char of str) {\n\t\tconst isSplitter = splitters.includes(char);\n\t\tif (isSplitter === true) {\n\t\t\tparts.push(buff);\n\t\t\tbuff = \"\";\n\t\t\tpreviousUpper = void 0;\n\t\t\tcontinue;\n\t\t}\n\t\tconst isUpper = isUppercase(char);\n\t\tif (previousSplitter === false) {\n\t\t\tif (previousUpper === false && isUpper === true) {\n\t\t\t\tparts.push(buff);\n\t\t\t\tbuff = char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (previousUpper === true && isUpper === false && buff.length > 1) {\n\t\t\t\tconst lastChar = buff.at(-1);\n\t\t\t\tparts.push(buff.slice(0, Math.max(0, buff.length - 1)));\n\t\t\t\tbuff = lastChar + char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tbuff += char;\n\t\tpreviousUpper = isUpper;\n\t\tpreviousSplitter = isSplitter;\n\t}\n\tparts.push(buff);\n\treturn parts;\n}\nfunction upperFirst(str) {\n\treturn str ? str[0].toUpperCase() + str.slice(1) : \"\";\n}\nfunction lowerFirst(str) {\n\treturn str ? str[0].toLowerCase() + str.slice(1) : \"\";\n}\nfunction pascalCase(str, opts) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => upperFirst(opts?.normalize ? p.toLowerCase() : p)).join(\"\") : \"\";\n}\nfunction camelCase(str, opts) {\n\treturn lowerFirst(pascalCase(str || \"\", opts));\n}\nfunction kebabCase(str, joiner) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => p.toLowerCase()).join(joiner ?? \"-\") : \"\";\n}\nfunction snakeCase(str) {\n\treturn kebabCase(str || \"\", \"_\");\n}\n//#endregion\nexport { kebabCase as n, snakeCase as r, camelCase as t };\n","import { n as kebabCase, r as snakeCase, t as camelCase } from \"./_chunks/libs/scule.mjs\";\nimport { parseArgs as parseArgs$1 } from \"node:util\";\n//#region src/_utils.ts\nfunction toArray(val) {\n\tif (Array.isArray(val)) return val;\n\treturn val === void 0 ? [] : [val];\n}\nfunction formatLineColumns(lines, linePrefix = \"\") {\n\tconst maxLength = [];\n\tfor (const line of lines) for (const [i, element] of line.entries()) maxLength[i] = Math.max(maxLength[i] || 0, element.length);\n\treturn lines.map((l) => l.map((c, i) => linePrefix + c[i === 0 ? \"padStart\" : \"padEnd\"](maxLength[i])).join(\" \")).join(\"\\n\");\n}\nfunction resolveValue(input) {\n\treturn typeof input === \"function\" ? input() : input;\n}\nvar CLIError = class extends Error {\n\tcode;\n\tconstructor(message, code) {\n\t\tsuper(message);\n\t\tthis.name = \"CLIError\";\n\t\tthis.code = code;\n\t}\n};\n//#endregion\n//#region src/_parser.ts\nfunction parseRawArgs(args = [], opts = {}) {\n\tconst booleans = new Set(opts.boolean || []);\n\tconst strings = new Set(opts.string || []);\n\tconst aliasMap = opts.alias || {};\n\tconst defaults = opts.default || {};\n\tconst aliasToMain = /* @__PURE__ */ new Map();\n\tconst mainToAliases = /* @__PURE__ */ new Map();\n\tfor (const [key, value] of Object.entries(aliasMap)) {\n\t\tconst targets = value;\n\t\tfor (const target of targets) {\n\t\t\taliasToMain.set(key, target);\n\t\t\tif (!mainToAliases.has(target)) mainToAliases.set(target, []);\n\t\t\tmainToAliases.get(target).push(key);\n\t\t\taliasToMain.set(target, key);\n\t\t\tif (!mainToAliases.has(key)) mainToAliases.set(key, []);\n\t\t\tmainToAliases.get(key).push(target);\n\t\t}\n\t}\n\tconst options = {};\n\tfunction getType(name) {\n\t\tif (booleans.has(name)) return \"boolean\";\n\t\tconst aliases = mainToAliases.get(name) || [];\n\t\tfor (const alias of aliases) if (booleans.has(alias)) return \"boolean\";\n\t\treturn \"string\";\n\t}\n\tfunction isStringType(name) {\n\t\tif (strings.has(name)) return true;\n\t\tconst aliases = mainToAliases.get(name) || [];\n\t\tfor (const alias of aliases) if (strings.has(alias)) return true;\n\t\treturn false;\n\t}\n\tconst allOptions = new Set([\n\t\t...booleans,\n\t\t...strings,\n\t\t...Object.keys(aliasMap),\n\t\t...Object.values(aliasMap).flat(),\n\t\t...Object.keys(defaults)\n\t]);\n\tfor (const name of allOptions) if (!options[name]) options[name] = {\n\t\ttype: getType(name),\n\t\tdefault: defaults[name]\n\t};\n\tfor (const [alias, main] of aliasToMain.entries()) if (alias.length === 1 && options[main] && !options[main].short) options[main].short = alias;\n\tconst processedArgs = [];\n\tconst negatedFlags = {};\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg === \"--\") {\n\t\t\tprocessedArgs.push(...args.slice(i));\n\t\t\tbreak;\n\t\t}\n\t\tif (arg.startsWith(\"--no-\")) {\n\t\t\tconst flagName = arg.slice(5);\n\t\t\tnegatedFlags[flagName] = true;\n\t\t\tcontinue;\n\t\t}\n\t\tprocessedArgs.push(arg);\n\t}\n\tlet parsed;\n\ttry {\n\t\tparsed = parseArgs$1({\n\t\t\targs: processedArgs,\n\t\t\toptions: Object.keys(options).length > 0 ? options : void 0,\n\t\t\tallowPositionals: true,\n\t\t\tstrict: false\n\t\t});\n\t} catch {\n\t\tparsed = {\n\t\t\tvalues: {},\n\t\t\tpositionals: processedArgs\n\t\t};\n\t}\n\tconst out = { _: [] };\n\tout._ = parsed.positionals;\n\tfor (const [key, value] of Object.entries(parsed.values)) {\n\t\tlet coerced = value;\n\t\tif (getType(key) === \"boolean\" && typeof value === \"string\") coerced = value !== \"false\";\n\t\telse if (isStringType(key) && typeof value === \"boolean\") coerced = \"\";\n\t\tout[key] = coerced;\n\t}\n\tfor (const [name] of Object.entries(negatedFlags)) {\n\t\tout[name] = false;\n\t\tconst mainName = aliasToMain.get(name);\n\t\tif (mainName) out[mainName] = false;\n\t\tconst aliases = mainToAliases.get(name);\n\t\tif (aliases) for (const alias of aliases) out[alias] = false;\n\t}\n\tfor (const [alias, main] of aliasToMain.entries()) {\n\t\tif (out[alias] !== void 0 && out[main] === void 0) out[main] = out[alias];\n\t\tif (out[main] !== void 0 && out[alias] === void 0) out[alias] = out[main];\n\t\tif (out[alias] !== out[main] && defaults[main] === out[main]) out[main] = out[alias];\n\t}\n\treturn out;\n}\n//#endregion\n//#region src/_color.ts\nconst noColor = /* @__PURE__ */ (() => {\n\tconst env = globalThis.process?.env ?? {};\n\treturn env.NO_COLOR === \"1\" || env.TERM === \"dumb\" || env.TEST || env.CI;\n})();\nconst _c = (c, r = 39) => (t) => noColor ? t : `\\u001B[${c}m${t}\\u001B[${r}m`;\nconst bold = /* @__PURE__ */ _c(1, 22);\nconst cyan = /* @__PURE__ */ _c(36);\nconst gray = /* @__PURE__ */ _c(90);\nconst underline = /* @__PURE__ */ _c(4, 24);\n//#endregion\n//#region src/args.ts\nfunction parseArgs(rawArgs, argsDef) {\n\tconst parseOptions = {\n\t\tboolean: [],\n\t\tstring: [],\n\t\talias: {},\n\t\tdefault: {}\n\t};\n\tconst args = resolveArgs(argsDef);\n\tfor (const arg of args) {\n\t\tif (arg.type === \"positional\") continue;\n\t\tif (arg.type === \"string\" || arg.type === \"enum\") parseOptions.string.push(arg.name);\n\t\telse if (arg.type === \"boolean\") parseOptions.boolean.push(arg.name);\n\t\tif (arg.default !== void 0) parseOptions.default[arg.name] = arg.default;\n\t\tif (arg.alias) parseOptions.alias[arg.name] = arg.alias;\n\t\tconst camelName = camelCase(arg.name);\n\t\tconst kebabName = kebabCase(arg.name);\n\t\tif (camelName !== arg.name || kebabName !== arg.name) {\n\t\t\tconst existingAliases = toArray(parseOptions.alias[arg.name] || []);\n\t\t\tif (camelName !== arg.name && !existingAliases.includes(camelName)) existingAliases.push(camelName);\n\t\t\tif (kebabName !== arg.name && !existingAliases.includes(kebabName)) existingAliases.push(kebabName);\n\t\t\tif (existingAliases.length > 0) parseOptions.alias[arg.name] = existingAliases;\n\t\t}\n\t}\n\tconst parsed = parseRawArgs(rawArgs, parseOptions);\n\tconst [ ...positionalArguments] = parsed._;\n\tconst parsedArgsProxy = new Proxy(parsed, { get(target, prop) {\n\t\treturn target[prop] ?? target[camelCase(prop)] ?? target[kebabCase(prop)];\n\t} });\n\tfor (const [, arg] of args.entries()) if (arg.type === \"positional\") {\n\t\tconst nextPositionalArgument = positionalArguments.shift();\n\t\tif (nextPositionalArgument !== void 0) parsedArgsProxy[arg.name] = nextPositionalArgument;\n\t\telse if (arg.default === void 0 && arg.required !== false) throw new CLIError(`Missing required positional argument: ${arg.name.toUpperCase()}`, \"EARG\");\n\t\telse parsedArgsProxy[arg.name] = arg.default;\n\t} else if (arg.type === \"enum\") {\n\t\tconst argument = parsedArgsProxy[arg.name];\n\t\tconst options = arg.options || [];\n\t\tif (argument !== void 0 && options.length > 0 && !options.includes(argument)) throw new CLIError(`Invalid value for argument: ${cyan(`--${arg.name}`)} (${cyan(argument)}). Expected one of: ${options.map((o) => cyan(o)).join(\", \")}.`, \"EARG\");\n\t} else if (arg.required && parsedArgsProxy[arg.name] === void 0) throw new CLIError(`Missing required argument: --${arg.name}`, \"EARG\");\n\treturn parsedArgsProxy;\n}\nfunction resolveArgs(argsDef) {\n\tconst args = [];\n\tfor (const [name, argDef] of Object.entries(argsDef || {})) args.push({\n\t\t...argDef,\n\t\tname,\n\t\talias: toArray(argDef.alias)\n\t});\n\treturn args;\n}\n//#endregion\n//#region src/plugin.ts\nfunction defineCittyPlugin(plugin) {\n\treturn plugin;\n}\nasync function resolvePlugins(plugins) {\n\treturn Promise.all(plugins.map((p) => resolveValue(p)));\n}\n//#endregion\n//#region src/command.ts\nfunction defineCommand(def) {\n\treturn def;\n}\nasync function runCommand(cmd, opts) {\n\tconst cmdArgs = await resolveValue(cmd.args || {});\n\tconst parsedArgs = parseArgs(opts.rawArgs, cmdArgs);\n\tconst context = {\n\t\trawArgs: opts.rawArgs,\n\t\targs: parsedArgs,\n\t\tdata: opts.data,\n\t\tcmd\n\t};\n\tconst plugins = await resolvePlugins(cmd.plugins ?? []);\n\tlet result;\n\tlet runError;\n\ttry {\n\t\tfor (const plugin of plugins) await plugin.setup?.(context);\n\t\tif (typeof cmd.setup === \"function\") await cmd.setup(context);\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\t\tconst subCommandArgIndex = findSubCommandIndex(opts.rawArgs, cmdArgs);\n\t\t\tconst explicitName = opts.rawArgs[subCommandArgIndex];\n\t\t\tif (explicitName) {\n\t\t\t\tconst subCommand = await _findSubCommand(subCommands, explicitName);\n\t\t\t\tif (!subCommand) throw new CLIError(`Unknown command ${cyan(explicitName)}`, \"E_UNKNOWN_COMMAND\");\n\t\t\t\tawait runCommand(subCommand, { rawArgs: opts.rawArgs.slice(subCommandArgIndex + 1) });\n\t\t\t} else {\n\t\t\t\tconst defaultSubCommand = await resolveValue(cmd.default);\n\t\t\t\tif (defaultSubCommand) {\n\t\t\t\t\tif (cmd.run) throw new CLIError(`Cannot specify both 'run' and 'default' on the same command.`, \"E_DEFAULT_CONFLICT\");\n\t\t\t\t\tconst subCommand = await _findSubCommand(subCommands, defaultSubCommand);\n\t\t\t\t\tif (!subCommand) throw new CLIError(`Default sub command ${cyan(defaultSubCommand)} not found in subCommands.`, \"E_UNKNOWN_COMMAND\");\n\t\t\t\t\tawait runCommand(subCommand, { rawArgs: opts.rawArgs });\n\t\t\t\t} else if (!cmd.run) throw new CLIError(`No command specified.`, \"E_NO_COMMAND\");\n\t\t\t}\n\t\t}\n\t\tif (typeof cmd.run === \"function\") result = await cmd.run(context);\n\t} catch (error) {\n\t\trunError = error;\n\t}\n\tconst cleanupErrors = [];\n\tif (typeof cmd.cleanup === \"function\") try {\n\t\tawait cmd.cleanup(context);\n\t} catch (error) {\n\t\tcleanupErrors.push(error);\n\t}\n\tfor (const plugin of [...plugins].reverse()) try {\n\t\tawait plugin.cleanup?.(context);\n\t} catch (error) {\n\t\tcleanupErrors.push(error);\n\t}\n\tif (runError) throw runError;\n\tif (cleanupErrors.length === 1) throw cleanupErrors[0];\n\tif (cleanupErrors.length > 1) throw new Error(\"Multiple cleanup errors\", { cause: cleanupErrors });\n\treturn { result };\n}\nasync function resolveSubCommand(cmd, rawArgs, parent) {\n\tconst subCommands = await resolveValue(cmd.subCommands);\n\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\tconst subCommandArgIndex = findSubCommandIndex(rawArgs, await resolveValue(cmd.args || {}));\n\t\tconst subCommandName = rawArgs[subCommandArgIndex];\n\t\tconst subCommand = await _findSubCommand(subCommands, subCommandName);\n\t\tif (subCommand) return resolveSubCommand(subCommand, rawArgs.slice(subCommandArgIndex + 1), cmd);\n\t}\n\treturn [cmd, parent];\n}\nasync function _findSubCommand(subCommands, name) {\n\tif (name in subCommands) return resolveValue(subCommands[name]);\n\tfor (const sub of Object.values(subCommands)) {\n\t\tconst resolved = await resolveValue(sub);\n\t\tconst meta = await resolveValue(resolved?.meta);\n\t\tif (meta?.alias) {\n\t\t\tif (toArray(meta.alias).includes(name)) return resolved;\n\t\t}\n\t}\n}\nfunction findSubCommandIndex(rawArgs, argsDef) {\n\tfor (let i = 0; i < rawArgs.length; i++) {\n\t\tconst arg = rawArgs[i];\n\t\tif (arg === \"--\") return -1;\n\t\tif (arg.startsWith(\"-\")) {\n\t\t\tif (!arg.includes(\"=\") && _isValueFlag(arg, argsDef)) i++;\n\t\t\tcontinue;\n\t\t}\n\t\treturn i;\n\t}\n\treturn -1;\n}\nfunction _isValueFlag(flag, argsDef) {\n\tconst name = flag.replace(/^-{1,2}/, \"\");\n\tconst normalized = camelCase(name);\n\tfor (const [key, def] of Object.entries(argsDef)) {\n\t\tif (def.type !== \"string\" && def.type !== \"enum\") continue;\n\t\tif (normalized === camelCase(key)) return true;\n\t\tif ((Array.isArray(def.alias) ? def.alias : def.alias ? [def.alias] : []).includes(name)) return true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/usage.ts\nasync function showUsage(cmd, parent) {\n\ttry {\n\t\tconsole.log(await renderUsage(cmd, parent) + \"\\n\");\n\t} catch (error) {\n\t\tconsole.error(error);\n\t}\n}\nconst negativePrefixRe = /^no[-A-Z]/;\nasync function renderUsage(cmd, parent) {\n\tconst cmdMeta = await resolveValue(cmd.meta || {});\n\tconst cmdArgs = resolveArgs(await resolveValue(cmd.args || {}));\n\tconst parentMeta = await resolveValue(parent?.meta || {});\n\tconst commandName = `${parentMeta.name ? `${parentMeta.name} ` : \"\"}` + (cmdMeta.name || process.argv[1]);\n\tconst argLines = [];\n\tconst posLines = [];\n\tconst commandsLines = [];\n\tconst usageLine = [];\n\tfor (const arg of cmdArgs) if (arg.type === \"positional\") {\n\t\tconst name = arg.name.toUpperCase();\n\t\tconst isRequired = arg.required !== false && arg.default === void 0;\n\t\tposLines.push([cyan(name + renderValueHint(arg)), renderDescription(arg, isRequired)]);\n\t\tusageLine.push(isRequired ? `<${name}>` : `[${name}]`);\n\t} else {\n\t\tconst isRequired = arg.required === true && arg.default === void 0;\n\t\tconst argStr = [...(arg.alias || []).map((a) => `-${a}`), `--${arg.name}`].join(\", \") + renderValueHint(arg);\n\t\targLines.push([cyan(argStr), renderDescription(arg, isRequired)]);\n\t\t/**\n\t\t* print negative boolean arg variant usage when\n\t\t* - enabled by default or has `negativeDescription`\n\t\t* - not prefixed with `no-` or `no[A-Z]`\n\t\t*/\n\t\tif (arg.type === \"boolean\" && (arg.default === true || arg.negativeDescription) && !negativePrefixRe.test(arg.name)) {\n\t\t\tconst negativeArgStr = [...(arg.alias || []).map((a) => `--no-${a}`), `--no-${arg.name}`].join(\", \");\n\t\t\targLines.push([cyan(negativeArgStr), [arg.negativeDescription, isRequired ? gray(\"(Required)\") : \"\"].filter(Boolean).join(\" \")]);\n\t\t}\n\t\tif (isRequired) usageLine.push(`--${arg.name}` + renderValueHint(arg));\n\t}\n\tif (cmd.subCommands) {\n\t\tconst commandNames = [];\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tfor (const [name, sub] of Object.entries(subCommands)) {\n\t\t\tconst meta = await resolveValue((await resolveValue(sub))?.meta);\n\t\t\tif (meta?.hidden) continue;\n\t\t\tconst aliases = toArray(meta?.alias);\n\t\t\tconst label = [name, ...aliases].join(\", \");\n\t\t\tcommandsLines.push([cyan(label), meta?.description || \"\"]);\n\t\t\tcommandNames.push(name, ...aliases);\n\t\t}\n\t\tusageLine.push(commandNames.join(\"|\"));\n\t}\n\tconst usageLines = [];\n\tconst version = cmdMeta.version || parentMeta.version;\n\tusageLines.push(gray(`${cmdMeta.description} (${commandName + (version ? ` v${version}` : \"\")})`), \"\");\n\tconst hasOptions = argLines.length > 0 || posLines.length > 0;\n\tusageLines.push(`${underline(bold(\"USAGE\"))} ${cyan(`${commandName}${hasOptions ? \" [OPTIONS]\" : \"\"} ${usageLine.join(\" \")}`)}`, \"\");\n\tif (posLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"ARGUMENTS\")), \"\");\n\t\tusageLines.push(formatLineColumns(posLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (argLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"OPTIONS\")), \"\");\n\t\tusageLines.push(formatLineColumns(argLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (commandsLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"COMMANDS\")), \"\");\n\t\tusageLines.push(formatLineColumns(commandsLines, \" \"));\n\t\tusageLines.push(\"\", `Use ${cyan(`${commandName} <command> --help`)} for more information about a command.`);\n\t}\n\treturn usageLines.filter((l) => typeof l === \"string\").join(\"\\n\");\n}\nfunction renderValueHint(arg) {\n\tconst valueHint = arg.valueHint ? `=<${arg.valueHint}>` : \"\";\n\tconst fallbackValueHint = valueHint || `=<${snakeCase(arg.name)}>`;\n\tif (!arg.type || arg.type === \"positional\" || arg.type === \"boolean\") return valueHint;\n\tif (arg.type === \"enum\" && arg.options?.length) return `=<${arg.options.join(\"|\")}>`;\n\treturn fallbackValueHint;\n}\nfunction renderDescription(arg, required) {\n\tconst requiredHint = required ? gray(\"(Required)\") : \"\";\n\tconst defaultHint = arg.default === void 0 ? \"\" : gray(`(Default: ${arg.default})`);\n\treturn [\n\t\targ.description,\n\t\trequiredHint,\n\t\tdefaultHint\n\t].filter(Boolean).join(\" \");\n}\n//#endregion\n//#region src/main.ts\nasync function runMain(cmd, opts = {}) {\n\tconst rawArgs = opts.rawArgs || process.argv.slice(2);\n\tconst showUsage$1 = opts.showUsage || showUsage;\n\ttry {\n\t\tconst builtinFlags = await _resolveBuiltinFlags(cmd);\n\t\tif (builtinFlags.help.length > 0 && rawArgs.some((arg) => builtinFlags.help.includes(arg))) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tprocess.exit(0);\n\t\t} else if (rawArgs.length === 1 && builtinFlags.version.includes(rawArgs[0])) {\n\t\t\tconst meta = typeof cmd.meta === \"function\" ? await cmd.meta() : await cmd.meta;\n\t\t\tif (!meta?.version) throw new CLIError(\"No version specified\", \"E_NO_VERSION\");\n\t\t\tconsole.log(meta.version);\n\t\t} else await runCommand(cmd, { rawArgs });\n\t} catch (error) {\n\t\tif (error instanceof CLIError) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tconsole.error(error.message);\n\t\t} else console.error(error, \"\\n\");\n\t\tprocess.exit(1);\n\t}\n}\nfunction createMain(cmd) {\n\treturn (opts = {}) => runMain(cmd, opts);\n}\nasync function _resolveBuiltinFlags(cmd) {\n\tconst argsDef = await resolveValue(cmd.args || {});\n\tconst userNames = /* @__PURE__ */ new Set();\n\tconst userAliases = /* @__PURE__ */ new Set();\n\tfor (const [name, def] of Object.entries(argsDef)) {\n\t\tuserNames.add(name);\n\t\tfor (const alias of toArray(def.alias)) userAliases.add(alias);\n\t}\n\treturn {\n\t\thelp: _getBuiltinFlags(\"help\", \"h\", userNames, userAliases),\n\t\tversion: _getBuiltinFlags(\"version\", \"v\", userNames, userAliases)\n\t};\n}\nfunction _getBuiltinFlags(long, short, userNames, userAliases) {\n\tif (userNames.has(long) || userAliases.has(long)) return [];\n\tif (userNames.has(short) || userAliases.has(short)) return [`--${long}`];\n\treturn [`--${long}`, `-${short}`];\n}\n//#endregion\nexport { createMain, defineCittyPlugin, defineCommand, parseArgs, renderUsage, runCommand, runMain, showUsage };\n","const LogLevels = {\n silent: Number.NEGATIVE_INFINITY,\n fatal: 0,\n error: 0,\n warn: 1,\n log: 2,\n info: 3,\n success: 3,\n fail: 3,\n ready: 3,\n start: 3,\n box: 3,\n debug: 4,\n trace: 5,\n verbose: Number.POSITIVE_INFINITY\n};\nconst LogTypes = {\n // Silent\n silent: {\n level: -1\n },\n // Level 0\n fatal: {\n level: LogLevels.fatal\n },\n error: {\n level: LogLevels.error\n },\n // Level 1\n warn: {\n level: LogLevels.warn\n },\n // Level 2\n log: {\n level: LogLevels.log\n },\n // Level 3\n info: {\n level: LogLevels.info\n },\n success: {\n level: LogLevels.success\n },\n fail: {\n level: LogLevels.fail\n },\n ready: {\n level: LogLevels.info\n },\n start: {\n level: LogLevels.info\n },\n box: {\n level: LogLevels.info\n },\n // Level 4\n debug: {\n level: LogLevels.debug\n },\n // Level 5\n trace: {\n level: LogLevels.trace\n },\n // Verbose\n verbose: {\n level: LogLevels.verbose\n }\n};\n\nfunction isPlainObject$1(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$1(defaults)) {\n return _defu(baseObject, {}, namespace, merger);\n }\n const object = Object.assign({}, defaults);\n for (const key in 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$1(value) && isPlainObject$1(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();\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isLogObj(arg) {\n if (!isPlainObject(arg)) {\n return false;\n }\n if (!arg.message && !arg.args) {\n return false;\n }\n if (arg.stack) {\n return false;\n }\n return true;\n}\n\nlet paused = false;\nconst queue = [];\nclass Consola {\n options;\n _lastLog;\n _mockFn;\n /**\n * Creates an instance of Consola with specified options or defaults.\n *\n * @param {Partial<ConsolaOptions>} [options={}] - Configuration options for the Consola instance.\n */\n constructor(options = {}) {\n const types = options.types || LogTypes;\n this.options = defu(\n {\n ...options,\n defaults: { ...options.defaults },\n level: _normalizeLogLevel(options.level, types),\n reporters: [...options.reporters || []]\n },\n {\n types: LogTypes,\n throttle: 1e3,\n throttleMin: 5,\n formatOptions: {\n date: true,\n colors: false,\n compact: true\n }\n }\n );\n for (const type in types) {\n const defaults = {\n type,\n ...this.options.defaults,\n ...types[type]\n };\n this[type] = this._wrapLogFn(defaults);\n this[type].raw = this._wrapLogFn(\n defaults,\n true\n );\n }\n if (this.options.mockFn) {\n this.mockTypes();\n }\n this._lastLog = {};\n }\n /**\n * Gets the current log level of the Consola instance.\n *\n * @returns {number} The current log level.\n */\n get level() {\n return this.options.level;\n }\n /**\n * Sets the minimum log level that will be output by the instance.\n *\n * @param {number} level - The new log level to set.\n */\n set level(level) {\n this.options.level = _normalizeLogLevel(\n level,\n this.options.types,\n this.options.level\n );\n }\n /**\n * Displays a prompt to the user and returns the response.\n * Throw an error if `prompt` is not supported by the current configuration.\n *\n * @template T\n * @param {string} message - The message to display in the prompt.\n * @param {T} [opts] - Optional options for the prompt. See {@link PromptOptions}.\n * @returns {promise<T>} A promise that infer with the prompt options. See {@link PromptOptions}.\n */\n prompt(message, opts) {\n if (!this.options.prompt) {\n throw new Error(\"prompt is not supported!\");\n }\n return this.options.prompt(message, opts);\n }\n /**\n * Creates a new instance of Consola, inheriting options from the current instance, with possible overrides.\n *\n * @param {Partial<ConsolaOptions>} options - Optional overrides for the new instance. See {@link ConsolaOptions}.\n * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}.\n */\n create(options) {\n const instance = new Consola({\n ...this.options,\n ...options\n });\n if (this._mockFn) {\n instance.mockTypes(this._mockFn);\n }\n return instance;\n }\n /**\n * Creates a new Consola instance with the specified default log object properties.\n *\n * @param {InputLogObject} defaults - Default properties to include in any log from the new instance. See {@link InputLogObject}.\n * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}.\n */\n withDefaults(defaults) {\n return this.create({\n ...this.options,\n defaults: {\n ...this.options.defaults,\n ...defaults\n }\n });\n }\n /**\n * Creates a new Consola instance with a specified tag, which will be included in every log.\n *\n * @param {string} tag - The tag to include in each log of the new instance.\n * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}.\n */\n withTag(tag) {\n return this.withDefaults({\n tag: this.options.defaults.tag ? this.options.defaults.tag + \":\" + tag : tag\n });\n }\n /**\n * Adds a custom reporter to the Consola instance.\n * Reporters will be called for each log message, depending on their implementation and log level.\n *\n * @param {ConsolaReporter} reporter - The reporter to add. See {@link ConsolaReporter}.\n * @returns {Consola} The current Consola instance.\n */\n addReporter(reporter) {\n this.options.reporters.push(reporter);\n return this;\n }\n /**\n * Removes a custom reporter from the Consola instance.\n * If no reporter is specified, all reporters will be removed.\n *\n * @param {ConsolaReporter} reporter - The reporter to remove. See {@link ConsolaReporter}.\n * @returns {Consola} The current Consola instance.\n */\n removeReporter(reporter) {\n if (reporter) {\n const i = this.options.reporters.indexOf(reporter);\n if (i !== -1) {\n return this.options.reporters.splice(i, 1);\n }\n } else {\n this.options.reporters.splice(0);\n }\n return this;\n }\n /**\n * Replaces all reporters of the Consola instance with the specified array of reporters.\n *\n * @param {ConsolaReporter[]} reporters - The new reporters to set. See {@link ConsolaReporter}.\n * @returns {Consola} The current Consola instance.\n */\n setReporters(reporters) {\n this.options.reporters = Array.isArray(reporters) ? reporters : [reporters];\n return this;\n }\n wrapAll() {\n this.wrapConsole();\n this.wrapStd();\n }\n restoreAll() {\n this.restoreConsole();\n this.restoreStd();\n }\n /**\n * Overrides console methods with Consola logging methods for consistent logging.\n */\n wrapConsole() {\n for (const type in this.options.types) {\n if (!console[\"__\" + type]) {\n console[\"__\" + type] = console[type];\n }\n console[type] = this[type].raw;\n }\n }\n /**\n * Restores the original console methods, removing Consola overrides.\n */\n restoreConsole() {\n for (const type in this.options.types) {\n if (console[\"__\" + type]) {\n console[type] = console[\"__\" + type];\n delete console[\"__\" + type];\n }\n }\n }\n /**\n * Overrides standard output and error streams to redirect them through Consola.\n */\n wrapStd() {\n this._wrapStream(this.options.stdout, \"log\");\n this._wrapStream(this.options.stderr, \"log\");\n }\n _wrapStream(stream, type) {\n if (!stream) {\n return;\n }\n if (!stream.__write) {\n stream.__write = stream.write;\n }\n stream.write = (data) => {\n this[type].raw(String(data).trim());\n };\n }\n /**\n * Restores the original standard output and error streams, removing the Consola redirection.\n */\n restoreStd() {\n this._restoreStream(this.options.stdout);\n this._restoreStream(this.options.stderr);\n }\n _restoreStream(stream) {\n if (!stream) {\n return;\n }\n if (stream.__write) {\n stream.write = stream.__write;\n delete stream.__write;\n }\n }\n /**\n * Pauses logging, queues incoming logs until resumed.\n */\n pauseLogs() {\n paused = true;\n }\n /**\n * Resumes logging, processing any queued logs.\n */\n resumeLogs() {\n paused = false;\n const _queue = queue.splice(0);\n for (const item of _queue) {\n item[0]._logFn(item[1], item[2]);\n }\n }\n /**\n * Replaces logging methods with mocks if a mock function is provided.\n *\n * @param {ConsolaOptions[\"mockFn\"]} mockFn - The function to use for mocking logging methods. See {@link ConsolaOptions[\"mockFn\"]}.\n */\n mockTypes(mockFn) {\n const _mockFn = mockFn || this.options.mockFn;\n this._mockFn = _mockFn;\n if (typeof _mockFn !== \"function\") {\n return;\n }\n for (const type in this.options.types) {\n this[type] = _mockFn(type, this.options.types[type]) || this[type];\n this[type].raw = this[type];\n }\n }\n _wrapLogFn(defaults, isRaw) {\n return (...args) => {\n if (paused) {\n queue.push([this, defaults, args, isRaw]);\n return;\n }\n return this._logFn(defaults, args, isRaw);\n };\n }\n _logFn(defaults, args, isRaw) {\n if ((defaults.level || 0) > this.level) {\n return false;\n }\n const logObj = {\n date: /* @__PURE__ */ new Date(),\n args: [],\n ...defaults,\n level: _normalizeLogLevel(defaults.level, this.options.types)\n };\n if (!isRaw && args.length === 1 && isLogObj(args[0])) {\n Object.assign(logObj, args[0]);\n } else {\n logObj.args = [...args];\n }\n if (logObj.message) {\n logObj.args.unshift(logObj.message);\n delete logObj.message;\n }\n if (logObj.additional) {\n if (!Array.isArray(logObj.additional)) {\n logObj.additional = logObj.additional.split(\"\\n\");\n }\n logObj.args.push(\"\\n\" + logObj.additional.join(\"\\n\"));\n delete logObj.additional;\n }\n logObj.type = typeof logObj.type === \"string\" ? logObj.type.toLowerCase() : \"log\";\n logObj.tag = typeof logObj.tag === \"string\" ? logObj.tag : \"\";\n const resolveLog = (newLog = false) => {\n const repeated = (this._lastLog.count || 0) - this.options.throttleMin;\n if (this._lastLog.object && repeated > 0) {\n const args2 = [...this._lastLog.object.args];\n if (repeated > 1) {\n args2.push(`(repeated ${repeated} times)`);\n }\n this._log({ ...this._lastLog.object, args: args2 });\n this._lastLog.count = 1;\n }\n if (newLog) {\n this._lastLog.object = logObj;\n this._log(logObj);\n }\n };\n clearTimeout(this._lastLog.timeout);\n const diffTime = this._lastLog.time && logObj.date ? logObj.date.getTime() - this._lastLog.time.getTime() : 0;\n this._lastLog.time = logObj.date;\n if (diffTime < this.options.throttle) {\n try {\n const serializedLog = JSON.stringify([\n logObj.type,\n logObj.tag,\n logObj.args\n ]);\n const isSameLog = this._lastLog.serialized === serializedLog;\n this._lastLog.serialized = serializedLog;\n if (isSameLog) {\n this._lastLog.count = (this._lastLog.count || 0) + 1;\n if (this._lastLog.count > this.options.throttleMin) {\n this._lastLog.timeout = setTimeout(\n resolveLog,\n this.options.throttle\n );\n return;\n }\n }\n } catch {\n }\n }\n resolveLog(true);\n }\n _log(logObj) {\n for (const reporter of this.options.reporters) {\n reporter.log(logObj, {\n options: this.options\n });\n }\n }\n}\nfunction _normalizeLogLevel(input, types = {}, defaultLevel = 3) {\n if (input === void 0) {\n return defaultLevel;\n }\n if (typeof input === \"number\") {\n return input;\n }\n if (types[input] && types[input].level !== void 0) {\n return types[input].level;\n }\n return defaultLevel;\n}\nConsola.prototype.add = Consola.prototype.addReporter;\nConsola.prototype.remove = Consola.prototype.removeReporter;\nConsola.prototype.clear = Consola.prototype.removeReporter;\nConsola.prototype.withScope = Consola.prototype.withTag;\nConsola.prototype.mock = Consola.prototype.mockTypes;\nConsola.prototype.pause = Consola.prototype.pauseLogs;\nConsola.prototype.resume = Consola.prototype.resumeLogs;\nfunction createConsola(options = {}) {\n return new Consola(options);\n}\n\nexport { Consola, LogLevels, LogTypes, createConsola };\n","import { formatWithOptions } from 'node:util';\nimport { sep } from 'node:path';\n\nfunction parseStack(stack, message) {\n const cwd = process.cwd() + sep;\n const lines = stack.split(\"\\n\").splice(message.split(\"\\n\").length).map((l) => l.trim().replace(\"file://\", \"\").replace(cwd, \"\"));\n return lines;\n}\n\nfunction writeStream(data, stream) {\n const write = stream.__write || stream.write;\n return write.call(stream, data);\n}\n\nconst bracket = (x) => x ? `[${x}]` : \"\";\nclass BasicReporter {\n formatStack(stack, message, opts) {\n const indent = \" \".repeat((opts?.errorLevel || 0) + 1);\n return indent + parseStack(stack, message).join(`\n${indent}`);\n }\n formatError(err, opts) {\n const message = err.message ?? formatWithOptions(opts, err);\n const stack = err.stack ? this.formatStack(err.stack, message, opts) : \"\";\n const level = opts?.errorLevel || 0;\n const causedPrefix = level > 0 ? `${\" \".repeat(level)}[cause]: ` : \"\";\n const causedError = err.cause ? \"\\n\\n\" + this.formatError(err.cause, { ...opts, errorLevel: level + 1 }) : \"\";\n return causedPrefix + message + \"\\n\" + stack + causedError;\n }\n formatArgs(args, opts) {\n const _args = args.map((arg) => {\n if (arg && typeof arg.stack === \"string\") {\n return this.formatError(arg, opts);\n }\n return arg;\n });\n return formatWithOptions(opts, ..._args);\n }\n formatDate(date, opts) {\n return opts.date ? date.toLocaleTimeString() : \"\";\n }\n filterAndJoin(arr) {\n return arr.filter(Boolean).join(\" \");\n }\n formatLogObj(logObj, opts) {\n const message = this.formatArgs(logObj.args, opts);\n if (logObj.type === \"box\") {\n return \"\\n\" + [\n bracket(logObj.tag),\n logObj.title && logObj.title,\n ...message.split(\"\\n\")\n ].filter(Boolean).map((l) => \" > \" + l).join(\"\\n\") + \"\\n\";\n }\n return this.filterAndJoin([\n bracket(logObj.type),\n bracket(logObj.tag),\n message\n ]);\n }\n log(logObj, ctx) {\n const line = this.formatLogObj(logObj, {\n columns: ctx.options.stdout.columns || 0,\n ...ctx.options.formatOptions\n });\n return writeStream(\n line + \"\\n\",\n logObj.level < 2 ? ctx.options.stderr || process.stderr : ctx.options.stdout || process.stdout\n );\n }\n}\n\nexport { BasicReporter as B, parseStack as p };\n","import { createConsola as createConsola$1, LogLevels } from './core.mjs';\nexport { Consola, LogTypes } from './core.mjs';\nimport { B as BasicReporter, p as parseStack } from './shared/consola.DRwqZj3T.mjs';\nimport g$1 from 'node:process';\nimport { e as colors, d as box, s as stripAnsi$1 } from './shared/consola.DXBYu-KD.mjs';\nimport 'node:util';\nimport 'node:path';\nimport 'node:tty';\n\nconst r=Object.create(null),i=e=>globalThis.process?.env||import.meta.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?r:globalThis),o=new Proxy(r,{get(e,s){return i()[s]??r[s]},has(e,s){const E=i();return s in E||s in r},set(e,s,E){const B=i(true);return B[s]=E,true},deleteProperty(e,s){if(!s)return false;const E=i(true);return delete E[s],true},ownKeys(){const e=i(true);return Object.keys(e)}}),t=typeof process<\"u\"&&process.env&&process.env.NODE_ENV||\"\",f=[[\"APPVEYOR\"],[\"AWS_AMPLIFY\",\"AWS_APP_ID\",{ci:true}],[\"AZURE_PIPELINES\",\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\"],[\"AZURE_STATIC\",\"INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN\"],[\"APPCIRCLE\",\"AC_APPCIRCLE\"],[\"BAMBOO\",\"bamboo_planKey\"],[\"BITBUCKET\",\"BITBUCKET_COMMIT\"],[\"BITRISE\",\"BITRISE_IO\"],[\"BUDDY\",\"BUDDY_WORKSPACE_ID\"],[\"BUILDKITE\"],[\"CIRCLE\",\"CIRCLECI\"],[\"CIRRUS\",\"CIRRUS_CI\"],[\"CLOUDFLARE_PAGES\",\"CF_PAGES\",{ci:true}],[\"CODEBUILD\",\"CODEBUILD_BUILD_ARN\"],[\"CODEFRESH\",\"CF_BUILD_ID\"],[\"DRONE\"],[\"DRONE\",\"DRONE_BUILD_EVENT\"],[\"DSARI\"],[\"GITHUB_ACTIONS\"],[\"GITLAB\",\"GITLAB_CI\"],[\"GITLAB\",\"CI_MERGE_REQUEST_ID\"],[\"GOCD\",\"GO_PIPELINE_LABEL\"],[\"LAYERCI\"],[\"HUDSON\",\"HUDSON_URL\"],[\"JENKINS\",\"JENKINS_URL\"],[\"MAGNUM\"],[\"NETLIFY\"],[\"NETLIFY\",\"NETLIFY_LOCAL\",{ci:false}],[\"NEVERCODE\"],[\"RENDER\"],[\"SAIL\",\"SAILCI\"],[\"SEMAPHORE\"],[\"SCREWDRIVER\"],[\"SHIPPABLE\"],[\"SOLANO\",\"TDDIUM\"],[\"STRIDER\"],[\"TEAMCITY\",\"TEAMCITY_VERSION\"],[\"TRAVIS\"],[\"VERCEL\",\"NOW_BUILDER\"],[\"VERCEL\",\"VERCEL\",{ci:false}],[\"VERCEL\",\"VERCEL_ENV\",{ci:false}],[\"APPCENTER\",\"APPCENTER_BUILD_ID\"],[\"CODESANDBOX\",\"CODESANDBOX_SSE\",{ci:false}],[\"CODESANDBOX\",\"CODESANDBOX_HOST\",{ci:false}],[\"STACKBLITZ\"],[\"STORMKIT\"],[\"CLEAVR\"],[\"ZEABUR\"],[\"CODESPHERE\",\"CODESPHERE_APP_ID\",{ci:true}],[\"RAILWAY\",\"RAILWAY_PROJECT_ID\"],[\"RAILWAY\",\"RAILWAY_SERVICE_ID\"],[\"DENO-DEPLOY\",\"DENO_DEPLOYMENT_ID\"],[\"FIREBASE_APP_HOSTING\",\"FIREBASE_APP_HOSTING\",{ci:true}]];function b(){if(globalThis.process?.env)for(const e of f){const s=e[1]||e[0];if(globalThis.process?.env[s])return {name:e[0].toLowerCase(),...e[2]}}return globalThis.process?.env?.SHELL===\"/bin/jsh\"&&globalThis.process?.versions?.webcontainer?{name:\"stackblitz\",ci:false}:{name:\"\",ci:false}}const l=b();l.name;function n(e){return e?e!==\"false\":false}const I=globalThis.process?.platform||\"\",T=n(o.CI)||l.ci!==false,a=n(globalThis.process?.stdout&&globalThis.process?.stdout.isTTY),g=n(o.DEBUG),R=t===\"test\"||n(o.TEST);n(o.MINIMAL)||T||R||!a;const A=/^win/i.test(I);!n(o.NO_COLOR)&&(n(o.FORCE_COLOR)||(a||A)&&o.TERM!==\"dumb\"||T);const C=(globalThis.process?.versions?.node||\"\").replace(/^v/,\"\")||null;Number(C?.split(\".\")[0])||null;const y=globalThis.process||Object.create(null),_={versions:{}};new Proxy(y,{get(e,s){if(s===\"env\")return o;if(s in e)return e[s];if(s in _)return _[s]}});const c=globalThis.process?.release?.name===\"node\",O=!!globalThis.Bun||!!globalThis.process?.versions?.bun,D=!!globalThis.Deno,L=!!globalThis.fastly,S=!!globalThis.Netlify,u=!!globalThis.EdgeRuntime,N=globalThis.navigator?.userAgent===\"Cloudflare-Workers\",F=[[S,\"netlify\"],[u,\"edge-light\"],[N,\"workerd\"],[L,\"fastly\"],[D,\"deno\"],[O,\"bun\"],[c,\"node\"]];function G(){const e=F.find(s=>s[0]);if(e)return {name:e[1]}}const P=G();P?.name||\"\";\n\nfunction ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n\nconst regex = ansiRegex();\n\nfunction stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n\n// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x === 0x16FF0\n\t\t|| x === 0x16FF1\n\t\t|| x >= 0x17000 && x <= 0x187F7\n\t\t|| x >= 0x18800 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D08\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D7\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA89\n\t\t|| x >= 0x1FA8F && x <= 0x1FAC6\n\t\t|| x >= 0x1FACE && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAE9\n\t\t|| x >= 0x1FAF0 && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nfunction eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\nconst emojiRegex = () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE89\\uDE8F-\\uDEC2\\uDEC6\\uDECE-\\uDEDC\\uDEDF-\\uDEE9]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n\nconst segmenter = globalThis.Intl?.Segmenter ? new Intl.Segmenter() : { segment: (str) => str.split('') };\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nfunction stringWidth$1(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n\nfunction isUnicodeSupported() {\n\tconst {env} = g$1;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (g$1.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n\nconst TYPE_COLOR_MAP = {\n info: \"cyan\",\n fail: \"red\",\n success: \"green\",\n ready: \"green\",\n start: \"magenta\"\n};\nconst LEVEL_COLOR_MAP = {\n 0: \"red\",\n 1: \"yellow\"\n};\nconst unicode = isUnicodeSupported();\nconst s = (c, fallback) => unicode ? c : fallback;\nconst TYPE_ICONS = {\n error: s(\"\\u2716\", \"\\xD7\"),\n fatal: s(\"\\u2716\", \"\\xD7\"),\n ready: s(\"\\u2714\", \"\\u221A\"),\n warn: s(\"\\u26A0\", \"\\u203C\"),\n info: s(\"\\u2139\", \"i\"),\n success: s(\"\\u2714\", \"\\u221A\"),\n debug: s(\"\\u2699\", \"D\"),\n trace: s(\"\\u2192\", \"\\u2192\"),\n fail: s(\"\\u2716\", \"\\xD7\"),\n start: s(\"\\u25D0\", \"o\"),\n log: \"\"\n};\nfunction stringWidth(str) {\n const hasICU = typeof Intl === \"object\";\n if (!hasICU || !Intl.Segmenter) {\n return stripAnsi$1(str).length;\n }\n return stringWidth$1(str);\n}\nclass FancyReporter extends BasicReporter {\n formatStack(stack, message, opts) {\n const indent = \" \".repeat((opts?.errorLevel || 0) + 1);\n return `\n${indent}` + parseStack(stack, message).map(\n (line) => \" \" + line.replace(/^at +/, (m) => colors.gray(m)).replace(/\\((.+)\\)/, (_, m) => `(${colors.cyan(m)})`)\n ).join(`\n${indent}`);\n }\n formatType(logObj, isBadge, opts) {\n const typeColor = TYPE_COLOR_MAP[logObj.type] || LEVEL_COLOR_MAP[logObj.level] || \"gray\";\n if (isBadge) {\n return getBgColor(typeColor)(\n colors.black(` ${logObj.type.toUpperCase()} `)\n );\n }\n const _type = typeof TYPE_ICONS[logObj.type] === \"string\" ? TYPE_ICONS[logObj.type] : logObj.icon || logObj.type;\n return _type ? getColor(typeColor)(_type) : \"\";\n }\n formatLogObj(logObj, opts) {\n const [message, ...additional] = this.formatArgs(logObj.args, opts).split(\n \"\\n\"\n );\n if (logObj.type === \"box\") {\n return box(\n characterFormat(\n message + (additional.length > 0 ? \"\\n\" + additional.join(\"\\n\") : \"\")\n ),\n {\n title: logObj.title ? characterFormat(logObj.title) : void 0,\n style: logObj.style\n }\n );\n }\n const date = this.formatDate(logObj.date, opts);\n const coloredDate = date && colors.gray(date);\n const isBadge = logObj.badge ?? logObj.level < 2;\n const type = this.formatType(logObj, isBadge, opts);\n const tag = logObj.tag ? colors.gray(logObj.tag) : \"\";\n let line;\n const left = this.filterAndJoin([type, characterFormat(message)]);\n const right = this.filterAndJoin(opts.columns ? [tag, coloredDate] : [tag]);\n const space = (opts.columns || 0) - stringWidth(left) - stringWidth(right) - 2;\n line = space > 0 && (opts.columns || 0) >= 80 ? left + \" \".repeat(space) + right : (right ? `${colors.gray(`[${right}]`)} ` : \"\") + left;\n line += characterFormat(\n additional.length > 0 ? \"\\n\" + additional.join(\"\\n\") : \"\"\n );\n if (logObj.type === \"trace\") {\n const _err = new Error(\"Trace: \" + logObj.message);\n line += this.formatStack(_err.stack || \"\", _err.message);\n }\n return isBadge ? \"\\n\" + line + \"\\n\" : line;\n }\n}\nfunction characterFormat(str) {\n return str.replace(/`([^`]+)`/gm, (_, m) => colors.cyan(m)).replace(/\\s+_([^_]+)_\\s+/gm, (_, m) => ` ${colors.underline(m)} `);\n}\nfunction getColor(color = \"white\") {\n return colors[color] || colors.white;\n}\nfunction getBgColor(color = \"bgWhite\") {\n return colors[`bg${color[0].toUpperCase()}${color.slice(1)}`] || colors.bgWhite;\n}\n\nfunction createConsola(options = {}) {\n let level = _getDefaultLogLevel();\n if (process.env.CONSOLA_LEVEL) {\n level = Number.parseInt(process.env.CONSOLA_LEVEL) ?? level;\n }\n const consola2 = createConsola$1({\n level,\n defaults: { level },\n stdout: process.stdout,\n stderr: process.stderr,\n prompt: (...args) => import('./chunks/prompt.mjs').then((m) => m.prompt(...args)),\n reporters: options.reporters || [\n options.fancy ?? !(T || R) ? new FancyReporter() : new BasicReporter()\n ],\n ...options\n });\n return consola2;\n}\nfunction _getDefaultLogLevel() {\n if (g) {\n return LogLevels.debug;\n }\n if (R) {\n return LogLevels.warn;\n }\n return LogLevels.info;\n}\nconst consola = createConsola();\n\nexport { LogLevels, consola, createConsola, consola as default };\n","import * as tty from 'node:tty';\n\nconst {\n env = {},\n argv = [],\n platform = \"\"\n} = typeof process === \"undefined\" ? {} : process;\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\");\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\");\nconst isWindows = platform === \"win32\";\nconst isDumbTerminal = env.TERM === \"dumb\";\nconst isCompatibleTerminal = tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal;\nconst isCI = \"CI\" in env && (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env);\nconst isColorSupported = !isDisabled && (isForced || isWindows && !isDumbTerminal || isCompatibleTerminal || isCI);\nfunction replaceClose(index, string, close, replace, head = string.slice(0, Math.max(0, index)) + replace, tail = string.slice(Math.max(0, index + close.length)), next = tail.indexOf(close)) {\n return head + (next < 0 ? tail : replaceClose(next, tail, close, replace));\n}\nfunction clearBleed(index, string, open, close, replace) {\n return index < 0 ? open + string + close : open + replaceClose(index, string, close, replace) + close;\n}\nfunction filterEmpty(open, close, replace = open, at = open.length + 1) {\n return (string) => string || !(string === \"\" || string === void 0) ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n ) : \"\";\n}\nfunction init(open, close, replace) {\n return filterEmpty(`\\x1B[${open}m`, `\\x1B[${close}m`, replace);\n}\nconst colorDefs = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1B[22m\\x1B[1m\"),\n dim: init(2, 22, \"\\x1B[22m\\x1B[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49)\n};\nfunction createColors(useColor = isColorSupported) {\n return useColor ? colorDefs : Object.fromEntries(Object.keys(colorDefs).map((key) => [key, String]));\n}\nconst colors = createColors();\nfunction getColor(color, fallback = \"reset\") {\n return colors[color] || colors[fallback];\n}\nfunction colorize(color, text) {\n return getColor(color)(text);\n}\n\nconst ansiRegex = [\n String.raw`[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)`,\n String.raw`(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))`\n].join(\"|\");\nfunction stripAnsi(text) {\n return text.replace(new RegExp(ansiRegex, \"g\"), \"\");\n}\nfunction centerAlign(str, len, space = \" \") {\n const free = len - str.length;\n if (free <= 0) {\n return str;\n }\n const freeLeft = Math.floor(free / 2);\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < freeLeft || i >= freeLeft + str.length ? space : str[i - freeLeft];\n }\n return _str;\n}\nfunction rightAlign(str, len, space = \" \") {\n const free = len - str.length;\n if (free <= 0) {\n return str;\n }\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < free ? space : str[i - free];\n }\n return _str;\n}\nfunction leftAlign(str, len, space = \" \") {\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < str.length ? str[i] : space;\n }\n return _str;\n}\nfunction align(alignment, str, len, space = \" \") {\n switch (alignment) {\n case \"left\": {\n return leftAlign(str, len, space);\n }\n case \"right\": {\n return rightAlign(str, len, space);\n }\n case \"center\": {\n return centerAlign(str, len, space);\n }\n default: {\n return str;\n }\n }\n}\n\nconst boxStylePresets = {\n solid: {\n tl: \"\\u250C\",\n tr: \"\\u2510\",\n bl: \"\\u2514\",\n br: \"\\u2518\",\n h: \"\\u2500\",\n v: \"\\u2502\"\n },\n double: {\n tl: \"\\u2554\",\n tr: \"\\u2557\",\n bl: \"\\u255A\",\n br: \"\\u255D\",\n h: \"\\u2550\",\n v: \"\\u2551\"\n },\n doubleSingle: {\n tl: \"\\u2553\",\n tr: \"\\u2556\",\n bl: \"\\u2559\",\n br: \"\\u255C\",\n h: \"\\u2500\",\n v: \"\\u2551\"\n },\n doubleSingleRounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2500\",\n v: \"\\u2551\"\n },\n singleThick: {\n tl: \"\\u250F\",\n tr: \"\\u2513\",\n bl: \"\\u2517\",\n br: \"\\u251B\",\n h: \"\\u2501\",\n v: \"\\u2503\"\n },\n singleDouble: {\n tl: \"\\u2552\",\n tr: \"\\u2555\",\n bl: \"\\u2558\",\n br: \"\\u255B\",\n h: \"\\u2550\",\n v: \"\\u2502\"\n },\n singleDoubleRounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2550\",\n v: \"\\u2502\"\n },\n rounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2500\",\n v: \"\\u2502\"\n }\n};\nconst defaultStyle = {\n borderColor: \"white\",\n borderStyle: \"rounded\",\n valign: \"center\",\n padding: 2,\n marginLeft: 1,\n marginTop: 1,\n marginBottom: 1\n};\nfunction box(text, _opts = {}) {\n const opts = {\n ..._opts,\n style: {\n ...defaultStyle,\n ..._opts.style\n }\n };\n const textLines = text.split(\"\\n\");\n const boxLines = [];\n const _color = getColor(opts.style.borderColor);\n const borderStyle = {\n ...typeof opts.style.borderStyle === \"string\" ? boxStylePresets[opts.style.borderStyle] || boxStylePresets.solid : opts.style.borderStyle\n };\n if (_color) {\n for (const key in borderStyle) {\n borderStyle[key] = _color(\n borderStyle[key]\n );\n }\n }\n const paddingOffset = opts.style.padding % 2 === 0 ? opts.style.padding : opts.style.padding + 1;\n const height = textLines.length + paddingOffset;\n const width = Math.max(\n ...textLines.map((line) => stripAnsi(line).length),\n opts.title ? stripAnsi(opts.title).length : 0\n ) + paddingOffset;\n const widthOffset = width + paddingOffset;\n const leftSpace = opts.style.marginLeft > 0 ? \" \".repeat(opts.style.marginLeft) : \"\";\n if (opts.style.marginTop > 0) {\n boxLines.push(\"\".repeat(opts.style.marginTop));\n }\n if (opts.title) {\n const title = _color ? _color(opts.title) : opts.title;\n const left = borderStyle.h.repeat(\n Math.floor((width - stripAnsi(opts.title).length) / 2)\n );\n const right = borderStyle.h.repeat(\n width - stripAnsi(opts.title).length - stripAnsi(left).length + paddingOffset\n );\n boxLines.push(\n `${leftSpace}${borderStyle.tl}${left}${title}${right}${borderStyle.tr}`\n );\n } else {\n boxLines.push(\n `${leftSpace}${borderStyle.tl}${borderStyle.h.repeat(widthOffset)}${borderStyle.tr}`\n );\n }\n const valignOffset = opts.style.valign === \"center\" ? Math.floor((height - textLines.length) / 2) : opts.style.valign === \"top\" ? height - textLines.length - paddingOffset : height - textLines.length;\n for (let i = 0; i < height; i++) {\n if (i < valignOffset || i >= valignOffset + textLines.length) {\n boxLines.push(\n `${leftSpace}${borderStyle.v}${\" \".repeat(widthOffset)}${borderStyle.v}`\n );\n } else {\n const line = textLines[i - valignOffset];\n const left = \" \".repeat(paddingOffset);\n const right = \" \".repeat(width - stripAnsi(line).length);\n boxLines.push(\n `${leftSpace}${borderStyle.v}${left}${line}${right}${borderStyle.v}`\n );\n }\n }\n boxLines.push(\n `${leftSpace}${borderStyle.bl}${borderStyle.h.repeat(widthOffset)}${borderStyle.br}`\n );\n if (opts.style.marginBottom > 0) {\n boxLines.push(\"\".repeat(opts.style.marginBottom));\n }\n return boxLines.join(\"\\n\");\n}\n\nexport { centerAlign as a, align as b, colorize as c, box as d, colors as e, getColor as g, leftAlign as l, rightAlign as r, stripAnsi as s };\n","import {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport { spawn } from \"node:child_process\";\n\ntype CliAuthPayload = {\n token?: string;\n refreshToken?: string;\n state?: string;\n};\n\ntype CliAuthResult = {\n token: string;\n refreshToken: string | null;\n};\n\ntype OAuthCodeResult = {\n code: string;\n};\n\nconst DEFAULT_OAUTH_CALLBACK_PORT = 49371;\n\nexport async function startCliAuthServer(\n state: string,\n timeoutMs: number,\n): Promise<{\n port: number;\n waitForToken: Promise<CliAuthResult>;\n close: () => void;\n}> {\n let resolveToken: (token: CliAuthResult) => void;\n let rejectToken: (error: Error) => void;\n\n const waitForToken = new Promise<CliAuthResult>((resolve, reject) => {\n resolveToken = resolve;\n rejectToken = reject;\n });\n\n let server: ReturnType<typeof createServer> | null = null;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < 10; attempt++) {\n const portCandidate = 49152 + Math.floor(Math.random() * 16383);\n try {\n server = createServer(\n async (request: IncomingMessage, response: ServerResponse) => {\n try {\n await handleAuthRequest(\n request,\n response,\n state,\n resolveToken!,\n () => server?.close(),\n );\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Failed to handle auth callback.\";\n writeCorsResponse(request, response, 500, message);\n }\n },\n );\n await new Promise<void>((resolve, reject) => {\n server!.once(\"error\", reject);\n server!.listen(portCandidate, \"127.0.0.1\", () => {\n server!.off(\"error\", reject);\n resolve();\n });\n });\n break;\n } catch (error) {\n lastError =\n error instanceof Error\n ? error\n : new Error(\"Failed to start auth server\");\n }\n }\n\n if (!server) {\n const error =\n lastError ?? new Error(\"Failed to start auth callback server.\");\n rejectToken!(error);\n throw error;\n }\n\n const timer = setTimeout(() => {\n rejectToken!(new Error(\"Login timed out.\"));\n server?.close();\n }, timeoutMs);\n\n waitForToken.finally(() => clearTimeout(timer));\n\n return {\n port: portCandidateFromServer(server),\n waitForToken,\n close: () => server?.close(),\n };\n}\n\nexport async function startOAuthCallbackServer(\n state: string,\n timeoutMs: number,\n): Promise<{\n port: number;\n redirectUri: string;\n waitForCode: Promise<OAuthCodeResult>;\n close: () => void;\n}> {\n let resolveCode: (result: OAuthCodeResult) => void;\n let rejectCode: (error: Error) => void;\n\n const waitForCode = new Promise<OAuthCodeResult>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n\n const portCandidate = resolveOAuthCallbackPort();\n const server = createServer(\n async (request: IncomingMessage, response: ServerResponse) => {\n try {\n const requestUrl = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n if (\n request.method === \"GET\" &&\n requestUrl.pathname === \"/oauth/callback\"\n ) {\n const receivedState = requestUrl.searchParams.get(\"state\");\n const code = requestUrl.searchParams.get(\"code\");\n const error = requestUrl.searchParams.get(\"error\");\n if (error) {\n throw new Error(`Clerk OAuth returned ${error}.`);\n }\n if (!code || receivedState !== state) {\n writeCorsResponse(request, response, 400, \"Invalid OAuth callback\");\n return;\n }\n resolveCode!({ code });\n response.once(\"finish\", () => server.close());\n writeHtmlResponse(\n response,\n 200,\n \"Dreamboard CLI login complete. You can return to your terminal.\",\n );\n return;\n }\n writeHtmlResponse(\n response,\n 200,\n \"Dreamboard CLI OAuth callback server\",\n );\n } catch (error) {\n rejectCode!(\n error instanceof Error\n ? error\n : new Error(\"Failed to handle OAuth callback.\"),\n );\n writeHtmlResponse(response, 500, \"Dreamboard CLI login failed.\");\n }\n },\n );\n\n try {\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(portCandidate, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n } catch (error) {\n const portError =\n error instanceof Error\n ? error\n : new Error(\"Failed to start OAuth callback server\");\n const configuredByEnv = Boolean(\n process.env.DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT,\n );\n const message = configuredByEnv\n ? `Failed to start OAuth callback server on configured port ${portCandidate}.`\n : `Failed to start OAuth callback server on port ${portCandidate}. Register this loopback redirect URI with Clerk and keep the port available, or set DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT.`;\n const wrapped = new Error(`${message} ${portError.message}`);\n server.close();\n rejectCode!(wrapped);\n throw wrapped;\n }\n\n if (!server.listening) {\n const error = new Error(\"Failed to start OAuth callback server.\");\n rejectCode!(error);\n throw error;\n }\n\n const timer = setTimeout(() => {\n rejectCode!(new Error(\"Login timed out.\"));\n server?.close();\n }, timeoutMs);\n\n waitForCode.finally(() => clearTimeout(timer));\n const port = portCandidateFromServer(server);\n\n return {\n port,\n redirectUri: `http://127.0.0.1:${port}/oauth/callback`,\n waitForCode,\n close: () => server?.close(),\n };\n}\n\nfunction resolveOAuthCallbackPort(): number {\n const rawPort = process.env.DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT?.trim();\n if (!rawPort) {\n return DEFAULT_OAUTH_CALLBACK_PORT;\n }\n const port = Number(rawPort);\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(\n `Invalid DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT '${rawPort}'. Expected a TCP port from 1 to 65535.`,\n );\n }\n return port;\n}\n\nfunction portCandidateFromServer(\n server: ReturnType<typeof createServer>,\n): number {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n throw new Error(\"Auth callback server did not expose a bound port.\");\n }\n return address.port;\n}\n\nasync function handleAuthRequest(\n request: IncomingMessage,\n response: ServerResponse,\n state: string,\n resolveToken: (token: CliAuthResult) => void,\n closeServer: () => void,\n): Promise<void> {\n const requestUrl = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"OPTIONS\") {\n writeCorsResponse(request, response, 204, \"\");\n return;\n }\n\n if (requestUrl.pathname === \"/cli-auth\" && request.method === \"POST\") {\n const text = await readRequestBody(request);\n let payload: CliAuthPayload | null = null;\n try {\n payload = JSON.parse(text) as CliAuthPayload;\n } catch {\n payload = null;\n }\n\n const token = payload?.token;\n const refreshToken = payload?.refreshToken;\n const receivedState = payload?.state;\n if (!token || receivedState !== state) {\n writeCorsResponse(request, response, 400, \"Invalid auth payload\");\n return;\n }\n\n resolveToken({ token, refreshToken: refreshToken ?? null });\n response.once(\"finish\", () => {\n closeServer();\n });\n writeCorsResponse(request, response, 200, \"OK\");\n return;\n }\n\n writeCorsResponse(request, response, 200, \"Dreamboard CLI auth server\");\n}\n\nfunction writeCorsResponse(\n request: IncomingMessage,\n response: ServerResponse,\n statusCode: number,\n body: string,\n): void {\n const origin = request.headers.origin ?? \"*\";\n response.writeHead(statusCode, {\n \"Access-Control-Allow-Origin\": origin,\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type\",\n \"Content-Type\": \"text/plain; charset=utf-8\",\n });\n response.end(body);\n}\n\nfunction writeHtmlResponse(\n response: ServerResponse,\n statusCode: number,\n body: string,\n): void {\n response.writeHead(statusCode, {\n \"Content-Type\": \"text/html; charset=utf-8\",\n });\n response.end(\n `<!doctype html><meta charset=\"utf-8\"><title>Dreamboard CLI</title><p>${escapeHtml(body)}</p>`,\n );\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case \"&\":\n return \"&\";\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case '\"':\n return \""\";\n default:\n return \"'\";\n }\n });\n}\n\nasync function readRequestBody(request: IncomingMessage): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nexport function openBrowser(url: string): void {\n const platform = process.platform;\n let command: [string, ...string[]];\n if (platform === \"darwin\") {\n command = [\"open\", url];\n } else if (platform === \"win32\") {\n command = [\"cmd\", \"/c\", \"start\", \"\", url];\n } else {\n command = [\"xdg-open\", url];\n }\n const [commandName, ...commandArgs] = command;\n const child = spawn(commandName, commandArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n}\n","import { queryWorkshopRulebook } from \"@dreamboard-games/api-client\";\nimport { defineCommand } from \"citty\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { loadGlobalConfig } from \"../config/global-config.js\";\nimport { getStoredSession } from \"../config/credential-store.js\";\nimport {\n configureClient,\n requireAuth,\n resolveConfig,\n} from \"../config/resolve.js\";\nimport { parseQueryCommandArgs } from \"../flags.js\";\nimport { toDreamboardApiError } from \"../utils/errors.js\";\n\nexport default defineCommand({\n meta: {\n name: \"query\",\n description: \"Query rulebook text by title\",\n },\n args: {\n title: {\n type: \"positional\",\n description: \"Board game title to search in the rulebook library\",\n required: true,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseQueryCommandArgs(args);\n const [globalConfig, storedSession] = await Promise.all([\n loadGlobalConfig(),\n getStoredSession(),\n ]);\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n undefined,\n storedSession,\n );\n requireAuth(config);\n await configureClient(config);\n\n const { data, error, response } = await queryWorkshopRulebook({\n query: {\n title: parsedArgs.title,\n },\n });\n\n if (!data) {\n throw toDreamboardApiError(\n error,\n response,\n `Failed to query rulebook for '${parsedArgs.title}'`,\n );\n }\n\n console.log(data.ruleText);\n },\n});\n","import path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport {\n resolveConfig,\n requireAuth,\n configureClient,\n} from \"../config/resolve.js\";\nimport { parseCloneCommandArgs } from \"../flags.js\";\nimport { loadGlobalConfig } from \"../config/global-config.js\";\nimport { getStoredSession } from \"../config/credential-store.js\";\nimport { normalizeSlug } from \"../utils/strings.js\";\nimport { ensureDir } from \"../utils/fs.js\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport {\n findProjectCompiledResultsForRevision,\n getProjectBySlugSdk,\n} from \"../services/api/index.js\";\nimport { updateProjectState } from \"../config/project-config.js\";\nimport { scaffoldStaticWorkspace } from \"../services/project/static-scaffold.js\";\nimport { pullIntoDirectory } from \"../services/project/sync.js\";\nimport {\n setLatestCompileAttempt,\n updateProjectLocalMaintainerRegistry,\n} from \"../services/project/project-state.js\";\nimport {\n ensureLocalMaintainerSnapshot,\n readWorkspaceLocalMaintainerRegistry,\n} from \"../services/project/local-maintainer-registry.js\";\nimport { installWorkspaceDependencies } from \"../services/project/workspace-dependencies.js\";\n\nexport default defineCommand({\n meta: { name: \"clone\", description: \"Clone an existing game by slug\" },\n args: {\n slug: { type: \"positional\", description: \"Game slug\", required: true },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseCloneCommandArgs(args);\n const slugInput = parsedArgs.slug;\n\n const normalizedSlug = normalizeSlug(slugInput);\n if (!normalizedSlug) {\n throw new Error(\"Slug must contain at least one alphanumeric character.\");\n }\n\n const [globalConfig, storedSession] = await Promise.all([\n loadGlobalConfig(),\n getStoredSession(),\n ]);\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n undefined,\n storedSession,\n );\n requireAuth(config);\n await configureClient(config);\n const localMaintainerRegistry = await ensureLocalMaintainerSnapshot(\n config.apiBaseUrl,\n );\n\n const project = await getProjectBySlugSdk(normalizedSlug);\n const remoteHeadDigest = project.head?.revisionDigest;\n\n const targetDir = path.resolve(process.cwd(), normalizedSlug);\n await ensureDir(targetDir);\n\n if (!remoteHeadDigest) {\n throw new Error(\n `Project '${normalizedSlug}' has no authored revision to clone.`,\n );\n }\n\n await scaffoldStaticWorkspace(targetDir, \"update\", {\n localMaintainerRegistry,\n });\n await installWorkspaceDependencies(targetDir);\n const pulledProjectConfig = await pullIntoDirectory(config, targetDir, {\n schemaVersion: 2,\n projectId: project.projectId,\n gameId: project.projectId,\n deploymentId: \"project\",\n ownerScopeId: \"default\",\n slug: normalizedSlug,\n remoteHeadDigest,\n apiBaseUrl: config.apiBaseUrl,\n webBaseUrl: config.webBaseUrl,\n });\n const fallbackRegistryUrl = localMaintainerRegistry?.registryUrl;\n const workspaceLocalMaintainerRegistry =\n localMaintainerRegistry ??\n (await readWorkspaceLocalMaintainerRegistry(\n targetDir,\n fallbackRegistryUrl,\n ));\n await scaffoldStaticWorkspace(targetDir, \"update\", {\n localMaintainerRegistry: workspaceLocalMaintainerRegistry,\n });\n if (workspaceLocalMaintainerRegistry) {\n await installWorkspaceDependencies(targetDir);\n }\n await updateProjectState(\n targetDir,\n updateProjectLocalMaintainerRegistry(\n pulledProjectConfig,\n workspaceLocalMaintainerRegistry ?? undefined,\n ),\n );\n\n const remoteResults = await findProjectCompiledResultsForRevision({\n projectId: project.projectId,\n revisionDigest: remoteHeadDigest,\n });\n const latestSuccess = remoteResults.find(\n (result: { success: boolean }) => result.success,\n );\n if (latestSuccess) {\n const configWithLatestCompileAttempt = setLatestCompileAttempt(\n pulledProjectConfig,\n {\n resultId: latestSuccess.id,\n authoringStateId: latestSuccess.authoringStateId ?? remoteHeadDigest,\n revisionDigest: remoteHeadDigest,\n status: \"successful\",\n },\n );\n await updateProjectState(\n targetDir,\n updateProjectLocalMaintainerRegistry(\n configWithLatestCompileAttempt,\n workspaceLocalMaintainerRegistry ?? undefined,\n ),\n );\n }\n\n consola.success(`Cloned ${normalizedSlug} into ${targetDir}`);\n },\n});\n","import {\n createGameRevision,\n createProjectSession,\n createProjectSessionFromReducerSnapshot,\n ensureProject,\n ensureProjectDevCompile,\n getApiVersion,\n getCurrentAuthUser,\n getProjectBySlug,\n getProjectRevisionSources,\n getProjectSources,\n type CreateSessionFromReducerSnapshotRequest,\n type CreateSessionRequest,\n type CreateSessionResponse,\n type CreateGameRevisionRequest,\n type EnsureDevCompileRequest,\n type EnsureDevCompileResponse,\n type GameRevision,\n type GameSourcesResponse,\n type HostSessionSnapshot,\n type Project,\n type ProjectRevisionSourcesResponse,\n} from \"@dreamboard-games/api-client\";\nimport { toDreamboardApiError } from \"../../utils/errors.js\";\nimport { titleFromSlug } from \"../../utils/strings.js\";\n\nexport type RemoteProjectIdentity = {\n deploymentId: string;\n ownerScopeId: string;\n bindingKey: string;\n};\n\nexport async function loadRemoteProjectIdentity(): Promise<RemoteProjectIdentity> {\n const [versionResponse, userResponse] = await Promise.all([\n getApiVersion(),\n getCurrentAuthUser(),\n ]);\n\n if (versionResponse.error || !versionResponse.data) {\n throw toDreamboardApiError(\n versionResponse.error as Parameters<typeof toDreamboardApiError>[0],\n versionResponse.response,\n \"Failed to resolve backend deployment identity\",\n );\n }\n if (userResponse.error || !userResponse.data) {\n throw toDreamboardApiError(\n userResponse.error,\n userResponse.response,\n \"Failed to resolve authenticated owner scope\",\n );\n }\n\n const deploymentId = versionResponse.data.deploymentId;\n const ownerScopeId = userResponse.data.ownerScopeId;\n return {\n deploymentId,\n ownerScopeId,\n bindingKey: `${deploymentId}:${ownerScopeId}`,\n };\n}\n\nexport async function ensureProjectSdk(options: {\n projectId: string;\n slug: string;\n description?: string;\n updateAlias?: boolean;\n}): Promise<Project> {\n const { data, error, response } = await ensureProject({\n path: { projectId: options.projectId },\n body: {\n slug: options.slug,\n name: titleFromSlug(options.slug),\n description:\n options.description ?? `Dreamboard workspace for ${options.slug}.`,\n ...(options.updateAlias ? { updateAlias: true } : {}),\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to ensure project\");\n }\n\n return data;\n}\n\nexport async function getProjectBySlugSdk(slug: string): Promise<Project> {\n const { data, error, response } = await getProjectBySlug({\n path: { slug },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n `Project '${slug}' not found`,\n );\n }\n\n return data;\n}\n\nexport async function createGameRevisionSdk(options: {\n projectId: string;\n request: CreateGameRevisionRequest;\n}): Promise<GameRevision> {\n const { data, error, response } = await createGameRevision({\n path: { projectId: options.projectId },\n body: options.request,\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to create game revision\",\n );\n }\n\n return data;\n}\n\nexport async function getProjectSourcesSdk(\n projectId: string,\n): Promise<GameSourcesResponse | null> {\n const { data, error, response } = await getProjectSources({\n path: { projectId },\n });\n\n if (response?.status === 404) {\n return null;\n }\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to fetch project sources\",\n );\n }\n\n return data;\n}\n\nexport async function getProjectRevisionSourcesSdk(options: {\n projectId: string;\n revisionDigest: string;\n}): Promise<ProjectRevisionSourcesResponse> {\n const { data, error, response } = await getProjectRevisionSources({\n path: {\n projectId: options.projectId,\n revisionDigest: options.revisionDigest,\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to fetch project revision sources\",\n );\n }\n\n return data;\n}\n\nexport async function ensureProjectDevCompileSdk(options: {\n projectId: string;\n request: EnsureDevCompileRequest;\n}): Promise<EnsureDevCompileResponse> {\n const { data, error, response } = await ensureProjectDevCompile({\n path: { projectId: options.projectId },\n body: options.request,\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to ensure dev compile\");\n }\n\n return data;\n}\n\nexport async function createProjectSessionSdk(options: {\n projectId: string;\n request: CreateSessionRequest;\n}): Promise<CreateSessionResponse> {\n const { data, error, response } = await createProjectSession({\n path: { projectId: options.projectId },\n body: options.request,\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to create session\");\n }\n\n return data;\n}\n\nexport async function createProjectSessionFromReducerSnapshotSdk(options: {\n projectId: string;\n request: CreateSessionFromReducerSnapshotRequest;\n}): Promise<HostSessionSnapshot> {\n const { data, error, response } =\n await createProjectSessionFromReducerSnapshot({\n path: { projectId: options.projectId },\n body: options.request,\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to create session from reducer snapshot\",\n );\n }\n\n return data;\n}\n","import { uploadInitialProjection } from \"@dreamboard-games/api-client\";\nimport { toDreamboardApiError } from \"../../utils/errors.js\";\n\nexport async function uploadInitialProjectionSdk(\n gameId: string,\n projectionJson: string,\n): Promise<void> {\n const { error, response } = await uploadInitialProjection({\n path: { gameId },\n body: { projectionJson },\n });\n if (error) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to upload initial preview projection\",\n );\n }\n}\n","import { createProjectSourceBlobUploadSession, createSourceBlobUploadSession, } from \"./sdk.gen.js\";\nconst textEncoder = new TextEncoder();\nfunction bytesToHex(bytes) {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\nasync function sha256Hex(bytes) {\n const normalizedBytes = new Uint8Array(bytes.byteLength);\n normalizedBytes.set(bytes);\n const digest = await crypto.subtle.digest(\"SHA-256\", normalizedBytes.buffer);\n return bytesToHex(new Uint8Array(digest));\n}\nfunction getUtf8ByteSize(content) {\n return textEncoder.encode(content).byteLength;\n}\nasync function computeSourceContentHash(content) {\n return sha256Hex(textEncoder.encode(content));\n}\nasync function describeSourceBlob(content) {\n return {\n contentHash: await computeSourceContentHash(content),\n byteSize: getUtf8ByteSize(content),\n };\n}\nexport async function materializeSourceChangeOperations(changes) {\n const blobsByHash = new Map();\n const materialized = await Promise.all(Array.from(changes, async (change) => {\n if (change.kind === \"delete\") {\n return change;\n }\n const blob = await describeSourceBlob(change.content);\n const existing = blobsByHash.get(blob.contentHash);\n if (!existing) {\n blobsByHash.set(blob.contentHash, blob);\n }\n return {\n kind: \"upsert\",\n path: change.path,\n contentHash: blob.contentHash,\n byteSize: blob.byteSize,\n };\n }));\n return {\n blobs: Array.from(blobsByHash.values()).sort((left, right) => left.contentHash.localeCompare(right.contentHash)),\n changes: materialized,\n };\n}\nexport function mapUpsertBlobContentsByContentHash(localChanges, materializedChanges) {\n const uploadBlobs = new Map();\n const length = Math.min(localChanges.length, materializedChanges.length);\n for (let index = 0; index < length; index += 1) {\n const localChange = localChanges[index];\n const materializedChange = materializedChanges[index];\n if (localChange?.kind !== \"upsert\" ||\n materializedChange?.kind !== \"upsert\") {\n continue;\n }\n uploadBlobs.set(materializedChange.contentHash, {\n contentHash: materializedChange.contentHash,\n byteSize: materializedChange.byteSize,\n content: localChange.content,\n });\n }\n return uploadBlobs;\n}\nclass SourceBlobUploadError extends Error {\n constructor(status, details) {\n const suffix = details.trim().length > 0 ? `: ${details.trim()}` : \"\";\n super(`Failed to upload source blob (HTTP ${status}${suffix})`);\n this.name = \"SourceBlobUploadError\";\n this.status = status;\n this.details = details;\n }\n}\nfunction isDuplicateDirectUploadError(error) {\n if (!(error instanceof SourceBlobUploadError)) {\n return false;\n }\n if (error.status === 409) {\n return true;\n }\n const normalizedDetails = error.details.toLowerCase();\n return (normalizedDetails.includes(\"duplicate\") ||\n normalizedDetails.includes(\"already exists\") ||\n normalizedDetails.includes(\"resource already exists\"));\n}\nasync function uploadSourceBlob(uploadTarget, content) {\n const response = await fetch(uploadTarget.url, {\n method: uploadTarget.method,\n headers: uploadTarget.headers,\n body: textEncoder.encode(content),\n });\n if (response.ok) {\n return;\n }\n const details = await response.text().catch(() => \"\");\n throw new SourceBlobUploadError(response.status, details);\n}\nexport class SourceBlobSessionRequestError extends Error {\n constructor(message, apiError, response) {\n super(message);\n this.name = \"SourceBlobSessionRequestError\";\n this.apiError = apiError;\n this.response = response;\n }\n}\nfunction assertSourceBlobUploadSession(data, response) {\n if (!data ||\n typeof data !== \"object\" ||\n !Array.isArray(data.uploads)) {\n throw new SourceBlobSessionRequestError(\"Source blob upload session response did not include an uploads array\", data, response);\n }\n}\nasync function confirmSourceBlobAlreadyExists(options) {\n const { requestUploadSession, blob } = options;\n const { data, error, response } = await requestUploadSession([\n {\n contentHash: blob.contentHash,\n byteSize: blob.byteSize,\n },\n ]);\n if (error || !data) {\n throw new SourceBlobSessionRequestError(\"Failed to create source blob upload session\", error, response);\n }\n assertSourceBlobUploadSession(data, response);\n return data.uploads[0]?.status === \"exists\";\n}\nasync function uploadSourceBlobs(options) {\n const { blobs, requestUploadSession } = options;\n const uniqueBlobs = new Map();\n for (const blob of blobs) {\n const existing = uniqueBlobs.get(blob.contentHash);\n if (!existing) {\n uniqueBlobs.set(blob.contentHash, blob);\n continue;\n }\n if (existing.byteSize !== blob.byteSize) {\n throw new Error(`Source blob ${blob.contentHash} has conflicting byte sizes.`);\n }\n }\n if (uniqueBlobs.size === 0) {\n return;\n }\n const { data, error, response } = await requestUploadSession(Array.from(uniqueBlobs.values(), ({ contentHash, byteSize }) => ({\n contentHash,\n byteSize,\n })));\n if (error || !data) {\n throw new SourceBlobSessionRequestError(\"Failed to create source blob upload session\", error, response);\n }\n assertSourceBlobUploadSession(data, response);\n for (const upload of data.uploads) {\n if (upload.status !== \"upload_required\") {\n continue;\n }\n const blob = uniqueBlobs.get(upload.contentHash);\n if (!blob) {\n throw new Error(`Upload session referenced unknown source blob ${upload.contentHash}.`);\n }\n if (!upload.uploadTarget) {\n throw new Error(`Upload target missing for source blob ${upload.contentHash}.`);\n }\n try {\n await uploadSourceBlob(upload.uploadTarget, blob.content);\n if (!(await confirmSourceBlobAlreadyExists({ requestUploadSession, blob }))) {\n throw new Error(`Source blob ${blob.contentHash} was uploaded but not registered.`);\n }\n }\n catch (error) {\n if (isDuplicateDirectUploadError(error) &&\n (await confirmSourceBlobAlreadyExists({ requestUploadSession, blob }))) {\n continue;\n }\n throw error;\n }\n }\n}\nexport async function uploadGameSourceBlobs(options) {\n const { gameId, blobs } = options;\n return uploadSourceBlobs({\n blobs,\n requestUploadSession: (uploadBlobs) => createSourceBlobUploadSession({\n path: { gameId },\n body: { blobs: uploadBlobs },\n }),\n });\n}\nexport async function uploadProjectSourceBlobs(options) {\n const { projectId, blobs } = options;\n return uploadSourceBlobs({\n blobs,\n requestUploadSession: (uploadBlobs) => createProjectSourceBlobUploadSession({\n path: { projectId },\n body: { blobs: uploadBlobs },\n }),\n });\n}\n","import {\n createSourceRevision,\n type CreateSourceRevisionRequest,\n queueCompiledResultJob,\n type QueueCompiledResultJobResponse,\n type SourceRevision,\n} from \"@dreamboard-games/api-client\";\nimport {\n SourceBlobSessionRequestError,\n uploadGameSourceBlobs,\n uploadProjectSourceBlobs,\n type SourceBlobUploadInput,\n} from \"@dreamboard-games/api-client/source-revisions\";\nimport { toDreamboardApiError } from \"../../utils/errors.js\";\n\nexport async function createSourceRevisionSdk(\n gameId: string,\n request: CreateSourceRevisionRequest,\n): Promise<SourceRevision> {\n const response = await createSourceRevision({\n path: { gameId },\n body: request,\n });\n\n if (response.error || !response.data) {\n throw toDreamboardApiError(\n response.error,\n response.response,\n \"Failed to create source revision\",\n );\n }\n\n return response.data;\n}\n\nexport async function uploadSourceBlobsSdk(\n gameId: string,\n blobs: SourceBlobUploadInput[],\n): Promise<void> {\n try {\n await uploadGameSourceBlobs({ gameId, blobs });\n } catch (error) {\n if (error instanceof SourceBlobSessionRequestError) {\n throw toDreamboardApiError(\n error.apiError as Parameters<typeof toDreamboardApiError>[0],\n error.response,\n error.message,\n );\n }\n throw error;\n }\n}\n\nexport async function uploadProjectSourceBlobsSdk(\n projectId: string,\n blobs: SourceBlobUploadInput[],\n): Promise<void> {\n try {\n await uploadProjectSourceBlobs({ projectId, blobs });\n } catch (error) {\n if (error instanceof SourceBlobSessionRequestError) {\n throw toDreamboardApiError(\n error.apiError as Parameters<typeof toDreamboardApiError>[0],\n error.response,\n error.message,\n );\n }\n throw error;\n }\n}\n\nexport async function queueCompiledResultJobSdk(options: {\n gameId: string;\n authoringStateId: string;\n}): Promise<QueueCompiledResultJobResponse> {\n const { gameId, authoringStateId } = options;\n const { data, error, response } = await queueCompiledResultJob({\n path: { gameId },\n body: {\n authoringStateId,\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to create compile job\");\n }\n\n return data;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { readdir, readFile, rm, rmdir, unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { GameTopologyManifest } from \"@dreamboard-games/sdk/types\";\nimport { IS_PUBLISHED_BUILD } from \"../../build-target.js\";\nimport { REDUCER_TESTING_TYPES_WRAPPER_CONTENT } from \"../../templates/testing-types-content.js\";\nimport {\n MANIFEST_TYPECHECK_CONFIG_FILE,\n PROJECT_CONFIG_FILE,\n PROJECT_DIR_NAME,\n} from \"../../constants.js\";\nimport type { LocalMaintainerRegistryConfig } from \"../../types.js\";\nimport {\n ensureDir,\n exists,\n readJsonFile,\n readTextFile,\n readTextFileIfExists,\n writeTextFile,\n} from \"../../utils/fs.js\";\nimport { resolveCliRepoRoot } from \"../../utils/repo-root.js\";\nimport { loadProjectConfig } from \"../../config/project-config.js\";\nimport { materializeManifest } from \"./manifest-authoring.js\";\nimport { isDynamicSeedPath } from \"./scaffold-ownership.js\";\nimport {\n FRAMEWORK_PNPM_OVERRIDES,\n FRAMEWORK_REACT_DEPENDENCIES,\n FRAMEWORK_ZOD_VERSION,\n} from \"./framework-dependencies.js\";\n\ntype StaticScaffoldMode = \"new\" | \"update\";\ntype StaticAssetEntry = {\n targetPath: string;\n content: string;\n};\ntype StaticScaffoldOptions = {\n localMaintainerRegistry?: LocalMaintainerRegistryConfig | null;\n};\ntype RootPackageJsonShape = {\n private?: boolean;\n packageManager?: string;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n overrides?: Record<string, unknown>;\n pnpm?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nconst DREAMBOARD_SYNC_COMMAND = \"dreamboard sync\";\nconst DREAMBOARD_GITIGNORE_BLOCK = [\n \"# Dreamboard local state\",\n \".dreamboard/state.json\",\n \".dreamboard/snapshot.json\",\n \".dreamboard/dev/\",\n \".dreamboard/generated/\",\n \"\",\n].join(\"\\n\");\nconst TESTING_TYPES_STUB =\n \"export function defineScenario(scenario) { return scenario; }\\n\";\nconst GENERATED_TESTING_TYPES_PREFIX = \"// Generated by dreamboard\";\nconst GENERATED_SCENARIO_PREFIX = \"// Generated by dreamboard scaffold.\";\nconst LEGACY_DREAMBOARD_COMPONENT_INDEX_CONTENT = `export {\n ErrorBoundary,\n type ErrorBoundaryProps,\n} from \"@dreamboard-games/sdk/ui\";\nexport { PluginRuntime, type PluginRuntimeProps } from \"@dreamboard-games/sdk/runtime\";\n`;\nconst OLD_LEGACY_DREAMBOARD_COMPONENT_INDEX_CONTENT = [\n \"export {\",\n \" ErrorBoundary,\",\n \" PluginRuntime,\",\n \" type ErrorBoundaryProps,\",\n \" type PluginRuntimeProps,\",\n `} from \"@dreamboard/ui-${\"sdk\"}\";`,\n \"\",\n].join(\"\\n\");\nconst OLD_PUBLIC_DREAMBOARD_COMPONENT_INDEX_CONTENT = [\n \"export {\",\n \" ErrorBoundary,\",\n \" PluginRuntime,\",\n \" type ErrorBoundaryProps,\",\n \" type PluginRuntimeProps,\",\n `} from \"@dreamboard-games/ui-${\"sdk\"}\";`,\n \"\",\n].join(\"\\n\");\nconst INITIAL_SCENARIO_CONTENT = `${GENERATED_SCENARIO_PREFIX}\nimport { defineScenario } from \"../testing-types\";\n\nexport default defineScenario({\n id: \"smoke-initial-turn\",\n description:\n \"Sanity check that the scaffolded workspace boots into its initial phase.\",\n from: \"initial-turn\",\n when: async () => undefined,\n then: ({ expect, interactions, players, state }) => {\n const playerIds = players();\n expect(playerIds).toHaveLength(playerIds.length);\n expect(playerIds.length).toBeGreaterThanOrEqual(1);\n expect(state()).toBe(\"setup\");\n for (const playerId of playerIds) {\n expect(interactions(playerId)).toEqual([]);\n }\n },\n});\n`;\nconst STATIC_ASSET_ROOT = resolveStaticAssetRoot();\nconst SDK_PACKAGE_PATHS = {\n \"@dreamboard-games/sdk\": [\"packages\", \"sdk\", \"package.json\"],\n} as const;\nconst DEFAULT_SDK_DEPENDENCY_RANGES = {\n \"@dreamboard-games/sdk\": \"0.4.0-alpha.0\",\n} as const;\nconst SDK_DEPENDENCY_RANGES = {\n \"@dreamboard-games/sdk\": resolveSdkDependencyRange(\"@dreamboard-games/sdk\"),\n} as const;\n\nconst FRAMEWORK_SCRIPTS = {\n dev: \"dreamboard dev\",\n \"test:ui\":\n \"tsx --tsconfig test/tsconfig.tsx-runtime.json --test test/ui/**/*.test.tsx\",\n typecheck: `tsc --noEmit -p ${MANIFEST_TYPECHECK_CONFIG_FILE} && tsc --noEmit -p app/tsconfig.json && tsc --noEmit -p ui/tsconfig.json`,\n \"typecheck:manifest\": `tsc --noEmit -p ${MANIFEST_TYPECHECK_CONFIG_FILE}`,\n \"typecheck:app\": \"tsc --noEmit -p app/tsconfig.json\",\n \"typecheck:ui\": \"tsc --noEmit -p ui/tsconfig.json\",\n} as const;\nconst SHARED_DEPENDENCIES = {\n ...FRAMEWORK_REACT_DEPENDENCIES,\n} as const;\nconst ROOT_APP_DEPENDENCIES = {\n zod: FRAMEWORK_ZOD_VERSION,\n} as const;\nconst SHARED_DEV_DEPENDENCIES = {\n typescript: \"^5.9.2\",\n \"@types/node\": \"^24.5.2\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.0\",\n csstype: \"^3.1.3\",\n tsx: \"^4.20.5\",\n} as const;\n\nexport async function scaffoldStaticWorkspace(\n projectRoot: string,\n mode: StaticScaffoldMode,\n options: StaticScaffoldOptions = {},\n): Promise<void> {\n await writeFrameworkStaticFiles(projectRoot, mode, options);\n await ensureDreamboardGitignore(projectRoot);\n await writeManifestTypecheckTsconfig(\n path.join(projectRoot, MANIFEST_TYPECHECK_CONFIG_FILE),\n );\n await removeLegacyVendoredSdkPaths(projectRoot);\n await removeLegacyDreamboardComponentPath(projectRoot);\n\n const testDir = path.join(projectRoot, \"test\");\n const basesDir = path.join(testDir, \"bases\");\n const scenariosDir = path.join(testDir, \"scenarios\");\n const generatedDir = path.join(testDir, \"generated\");\n\n await ensureDir(basesDir);\n await ensureDir(scenariosDir);\n await ensureDir(generatedDir);\n\n await writeTestReadme(path.join(testDir, \"README.md\"));\n await writeGeneratedTestingStubs(generatedDir, mode);\n const initialTestPlayerCount = await inferInitialTestPlayerCount(projectRoot);\n await writeInitialBase(\n path.join(basesDir, \"initial-turn.base.ts\"),\n mode,\n initialTestPlayerCount,\n );\n await writeInitialScenario(\n path.join(scenariosDir, \"smoke-initial-turn.scenario.ts\"),\n mode,\n );\n await writeTestingTypes(path.join(testDir, \"testing-types.ts\"), mode);\n await writeTestTsconfig(path.join(testDir, \"tsconfig.json\"));\n\n const staleDtsPath = path.join(testDir, \"testing-types.d.ts\");\n if (await exists(staleDtsPath)) {\n await unlink(staleDtsPath);\n }\n const staleBaseScenariosPath = path.join(testDir, \"base-scenarios.json\");\n if (await exists(staleBaseScenariosPath)) {\n await unlink(staleBaseScenariosPath);\n }\n\n await migrateLegacyScenarioImports(projectRoot);\n}\n\nasync function ensureDreamboardGitignore(projectRoot: string): Promise<void> {\n const gitignorePath = path.join(projectRoot, \".gitignore\");\n const existing = await readTextFileIfExists(gitignorePath);\n if (existing?.includes(\".dreamboard/state.json\")) {\n return;\n }\n await writeTextFile(\n gitignorePath,\n `${existing ? `${existing.trimEnd()}\\n\\n` : \"\"}${DREAMBOARD_GITIGNORE_BLOCK}`,\n );\n}\n\nexport async function assertCliStaticScaffoldComplete(\n projectRoot: string,\n deletedPaths: readonly string[] = [],\n): Promise<void> {\n const expectedEntries = await getExpectedStaticEntries(projectRoot);\n const missingOrBlankPaths: string[] = [];\n\n for (const entry of expectedEntries) {\n const fullPath = path.join(projectRoot, entry.targetPath);\n const content = await readTextFileIfExists(fullPath);\n\n if (content === null || content.trim().length === 0) {\n missingOrBlankPaths.push(entry.targetPath);\n }\n }\n\n const staticPaths = new Set(expectedEntries.map((entry) => entry.targetPath));\n const deletedStaticPaths = deletedPaths\n .map(normalizeProjectPath)\n .filter((filePath) => staticPaths.has(filePath))\n .sort();\n\n if (missingOrBlankPaths.length === 0 && deletedStaticPaths.length === 0) {\n return;\n }\n\n const problems: string[] = [];\n if (missingOrBlankPaths.length > 0) {\n problems.push(\n `missing or blank: ${summarizePaths(missingOrBlankPaths.sort())}`,\n );\n }\n if (deletedStaticPaths.length > 0) {\n problems.push(`deleted: ${summarizePaths(deletedStaticPaths)}`);\n }\n\n throw new Error(\n `CLI static scaffold is incomplete (${problems.join(\"; \")}). Run \\`${DREAMBOARD_SYNC_COMMAND}\\` to refresh the scaffold before compiling.`,\n );\n}\n\nasync function writeFrameworkStaticFiles(\n projectRoot: string,\n mode: StaticScaffoldMode,\n options: StaticScaffoldOptions,\n): Promise<void> {\n const assetEntries = await getStaticAssetEntries();\n\n for (const entry of assetEntries) {\n const fullPath = path.join(projectRoot, entry.targetPath);\n // Dynamic seed files are user-customizable: only write them on first\n // scaffold; preserve existing content on subsequent updates.\n if (mode === \"update\" && isDynamicSeedPath(entry.targetPath)) {\n const existing = await readTextFileIfExists(fullPath);\n if (existing !== null && existing.trim().length > 0) {\n continue;\n }\n }\n await writeTextFile(fullPath, entry.content);\n }\n\n for (const entry of await getDynamicStaticEntries(\n projectRoot,\n mode,\n options,\n )) {\n await writeTextFile(\n path.join(projectRoot, entry.targetPath),\n entry.content,\n );\n }\n\n if (!options.localMaintainerRegistry) {\n await rm(path.join(projectRoot, \".npmrc\"), { force: true });\n }\n}\n\nasync function removeLegacyVendoredSdkPaths(\n projectRoot: string,\n): Promise<void> {\n await rm(path.join(projectRoot, \"app\", \"sdk\"), {\n recursive: true,\n force: true,\n });\n await rm(path.join(projectRoot, \"ui\", \"sdk\"), {\n recursive: true,\n force: true,\n });\n}\n\nasync function removeLegacyDreamboardComponentPath(\n projectRoot: string,\n): Promise<void> {\n const legacyDirPath = path.join(\n projectRoot,\n \"ui\",\n \"components\",\n \"dreamboard\",\n );\n const legacyIndexPath = path.join(legacyDirPath, \"index.ts\");\n const existing = await readTextFileIfExists(legacyIndexPath);\n\n const removableLegacyContents = new Set([\n LEGACY_DREAMBOARD_COMPONENT_INDEX_CONTENT.trim(),\n OLD_LEGACY_DREAMBOARD_COMPONENT_INDEX_CONTENT.trim(),\n OLD_PUBLIC_DREAMBOARD_COMPONENT_INDEX_CONTENT.trim(),\n ]);\n\n if (existing === null || !removableLegacyContents.has(existing.trim())) {\n return;\n }\n\n await unlink(legacyIndexPath);\n const remainingEntries = await readdir(legacyDirPath).catch(() => []);\n if (remainingEntries.length === 0) {\n await rmdir(legacyDirPath);\n }\n}\n\nasync function writeTestReadme(filePath: string): Promise<void> {\n await writeTextFile(\n filePath,\n \"# Dreamboard Test Workspace\\n\\nTypeScript bases live in `test/bases/*.base.ts` and scenarios live in `test/scenarios/*.scenario.ts`.\\n\\n1. Define reusable seeded bases with `defineBase({ id, seed, players, setupProfileId?, setup })`.\\n2. Define scenarios with `defineScenario({ id, from, when, then })`.\\n3. Scenario assertions can read `players()`, `state()`, `view(playerId)`, and `interactions(playerId)`.\\n4. Generate deterministic base snapshots: `dreamboard test generate`.\\n5. Run tests: `dreamboard test run`.\\n\\nImport test helpers from `../testing-types`.\\n\\nGenerated artifacts are written to `test/generated/*` and should not be edited manually.\\n\",\n );\n}\n\nasync function writeInitialBase(\n filePath: string,\n mode: StaticScaffoldMode,\n players: number,\n): Promise<void> {\n if (mode === \"update\") {\n return;\n }\n\n await writeTextFile(\n filePath,\n `import { defineBase } from \"../testing-types\";\n\nexport default defineBase({\n id: \"initial-turn\",\n seed: 1337,\n players: ${players},\n setup: async () => undefined,\n});\n`,\n );\n}\n\nasync function writeInitialScenario(\n filePath: string,\n mode: StaticScaffoldMode,\n): Promise<void> {\n if (mode === \"new\") {\n await writeTextFile(filePath, INITIAL_SCENARIO_CONTENT);\n return;\n }\n\n const existing = await readTextFileIfExists(filePath);\n if (\n existing === null ||\n existing.trim().length === 0 ||\n existing === INITIAL_SCENARIO_CONTENT\n ) {\n await writeTextFile(filePath, INITIAL_SCENARIO_CONTENT);\n }\n}\n\nasync function writeTestingTypes(\n filePath: string,\n mode: StaticScaffoldMode,\n): Promise<void> {\n if (mode === \"new\") {\n await writeTextFile(filePath, REDUCER_TESTING_TYPES_WRAPPER_CONTENT);\n return;\n }\n\n const existing = await readTextFileIfExists(filePath);\n if (shouldRefreshGeneratedTestingTypes(existing)) {\n await writeTextFile(filePath, REDUCER_TESTING_TYPES_WRAPPER_CONTENT);\n }\n}\n\nasync function writeGeneratedTestingStubs(\n generatedDir: string,\n mode: StaticScaffoldMode,\n): Promise<void> {\n const header = \"// Generated by dreamboard scaffold. Do not edit by hand.\\n\";\n await writeGeneratedTestingStubFile(\n path.join(generatedDir, \"base-states.generated.ts\"),\n `${header}export const BASE_STATES = {} as const;\\nexport const BASE_STATES_CONTRACT_FINGERPRINT = undefined;\\n`,\n mode,\n );\n await writeGeneratedTestingStubFile(\n path.join(generatedDir, \"base-states.generated.d.ts\"),\n `${header}export declare const BASE_STATES: Record<string, unknown>;\\nexport declare const BASE_STATES_CONTRACT_FINGERPRINT: string | undefined;\\n`,\n mode,\n );\n await writeGeneratedTestingStubFile(\n path.join(generatedDir, \"testing-contract.ts\"),\n `${header}export type BaseId = string;\\nexport type GameView = unknown;\\nexport type InteractionId = string;\\nexport type InteractionParamsOf<_Id extends string> = Record<string, unknown>;\\nexport type PhaseName = string;\\nexport type PlayerId = string;\\nexport type RejectionCode = string;\\nexport type StateName = string;\\nexport type TestRunner = \"reducer\" | \"remote\" | \"browser\";\\nexport type ViewByPhase = Record<string, GameView>;\\nexport type WorkspaceStageName<_Phase extends string = string> = string;\\nexport type Expectation = { [matcher: string]: (...args: unknown[]) => unknown; not: Expectation };\\nexport type ExpectFn = (actual: unknown) => Expectation;\\nexport type InteractionExplanation = { interactionId: string; phase: string; step: string | null; availability: \"available\" | \"notYourTurn\" | \"wrongPhase\" | \"wrongStep\" | \"blocked\"; rules: readonly { ruleId: string; outcome: \"passed\" | \"failed\" | \"notEvaluated\"; errorCode?: string; message?: string; }[]; actor: { required: readonly string[]; playerIsActor: boolean }; inputs: readonly { key: string; kind: string; eligibleCount: number | \"lazy\"; }[]; };\\nexport interface InteractionDescriptorFor<Id extends string = string> { interactionId: Id; [key: string]: unknown; }\\nexport interface ScenarioGameApi { start(): Promise<void>; submit<Id extends InteractionId>(playerId: PlayerId, interactionId: Id, params?: InteractionParamsOf<Id>): Promise<void>; }\\nexport interface BaseContext { game: ScenarioGameApi; players(): readonly PlayerId[]; seat(index: number): PlayerId; }\\nexport interface SharedScenarioContext { game: ScenarioGameApi; players(): readonly PlayerId[]; seat(index: number): PlayerId; state(): StateName; view(playerId: PlayerId): GameView; interactions(playerId: PlayerId): readonly InteractionDescriptorFor[]; explain(playerId: PlayerId, interactionId: InteractionId): InteractionExplanation; expect: ExpectFn; }\\nexport type ScenarioContext<Phase extends PhaseName | undefined = undefined> = Omit<SharedScenarioContext, \"state\" | \"view\"> & { state(): Phase extends PhaseName ? Phase : StateName; view(playerId: PlayerId): Phase extends PhaseName ? ViewByPhase[Phase] : GameView; };\\nexport type ScenarioThenContext<_Runners extends readonly TestRunner[] = readonly [\"reducer\"], Phase extends PhaseName | undefined = undefined> = ScenarioContext<Phase>;\\nexport interface BaseDefinition { id: string; seed?: number; players?: number; setupProfileId?: string; extends?: BaseId | string; setup: (ctx: BaseContext) => void | Promise<void>; }\\nexport interface ScenarioDefinition<Runners extends readonly TestRunner[] = readonly [\"reducer\"], Phase extends PhaseName | undefined = undefined> { id: string; description?: string; from: BaseId | string; runners?: Runners; phase?: Phase; stage?: Phase extends PhaseName ? WorkspaceStageName<Phase> : never; when: (ctx: ScenarioContext<Phase>) => void | Promise<void>; then: (ctx: ScenarioThenContext<Runners, Phase>) => void | Promise<void>; }\\n`,\n mode,\n );\n await writeGeneratedTestingStubFile(\n path.join(generatedDir, \"scenario-manifest.generated.ts\"),\n `${header}export const SCENARIO_MANIFEST = [] as const;\\n`,\n mode,\n );\n}\n\nasync function writeGeneratedTestingStubFile(\n filePath: string,\n content: string,\n mode: StaticScaffoldMode,\n): Promise<void> {\n if (mode === \"new\") {\n await writeTextFile(filePath, content);\n return;\n }\n\n const existing = await readTextFileIfExists(filePath);\n if (\n existing === null ||\n existing.trim().length === 0 ||\n existing.startsWith(GENERATED_SCENARIO_PREFIX)\n ) {\n await writeTextFile(filePath, content);\n }\n}\n\nasync function writeTestTsconfig(filePath: string): Promise<void> {\n await writeTextFile(\n filePath,\n `${JSON.stringify(\n {\n compilerOptions: {\n target: \"ES2022\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n noEmit: true,\n },\n include: [\n \"./**/*.ts\",\n \"./**/*.d.ts\",\n \"../shared/**/*.ts\",\n \"../shared/**/*.d.ts\",\n ],\n },\n null,\n 2,\n )}\\n`,\n );\n}\n\nasync function writeManifestTypecheckTsconfig(filePath: string): Promise<void> {\n await writeTextFile(\n filePath,\n `${JSON.stringify(\n {\n compilerOptions: {\n target: \"ES2022\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n noEmit: true,\n allowImportingTsExtensions: true,\n },\n include: [\"./manifest.ts\"],\n },\n null,\n 2,\n )}\\n`,\n );\n}\n\nexport async function migrateLegacyScenarioImports(\n projectRoot: string,\n): Promise<void> {\n const scenariosRoot = path.join(projectRoot, \"test\", \"scenarios\");\n if (!(await exists(scenariosRoot))) return;\n\n const scenarioFiles = await collectScenarioFiles(scenariosRoot);\n for (const filePath of scenarioFiles) {\n const content = await readTextFile(filePath);\n if (!content.includes(\"@dreamboard/cli/testing\")) continue;\n\n const relativeToTestingTypes = normalizeImportPath(\n path.relative(\n path.dirname(filePath),\n path.join(projectRoot, \"test\", \"testing-types\"),\n ),\n );\n\n const migrated = content\n .replaceAll('\"@dreamboard/cli/testing\"', `\"${relativeToTestingTypes}\"`)\n .replaceAll(\"'@dreamboard/cli/testing'\", `'${relativeToTestingTypes}'`);\n\n if (migrated !== content) {\n await writeTextFile(filePath, migrated);\n }\n }\n}\n\nfunction shouldRefreshGeneratedTestingTypes(\n existingContent: string | null,\n): boolean {\n if (existingContent === null || existingContent.trim().length === 0) {\n return true;\n }\n if (existingContent === TESTING_TYPES_STUB) {\n return true;\n }\n return existingContent.startsWith(GENERATED_TESTING_TYPES_PREFIX);\n}\n\nasync function inferInitialTestPlayerCount(\n projectRoot: string,\n): Promise<number> {\n const manifestPath = path.join(projectRoot, \"manifest.ts\");\n if (!(await exists(manifestPath))) {\n return 4;\n }\n\n try {\n const manifest = await materializeManifest(projectRoot);\n return manifest.players.optimalPlayers ?? manifest.players.minPlayers ?? 4;\n } catch {\n return 4;\n }\n}\n\nasync function collectScenarioFiles(rootDir: string): Promise<string[]> {\n const files: string[] = [];\n const stack = [rootDir];\n\n while (stack.length > 0) {\n const dir = stack.pop();\n if (!dir) continue;\n\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n stack.push(fullPath);\n } else if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n files.push(fullPath);\n }\n }\n }\n\n return files;\n}\n\nexport function resolveStaticAssetRoot(\n importUrl: string = import.meta.url,\n): string {\n const candidates = [\n fileURLToPath(new URL(\"../../scaffold/assets/static/\", importUrl)),\n fileURLToPath(new URL(\"./scaffold/assets/static/\", importUrl)),\n fileURLToPath(new URL(\"../scaffold/assets/static/\", importUrl)),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(\n `Unable to locate CLI static scaffold assets. Checked: ${candidates.join(\", \")}`,\n );\n}\n\nasync function getStaticAssetEntries(): Promise<StaticAssetEntry[]> {\n const files = await walkFiles(STATIC_ASSET_ROOT);\n const entries: StaticAssetEntry[] = [];\n\n for (const filePath of files) {\n const targetPath = normalizeProjectPath(\n path.relative(STATIC_ASSET_ROOT, filePath),\n );\n entries.push({\n targetPath,\n content: await readFile(filePath, \"utf8\"),\n });\n }\n\n entries.sort((left, right) =>\n left.targetPath.localeCompare(right.targetPath),\n );\n return entries;\n}\n\nasync function getDynamicStaticEntries(\n projectRoot: string,\n mode: StaticScaffoldMode,\n options: StaticScaffoldOptions = {},\n): Promise<StaticAssetEntry[]> {\n const entries: StaticAssetEntry[] = [\n {\n targetPath: \"package.json\",\n content: await buildRootPackageJson(projectRoot, mode, options),\n },\n {\n targetPath: \"ui/package.json\",\n content: buildUiPackageJson(),\n },\n ];\n\n if (options.localMaintainerRegistry) {\n entries.push({\n targetPath: \".npmrc\",\n content: buildWorkspaceNpmrc(options.localMaintainerRegistry.registryUrl),\n });\n }\n\n return entries;\n}\n\nasync function readProjectLocalMaintainerRegistry(\n projectRoot: string,\n): Promise<LocalMaintainerRegistryConfig | null> {\n const projectConfigPath = path.join(\n projectRoot,\n PROJECT_DIR_NAME,\n PROJECT_CONFIG_FILE,\n );\n if (!(await exists(projectConfigPath))) {\n return null;\n }\n\n const projectConfig = await loadProjectConfig(projectRoot);\n return projectConfig.localMaintainerRegistry ?? null;\n}\n\nasync function getExpectedStaticEntries(\n projectRoot: string,\n): Promise<StaticAssetEntry[]> {\n const entries = [\n ...(await getStaticAssetEntries()),\n ...(await getDynamicStaticEntries(projectRoot, \"update\", {\n localMaintainerRegistry:\n await readProjectLocalMaintainerRegistry(projectRoot),\n })),\n ];\n entries.sort((left, right) =>\n left.targetPath.localeCompare(right.targetPath),\n );\n return entries;\n}\n\nasync function walkFiles(rootDir: string): Promise<string[]> {\n const files: string[] = [];\n const stack = [rootDir];\n\n while (stack.length > 0) {\n const currentDir = stack.pop();\n if (!currentDir) continue;\n\n const entries = await readdir(currentDir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n if (entry.isDirectory()) {\n stack.push(fullPath);\n } else if (entry.isFile()) {\n files.push(fullPath);\n }\n }\n }\n\n files.sort((left, right) => left.localeCompare(right));\n return files;\n}\n\nasync function buildRootPackageJson(\n projectRoot: string,\n mode: StaticScaffoldMode,\n options: StaticScaffoldOptions,\n): Promise<string> {\n const sdkPackageRanges = {\n ...SDK_DEPENDENCY_RANGES,\n ...(options.localMaintainerRegistry?.packages ?? {}),\n };\n const packageJsonPath = path.join(projectRoot, \"package.json\");\n const existingPackageJson =\n mode === \"update\" && (await exists(packageJsonPath))\n ? await readJsonFile<RootPackageJsonShape>(packageJsonPath)\n : null;\n const {\n dreamboardFrameworkVersion: _legacyFrameworkVersion,\n ...existingPackageJsonWithoutLegacyVersion\n } = existingPackageJson ?? {};\n const frameworkDependencies = {\n \"@dreamboard-games/sdk\":\n sdkPackageRanges[\"@dreamboard-games/sdk\"] ??\n SDK_DEPENDENCY_RANGES[\"@dreamboard-games/sdk\"],\n ...SHARED_DEPENDENCIES,\n ...ROOT_APP_DEPENDENCIES,\n };\n const frameworkDevDependencies = {\n ...SHARED_DEV_DEPENDENCIES,\n };\n const nextPackageJson: RootPackageJsonShape = {\n ...existingPackageJsonWithoutLegacyVersion,\n private: true,\n scripts: {\n ...(existingPackageJson?.scripts ?? {}),\n ...FRAMEWORK_SCRIPTS,\n },\n dependencies: {\n ...(existingPackageJson?.dependencies ?? {}),\n ...frameworkDependencies,\n },\n devDependencies: {\n ...(existingPackageJson?.devDependencies ?? {}),\n ...frameworkDevDependencies,\n },\n pnpm: mergePnpmConfig(existingPackageJson?.pnpm),\n };\n return `${JSON.stringify(nextPackageJson, null, 2)}\\n`;\n}\n\nfunction mergePnpmConfig(\n existingPnpm: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n const existingOverrides =\n existingPnpm?.overrides &&\n typeof existingPnpm.overrides === \"object\" &&\n !Array.isArray(existingPnpm.overrides)\n ? (existingPnpm.overrides as Record<string, unknown>)\n : {};\n return {\n ...(existingPnpm ?? {}),\n overrides: {\n ...existingOverrides,\n ...FRAMEWORK_PNPM_OVERRIDES,\n },\n };\n}\n\nfunction buildWorkspaceNpmrc(registryUrl: string): string {\n return `@dreamboard-games:registry=${registryUrl}\\n`;\n}\n\nfunction buildUiPackageJson(): string {\n return `${JSON.stringify(\n {\n private: true,\n dependencies: SHARED_DEPENDENCIES,\n devDependencies: SHARED_DEV_DEPENDENCIES,\n },\n null,\n 2,\n )}\\n`;\n}\n\nfunction readPackageVersion(\n packageJsonPath: string,\n packageName: string,\n): string | null {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n version?: unknown;\n };\n\n if (\n typeof packageJson.version !== \"string\" ||\n packageJson.version.trim().length === 0\n ) {\n return null;\n }\n\n return `^${packageJson.version.trim()}`;\n}\n\nfunction findNearestPackageJsonPath(\n importMetaUrl: string = import.meta.url,\n): string | null {\n let current = path.dirname(fileURLToPath(importMetaUrl));\n\n while (true) {\n const candidate = path.join(current, \"package.json\");\n if (existsSync(candidate)) {\n return candidate;\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nfunction isSourceCheckoutCliPackageJsonPath(\n packageJsonPath: string,\n importMetaUrl: string = import.meta.url,\n): boolean {\n try {\n return (\n path.resolve(packageJsonPath) ===\n path.join(\n resolveCliRepoRoot(importMetaUrl),\n \"apps\",\n \"dreamboard-cli\",\n \"package.json\",\n )\n );\n } catch {\n return false;\n }\n}\n\nfunction readPackagedSdkDependencyRange(\n packageName: keyof typeof SDK_PACKAGE_PATHS,\n importMetaUrl: string = import.meta.url,\n): string | null {\n const packageJsonPath = findNearestPackageJsonPath(importMetaUrl);\n if (!packageJsonPath) {\n return null;\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n dependencies?: Record<string, unknown>;\n };\n\n const packagedRange = packageJson.dependencies?.[packageName];\n if (\n typeof packagedRange !== \"string\" ||\n packagedRange.trim().length === 0 ||\n packagedRange.startsWith(\"workspace:\") ||\n packagedRange.startsWith(\"link:\") ||\n (packagedRange.startsWith(\"file:\") &&\n !IS_PUBLISHED_BUILD &&\n isSourceCheckoutCliPackageJsonPath(packageJsonPath, importMetaUrl))\n ) {\n return null;\n }\n\n return packagedRange.trim();\n}\n\n/**\n * Local Verdaccio snapshot pins (`x.y.z-local.<timestamp>.<fingerprint>`) are\n * only resolvable on the maintainer machine that published them. Scaffolded\n * workspaces must always start from a registry-publishable version, so\n * normalize any inherited snapshot pin to its public base version.\n */\nfunction stripLocalSnapshotSuffix(range: string): string {\n return range.replace(/-local\\..*$/, \"\");\n}\n\nexport function resolveSdkDependencyRange(\n packageName: keyof typeof SDK_PACKAGE_PATHS,\n importMetaUrl: string = import.meta.url,\n): string {\n const packagedRange = readPackagedSdkDependencyRange(\n packageName,\n importMetaUrl,\n );\n if (packagedRange) {\n return stripLocalSnapshotSuffix(packagedRange);\n }\n\n try {\n const repoRoot = resolveCliRepoRoot(importMetaUrl);\n const packageJsonPath = path.join(\n repoRoot,\n ...SDK_PACKAGE_PATHS[packageName],\n );\n const repoRange = readPackageVersion(packageJsonPath, packageName);\n if (repoRange) {\n return stripLocalSnapshotSuffix(repoRange);\n }\n } catch {\n // Published installs do not include the monorepo layout.\n }\n\n return DEFAULT_SDK_DEPENDENCY_RANGES[packageName];\n}\n\nfunction normalizeImportPath(relativePath: string): string {\n const normalized = relativePath.replaceAll(\"\\\\\", \"/\");\n if (normalized.startsWith(\".\")) return normalized;\n return `./${normalized}`;\n}\n\nfunction normalizeProjectPath(filePath: string): string {\n return filePath.replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\").replace(/\\\\/g, \"/\");\n}\n\nfunction summarizePaths(paths: readonly string[]): string {\n const maxShown = 5;\n const shown = paths.slice(0, maxShown).join(\", \");\n if (paths.length <= maxShown) return shown;\n return `${shown}, and ${paths.length - maxShown} more`;\n}\n","export const FRAMEWORK_REACT_VERSION = \"19.2.6\";\nexport const FRAMEWORK_ZOD_VERSION = \"4.4.3\";\n\nexport const FRAMEWORK_REACT_DEPENDENCIES = {\n react: FRAMEWORK_REACT_VERSION,\n \"react-dom\": FRAMEWORK_REACT_VERSION,\n} as const;\n\nexport const FRAMEWORK_PNPM_OVERRIDES = {\n ...FRAMEWORK_REACT_DEPENDENCIES,\n zod: FRAMEWORK_ZOD_VERSION,\n} as const;\n","import { unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { GameTopologyManifest } from \"@dreamboard-games/api-client\";\nimport { MANIFEST_FILE, RULE_FILE } from \"../../constants.js\";\nimport type { ProjectConfig, ResolvedConfig } from \"../../types.js\";\nimport { updateProjectState } from \"../../config/project-config.js\";\nimport {\n getProjectRevisionSourcesSdk,\n getProjectSourcesSdk,\n} from \"../api/project-api.js\";\nimport {\n clearProjectPendingAuthoringSync,\n updateProjectAuthoringState,\n} from \"./project-state.js\";\nimport { exists, writeTextFile } from \"../../utils/fs.js\";\nimport {\n collectLocalFiles,\n removeExtraneousFiles,\n loadManifest,\n writeManifest,\n writeRule,\n writeSnapshot,\n writeSourceFiles,\n} from \"./local-files.js\";\nimport { isAllowedGamePath, isLibraryPath } from \"./scaffold-ownership.js\";\nimport { applyWorkspaceCodegen } from \"./workspace-codegen.js\";\nimport { installWorkspaceDependencies } from \"./workspace-dependencies.js\";\n\nconst META_FILES = new Set([RULE_FILE]);\nconst LOCAL_PACKAGE_METADATA_FILES = new Set([\n \".npmrc\",\n \"package.json\",\n \"pnpm-lock.yaml\",\n]);\n\nexport type RemoteProjectSources = {\n authoringStateId?: string;\n revisionDigest?: string;\n files: Record<string, string>;\n sourceRevisionId: string;\n treeHash: string;\n manifestId?: string;\n manifestContentHash?: string;\n manifest?: GameTopologyManifest;\n ruleId?: string;\n ruleText?: string;\n};\n\nexport type RemoteReconcileResult = {\n latest: RemoteProjectSources;\n remoteUserFiles: Record<string, string>;\n written: string[];\n deleted: string[];\n conflicts: string[];\n};\n\nfunction normalizeRemoteFiles(\n response:\n | {\n files?: Record<string, string>;\n sourceFiles?: Record<string, string>;\n }\n | undefined,\n): Record<string, string> {\n return response?.files ?? response?.sourceFiles ?? {};\n}\n\nfunction isMergeablePath(filePath: string): boolean {\n if (META_FILES.has(filePath)) return true;\n return isAllowedGamePath(filePath) && !isLibraryPath(filePath);\n}\n\nfunction isMergeableUserPath(filePath: string): boolean {\n return (\n !META_FILES.has(filePath) &&\n isAllowedGamePath(filePath) &&\n !isLibraryPath(filePath)\n );\n}\n\nfunction buildMergeableRemoteFiles(\n sources: RemoteProjectSources,\n): Record<string, string> {\n const files: Record<string, string> = {};\n\n for (const [filePath, content] of Object.entries(sources.files)) {\n if (isMergeablePath(filePath)) {\n files[filePath] = content;\n }\n }\n\n if (typeof sources.ruleText === \"string\") {\n files[RULE_FILE] = sources.ruleText;\n }\n\n return files;\n}\n\nfunction formatConflictSection(content: string | null): string {\n if (content === null) return \"\";\n return content.endsWith(\"\\n\") ? content : `${content}\\n`;\n}\n\nfunction buildConflictContent(\n localContent: string | null,\n remoteContent: string | null,\n): string {\n return [\n \"<<<<<<< LOCAL\",\n formatConflictSection(localContent),\n \"=======\",\n formatConflictSection(remoteContent),\n \">>>>>>> REMOTE\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction mergeFileContent(options: {\n baseContent: string | null;\n localContent: string | null;\n remoteContent: string | null;\n}): { content: string | null; conflicted: boolean } {\n const { baseContent, localContent, remoteContent } = options;\n\n if (localContent === remoteContent) {\n return { content: localContent, conflicted: false };\n }\n\n if (baseContent === localContent) {\n return { content: remoteContent, conflicted: false };\n }\n\n if (baseContent === remoteContent) {\n return { content: localContent, conflicted: false };\n }\n\n if (baseContent === null) {\n if (localContent === null) {\n return { content: remoteContent, conflicted: false };\n }\n if (remoteContent === null) {\n return { content: localContent, conflicted: false };\n }\n return {\n content: buildConflictContent(localContent, remoteContent),\n conflicted: true,\n };\n }\n\n if (localContent === null) {\n if (remoteContent === null) {\n return { content: null, conflicted: false };\n }\n return {\n content: buildConflictContent(null, remoteContent),\n conflicted: true,\n };\n }\n\n if (remoteContent === null) {\n return {\n content: buildConflictContent(localContent, null),\n conflicted: true,\n };\n }\n\n return {\n content: buildConflictContent(localContent, remoteContent),\n conflicted: true,\n };\n}\n\nasync function fetchRemoteRevisionSources(\n projectId: string,\n revisionDigest: string,\n): Promise<RemoteProjectSources> {\n const sources = await getProjectRevisionSourcesSdk({\n projectId,\n revisionDigest,\n });\n\n return {\n revisionDigest: sources.revisionDigest,\n files: normalizeRemoteFiles(sources),\n sourceRevisionId: sources.sourceRevisionId,\n treeHash: sources.sourceTreeHash,\n manifestContentHash: sources.manifestContentHash,\n manifest: sources.manifest,\n ruleText: sources.ruleText,\n };\n}\n\nexport async function fetchLatestRemoteSources(\n gameId: string,\n): Promise<RemoteProjectSources | null> {\n void gameId;\n throw new Error(\"Legacy game source fetch is no longer supported.\");\n}\n\nexport async function fetchLatestRemoteProjectSources(\n projectId: string,\n): Promise<RemoteProjectSources | null> {\n const sources = await getProjectSourcesSdk(projectId);\n if (!sources) {\n return null;\n }\n return {\n authoringStateId: sources.authoringStateId,\n revisionDigest: undefined,\n files: normalizeRemoteFiles(sources),\n sourceRevisionId: sources.sourceRevisionId,\n treeHash: sources.treeHash,\n manifestId: sources.manifestId,\n manifestContentHash: sources.manifestContentHash ?? undefined,\n manifest: sources.manifest,\n ruleId: sources.ruleId,\n ruleText: sources.ruleText,\n };\n}\n\nexport async function pullIntoDirectory(\n config: ResolvedConfig,\n targetDir: string,\n projectConfig: ProjectConfig,\n): Promise<ProjectConfig> {\n const latest = await fetchLatestRemoteProjectSources(\n projectConfig.projectId,\n );\n if (!latest) {\n throw new Error(\"No authoring state found for this game.\");\n }\n\n await writeSourceFiles(targetDir, latest.files);\n await removeExtraneousFiles(targetDir, new Set(Object.keys(latest.files)));\n\n if (latest.manifest && !latest.files[MANIFEST_FILE]) {\n await writeManifest(targetDir, latest.manifest);\n }\n\n if (typeof latest.ruleText === \"string\") {\n await writeRule(targetDir, latest.ruleText);\n }\n\n if (await exists(path.join(targetDir, \"package.json\"))) {\n await installWorkspaceDependencies(targetDir);\n }\n\n const manifestForCodegen = await loadManifest(targetDir);\n await applyWorkspaceCodegen({\n projectRoot: targetDir,\n manifest: manifestForCodegen,\n });\n\n const pulledProjectConfig = buildPulledProjectConfig(\n config,\n projectConfig,\n latest,\n );\n await updateProjectState(targetDir, pulledProjectConfig);\n\n await writeSnapshot(targetDir);\n return pulledProjectConfig;\n}\n\nexport function buildPulledProjectConfig(\n config: Pick<ResolvedConfig, \"apiBaseUrl\" | \"webBaseUrl\">,\n projectConfig: ProjectConfig,\n latest: RemoteProjectSources,\n): ProjectConfig {\n return updateProjectAuthoringState(\n clearProjectPendingAuthoringSync({\n ...projectConfig,\n remoteHeadDigest: latest.revisionDigest ?? projectConfig.remoteHeadDigest,\n apiBaseUrl: projectConfig.apiBaseUrl ?? config.apiBaseUrl,\n webBaseUrl: projectConfig.webBaseUrl ?? config.webBaseUrl,\n }),\n {\n revisionDigest: latest.revisionDigest ?? projectConfig.remoteHeadDigest,\n authoringStateId: latest.authoringStateId,\n sourceRevisionId: latest.sourceRevisionId,\n sourceTreeHash: latest.treeHash,\n manifestId: latest.manifestId ?? projectConfig.authoring?.manifestId,\n manifestContentHash:\n latest.manifestContentHash ??\n projectConfig.authoring?.manifestContentHash,\n ruleId: latest.ruleId ?? projectConfig.authoring?.ruleId,\n },\n );\n}\n\nexport async function reconcileRemoteChangesIntoWorkspace(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n baseRevisionDigest: string;\n latestRevisionDigest: string;\n}): Promise<RemoteReconcileResult> {\n const {\n projectRoot,\n projectConfig,\n baseRevisionDigest,\n latestRevisionDigest,\n } = options;\n const [base, latest, localFiles] = await Promise.all([\n fetchRemoteRevisionSources(projectConfig.projectId, baseRevisionDigest),\n fetchRemoteRevisionSources(projectConfig.projectId, latestRevisionDigest),\n collectLocalFiles(projectRoot),\n ]);\n\n const baseFiles = buildMergeableRemoteFiles(base);\n const latestFiles = buildMergeableRemoteFiles(latest);\n const localMergeableFiles = Object.fromEntries(\n Object.entries(localFiles).filter(([filePath]) =>\n isMergeablePath(filePath),\n ),\n );\n\n const candidatePaths = new Set<string>([\n ...Object.keys(baseFiles),\n ...Object.keys(latestFiles),\n ...Object.keys(localMergeableFiles),\n ]);\n\n const written: string[] = [];\n const deleted: string[] = [];\n const conflicts: string[] = [];\n\n for (const filePath of [...candidatePaths].sort()) {\n const mergeResult = mergeFileContent({\n baseContent: baseFiles[filePath] ?? null,\n localContent: localMergeableFiles[filePath] ?? null,\n remoteContent: latestFiles[filePath] ?? null,\n });\n\n const absolutePath = path.join(projectRoot, filePath);\n if (mergeResult.content === null) {\n if (await exists(absolutePath)) {\n await unlink(absolutePath);\n deleted.push(filePath);\n }\n continue;\n }\n\n await writeTextFile(absolutePath, mergeResult.content);\n written.push(filePath);\n\n if (mergeResult.conflicted) {\n conflicts.push(filePath);\n }\n }\n\n return {\n latest,\n remoteUserFiles: Object.fromEntries(\n Object.entries(latest.files).filter(([filePath]) =>\n isMergeableUserPath(filePath),\n ),\n ),\n written,\n deleted,\n conflicts,\n };\n}\n\nexport function buildRemoteAlignedSnapshotFiles(options: {\n localFiles: Record<string, string>;\n remoteUserFiles: Record<string, string>;\n}): Record<string, string> {\n const snapshotFiles = {\n ...options.localFiles,\n ...options.remoteUserFiles,\n };\n\n for (const filePath of LOCAL_PACKAGE_METADATA_FILES) {\n if (options.localFiles[filePath] !== undefined) {\n snapshotFiles[filePath] = options.localFiles[filePath];\n }\n }\n\n return snapshotFiles;\n}\n","import crypto from \"node:crypto\";\nimport { spawn } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, lstat, readFile, rm, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { Readable } from \"node:stream\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n buildDependencyPreparationFailureMessage,\n buildMissingDependencyToolingMessage,\n buildMissingGeneratedLockfileMessage,\n buildPackageLockConflictMessage,\n} from \"./dependency-tooling-messages.js\";\nimport { FRAMEWORK_PNPM_OVERRIDES } from \"./framework-dependencies.js\";\n\ntype LockfileGenerationOptions = Record<string, never>;\n\ntype PackageJsonShape = {\n packageManager?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n pnpm?: Record<string, unknown>;\n};\n\ntype DependencyInstallMetadata = {\n dependencyFingerprint: string;\n installedAt: string;\n packageManager: string;\n};\n\ntype LockfileCommand = {\n binary: string;\n args: string[];\n};\n\nexport type WorkspaceDependencyReconciliationResult = {\n required: boolean;\n installed: boolean;\n lockfileGenerated: boolean;\n packageManagerNormalized: boolean;\n fingerprint: string | null;\n};\n\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\nconst CLI_ROOT = path.resolve(MODULE_DIR, \"../../..\");\nconst REPO_ROOT = path.resolve(CLI_ROOT, \"../..\");\nconst REPO_PACKAGE_JSON_PATH = path.join(REPO_ROOT, \"package.json\");\nconst DEFAULT_PACKAGE_MANAGER = \"pnpm@10.4.1\";\nconst SDK_PACKAGE_NAME = \"@dreamboard-games/sdk\";\nconst SDK_REQUIRED_DIST_FILES = [\n \"dist/index.d.ts\",\n \"dist/index.js\",\n \"dist/types.d.ts\",\n \"dist/types.js\",\n \"dist/ui.d.ts\",\n \"dist/ui.js\",\n \"dist/runtime.d.ts\",\n \"dist/runtime.js\",\n] as const;\nconst DEPENDENCY_INSTALL_METADATA_PATH_SEGMENTS = [\n \".dreamboard\",\n \"dependency-install.json\",\n] as const;\n\nclass LockfileGenerationError extends Error {\n constructor(\n readonly binary: string,\n readonly details: {\n code?: number | null;\n stdout: string;\n stderr: string;\n cause?: Error;\n },\n ) {\n super(buildLockfileGenerationErrorMessage(binary, details), {\n cause: details.cause,\n });\n this.name = \"LockfileGenerationError\";\n }\n}\n\nexport async function generatePnpmLockfile(\n projectRoot: string,\n _options: LockfileGenerationOptions = {},\n): Promise<boolean> {\n await ensurePackageManagerNormalized(projectRoot);\n await assertNoNpmLockfileConflict(projectRoot);\n await runPackageManagerCommand(projectRoot, {\n args: [\n \"install\",\n \"--ignore-workspace\",\n \"--lockfile-only\",\n \"--config.shared-workspace-lockfile=false\",\n ],\n });\n await assertPnpmLockfilePresent(projectRoot);\n return true;\n}\n\nexport async function installWorkspaceDependencies(\n projectRoot: string,\n _options: LockfileGenerationOptions = {},\n): Promise<boolean> {\n const result = await reconcileWorkspaceDependencies(projectRoot);\n return result.required;\n}\n\nexport async function reconcileWorkspaceDependencies(\n projectRoot: string,\n): Promise<WorkspaceDependencyReconciliationResult> {\n const packageJsonPath = path.join(projectRoot, \"package.json\");\n if (!(await pathExists(packageJsonPath))) {\n return {\n required: false,\n installed: false,\n lockfileGenerated: false,\n packageManagerNormalized: false,\n fingerprint: null,\n };\n }\n\n await assertNoNpmLockfileConflict(projectRoot);\n const packageManagerNormalized =\n await ensurePackageManagerNormalized(projectRoot);\n const pnpmLockfilePath = path.join(projectRoot, \"pnpm-lock.yaml\");\n const nodeModulesPath = path.join(projectRoot, \"node_modules\");\n const metadataPath = path.join(\n projectRoot,\n ...DEPENDENCY_INSTALL_METADATA_PATH_SEGMENTS,\n );\n\n let lockfileGenerated = false;\n let installed = false;\n const metadata = await readJsonFile<DependencyInstallMetadata>(metadataPath);\n const lockfileExists = await pathExists(pnpmLockfilePath);\n\n if (!lockfileExists) {\n await runPackageManagerCommand(projectRoot, {\n args: [\n \"install\",\n \"--ignore-workspace\",\n \"--config.shared-workspace-lockfile=false\",\n ],\n });\n lockfileGenerated = true;\n installed = true;\n }\n\n await assertPnpmLockfilePresent(projectRoot);\n let fingerprint = await fingerprintInstallManifest({\n packageJsonPath,\n lockfilePath: pnpmLockfilePath,\n });\n const hasValidInstalledDeps =\n (await pathExists(nodeModulesPath)) &&\n (await hasValidInstalledDependencies({\n packageJsonPath,\n nodeModulesPath,\n }));\n const shouldInstall =\n !installed &&\n (metadata?.dependencyFingerprint !== fingerprint || !hasValidInstalledDeps);\n\n if (shouldInstall) {\n await rm(nodeModulesPath, { recursive: true, force: true });\n await runPackageManagerCommand(projectRoot, {\n args: [\n \"install\",\n \"--ignore-workspace\",\n \"--config.shared-workspace-lockfile=false\",\n ],\n });\n installed = true;\n fingerprint = await fingerprintInstallManifest({\n packageJsonPath,\n lockfilePath: pnpmLockfilePath,\n });\n }\n\n if (installed || packageManagerNormalized || !metadata) {\n await mkdir(path.dirname(metadataPath), { recursive: true });\n await writeJsonFile(metadataPath, {\n dependencyFingerprint: fingerprint,\n installedAt: new Date().toISOString(),\n packageManager: await readRepoPackageManager(),\n } satisfies DependencyInstallMetadata);\n }\n\n return {\n required: true,\n installed,\n lockfileGenerated,\n packageManagerNormalized,\n fingerprint,\n };\n}\n\nasync function assertNoNpmLockfileConflict(projectRoot: string): Promise<void> {\n const packageLockPath = path.join(projectRoot, \"package-lock.json\");\n const pnpmLockPath = path.join(projectRoot, \"pnpm-lock.yaml\");\n if (\n (await pathExists(packageLockPath)) &&\n !(await pathExists(pnpmLockPath))\n ) {\n throw new Error(buildPackageLockConflictMessage());\n }\n}\n\nasync function assertPnpmLockfilePresent(projectRoot: string): Promise<void> {\n const pnpmLockfilePath = path.join(projectRoot, \"pnpm-lock.yaml\");\n if (!(await pathExists(pnpmLockfilePath))) {\n throw new Error(buildMissingGeneratedLockfileMessage());\n }\n}\n\nasync function ensurePackageManagerNormalized(\n projectRoot: string,\n): Promise<boolean> {\n const packageJsonPath = path.join(projectRoot, \"package.json\");\n const packageJsonContent = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(packageJsonContent) as PackageJsonShape;\n const packageManager = await readRepoPackageManager();\n const nextPackageJson: PackageJsonShape = {\n ...packageJson,\n packageManager,\n pnpm: mergePnpmConfig(packageJson.pnpm),\n };\n const normalizedPackageJson = `${JSON.stringify(nextPackageJson, null, 2)}\\n`;\n if (normalizedPackageJson === packageJsonContent) {\n return false;\n }\n await writeFile(packageJsonPath, normalizedPackageJson, \"utf8\");\n return true;\n}\n\nfunction mergePnpmConfig(\n existingPnpm: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n const existingOverrides =\n existingPnpm?.overrides &&\n typeof existingPnpm.overrides === \"object\" &&\n !Array.isArray(existingPnpm.overrides)\n ? (existingPnpm.overrides as Record<string, unknown>)\n : {};\n return {\n ...(existingPnpm ?? {}),\n overrides: {\n ...existingOverrides,\n ...FRAMEWORK_PNPM_OVERRIDES,\n },\n };\n}\n\nasync function fingerprintInstallManifest(options: {\n packageJsonPath: string;\n lockfilePath: string;\n}): Promise<string> {\n const packageJson = await readFile(options.packageJsonPath, \"utf8\");\n const lockfile = await readFile(options.lockfilePath, \"utf8\");\n const packageManager = await readRepoPackageManager();\n return fingerprintContent([\n packageJson,\n lockfile,\n `packageManager:${packageManager}`,\n ]);\n}\n\nasync function hasValidInstalledDependencies(options: {\n packageJsonPath: string;\n nodeModulesPath: string;\n}): Promise<boolean> {\n const packageJson = await readJsonFile<PackageJsonShape>(\n options.packageJsonPath,\n );\n if (!packageJson) {\n return false;\n }\n\n const directDependencyNames = new Set<string>();\n for (const field of [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n ] as const) {\n for (const packageName of Object.keys(packageJson[field] ?? {})) {\n directDependencyNames.add(packageName);\n }\n }\n\n if (directDependencyNames.size === 0) {\n return true;\n }\n\n for (const packageName of directDependencyNames) {\n const packageRoot = path.join(\n options.nodeModulesPath,\n ...packageName.split(\"/\"),\n );\n if (!(await pathExists(path.join(packageRoot, \"package.json\")))) {\n return false;\n }\n if (\n packageName === SDK_PACKAGE_NAME &&\n !(await hasInstalledSdkDistFiles(packageRoot))\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nasync function hasInstalledSdkDistFiles(packageRoot: string): Promise<boolean> {\n for (const relativePath of SDK_REQUIRED_DIST_FILES) {\n if (!(await pathExists(path.join(packageRoot, relativePath)))) {\n return false;\n }\n }\n return true;\n}\n\nfunction hasExactPnpmVersion(value?: string): boolean {\n return /^pnpm@\\d+\\.\\d+\\.\\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(value ?? \"\");\n}\n\nasync function readRepoPackageManager(): Promise<string> {\n const packageJson = await readJsonFile<PackageJsonShape>(\n REPO_PACKAGE_JSON_PATH,\n );\n const packageManager = packageJson?.packageManager?.trim();\n return hasExactPnpmVersion(packageManager)\n ? packageManager!\n : DEFAULT_PACKAGE_MANAGER;\n}\n\nfunction fingerprintContent(parts: string[]): string {\n return crypto\n .createHash(\"sha256\")\n .update(parts.join(\"\\n---\\n\"))\n .digest(\"hex\");\n}\n\nfunction resolvePnpmInstallInvocation(installArgs: readonly string[]): {\n command: string;\n args: string[];\n} {\n const corepackPath = path.join(path.dirname(process.execPath), \"corepack\");\n if (existsSync(corepackPath)) {\n return { command: corepackPath, args: [\"pnpm\", ...installArgs] };\n }\n return { command: \"pnpm\", args: [...installArgs] };\n}\n\nasync function runPackageManagerCommand(\n projectRoot: string,\n command: { args: string[] },\n): Promise<void> {\n const invocation = resolvePnpmInstallInvocation(command.args);\n await runLockfileCommand(projectRoot, {\n binary: invocation.command,\n args: invocation.args,\n });\n}\n\nasync function runLockfileCommand(\n projectRoot: string,\n command: LockfileCommand,\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const child = spawn(command.binary, command.args, {\n cwd: projectRoot,\n env: process.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n bindStream(child.stdout, (chunk) => {\n stdout += chunk.toString();\n });\n bindStream(child.stderr, (chunk) => {\n stderr += chunk.toString();\n });\n\n child.on(\"error\", (cause) => {\n reject(\n new LockfileGenerationError(command.binary, {\n stdout,\n stderr,\n cause,\n }),\n );\n });\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n return;\n }\n reject(\n new LockfileGenerationError(command.binary, {\n code,\n stdout,\n stderr,\n }),\n );\n });\n });\n}\n\nfunction buildLockfileGenerationErrorMessage(\n binary: string,\n details: {\n code?: number | null;\n stdout: string;\n stderr: string;\n cause?: Error;\n },\n): string {\n if (details.cause) {\n const errnoError = details.cause as NodeJS.ErrnoException;\n const binaryName = path.basename(binary).toLowerCase();\n if (\n errnoError.code === \"ENOENT\" &&\n (binaryName === \"pnpm\" ||\n binaryName === \"pnpm.cmd\" ||\n binaryName === \"corepack\" ||\n binaryName === \"corepack.exe\")\n ) {\n return buildMissingDependencyToolingMessage();\n }\n return `Failed to start ${binary} for Dreamboard dependency reconciliation. ${details.cause.message}`;\n }\n\n const output = [details.stdout.trim(), details.stderr.trim()]\n .filter((chunk) => chunk.length > 0)\n .join(\"\\n\");\n\n return buildDependencyPreparationFailureMessage({\n exitCode: details.code,\n output,\n });\n}\n\nasync function pathExists(targetPath: string): Promise<boolean> {\n try {\n await lstat(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readJsonFile<T>(filePath: string): Promise<T | null> {\n try {\n return JSON.parse(await readFile(filePath, \"utf8\")) as T;\n } catch {\n return null;\n }\n}\n\nasync function writeJsonFile(filePath: string, value: unknown): Promise<void> {\n await writeFile(filePath, `${JSON.stringify(value, null, 2)}\\n`, \"utf8\");\n}\n\nfunction bindStream(\n stream: Readable | EventEmitter | null | undefined,\n onData: (chunk: Buffer | string) => void,\n): void {\n stream?.on(\"data\", onData);\n}\n","import { DEFAULT_WEB_BASE_URL } from \"../../constants.js\";\n\nexport const DEPENDENCY_SETUP_DOCS_PATH = \"/docs/reference/dependency-setup\";\nexport const DEPENDENCY_SETUP_DOCS_URL = `${DEFAULT_WEB_BASE_URL}${DEPENDENCY_SETUP_DOCS_PATH}`;\n\nexport function buildMissingDependencyToolingMessage(): string {\n return [\n \"Dreamboard needs dependency tooling to finish `dreamboard sync`.\",\n \"Use Node 24+ with Corepack enabled, then run `dreamboard sync` again.\",\n \"If Corepack is unavailable on this machine, install pnpm globally with `npm install -g pnpm`.\",\n `Help: ${DEPENDENCY_SETUP_DOCS_URL}`,\n ].join(\"\\n\");\n}\n\nexport function buildPackageLockConflictMessage(): string {\n return [\n \"Dreamboard manages workspace dependencies during `dreamboard sync`.\",\n \"This workspace has an npm lockfile that conflicts with Dreamboard-managed dependencies.\",\n \"Remove `package-lock.json` and run `dreamboard sync` again.\",\n `Help: ${DEPENDENCY_SETUP_DOCS_URL}`,\n ].join(\"\\n\");\n}\n\nexport function buildMissingGeneratedLockfileMessage(): string {\n return [\n \"Dreamboard could not finish preparing workspace dependencies during `dreamboard sync`.\",\n \"Diagnostic: `pnpm-lock.yaml` was not created.\",\n `Help: ${DEPENDENCY_SETUP_DOCS_URL}`,\n ].join(\"\\n\");\n}\n\nexport function buildDependencyPreparationFailureMessage(options: {\n output?: string;\n exitCode?: number | null;\n}): string {\n const details = options.output?.trim();\n return [\n `Dreamboard could not finish preparing workspace dependencies during \\`dreamboard sync\\`${options.exitCode != null ? ` (exit code ${options.exitCode})` : \"\"}.`,\n details ? `Diagnostic output:\\n${details}` : null,\n `Help: ${DEPENDENCY_SETUP_DOCS_URL}`,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { LocalMaintainerRegistryConfig } from \"../../types.js\";\nimport { resolveCliRepoRoot } from \"../../utils/repo-root.js\";\nimport {\n LOCAL_REGISTRY_URL,\n didLocalMaintainerSnapshotChange,\n getLocalMaintainerNpmrcContent,\n isLocalMaintainerRegistryEnabled,\n isLocalMaintainerRegistryUrl,\n shortHash,\n} from \"./local-maintainer-registry-shared.js\";\n\nexport {\n didLocalMaintainerSnapshotChange,\n getLocalMaintainerNpmrcContent,\n isLocalMaintainerRegistryEnabled,\n isLocalMaintainerRegistryUrl,\n};\n\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\n\nfunction getCliPackageRoot(): string {\n try {\n return path.join(\n resolveCliRepoRoot(import.meta.url),\n \"apps\",\n \"dreamboard-cli\",\n );\n } catch {\n return resolveInstalledCliPackageRoot(MODULE_DIR);\n }\n}\n\nfunction resolveInstalledCliPackageRoot(moduleDir: string): string {\n let current = moduleDir;\n while (true) {\n const packageJsonPath = path.join(current, \"package.json\");\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf8\"),\n ) as { name?: unknown };\n if (\n packageJson.name === \"@dreamboard-games/cli\" ||\n packageJson.name === \"dreamboard\" ||\n packageJson.name === \"dreamboard-cli\"\n ) {\n return current;\n }\n } catch {\n // Keep walking upward; a malformed parent package should not hide the\n // installed CLI package root.\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n return moduleDir;\n }\n current = parent;\n }\n}\n\nfunction getScriptInvocation(): {\n command: string;\n args: string[];\n attemptedCommand: string;\n cwd: string;\n} {\n const cliPackageRoot = getCliPackageRoot();\n const scriptPath = getLocalMaintainerScriptPath(cliPackageRoot);\n if (!existsSync(scriptPath)) {\n throw new Error(\n [\n \"Dreamboard local maintainer registry support is only available from a source checkout.\",\n `Expected helper script at ${scriptPath}.`,\n ].join(\" \"),\n );\n }\n\n const command = process.platform === \"win32\" ? \"pnpm.cmd\" : \"pnpm\";\n const args = [\"exec\", \"tsx\", scriptPath];\n return {\n command,\n args,\n attemptedCommand: `${command} ${args.join(\" \")}`,\n cwd: cliPackageRoot,\n };\n}\n\nfunction getLocalMaintainerScriptPath(cliPackageRoot: string): string {\n return path.join(cliPackageRoot, \"scripts\", \"local-maintainer-registry.ts\");\n}\n\nfunction isInstalledCliPackageRoot(cliPackageRoot: string): boolean {\n return cliPackageRoot.split(path.sep).includes(\"node_modules\");\n}\n\nfunction shouldSkipLocalMaintainerHelper(): boolean {\n const cliPackageRoot = getCliPackageRoot();\n const scriptPath = getLocalMaintainerScriptPath(cliPackageRoot);\n return !existsSync(scriptPath) && isInstalledCliPackageRoot(cliPackageRoot);\n}\n\nexport function buildInstalledCliLocalMaintainerSnapshot(\n packageJson: { dependencies?: Record<string, unknown> },\n registryUrl: string = LOCAL_REGISTRY_URL,\n): LocalMaintainerRegistryConfig | null {\n const sdkVersion = packageJson.dependencies?.[\"@dreamboard-games/sdk\"];\n if (typeof sdkVersion !== \"string\" || !sdkVersion.includes(\"-local.\")) {\n return null;\n }\n\n return {\n registryUrl,\n snapshotId: shortHash(sdkVersion),\n fingerprint: shortHash(sdkVersion),\n publishedAt: \"\",\n packages: {\n \"@dreamboard-games/sdk\": sdkVersion,\n },\n };\n}\n\nexport function readInstalledCliLocalMaintainerSnapshot(): LocalMaintainerRegistryConfig | null {\n const cliPackageRoot = getCliPackageRoot();\n if (!isInstalledCliPackageRoot(cliPackageRoot)) {\n return null;\n }\n\n const packageJsonPath = path.join(cliPackageRoot, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return null;\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n dependencies?: Record<string, unknown>;\n };\n return buildInstalledCliLocalMaintainerSnapshot(packageJson);\n}\n\nfunction buildScriptSetupError(options: {\n attemptedCommand: string;\n message: string;\n stderr?: string;\n}): Error {\n return new Error(\n [\n \"Dreamboard local maintainer registry support requires the source-checkout CLI tooling.\",\n options.message,\n `Attempted command: ${options.attemptedCommand}`,\n options.stderr?.trim() ? `stderr:\\n${options.stderr.trim()}` : null,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n );\n}\n\nfunction parseJsonPayload<T>(output: string): T {\n const payload = output\n .trim()\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .reverse()\n .find(\n (line) => line === \"null\" || line.startsWith(\"{\") || line.startsWith(\"[\"),\n );\n\n if (!payload) {\n throw new Error(\"completed without returning a JSON payload\");\n }\n\n return JSON.parse(payload) as T;\n}\n\nasync function runLocalMaintainerScript<T>(args: string[]): Promise<T> {\n const invocation = getScriptInvocation();\n\n return new Promise<T>((resolve, reject) => {\n const child = spawn(invocation.command, [...invocation.args, ...args], {\n cwd: invocation.cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: process.env,\n });\n let stdout = \"\";\n let stderr = \"\";\n\n child.stdout.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.on(\"error\", (error) => {\n const errnoError = error as NodeJS.ErrnoException;\n if (errnoError.code === \"ENOENT\") {\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message:\n \"`pnpm` was not found on PATH, so the source-checkout local maintainer helper could not run.\",\n }),\n );\n return;\n }\n reject(error);\n });\n child.on(\"close\", (code) => {\n if (code !== 0) {\n const missingTsx =\n stderr.includes('Command \"tsx\" not found') ||\n stderr.includes(\"tsx: command not found\") ||\n stderr.includes(\"tsx: not found\");\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message: missingTsx\n ? \"`tsx` is not available for the source-checkout CLI package.\"\n : \"The source-checkout local maintainer helper failed.\",\n stderr,\n }),\n );\n return;\n }\n\n const trimmedStdout = stdout.trim();\n if (!trimmedStdout) {\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message:\n \"The source-checkout local maintainer helper completed without returning JSON.\",\n stderr,\n }),\n );\n return;\n }\n\n try {\n resolve(parseJsonPayload<T>(trimmedStdout));\n } catch (error) {\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message: `Failed to parse JSON from the source-checkout local maintainer helper: ${\n error instanceof Error ? error.message : String(error)\n }`,\n stderr: [stderr.trim(), trimmedStdout].filter(Boolean).join(\"\\n\"),\n }),\n );\n }\n });\n });\n}\n\nexport async function ensureLocalMaintainerSnapshot(\n apiBaseUrl: string,\n): Promise<LocalMaintainerRegistryConfig | null> {\n if (!isLocalMaintainerRegistryEnabled(apiBaseUrl)) {\n return null;\n }\n if (shouldSkipLocalMaintainerHelper()) {\n return readInstalledCliLocalMaintainerSnapshot();\n }\n\n return runLocalMaintainerScript<LocalMaintainerRegistryConfig | null>([\n \"ensure-snapshot\",\n \"--api-base-url\",\n apiBaseUrl,\n ]);\n}\n\nexport async function readWorkspaceLocalMaintainerRegistry(\n projectRoot: string,\n fallbackRegistryUrl: string = LOCAL_REGISTRY_URL,\n): Promise<LocalMaintainerRegistryConfig | null> {\n if (shouldSkipLocalMaintainerHelper()) {\n return null;\n }\n return runLocalMaintainerScript<LocalMaintainerRegistryConfig | null>([\n \"read-workspace\",\n \"--project-root\",\n projectRoot,\n \"--fallback-registry-url\",\n fallbackRegistryUrl,\n ]);\n}\n","import path from \"node:path\";\nimport type { ProjectConfig } from \"../../types.js\";\nimport { readJsonFile, readTextFileIfExists } from \"../../utils/fs.js\";\n\ntype PackageJsonWithDeps = {\n packageManager?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n pnpm?: {\n overrides?: Record<string, unknown>;\n [key: string]: unknown;\n };\n};\n\nexport type SourceDependencyProfile = {\n kind: \"npm-registry\";\n packageManager?: string;\n dreamboardRegistryUrl?: string;\n localSnapshotId?: string;\n packages: Record<string, string>;\n};\n\ntype DependencyProblem = {\n location: string;\n packageName: string;\n specifier: string;\n};\n\ntype LegacyDependencyProblem = {\n location: string;\n packageName: string;\n};\n\nconst DEPENDENCY_FIELDS = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n] as const;\n\nconst UNPORTABLE_SPECIFIER_PATTERN = /^(file|link|portal|workspace):/;\n\nexport async function buildSourceDependencyProfile(options: {\n projectRoot: string;\n projectConfig?: ProjectConfig;\n}): Promise<SourceDependencyProfile> {\n const packageJson = await readProjectPackageJson(options.projectRoot);\n const packages = collectDreamboardPackageSpecifiers(packageJson);\n return {\n kind: \"npm-registry\",\n packageManager: packageJson.packageManager,\n dreamboardRegistryUrl:\n (await readDreamboardRegistryFromNpmrc(options.projectRoot)) ??\n options.projectConfig?.localMaintainerRegistry?.registryUrl,\n localSnapshotId: options.projectConfig?.localMaintainerRegistry?.snapshotId,\n packages,\n };\n}\n\nexport async function assertCompilerPortableDependencies(options: {\n projectRoot: string;\n projectConfig?: ProjectConfig;\n}): Promise<SourceDependencyProfile> {\n const packageJson = await readProjectPackageJson(options.projectRoot);\n const legacyProblems = collectLegacyDreamboardSpecifiers(packageJson);\n if (legacyProblems.length > 0) {\n throwLegacyDreamboardPackageError(legacyProblems);\n }\n\n const problems = collectUnportableDreamboardSpecifiers(packageJson);\n if (problems.length > 0) {\n const details = problems\n .map(\n (problem) =>\n `${problem.location} ${problem.packageName} -> ${problem.specifier}`,\n )\n .join(\"; \");\n throw new Error(\n [\n \"Compiler-bound workspaces must install Dreamboard packages from a registry.\",\n `Found unportable Dreamboard dependency specifier(s): ${details}.`,\n \"Run `dreamboard sync` from a workspace that uses registry-pinned @dreamboard-games/* and dreamboard versions before compiling.\",\n ].join(\" \"),\n );\n }\n\n const profile = await buildSourceDependencyProfile(options);\n const hasLocalSnapshotPackage = Object.values(profile.packages).some(\n (value) => value.includes(\"-local.\"),\n );\n if (hasLocalSnapshotPackage && !profile.dreamboardRegistryUrl) {\n throw new Error(\n \"This workspace references local Dreamboard snapshot versions but has no @dreamboard registry configured. Run `dreamboard sync --env local` to refresh .npmrc before compiling.\",\n );\n }\n\n return profile;\n}\n\nexport async function assertReleaseEnvironmentPortableDependencies(options: {\n projectRoot: string;\n projectConfig?: ProjectConfig;\n environment: string;\n}): Promise<SourceDependencyProfile> {\n const packageJson = await readProjectPackageJson(options.projectRoot);\n const legacyProblems = collectLegacyDreamboardSpecifiers(packageJson);\n if (legacyProblems.length > 0) {\n throwLegacyDreamboardPackageError(legacyProblems);\n }\n\n const profile = await buildSourceDependencyProfile(options);\n if (!isReleaseEnvironment(options.environment)) {\n return profile;\n }\n\n const localPackages = Object.entries(profile.packages).filter(([, version]) =>\n version.includes(\"-local.\"),\n );\n const localRegistryUrl = isLocalRegistryUrl(profile.dreamboardRegistryUrl)\n ? profile.dreamboardRegistryUrl\n : undefined;\n\n if (localPackages.length === 0 && !localRegistryUrl) {\n return profile;\n }\n\n const packageDetails = localPackages\n .map(([name, version]) => `${name}@${version}`)\n .join(\", \");\n const registryDetails = localRegistryUrl\n ? `local registry ${localRegistryUrl}`\n : null;\n const details = [packageDetails || null, registryDetails]\n .filter(Boolean)\n .join(\"; \");\n\n throw new Error(\n [\n `The ${options.environment} environment does not support local Dreamboard package snapshots.`,\n `Found ${details}.`,\n \"Publish a public alpha package, repin the workspace to that exact version, and rerun the command.\",\n ].join(\" \"),\n );\n}\n\nasync function readProjectPackageJson(\n projectRoot: string,\n): Promise<PackageJsonWithDeps> {\n return readJsonFile<PackageJsonWithDeps>(\n path.join(projectRoot, \"package.json\"),\n );\n}\n\nfunction collectDreamboardPackageSpecifiers(\n packageJson: PackageJsonWithDeps,\n): Record<string, string> {\n const packages: Record<string, string> = {};\n for (const field of DEPENDENCY_FIELDS) {\n const dependencies = packageJson[field];\n if (!dependencies) continue;\n for (const [packageName, specifier] of Object.entries(dependencies)) {\n if (isPortableDreamboardPackage(packageName)) {\n packages[packageName] = specifier;\n }\n }\n }\n\n const overrides = packageJson.pnpm?.overrides;\n if (overrides) {\n for (const [packageName, specifier] of Object.entries(overrides)) {\n if (\n isPortableDreamboardPackage(packageName) &&\n typeof specifier === \"string\" &&\n packages[packageName] === undefined\n ) {\n packages[packageName] = specifier;\n }\n }\n }\n return packages;\n}\n\nfunction collectUnportableDreamboardSpecifiers(\n packageJson: PackageJsonWithDeps,\n): DependencyProblem[] {\n const problems: DependencyProblem[] = [];\n for (const field of DEPENDENCY_FIELDS) {\n const dependencies = packageJson[field];\n if (!dependencies) continue;\n for (const [packageName, specifier] of Object.entries(dependencies)) {\n if (\n isPortableDreamboardPackage(packageName) &&\n UNPORTABLE_SPECIFIER_PATTERN.test(specifier)\n ) {\n problems.push({ location: field, packageName, specifier });\n }\n }\n }\n\n const overrides = packageJson.pnpm?.overrides;\n if (overrides) {\n for (const [packageName, specifier] of Object.entries(overrides)) {\n if (\n isPortableDreamboardPackage(packageName) &&\n typeof specifier === \"string\" &&\n UNPORTABLE_SPECIFIER_PATTERN.test(specifier)\n ) {\n problems.push({\n location: \"pnpm.overrides\",\n packageName,\n specifier,\n });\n }\n }\n }\n return problems;\n}\n\nfunction collectLegacyDreamboardSpecifiers(\n packageJson: PackageJsonWithDeps,\n): LegacyDependencyProblem[] {\n const problems: LegacyDependencyProblem[] = [];\n for (const field of DEPENDENCY_FIELDS) {\n const dependencies = packageJson[field];\n if (!dependencies) continue;\n for (const packageName of Object.keys(dependencies)) {\n if (isLegacyDreamboardPackage(packageName)) {\n problems.push({ location: field, packageName });\n }\n }\n }\n\n const overrides = packageJson.pnpm?.overrides;\n if (overrides) {\n for (const packageName of Object.keys(overrides)) {\n if (isLegacyDreamboardPackage(packageName)) {\n problems.push({ location: \"pnpm.overrides\", packageName });\n }\n }\n }\n return problems;\n}\n\nfunction throwLegacyDreamboardPackageError(\n problems: LegacyDependencyProblem[],\n): never {\n const details = problems\n .map((problem) => `${problem.location} ${problem.packageName}`)\n .join(\"; \");\n throw new Error(\n [\n \"Legacy @dreamboard/* package dependencies are no longer supported in compiler-bound workspaces.\",\n `Found ${details}.`,\n \"Repin to the public @dreamboard-games/* packages and rerun the command.\",\n ].join(\" \"),\n );\n}\n\nfunction isPortableDreamboardPackage(packageName: string): boolean {\n return (\n packageName === \"dreamboard\" ||\n packageName.startsWith(\"@dreamboard-games/\")\n );\n}\n\nfunction isLegacyDreamboardPackage(packageName: string): boolean {\n return packageName.startsWith(\"@dreamboard/\");\n}\n\nfunction isReleaseEnvironment(environment: string): boolean {\n return environment === \"staging\" || environment === \"prod\";\n}\n\nfunction isLocalRegistryUrl(rawUrl: string | undefined): boolean {\n if (!rawUrl) return false;\n try {\n const url = new URL(rawUrl);\n return (\n url.hostname === \"localhost\" ||\n url.hostname === \"127.0.0.1\" ||\n url.hostname === \"::1\" ||\n url.hostname.endsWith(\".local\")\n );\n } catch {\n return /localhost|127\\.0\\.0\\.1|\\.local\\b/.test(rawUrl);\n }\n}\n\nasync function readDreamboardRegistryFromNpmrc(\n projectRoot: string,\n): Promise<string | undefined> {\n const npmrc = await readTextFileIfExists(path.join(projectRoot, \".npmrc\"));\n if (!npmrc) return undefined;\n for (const line of npmrc.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"@dreamboard-games:registry=\")) continue;\n return (\n trimmed.slice(\"@dreamboard-games:registry=\".length).trim() || undefined\n );\n }\n return undefined;\n}\n","import { MANIFEST_TYPECHECK_CONFIG_FILE } from \"../../constants.js\";\nimport { spawn } from \"node:child_process\";\nimport { lstat } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nexport type LocalTypecheckResult = {\n success: boolean;\n output: string;\n skipped?: boolean;\n};\n\ntype TypecheckRunner = {\n command: string;\n argsPrefix: string[];\n};\n\nconst TYPESCRIPT_BIN_PATH_SEGMENTS = [\n \"node_modules\",\n \"typescript\",\n \"bin\",\n \"tsc\",\n];\n\n// TypeScript shipped with the CLI package itself; used as a fallback when the\n// user's workspace does not provide its own `typescript` install.\nconst CLI_PACKAGE_TYPESCRIPT_CLI = resolveCliPackageTypescriptCli();\n\nfunction resolveCliPackageTypescriptCli(): string | null {\n try {\n const require = createRequire(import.meta.url);\n return require.resolve(\"typescript/bin/tsc\");\n } catch {\n return null;\n }\n}\n\nfunction getProjectNodeModules(projectRoot: string): string {\n return path.join(projectRoot, \"node_modules\");\n}\n\nfunction getProjectTypescriptCli(projectRoot: string): string {\n return path.join(projectRoot, ...TYPESCRIPT_BIN_PATH_SEGMENTS);\n}\n\nasync function pathExists(targetPath: string): Promise<boolean> {\n try {\n await lstat(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function ensureTypecheckDependencies(\n projectRoot: string,\n): Promise<string | null> {\n if (await pathExists(getProjectNodeModules(projectRoot))) {\n return null;\n }\n\n return `Skipping local typecheck: workspace dependencies are not installed at ${getProjectNodeModules(projectRoot)}. Run \\`dreamboard sync\\` to reconcile workspace dependencies first.`;\n}\n\nasync function resolveTypecheckRunner(\n projectRoot: string,\n): Promise<TypecheckRunner | null> {\n const localTypescriptCli = getProjectTypescriptCli(projectRoot);\n if (await pathExists(localTypescriptCli)) {\n return {\n command: process.execPath,\n argsPrefix: [localTypescriptCli],\n };\n }\n\n if (\n CLI_PACKAGE_TYPESCRIPT_CLI &&\n (await pathExists(CLI_PACKAGE_TYPESCRIPT_CLI))\n ) {\n return {\n command: process.execPath,\n argsPrefix: [CLI_PACKAGE_TYPESCRIPT_CLI],\n };\n }\n\n const globalTscAvailable = await new Promise<boolean>((resolve) => {\n const child = spawn(\"tsc\", [\"--version\"], {\n env: process.env,\n stdio: \"ignore\",\n });\n\n child.on(\"error\", () => {\n resolve(false);\n });\n child.on(\"close\", (code) => {\n resolve(code === 0);\n });\n });\n\n if (!globalTscAvailable) {\n return null;\n }\n\n return {\n command: \"tsc\",\n argsPrefix: [],\n };\n}\n\nasync function runTypecheckProject(\n runner: TypecheckRunner,\n projectRoot: string,\n projectPath: string,\n): Promise<LocalTypecheckResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(\n runner.command,\n [...runner.argsPrefix, \"--noEmit\", \"-p\", projectPath],\n {\n cwd: projectRoot,\n env: process.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n\n let stdout = \"\";\n let stderr = \"\";\n\n child.stdout.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.on(\"error\", (error) => {\n reject(new Error(`Failed to start local typecheck. ${error.message}`));\n });\n child.on(\"close\", (code) => {\n const output = [stdout, stderr].filter(Boolean).join(\"\\n\").trim();\n resolve({\n success: code === 0,\n output,\n });\n });\n });\n}\n\nexport async function runLocalTypecheck(\n projectRoot: string,\n): Promise<LocalTypecheckResult> {\n const dependencySkipReason = await ensureTypecheckDependencies(projectRoot);\n if (dependencySkipReason) {\n return {\n success: true,\n skipped: true,\n output: dependencySkipReason,\n };\n }\n\n const runner = await resolveTypecheckRunner(projectRoot);\n if (!runner) {\n return {\n success: true,\n skipped: true,\n output:\n \"Skipping local typecheck: TypeScript CLI was not found in workspace dependencies or on PATH.\",\n };\n }\n\n // The three projects are independent (no cross-project references), so\n // checking them in parallel roughly halves wall-clock time without changing\n // correctness. The slowest project (typically `ui/tsconfig.json`) bounds the\n // total cost.\n const results = await Promise.all(\n [\n MANIFEST_TYPECHECK_CONFIG_FILE,\n \"app/tsconfig.json\",\n \"ui/tsconfig.json\",\n ].map((projectPath) =>\n runTypecheckProject(runner, projectRoot, projectPath),\n ),\n );\n\n const firstFailure = results.find((result) => !result.success);\n if (firstFailure) {\n return firstFailure;\n }\n\n return {\n success: true,\n output: \"\",\n };\n}\n","import type { Project } from \"@dreamboard-games/api-client\";\nimport { updateProjectState } from \"../../config/project-config.js\";\nimport type { ProjectConfig, ResolvedConfig } from \"../../types.js\";\nimport {\n ensureProjectSdk,\n loadRemoteProjectIdentity,\n type RemoteProjectIdentity,\n} from \"../api/index.js\";\n\nexport type ResolvedRemoteProject = {\n identity: RemoteProjectIdentity;\n project: Project;\n projectConfig: ProjectConfig;\n};\n\nexport async function resolveRemoteProject(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n config: Pick<ResolvedConfig, \"apiBaseUrl\" | \"webBaseUrl\">;\n updateAlias?: boolean;\n}): Promise<ResolvedRemoteProject> {\n const identity = await loadRemoteProjectIdentity();\n const project = await ensureProjectSdk({\n projectId: options.projectConfig.projectId,\n slug: options.projectConfig.slug,\n updateAlias: options.updateAlias,\n });\n const nextProjectConfig: ProjectConfig = {\n ...options.projectConfig,\n slug: project.slug,\n deploymentId: identity.deploymentId,\n ownerScopeId: identity.ownerScopeId,\n bindingKey: identity.bindingKey,\n remoteHeadDigest: project.head?.revisionDigest,\n apiBaseUrl: options.config.apiBaseUrl,\n webBaseUrl: options.config.webBaseUrl,\n };\n\n await updateProjectState(options.projectRoot, nextProjectConfig);\n\n return {\n identity,\n project,\n projectConfig: nextProjectConfig,\n };\n}\n","import type { CompiledResult } from \"@dreamboard-games/api-client\";\nimport type { ProjectConfig } from \"../types.js\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { resolveProjectContext } from \"../config/resolve.js\";\nimport { updateProjectState } from \"../config/project-config.js\";\nimport { parseCompileCommandArgs } from \"../flags.js\";\nimport { getLocalDiff } from \"../services/project/local-files.js\";\nimport { assertCliStaticScaffoldComplete } from \"../services/project/static-scaffold.js\";\nimport {\n assertCompilerPortableDependencies,\n assertReleaseEnvironmentPortableDependencies,\n} from \"../services/project/dependency-portability.js\";\nimport { runLocalTypecheck } from \"../services/project/local-typecheck.js\";\nimport {\n findProjectCompiledResultsForRevision,\n queueProjectRevisionCompileSdk,\n waitForCompiledResultJobSdk,\n} from \"../services/api/index.js\";\nimport {\n getProjectAuthoringState,\n getProjectPendingAuthoringSync,\n setLatestCompileAttempt,\n} from \"../services/project/project-state.js\";\nimport { formatCliError } from \"../utils/errors.js\";\nimport { resolveRemoteProject } from \"../services/project/remote-project.js\";\n\nfunction formatDiagnosticsSummary(\n diagnostics: Array<{ message?: string }> | null | undefined,\n): string | undefined {\n const firstMessage = diagnostics?.find(\n (diagnostic) => diagnostic.message,\n )?.message;\n return firstMessage?.trim() || undefined;\n}\n\nfunction formatCompileJobProgressMessage(job: {\n status: string;\n phase?: string;\n queuePosition?: number;\n message?: string;\n}): string {\n const phase = job.phase ? ` [${job.phase}]` : \"\";\n const detail = job.message ? ` ${job.message}` : \"\";\n if (job.status === \"PENDING\") {\n const queue =\n typeof job.queuePosition === \"number\"\n ? ` (queue ${job.queuePosition + 1})`\n : \"\";\n return `Compile queued${queue}${phase}${detail}`.trim();\n }\n if (job.status === \"RUNNING\") {\n return `Compile running${phase}${detail}`.trim();\n }\n if (job.status === \"FAILED\") {\n return `Compile failed${phase}${detail}`.trim();\n }\n return `Compile ${job.status.toLowerCase()}${phase}${detail}`.trim();\n}\n\nfunction formatFailedCompileJobSummary(job: {\n phase?: string;\n message?: string | null;\n errorMessage?: string | null;\n}): string {\n return formatCompileJobProgressMessage({\n status: \"FAILED\",\n phase: job.phase,\n message: job.errorMessage ?? job.message ?? undefined,\n });\n}\n\nfunction formatFailedCompileJobWithCompiledResultMessage(options: {\n compiledResultId: string;\n job: {\n phase?: string;\n message?: string | null;\n errorMessage?: string | null;\n };\n}): string {\n return `${formatFailedCompileJobSummary(options.job)}. The backend created compiled result ${options.compiledResultId}, but the compile job did not complete cleanly. Run 'dreamboard compile' again after fixing the backend/compiler issue.`;\n}\n\nfunction formatRemoteCompileCommandError(options: {\n message: string;\n jobId?: string;\n}): string {\n const detail = options.message.trim();\n const hasActionableTerminalContext =\n /^Compile\\s+(failed|completed|cancelled|interrupted)\\b/i.test(detail);\n if (options.jobId) {\n if (hasActionableTerminalContext) {\n return `Remote compile job ${options.jobId} could not be completed. ${detail}`;\n }\n return `Remote compile job ${options.jobId} could not be completed. ${detail} Check backend health and try 'dreamboard compile' again.`;\n }\n return `Remote compile could not be started. ${detail} Check backend health and try 'dreamboard compile' again.`;\n}\n\nasync function persistFailedCompileAttempt(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n revisionDigest: string;\n authoringStateId?: string;\n diagnosticsSummary: string;\n jobId?: string;\n}): Promise<void> {\n const nextProjectConfig = setLatestCompileAttempt(options.projectConfig, {\n resultId: undefined,\n jobId: options.jobId,\n revisionDigest: options.revisionDigest,\n authoringStateId: options.authoringStateId ?? options.revisionDigest,\n status: \"failed\",\n diagnosticsSummary: options.diagnosticsSummary,\n });\n await updateProjectState(options.projectRoot, nextProjectConfig);\n}\n\nexport default defineCommand({\n meta: {\n name: \"compile\",\n description: \"Compile the current remote authoring head\",\n },\n args: {\n debug: {\n type: \"boolean\",\n description: \"Print additional compile progress context\",\n default: false,\n },\n \"skip-local-check\": {\n type: \"boolean\",\n description: \"Skip the best-effort local typecheck before compiling\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseCompileCommandArgs(args);\n const { projectRoot, projectConfig, config } =\n await resolveProjectContext(parsedArgs);\n let nextProjectConfig = projectConfig;\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig: nextProjectConfig,\n environment: config.environment,\n });\n await assertCompilerPortableDependencies({\n projectRoot,\n projectConfig: nextProjectConfig,\n });\n\n const diff = await getLocalDiff(projectRoot);\n await assertCliStaticScaffoldComplete(projectRoot, diff.deleted);\n if (\n diff.modified.length > 0 ||\n diff.added.length > 0 ||\n diff.deleted.length > 0\n ) {\n throw new Error(\n \"Local authored changes are not synced yet. Run 'dreamboard sync' before compiling.\",\n );\n }\n\n const remoteProject = await resolveRemoteProject({\n projectRoot,\n projectConfig: nextProjectConfig,\n config,\n });\n nextProjectConfig = remoteProject.projectConfig;\n\n const localAuthoring = getProjectAuthoringState(nextProjectConfig);\n const pendingSync = getProjectPendingAuthoringSync(nextProjectConfig);\n if (pendingSync) {\n if (pendingSync.phase === \"authoring_state_created\") {\n throw new Error(\n \"Previous sync reached the remote authored head, but local scaffold finalization did not complete. Run 'dreamboard sync' again before compiling.\",\n );\n }\n throw new Error(\n \"Previous sync uploaded source changes but did not finish creating the authored head. Run 'dreamboard sync' again before compiling.\",\n );\n }\n const localRevisionDigest =\n localAuthoring.revisionDigest ?? nextProjectConfig.remoteHeadDigest;\n if (!localRevisionDigest) {\n throw new Error(\n \"This workspace does not know its authored revision yet. Run 'dreamboard sync' first.\",\n );\n }\n\n const remoteRevisionDigest = remoteProject.project.head?.revisionDigest;\n if (!remoteRevisionDigest) {\n throw new Error(\"Remote has no authored project revision to compile yet.\");\n }\n if (remoteRevisionDigest !== localRevisionDigest) {\n throw new Error(\n `Remote project head is ${remoteRevisionDigest} but this workspace is based on ${localRevisionDigest}. Run 'dreamboard pull' before compiling.`,\n );\n }\n\n if (!parsedArgs[\"skip-local-check\"]) {\n consola.start(\"Running local typecheck...\");\n const typecheckResult = await runLocalTypecheck(projectRoot);\n if (typecheckResult.skipped) {\n if (typecheckResult.output) {\n consola.warn(typecheckResult.output);\n }\n } else if (!typecheckResult.success) {\n if (typecheckResult.output) {\n consola.error(typecheckResult.output);\n }\n throw new Error(\n \"Local typecheck failed. Fix the diagnostics or re-run with --skip-local-check.\",\n );\n } else {\n consola.success(\"Local typecheck passed.\");\n }\n }\n\n const existingCompiledResult = (\n await findProjectCompiledResultsForRevision({\n projectId: nextProjectConfig.projectId,\n revisionDigest: localRevisionDigest,\n })\n ).find((result) => result.success);\n if (existingCompiledResult) {\n nextProjectConfig = setLatestCompileAttempt(nextProjectConfig, {\n resultId: existingCompiledResult.id,\n jobId: undefined,\n revisionDigest: localRevisionDigest,\n authoringStateId:\n existingCompiledResult.authoringStateId ?? localRevisionDigest,\n status: \"successful\",\n diagnosticsSummary: undefined,\n });\n await updateProjectState(projectRoot, nextProjectConfig);\n consola.success(\n `Reusing compiled ${existingCompiledResult.id} for authored state ${existingCompiledResult.authoringStateId}.`,\n );\n return;\n }\n\n let compileJobId: string | undefined;\n let compileJobStatus: string | undefined;\n let compileJobPhase: string | undefined;\n let compileJobMessage: string | null | undefined;\n let compileJobErrorMessage: string | null | undefined;\n let compiledResult: CompiledResult;\n try {\n const compileJob = await queueProjectRevisionCompileSdk({\n projectId: nextProjectConfig.projectId,\n revisionDigest: localRevisionDigest,\n });\n compileJobId = compileJob.jobId;\n if (!compileJobId) {\n throw new Error(\"Failed to create compile job: missing jobId.\");\n }\n\n ({\n job: {\n status: compileJobStatus,\n phase: compileJobPhase,\n message: compileJobMessage,\n errorMessage: compileJobErrorMessage,\n },\n compiledResult,\n } = await waitForCompiledResultJobSdk({\n projectId: nextProjectConfig.projectId,\n jobId: compileJobId,\n onProgress: (job) => {\n const message = formatCompileJobProgressMessage(job);\n if (parsedArgs.debug) {\n consola.info(message);\n } else {\n consola.start(message);\n }\n },\n }));\n } catch (error) {\n const message = formatCliError(error);\n if (compileJobId) {\n await persistFailedCompileAttempt({\n projectRoot,\n projectConfig: nextProjectConfig,\n revisionDigest: localRevisionDigest,\n authoringStateId: localAuthoring.authoringStateId,\n diagnosticsSummary: message,\n jobId: compileJobId,\n });\n }\n throw new Error(\n formatRemoteCompileCommandError({\n message,\n jobId: compileJobId,\n }),\n );\n }\n\n const failedJobProducedCompiledResult =\n compileJobStatus === \"FAILED\" && compiledResult.success;\n const failedJobWithCompiledResultSummary = failedJobProducedCompiledResult\n ? formatFailedCompileJobSummary({\n phase: compileJobPhase,\n message: compileJobMessage,\n errorMessage: compileJobErrorMessage,\n })\n : undefined;\n\n nextProjectConfig = setLatestCompileAttempt(nextProjectConfig, {\n resultId: compiledResult.id,\n jobId: compileJobId,\n revisionDigest: localRevisionDigest,\n authoringStateId: compiledResult.authoringStateId ?? localRevisionDigest,\n status:\n compiledResult.success && !failedJobProducedCompiledResult\n ? \"successful\"\n : \"failed\",\n diagnosticsSummary:\n failedJobWithCompiledResultSummary ??\n formatDiagnosticsSummary(compiledResult.diagnostics),\n });\n await updateProjectState(projectRoot, nextProjectConfig);\n\n if (failedJobProducedCompiledResult) {\n throw new Error(\n formatFailedCompileJobWithCompiledResultMessage({\n compiledResultId: compiledResult.id,\n job: {\n phase: compileJobPhase,\n message: compileJobMessage,\n errorMessage: compileJobErrorMessage,\n },\n }),\n );\n }\n\n if (!compiledResult.success) {\n for (const diagnostic of compiledResult.diagnostics ?? []) {\n if (diagnostic.message) {\n consola.error(diagnostic.message);\n }\n }\n throw new Error(\n \"Remote compile failed, but your authored state is synced. Fix the diagnostics and run 'dreamboard compile' again.\",\n );\n }\n\n consola.success(\n `Compiled ${compiledResult.id} for revision ${localRevisionDigest}.`,\n );\n },\n});\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport type { GlobalConfig, Environment } from \"../types.js\";\nimport { IS_PUBLISHED_BUILD } from \"../build-target.js\";\nimport { resolveConfig, valueOrUndefined } from \"../config/resolve.js\";\nimport { parseConfigCommandArgs } from \"../flags.js\";\nimport {\n getGlobalAuthPath,\n getGlobalConfigPath,\n loadGlobalConfig,\n saveGlobalConfig,\n} from \"../config/global-config.js\";\nimport {\n findProjectRoot,\n loadProjectConfig,\n updateProjectState,\n} from \"../config/project-config.js\";\nimport {\n getStoredSession,\n setAccessOnlySession,\n} from \"../config/credential-store.js\";\n\nexport default defineCommand({\n meta: {\n name: \"config\",\n description: IS_PUBLISHED_BUILD\n ? \"View CLI configuration\"\n : \"View or update CLI configuration\",\n },\n args: {\n action: {\n type: \"positional\",\n description: IS_PUBLISHED_BUILD ? \"Action: show\" : \"Action: show | set\",\n default: \"show\",\n },\n ...(IS_PUBLISHED_BUILD\n ? {}\n : {\n env: {\n type: \"string\" as const,\n description: \"Environment: local | staging | prod\",\n },\n token: {\n type: \"string\" as const,\n description: \"Auth token (Dreamboard bearer JWT)\",\n },\n scope: {\n type: \"string\" as const,\n description: \"Config scope: global | workspace\",\n default: \"global\",\n },\n }),\n },\n async run({ args }) {\n const parsedArgs = parseConfigCommandArgs(args);\n const action = parsedArgs.action;\n const globalConfig = await loadGlobalConfig();\n\n if (action === \"show\") {\n const storedSession = await getStoredSession();\n const projectRoot = await findProjectRoot(process.cwd());\n const projectConfig = projectRoot\n ? await loadProjectConfig(projectRoot).catch(() => undefined)\n : undefined;\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n projectConfig,\n storedSession,\n );\n console.log(\n JSON.stringify(\n IS_PUBLISHED_BUILD\n ? {\n configPath: getGlobalConfigPath(),\n authPath: getGlobalAuthPath(),\n authenticated: Boolean(config.authToken),\n refreshableSession: Boolean(config.refreshToken),\n }\n : {\n configPath: getGlobalConfigPath(),\n authPath: getGlobalAuthPath(),\n environment:\n parsedArgs.env ||\n projectConfig?.environment ||\n globalConfig.environment ||\n \"staging\",\n workspaceConfigPath: projectRoot\n ? `${projectRoot}/.dreamboard/project.json`\n : undefined,\n workspaceEnvironment: projectConfig?.environment,\n apiBaseUrl: config.apiBaseUrl,\n webBaseUrl: config.webBaseUrl,\n authenticated: Boolean(config.authToken),\n refreshableSession: Boolean(config.refreshToken),\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n if (action === \"set\") {\n if (IS_PUBLISHED_BUILD) {\n throw new Error(\n \"The published Dreamboard CLI does not support config overrides. Use `dreamboard login` to authenticate.\",\n );\n }\n if (parsedArgs.scope === \"workspace\") {\n const projectRoot = await findProjectRoot(process.cwd());\n if (!projectRoot) {\n throw new Error(\n \"Workspace-scoped config requires a Dreamboard project (.dreamboard/project.json).\",\n );\n }\n const projectConfig = await loadProjectConfig(projectRoot);\n await updateProjectState(projectRoot, {\n ...projectConfig,\n ...(parsedArgs.env\n ? { environment: parsedArgs.env as Environment }\n : {}),\n });\n } else {\n const updated: GlobalConfig = { ...globalConfig };\n if (parsedArgs.env) updated.environment = parsedArgs.env as Environment;\n await saveGlobalConfig(updated);\n }\n\n const overrideToken = valueOrUndefined(parsedArgs.token);\n if (overrideToken) {\n // `config set --token` is an access-only override. Never write a\n // refresh token through this path - that belongs to\n // `dreamboard login`.\n await setAccessOnlySession(overrideToken);\n }\n consola.success(\"Config updated.\");\n return;\n }\n\n throw new Error(\n IS_PUBLISHED_BUILD\n ? \"Usage: dreamboard config show\"\n : \"Usage: dreamboard config show | dreamboard config set --env <local|staging|prod>\",\n );\n },\n});\n","import path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { defineCommand } from \"citty\";\nimport {\n getApiVersion,\n getSessionSnapshot,\n type CompiledResult,\n type EnsureDevCompileRequest,\n type EnsureDevCompileResponse,\n} from \"@dreamboard-games/api-client\";\nimport type { GameTopologyManifest as ApiGameTopologyManifest } from \"@dreamboard-games/api-client/types.gen\";\nimport {\n materializeSourceChangeOperations,\n mapUpsertBlobContentsByContentHash,\n} from \"@dreamboard-games/api-client/source-revisions\";\nimport consola from \"consola\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { PROJECT_DIR_NAME } from \"../constants.js\";\nimport { configureClient, resolveProjectContext } from \"../config/resolve.js\";\nimport { resolveLocalHarnessAccessToken } from \"../config/local-harness-auth.js\";\nimport { parseDevCommandArgs, parsePlayerCountFlags } from \"../flags.js\";\nimport type { ProjectConfig } from \"../types.js\";\nimport { ensureDir, readTextFile, writeJsonFile } from \"../utils/fs.js\";\nimport {\n createPersistedDevSession,\n parseDevSeed,\n} from \"../utils/dev-session.js\";\nimport { resolvePlayerCount } from \"../utils/player-count.js\";\nimport { isStaleContractArtifactError } from \"../utils/errors.js\";\nimport { openBrowser } from \"../auth/auth-server.js\";\nimport { startDreamboardDevServer } from \"../dev-host/start-dev-server.js\";\nimport {\n createSessionFromScenario,\n generateReducerNativeArtifacts,\n} from \"../services/testing/reducer-native-test-harness.js\";\nimport { resolveSetupProfileSelectionForSession } from \"../services/workflows/resolve-setup-profile.js\";\nimport {\n collectLocalFiles,\n loadManifest,\n loadRule,\n} from \"../services/project/local-files.js\";\nimport {\n createProjectSessionSdk,\n ensureProjectDevCompileSdk,\n uploadProjectSourceBlobsSdk,\n waitForCompiledResultJobSdk,\n} from \"../services/api/index.js\";\nimport { resolveRemoteProject } from \"../services/project/remote-project.js\";\nimport { runLocalTypecheck } from \"../services/project/local-typecheck.js\";\nimport {\n didLocalMaintainerSnapshotChange,\n ensureLocalMaintainerSnapshot,\n isLocalMaintainerRegistryEnabled,\n} from \"../services/project/local-maintainer-registry.js\";\nimport { assertReleaseEnvironmentPortableDependencies } from \"../services/project/dependency-portability.js\";\nimport {\n getProjectLocalMaintainerRegistry,\n updateProjectLocalMaintainerRegistry,\n} from \"../services/project/project-state.js\";\nimport { updateProjectState } from \"../config/project-config.js\";\nimport { scaffoldStaticWorkspace } from \"../services/project/static-scaffold.js\";\nimport { applyWorkspaceCodegen } from \"../services/project/workspace-codegen.js\";\nimport { reconcileWorkspaceDependencies } from \"../services/project/workspace-dependencies.js\";\nimport { assertReducerContractPreflight } from \"../services/project/reducer-contract-preflight.js\";\nimport { assertReducerBundleSmoke } from \"../services/project/reducer-bundle-preflight.js\";\nimport { isSourceRevisionPath } from \"../services/project/source-revision-paths.js\";\nimport { projectIdFromSessionGameSource } from \"../utils/session-game-source.js\";\n\nasync function runLoggedStep<T>(\n message: string,\n task: () => Promise<T>,\n): Promise<T> {\n consola.start(message);\n return task();\n}\n\nfunction formatDevCompileJobProgressMessage(job: {\n status: string;\n phase?: string;\n queuePosition?: number;\n message?: string | null;\n}): string {\n const phase = job.phase ? ` [${job.phase}]` : \"\";\n const detail = job.message ? ` ${job.message}` : \"\";\n if (job.status === \"PENDING\") {\n const queue =\n typeof job.queuePosition === \"number\"\n ? ` (queue ${job.queuePosition + 1})`\n : \"\";\n return `Dev compile queued${queue}${phase}${detail}`.trim();\n }\n if (job.status === \"RUNNING\") {\n return `Dev compile running${phase}${detail}`.trim();\n }\n if (job.status === \"FAILED\") {\n return `Dev compile failed${phase}${detail}`.trim();\n }\n return `Dev compile ${job.status.toLowerCase()}${phase}${detail}`.trim();\n}\n\nfunction formatDevCompileDiagnostics(\n diagnostics: CompiledResult[\"diagnostics\"],\n): string | null {\n const lines = diagnostics\n ?.map((diagnostic) => {\n const location =\n diagnostic.type === \"file\"\n ? `${diagnostic.file}:${diagnostic.line}:${diagnostic.column}`\n : diagnostic.category;\n const code = diagnostic.code ? ` ${diagnostic.code}` : \"\";\n const message = diagnostic.message.trim();\n return `- [${diagnostic.severity}] ${location}${code}: ${message}`;\n })\n .filter((line) => line.trim().length > 0);\n\n return lines && lines.length > 0 ? lines.join(\"\\n\") : null;\n}\n\nfunction assertDevCompiledResultStartable(\n compiledResult: CompiledResult,\n): CompiledResult {\n const blockers: string[] = [];\n if (!compiledResult.success) blockers.push(\"compile did not succeed\");\n if (!compiledResult.appStorageKey) blockers.push(\"missing APP storage key\");\n if (!compiledResult.uiStorageKey) blockers.push(\"missing UI storage key\");\n\n if (blockers.length === 0) {\n return compiledResult;\n }\n\n const diagnostics = formatDevCompileDiagnostics(compiledResult.diagnostics);\n const details = diagnostics\n ? `Diagnostics:\\n${diagnostics}`\n : \"No compiler diagnostics were returned.\";\n throw new Error(\n [\n `Dev compile ${compiledResult.id} is not startable (${blockers.join(\", \")}).`,\n details,\n \"Fix the compile diagnostics before starting dreamboard dev.\",\n ].join(\"\\n\"),\n );\n}\n\nfunction clearPreflightOutput(): void {\n if (!process.stdout.isTTY || process.env.CI) return;\n console.clear();\n}\n\nfunction formatDevReadyOutput(options: {\n url: string;\n networkUrls: string[];\n allowedHosts: string[];\n apiBaseUrl: string;\n sessionStatus: \"created\" | \"reused\" | \"seeded\";\n shortCode: string;\n sessionId: string;\n seed: number | \"unknown\";\n debug: boolean;\n scenarioId?: string | null;\n materialization?: DevRunSession[\"materialization\"];\n setupProfile?: {\n id: string;\n name?: string | null;\n } | null;\n}): string {\n const lines = [\"Dreamboard dev\", \"\", `Local: ${options.url}`];\n\n for (const networkUrl of options.networkUrls) {\n lines.push(`Network: ${networkUrl}`);\n }\n\n if (options.networkUrls.length > 0) {\n lines.push(\"Access: LAN only; use trusted networks.\");\n }\n\n for (const allowedHost of options.allowedHosts) {\n lines.push(`Allowed: ${allowedHost}`);\n }\n\n lines.push(\n `Session: ${options.shortCode} (${options.sessionId}, ${options.sessionStatus})`,\n `Seed: ${options.seed}`,\n );\n\n if (options.setupProfile) {\n const label = options.setupProfile.name\n ? `${options.setupProfile.name} (${options.setupProfile.id})`\n : options.setupProfile.id;\n lines.push(`Setup: ${label}`);\n }\n\n if (options.scenarioId) {\n lines.push(`Scenario: ${options.scenarioId}`);\n }\n\n if (options.materialization) {\n lines.push(\n `Snapshot: ${options.materialization.totalMs}ms total (${options.materialization.reducerHarnessMs}ms reducer, ${options.materialization.backendHydrateMs}ms backend)`,\n );\n }\n\n lines.push(\n `Backend: ${options.apiBaseUrl}`,\n \"\",\n \"UI edits hot-reload. Rule, manifest, and app changes need restart.\",\n `Debug logs: ${options.debug ? \"on\" : \"off (--debug)\"}`,\n \"\",\n );\n\n return lines.join(\"\\n\");\n}\n\nfunction parseDevHost(\n value: string | boolean | undefined,\n): string | boolean | undefined {\n if (value === undefined || value === false) return undefined;\n if (value === true) return true;\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : true;\n}\n\nfunction parseAllowedHosts(value: string | undefined): string[] {\n if (!value) return [];\n return value\n .split(\",\")\n .map((host) => normalizeAllowedHost(host))\n .filter((host): host is string => Boolean(host));\n}\n\nfunction normalizeAllowedHost(value: string): string | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.includes(\"://\")) {\n return new URL(trimmed).hostname;\n }\n\n return trimmed.split(\"/\")[0]?.replace(/:\\d+$/, \"\") || null;\n}\n\nfunction warnForExplicitDevPort(port: number): void {\n consola.warn(\n `Using --port ${port}. If gameplay authority rejects the browser origin, add http://localhost:${port} and http://127.0.0.1:${port} to GAMEPLAY_AUTHORITY_ALLOWED_ORIGINS for this environment.`,\n );\n}\n\ntype DevResumeResult = {\n session: DevRunSession | null;\n reason: string | null;\n resetNotice?: string;\n};\n\nconst STALE_DEV_SESSION_RESET_NOTICE =\n \"Resetting disposable dev session because the previous session was created for a stale contract artifact.\";\n\ntype DevRunSession = {\n sessionId: string;\n shortCode: string;\n gameId: string;\n seed?: number;\n setupProfileId?: string;\n materialization?: {\n mode: \"snapshot\";\n totalMs: number;\n reducerHarnessMs: number;\n backendHydrateMs: number;\n };\n};\n\nexport default defineCommand({\n meta: {\n name: \"dev\",\n description:\n \"Start a local iframe host for the current project while gameplay stays on the backend\",\n },\n args: {\n seed: {\n type: \"string\",\n description: \"Deterministic RNG seed for new sessions (defaults to 1337)\",\n },\n \"setup-profile\": {\n type: \"string\",\n description:\n \"Named setup profile to use when the manifest defines curated setup presets\",\n },\n players: {\n type: \"string\",\n description: \"Number of seats to create\",\n },\n \"player-count\": {\n type: \"string\",\n description: \"Number of seats to create (alias)\",\n },\n debug: {\n type: \"boolean\",\n description:\n \"Print browser/runtime logs and full SSE payloads in the terminal\",\n default: false,\n },\n resume: {\n type: \"string\",\n description: \"Resume a specific existing backend session by session id\",\n },\n \"from-scenario\": {\n type: \"string\",\n description:\n \"Create a backend session by materializing a typed test scenario snapshot\",\n },\n \"new-session\": {\n type: \"boolean\",\n description:\n \"Deprecated alias for the default behavior of creating a fresh session\",\n default: false,\n },\n open: {\n type: \"boolean\",\n description: \"Open the local dev host in the browser\",\n default: false,\n },\n port: {\n type: \"string\",\n description: \"Preferred local Vite port (defaults to 5352)\",\n },\n host: {\n type: \"string\",\n description:\n \"Expose the local dev host on the network. Pass without a value to bind all interfaces, or provide an address.\",\n valueHint: \"address\",\n },\n \"allowed-host\": {\n type: \"string\",\n description:\n \"Additional Host header to allow, for example a Cloudflare Tunnel hostname.\",\n valueHint: \"hostname\",\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseDevCommandArgs(args);\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedArgs,\n { requireAuth: false },\n );\n await configureClient(config);\n const remoteProject = await resolveRemoteProject({\n projectRoot,\n projectConfig,\n config,\n });\n const effectiveProjectConfig = remoteProject.projectConfig;\n const effectiveAuthToken =\n config.authToken ?? resolveLocalHarnessAccessToken(config);\n\n const devCompile = await ensureDevCompiledResult({\n projectRoot,\n projectConfig: effectiveProjectConfig,\n config,\n env: parsedArgs.env ?? \"local\",\n debug: parsedArgs.debug,\n });\n\n const devDir = path.join(projectRoot, PROJECT_DIR_NAME, \"dev\");\n await ensureDir(devDir);\n const sessionFilePath = path.join(devDir, \"session.json\");\n\n const requestedResumeSessionId = parsedArgs.resume?.trim() || null;\n const requestedScenarioId = parsedArgs[\"from-scenario\"]?.trim() || null;\n if (requestedResumeSessionId && parsedArgs[\"new-session\"]) {\n throw new Error(\"Cannot combine --resume with --new-session.\");\n }\n if (requestedResumeSessionId && requestedScenarioId) {\n throw new Error(\"Cannot combine --resume with --from-scenario.\");\n }\n if (\n requestedScenarioId &&\n (parsedArgs.seed ||\n parsedArgs[\"setup-profile\"] ||\n parsedArgs.players ||\n parsedArgs[\"player-count\"])\n ) {\n throw new Error(\n \"--from-scenario materializes the scenario's authored seed, setup profile, and player count. Remove --seed, --setup-profile, and player-count overrides.\",\n );\n }\n\n const requestedSeed = requestedScenarioId\n ? null\n : parseDevSeed(parsedArgs.seed);\n const selectedSetupProfile = requestedScenarioId\n ? null\n : await resolveSetupProfileSelectionForSession({\n projectRoot,\n requestedSetupProfileId: parsedArgs[\"setup-profile\"],\n });\n let selectedSetupProfileId = selectedSetupProfile?.id ?? null;\n let resolvedPlayerCount = requestedScenarioId\n ? 0\n : await resolvePlayerCount(\n projectRoot,\n parsePlayerCountFlags(parsedArgs),\n );\n const resumeResult = requestedResumeSessionId\n ? await tryResumeSession(\n { sessionId: requestedResumeSessionId },\n effectiveProjectConfig.projectId,\n selectedSetupProfileId,\n )\n : { session: null, reason: null };\n\n if (requestedResumeSessionId && resumeResult.resetNotice) {\n consola.info(resumeResult.resetNotice);\n } else if (requestedResumeSessionId && resumeResult.reason) {\n consola.warn(\n `Ignoring requested dev session ${requestedResumeSessionId}: ${resumeResult.reason}`,\n );\n }\n\n let runSession = resumeResult.session;\n let scenarioSeededSession = false;\n const resumedExistingSession = Boolean(\n requestedResumeSessionId &&\n runSession &&\n runSession.sessionId === requestedResumeSessionId,\n );\n\n if (requestedScenarioId) {\n await generateReducerNativeArtifacts({\n projectRoot,\n compiledResultId: devCompile.id,\n gameId: effectiveProjectConfig.gameId,\n debug: parsedArgs.debug,\n });\n const seededScenario = await createSessionFromScenario({\n projectRoot,\n scenarioId: requestedScenarioId,\n compiledResultId: devCompile.id,\n projectId: effectiveProjectConfig.projectId,\n gameId: effectiveProjectConfig.gameId,\n debug: parsedArgs.debug,\n trustGeneratedFingerprint: true,\n });\n scenarioSeededSession = true;\n selectedSetupProfileId = seededScenario.setupProfileId;\n resolvedPlayerCount = seededScenario.playerCount;\n runSession = {\n sessionId: seededScenario.sessionId,\n shortCode: seededScenario.shortCode,\n gameId: seededScenario.gameId,\n seed: seededScenario.seed,\n setupProfileId: seededScenario.setupProfileId ?? undefined,\n materialization: seededScenario.materialization,\n };\n } else if (!runSession) {\n runSession = await createDevSession({\n projectRoot,\n projectConfig: effectiveProjectConfig,\n playerCount: resolvedPlayerCount,\n seed: requestedSeed ?? 1337,\n compiledResult: devCompile,\n setupProfileId: selectedSetupProfileId,\n });\n }\n\n await writeJsonFile(\n sessionFilePath,\n createPersistedDevSession({ sessionId: runSession.sessionId }),\n );\n\n const preferredPort =\n typeof parsedArgs.port === \"string\" && parsedArgs.port.trim().length > 0\n ? Number.parseInt(parsedArgs.port, 10)\n : undefined;\n if (\n preferredPort !== undefined &&\n (!Number.isFinite(preferredPort) || preferredPort <= 0)\n ) {\n throw new Error(\"Invalid --port value. Expected a positive integer.\");\n }\n if (preferredPort !== undefined) {\n warnForExplicitDevPort(preferredPort);\n }\n const allowedHosts = parseAllowedHosts(parsedArgs[\"allowed-host\"]);\n\n const devServer = await startDreamboardDevServer({\n projectRoot,\n sessionFilePath,\n port: preferredPort,\n host: parseDevHost(parsedArgs.host),\n allowedHosts,\n config,\n runtimeConfig: {\n apiBaseUrl: config.apiBaseUrl,\n userId: extractUserIdFromJwt(effectiveAuthToken ?? null),\n gameId: runSession.gameId,\n compiledResultId: devCompile.id,\n setupProfileId: runSession.setupProfileId ?? null,\n playerCount: resolvedPlayerCount,\n debug: parsedArgs.debug,\n slug: effectiveProjectConfig.slug,\n autoStartGame: !resumedExistingSession && !scenarioSeededSession,\n initialSession: {\n sessionId: runSession.sessionId,\n shortCode: runSession.shortCode,\n gameId: runSession.gameId,\n seed: runSession.seed ?? null,\n },\n },\n });\n\n clearPreflightOutput();\n console.log(\n formatDevReadyOutput({\n url: devServer.url,\n networkUrls: devServer.networkUrls,\n allowedHosts,\n apiBaseUrl: config.apiBaseUrl,\n sessionStatus: scenarioSeededSession\n ? \"seeded\"\n : resumedExistingSession\n ? \"reused\"\n : \"created\",\n shortCode: runSession.shortCode,\n sessionId: runSession.sessionId,\n seed: runSession.seed ?? \"unknown\",\n debug: parsedArgs.debug,\n scenarioId: scenarioSeededSession ? requestedScenarioId : null,\n materialization: runSession.materialization,\n setupProfile: selectedSetupProfileId\n ? {\n id: selectedSetupProfileId,\n name: selectedSetupProfile?.name,\n }\n : null,\n }),\n );\n\n if (parsedArgs.open) {\n openBrowser(devServer.url);\n }\n\n await waitForTermination(async () => {\n await devServer.close();\n });\n },\n});\n\nasync function tryResumeSession(\n requested: {\n sessionId: string;\n },\n currentGameId: string,\n setupProfileId: string | null,\n): Promise<DevResumeResult> {\n const { data: snapshot, error } = await getSessionSnapshot({\n path: { sessionId: requested.sessionId },\n }).catch((error: unknown) => {\n if (isStaleContractArtifactError(error)) {\n return {\n data: null,\n error,\n };\n }\n throw error;\n });\n if (isStaleContractArtifactError(error)) {\n return {\n session: null,\n reason: null,\n resetNotice: STALE_DEV_SESSION_RESET_NOTICE,\n };\n }\n if (error || !snapshot) {\n return {\n session: null,\n reason: \"backend could not confirm that the session is still active\",\n };\n }\n const context = snapshot.context;\n if (projectIdFromSessionGameSource(context.gameSource) !== currentGameId) {\n return {\n session: null,\n reason: \"session belongs to a different game\",\n };\n }\n if ((context.setupProfileId ?? null) !== setupProfileId) {\n return {\n session: null,\n reason: `setup profile changed from ${context.setupProfileId ?? \"none\"} to ${setupProfileId ?? \"none\"}`,\n };\n }\n if (context.status === \"ended\" || context.phase === \"ended\") {\n return {\n session: null,\n reason: \"session has already ended\",\n };\n }\n\n return {\n session: {\n sessionId: context.sessionId,\n shortCode: context.shortCode,\n gameId: projectIdFromSessionGameSource(context.gameSource),\n setupProfileId: context.setupProfileId ?? undefined,\n },\n reason: null,\n };\n}\n\nasync function ensureDevCompiledResult(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n config: { apiBaseUrl: string; authToken?: string };\n env: string;\n debug: boolean;\n}): Promise<CompiledResult> {\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot: options.projectRoot,\n projectConfig: options.projectConfig,\n environment: options.env,\n });\n const localMaintainerEnabled = isLocalMaintainerRegistryEnabled(\n options.config.apiBaseUrl,\n );\n const existingLocalMaintainerRegistry = getProjectLocalMaintainerRegistry(\n options.projectConfig,\n );\n const refreshedLocalMaintainerRegistry = localMaintainerEnabled\n ? await runLoggedStep(\"Checking local SDK snapshot...\", () =>\n ensureLocalMaintainerSnapshot(options.config.apiBaseUrl),\n )\n : await ensureLocalMaintainerSnapshot(options.config.apiBaseUrl);\n const localMaintainerRegistry =\n refreshedLocalMaintainerRegistry ??\n (localMaintainerEnabled ? (existingLocalMaintainerRegistry ?? null) : null);\n if (refreshedLocalMaintainerRegistry) {\n if (\n didLocalMaintainerSnapshotChange(\n existingLocalMaintainerRegistry,\n refreshedLocalMaintainerRegistry,\n )\n ) {\n await updateProjectState(\n options.projectRoot,\n updateProjectLocalMaintainerRegistry(\n options.projectConfig,\n refreshedLocalMaintainerRegistry,\n ),\n );\n consola.info(\"Local SDK snapshot refreshed.\");\n } else {\n consola.info(\"Using existing local SDK snapshot.\");\n }\n } else if (localMaintainerRegistry) {\n consola.info(\"Using workspace-pinned local SDK snapshot.\");\n }\n\n await runLoggedStep(\"Refreshing static scaffold...\", () =>\n scaffoldStaticWorkspace(options.projectRoot, \"update\", {\n localMaintainerRegistry,\n }),\n );\n const manifest = await loadManifest(options.projectRoot);\n await runLoggedStep(\"Applying workspace codegen...\", () =>\n applyWorkspaceCodegen({\n projectRoot: options.projectRoot,\n manifest: manifest as ApiGameTopologyManifest,\n }),\n );\n const dependencyState = await runLoggedStep(\n \"Reconciling workspace dependencies...\",\n () => reconcileWorkspaceDependencies(options.projectRoot),\n );\n if (\n dependencyState.packageManagerNormalized ||\n dependencyState.lockfileGenerated ||\n dependencyState.installed\n ) {\n consola.info(\"Workspace dependencies reconciled.\");\n } else {\n consola.info(\"Workspace dependencies already up to date.\");\n }\n await runLoggedStep(\"Validating reducer contract...\", () =>\n assertReducerContractPreflight(options.projectRoot),\n );\n const typecheckResult = await runLoggedStep(\n \"Running local typecheck...\",\n () => runLocalTypecheck(options.projectRoot),\n );\n if (!typecheckResult.skipped && !typecheckResult.success) {\n if (typecheckResult.output) consola.error(typecheckResult.output);\n throw new Error(\n \"Local typecheck failed. Fix the diagnostics before starting dev.\",\n );\n }\n if (typecheckResult.output && typecheckResult.skipped)\n consola.warn(typecheckResult.output);\n await runLoggedStep(\"Smoke-testing reducer bundle...\", () =>\n assertReducerBundleSmoke({\n projectRoot: options.projectRoot,\n manifest: manifest as ApiGameTopologyManifest,\n }),\n );\n consola.success(\"Reducer bundle smoke test passed.\");\n consola.start(\"Ensuring dev compile...\");\n\n const [localFiles, ruleText, backendVersion, workspacePackageJson] =\n await Promise.all([\n collectLocalFiles(options.projectRoot),\n loadRule(options.projectRoot),\n resolveBackendVersionMetadata(),\n readWorkspacePackageJson(options.projectRoot),\n ]);\n const sourceRevisionFiles = Object.fromEntries(\n Object.entries(localFiles).filter(([filePath]) =>\n isSourceRevisionPath(filePath),\n ),\n );\n const sourceChanges = Object.entries(sourceRevisionFiles).map(\n ([filePath, content]) => ({\n kind: \"upsert\" as const,\n path: filePath,\n content,\n }),\n );\n const { changes } = await materializeSourceChangeOperations(sourceChanges);\n const uploadBlobs = mapUpsertBlobContentsByContentHash(\n sourceChanges,\n changes,\n );\n const devFingerprint = computeDevFingerprint({\n env: options.env,\n files: localFiles,\n manifest,\n ruleText,\n localMaintainerRegistry,\n backendVersion,\n workspacePackageJson,\n });\n\n const first = await postEnsureDevCompile({\n config: options.config,\n projectId: options.projectConfig.projectId,\n body: {\n devFingerprint,\n env: options.env,\n sourceRevision: { mode: \"replace\", changes: [] },\n ruleText,\n manifest: manifest as ApiGameTopologyManifest,\n },\n });\n if (first.reused && first.compiledResult) {\n const compiledResult = assertDevCompiledResultStartable(\n first.compiledResult,\n );\n consola.success(`Reusing dev compile ${compiledResult.id}.`);\n return compiledResult;\n }\n\n await uploadProjectSourceBlobsSdk(\n options.projectConfig.projectId,\n Array.from(uploadBlobs.values()),\n );\n const queued = await postEnsureDevCompile({\n config: options.config,\n projectId: options.projectConfig.projectId,\n body: {\n devFingerprint,\n env: options.env,\n sourceRevision: { mode: \"replace\", changes },\n ruleText,\n manifest: manifest as ApiGameTopologyManifest,\n },\n });\n if (queued.reused && queued.compiledResult) {\n return assertDevCompiledResultStartable(queued.compiledResult);\n }\n if (!queued.jobId)\n throw new Error(\"Backend did not return a dev compile job id.\");\n\n const { compiledResult } = await waitForCompiledResultJobSdk({\n projectId: options.projectConfig.projectId,\n jobId: queued.jobId,\n onProgress: (job) => {\n const message = formatDevCompileJobProgressMessage(job);\n if (options.debug) {\n consola.info(message);\n } else {\n consola.start(message);\n }\n },\n });\n return assertDevCompiledResultStartable(compiledResult);\n}\n\nasync function resolveBackendVersionMetadata(): Promise<unknown> {\n const { data, error } = await getApiVersion();\n return error ? null : (data ?? null);\n}\n\nasync function readWorkspacePackageJson(projectRoot: string): Promise<unknown> {\n try {\n const raw = await readTextFile(path.join(projectRoot, \"package.json\"));\n const parsed = JSON.parse(raw) as {\n dependencies?: Record<string, unknown>;\n devDependencies?: Record<string, unknown>;\n };\n return {\n dependencies: Object.fromEntries(\n Object.entries(parsed.dependencies ?? {}).filter(([name]) =>\n isDreamboardPublicPackage(name),\n ),\n ),\n devDependencies: Object.fromEntries(\n Object.entries(parsed.devDependencies ?? {}).filter(([name]) =>\n isDreamboardPublicPackage(name),\n ),\n ),\n };\n } catch {\n return null;\n }\n}\n\nfunction isDreamboardPublicPackage(packageName: string): boolean {\n return (\n packageName === \"dreamboard\" ||\n packageName.startsWith(\"@dreamboard-games/\")\n );\n}\n\nfunction stableJson(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map(stableJson).join(\",\")}]`;\n }\n return `{${Object.entries(value)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`)\n .join(\",\")}}`;\n}\n\nfunction computeDevFingerprint(input: {\n env: string;\n files: Record<string, string>;\n manifest: unknown;\n ruleText: string;\n localMaintainerRegistry: unknown;\n backendVersion: unknown;\n workspacePackageJson: unknown;\n}): string {\n const hash = createHash(\"sha256\");\n hash.update(\n stableJson({\n env: input.env,\n manifest: input.manifest,\n ruleText: input.ruleText,\n localMaintainerRegistry: input.localMaintainerRegistry,\n backendVersion: input.backendVersion,\n workspacePackageJson: input.workspacePackageJson,\n }),\n );\n for (const [filePath, content] of Object.entries(input.files).sort(\n ([a], [b]) => a.localeCompare(b),\n )) {\n hash.update(filePath);\n hash.update(\"\\0\");\n hash.update(content);\n hash.update(\"\\0\");\n }\n return hash.digest(\"hex\");\n}\n\nasync function postEnsureDevCompile(options: {\n config: { apiBaseUrl: string; authToken?: string };\n projectId: string;\n body: EnsureDevCompileRequest;\n}): Promise<EnsureDevCompileResponse> {\n void options.config;\n return ensureProjectDevCompileSdk({\n projectId: options.projectId,\n request: options.body,\n });\n}\n\nasync function createDevSession(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n playerCount: number;\n seed: number;\n compiledResult: CompiledResult;\n setupProfileId: string | null;\n}): Promise<DevRunSession> {\n const session = await createProjectSessionSdk({\n projectId: options.projectConfig.projectId,\n request: {\n compiledResultId: options.compiledResult.id,\n seed: options.seed,\n playerCount: options.playerCount,\n autoAssignSeats: true,\n setupProfileId: options.setupProfileId ?? undefined,\n },\n });\n\n return {\n sessionId: session.sessionId,\n shortCode: session.shortCode,\n gameId: projectIdFromSessionGameSource(session.gameSource),\n seed: options.seed,\n setupProfileId: options.setupProfileId ?? undefined,\n };\n}\n\ntype TerminationOptions = {\n exitAfterShutdown?: boolean;\n exitProcess?: (code: number) => void;\n};\n\nexport async function waitForTermination(\n close: () => Promise<void>,\n options: TerminationOptions = {},\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n let shuttingDown = false;\n const exitAfterShutdown = options.exitAfterShutdown ?? true;\n const exitProcess = options.exitProcess ?? ((code) => process.exit(code));\n\n const cleanupListeners = () => {\n process.off(\"SIGINT\", handleSigint);\n process.off(\"SIGTERM\", handleSigterm);\n };\n\n const shutdown = (signal: string) => {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n cleanupListeners();\n void close()\n .then(() => {\n consola.info(`Stopped local dev host (${signal}).`);\n resolve();\n if (exitAfterShutdown) {\n exitProcess(0);\n }\n })\n .catch(reject);\n };\n\n const handleSigint = () => shutdown(\"SIGINT\");\n const handleSigterm = () => shutdown(\"SIGTERM\");\n\n process.on(\"SIGINT\", handleSigint);\n process.on(\"SIGTERM\", handleSigterm);\n });\n}\n\nfunction extractUserIdFromJwt(token: string | null): string | null {\n if (!token) {\n return null;\n }\n\n const parts = token.split(\".\");\n if (parts.length < 2) {\n return null;\n }\n\n try {\n const payload = JSON.parse(\n Buffer.from(parts[1]!, \"base64url\").toString(\"utf8\"),\n ) as Record<string, unknown>;\n return typeof payload.sub === \"string\" ? payload.sub : null;\n } catch {\n return null;\n }\n}\n","import { randomInt } from \"node:crypto\";\nimport { exists, readJsonFile } from \"./fs.js\";\n\nexport type PersistedDevSession = {\n sessionId: string;\n};\n\nconst DEFAULT_DEV_SEED = 1337;\nconst MAX_RANDOM_DEV_SEED_EXCLUSIVE = 2_147_483_648;\nconst MIN_KOTLIN_LONG = -9_223_372_036_854_775_808n;\nconst MAX_KOTLIN_LONG = 9_223_372_036_854_775_807n;\nconst MIN_SAFE_SEED = BigInt(Number.MIN_SAFE_INTEGER);\nconst MAX_SAFE_SEED = BigInt(Number.MAX_SAFE_INTEGER);\n\nexport function createPersistedDevSession(input: {\n sessionId: string;\n}): PersistedDevSession {\n return {\n sessionId: input.sessionId,\n };\n}\n\nexport async function loadPersistedDevSession(\n sessionFilePath: string,\n): Promise<PersistedDevSession | null> {\n if (!(await exists(sessionFilePath))) {\n return null;\n }\n const value = await readJsonFile<PersistedDevSession>(sessionFilePath);\n if (!value.sessionId) {\n return null;\n }\n return {\n sessionId: value.sessionId,\n };\n}\n\nexport function parseDevSeed(rawSeed: string | undefined): number {\n return parseOptionalDevSeed(rawSeed) ?? DEFAULT_DEV_SEED;\n}\n\nexport function parseOptionalDevSeed(\n rawSeed: string | undefined,\n): number | undefined {\n const value = rawSeed?.trim();\n if (!value) {\n return undefined;\n }\n if (!/^-?\\d+$/.test(value)) {\n throw new Error(\"seed must be an integer\");\n }\n\n const parsed = BigInt(value);\n if (parsed < MIN_KOTLIN_LONG || parsed > MAX_KOTLIN_LONG) {\n throw new Error(\"seed must be within signed 64-bit integer range\");\n }\n if (parsed < MIN_SAFE_SEED || parsed > MAX_SAFE_SEED) {\n throw new Error(\n `seed must be within JavaScript safe integer range (${Number.MIN_SAFE_INTEGER}..${Number.MAX_SAFE_INTEGER})`,\n );\n }\n\n return Number(parsed);\n}\n\nexport function generateRandomDevSeed(): number {\n return randomInt(MAX_RANDOM_DEV_SEED_EXCLUSIVE);\n}\n","import type { PlayerCountFlags } from \"../flags.js\";\nimport { loadManifest } from \"../services/project/local-files.js\";\nimport { parsePositiveInt } from \"./strings.js\";\n\nexport async function resolvePlayerCount(\n projectRoot: string,\n flags: PlayerCountFlags,\n): Promise<number> {\n const rawPlayers = flags.players ?? flags[\"player-count\"];\n if (rawPlayers !== undefined) {\n return parsePositiveInt(rawPlayers, \"players\");\n }\n\n const manifest = await loadManifest(projectRoot);\n const minPlayers = manifest.players?.minPlayers;\n if (typeof minPlayers !== \"number\" || !Number.isFinite(minPlayers)) {\n throw new Error(\n \"manifest.ts is missing players.minPlayers. Provide --players <count> instead.\",\n );\n }\n\n return Math.max(1, Math.floor(minPlayers));\n}\n","import { rmSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport os from \"node:os\";\nimport react from \"@vitejs/plugin-react\";\nimport tailwindcssPostcss from \"@tailwindcss/postcss\";\nimport { createServer, type ViteDevServer } from \"vite\";\nimport type { ResolvedConfig } from \"../types.js\";\nimport { createDevApiProxyPlugin } from \"./dev-api-proxy-plugin.js\";\nimport { createDevRuntimePlatform } from \"./dev-runtime-platform.js\";\nimport { createVirtualDevModulesPlugin } from \"./dev-virtual-modules-plugin.js\";\nimport { createDevLogRelayPlugin } from \"./dev-log-relay-plugin.js\";\nimport { prepareFallbackStylesheet } from \"./dev-fallback-stylesheet.js\";\nimport { createDevHmrGuardPlugin } from \"./dev-hmr-guard-plugin.js\";\nimport type { DreamboardDevRuntimeConfig } from \"./dev-runtime-config.js\";\n\nconst require = createRequire(import.meta.url);\nconst tailwindCssEntry = require.resolve(\"tailwindcss/index.css\");\n\nexport type { DreamboardDevRuntimeConfig } from \"./dev-runtime-config.js\";\n\nexport async function startDreamboardDevServer(options: {\n projectRoot: string;\n sessionFilePath: string;\n port?: number;\n host?: string | boolean;\n allowedHosts?: string[];\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n}): Promise<{\n url: string;\n networkUrls: string[];\n close: () => Promise<void>;\n server: ViteDevServer;\n}> {\n const { projectRoot, port, host, allowedHosts, runtimeConfig, config } =\n options;\n const platform = createDevRuntimePlatform({\n importMetaUrl: import.meta.url,\n projectRoot,\n debug: runtimeConfig.debug,\n port,\n host,\n allowedHosts,\n tailwindCssEntry,\n });\n const generatedFallbackStylesheetPath = prepareFallbackStylesheet({\n projectRoot,\n repoRoot: platform.repoRoot,\n });\n\n const server = await createServer({\n root: platform.devHostRoot,\n appType: \"spa\",\n plugins: [\n createDevHmrGuardPlugin({ projectRoot }),\n react(),\n createVirtualDevModulesPlugin({\n projectRoot,\n runtimeConfig,\n generatedFallbackStylesheetPath,\n }),\n createDevApiProxyPlugin({ config }),\n createDevLogRelayPlugin({\n sessionFilePath: options.sessionFilePath,\n runtimeConfig,\n config,\n diagnosticsLevel: platform.diagnosticsLevel,\n }),\n ],\n css: {\n postcss: {\n plugins: [tailwindcssPostcss()],\n },\n },\n logLevel: platform.viteLogLevel,\n resolve: {\n dedupe: platform.resolveDedupe,\n alias: platform.resolveAlias,\n },\n optimizeDeps: {\n exclude: platform.optimizeDepsExclude,\n },\n server: platform.serverConfig,\n });\n\n await server.listen();\n const resolvedPort = getBoundPort(server);\n const url = `http://localhost:${resolvedPort}/index.html`;\n return {\n url,\n networkUrls: getNetworkUrls(host, resolvedPort),\n close: async () => {\n await server.close();\n if (generatedFallbackStylesheetPath) {\n rmSync(generatedFallbackStylesheetPath, { force: true });\n }\n },\n server,\n };\n}\n\nfunction getNetworkUrls(\n host: string | boolean | undefined,\n port: number,\n): string[] {\n if (!host) return [];\n if (typeof host === \"string\" && isLoopbackHost(host)) return [];\n\n const hosts =\n host === true || host === \"0.0.0.0\" || host === \"::\"\n ? getLanIpv4Addresses()\n : [host];\n\n return hosts.map(\n (value) => `http://${formatUrlHost(value)}:${port}/index.html`,\n );\n}\n\nfunction isLoopbackHost(host: string): boolean {\n return host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\";\n}\n\nfunction getLanIpv4Addresses(): string[] {\n return Object.values(os.networkInterfaces())\n .flatMap((interfaces) => interfaces ?? [])\n .filter((details) => details.family === \"IPv4\" && !details.internal)\n .map((details) => details.address);\n}\n\nfunction formatUrlHost(host: string): string {\n return host.includes(\":\") ? `[${host}]` : host;\n}\n\nfunction getBoundPort(server: ViteDevServer): number {\n const address = server.httpServer?.address();\n if (!address || typeof address === \"string\") {\n throw new Error(\"Failed to determine local dev server port.\");\n }\n return address.port;\n}\n","/**\n * Reverse-proxy plugin for the `dreamboard dev` Vite server.\n *\n * Every `/api/*` request the browser makes is intercepted here, run\n * through the Clerk OAuth refresh flow when needed, then forwarded to the configured upstream\n * backend with an `Authorization: Bearer <fresh-token>` header injected\n * on the wire. The access and refresh tokens never reach the browser.\n *\n * Failure contract:\n * - Permanent refresh failure (stored refresh token invalid) responds\n * with `401 { error: \"session_invalid\", message }` so the browser can\n * show a \"Run dreamboard login\" overlay instead of surfacing a\n * confusing upstream 401.\n * - Transient refresh failure (network blip) falls back to the snapshot\n * access token in `ResolvedConfig` when we still have one - this lets\n * a short outage degrade to \"existing token\" behavior instead of\n * blocking the iframe outright.\n * - Upstream connection failure responds with `502 { error:\n * \"upstream_unavailable\", message }`.\n *\n * The proxy is deliberately unaware of the session file / persist\n * endpoint / log relay; those live in `dev-log-relay-plugin.ts`.\n */\n\nimport http, { type IncomingMessage, type ServerResponse } from \"node:http\";\nimport https from \"node:https\";\nimport { EventEmitter } from \"node:events\";\nimport consola from \"consola\";\nimport type { Plugin } from \"vite\";\nimport {\n getAuthTokenExpiry,\n refreshResolvedAuthSession,\n} from \"../config/resolve.js\";\nimport { resolveLocalHarnessAccessToken } from \"../config/local-harness-auth.js\";\nimport type { ResolvedConfig } from \"../types.js\";\n\nexport type ResolvedBearerOk = {\n readonly kind: \"ok\";\n readonly token: string | null;\n};\nexport type ResolvedBearerPermanentFailure = {\n readonly kind: \"permanent_invalid\";\n readonly message: string;\n};\nexport type ResolvedBearer = ResolvedBearerOk | ResolvedBearerPermanentFailure;\n\nexport interface DevApiProxyPluginDeps {\n /**\n * Hook point for tests: resolve the bearer token (or a permanent\n * failure) synchronously once per request.\n */\n resolveBearer?: (config: ResolvedConfig) => Promise<ResolvedBearer>;\n /**\n * Hook point for tests: construct the underlying proxy. Allows\n * injecting an in-memory proxy that talks to a fake upstream.\n */\n createProxy?: (target: string) => DevApiProxy;\n}\n\ntype DevApiProxy = {\n on(event: \"error\", listener: ProxyErrorListener): DevApiProxy;\n web(\n req: IncomingMessage,\n res: ServerResponse,\n options?: Record<string, never>,\n callback?: (err?: Error) => void,\n ): void;\n close(): void;\n};\n\ntype ProxyErrorListener = (\n err: Error,\n req: IncomingMessage,\n res: ServerResponse,\n) => void;\n\nexport function createDevApiProxyPlugin(options: {\n config: ResolvedConfig;\n deps?: DevApiProxyPluginDeps;\n}): Plugin {\n const { config, deps } = options;\n const target = config.apiBaseUrl;\n\n return {\n name: \"dreamboard-dev-api-proxy\",\n configureServer(server) {\n const createProxy =\n deps?.createProxy ??\n ((proxyTarget: string) => createStreamingProxy(proxyTarget));\n\n const proxy = createProxy(target);\n\n proxy.on(\"error\", (err, _req, res) => {\n consola.debug(`[dev-proxy] upstream error: ${formatUnknown(err)}`);\n if (res instanceof Object && \"writeHead\" in res && !res.headersSent) {\n respondUpstreamUnavailable(res as ServerResponse, err);\n } else if (res && \"destroy\" in res) {\n (res as { destroy: () => void }).destroy();\n }\n });\n\n const resolveBearer = deps?.resolveBearer ?? resolveDevBearer;\n\n // NOTE: we intentionally do NOT mount this middleware on `/api`.\n // Connect-style `middlewares.use(path, handler)` strips the mount\n // prefix from `req.url` before invoking the handler, which would\n // cause the proxy to forward `/sessions/.../status` instead of\n // `/api/sessions/.../status` and the backend would respond 404.\n // Filtering inside the handler keeps the full path intact.\n server.middlewares.use((req, res, next) => {\n if (!req.url || !isApiRequest(req.url)) {\n next();\n return;\n }\n void handleApiRequest({ req, res, config, proxy, resolveBearer });\n });\n\n server.httpServer?.once(\"close\", () => {\n proxy.close();\n });\n },\n };\n}\n\nasync function handleApiRequest(options: {\n req: IncomingMessage;\n res: ServerResponse;\n config: ResolvedConfig;\n proxy: DevApiProxy;\n resolveBearer: (config: ResolvedConfig) => Promise<ResolvedBearer>;\n}): Promise<void> {\n const { req, res, config, proxy, resolveBearer } = options;\n try {\n const bearer = await resolveBearer(config);\n if (bearer.kind === \"permanent_invalid\") {\n respondSessionInvalid(res, bearer.message);\n return;\n }\n\n if (bearer.token) {\n req.headers.authorization = `Bearer ${bearer.token}`;\n } else {\n delete req.headers.authorization;\n }\n\n proxy.web(req, res, {}, (err) => {\n if (!err) return;\n consola.debug(`[dev-proxy] forward error: ${formatUnknown(err)}`);\n if (!res.headersSent) {\n respondUpstreamUnavailable(res, err);\n }\n });\n } catch (err) {\n consola.debug(`[dev-proxy] pre-forward error: ${formatUnknown(err)}`);\n respondRefreshFailed(res, err);\n }\n}\n\nfunction createStreamingProxy(target: string): DevApiProxy {\n const targetUrl = new URL(target);\n const events = new EventEmitter();\n const activeRequests = new Set<http.ClientRequest>();\n\n const proxy: DevApiProxy = {\n on(event, listener) {\n events.on(event, listener);\n return proxy;\n },\n web(req, res, _options, callback) {\n const upstreamUrl = new URL(req.url ?? \"/\", targetUrl);\n const headers = createForwardHeaders(req, targetUrl);\n\n const client = targetUrl.protocol === \"https:\" ? https : http;\n const upstreamReq = client.request(\n upstreamUrl,\n {\n method: req.method,\n headers,\n },\n (upstreamRes) => {\n res.writeHead(\n upstreamRes.statusCode ?? 502,\n upstreamRes.statusMessage,\n upstreamRes.headers,\n );\n upstreamRes.pipe(res);\n },\n );\n\n activeRequests.add(upstreamReq);\n\n const handleError = (err: Error) => {\n activeRequests.delete(upstreamReq);\n callback?.(err);\n events.emit(\"error\", err, req, res);\n };\n\n upstreamReq.on(\"error\", handleError);\n upstreamReq.on(\"close\", () => activeRequests.delete(upstreamReq));\n req.on(\"aborted\", () => upstreamReq.destroy());\n req.pipe(upstreamReq);\n },\n close() {\n for (const request of activeRequests) {\n request.destroy();\n }\n activeRequests.clear();\n events.removeAllListeners();\n },\n };\n\n return proxy;\n}\n\nfunction createForwardHeaders(\n req: IncomingMessage,\n targetUrl: URL,\n): http.OutgoingHttpHeaders {\n const headers: http.OutgoingHttpHeaders = { ...req.headers };\n\n // Browser requests are same-origin with the dev host. Once the CLI proxies\n // them to the backend, they are server-to-server requests; forwarding the\n // browser Origin from a Cloudflare/LAN host makes backend CORS reject valid\n // dev traffic.\n delete headers.origin;\n delete headers[\"access-control-request-headers\"];\n delete headers[\"access-control-request-method\"];\n\n headers.host = targetUrl.host;\n headers[\"x-forwarded-host\"] = req.headers.host;\n headers[\"x-forwarded-proto\"] = targetUrl.protocol.replace(\":\", \"\");\n\n return headers;\n}\n\nexport async function resolveDevBearer(\n config: ResolvedConfig,\n): Promise<ResolvedBearer> {\n const localHarnessToken = resolveLocalHarnessAccessToken(config);\n if (localHarnessToken) {\n return { kind: \"ok\", token: localHarnessToken };\n }\n\n // Env/flag-provided tokens are not owned by `CredentialStore` and must\n // not be rotated. Forward them as-is.\n if (!usesStoredSession(config)) {\n return { kind: \"ok\", token: config.authToken ?? null };\n }\n\n const expiry = getAuthTokenExpiry(config.authToken);\n const isExpired = expiry !== null && expiry.getTime() <= Date.now();\n if (!isExpired) {\n return { kind: \"ok\", token: config.authToken ?? null };\n }\n\n if (!config.refreshToken) {\n return {\n kind: \"permanent_invalid\",\n message:\n \"Stored Dreamboard session is expired or invalid. Run `dreamboard login` to authenticate again.\",\n };\n }\n\n const refreshed = await refreshResolvedAuthSession(config);\n return {\n kind: \"ok\",\n token: refreshed?.accessToken ?? config.authToken ?? null,\n };\n}\n\nfunction usesStoredSession(config: ResolvedConfig): boolean {\n return (\n config.authTokenSource === \"global\" &&\n config.refreshTokenSource === \"global\"\n );\n}\n\nfunction respondSessionInvalid(res: ServerResponse, message: string): void {\n if (res.headersSent) return;\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n error: \"session_invalid\",\n message,\n }),\n );\n}\n\nfunction respondUpstreamUnavailable(res: ServerResponse, error: unknown): void {\n if (res.headersSent) return;\n res.statusCode = 502;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n error: \"upstream_unavailable\",\n message: formatUnknown(error),\n }),\n );\n}\n\nfunction respondRefreshFailed(res: ServerResponse, error: unknown): void {\n if (res.headersSent) return;\n res.statusCode = 502;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n error: \"refresh_failed\",\n message: formatUnknown(error),\n }),\n );\n}\n\nfunction isApiRequest(url: string): boolean {\n return url === \"/api\" || url.startsWith(\"/api/\") || url.startsWith(\"/api?\");\n}\n\nfunction formatUnknown(value: unknown): string {\n if (value instanceof Error) {\n return value.message || value.name || \"Unknown error\";\n }\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n","import { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { existsSync } from \"node:fs\";\nimport type { Alias, ServerOptions } from \"vite\";\nimport { resolveDevDiagnosticsLevel } from \"./dev-diagnostics.js\";\n\nexport interface DevRuntimePlatformOptions {\n importMetaUrl: string;\n projectRoot: string;\n debug: boolean;\n port?: number;\n host?: string | boolean;\n allowedHosts?: string[];\n tailwindCssEntry: string;\n}\n\nexport interface DevRuntimePlatform {\n devHostRoot: string;\n repoRoot: string;\n cliRoot: string;\n diagnosticsLevel: ReturnType<typeof resolveDevDiagnosticsLevel>;\n viteLogLevel: \"info\" | \"warn\";\n serverConfig: ServerOptions;\n resolveDedupe: string[];\n resolveAlias: Alias[];\n optimizeDepsExclude: string[];\n}\n\nexport function createDevRuntimePlatform(\n options: DevRuntimePlatformOptions,\n): DevRuntimePlatform {\n const devHostRoot = resolveDevHostRoot(options.importMetaUrl);\n const cliRoot = resolveCliRoot(options.importMetaUrl);\n const repoRoot = resolveRepoRoot(cliRoot);\n const require = createRequire(options.importMetaUrl);\n const diagnosticsLevel = resolveDevDiagnosticsLevel(options.debug);\n const sdkRoot = resolvePackageRoot(\n require,\n cliRoot,\n \"@dreamboard-games/sdk\",\n \"@dreamboard-games/sdk\",\n \"node_modules/@dreamboard-games/sdk\",\n );\n const apiClientClientGen = resolvePackageSubpath(\n require,\n cliRoot,\n \"@dreamboard-games/api-client/client.gen\",\n \"@dreamboard-games/api-client/client.gen\",\n \"node_modules/@dreamboard-games/api-client/dist/client.gen.js\",\n );\n const uiHostRuntimeRoot = resolveUiHostRuntimeRoot(require, cliRoot);\n\n return {\n devHostRoot,\n repoRoot,\n cliRoot,\n diagnosticsLevel,\n viteLogLevel: diagnosticsLevel === \"verbose\" ? \"info\" : \"warn\",\n serverConfig: {\n host: options.host ?? \"localhost\",\n allowedHosts: options.allowedHosts,\n port: options.port ?? 5352,\n strictPort: false,\n watch: {\n ignored: createProjectOnlyWatchIgnored(options.projectRoot),\n },\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, OPTIONS\",\n },\n fs: {\n allow: [options.projectRoot, repoRoot],\n },\n },\n resolveDedupe: [\"react\", \"react-dom\", \"@dreamboard-games/sdk\"],\n resolveAlias: [\n {\n find: /^react$/,\n replacement: resolveCliDependency(\n require,\n cliRoot,\n \"react\",\n \"node_modules/react/index.js\",\n ),\n },\n {\n find: /^react\\/jsx-runtime$/,\n replacement: resolveCliDependency(\n require,\n cliRoot,\n \"react/jsx-runtime\",\n \"node_modules/react/jsx-runtime.js\",\n ),\n },\n {\n find: /^react\\/jsx-dev-runtime$/,\n replacement: resolveCliDependency(\n require,\n cliRoot,\n \"react/jsx-dev-runtime\",\n \"node_modules/react/jsx-dev-runtime.js\",\n ),\n },\n {\n find: /^react-dom$/,\n replacement: resolveCliDependency(\n require,\n cliRoot,\n \"react-dom\",\n \"node_modules/react-dom/index.js\",\n ),\n },\n {\n find: /^react-dom\\/client$/,\n replacement: resolveCliDependency(\n require,\n cliRoot,\n \"react-dom/client\",\n \"node_modules/react-dom/client.js\",\n ),\n },\n {\n find: /^@dreamboard-games\\/sdk\\/ui$/,\n replacement: path.resolve(sdkRoot, \"dist/ui.js\"),\n },\n {\n find: /^@dreamboard-games\\/sdk\\/ui\\/components$/,\n replacement: path.resolve(sdkRoot, \"dist/ui/components.js\"),\n },\n {\n find: /^@dreamboard-games\\/sdk\\/runtime$/,\n replacement: path.resolve(sdkRoot, \"dist/runtime.js\"),\n },\n {\n find: /^@dreamboard-games\\/sdk\\/runtime\\/runtime-api$/,\n replacement: path.resolve(sdkRoot, \"dist/runtime/runtime-api.js\"),\n },\n {\n find: /^@dreamboard-games\\/sdk\\/runtime\\/primitives$/,\n replacement: path.resolve(sdkRoot, \"dist/runtime/primitives.js\"),\n },\n {\n find: /^@dreamboard-games\\/sdk\\/runtime\\/workspace-contract$/,\n replacement: path.resolve(\n sdkRoot,\n \"dist/runtime/workspace-contract.js\",\n ),\n },\n {\n find: /^@dreamboard-games\\/ui-host-runtime\\/components$/,\n replacement: path.resolve(uiHostRuntimeRoot, \"src/components/index.ts\"),\n },\n {\n find: /^@dreamboard-games\\/ui-host-runtime\\/runtime$/,\n replacement: path.resolve(uiHostRuntimeRoot, \"src/runtime/index.ts\"),\n },\n {\n find: /^@dreamboard\\/manifest-contract$/,\n replacement: path.resolve(\n options.projectRoot,\n \"shared/manifest-contract.ts\",\n ),\n },\n {\n find: /^#dreamboard\\/ui-contract$/,\n replacement: path.resolve(\n options.projectRoot,\n \"shared/generated/ui-contract.ts\",\n ),\n },\n {\n find: /^@dreamboard-games\\/sdk\\/ui\\/plugin-styles\\.css$/,\n replacement: resolveCliDependency(\n require,\n cliRoot,\n \"@dreamboard-games/sdk/ui/plugin-styles.css\",\n \"node_modules/@dreamboard-games/sdk/dist/ui/plugin-styles.css\",\n ),\n },\n {\n find: /^@dreamboard-games\\/api-client\\/client\\.gen$/,\n replacement: apiClientClientGen,\n },\n {\n find: /^@shared\\/(.*)$/,\n replacement: path.resolve(options.projectRoot, \"shared/$1\"),\n },\n {\n find: /^tailwindcss$/,\n replacement: options.tailwindCssEntry,\n },\n ],\n // Author SDKs are resolved from the project, not the CLI root. Let Vite\n // transform them fresh so its CLI-scoped dependency cache cannot pin an\n // older local snapshot after `dreamboard sync`.\n optimizeDepsExclude: [\n \"@dreamboard-games/sdk\",\n \"@dreamboard-games/sdk/ui\",\n \"@dreamboard-games/sdk/runtime\",\n \"@dreamboard-games/sdk/runtime/primitives\",\n \"@dreamboard-games/sdk/runtime/workspace-contract\",\n \"@dreamboard-games/sdk/reducer\",\n \"@dreamboard-games/sdk/types\",\n ],\n };\n}\n\nfunction createProjectOnlyWatchIgnored(\n projectRoot: string,\n): (file: string) => boolean {\n const normalizedProjectRoot = path.resolve(projectRoot);\n\n return (file) => {\n const normalizedFile = path.resolve(file);\n const relativePath = path.relative(normalizedProjectRoot, normalizedFile);\n const isInsideProject =\n relativePath === \"\" ||\n (relativePath.length > 0 &&\n !relativePath.startsWith(\"..\") &&\n !path.isAbsolute(relativePath));\n\n if (!isInsideProject) {\n return true;\n }\n\n const pathSegments = relativePath.split(path.sep);\n return (\n pathSegments.includes(\".dreamboard\") ||\n pathSegments.includes(\"node_modules\")\n );\n };\n}\n\nfunction resolveUiHostRuntimeRoot(\n require: NodeJS.Require,\n cliRoot: string,\n): string {\n try {\n return path.dirname(\n require.resolve(\"@dreamboard-games/ui-host-runtime/package.json\"),\n );\n } catch {\n return path.resolve(cliRoot, \"dist/runtime-packages/ui-host-runtime\");\n }\n}\n\nfunction resolvePackageRoot(\n require: NodeJS.Require,\n cliRoot: string,\n specifier: string,\n publicSpecifier: string,\n fallbackRelativePath: string,\n): string {\n try {\n return path.dirname(require.resolve(`${specifier}/package.json`));\n } catch {\n try {\n return path.dirname(require.resolve(`${publicSpecifier}/package.json`));\n } catch {\n return path.resolve(cliRoot, \"..\", \"..\", fallbackRelativePath);\n }\n }\n}\n\nfunction resolvePackageSubpath(\n require: NodeJS.Require,\n cliRoot: string,\n specifier: string,\n publicSpecifier: string,\n fallbackRelativePath: string,\n): string {\n try {\n return require.resolve(specifier);\n } catch {\n try {\n return require.resolve(publicSpecifier);\n } catch {\n return path.resolve(cliRoot, fallbackRelativePath);\n }\n }\n}\n\nfunction resolveCliDependency(\n require: NodeJS.Require,\n cliRoot: string,\n specifier: string,\n fallbackRelativePath: string,\n): string {\n try {\n return require.resolve(specifier);\n } catch {\n return path.resolve(cliRoot, fallbackRelativePath);\n }\n}\n\nfunction resolveDevHostRoot(importMetaUrl: string): string {\n const currentDir = path.dirname(fileURLToPath(importMetaUrl));\n const packagedDirCandidate = path.resolve(currentDir, \"dev-host\");\n if (existsSync(packagedDirCandidate)) return packagedDirCandidate;\n const sourceDirCandidate = path.resolve(currentDir, \"../src/dev-host\");\n return existsSync(sourceDirCandidate) ? sourceDirCandidate : currentDir;\n}\n\nfunction resolveCliRoot(importMetaUrl: string): string {\n let currentDir = path.dirname(fileURLToPath(importMetaUrl));\n\n while (true) {\n if (existsSync(path.join(currentDir, \"package.json\"))) {\n return currentDir;\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return path.resolve(resolveDevHostRoot(importMetaUrl), \"../..\");\n }\n currentDir = parentDir;\n }\n}\n\nfunction resolveRepoRoot(cliRoot: string): string {\n let currentDir = cliRoot;\n\n while (true) {\n if (existsSync(path.join(currentDir, \"pnpm-workspace.yaml\"))) {\n return currentDir;\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return cliRoot;\n }\n currentDir = parentDir;\n }\n}\n","import type { LoggerLike } from \"@dreamboard-games/ui-host-runtime/runtime\";\n\nexport type DevLogEnvelope = {\n source: \"host\" | \"plugin\" | \"sse\";\n level: \"log\" | \"warn\" | \"error\" | \"info\";\n message: string;\n};\n\nexport type DevDiagnosticsLevel = \"errors\" | \"verbose\";\n\nexport function resolveDevDiagnosticsLevel(\n debug: boolean,\n): DevDiagnosticsLevel {\n return debug ? \"verbose\" : \"errors\";\n}\n\nexport function createDevDiagnosticsLogger(\n level: DevDiagnosticsLevel,\n): LoggerLike {\n if (level === \"verbose\") {\n return {\n log: (...args) => console.log(...args),\n warn: (...args) => console.warn(...args),\n error: (...args) => console.error(...args),\n };\n }\n\n return {\n log: () => {},\n warn: () => {},\n error: (...args) => console.error(...args),\n };\n}\n\nexport function shouldRelayDevLog(\n diagnosticsLevel: DevDiagnosticsLevel,\n payload: DevLogEnvelope,\n): boolean {\n return (\n diagnosticsLevel === \"verbose\" ||\n payload.level === \"warn\" ||\n payload.level === \"error\"\n );\n}\n\nexport function formatConsoleArgs(args: unknown[]): string {\n return args.map((value) => stringifyForRelay(value)).join(\" \");\n}\n\nexport function stringifyForRelay(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (value instanceof Error) {\n return value.stack ?? value.message;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n","import path from \"node:path\";\nimport { normalizePath, type Plugin } from \"vite\";\nimport type { DreamboardDevRuntimeConfig } from \"./dev-runtime-config.js\";\n\nexport function createVirtualDevModulesPlugin(options: {\n projectRoot: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n generatedFallbackStylesheetPath: string | null;\n}): Plugin {\n const configModuleId = \"virtual:dreamboard-dev-config\";\n const resolvedConfigModuleId = `\\0${configModuleId}`;\n const projectEntryModuleId = \"virtual:dreamboard-project-entry\";\n const resolvedProjectEntryModuleId = `\\0${projectEntryModuleId}`;\n const projectAppPath = path.resolve(options.projectRoot, \"ui/App.tsx\");\n const projectStylePath = path.resolve(options.projectRoot, \"ui/style.css\");\n\n return {\n name: \"dreamboard-dev-virtual-modules\",\n resolveId(id) {\n if (id === configModuleId) {\n return resolvedConfigModuleId;\n }\n if (id === projectEntryModuleId) {\n return resolvedProjectEntryModuleId;\n }\n return null;\n },\n load(id) {\n if (id === resolvedConfigModuleId) {\n return `export const devConfig = ${JSON.stringify(options.runtimeConfig)};\\nexport default devConfig;\\n`;\n }\n if (id === resolvedProjectEntryModuleId) {\n const fallbackImport = options.generatedFallbackStylesheetPath\n ? `import \"/@fs/${normalizePath(options.generatedFallbackStylesheetPath)}\";\\n`\n : \"\";\n return `${fallbackImport}import { createElement } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { ErrorBoundary } from \"@dreamboard-games/sdk/ui\";\nimport { PluginRuntime } from \"@dreamboard-games/sdk/runtime\";\nimport \"/@fs/${normalizePath(projectStylePath)}\";\nimport App from \"/@fs/${normalizePath(projectAppPath)}\";\n\nconst rootElement = document.getElementById(\"root\");\nif (!rootElement) {\n throw new Error(\"Dreamboard dev plugin root element was not found.\");\n}\n\ncreateRoot(rootElement).render(\n createElement(\n ErrorBoundary,\n null,\n createElement(\n PluginRuntime,\n null,\n createElement(App),\n ),\n ),\n);\n`;\n }\n return null;\n },\n };\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { unlink } from \"node:fs/promises\";\nimport consola from \"consola\";\nimport type { Plugin } from \"vite\";\nimport type { ResolvedConfig } from \"../types.js\";\nimport { createPersistedDevSession } from \"../utils/dev-session.js\";\nimport { exists, readJsonFile, writeJsonFile } from \"../utils/fs.js\";\nimport { isStaleContractArtifactError } from \"../utils/errors.js\";\nimport { resolveDevBearer } from \"./dev-api-proxy-plugin.js\";\nimport {\n shouldRelayDevLog,\n type DevDiagnosticsLevel,\n type DevLogEnvelope,\n} from \"./dev-diagnostics.js\";\nimport type { DreamboardDevRuntimeConfig } from \"./dev-runtime-config.js\";\nimport type { ActiveSession } from \"./dev-host-storage.js\";\n\nconst STALE_DEV_SESSION_RESET_NOTICE =\n \"Resetting disposable dev session because the previous session was created for a stale contract artifact.\";\n\nexport function createDevLogRelayPlugin(options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n diagnosticsLevel: DevDiagnosticsLevel;\n}): Plugin {\n return {\n name: \"dreamboard-dev-log-relay\",\n configureServer(server) {\n server.middlewares.use(\"/__dreamboard_dev/log\", (req, res) => {\n if (req.method !== \"POST\") {\n res.statusCode = 405;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Method not allowed\" }));\n return;\n }\n\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk) => {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n req.on(\"end\", () => {\n try {\n const body = Buffer.concat(chunks).toString(\"utf8\");\n const payload = JSON.parse(body) as Partial<DevLogEnvelope>;\n const normalizedPayload = {\n source: coerceLogSource(payload.source),\n level: coerceLogLevel(payload.level),\n message:\n typeof payload.message === \"string\"\n ? payload.message\n : \"Missing dev log message\",\n } satisfies DevLogEnvelope;\n if (\n shouldRelayDevLog(options.diagnosticsLevel, normalizedPayload)\n ) {\n relayDevLog(normalizedPayload);\n }\n res.statusCode = 204;\n res.end();\n } catch (error) {\n consola.warn(\n `[dev-host] Failed to decode browser log payload: ${formatUnknown(error)}`,\n );\n res.statusCode = 400;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Invalid dev log payload\" }));\n }\n });\n });\n\n server.middlewares.use(\n \"/__dreamboard_dev/session/snapshot\",\n createSnapshotSessionHandler({\n sessionFilePath: options.sessionFilePath,\n runtimeConfig: options.runtimeConfig,\n config: options.config,\n }),\n );\n server.middlewares.use(\n \"/__dreamboard_dev/session/new\",\n createNewSessionHandler({\n sessionFilePath: options.sessionFilePath,\n runtimeConfig: options.runtimeConfig,\n config: options.config,\n }),\n );\n server.middlewares.use(\n \"/__dreamboard_dev/session/start\",\n createStartSessionHandler({\n sessionFilePath: options.sessionFilePath,\n runtimeConfig: options.runtimeConfig,\n config: options.config,\n }),\n );\n },\n };\n}\n\nexport function createSnapshotSessionHandler(options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n}): (req: IncomingMessage, res: ServerResponse) => void {\n return (req, res) => {\n void handleSnapshotSessionRequest(req, res, options);\n };\n}\n\nexport function createNewSessionHandler(options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n}): (req: IncomingMessage, res: ServerResponse) => void {\n return (req, res) => {\n void handleNewSessionRequest(req, res, options);\n };\n}\n\nexport function createStartSessionHandler(options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n}): (req: IncomingMessage, res: ServerResponse) => void {\n return (req, res) => {\n void handleStartSessionRequest(req, res, options);\n };\n}\n\nasync function handleSnapshotSessionRequest(\n req: IncomingMessage,\n res: ServerResponse,\n options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n },\n): Promise<void> {\n if (req.method !== \"GET\") {\n respondJson(res, 405, { error: \"Method not allowed\" });\n return;\n }\n\n try {\n let session = await loadCurrentSession(options);\n const requestedPlayerId = extractQueryParam(req, \"playerId\");\n let snapshot: unknown;\n try {\n snapshot = await fetchBackendJson(\n options.config,\n appendQuery(`/api/sessions/${session.sessionId}/snapshot`, {\n playerId: requestedPlayerId,\n }),\n );\n } catch (error) {\n if (!isStaleContractArtifactError(error)) {\n throw error;\n }\n session = await resetDisposableSessionPointer(options);\n snapshot = await fetchBackendJson(\n options.config,\n appendQuery(`/api/sessions/${session.sessionId}/snapshot`, {\n playerId: requestedPlayerId,\n }),\n );\n }\n if (\n options.runtimeConfig.autoStartGame &&\n isStartableLobbySnapshot(snapshot)\n ) {\n snapshot = await fetchBackendJson(\n options.config,\n `/api/sessions/${session.sessionId}/start`,\n { method: \"POST\" },\n );\n if (requestedPlayerId) {\n snapshot = await fetchBackendJson(\n options.config,\n appendQuery(`/api/sessions/${session.sessionId}/snapshot`, {\n playerId: requestedPlayerId,\n }),\n );\n }\n await persistSessionId(options.sessionFilePath, session.sessionId);\n }\n respondJson(res, 200, attachLocalSeed(snapshot, session.seed ?? null));\n } catch (error) {\n respondJson(res, statusForError(error), { error: formatUnknown(error) });\n }\n}\n\nasync function handleNewSessionRequest(\n req: IncomingMessage,\n res: ServerResponse,\n options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n },\n): Promise<void> {\n if (req.method !== \"POST\") {\n respondJson(res, 405, { error: \"Method not allowed\" });\n return;\n }\n\n try {\n const body = await readJsonBody(req);\n const seed = Number.parseInt(String(body.seed ?? \"\"), 10);\n if (!Number.isSafeInteger(seed)) {\n throw new Error(\"Seed must be a safe integer.\");\n }\n const created = await fetchBackendJson(\n options.config,\n `/api/games/${options.runtimeConfig.gameId}/sessions`,\n {\n method: \"POST\",\n body: {\n compiledResultId: options.runtimeConfig.compiledResultId,\n seed,\n playerCount: options.runtimeConfig.playerCount,\n autoAssignSeats: true,\n setupProfileId: options.runtimeConfig.setupProfileId ?? undefined,\n },\n },\n );\n const sessionId = requireString(\n (created as { sessionId?: unknown }).sessionId,\n \"sessionId\",\n );\n let snapshot = await fetchBackendJson(\n options.config,\n `/api/sessions/${sessionId}/snapshot`,\n );\n if (\n options.runtimeConfig.autoStartGame &&\n isStartableLobbySnapshot(snapshot)\n ) {\n snapshot = await fetchBackendJson(\n options.config,\n `/api/sessions/${sessionId}/start`,\n {\n method: \"POST\",\n },\n );\n }\n await persistSessionId(options.sessionFilePath, sessionId);\n respondJson(res, 200, attachLocalSeed(snapshot, seed));\n } catch (error) {\n respondJson(res, statusForError(error), { error: formatUnknown(error) });\n }\n}\n\nasync function handleStartSessionRequest(\n req: IncomingMessage,\n res: ServerResponse,\n options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n config: ResolvedConfig;\n },\n): Promise<void> {\n if (req.method !== \"POST\") {\n respondJson(res, 405, { error: \"Method not allowed\" });\n return;\n }\n\n try {\n let session = await loadCurrentSession(options);\n let snapshot: unknown;\n try {\n snapshot = await fetchBackendJson(\n options.config,\n `/api/sessions/${session.sessionId}/start`,\n { method: \"POST\" },\n );\n } catch (error) {\n if (!isStaleContractArtifactError(error)) {\n throw error;\n }\n session = await resetDisposableSessionPointer(options);\n snapshot = await fetchBackendJson(\n options.config,\n `/api/sessions/${session.sessionId}/start`,\n { method: \"POST\" },\n );\n }\n await persistSessionId(options.sessionFilePath, session.sessionId);\n respondJson(res, 200, attachLocalSeed(snapshot, session.seed ?? null));\n } catch (error) {\n respondJson(res, statusForError(error), { error: formatUnknown(error) });\n }\n}\n\nasync function readJsonBody(\n req: IncomingMessage,\n): Promise<Record<string, unknown>> {\n const chunks: Buffer[] = [];\n await new Promise<void>((resolve, reject) => {\n req.on(\"data\", (chunk) => {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n req.on(\"end\", () => resolve());\n req.on(\"error\", reject);\n });\n const text = Buffer.concat(chunks).toString(\"utf8\");\n return text ? (JSON.parse(text) as Record<string, unknown>) : {};\n}\n\nfunction requireString(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Missing required field: ${field}`);\n }\n return value;\n}\n\nfunction extractQueryParam(req: IncomingMessage, name: string): string | null {\n const rawUrl = req.url ?? \"\";\n const value = new URL(rawUrl, \"http://dreamboard.local\").searchParams.get(\n name,\n );\n return value?.trim() || null;\n}\n\nfunction appendQuery(\n path: string,\n query: Record<string, string | null | undefined>,\n): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value) {\n params.set(key, value);\n }\n }\n const serialized = params.toString();\n return serialized ? `${path}?${serialized}` : path;\n}\n\nasync function loadCurrentSession(options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n}): Promise<ActiveSession> {\n if (!(await exists(options.sessionFilePath))) {\n return options.runtimeConfig.initialSession;\n }\n\n const payload = await readJsonFile<unknown>(options.sessionFilePath);\n const session = parsePersistedSessionPointer(payload, options.runtimeConfig);\n if (!session) {\n throw new Error(\"Session file did not contain a valid session pointer.\");\n }\n return session;\n}\n\nasync function persistSessionId(\n sessionFilePath: string,\n sessionId: string,\n): Promise<void> {\n await writeJsonFile(\n sessionFilePath,\n createPersistedDevSession({ sessionId }),\n );\n}\n\nasync function resetDisposableSessionPointer(options: {\n sessionFilePath: string;\n runtimeConfig: DreamboardDevRuntimeConfig;\n}): Promise<ActiveSession> {\n await unlink(options.sessionFilePath).catch(() => undefined);\n consola.info(STALE_DEV_SESSION_RESET_NOTICE);\n return options.runtimeConfig.initialSession;\n}\n\nasync function fetchBackendJson(\n config: ResolvedConfig,\n path: string,\n options: {\n method?: \"GET\" | \"POST\";\n body?: Record<string, unknown>;\n } = {},\n): Promise<unknown> {\n const bearer = await resolveDevBearer(config);\n if (bearer.kind === \"permanent_invalid\") {\n throw new HttpError(401, bearer.message);\n }\n\n const response = await fetch(`${config.apiBaseUrl}${path}`, {\n method: options.method ?? \"GET\",\n headers: {\n ...(bearer.token ? { authorization: `Bearer ${bearer.token}` } : {}),\n ...(options.body ? { \"content-type\": \"application/json\" } : {}),\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n if (!response.ok) {\n const text = await response.text().catch(() => \"\");\n throw new HttpError(\n response.status,\n text || `Backend request failed with ${response.status}`,\n );\n }\n return response.json();\n}\n\nfunction attachLocalSeed(snapshot: unknown, seed: number | null): unknown {\n if (!snapshot || typeof snapshot !== \"object\") {\n return snapshot;\n }\n const context = (snapshot as { context?: unknown }).context;\n if (!context || typeof context !== \"object\") {\n return snapshot;\n }\n return {\n ...(snapshot as Record<string, unknown>),\n context: {\n ...(context as Record<string, unknown>),\n seed,\n },\n };\n}\n\nfunction isStartableLobbySnapshot(snapshot: unknown): boolean {\n if (!snapshot || typeof snapshot !== \"object\") {\n return false;\n }\n const context = (snapshot as { context?: { phase?: unknown } }).context;\n const lobby = (snapshot as { lobby?: { canStart?: unknown } }).lobby;\n return context?.phase === \"lobby\" && lobby?.canStart === true;\n}\n\nfunction respondJson(\n res: ServerResponse,\n statusCode: number,\n payload: unknown,\n): void {\n res.statusCode = statusCode;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify(payload));\n}\n\nfunction statusForError(error: unknown): number {\n return error instanceof HttpError ? error.statusCode : 500;\n}\n\nclass HttpError extends Error {\n constructor(\n readonly statusCode: number,\n message: string,\n ) {\n super(message);\n }\n}\n\nfunction parsePersistedSessionPointer(\n value: unknown,\n runtimeConfig: DreamboardDevRuntimeConfig,\n): DreamboardDevRuntimeConfig[\"initialSession\"] | null {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n const sessionId = (value as { sessionId?: unknown }).sessionId;\n if (typeof sessionId !== \"string\" || sessionId.length === 0) {\n return null;\n }\n return {\n sessionId,\n shortCode: \"Unknown\",\n gameId: runtimeConfig.gameId,\n seed: null,\n };\n}\n\nfunction relayDevLog(payload: DevLogEnvelope): void {\n const formatted = `[dev:${payload.source}] ${payload.message}`;\n switch (payload.level) {\n case \"error\":\n consola.error(formatted);\n break;\n case \"warn\":\n consola.warn(formatted);\n break;\n case \"info\":\n consola.info(formatted);\n break;\n default:\n consola.log(formatted);\n break;\n }\n}\n\nfunction coerceLogSource(value: unknown): DevLogEnvelope[\"source\"] {\n return value === \"host\" || value === \"plugin\" || value === \"sse\"\n ? value\n : \"host\";\n}\n\nfunction coerceLogLevel(value: unknown): DevLogEnvelope[\"level\"] {\n return value === \"warn\" ||\n value === \"error\" ||\n value === \"info\" ||\n value === \"log\"\n ? value\n : \"log\";\n}\n\nfunction formatUnknown(value: unknown): string {\n if (value instanceof Error) {\n return value.stack ?? value.message;\n }\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { normalizePath } from \"vite\";\n\nexport function prepareFallbackStylesheet(options: {\n projectRoot: string;\n repoRoot: string;\n}): string | null {\n const projectStylePath = path.resolve(options.projectRoot, \"ui/style.css\");\n if (existsSync(projectStylePath)) {\n return null;\n }\n\n const generatedDir = path.resolve(options.repoRoot, \".dreamboard-dev\");\n mkdirSync(generatedDir, { recursive: true });\n\n const fingerprint = createHash(\"sha256\")\n .update(options.projectRoot, \"utf8\")\n .digest(\"hex\")\n .slice(0, 8);\n const instanceId = randomUUID().replaceAll(\"-\", \"\").slice(0, 8);\n const generatedPath = path.join(\n generatedDir,\n `plugin-styles-${fingerprint}-${instanceId}.css`,\n );\n const sharedStylesPath = normalizePath(\n path.resolve(\n options.repoRoot,\n \"node_modules/@dreamboard-games/sdk/dist/ui/plugin-styles.css\",\n ),\n );\n const uiSourcePath = normalizePath(\n path.resolve(options.projectRoot, \"ui/**/*.{ts,tsx}\"),\n );\n const sharedSourcePath = normalizePath(\n path.resolve(options.projectRoot, \"shared/**/*.{ts,tsx}\"),\n );\n\n writeFileSync(\n generatedPath,\n [\n `@import \"/@fs/${sharedStylesPath}\";`,\n \"\",\n `@source \"${uiSourcePath}\";`,\n `@source \"${sharedSourcePath}\";`,\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n\n return generatedPath;\n}\n","import path from \"node:path\";\nimport type { Plugin } from \"vite\";\n\nexport function createDevHmrGuardPlugin(options: {\n projectRoot: string;\n}): Plugin {\n return {\n name: \"dreamboard-dev-hmr-guard\",\n handleHotUpdate(context) {\n if (shouldHandleProjectHotUpdate(options.projectRoot, context.file)) {\n return undefined;\n }\n\n context.server.config.logger.info(\n `[dreamboard] ignored HMR outside project: ${path.relative(\n options.projectRoot,\n context.file,\n )}`,\n );\n return [];\n },\n };\n}\n\nexport function shouldHandleProjectHotUpdate(\n projectRoot: string,\n file: string,\n): boolean {\n const normalizedProjectRoot = path.resolve(projectRoot);\n const normalizedFile = path.resolve(file);\n const relativePath = path.relative(normalizedProjectRoot, normalizedFile);\n const isInsideProject =\n relativePath === \"\" ||\n (relativePath.length > 0 &&\n !relativePath.startsWith(\"..\") &&\n !path.isAbsolute(relativePath));\n\n if (!isInsideProject) {\n return false;\n }\n\n const pathSegments = relativePath.split(path.sep);\n return (\n !pathSegments.includes(\".dreamboard\") &&\n !pathSegments.includes(\"node_modules\")\n );\n}\n","import path from \"node:path\";\nimport { importTypeScriptModule } from \"../../utils/ts-module-loader.js\";\n\nconst GAME_CONTRACT_ENTRY_PATH = path.join(\"app\", \"game-contract.ts\");\n\nfunction normalizeErrorMessage(error: unknown): string {\n const rawMessage =\n error instanceof Error ? error.message : String(error ?? \"Unknown error\");\n return (\n rawMessage\n .split(\"\\n\")\n .map((line) => line.trim())\n .find(Boolean)\n ?.replace(/^Error:\\s*/u, \"\") ?? \"Unknown error\"\n );\n}\n\nfunction isManifestScopedIdBrandingError(message: string): boolean {\n return (\n message.includes(\"defineGameContract:\") &&\n message.includes(\"manifest-scoped\") &&\n (message.includes(\"uses a raw z.string()\") ||\n message.includes(\"uses z.array(z.string())\"))\n );\n}\n\nexport async function assertReducerContractPreflight(\n projectRoot: string,\n): Promise<void> {\n const entryPath = path.join(projectRoot, GAME_CONTRACT_ENTRY_PATH);\n\n try {\n await importTypeScriptModule(entryPath);\n } catch (error) {\n const message = normalizeErrorMessage(error);\n if (isManifestScopedIdBrandingError(message)) {\n throw new Error(\n [\n `Dreamboard could not validate \\`${GAME_CONTRACT_ENTRY_PATH}\\` during \\`dreamboard sync\\`.`,\n \"This happens because a state field name looks like a manifest-scoped id, but the schema uses a plain string instead of the manifest-backed id schema.\",\n \"Workaround: use `gameContract.schemas.<id>` (or `manifest.ids.<id>`) for manifest ids. If the field is intentionally free-form text, rename it so it does not look like a manifest id field.\",\n `Original error: ${message}`,\n ].join(\" \"),\n );\n }\n\n throw new Error(\n [\n `Dreamboard could not validate \\`${GAME_CONTRACT_ENTRY_PATH}\\` during \\`dreamboard sync\\`.`,\n \"Fix the authored reducer contract module so it can be imported locally, then run `dreamboard sync` again.\",\n `Original error: ${message}`,\n ].join(\" \"),\n );\n }\n}\n","import path from \"node:path\";\nimport type {\n GameTopologyManifest,\n SetupProfileSpec,\n} from \"@dreamboard-games/sdk/types\";\nimport { isPerPlayer, perPlayerSchema } from \"@dreamboard-games/sdk/reducer\";\nimport {\n type ReducerBundleContract,\n type ReducerWire as Wire,\n} from \"@dreamboard-games/sdk/reducer-contract\";\nimport { materializeManifestTable } from \"@dreamboard-games/sdk/codegen\";\nimport { z } from \"zod\";\nimport { importTypeScriptModule } from \"../../utils/ts-module-loader.js\";\n\n// Opt in to SDK authoring warnings (e.g. concrete dependent-choice defaults).\n// Trusted reducer code cannot read process.env, so the SDK gates authoring\n// warnings on this host-set global instead.\n(globalThis as Record<string, unknown>).__DREAMBOARD_AUTHORING_WARNINGS__ =\n true;\n\n/**\n * Path to the reducer bundle entry, relative to the project root. Matches\n * the scaffold produced by `dreamboard new`.\n */\nconst REDUCER_BUNDLE_ENTRY_PATH = path.join(\"app\", \"index.ts\");\n\n/**\n * Deterministic rng seed used to drive the reducer during preflight.\n * Kept stable so local preflight failures reproduce across CLI runs.\n */\nconst PREFLIGHT_RNG_SEED = 1337;\n\n/**\n * Phase of the preflight smoke test that a failure occurred in.\n */\nexport type ReducerBundleSmokePhase =\n | \"BUILD_GAME_STATE\"\n | \"INITIALIZE\"\n | \"PROJECT_SEATS\"\n | \"VALIDATE_VIEW\";\n\nexport interface ReducerBundleSmokeScenario {\n readonly setupProfileId: string | null;\n readonly playerCount: number;\n}\n\nexport interface ReducerBundleSmokeFailure {\n readonly scenario: ReducerBundleSmokeScenario;\n readonly phase: ReducerBundleSmokePhase;\n readonly playerId?: string;\n readonly headline: string;\n readonly detail?: string;\n}\n\n/**\n * Shape of a single seat's slice in `projectSeatsDynamic(...)`. Only `view`\n * is consumed by the preflight, but the full wire DTO keeps local tests\n * aligned with the canonical reducer boundary.\n */\nexport type ReducerBundleSeatProjection = Wire.SeatProjection;\n\n/** Result of calling `bundle.projectSeatsDynamic({ state, playerIds })`. */\nexport type ReducerBundleSeatProjectionBundle = Wire.SeatProjectionBundle;\n\n/**\n * Minimal structural shape the preflight needs from the authored reducer\n * bundle. Matches the subset of `createReducerBundle(game)` used by the\n * reducer runtime.\n */\nexport type ReducerBundleLike = Pick<\n ReducerBundleContract,\n \"initialize\" | \"projectSeatsDynamic\"\n>;\n\nfunction buildPlayerIds(playerCount: number): string[] {\n const ids: string[] = [];\n for (let index = 1; index <= playerCount; index += 1) {\n ids.push(`player-${index}`);\n }\n return ids;\n}\n\n/**\n * Build the matrix of scenarios to drive. Exported for tests so we can\n * assert scenario generation without loading a full reducer bundle.\n */\nexport function buildScenarios(\n manifest: GameTopologyManifest,\n): ReducerBundleSmokeScenario[] {\n const rawCounts = [\n manifest.players?.minPlayers,\n manifest.players?.maxPlayers,\n ].filter(\n (count): count is number =>\n typeof count === \"number\" && Number.isFinite(count) && count > 0,\n );\n const playerCounts = Array.from(new Set(rawCounts));\n if (playerCounts.length === 0) {\n return [];\n }\n const profiles: SetupProfileSpec[] = manifest.setupProfiles ?? [];\n const profileIds: Array<string | null> =\n profiles.length > 0 ? profiles.map((profile) => profile.id) : [null];\n\n const scenarios: ReducerBundleSmokeScenario[] = [];\n const seen = new Set<string>();\n for (const profileId of profileIds) {\n for (const count of playerCounts) {\n const key = `${profileId ?? \"<default>\"}:${count}`;\n if (seen.has(key)) continue;\n seen.add(key);\n scenarios.push({ setupProfileId: profileId, playerCount: count });\n }\n }\n return scenarios;\n}\n\nfunction describeScenario(scenario: ReducerBundleSmokeScenario): string {\n const profileDesc = scenario.setupProfileId\n ? `setup profile '${scenario.setupProfileId}'`\n : \"no setup profile\";\n return `${profileDesc}, ${scenario.playerCount} player${\n scenario.playerCount === 1 ? \"\" : \"s\"\n }`;\n}\n\nfunction summarizeError(error: unknown): { headline: string; detail?: string } {\n if (error instanceof Error) {\n const firstLine =\n error.message\n .split(\"\\n\")\n .map((line) => line.trim())\n .find((line) => line.length > 0) ?? \"Unknown failure\";\n const detail =\n error.stack && error.stack !== error.message ? error.stack : undefined;\n return { headline: firstLine, detail };\n }\n return { headline: String(error ?? \"Unknown failure\") };\n}\n\n/**\n * Walk `view` recursively and, for every embedded `PerPlayer<T>` shape,\n * assert its seat list matches `expectedPlayerIds` using\n * `perPlayerSchema({ players })`. Returns `null` on success, or a headline\n * describing the first mismatch.\n *\n * This catches the class of bug where an author returns a `PerPlayer<T>`\n * that was built from the wrong seat list (e.g. a manifest-derived\n * `maxPlayers` literal union) while the runtime session has a different\n * number of seats. The Zod bound schema produces an identical error shape\n * to the one the backend raises in production so authors see the same\n * diagnostic locally.\n */\nexport function assertViewPerPlayerSeatsValid(\n view: unknown,\n expectedPlayerIds: readonly string[],\n breadcrumb: string[] = [],\n): string | null {\n if (view === null || view === undefined) {\n return null;\n }\n\n if (isPerPlayer(view)) {\n const schema = perPlayerSchema(z.unknown(), {\n players: expectedPlayerIds as never,\n });\n const result = schema.safeParse(view);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n const location =\n breadcrumb.length > 0 ? ` at view.${breadcrumb.join(\".\")}` : \"\";\n const message = firstIssue?.message ?? \"PerPlayer seat mismatch\";\n return `PerPlayer seat mismatch${location}: ${message}`;\n }\n return null;\n }\n\n if (Array.isArray(view)) {\n for (let index = 0; index < view.length; index += 1) {\n const result = assertViewPerPlayerSeatsValid(\n view[index],\n expectedPlayerIds,\n [...breadcrumb, `[${index}]`],\n );\n if (result) return result;\n }\n return null;\n }\n\n if (typeof view === \"object\") {\n for (const [key, value] of Object.entries(\n view as Record<string, unknown>,\n )) {\n const result = assertViewPerPlayerSeatsValid(value, expectedPlayerIds, [\n ...breadcrumb,\n key,\n ]);\n if (result) return result;\n }\n return null;\n }\n\n return null;\n}\n\nfunction identityShuffle<Value>(values: readonly Value[]): Value[] {\n return [...values];\n}\n\n/**\n * Drive an already-loaded reducer bundle through the provided scenarios.\n * Shared between the full `runReducerBundleSmoke` entrypoint and the\n * unit tests, which feed a fake bundle directly.\n *\n * For each (setup profile × player count) scenario this:\n *\n * 1. materializes an initial table via `materializeManifestTable`,\n * 2. calls `bundle.initialize({ table, playerIds, rngSeed, setup })`,\n * 3. calls `bundle.projectSeatsDynamic({ state, playerIds })` once, and\n * 4. validates any embedded `PerPlayer<T>` views match the runtime seat\n * list using `perPlayerSchema({ players: playerIds })`.\n *\n * Failures are collected instead of thrown so authors get the full list\n * of broken scenarios in one preflight pass.\n */\nexport async function driveReducerBundleThroughScenarios(options: {\n manifest: GameTopologyManifest;\n bundle: ReducerBundleLike;\n scenarios: readonly ReducerBundleSmokeScenario[];\n rngSeed?: number;\n}): Promise<ReducerBundleSmokeFailure[]> {\n const { manifest, bundle, scenarios } = options;\n const rngSeed = options.rngSeed ?? PREFLIGHT_RNG_SEED;\n\n const failures: ReducerBundleSmokeFailure[] = [];\n const tableCache = new Map<\n number,\n { table: unknown; playerIds: string[] } | { error: unknown }\n >();\n\n for (const scenario of scenarios) {\n let tableEntry = tableCache.get(scenario.playerCount);\n if (!tableEntry) {\n try {\n const playerIds = buildPlayerIds(scenario.playerCount);\n // JSON-roundtrip the materialized table to mirror the backend wire\n // boundary: real flows serialize the table over HTTP, which drops\n // explicit `undefined` property values (e.g. optional card text) that\n // the bundle's strict JSON state schema would otherwise reject.\n const table: unknown = JSON.parse(\n JSON.stringify(\n materializeManifestTable({\n manifest,\n playerIds,\n shuffleItems: identityShuffle,\n }),\n ),\n );\n tableEntry = { table, playerIds };\n } catch (error) {\n tableEntry = { error };\n }\n tableCache.set(scenario.playerCount, tableEntry);\n }\n if (\"error\" in tableEntry) {\n const summary = summarizeError(tableEntry.error);\n failures.push({\n scenario,\n phase: \"BUILD_GAME_STATE\",\n headline: summary.headline,\n detail: summary.detail,\n });\n continue;\n }\n\n const { table, playerIds } = tableEntry;\n\n let sessionState: unknown;\n try {\n sessionState = await bundle.initialize({\n table: table as Wire.JsonValue,\n playerIds: [...playerIds],\n rngSeed,\n setup: scenario.setupProfileId\n ? { profileId: scenario.setupProfileId, optionValues: {} }\n : null,\n });\n } catch (error) {\n const summary = summarizeError(error);\n failures.push({\n scenario,\n phase: \"INITIALIZE\",\n headline: summary.headline,\n detail: summary.detail,\n });\n continue;\n }\n\n let projection: ReducerBundleSeatProjectionBundle | undefined;\n try {\n projection = bundle.projectSeatsDynamic({\n state: sessionState as Wire.ReducerSessionState,\n playerIds: [...playerIds],\n });\n } catch (error) {\n const summary = summarizeError(error);\n failures.push({\n scenario,\n phase: \"PROJECT_SEATS\",\n headline: summary.headline,\n detail: summary.detail,\n });\n continue;\n }\n\n const seats = projection?.seats ?? {};\n for (const playerId of playerIds) {\n const seat = seats[playerId];\n if (!seat) {\n failures.push({\n scenario,\n phase: \"PROJECT_SEATS\",\n playerId,\n headline: `projectSeatsDynamic() did not return an entry for seat '${playerId}'.`,\n });\n continue;\n }\n const mismatch = assertViewPerPlayerSeatsValid(seat.view, playerIds);\n if (mismatch) {\n failures.push({\n scenario,\n phase: \"VALIDATE_VIEW\",\n playerId,\n headline: mismatch,\n });\n }\n }\n }\n\n return failures;\n}\n\n/**\n * Import the authored reducer bundle from `projectRoot/app/index.ts` and\n * drive it through every (setup profile × player count) scenario the\n * manifest declares. Returns the collected failures without throwing so\n * callers can decide whether to surface them.\n */\nexport async function runReducerBundleSmoke(options: {\n projectRoot: string;\n manifest: GameTopologyManifest;\n}): Promise<ReducerBundleSmokeFailure[]> {\n const { projectRoot, manifest } = options;\n const scenarios = buildScenarios(manifest);\n if (scenarios.length === 0) {\n return [];\n }\n\n const entryPath = path.join(projectRoot, REDUCER_BUNDLE_ENTRY_PATH);\n let module: { default?: ReducerBundleLike };\n try {\n module = await importTypeScriptModule<{ default?: ReducerBundleLike }>(\n entryPath,\n );\n } catch (error) {\n const summary = summarizeError(error);\n throw new Error(\n [\n `Dreamboard could not import \\`${REDUCER_BUNDLE_ENTRY_PATH}\\` during \\`dreamboard sync\\`.`,\n \"Fix the reducer bundle entry so it can be imported locally, then run `dreamboard sync` again.\",\n `Original error: ${summary.headline}`,\n ].join(\" \"),\n );\n }\n const bundle = module.default;\n if (!bundle || typeof bundle.initialize !== \"function\") {\n throw new Error(\n [\n `\\`${REDUCER_BUNDLE_ENTRY_PATH}\\` does not export a reducer bundle as its default export.`,\n \"Export `createReducerBundle(game)` from `app/index.ts` so the compile pipeline can smoke-test it.\",\n ].join(\" \"),\n );\n }\n\n return driveReducerBundleThroughScenarios({ manifest, bundle, scenarios });\n}\n\nfunction formatFailureLines(\n failures: readonly ReducerBundleSmokeFailure[],\n): string {\n return failures\n .map((failure) => {\n const location = failure.playerId ? ` (seat ${failure.playerId})` : \"\";\n return `• [${failure.phase}] ${describeScenario(failure.scenario)}${location}: ${failure.headline}`;\n })\n .join(\"\\n\");\n}\n\n/**\n * Preflight wrapper used by `dreamboard sync`. Runs\n * `runReducerBundleSmoke` and throws an aggregated error if any scenario\n * failed so the author sees every broken seat/profile in one shot.\n *\n * Sync already guarantees that the authored contract imports cleanly\n * (via `assertReducerContractPreflight`) and that `tsc --noEmit` is\n * green (via `runLocalTypecheck`) before this runs, so failures from\n * this step are always runtime-shaped (`initialize`/`projectSeatsDynamic` rejecting,\n * `perPlayer` seat mismatches, …) rather than static type or import\n * errors.\n */\nexport async function assertReducerBundleSmoke(options: {\n projectRoot: string;\n manifest: GameTopologyManifest;\n}): Promise<void> {\n const failures = await runReducerBundleSmoke(options);\n if (failures.length === 0) {\n return;\n }\n throw new Error(\n [\n \"Reducer bundle preflight failed during `dreamboard sync`.\",\n \"Fix the reported scenarios locally before syncing so the backend does not catch them after start-game:\",\n formatFailureLines(failures),\n ].join(\"\\n\"),\n );\n}\n","import { RULE_FILE } from \"../../constants.js\";\nimport {\n isAllowedGamePath,\n isDynamicGeneratedPath,\n} from \"./scaffold-ownership.js\";\n\n/**\n * Single definition of what belongs in an uploaded source revision, shared by\n * `dev` and `sync`. The compiler consumes the uploaded workspace as-is and\n * does not regenerate codegen outputs, so dynamic generated files (manifest\n * contract, ui-contract, framework tsconfigs) must always be included.\n */\nexport function isSourceRevisionPath(filePath: string): boolean {\n return filePath !== RULE_FILE && isAllowedGamePath(filePath);\n}\n\n/**\n * Files that must be upserted on every sync even when the local diff reports\n * them unchanged: registry configuration and regenerated codegen outputs.\n */\nexport function shouldAlwaysUpsertSourcePath(filePath: string): boolean {\n return filePath === \".npmrc\" || isDynamicGeneratedPath(filePath);\n}\n","import path from \"node:path\";\nimport { getSessionSnapshot } from \"@dreamboard-games/api-client\";\nimport { defineCommand } from \"citty\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { PROJECT_DIR_NAME } from \"../constants.js\";\nimport { loadGlobalConfig } from \"../config/global-config.js\";\nimport { getStoredSession } from \"../config/credential-store.js\";\nimport {\n findProjectRoot,\n loadProjectConfig,\n} from \"../config/project-config.js\";\nimport {\n configureClient,\n requireAuth,\n resolveConfig,\n} from \"../config/resolve.js\";\nimport { parseJoinCommandArgs } from \"../flags.js\";\nimport { runJoinJsonlSession } from \"../services/join/jsonl-bot-session.js\";\nimport { loadPersistedDevSession } from \"../utils/dev-session.js\";\nimport { toDreamboardApiError } from \"../utils/errors.js\";\n\nexport default defineCommand({\n meta: {\n name: \"join\",\n description: \"Join an existing game session as a JSONL bot client\",\n },\n args: {\n session: {\n type: \"string\",\n description:\n \"Backend session id to join (defaults to .dreamboard/dev/session.json)\",\n },\n player: {\n type: \"string\",\n description: \"Player id this bot controls\",\n required: true,\n },\n \"raw-events\": {\n type: \"boolean\",\n description:\n \"Stream raw backend gameplay events instead of compact bot.gameplay events\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseJoinCommandArgs(args);\n const projectRoot = await findProjectRoot(process.cwd());\n const [globalConfig, storedSession, projectConfig] = await Promise.all([\n loadGlobalConfig(),\n getStoredSession(),\n projectRoot ? loadProjectConfig(projectRoot) : Promise.resolve(undefined),\n ]);\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n projectConfig,\n storedSession,\n );\n requireAuth(config);\n await configureClient(config);\n const sessionId =\n parsedArgs.session ?? (await resolveDefaultSessionId(projectRoot));\n const playerId = normalizeJoinPlayerId(parsedArgs.player);\n await assertKnownPlayerId(sessionId, playerId);\n\n const abortController = new AbortController();\n const abort = () => abortController.abort();\n process.once(\"SIGINT\", abort);\n process.once(\"SIGTERM\", abort);\n try {\n await runJoinJsonlSession({\n sessionId,\n playerId,\n rawEvents: parsedArgs[\"raw-events\"],\n signal: abortController.signal,\n });\n } finally {\n process.off(\"SIGINT\", abort);\n process.off(\"SIGTERM\", abort);\n }\n },\n});\n\nasync function resolveDefaultSessionId(\n projectRoot: string | null,\n): Promise<string> {\n if (!projectRoot) {\n throw new Error(\n \"No session id provided and this directory is not a Dreamboard project. Pass --session or run from a workspace with .dreamboard/dev/session.json.\",\n );\n }\n\n const sessionFilePath = path.join(\n projectRoot,\n PROJECT_DIR_NAME,\n \"dev\",\n \"session.json\",\n );\n const persistedSession = await loadPersistedDevSession(sessionFilePath);\n if (!persistedSession) {\n throw new Error(\n \"No session id provided and no Dreamboard dev session was found. Pass --session or run `dreamboard dev` from this project first.\",\n );\n }\n return persistedSession.sessionId;\n}\n\nfunction normalizeJoinPlayerId(player: string): string {\n return /^\\d+$/.test(player) ? `player-${player}` : player;\n}\n\nasync function assertKnownPlayerId(\n sessionId: string,\n playerId: string,\n): Promise<void> {\n const {\n data: snapshot,\n error,\n response,\n } = await getSessionSnapshot({\n path: { sessionId },\n });\n if (error || !snapshot) {\n throw toDreamboardApiError(\n error,\n response,\n `Failed to load session snapshot for session ${sessionId}.`,\n );\n }\n\n const playerIds = snapshot.lobby.seats.map((seat) => seat.playerId);\n if (!playerIds.includes(playerId)) {\n throw new Error(\n `Unknown player id '${playerId}' for session ${sessionId}. Available players: ${playerIds.join(\", \") || \"none\"}.`,\n );\n }\n}\n","import { createInterface } from \"node:readline\";\nimport { randomUUID } from \"node:crypto\";\nimport {\n type HostPlayerGameplayView,\n type HostSessionEvent,\n type InteractionDescriptor,\n} from \"@dreamboard-games/api-client\";\nimport { toApiProblem } from \"../../utils/errors.js\";\nimport { subscribeToCliSessionEvents } from \"../../utils/session-event-stream.js\";\nimport {\n submitGameplayAuthorityAction,\n type SubmitGameplayAuthorityActionOptions,\n type SubmitGameplayAuthorityActionResult,\n} from \"../gameplay-authority-submit.js\";\n\ntype JsonValue =\n | null\n | boolean\n | number\n | string\n | JsonValue[]\n | { [key: string]: JsonValue };\n\ntype JsonObject = { [key: string]: JsonValue };\ntype RequestId = string | number;\n\ntype JoinRequest = {\n id?: unknown;\n method?: unknown;\n params?: unknown;\n};\n\ntype JoinProtocolError = {\n code: string;\n message: string;\n details?: JsonObject;\n};\n\ntype JoinSuccessEnvelope = {\n id: RequestId;\n result: JsonValue;\n};\n\ntype JoinErrorEnvelope = {\n id: RequestId | null;\n error: JoinProtocolError;\n};\n\ntype JoinEventEnvelope = {\n type: \"event\";\n event: JsonObject;\n};\n\ntype JoinStreamErrorEnvelope = {\n type: \"error\";\n error: JoinProtocolError;\n};\n\ntype ProtocolEnvelope =\n | JoinSuccessEnvelope\n | JoinErrorEnvelope\n | JoinEventEnvelope\n | JoinStreamErrorEnvelope;\n\ntype SubscribeToEvents = typeof subscribeToCliSessionEvents;\ntype SubmitPlayerAction = (\n options: SubmitGameplayAuthorityActionOptions,\n) => Promise<SubmitGameplayAuthorityActionResult>;\n\nexport type JoinJsonlSessionOptions = {\n sessionId: string;\n playerId: string;\n rawEvents?: boolean;\n input?: NodeJS.ReadableStream;\n output?: NodeJS.WritableStream;\n errorOutput?: NodeJS.WritableStream;\n subscribeToEvents?: SubscribeToEvents;\n submitPlayerAction?: SubmitPlayerAction;\n signal?: AbortSignal;\n};\n\nclass JsonlWriter {\n private writeChain: Promise<void> = Promise.resolve();\n\n constructor(private readonly output: NodeJS.WritableStream) {}\n\n write(envelope: ProtocolEnvelope): Promise<void> {\n this.writeChain = this.writeChain.then(\n () =>\n new Promise<void>((resolve, reject) => {\n const line = `${JSON.stringify(normalizeEnvelopeForJsonl(envelope))}\\n`;\n const flushed = this.output.write(line, (error?: Error | null) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n if (!flushed) {\n this.output.once(\"error\", reject);\n }\n }),\n );\n return this.writeChain;\n }\n}\n\nfunction normalizeEnvelopeForJsonl(\n envelope: ProtocolEnvelope,\n): ProtocolEnvelope {\n if (\"event\" in envelope) {\n return {\n ...envelope,\n event: normalizeProtocolValue(envelope.event) as JsonObject,\n };\n }\n if (\"result\" in envelope) {\n return {\n ...envelope,\n result: normalizeProtocolValue(envelope.result),\n };\n }\n return envelope;\n}\n\nfunction normalizeProtocolValue(value: JsonValue): JsonValue {\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeProtocolValue(entry));\n }\n if (!isJsonObject(value)) {\n return value;\n }\n\n const normalized: JsonObject = {};\n for (const [key, entry] of Object.entries(value)) {\n if (\n (key === \"view\" || key === \"boardStatic\") &&\n typeof entry === \"string\"\n ) {\n normalized[key] = parseJsonField(key, entry);\n continue;\n }\n if (key === \"gameplay\" && isJsonObject(entry)) {\n normalized[key] = normalizeGameplaySnapshotForJsonl(entry);\n continue;\n }\n normalized[key] = normalizeProtocolValue(entry);\n }\n return normalized;\n}\n\nfunction normalizeGameplaySnapshotForJsonl(gameplay: JsonObject): JsonObject {\n const normalized: JsonObject = {};\n for (const [key, value] of Object.entries(gameplay)) {\n if (\n (key === \"view\" || key === \"boardStatic\") &&\n typeof value === \"string\"\n ) {\n normalized[key] = parseJsonField(key, value);\n continue;\n }\n normalized[key] = normalizeProtocolValue(value);\n }\n return normalized;\n}\n\nfunction parseJsonField(field: string, value: string): JsonValue {\n try {\n return JSON.parse(value) as JsonValue;\n } catch (error) {\n throw protocolError(\n \"INVALID_GAMEPLAY_JSON\",\n `Gameplay field '${field}' was not valid JSON: ${formatUnknown(error)}`,\n );\n }\n}\n\nexport async function runJoinJsonlSession(\n options: JoinJsonlSessionOptions,\n): Promise<void> {\n const input = options.input ?? process.stdin;\n const writer = new JsonlWriter(options.output ?? process.stdout);\n const errorOutput = options.errorOutput ?? process.stderr;\n const abortController = new AbortController();\n const inFlightIds = new Set<RequestId>();\n const pendingRequests = new Set<Promise<void>>();\n const state = new JoinBotState(options.playerId);\n const subscribe = options.subscribeToEvents ?? subscribeToCliSessionEvents;\n const submitAction =\n options.submitPlayerAction ?? submitGameplayAuthorityAction;\n\n const rl = createInterface({\n input,\n crlfDelay: Infinity,\n terminal: false,\n });\n const abort = () => {\n abortController.abort();\n rl.close();\n };\n\n const eventPump = pumpSessionEvents({\n sessionId: options.sessionId,\n playerId: options.playerId,\n writer,\n state,\n subscribe,\n rawEvents: options.rawEvents ?? false,\n signal: abortController.signal,\n errorOutput,\n })\n .catch((error) => {\n errorOutput.write(\n `dreamboard join event pump failed: ${formatUnknown(error)}\\n`,\n );\n })\n .finally(() => {\n if (!abortController.signal.aborted) {\n abort();\n }\n });\n options.signal?.addEventListener(\"abort\", abort, { once: true });\n if (options.signal?.aborted) {\n abort();\n }\n\n try {\n for await (const line of rl) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n\n let parsed: JoinRequest;\n try {\n parsed = JSON.parse(trimmed) as JoinRequest;\n } catch (error) {\n void writer.write({\n id: null,\n error: protocolError(\n \"INVALID_JSON\",\n error instanceof Error ? error.message : \"Invalid JSON line.\",\n ),\n });\n continue;\n }\n\n const requestId = parseRequestId(parsed.id);\n if (!requestId.ok) {\n void writer.write({\n id: null,\n error: requestId.error,\n });\n continue;\n }\n\n if (inFlightIds.has(requestId.value)) {\n void writer.write({\n id: requestId.value,\n error: protocolError(\n \"DUPLICATE_IN_FLIGHT_ID\",\n `Request id '${String(requestId.value)}' is already in flight.`,\n ),\n });\n continue;\n }\n\n inFlightIds.add(requestId.value);\n const requestPromise = handleRequest({\n request: parsed,\n requestId: requestId.value,\n sessionId: options.sessionId,\n playerId: options.playerId,\n state,\n submitAction,\n })\n .then((result) =>\n writer.write({\n id: requestId.value,\n result,\n }),\n )\n .catch((error) =>\n writer.write({\n id: requestId.value,\n error: coerceProtocolError(error),\n }),\n )\n .finally(() => {\n inFlightIds.delete(requestId.value);\n pendingRequests.delete(requestPromise);\n });\n pendingRequests.add(requestPromise);\n }\n\n await Promise.all([...pendingRequests]);\n } finally {\n rl.close();\n abortController.abort();\n options.signal?.removeEventListener(\"abort\", abort);\n void eventPump;\n }\n}\n\nasync function pumpSessionEvents(options: {\n sessionId: string;\n playerId: string;\n writer: JsonlWriter;\n state: JoinBotState;\n subscribe: SubscribeToEvents;\n rawEvents: boolean;\n signal: AbortSignal;\n errorOutput: NodeJS.WritableStream;\n}): Promise<void> {\n try {\n let lastSseError: unknown;\n const subscription = await options.subscribe({\n sessionId: options.sessionId,\n playerId: options.playerId,\n signal: options.signal,\n clientSource: \"dreamboard-join\",\n onSseError: (error) => {\n lastSseError = error;\n },\n sseDefaultRetryDelay: 250,\n sseMaxRetryAttempts: 1,\n });\n const { stream } = subscription;\n\n try {\n for await (const event of stream) {\n if (!event) {\n continue;\n }\n const compactEvent = options.state.applyEvent(event);\n const eventToWrite = options.rawEvents\n ? (event as unknown as JsonObject)\n : compactEvent;\n if (!eventToWrite) {\n continue;\n }\n await options.writer.write({\n type: \"event\",\n event: eventToWrite,\n });\n }\n if (!options.signal.aborted) {\n throw (\n lastSseError ??\n new Error(\n \"Gameplay event stream closed before the join session ended.\",\n )\n );\n }\n } finally {\n await subscription.disconnect?.().catch(() => {});\n }\n } catch (error) {\n if (options.signal.aborted) {\n return;\n }\n options.errorOutput.write(\n `dreamboard join event stream failed: ${formatUnknown(error)}\\n`,\n );\n await options.writer.write({\n type: \"error\",\n error: protocolError(\"EVENT_STREAM_ERROR\", formatUnknown(error)),\n });\n }\n}\n\nclass JoinBotState {\n private hasBootstrap = false;\n private latestGameplay: HostPlayerGameplayView | undefined;\n private latestActions: InteractionActionCache | undefined;\n private previousCompactActions: CompactAction[] | undefined;\n\n constructor(readonly playerId: string) {}\n\n applyEvent(event: HostSessionEvent): JsonObject | undefined {\n switch (event.type) {\n case \"session.snapshot\": {\n if (event.snapshot.type !== \"gameplay\") {\n return undefined;\n }\n this.assertScopedGameplay(event.snapshot.gameplay);\n this.hasBootstrap = true;\n return this.applyGameplayEvent(event.type, event.snapshot.gameplay);\n }\n case \"session.gameplayUpdated\": {\n this.assertScopedGameplay(event.gameplay);\n return this.applyGameplayEvent(event.type, event.gameplay);\n }\n }\n return undefined;\n }\n\n applyGameplay(gameplay: HostPlayerGameplayView | undefined): void {\n if (gameplay) {\n this.assertScopedGameplay(gameplay);\n this.latestGameplay = gameplay;\n this.latestActions = actionCacheFromGameplay(gameplay);\n }\n }\n\n assertReady(): void {\n if (!this.hasBootstrap) {\n throw protocolError(\n \"NOT_READY\",\n \"No gameplay bootstrap is available yet. Wait for bot.gameplay.\",\n );\n }\n }\n\n getLatestGameplay(): JsonObject {\n this.assertReady();\n if (!this.latestGameplay) {\n throw protocolError(\n \"NOT_READY\",\n \"No gameplay snapshot is available yet. Wait for bot.gameplay.\",\n );\n }\n return normalizeGameplaySnapshotForJsonl(\n this.latestGameplay as unknown as JsonObject,\n );\n }\n\n latestActionRequest(\n interactionId: string,\n inputs: JsonObject,\n ): LatestActionRequest {\n this.assertReady();\n const cache = this.latestActions;\n if (!cache) {\n throw protocolError(\n \"NOT_READY\",\n \"No action set is available yet. Wait for bot.gameplay.\",\n );\n }\n if (\n !cache.actions.some((action) => action.interactionId === interactionId)\n ) {\n throw protocolError(\n \"ACTION_NOT_FOUND\",\n `Action '${interactionId}' is not available.`,\n );\n }\n return {\n interactionId,\n expectedVersion: cache.version,\n actionSetVersion: cache.actionSetVersion,\n inputs,\n };\n }\n\n applyActionSet(actionSet: {\n version: number;\n actionSetVersion: string;\n actions?: ReadonlyArray<InteractionDescriptorLike>;\n interactionsByRef?: Record<string, InteractionDescriptorLike | undefined>;\n availableInteractionRefs?: ReadonlyArray<string>;\n }): void {\n const actions = actionsFromActionSet(actionSet);\n this.latestActions = {\n version: actionSet.version,\n actionSetVersion: actionSet.actionSetVersion,\n actions,\n };\n }\n\n hasInteraction(interactionId: string): boolean {\n return (\n this.latestActions?.actions.some(\n (action) => action.interactionId === interactionId,\n ) ?? false\n );\n }\n\n latestActionSet(): {\n version: number;\n actionSetVersion: string;\n actions: InteractionDescriptorLike[];\n } {\n this.assertReady();\n const cache = this.latestActions;\n if (!cache) {\n throw protocolError(\n \"NOT_READY\",\n \"No action set is available yet. Wait for bot.gameplay.\",\n );\n }\n return {\n version: cache.version,\n actionSetVersion: cache.actionSetVersion,\n actions: cache.actions,\n };\n }\n\n describeAction(interactionId: string): JsonObject {\n const actionSet = this.latestActionSet();\n const action = actionSet.actions.find(\n (candidate) => candidate.interactionId === interactionId,\n );\n if (!action) {\n throw protocolError(\n \"ACTION_NOT_FOUND\",\n `Action '${interactionId}' is not available.`,\n );\n }\n return {\n version: actionSet.version,\n actionSetVersion: actionSet.actionSetVersion,\n action: action as unknown as JsonValue,\n };\n }\n\n actionTargets(interactionId: string, inputKey: string): JsonObject {\n const actionSet = this.latestActionSet();\n const action = actionSet.actions.find(\n (candidate) => candidate.interactionId === interactionId,\n );\n if (!action) {\n throw protocolError(\n \"ACTION_NOT_FOUND\",\n `Action '${interactionId}' is not available.`,\n );\n }\n const input = action.inputs.find((candidate) => candidate.key === inputKey);\n if (!input) {\n throw protocolError(\n \"INPUT_NOT_FOUND\",\n `Input '${inputKey}' is not defined for action '${interactionId}'.`,\n );\n }\n const zoneId = action.zoneId;\n const zoneCardsById =\n zoneId && this.latestGameplay\n ? this.latestGameplay.seats[this.latestGameplay.perspectivePlayerId]\n ?.zones[zoneId]?.cardViewsById\n : undefined;\n return compactObject({\n version: actionSet.version,\n actionSetVersion: actionSet.actionSetVersion,\n interactionId,\n inputKey,\n domain: input.domain as unknown as JsonValue,\n zoneCardsById: zoneCardsById as unknown as JsonValue,\n });\n }\n\n private applyGameplayEvent(\n sourceType: string,\n gameplay: HostPlayerGameplayView | undefined,\n ): JsonObject | undefined {\n if (!gameplay) {\n return undefined;\n }\n this.latestGameplay = gameplay;\n this.latestActions = actionCacheFromGameplay(gameplay);\n const compactActions = actionsFromGameplay(gameplay).map(\n compactActionFromDescriptor,\n );\n const event = compactGameplayEvent({\n sourceType,\n gameplay,\n actions: compactActions,\n previousActions: this.previousCompactActions,\n });\n this.previousCompactActions = compactActions;\n return event;\n }\n\n private assertScopedGameplay(\n gameplay: HostPlayerGameplayView | null | undefined,\n ): void {\n if (!gameplay) {\n return;\n }\n if (gameplay.perspectivePlayerId !== this.playerId) {\n throw protocolError(\n \"PLAYER_SCOPE_MISMATCH\",\n `Received gameplay for '${gameplay.perspectivePlayerId}' while joined as '${this.playerId}'.`,\n );\n }\n }\n}\n\ntype InteractionDescriptorLike = InteractionDescriptor;\n\ntype InteractionActionCache = {\n version: number;\n actionSetVersion: string;\n actions: InteractionDescriptorLike[];\n};\n\ntype CompactAction = {\n interactionId: string;\n interactionKey?: string;\n kind?: string;\n available: boolean;\n unavailableReason?: string;\n inputs?: JsonValue;\n cost?: JsonValue;\n currentResources?: JsonValue;\n missingResources?: Record<string, number>;\n context?: JsonValue;\n};\n\ntype LatestActionRequest = {\n interactionId: string;\n expectedVersion: number;\n actionSetVersion: string;\n inputs: JsonObject;\n};\n\nfunction actionCacheFromGameplay(\n gameplay: HostPlayerGameplayView,\n): InteractionActionCache {\n return {\n version: gameplay.version,\n actionSetVersion: gameplay.actionSetVersion,\n actions: actionsFromGameplay(gameplay),\n };\n}\n\nfunction compactActionFromDescriptor(\n descriptor: InteractionDescriptorLike,\n): CompactAction {\n const availability = descriptor.availability;\n const unavailableReason =\n availability.status === \"available\" ? undefined : availability.reason;\n const missingResources =\n availability.status === \"insufficientResources\"\n ? availability.missingResources\n : undefined;\n return compactObject({\n interactionId: descriptor.interactionId,\n interactionKey: descriptor.interactionKey,\n kind: descriptor.kind,\n available: availability.status === \"available\",\n unavailableReason,\n inputs: normalizeUnknownJson(descriptor.inputs),\n cost: normalizeUnknownJson(descriptor.cost),\n currentResources: normalizeUnknownJson(descriptor.currentResources),\n missingResources,\n context:\n descriptor.kind === \"prompt\"\n ? normalizeUnknownJson(descriptor.context)\n : undefined,\n }) as CompactAction;\n}\n\nfunction compactGameplayEvent(options: {\n sourceType: string;\n gameplay: HostPlayerGameplayView;\n actions: CompactAction[];\n previousActions: CompactAction[] | undefined;\n}): JsonObject {\n const { gameplay, actions, previousActions } = options;\n return compactObject({\n type: \"bot.gameplay\",\n sourceType: options.sourceType,\n version: gameplay.version,\n actionSetVersion: gameplay.actionSetVersion,\n playerId: gameplay.perspectivePlayerId,\n activePlayers: normalizeUnknownJson(gameplay.shared.activePlayers),\n currentPhase: gameplay.shared.currentPhase,\n currentStage: gameplay.shared.currentStage,\n stageSeats: normalizeUnknownJson(gameplay.shared.stageSeats),\n isActivePlayer: gameplay.shared.activePlayers.includes(\n gameplay.perspectivePlayerId,\n ),\n actions: actions as unknown as JsonValue,\n deltas:\n previousActions === undefined\n ? undefined\n : (actionDeltas(previousActions, actions) as unknown as JsonValue),\n });\n}\n\nfunction actionDeltas(previous: CompactAction[], current: CompactAction[]) {\n const previousById = new Map(\n previous.map((action) => [action.interactionId, action]),\n );\n const currentById = new Map(\n current.map((action) => [action.interactionId, action]),\n );\n const appeared = current.filter(\n (action) => !previousById.has(action.interactionId),\n );\n const disappeared = previous\n .filter((action) => !currentById.has(action.interactionId))\n .map((action) => action.interactionId);\n const availabilityChanged = current.flatMap((action) => {\n const before = previousById.get(action.interactionId);\n if (\n !before ||\n (before.available === action.available &&\n before.unavailableReason === action.unavailableReason)\n ) {\n return [];\n }\n return [\n compactObject({\n interactionId: action.interactionId,\n interactionKey: action.interactionKey,\n previousAvailable: before.available,\n available: action.available,\n previousUnavailableReason: before.unavailableReason,\n unavailableReason: action.unavailableReason,\n }),\n ];\n });\n const promptsAppeared = appeared.filter((action) => action.kind === \"prompt\");\n const promptsCleared = previous\n .filter(\n (action) =>\n action.kind === \"prompt\" && !currentById.has(action.interactionId),\n )\n .map((action) => action.interactionId);\n return {\n appeared,\n disappeared,\n availabilityChanged,\n promptsAppeared,\n promptsCleared,\n };\n}\n\nfunction compactObject(value: Record<string, unknown>): JsonObject {\n const result: JsonObject = {};\n for (const [key, entry] of Object.entries(value)) {\n if (entry !== undefined) {\n result[key] = entry as JsonValue;\n }\n }\n return result;\n}\n\nfunction normalizeUnknownJson(value: unknown): JsonValue | undefined {\n if (value === undefined) {\n return undefined;\n }\n return normalizeProtocolValue(value as JsonValue);\n}\n\nasync function handleRequest(options: {\n request: JoinRequest;\n requestId: RequestId;\n sessionId: string;\n playerId: string;\n state: JoinBotState;\n submitAction: SubmitPlayerAction;\n}): Promise<JsonValue> {\n if (typeof options.request.method !== \"string\") {\n throw protocolError(\"INVALID_REQUEST\", \"Request method must be a string.\");\n }\n if (\n options.request.method.startsWith(\"actions.\") ||\n options.request.method === \"state.get\"\n ) {\n options.state.assertReady();\n }\n\n switch (options.request.method) {\n case \"state.get\":\n return {\n gameplay: options.state.getLatestGameplay(),\n };\n case \"actions.list\": {\n return normalizeActionSetForJsonl(\n options.state.latestActionSet(),\n ) as unknown as JsonValue;\n }\n case \"actions.describe\": {\n const params = requireObjectParams(options.request.params);\n return options.state.describeAction(\n requireString(params, \"interactionId\"),\n ) as unknown as JsonValue;\n }\n case \"actions.targets\": {\n const params = requireObjectParams(options.request.params);\n return options.state.actionTargets(\n requireString(params, \"interactionId\"),\n requireString(params, \"inputKey\"),\n ) as unknown as JsonValue;\n }\n case \"actions.validate\": {\n const params = parseInputRequestParams(\n options.request.params,\n options.playerId,\n );\n return validateLocally(params) as unknown as JsonValue;\n }\n case \"actions.validateLatest\": {\n const params = parseLatestInputRequestParams(\n options.request.params,\n options.playerId,\n );\n const latest = options.state.latestActionRequest(\n params.interactionId,\n params.inputs,\n );\n return withRetry(validateLocally(latest), { attempted: false });\n }\n case \"actions.submitLatest\": {\n const params = parseLatestInputRequestParams(\n options.request.params,\n options.playerId,\n );\n const latest = options.state.latestActionRequest(\n params.interactionId,\n params.inputs,\n );\n const first = await callSubmitAction({\n sessionId: options.sessionId,\n playerId: options.playerId,\n submitAction: options.submitAction,\n params: latest,\n });\n options.state.applyGameplay(gameplayFromSubmitResult(first));\n if (!isActionSetStaleResponse(first)) {\n return withRetry(first, { attempted: false });\n }\n\n if (!options.state.hasInteraction(params.interactionId)) {\n return withRetry(first, {\n attempted: true,\n reason: \"ACTION_SET_STALE\",\n });\n }\n\n const refreshed = options.state.latestActionRequest(\n params.interactionId,\n params.inputs,\n );\n const validation = validateLocally(refreshed);\n if (isValidationRejected(validation)) {\n return withRetry(first, {\n attempted: true,\n reason: \"ACTION_SET_STALE\",\n });\n }\n\n const retryResult = await callSubmitAction({\n sessionId: options.sessionId,\n playerId: options.playerId,\n submitAction: options.submitAction,\n params: refreshed,\n });\n options.state.applyGameplay(gameplayFromSubmitResult(retryResult));\n return withRetry(retryResult, {\n attempted: true,\n reason: \"ACTION_SET_STALE\",\n });\n }\n case \"actions.submit\": {\n const params = parseInputRequestParams(\n options.request.params,\n options.playerId,\n );\n const { data, error, response } = await options.submitAction({\n path: {\n sessionId: options.sessionId,\n playerId: options.playerId,\n interactionId: params.interactionId,\n },\n body: {\n expectedVersion: params.expectedVersion,\n actionSetVersion: params.actionSetVersion,\n inputs: params.inputs,\n },\n headers: { \"X-Dreamboard-Client-Action-Id\": randomUUID() },\n });\n if (error || !data) {\n throw apiProtocolError(\n error,\n response,\n \"Failed to submit interaction.\",\n );\n }\n options.state.applyGameplay(gameplayFromSubmitResult(data));\n return data as unknown as JsonValue;\n }\n default:\n throw protocolError(\n \"UNKNOWN_METHOD\",\n `Unknown method '${options.request.method}'.`,\n );\n }\n}\n\nasync function callSubmitAction(options: {\n sessionId: string;\n playerId: string;\n submitAction: SubmitPlayerAction;\n params: LatestActionRequest;\n}): Promise<JsonValue> {\n const { data, error, response } = await options.submitAction({\n path: {\n sessionId: options.sessionId,\n playerId: options.playerId,\n interactionId: options.params.interactionId,\n },\n body: {\n expectedVersion: options.params.expectedVersion,\n actionSetVersion: options.params.actionSetVersion,\n inputs: options.params.inputs,\n },\n headers: { \"X-Dreamboard-Client-Action-Id\": randomUUID() },\n });\n if (error || !data) {\n throw apiProtocolError(error, response, \"Failed to submit interaction.\");\n }\n return data as unknown as JsonValue;\n}\n\nfunction gameplayFromSubmitResult(\n result: unknown,\n): HostPlayerGameplayView | undefined {\n if (!isJsonObject(result)) {\n return undefined;\n }\n const event = result.event;\n if (!isJsonObject(event) || event.type !== \"session.gameplayUpdated\") {\n return undefined;\n }\n return event.gameplay as HostPlayerGameplayView | undefined;\n}\n\nfunction actionsFromActionSet(actionSet: {\n actions?: ReadonlyArray<InteractionDescriptorLike>;\n interactionsByRef?: Record<string, InteractionDescriptorLike | undefined>;\n availableInteractionRefs?: ReadonlyArray<string>;\n}): InteractionDescriptorLike[] {\n if (Array.isArray(actionSet.actions)) {\n return [...actionSet.actions];\n }\n const registry = actionSet.interactionsByRef ?? {};\n return (actionSet.availableInteractionRefs ?? [])\n .map((ref) => registry[ref])\n .filter((action): action is InteractionDescriptorLike => Boolean(action));\n}\n\nfunction validateLocally(params: LatestActionRequest): JsonObject {\n return {\n valid: true,\n version: params.expectedVersion,\n actionSetVersion: params.actionSetVersion,\n };\n}\n\nfunction actionsFromGameplay(\n gameplay: HostPlayerGameplayView,\n): InteractionDescriptorLike[] {\n const seat = gameplay.seats[gameplay.perspectivePlayerId];\n return actionsFromActionSet({\n interactionsByRef: gameplay.interactionsByRef,\n availableInteractionRefs: seat?.availableInteractionRefs ?? [],\n });\n}\n\nfunction normalizeActionSetForJsonl(actionSet: {\n version: number;\n actionSetVersion: string;\n actions?: ReadonlyArray<InteractionDescriptorLike>;\n interactionsByRef?: Record<string, InteractionDescriptorLike | undefined>;\n availableInteractionRefs?: ReadonlyArray<string>;\n}): {\n version: number;\n actionSetVersion: string;\n actions: InteractionDescriptorLike[];\n} {\n return {\n version: actionSet.version,\n actionSetVersion: actionSet.actionSetVersion,\n actions: actionsFromActionSet(actionSet),\n };\n}\n\nfunction withRetry(\n data: JsonValue,\n retry: { attempted: boolean; reason?: \"ACTION_SET_STALE\" },\n): JsonValue {\n if (!isJsonObject(data)) {\n return { value: data, retry };\n }\n return {\n ...data,\n retry,\n };\n}\n\nfunction isActionSetStaleResponse(data: JsonValue): boolean {\n return isJsonObject(data) && data.errorCode === \"ACTION_SET_STALE\";\n}\n\nfunction isValidationRejected(data: JsonValue): boolean {\n return isJsonObject(data) && data.valid === false;\n}\n\nfunction parseRequestId(\n value: unknown,\n): { ok: true; value: RequestId } | { ok: false; error: JoinProtocolError } {\n if (typeof value === \"string\" && value.length > 0) {\n return { ok: true, value };\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return { ok: true, value };\n }\n return {\n ok: false,\n error: protocolError(\n \"MISSING_ID\",\n \"Every JSONL request must include a string or numeric id.\",\n ),\n };\n}\n\nfunction requireObjectParams(params: unknown): JsonObject {\n if (params === undefined) {\n return {};\n }\n if (isJsonObject(params)) {\n return params;\n }\n throw protocolError(\"INVALID_PARAMS\", \"Request params must be an object.\");\n}\n\nfunction parseInputRequestParams(\n rawParams: unknown,\n defaultPlayerId: string,\n): {\n interactionId: string;\n expectedVersion: number;\n actionSetVersion: string;\n inputs: JsonObject;\n} {\n const params = requireObjectParams(rawParams);\n const requestPlayerId = params.playerId;\n if (requestPlayerId !== undefined && requestPlayerId !== defaultPlayerId) {\n throw protocolError(\n \"PLAYER_MISMATCH\",\n `This join session is scoped to player '${defaultPlayerId}'.`,\n );\n }\n const expectedVersion = params.expectedVersion;\n if (\n typeof expectedVersion !== \"number\" ||\n !Number.isFinite(expectedVersion)\n ) {\n throw protocolError(\n \"INVALID_PARAMS\",\n \"actions.validate and actions.submit require numeric expectedVersion.\",\n );\n }\n const interactionParams = params.params;\n if (interactionParams !== undefined) {\n throw protocolError(\n \"INVALID_PARAMS\",\n \"Use 'inputs' for action input payloads; 'params.params' is no longer supported.\",\n );\n }\n const inputs = params.inputs;\n if (inputs !== undefined && !isJsonObject(inputs)) {\n throw protocolError(\n \"INVALID_PARAMS\",\n \"Action inputs must be an object when provided.\",\n );\n }\n return {\n interactionId: requireString(params, \"interactionId\"),\n expectedVersion,\n actionSetVersion: requireString(params, \"actionSetVersion\"),\n inputs: inputs ?? {},\n };\n}\n\nfunction parseLatestInputRequestParams(\n rawParams: unknown,\n defaultPlayerId: string,\n): {\n interactionId: string;\n inputs: JsonObject;\n} {\n const params = requireObjectParams(rawParams);\n const requestPlayerId = params.playerId;\n if (requestPlayerId !== undefined && requestPlayerId !== defaultPlayerId) {\n throw protocolError(\n \"PLAYER_MISMATCH\",\n `This join session is scoped to player '${defaultPlayerId}'.`,\n );\n }\n if (\n params.expectedVersion !== undefined ||\n params.actionSetVersion !== undefined\n ) {\n throw protocolError(\n \"INVALID_PARAMS\",\n \"actions.validateLatest and actions.submitLatest fill expectedVersion and actionSetVersion automatically.\",\n );\n }\n if (params.params !== undefined) {\n throw protocolError(\n \"INVALID_PARAMS\",\n \"Use 'inputs' for action input payloads; 'params.params' is no longer supported.\",\n );\n }\n const inputs = params.inputs;\n if (inputs !== undefined && !isJsonObject(inputs)) {\n throw protocolError(\n \"INVALID_PARAMS\",\n \"Action inputs must be an object when provided.\",\n );\n }\n return {\n interactionId: requireString(params, \"interactionId\"),\n inputs: inputs ?? {},\n };\n}\n\nfunction requireString(params: JsonObject, key: string): string {\n const value = params[key];\n if (typeof value !== \"string\" || value.length === 0) {\n throw protocolError(\"INVALID_PARAMS\", `Param '${key}' must be a string.`);\n }\n return value;\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction protocolError(\n code: string,\n message: string,\n details?: JsonObject,\n): JoinProtocolError {\n return { code, message, ...(details ? { details } : {}) };\n}\n\nfunction apiProtocolError(\n error: unknown,\n response: unknown,\n fallback: string,\n): JoinProtocolError {\n const problem = toApiProblem(error as never, response as never, fallback);\n return protocolError(problem.type, problem.detail || problem.title, {\n status: problem.status,\n title: problem.title,\n detail: problem.detail,\n requestId: problem.requestId ?? null,\n retryable: problem.retryable ?? null,\n } as JsonObject);\n}\n\nfunction coerceProtocolError(error: unknown): JoinProtocolError {\n if (\n error &&\n typeof error === \"object\" &&\n typeof (error as { code?: unknown }).code === \"string\" &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return error as JoinProtocolError;\n }\n return protocolError(\"INTERNAL_ERROR\", formatUnknown(error));\n}\n\nfunction formatUnknown(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n","import { randomUUID } from \"node:crypto\";\nimport { getSessionEventBatch } from \"@dreamboard-games/api-client\";\nimport type { HostSessionEvent } from \"@dreamboard-games/api-client\";\n\nconst cliSessionEventClientId = `dreamboard-cli-${randomUUID()}`;\nconst SESSION_EVENT_LONG_POLL_WAIT_MS = 25_000;\n\nfunction isAbortLikeError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nexport async function subscribeToCliSessionEvents(options: {\n sessionId: string;\n signal: AbortSignal;\n clientSource: string;\n playerId: string;\n onSseError?: (error: unknown) => void;\n sseMaxRetryAttempts?: number;\n sseDefaultRetryDelay?: number;\n}) {\n return {\n stream: pollCliSessionEvents(options),\n disconnect: async () => undefined,\n };\n}\n\nasync function* pollCliSessionEvents(options: {\n sessionId: string;\n signal: AbortSignal;\n clientSource: string;\n playerId: string;\n onSseError?: (error: unknown) => void;\n}): AsyncGenerator<HostSessionEvent> {\n let afterCursor: number | undefined;\n\n while (!options.signal.aborted) {\n try {\n const { data, error } = await getSessionEventBatch({\n path: { sessionId: options.sessionId },\n query: {\n playerId: options.playerId,\n clientId: cliSessionEventClientId,\n clientSource: options.clientSource,\n afterCursor,\n waitMs: SESSION_EVENT_LONG_POLL_WAIT_MS,\n },\n signal: options.signal,\n });\n\n if (error) {\n throw error;\n }\n if (!data) {\n throw new Error(\"Failed to poll CLI session events\");\n }\n\n afterCursor = data.cursor;\n\n if (data.snapshot) {\n yield {\n type: \"session.snapshot\",\n reason: \"load\",\n snapshot: data.snapshot,\n };\n }\n\n for (const event of data.events) {\n yield event;\n }\n } catch (error) {\n if (options.signal.aborted || isAbortLikeError(error)) {\n return;\n }\n options.onSseError?.(error);\n throw error;\n }\n }\n}\n","import crypto from \"node:crypto\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { DEFAULT_LOGIN_TIMEOUT_MS } from \"../constants.js\";\nimport { IS_PUBLISHED_BUILD } from \"../build-target.js\";\nimport { resolveConfig } from \"../config/resolve.js\";\nimport { parseLoginCommandArgs } from \"../flags.js\";\nimport {\n getGlobalAuthPath,\n loadGlobalConfig,\n saveGlobalConfig,\n} from \"../config/global-config.js\";\nimport {\n getStoredSession,\n setCredentials,\n} from \"../config/credential-store.js\";\nimport { openBrowser, startOAuthCallbackServer } from \"../auth/auth-server.js\";\nimport {\n buildClerkAuthorizationUrl,\n createPkcePair,\n exchangeClerkOAuthCode,\n} from \"../auth/clerk-oauth.js\";\n\nexport default defineCommand({\n meta: {\n name: \"login\",\n description:\n \"Open browser login and store a refreshable Dreamboard session\",\n },\n args: {\n ...(IS_PUBLISHED_BUILD\n ? {}\n : {\n env: {\n type: \"string\" as const,\n description: \"Environment: local | staging | prod\",\n },\n }),\n },\n async run({ args }) {\n const parsedArgs = parseLoginCommandArgs(args);\n const [globalConfig, storedSession] = await Promise.all([\n loadGlobalConfig(),\n getStoredSession(),\n ]);\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n undefined,\n storedSession,\n );\n const state = crypto.randomUUID();\n const pkce = createPkcePair();\n const server = await startOAuthCallbackServer(\n state,\n DEFAULT_LOGIN_TIMEOUT_MS,\n );\n const loginUrl = buildClerkAuthorizationUrl({\n config: {\n issuer: config.clerkOAuthIssuer,\n clientId: config.clerkOAuthClientId,\n tokenUrl: config.clerkOAuthTokenUrl,\n scope: config.clerkOAuthScope,\n },\n redirectUri: server.redirectUri,\n state,\n codeChallenge: pkce.challenge,\n }).toString();\n\n consola.info(\"Opening browser for login...\");\n consola.info(`If the browser does not open, visit: ${loginUrl}`);\n openBrowser(loginUrl);\n\n consola.start(\"Waiting for login to complete...\");\n try {\n const { code } = await server.waitForCode;\n const tokenResponse = await exchangeClerkOAuthCode({\n config: {\n issuer: config.clerkOAuthIssuer,\n clientId: config.clerkOAuthClientId,\n tokenUrl: config.clerkOAuthTokenUrl,\n },\n code,\n redirectUri: server.redirectUri,\n codeVerifier: pkce.verifier,\n });\n\n const resolvedEnvironment = config.environment;\n\n // Persist environment choice separately from credentials. The\n // credential write itself goes through CredentialStore, which\n // applies atomic-write + 0600 + cross-process lock.\n await saveGlobalConfig({\n ...globalConfig,\n environment: resolvedEnvironment,\n });\n\n await setCredentials({\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n tokenExpiresAt: tokenResponse.expiresAt,\n clerkOAuthIssuer: config.clerkOAuthIssuer,\n clerkOAuthClientId: config.clerkOAuthClientId,\n clerkOAuthTokenUrl: tokenResponse.tokenUrl,\n environment: resolvedEnvironment,\n });\n\n consola.success(\n `Login successful. Session saved to ${getGlobalAuthPath()}`,\n );\n } finally {\n server.close();\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { getGlobalAuthPath } from \"../config/global-config.js\";\nimport { clearCredentials } from \"../config/credential-store.js\";\n\nexport default defineCommand({\n meta: { name: \"logout\", description: \"Clear the stored Dreamboard session\" },\n args: {},\n async run() {\n await clearCredentials();\n consola.success(`Logged out. Cleared session from ${getGlobalAuthPath()}.`);\n },\n});\n","import path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport type { GameTopologyManifest } from \"@dreamboard-games/sdk/types\";\nimport {\n resolveConfig,\n requireAuth,\n configureClient,\n} from \"../config/resolve.js\";\nimport { parseNewCommandArgs } from \"../flags.js\";\nimport { loadGlobalConfig } from \"../config/global-config.js\";\nimport { getStoredSession } from \"../config/credential-store.js\";\nimport { normalizeSlug } from \"../utils/strings.js\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport {\n ensureProjectSdk,\n loadRemoteProjectIdentity,\n} from \"../services/api/index.js\";\nimport { materializeWorkspaceProject } from \"../services/project/materialize-workspace.js\";\nimport { ensureLocalMaintainerSnapshot } from \"../services/project/local-maintainer-registry.js\";\nimport { createUuidV7 } from \"../utils/uuid-v7.js\";\n\nexport default defineCommand({\n meta: {\n name: \"new\",\n description: \"Create a new game and scaffold a local workspace\",\n },\n args: {\n slug: { type: \"positional\", description: \"Game slug\", required: true },\n description: {\n type: \"string\",\n description: \"Short description of the game to create\",\n required: true,\n },\n force: {\n type: \"boolean\",\n description: \"Delete existing game with the same slug before creating\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseNewCommandArgs(args);\n const slugInput = parsedArgs.slug;\n const description = parsedArgs.description.trim();\n\n const normalizedSlug = normalizeSlug(slugInput);\n const projectId = createUuidV7();\n if (!normalizedSlug) {\n throw new Error(\"Slug must contain at least one alphanumeric character.\");\n }\n if (normalizedSlug !== slugInput) {\n consola.info(`Normalized slug to '${normalizedSlug}'.`);\n }\n\n const [globalConfig, storedSession] = await Promise.all([\n loadGlobalConfig(),\n getStoredSession(),\n ]);\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n undefined,\n storedSession,\n );\n requireAuth(config);\n await configureClient(config);\n const localMaintainerRegistry = await ensureLocalMaintainerSnapshot(\n config.apiBaseUrl,\n );\n\n const identity = await loadRemoteProjectIdentity();\n const project = await ensureProjectSdk({\n projectId,\n slug: normalizedSlug,\n description,\n updateAlias: Boolean(parsedArgs.force),\n });\n\n const blankManifest: GameTopologyManifest = {\n players: {\n minPlayers: 2,\n maxPlayers: 4,\n optimalPlayers: 4,\n },\n cardSets: [],\n zones: [],\n boardTemplates: [],\n boards: [],\n pieceTypes: [],\n pieceSeeds: [],\n dieTypes: [],\n dieSeeds: [],\n resources: [],\n setupOptions: [],\n setupProfiles: [],\n };\n\n consola.start(\"Scaffolding local workspace...\");\n\n const targetDir = path.resolve(process.cwd(), project.slug);\n await materializeWorkspaceProject({\n targetDir,\n projectId,\n slug: project.slug,\n gameId: project.projectId,\n deploymentId: identity.deploymentId,\n ownerScopeId: identity.ownerScopeId,\n bindingKey: identity.bindingKey,\n remoteHeadDigest: project.head?.revisionDigest,\n apiBaseUrl: config.apiBaseUrl,\n webBaseUrl: config.webBaseUrl,\n manifest: blankManifest,\n ruleText: \"\",\n localMaintainerRegistry,\n });\n\n consola.success(`Created new project in ${targetDir}`);\n consola.info(\n \"Next: edit your files, then run 'dreamboard sync' followed by 'dreamboard compile'.\",\n );\n },\n});\n","import path from \"node:path\";\nimport type { GameTopologyManifest } from \"@dreamboard-games/sdk/types\";\nimport type {\n LocalMaintainerRegistryConfig,\n ProjectConfig,\n} from \"../../types.js\";\nimport { ensureDir } from \"../../utils/fs.js\";\nimport { writeManifest, writeRule, writeSnapshot } from \"./local-files.js\";\nimport { scaffoldStaticWorkspace } from \"./static-scaffold.js\";\nimport { applyWorkspaceCodegen } from \"./workspace-codegen.js\";\nimport { installWorkspaceDependencies } from \"./workspace-dependencies.js\";\nimport {\n updateProjectAuthoringState,\n updateProjectLocalMaintainerRegistry,\n} from \"./project-state.js\";\nimport { updateProjectState } from \"../../config/project-config.js\";\n\nexport type MaterializeWorkspaceProjectInput = {\n targetDir: string;\n projectId?: string;\n slug: string;\n gameId: string;\n deploymentId?: string;\n ownerScopeId?: string;\n bindingKey?: string;\n remoteHeadDigest?: string;\n apiBaseUrl: string;\n webBaseUrl: string;\n manifest: GameTopologyManifest;\n ruleText: string;\n ruleId?: string;\n manifestId?: string;\n manifestContentHash?: string;\n localMaintainerRegistry?: LocalMaintainerRegistryConfig | null;\n installDependencies?: boolean;\n agentManaged?: boolean;\n workspacePrepared?: boolean;\n allowCreateGame?: boolean;\n jobId?: string;\n packageManifest?: Record<string, unknown>;\n environmentManifest?: Record<string, unknown>;\n};\n\nexport async function materializeWorkspaceProject(\n input: MaterializeWorkspaceProjectInput,\n): Promise<ProjectConfig> {\n const targetDir = path.resolve(input.targetDir);\n await ensureDir(targetDir);\n await writeManifest(targetDir, input.manifest);\n await writeRule(targetDir, input.ruleText);\n\n await scaffoldStaticWorkspace(targetDir, \"new\", {\n localMaintainerRegistry: input.localMaintainerRegistry,\n });\n await applyWorkspaceCodegen({\n projectRoot: targetDir,\n manifest: input.manifest,\n });\n if (input.installDependencies ?? true) {\n await installWorkspaceDependencies(targetDir);\n }\n\n const authoringConfig =\n input.ruleId && input.manifestId && input.manifestContentHash\n ? updateProjectAuthoringState(baseProjectConfig(input), {\n ruleId: input.ruleId,\n manifestId: input.manifestId,\n manifestContentHash: input.manifestContentHash,\n })\n : baseProjectConfig(input);\n const projectConfig = updateProjectLocalMaintainerRegistry(\n authoringConfig,\n input.localMaintainerRegistry ?? undefined,\n );\n await updateProjectState(targetDir, projectConfig);\n await writeSnapshot(targetDir);\n return projectConfig;\n}\n\nfunction baseProjectConfig(\n input: MaterializeWorkspaceProjectInput,\n): ProjectConfig {\n return {\n schemaVersion: 2,\n projectId: input.projectId ?? input.gameId,\n gameId: input.gameId,\n deploymentId: input.deploymentId ?? \"legacy\",\n ownerScopeId: input.ownerScopeId ?? \"default\",\n bindingKey: input.bindingKey,\n remoteHeadDigest: input.remoteHeadDigest,\n slug: input.slug,\n jobId: input.jobId,\n agentManaged: input.agentManaged,\n workspacePrepared: input.workspacePrepared,\n allowCreateGame: input.allowCreateGame,\n apiBaseUrl: input.apiBaseUrl,\n webBaseUrl: input.webBaseUrl,\n packageManifest: input.packageManifest,\n environmentManifest: input.environmentManifest,\n };\n}\n","import { randomBytes } from \"node:crypto\";\n\nexport function createUuidV7(): string {\n const bytes = randomBytes(16);\n const timestamp = BigInt(Date.now());\n\n bytes[0] = Number((timestamp >> 40n) & 0xffn);\n bytes[1] = Number((timestamp >> 32n) & 0xffn);\n bytes[2] = Number((timestamp >> 24n) & 0xffn);\n bytes[3] = Number((timestamp >> 16n) & 0xffn);\n bytes[4] = Number((timestamp >> 8n) & 0xffn);\n bytes[5] = Number(timestamp & 0xffn);\n bytes[6] = (bytes[6]! & 0x0f) | 0x70;\n bytes[8] = (bytes[8]! & 0x3f) | 0x80;\n\n const hex = bytes.toString(\"hex\");\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20),\n ].join(\"-\");\n}\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { updateProjectState } from \"../config/project-config.js\";\nimport { resolveProjectContext } from \"../config/resolve.js\";\nimport { parsePullCommandArgs } from \"../flags.js\";\nimport {\n buildRemoteAlignedSnapshotFiles,\n fetchLatestRemoteProjectSources,\n pullIntoDirectory,\n reconcileRemoteChangesIntoWorkspace,\n} from \"../services/project/sync.js\";\nimport {\n collectLocalFiles,\n getLocalDiff,\n loadManifest,\n writeSnapshotFromFiles,\n} from \"../services/project/local-files.js\";\nimport {\n getProjectAuthoringState,\n updateProjectLocalMaintainerRegistry,\n updateProjectAuthoringState,\n} from \"../services/project/project-state.js\";\nimport { applyWorkspaceCodegen } from \"../services/project/workspace-codegen.js\";\nimport {\n ensureLocalMaintainerSnapshot,\n readWorkspaceLocalMaintainerRegistry,\n} from \"../services/project/local-maintainer-registry.js\";\nimport { scaffoldStaticWorkspace } from \"../services/project/static-scaffold.js\";\nimport { installWorkspaceDependencies } from \"../services/project/workspace-dependencies.js\";\nimport { resolveRemoteProject } from \"../services/project/remote-project.js\";\n\nexport default defineCommand({\n meta: {\n name: \"pull\",\n description: \"Reconcile remote authored changes into the current project\",\n },\n args: {\n force: {\n type: \"boolean\",\n description: \"Override conflicts\",\n default: false,\n },\n env: { type: \"string\", description: \"Environment: local | staging | prod\" },\n token: {\n type: \"string\",\n description: \"Auth token (Dreamboard bearer JWT)\",\n },\n },\n async run({ args }) {\n const parsedArgs = parsePullCommandArgs(args);\n const { projectRoot, projectConfig, config } =\n await resolveProjectContext(parsedArgs);\n const remoteProject = await resolveRemoteProject({\n projectRoot,\n projectConfig,\n config,\n });\n const nextProjectConfig = remoteProject.projectConfig;\n const localMaintainerRegistry = await ensureLocalMaintainerSnapshot(\n config.apiBaseUrl,\n );\n const localAuthoring = getProjectAuthoringState(nextProjectConfig);\n const latestRemote = await fetchLatestRemoteProjectSources(\n nextProjectConfig.projectId,\n );\n\n if (localAuthoring.pendingSync && !parsedArgs.force) {\n throw new Error(\n \"This workspace is still finalizing a previous sync. Run 'dreamboard sync' again to finish it, or use 'dreamboard pull --force' to replace local files with remote state.\",\n );\n }\n\n if (!latestRemote) {\n consola.info(\"Remote has no authored state yet.\");\n return;\n }\n\n const localRevisionDigest = localAuthoring.revisionDigest;\n const latestRevisionDigest =\n latestRemote.revisionDigest ?? remoteProject.project.head?.revisionDigest;\n\n if (!latestRevisionDigest) {\n throw new Error(\n \"Remote has no project revision digest. Run 'dreamboard sync' first.\",\n );\n }\n\n if (!localRevisionDigest) {\n if (!parsedArgs.force) {\n throw new Error(\n `This workspace has no authored base revision. Use 'dreamboard pull --force' to replace local files with remote revision ${latestRevisionDigest}.`,\n );\n }\n const pulledProjectConfig = await pullIntoDirectory(\n config,\n projectRoot,\n nextProjectConfig,\n );\n const fallbackRegistryUrl = localMaintainerRegistry?.registryUrl;\n const workspaceLocalMaintainerRegistry =\n localMaintainerRegistry ??\n (await readWorkspaceLocalMaintainerRegistry(\n projectRoot,\n fallbackRegistryUrl,\n ));\n await scaffoldStaticWorkspace(projectRoot, \"update\", {\n localMaintainerRegistry: workspaceLocalMaintainerRegistry,\n });\n if (workspaceLocalMaintainerRegistry) {\n await installWorkspaceDependencies(projectRoot);\n await updateProjectState(\n projectRoot,\n updateProjectLocalMaintainerRegistry(\n pulledProjectConfig,\n workspaceLocalMaintainerRegistry,\n ),\n );\n }\n consola.success(\"Pulled remote authored state into the workspace.\");\n return;\n }\n\n if (localRevisionDigest === latestRevisionDigest) {\n consola.info(\"Remote project revision already matches this workspace.\");\n return;\n }\n\n if (parsedArgs.force) {\n const pulledProjectConfig = await pullIntoDirectory(\n config,\n projectRoot,\n nextProjectConfig,\n );\n const fallbackRegistryUrl = localMaintainerRegistry?.registryUrl;\n const workspaceLocalMaintainerRegistry =\n localMaintainerRegistry ??\n (await readWorkspaceLocalMaintainerRegistry(\n projectRoot,\n fallbackRegistryUrl,\n ));\n await scaffoldStaticWorkspace(projectRoot, \"update\", {\n localMaintainerRegistry: workspaceLocalMaintainerRegistry,\n });\n if (workspaceLocalMaintainerRegistry) {\n await installWorkspaceDependencies(projectRoot);\n await updateProjectState(\n projectRoot,\n updateProjectLocalMaintainerRegistry(\n pulledProjectConfig,\n workspaceLocalMaintainerRegistry,\n ),\n );\n }\n consola.success(\n \"Replaced local files with the current remote authored state.\",\n );\n return;\n }\n\n const reconcileResult = await reconcileRemoteChangesIntoWorkspace({\n projectRoot,\n projectConfig: nextProjectConfig,\n baseRevisionDigest: localRevisionDigest,\n latestRevisionDigest,\n });\n\n if (reconcileResult.conflicts.length > 0) {\n for (const filePath of reconcileResult.conflicts) {\n consola.error(`Conflict: ${filePath}`);\n }\n throw new Error(\n `Remote reconciliation wrote conflict markers to ${reconcileResult.conflicts.length} file(s). Resolve them and rerun 'dreamboard pull'.`,\n );\n }\n\n await applyWorkspaceCodegen({\n projectRoot,\n manifest: await loadManifest(projectRoot),\n });\n const fallbackRegistryUrl = localMaintainerRegistry?.registryUrl;\n const workspaceLocalMaintainerRegistry =\n localMaintainerRegistry ??\n (await readWorkspaceLocalMaintainerRegistry(\n projectRoot,\n fallbackRegistryUrl,\n ));\n await scaffoldStaticWorkspace(projectRoot, \"update\", {\n localMaintainerRegistry: workspaceLocalMaintainerRegistry,\n });\n if (workspaceLocalMaintainerRegistry) {\n await installWorkspaceDependencies(projectRoot);\n }\n\n const reconciledProjectConfig = updateProjectLocalMaintainerRegistry(\n updateProjectAuthoringState(nextProjectConfig, {\n revisionDigest: latestRevisionDigest,\n authoringStateId: reconcileResult.latest.authoringStateId,\n sourceRevisionId: reconcileResult.latest.sourceRevisionId,\n sourceTreeHash: reconcileResult.latest.treeHash,\n manifestId:\n reconcileResult.latest.manifestId ??\n projectConfig.authoring?.manifestId,\n manifestContentHash:\n reconcileResult.latest.manifestContentHash ??\n projectConfig.authoring?.manifestContentHash,\n ruleId:\n reconcileResult.latest.ruleId ?? projectConfig.authoring?.ruleId,\n }),\n workspaceLocalMaintainerRegistry ?? undefined,\n );\n await updateProjectState(projectRoot, reconciledProjectConfig);\n\n const reconciledLocalFiles = await collectLocalFiles(projectRoot);\n await writeSnapshotFromFiles(\n projectRoot,\n buildRemoteAlignedSnapshotFiles({\n localFiles: reconciledLocalFiles,\n remoteUserFiles: reconcileResult.remoteUserFiles,\n }),\n );\n\n const localDiff = await getLocalDiff(projectRoot);\n if (\n localDiff.modified.length === 0 &&\n localDiff.added.length === 0 &&\n localDiff.deleted.length === 0\n ) {\n consola.success(\"Pulled remote authored changes.\");\n return;\n }\n\n consola.success(\n \"Pulled remote authored changes. Local edits were preserved where possible.\",\n );\n },\n});\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { resolveProjectContext, configureClient } from \"../config/resolve.js\";\nimport { resolveLocalHarnessAccessToken } from \"../config/local-harness-auth.js\";\nimport { parseStatusCommandArgs } from \"../flags.js\";\nimport { getLocalDiff } from \"../services/project/local-files.js\";\nimport {\n findProjectCompiledResultsForRevision,\n} from \"../services/api/index.js\";\nimport {\n getProjectAuthoringState,\n getProjectCompileState,\n getProjectPendingAuthoringSync,\n} from \"../services/project/project-state.js\";\nimport { resolveRemoteProject } from \"../services/project/remote-project.js\";\n\nexport default defineCommand({\n meta: { name: \"status\", description: \"Show local vs remote status\" },\n args: {\n json: {\n type: \"boolean\",\n description: \"Print machine-readable status JSON\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseStatusCommandArgs(args);\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedArgs,\n { requireAuth: false },\n );\n\n const diff = await getLocalDiff(projectRoot);\n const localAuthoring = getProjectAuthoringState(projectConfig);\n const pendingSync = getProjectPendingAuthoringSync(projectConfig);\n const localCompile = getProjectCompileState(projectConfig);\n let remoteHeadId: string | null = null;\n let authoredRelation:\n | \"in_sync\"\n | \"ahead\"\n | \"behind\"\n | \"diverged\"\n | \"pending_finalize\"\n | \"unknown\" = \"unknown\";\n let compileRelation:\n | \"successful\"\n | \"failed\"\n | \"never_compiled\"\n | \"stale_success\" = \"never_compiled\";\n let verified: boolean | null = null;\n let verifiedAt: string | null = null;\n const effectiveAuthToken =\n config.authToken ?? resolveLocalHarnessAccessToken(config);\n\n if (effectiveAuthToken) {\n await configureClient(config);\n const remoteProject = await resolveRemoteProject({\n projectRoot,\n projectConfig,\n config,\n });\n remoteHeadId = remoteProject.project.head?.revisionDigest ?? null;\n\n const hasLocalDiff =\n diff.modified.length > 0 ||\n diff.added.length > 0 ||\n diff.deleted.length > 0;\n if (pendingSync) {\n authoredRelation = \"pending_finalize\";\n } else if (!localAuthoring.revisionDigest) {\n authoredRelation = \"unknown\";\n } else if (remoteHeadId === null) {\n authoredRelation = hasLocalDiff ? \"ahead\" : \"unknown\";\n } else if (remoteHeadId === localAuthoring.revisionDigest) {\n authoredRelation = hasLocalDiff ? \"ahead\" : \"in_sync\";\n } else {\n authoredRelation = hasLocalDiff ? \"diverged\" : \"behind\";\n }\n\n if (remoteHeadId) {\n const remoteResults = await findProjectCompiledResultsForRevision({\n projectId: projectConfig.projectId,\n revisionDigest: remoteHeadId,\n });\n const latestAttempt = remoteResults[0] ?? null;\n\n if (latestAttempt?.success) {\n compileRelation = \"successful\";\n } else if (latestAttempt && !latestAttempt.success) {\n compileRelation = \"failed\";\n } else if (\n localCompile.latestSuccessful &&\n localCompile.latestSuccessful.revisionDigest !== remoteHeadId\n ) {\n compileRelation = \"stale_success\";\n } else {\n compileRelation = \"never_compiled\";\n }\n }\n }\n\n if (parsedArgs.json) {\n console.log(\n JSON.stringify(\n {\n projectId: projectConfig.projectId,\n slug: projectConfig.slug,\n authoring: {\n localRevisionDigest: localAuthoring.revisionDigest ?? null,\n remoteRevisionDigest: remoteHeadId,\n localAuthoringStateId: localAuthoring.authoringStateId ?? null,\n remoteAuthoringStateId: null,\n relation: authoredRelation,\n pendingSync: pendingSync ?? null,\n },\n compile: {\n relation: compileRelation,\n latestAttempt: localCompile.latestAttempt ?? null,\n latestSuccessful: localCompile.latestSuccessful ?? null,\n },\n authenticated: Boolean(effectiveAuthToken),\n localDiff: {\n modified: diff.modified.length,\n added: diff.added.length,\n deleted: diff.deleted.length,\n },\n localDiffPaths: diff,\n verification: {\n verified,\n verifiedAt,\n },\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n consola.info(\n `Local changes: ${diff.modified.length} modified, ${diff.added.length} added, ${diff.deleted.length} deleted`,\n );\n if (diff.modified.length > 0)\n consola.log(`Modified: ${diff.modified.join(\", \")}`);\n if (diff.added.length > 0) consola.log(`Added: ${diff.added.join(\", \")}`);\n if (diff.deleted.length > 0)\n consola.log(`Deleted: ${diff.deleted.join(\", \")}`);\n\n if (verified !== null) {\n consola.info(\n `Verification: ${verified ? \"verified\" : \"unverified\"}${verifiedAt ? ` at ${verifiedAt}` : \"\"}`,\n );\n }\n\n if (!effectiveAuthToken) {\n consola.warn(\"Remote status unavailable (no auth token).\");\n return;\n }\n\n consola.info(\n `Project revision: ${authoredRelation} (local=${localAuthoring.revisionDigest ?? \"unknown\"}, remote=${remoteHeadId ?? \"none\"})`,\n );\n if (pendingSync) {\n consola.warn(\n `Previous sync is still being finalized (${pendingSync.phase}). Run 'dreamboard sync' again to finish updating local scaffold files.`,\n );\n }\n consola.info(`Compile state: ${compileRelation}`);\n if (compileRelation === \"failed\") {\n consola.warn(\n \"Latest compile for the current authored state failed. Fix diagnostics and run 'dreamboard compile' again.\",\n );\n }\n if (authoredRelation === \"behind\" || authoredRelation === \"diverged\") {\n consola.warn(\n \"Remote authored changes are available. Run 'dreamboard pull' to reconcile them into this workspace.\",\n );\n }\n },\n});\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport {\n mapUpsertBlobContentsByContentHash,\n materializeSourceChangeOperations,\n type SourceContentChangeOperation,\n} from \"@dreamboard-games/api-client/source-revisions\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { resolveProjectContext } from \"../config/resolve.js\";\nimport { updateProjectState } from \"../config/project-config.js\";\nimport { parseSyncCommandArgs } from \"../flags.js\";\nimport {\n collectLocalFiles,\n computeManifestHash,\n getLocalDiff,\n loadManifest,\n loadRule,\n writeSnapshot,\n} from \"../services/project/local-files.js\";\nimport {\n isSourceRevisionPath,\n shouldAlwaysUpsertSourcePath,\n} from \"../services/project/source-revision-paths.js\";\nimport {\n assertCliStaticScaffoldComplete,\n scaffoldStaticWorkspace,\n} from \"../services/project/static-scaffold.js\";\nimport {\n createGameRevisionSdk,\n uploadProjectSourceBlobsSdk,\n} from \"../services/api/index.js\";\nimport {\n getProjectAuthoringState,\n getProjectLocalMaintainerRegistry,\n getProjectPendingAuthoringSync,\n updateProjectAuthoringState,\n updateProjectLocalMaintainerRegistry,\n} from \"../services/project/project-state.js\";\nimport type { ProjectConfig } from \"../types.js\";\nimport { applyWorkspaceCodegen } from \"../services/project/workspace-codegen.js\";\nimport {\n didLocalMaintainerSnapshotChange,\n ensureLocalMaintainerSnapshot,\n isLocalMaintainerRegistryEnabled,\n} from \"../services/project/local-maintainer-registry.js\";\nimport { reconcileWorkspaceDependencies } from \"../services/project/workspace-dependencies.js\";\nimport { assertReducerContractPreflight } from \"../services/project/reducer-contract-preflight.js\";\nimport { assertReducerBundleSmoke } from \"../services/project/reducer-bundle-preflight.js\";\nimport { runLocalTypecheck } from \"../services/project/local-typecheck.js\";\nimport { resolveRemoteProject } from \"../services/project/remote-project.js\";\nimport { assertReleaseEnvironmentPortableDependencies } from \"../services/project/dependency-portability.js\";\n\nasync function runLoggedStep<T>(\n message: string,\n task: () => Promise<T>,\n): Promise<T> {\n consola.start(message);\n return task();\n}\n\nasync function persistProjectConfig(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n}): Promise<ProjectConfig> {\n await updateProjectState(options.projectRoot, options.projectConfig);\n return options.projectConfig;\n}\n\nasync function finalizeLocalSync(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n}): Promise<ProjectConfig> {\n const { projectRoot, projectConfig } = options;\n await scaffoldStaticWorkspace(projectRoot, \"update\", {\n localMaintainerRegistry: getProjectLocalMaintainerRegistry(projectConfig),\n });\n await applyWorkspaceCodegen({\n projectRoot,\n manifest: await loadManifest(projectRoot),\n });\n\n const finalizedProjectConfig = await persistProjectConfig({\n projectRoot,\n projectConfig,\n });\n await writeSnapshot(projectRoot);\n return finalizedProjectConfig;\n}\n\nfunction buildSourceSnapshotChanges(\n localFiles: Record<string, string>,\n): SourceContentChangeOperation[] {\n return Object.entries(localFiles)\n .filter(\n ([filePath]) =>\n isSourceRevisionPath(filePath) ||\n shouldAlwaysUpsertSourcePath(filePath),\n )\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([path, content]) => ({\n kind: \"upsert\",\n path,\n content,\n }));\n}\n\nexport default defineCommand({\n meta: {\n name: \"sync\",\n description:\n \"Upload authored changes and advance the remote authoring head\",\n },\n args: {\n force: {\n type: \"boolean\",\n description:\n \"Replace the full authored source tree, manifest, and rules, overwriting the remote head with the local copy even when the remote has moved\",\n default: false,\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Reserved for non-interactive scaffold flows\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseSyncCommandArgs(args);\n const { projectRoot, projectConfig, config } =\n await resolveProjectContext(parsedArgs);\n let nextProjectConfig = projectConfig;\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig: nextProjectConfig,\n environment: config.environment,\n });\n const localMaintainerEnabled = isLocalMaintainerRegistryEnabled(\n config.apiBaseUrl,\n );\n const existingLocalMaintainerRegistry =\n getProjectLocalMaintainerRegistry(projectConfig);\n const refreshedLocalMaintainerRegistry = localMaintainerEnabled\n ? await runLoggedStep(\"Checking local SDK snapshot...\", () =>\n ensureLocalMaintainerSnapshot(config.apiBaseUrl),\n )\n : await ensureLocalMaintainerSnapshot(config.apiBaseUrl);\n const localMaintainerRegistry =\n refreshedLocalMaintainerRegistry ??\n (localMaintainerEnabled\n ? (existingLocalMaintainerRegistry ?? null)\n : null);\n const localMaintainerSnapshotChanged = didLocalMaintainerSnapshotChange(\n existingLocalMaintainerRegistry,\n refreshedLocalMaintainerRegistry,\n );\n if (refreshedLocalMaintainerRegistry) {\n nextProjectConfig = updateProjectLocalMaintainerRegistry(\n nextProjectConfig,\n refreshedLocalMaintainerRegistry,\n );\n consola.info(\n localMaintainerSnapshotChanged\n ? \"Local SDK snapshot refreshed.\"\n : \"Using existing local SDK snapshot.\",\n );\n } else if (localMaintainerRegistry) {\n consola.info(\"Using workspace-pinned local SDK snapshot.\");\n }\n\n await runLoggedStep(\"Refreshing static scaffold...\", () =>\n scaffoldStaticWorkspace(projectRoot, \"update\", {\n localMaintainerRegistry,\n }),\n );\n const localManifest = await loadManifest(projectRoot);\n await runLoggedStep(\"Applying workspace codegen...\", async () =>\n applyWorkspaceCodegen({\n projectRoot,\n manifest: localManifest,\n }),\n );\n const dependencyState = await runLoggedStep(\n \"Reconciling workspace dependencies...\",\n () => reconcileWorkspaceDependencies(projectRoot),\n );\n if (\n dependencyState.packageManagerNormalized ||\n dependencyState.lockfileGenerated ||\n dependencyState.installed ||\n localMaintainerSnapshotChanged\n ) {\n consola.info(\"Workspace dependencies reconciled.\");\n } else {\n consola.info(\"Workspace dependencies already up to date.\");\n }\n await runLoggedStep(\"Validating reducer contract...\", () =>\n assertReducerContractPreflight(projectRoot),\n );\n const typecheckResult = await runLoggedStep(\n \"Running local typecheck...\",\n () => runLocalTypecheck(projectRoot),\n );\n if (typecheckResult.skipped) {\n if (typecheckResult.output) {\n consola.warn(typecheckResult.output);\n }\n } else if (!typecheckResult.success) {\n if (typecheckResult.output) {\n consola.error(typecheckResult.output);\n }\n throw new Error(\n \"Local typecheck failed. Fix the diagnostics before syncing.\",\n );\n }\n await runLoggedStep(\"Smoke-testing reducer bundle...\", async () =>\n assertReducerBundleSmoke({\n projectRoot,\n manifest: localManifest,\n }),\n );\n consola.success(\"Reducer bundle smoke test passed.\");\n\n const remoteProject = await runLoggedStep(\"Ensuring remote project...\", () =>\n resolveRemoteProject({\n projectRoot,\n projectConfig: nextProjectConfig,\n config,\n }),\n );\n nextProjectConfig = remoteProject.projectConfig;\n\n const localDiff = await getLocalDiff(projectRoot);\n await assertCliStaticScaffoldComplete(projectRoot, localDiff.deleted);\n\n const localAuthoring = getProjectAuthoringState(nextProjectConfig);\n const pendingSync = getProjectPendingAuthoringSync(nextProjectConfig);\n const remoteHeadDigest = remoteProject.project.head?.revisionDigest;\n const localHeadDigest =\n localAuthoring.revisionDigest ?? nextProjectConfig.remoteHeadDigest;\n\n if (pendingSync && !parsedArgs.force) {\n throw new Error(\n \"This workspace has an unfinished legacy sync checkpoint. Run 'dreamboard sync --force' to replace it with an atomic project revision.\",\n );\n }\n\n if (\n remoteHeadDigest &&\n localHeadDigest &&\n remoteHeadDigest !== localHeadDigest\n ) {\n if (parsedArgs.force) {\n consola.warn(\n `Remote project head has moved to ${remoteHeadDigest}. --force will overwrite it with this workspace's local copy.`,\n );\n } else {\n throw new Error(\n `Remote project head has moved to ${remoteHeadDigest}. Run 'dreamboard pull' before syncing local changes, or pass --force to overwrite the remote with the local copy.`,\n );\n }\n }\n\n if (remoteHeadDigest && !localHeadDigest) {\n if (parsedArgs.force) {\n consola.warn(\n `This workspace has no authored base but the remote project head is ${remoteHeadDigest}. --force will overwrite it with this workspace's local copy.`,\n );\n } else {\n throw new Error(\n `This workspace has no authored base but the remote project head is ${remoteHeadDigest}. Re-clone, run 'dreamboard pull --force' into a clean workspace, or pass --force to overwrite the remote with the local copy.`,\n );\n }\n }\n\n const hasChanges =\n localDiff.modified.length > 0 ||\n localDiff.added.length > 0 ||\n localDiff.deleted.length > 0;\n const localManifestContentHash = computeManifestHash(localManifest);\n const manifestOutOfSync =\n localAuthoring.localManifestContentHash !== localManifestContentHash;\n if (\n !hasChanges &&\n !parsedArgs.force &&\n localHeadDigest != null &&\n remoteHeadDigest === localHeadDigest &&\n !pendingSync &&\n !manifestOutOfSync\n ) {\n consola.info(\"No local authored changes to sync.\");\n return;\n }\n\n const localFiles = await collectLocalFiles(projectRoot);\n const sourceChanges = buildSourceSnapshotChanges(localFiles);\n const { changes } = await materializeSourceChangeOperations(sourceChanges);\n const uploadBlobs = mapUpsertBlobContentsByContentHash(\n sourceChanges,\n changes,\n );\n await uploadProjectSourceBlobsSdk(\n nextProjectConfig.projectId,\n Array.from(uploadBlobs.values()),\n );\n\n const sourceFiles = changes\n .filter((change) => change.kind === \"upsert\")\n .map(({ path, contentHash, byteSize }) => ({\n path,\n contentHash,\n byteSize,\n }));\n const revision = await createGameRevisionSdk({\n projectId: nextProjectConfig.projectId,\n request: {\n ...(remoteHeadDigest ? { baseRevisionDigest: remoteHeadDigest } : {}),\n source: { files: sourceFiles },\n ruleText: await loadRule(projectRoot),\n manifest: localManifest,\n },\n });\n nextProjectConfig = await persistProjectConfig({\n projectRoot,\n projectConfig: {\n ...updateProjectAuthoringState(nextProjectConfig, {\n revisionDigest: revision.revisionDigest,\n sourceTreeHash: revision.sourceTreeHash,\n manifestContentHash: revision.manifestContentHash,\n localManifestContentHash,\n }),\n remoteHeadDigest: revision.revisionDigest,\n },\n });\n nextProjectConfig = await finalizeLocalSync({\n projectRoot,\n projectConfig: nextProjectConfig,\n });\n\n consola.success(\n `Synced revision ${revision.revisionDigest}. Run 'dreamboard compile' when you're ready.`,\n );\n },\n});\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { configureClient, resolveProjectContext } from \"../config/resolve.js\";\nimport { parseConfigFlags } from \"../flags.js\";\nimport { uploadInitialProjectionSdk } from \"../services/api/index.js\";\nimport { assertReleaseEnvironmentPortableDependencies } from \"../services/project/dependency-portability.js\";\nimport {\n generateReducerNativeArtifacts,\n isReducerNativeTestingWorkspace,\n runReducerNativeScenarios,\n type ReducerNativeScenarioSummary,\n} from \"../services/testing/reducer-native-test-harness.js\";\nimport { shouldUseRemoteTestRuntime } from \"../services/testing/runtime-mode.js\";\nimport { resolveLatestCompiledResult } from \"../services/workflows/resolve-latest-compiled-result.js\";\nimport type { ProjectConfig } from \"../types.js\";\nimport {\n isDreamboardApiError,\n isStaleContractArtifactMessage,\n STALE_CONTRACT_ARTIFACT_CODE,\n STALE_CONTRACT_ARTIFACT_EXIT_CODE,\n} from \"../utils/errors.js\";\n\ntype RequestedTestRunner = \"reducer\" | \"remote\" | \"browser\";\n\nexport const REDUCER_NATIVE_TEST_WORKSPACE_ERROR =\n \"dreamboard test now requires a reducer-native workspace with app/game.ts, shared/generated/ui-contract.ts, test/bases/*.base.ts, and test/scenarios/*.scenario.ts. Legacy test/base-scenarios.json workspaces are no longer supported.\";\n\nexport const NO_REDUCER_NATIVE_BASES_FOUND_ERROR =\n \"No bases found under test/bases/*.base.ts\";\n\nexport const NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR =\n \"No scenarios found under test/scenarios/*.scenario.ts\";\n\nexport function isPreviewProjectionEndpointUnavailable(\n error: unknown,\n): boolean {\n if (!isDreamboardApiError(error) || error.status !== 404) {\n return false;\n }\n\n const endpoint = error.problem.instance ?? error.problem.context?.endpoint;\n const message = error.problem.detail ?? error.problem.title;\n return (\n endpoint?.includes(\"/preview/initial-projection\") === true &&\n message?.toLowerCase() === \"not found\"\n );\n}\n\nasync function uploadGeneratedPreviewProjection(options: {\n projectRoot: string;\n gameId: string;\n bases: Array<{ definition: { id: string } }>;\n}): Promise<void> {\n const previewBase =\n options.bases.find((base) => base.definition.id === \"initial-turn\") ??\n options.bases[0];\n if (!previewBase) {\n return;\n }\n const projectionPath = path.join(\n options.projectRoot,\n \"test\",\n \"generated\",\n \"bases\",\n previewBase.definition.id,\n \"player-1.projection.json\",\n );\n const projectionJson = await readFile(projectionPath, \"utf8\");\n try {\n await uploadInitialProjectionSdk(options.gameId, projectionJson);\n } catch (error) {\n if (isPreviewProjectionEndpointUnavailable(error)) {\n consola.warn(\n \"Skipping preview projection upload because the selected backend does not expose the preview projection endpoint.\",\n );\n return;\n }\n throw error;\n }\n}\n\nexport function resolveRequestedRunner(\n value: unknown,\n): RequestedTestRunner | undefined {\n if (value == null || value === \"\") {\n return undefined;\n }\n if (value === \"reducer\" || value === \"remote\" || value === \"browser\") {\n return value;\n }\n throw new Error(\n `Unsupported test runner '${String(value)}'. Expected one of reducer, remote, browser.`,\n );\n}\n\nfunction isStaleContractArtifactResult(\n result: ReducerNativeScenarioSummary[\"results\"][number],\n): boolean {\n return (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE ||\n (result.error ? isStaleContractArtifactMessage(result.error) : false)\n );\n}\n\nexport function resolveTestRunExitCode(\n summary: ReducerNativeScenarioSummary,\n): number {\n if (summary.failed === 0) {\n return 0;\n }\n return summary.results.some(\n (result) => !result.success && isStaleContractArtifactResult(result),\n )\n ? STALE_CONTRACT_ARTIFACT_EXIT_CODE\n : 1;\n}\n\nasync function assertReducerNativeTestingWorkspace(\n projectRoot: string,\n): Promise<void> {\n if (await isReducerNativeTestingWorkspace(projectRoot)) {\n return;\n }\n\n throw new Error(REDUCER_NATIVE_TEST_WORKSPACE_ERROR);\n}\n\nasync function resolveReducerNativeRuntimeIdentity(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n useRemoteRuntime: boolean;\n runner?: RequestedTestRunner;\n}): Promise<{\n gameId: string;\n compiledResultId?: string;\n}> {\n if (\n options.useRemoteRuntime ||\n options.runner === \"remote\" ||\n options.runner === \"browser\"\n ) {\n const latestCompiledResult = await resolveLatestCompiledResult(\n options.projectRoot,\n options.projectConfig,\n );\n return {\n gameId: options.projectConfig.gameId,\n compiledResultId: latestCompiledResult.id,\n };\n }\n\n return {\n gameId: options.projectConfig.gameId,\n compiledResultId: options.projectConfig.compile?.latestSuccessful?.resultId,\n };\n}\n\nconst generateCommand = defineCommand({\n meta: {\n name: \"generate\",\n description: \"Generate reducer-native base artifacts for typed scenarios\",\n },\n args: {\n scenario: {\n type: \"string\",\n description: \"Optional scenario file path under test/scenarios\",\n },\n debug: {\n type: \"boolean\",\n description: \"Print full reducer-native validation details\",\n default: false,\n },\n \"update-snapshots\": {\n type: \"boolean\",\n description: \"Refresh generated projection and scenario snapshots\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedFlags = parseConfigFlags(args);\n const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedFlags,\n { requireAuth: useRemoteRuntime },\n );\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig,\n environment: config.environment,\n });\n\n await assertReducerNativeTestingWorkspace(projectRoot);\n\n const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({\n projectRoot,\n projectConfig,\n useRemoteRuntime,\n });\n const { bases, scenarios } = await generateReducerNativeArtifacts({\n projectRoot,\n scenarioPath: args.scenario,\n compiledResultId: runtimeIdentity.compiledResultId,\n gameId: runtimeIdentity.gameId,\n debug: Boolean(args.debug),\n });\n\n if (bases.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_BASES_FOUND_ERROR);\n }\n if (scenarios.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR);\n }\n\n if (useRemoteRuntime && config.authToken) {\n await configureClient(config);\n await uploadGeneratedPreviewProjection({\n projectRoot,\n gameId: runtimeIdentity.gameId,\n bases,\n });\n } else {\n consola.info(\n \"Skipping preview projection upload because this test generation is local-only.\",\n );\n }\n\n consola.success(\n `Generated ${bases.length} base state(s) for ${scenarios.length} scenario(s).`,\n );\n },\n});\n\nconst runCommand = defineCommand({\n meta: {\n name: \"run\",\n description: \"Run reducer-native scenarios from test/scenarios\",\n },\n args: {\n scenario: {\n type: \"string\",\n description: \"Optional scenario file path under test/scenarios\",\n },\n debug: {\n type: \"boolean\",\n description: \"Print full reducer-native validation details\",\n default: false,\n },\n \"update-snapshots\": {\n type: \"boolean\",\n description: \"Refresh generated projection and scenario snapshots\",\n default: false,\n },\n runner: {\n type: \"string\",\n valueHint: \"reducer|remote|browser\",\n description:\n \"Scenario runner: reducer (in-process, default), remote (live sessions against the configured backend), or browser (local web stack).\",\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedFlags = parseConfigFlags(args);\n const useRemoteRuntime = shouldUseRemoteTestRuntime(parsedFlags.env);\n const runner = resolveRequestedRunner(args.runner) ?? \"reducer\";\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedFlags,\n {\n requireAuth:\n useRemoteRuntime || runner === \"remote\" || runner === \"browser\",\n },\n );\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot,\n projectConfig,\n environment: config.environment,\n });\n\n await assertReducerNativeTestingWorkspace(projectRoot);\n\n const runtimeIdentity = await resolveReducerNativeRuntimeIdentity({\n projectRoot,\n projectConfig,\n useRemoteRuntime,\n runner,\n });\n const summary = await runReducerNativeScenarios({\n projectRoot,\n projectConfig,\n resolvedConfig: config,\n runner,\n scenarioPath: args.scenario,\n compiledResultId: runtimeIdentity.compiledResultId,\n gameId: runtimeIdentity.gameId,\n debug: Boolean(args.debug),\n updateSnapshots: Boolean(args[\"update-snapshots\"]),\n });\n\n for (const result of summary.results) {\n if (result.success) {\n consola.success(`PASS ${result.id}`);\n } else if (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE &&\n result.error\n ) {\n consola.error(result.error);\n } else {\n consola.error(\n `FAIL ${result.id}: ${result.error ?? \"Scenario failed\"}`,\n );\n }\n }\n\n consola.info(\n `Test summary: ${summary.passed} passed, ${summary.failed} failed.`,\n );\n if (summary.failed > 0) {\n process.exitCode = resolveTestRunExitCode(summary);\n }\n },\n});\n\nexport default defineCommand({\n meta: {\n name: \"test\",\n description: \"Reducer-native test runner with typed bases and scenarios\",\n },\n subCommands: {\n generate: generateCommand,\n run: runCommand,\n },\n});\n","import { IS_PUBLISHED_BUILD } from \"../../build-target.js\";\n\nexport function isRemoteTestEnvironment(\n environment: string | undefined,\n): environment is \"staging\" | \"prod\" {\n return environment === \"staging\" || environment === \"prod\";\n}\n\nexport function shouldUseRemoteTestRuntime(\n environment: string | undefined,\n): boolean {\n return IS_PUBLISHED_BUILD || isRemoteTestEnvironment(environment);\n}\n","import consola from \"consola\";\nimport type { CompiledResult } from \"@dreamboard-games/api-client\";\nimport type { ProjectConfig } from \"../../types.js\";\nimport {\n findProjectCompiledResultsForRevision,\n getProjectCompiledResultSdk,\n} from \"../api/compiled-results-api.js\";\nimport {\n getProjectCompileState,\n getProjectAuthoringState,\n getProjectPendingAuthoringSync,\n} from \"../project/project-state.js\";\n\nexport async function resolveLatestCompiledResult(\n projectRoot: string,\n projectConfig: ProjectConfig,\n): Promise<CompiledResult> {\n void projectRoot;\n const authoring = getProjectAuthoringState(projectConfig);\n if (getProjectPendingAuthoringSync(projectConfig)) {\n throw new Error(\n \"Previous sync did not finish updating local scaffold files. Run 'dreamboard sync' again first.\",\n );\n }\n if (authoring.revisionDigest) {\n const compile = getProjectCompileState(projectConfig);\n const latestSuccess = (\n await findProjectCompiledResultsForRevision({\n projectId: projectConfig.projectId,\n revisionDigest: authoring.revisionDigest,\n })\n ).find((result) => result.success);\n const matchingLocalSuccess =\n compile.latestSuccessful?.revisionDigest === authoring.revisionDigest\n ? compile.latestSuccessful\n : undefined;\n const resolvedSuccess =\n latestSuccess ??\n (matchingLocalSuccess?.resultId\n ? await getProjectCompiledResultSdk(\n projectConfig.projectId,\n matchingLocalSuccess.resultId,\n )\n : undefined);\n\n if (!resolvedSuccess?.success) {\n throw new Error(\n \"No successful compile exists for the current authored revision. Run 'dreamboard compile' first.\",\n );\n }\n\n const resultRevisionDigest = (resolvedSuccess as { revisionDigest?: string })\n .revisionDigest;\n if (\n resultRevisionDigest &&\n resultRevisionDigest !== authoring.revisionDigest\n ) {\n consola.warn(\n `Latest successful compile ${resolvedSuccess.id} belongs to ${resultRevisionDigest}, not ${authoring.revisionDigest}.`,\n );\n }\n\n consola.info(\n `Project summary:\\n compiledResultId: ${resolvedSuccess.id}\\n revisionDigest: ${authoring.revisionDigest}`,\n );\n\n return resolvedSuccess;\n }\n\n throw new Error(\n \"This workspace does not know its project revision yet. Run 'dreamboard sync' first.\",\n );\n}\n","import { defineCommand, runMain, type CommandDef } from \"citty\";\nimport consola from \"consola\";\nimport cmdClone from \"./commands/clone.js\";\nimport cmdCompile from \"./commands/compile.js\";\nimport cmdConfig from \"./commands/config.js\";\nimport cmdDev from \"./commands/dev.js\";\nimport cmdJoin from \"./commands/join.js\";\nimport cmdLogin from \"./commands/login.js\";\nimport cmdLogout from \"./commands/logout.js\";\nimport cmdNew from \"./commands/new.js\";\nimport cmdPull from \"./commands/pull.js\";\nimport cmdStatus from \"./commands/status.js\";\nimport cmdSync from \"./commands/sync.js\";\nimport cmdTest from \"./commands/test.js\";\nimport { formatCliError, getCliErrorExitCode } from \"./utils/errors.js\";\n\n// ---------------------------------------------------------------------------\n// Global error handlers prevent runtime-specific stack previews from spilling\n// into CLI output. Instead we emit a single clean error line.\n// ---------------------------------------------------------------------------\ntype FatalErrorHandler = (error: unknown) => never;\n\nfunction handleFatalError(error: unknown): never {\n const message = formatCliError(error);\n process.stderr.write(`Error: ${message}\\n`);\n process.exit(getCliErrorExitCode(error));\n throw error;\n}\n\nprocess.on(\"uncaughtException\", handleFatalError);\nprocess.on(\"unhandledRejection\", handleFatalError);\n\nconsola.options.formatOptions.date = false;\n\nconst publicSubCommands = {\n new: cmdNew,\n clone: cmdClone,\n sync: cmdSync,\n compile: cmdCompile,\n pull: cmdPull,\n status: cmdStatus,\n dev: cmdDev,\n join: cmdJoin,\n test: cmdTest,\n login: cmdLogin,\n logout: cmdLogout,\n config: cmdConfig,\n};\n\nexport type DreamboardSubCommand = CommandDef<any>;\n\ntype DreamboardCommandMap = Record<string, DreamboardSubCommand>;\n\nfunction wrapCommandMapForCli(\n commands: DreamboardCommandMap,\n fatalErrorHandler: FatalErrorHandler,\n): DreamboardCommandMap {\n return Object.fromEntries(\n Object.entries(commands).map(([name, command]) => [\n name,\n wrapCommandForCli(command, fatalErrorHandler),\n ]),\n );\n}\n\nexport function wrapCommandForCli(\n command: DreamboardSubCommand,\n fatalErrorHandler: FatalErrorHandler = handleFatalError,\n): DreamboardSubCommand {\n const subCommands = command.subCommands as DreamboardCommandMap | undefined;\n return {\n ...command,\n subCommands: subCommands\n ? wrapCommandMapForCli(subCommands, fatalErrorHandler)\n : undefined,\n run: command.run\n ? async (context) => {\n try {\n return await command.run?.(context);\n } catch (error) {\n fatalErrorHandler(error);\n }\n }\n : undefined,\n };\n}\n\nexport function runDreamboardCli(\n internalSubCommands: Record<string, DreamboardSubCommand> = {},\n): void {\n const subCommands = wrapCommandMapForCli(\n {\n ...publicSubCommands,\n ...internalSubCommands,\n },\n handleFatalError,\n );\n\n const main = defineCommand({\n meta: {\n name: \"dreamboard\",\n version: \"0.1.29\",\n description: \"Dreamboard CLI — game development platform\",\n },\n subCommands,\n });\n\n void runMain(main).catch(handleFatalError);\n}\n","import cmdAuth from \"./commands/auth.js\";\nimport cmdQuery from \"./commands/query.js\";\nimport { runDreamboardCli } from \"./cli-main.js\";\n\nrunDreamboardCli({ query: cmdQuery, auth: cmdAuth });\n"],"mappings":"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K,OACnB,KAAK,OAAS,KAAK,OACnB,MAAM,QACN,KAAK,QAAS,KAAK,QACnB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KA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","names":["crypto","i","l","c","env","r","t","o","i","a","l","c","i","l","i","s","ansiRegex","stripAnsi","env","c","_","getColor","createConsola","platform","crypto","path","error","unlink","path","crypto","spawn","existsSync","readFile","rm","path","fileURLToPath","path","fileURLToPath","path","readJsonFile","rm","writeJsonFile","readFile","mergePnpmConfig","crypto","existsSync","spawn","path","unlink","spawn","existsSync","readFileSync","path","fileURLToPath","MODULE_DIR","path","fileURLToPath","existsSync","readFileSync","spawn","path","path","path","spawn","lstat","path","require","pathExists","queue","path","createHash","createRequire","createServer","EventEmitter","EventEmitter","createRequire","path","fileURLToPath","existsSync","require","createRequire","path","fileURLToPath","existsSync","path","unlink","formatUnknown","path","unlink","existsSync","path","normalizePath","path","require","createRequire","platform","createServer","path","path","path","path","playerIds","table","queue","STALE_DEV_SESSION_RESET_NOTICE","path","error","compiledResult","createHash","a","b","path","randomUUID","randomUUID","randomUUID","formatUnknown","requireString","randomUUID","path","crypto","crypto","path","path","path","path","fallbackRegistryUrl","workspaceLocalMaintainerRegistry","runLoggedStep","path","readFile","path","path","readFile","runCommand"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli-main.ts","../../../node_modules/.pnpm/citty@0.2.2/node_modules/citty/dist/_chunks/libs/scule.mjs","../../../node_modules/.pnpm/citty@0.2.2/node_modules/citty/dist/index.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/core.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/index.mjs","../../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs","../src/commands/auth.ts","../src/auth/auth-server.ts","../../../packages/cli-core/src/results/command-result.ts","../../../packages/cli-core/src/progress/progress-events.ts","../../../packages/cli-core/src/auth/git-credential.ts","../../../packages/cli-core/src/git/system-git.ts","../../../packages/cli-core/src/git/bootstrap-config.ts","../src/services/git/git-credential-helper.ts","../src/services/api/project-api.ts","../src/services/api/project-repository-api.ts","../src/services/api/source-build-release-api.ts","../../../packages/api-client/dist/source-revisions.js","../src/services/api/source-revisions-api.ts","../src/commands/commit-scoped.ts","../src/commands/build.ts","../src/commands/dev.ts","../src/utils/dev-session.ts","../src/utils/jwt.ts","../src/utils/player-count.ts","../src/services/dev-host/loader.ts","../src/services/dev-host/platform.ts","../src/services/project/remote-project.ts","../src/services/project/local-typecheck.ts","../src/services/project/local-maintainer-registry.ts","../src/services/project/dependency-portability.ts","../src/services/project/reducer-contract-preflight.ts","../src/services/project/reducer-bundle-preflight.ts","../src/services/project/source-revision-paths.ts","../src/commands/doctor.ts","../src/commands/preview.ts","../src/commands/project-create.ts","../src/services/git/workspace-origin.ts","../src/utils/uuid-v7.ts","../src/commands/project-clone.ts","../src/commands/project.ts","../src/commands/release.ts","../src/commands/test.ts","../src/commands/verify.ts","../src/services/verification/exact-commit-verifier.ts","../src/machine-output.ts","../src/index.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { defineCommand, runMain, type CommandDef } from \"citty\";\nimport consola from \"consola\";\nimport cmdAuth from \"./commands/auth.js\";\nimport cmdBuild from \"./commands/build.js\";\nimport cmdDev from \"./commands/dev.js\";\nimport cmdDoctor from \"./commands/doctor.js\";\nimport cmdPreview from \"./commands/preview.js\";\nimport cmdProject from \"./commands/project.js\";\nimport cmdRelease from \"./commands/release.js\";\nimport cmdTest from \"./commands/test.js\";\nimport cmdVerify from \"./commands/verify.js\";\nimport { formatCliError, getCliErrorExitCode } from \"./utils/errors.js\";\nimport {\n commandPathToId,\n consumeMachineOutputMode,\n emitMachineFailureAndExit,\n runWithMachineOutput,\n type MachineOutputContext,\n} from \"./machine-output.js\";\n\n// ---------------------------------------------------------------------------\n// Global error handlers prevent runtime-specific stack previews from spilling\n// into CLI output. Instead we emit a single clean error line.\n// ---------------------------------------------------------------------------\ntype FatalErrorHandler = (error: unknown) => never;\n\nlet machineOutputContext: MachineOutputContext | null = null;\n\nfunction readCliVersion(): string {\n const packageJson = JSON.parse(\n readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\"),\n ) as { version?: unknown };\n\n if (typeof packageJson.version !== \"string\") {\n throw new Error(\"Unable to read Dreamboard CLI version from package.json.\");\n }\n\n return packageJson.version;\n}\n\nfunction handleFatalError(error: unknown): never {\n if (machineOutputContext) {\n emitMachineFailureAndExit(\n machineOutputContext,\n commandPathToId(process.argv.slice(2)),\n error,\n );\n }\n const message = formatCliError(error);\n process.stderr.write(`Error: ${message}\\n`);\n process.exit(getCliErrorExitCode(error));\n throw error;\n}\n\nprocess.on(\"uncaughtException\", handleFatalError);\nprocess.on(\"unhandledRejection\", handleFatalError);\n\nconsola.options.formatOptions.date = false;\n\nconst cliVersion = readCliVersion();\n\nexport const publicSubCommands = {\n auth: cmdAuth,\n project: cmdProject,\n verify: cmdVerify,\n test: cmdTest,\n dev: cmdDev,\n build: cmdBuild,\n preview: cmdPreview,\n release: cmdRelease,\n doctor: cmdDoctor,\n};\n\nexport type DreamboardSubCommand = CommandDef<any>;\n\ntype DreamboardCommandMap = Record<string, DreamboardSubCommand>;\n\nfunction wrapCommandMapForCli(\n commands: DreamboardCommandMap,\n fatalErrorHandler: FatalErrorHandler,\n parentPath: readonly string[] = [],\n): DreamboardCommandMap {\n return Object.fromEntries(\n Object.entries(commands).map(([name, command]) => [\n name,\n wrapCommandForCli(command, fatalErrorHandler, [...parentPath, name]),\n ]),\n );\n}\n\nexport function wrapCommandForCli(\n command: DreamboardSubCommand,\n fatalErrorHandler: FatalErrorHandler = handleFatalError,\n commandPath: readonly string[] = [],\n): DreamboardSubCommand {\n const subCommands = command.subCommands as DreamboardCommandMap | undefined;\n return {\n ...command,\n subCommands: subCommands\n ? wrapCommandMapForCli(subCommands, fatalErrorHandler, commandPath)\n : undefined,\n run: command.run\n ? async (context) => {\n try {\n if (machineOutputContext) {\n await runWithMachineOutput(\n machineOutputContext,\n commandPathToId(process.argv.slice(2)),\n async () => {\n await command.run?.(context);\n },\n );\n return;\n }\n return await command.run?.(context);\n } catch (error) {\n fatalErrorHandler(error);\n }\n }\n : undefined,\n };\n}\n\nexport function runDreamboardCli(\n internalSubCommands: Record<string, DreamboardSubCommand> = {},\n): void {\n machineOutputContext = consumeMachineOutputMode(process.argv);\n const subCommands = wrapCommandMapForCli(\n {\n ...publicSubCommands,\n ...internalSubCommands,\n },\n handleFatalError,\n );\n\n const main = defineCommand({\n meta: {\n name: \"dreamboard\",\n version: cliVersion,\n description: \"Dreamboard CLI — game development platform\",\n },\n subCommands,\n });\n\n void runMain(main).catch(handleFatalError);\n}\n","//#region node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs\nconst NUMBER_CHAR_RE = /\\d/;\nconst STR_SPLITTERS = [\n\t\"-\",\n\t\"_\",\n\t\"/\",\n\t\".\"\n];\nfunction isUppercase(char = \"\") {\n\tif (NUMBER_CHAR_RE.test(char)) return;\n\treturn char !== char.toLowerCase();\n}\nfunction splitByCase(str, separators) {\n\tconst splitters = separators ?? STR_SPLITTERS;\n\tconst parts = [];\n\tif (!str || typeof str !== \"string\") return parts;\n\tlet buff = \"\";\n\tlet previousUpper;\n\tlet previousSplitter;\n\tfor (const char of str) {\n\t\tconst isSplitter = splitters.includes(char);\n\t\tif (isSplitter === true) {\n\t\t\tparts.push(buff);\n\t\t\tbuff = \"\";\n\t\t\tpreviousUpper = void 0;\n\t\t\tcontinue;\n\t\t}\n\t\tconst isUpper = isUppercase(char);\n\t\tif (previousSplitter === false) {\n\t\t\tif (previousUpper === false && isUpper === true) {\n\t\t\t\tparts.push(buff);\n\t\t\t\tbuff = char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (previousUpper === true && isUpper === false && buff.length > 1) {\n\t\t\t\tconst lastChar = buff.at(-1);\n\t\t\t\tparts.push(buff.slice(0, Math.max(0, buff.length - 1)));\n\t\t\t\tbuff = lastChar + char;\n\t\t\t\tpreviousUpper = isUpper;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tbuff += char;\n\t\tpreviousUpper = isUpper;\n\t\tpreviousSplitter = isSplitter;\n\t}\n\tparts.push(buff);\n\treturn parts;\n}\nfunction upperFirst(str) {\n\treturn str ? str[0].toUpperCase() + str.slice(1) : \"\";\n}\nfunction lowerFirst(str) {\n\treturn str ? str[0].toLowerCase() + str.slice(1) : \"\";\n}\nfunction pascalCase(str, opts) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => upperFirst(opts?.normalize ? p.toLowerCase() : p)).join(\"\") : \"\";\n}\nfunction camelCase(str, opts) {\n\treturn lowerFirst(pascalCase(str || \"\", opts));\n}\nfunction kebabCase(str, joiner) {\n\treturn str ? (Array.isArray(str) ? str : splitByCase(str)).map((p) => p.toLowerCase()).join(joiner ?? \"-\") : \"\";\n}\nfunction snakeCase(str) {\n\treturn kebabCase(str || \"\", \"_\");\n}\n//#endregion\nexport { kebabCase as n, snakeCase as r, camelCase as t };\n","import { n as kebabCase, r as snakeCase, t as camelCase } from \"./_chunks/libs/scule.mjs\";\nimport { parseArgs as parseArgs$1 } from \"node:util\";\n//#region src/_utils.ts\nfunction toArray(val) {\n\tif (Array.isArray(val)) return val;\n\treturn val === void 0 ? [] : [val];\n}\nfunction formatLineColumns(lines, linePrefix = \"\") {\n\tconst maxLength = [];\n\tfor (const line of lines) for (const [i, element] of line.entries()) maxLength[i] = Math.max(maxLength[i] || 0, element.length);\n\treturn lines.map((l) => l.map((c, i) => linePrefix + c[i === 0 ? \"padStart\" : \"padEnd\"](maxLength[i])).join(\" \")).join(\"\\n\");\n}\nfunction resolveValue(input) {\n\treturn typeof input === \"function\" ? input() : input;\n}\nvar CLIError = class extends Error {\n\tcode;\n\tconstructor(message, code) {\n\t\tsuper(message);\n\t\tthis.name = \"CLIError\";\n\t\tthis.code = code;\n\t}\n};\n//#endregion\n//#region src/_parser.ts\nfunction parseRawArgs(args = [], opts = {}) {\n\tconst booleans = new Set(opts.boolean || []);\n\tconst strings = new Set(opts.string || []);\n\tconst aliasMap = opts.alias || {};\n\tconst defaults = opts.default || {};\n\tconst aliasToMain = /* @__PURE__ */ new Map();\n\tconst mainToAliases = /* @__PURE__ */ new Map();\n\tfor (const [key, value] of Object.entries(aliasMap)) {\n\t\tconst targets = value;\n\t\tfor (const target of targets) {\n\t\t\taliasToMain.set(key, target);\n\t\t\tif (!mainToAliases.has(target)) mainToAliases.set(target, []);\n\t\t\tmainToAliases.get(target).push(key);\n\t\t\taliasToMain.set(target, key);\n\t\t\tif (!mainToAliases.has(key)) mainToAliases.set(key, []);\n\t\t\tmainToAliases.get(key).push(target);\n\t\t}\n\t}\n\tconst options = {};\n\tfunction getType(name) {\n\t\tif (booleans.has(name)) return \"boolean\";\n\t\tconst aliases = mainToAliases.get(name) || [];\n\t\tfor (const alias of aliases) if (booleans.has(alias)) return \"boolean\";\n\t\treturn \"string\";\n\t}\n\tfunction isStringType(name) {\n\t\tif (strings.has(name)) return true;\n\t\tconst aliases = mainToAliases.get(name) || [];\n\t\tfor (const alias of aliases) if (strings.has(alias)) return true;\n\t\treturn false;\n\t}\n\tconst allOptions = new Set([\n\t\t...booleans,\n\t\t...strings,\n\t\t...Object.keys(aliasMap),\n\t\t...Object.values(aliasMap).flat(),\n\t\t...Object.keys(defaults)\n\t]);\n\tfor (const name of allOptions) if (!options[name]) options[name] = {\n\t\ttype: getType(name),\n\t\tdefault: defaults[name]\n\t};\n\tfor (const [alias, main] of aliasToMain.entries()) if (alias.length === 1 && options[main] && !options[main].short) options[main].short = alias;\n\tconst processedArgs = [];\n\tconst negatedFlags = {};\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg === \"--\") {\n\t\t\tprocessedArgs.push(...args.slice(i));\n\t\t\tbreak;\n\t\t}\n\t\tif (arg.startsWith(\"--no-\")) {\n\t\t\tconst flagName = arg.slice(5);\n\t\t\tnegatedFlags[flagName] = true;\n\t\t\tcontinue;\n\t\t}\n\t\tprocessedArgs.push(arg);\n\t}\n\tlet parsed;\n\ttry {\n\t\tparsed = parseArgs$1({\n\t\t\targs: processedArgs,\n\t\t\toptions: Object.keys(options).length > 0 ? options : void 0,\n\t\t\tallowPositionals: true,\n\t\t\tstrict: false\n\t\t});\n\t} catch {\n\t\tparsed = {\n\t\t\tvalues: {},\n\t\t\tpositionals: processedArgs\n\t\t};\n\t}\n\tconst out = { _: [] };\n\tout._ = parsed.positionals;\n\tfor (const [key, value] of Object.entries(parsed.values)) {\n\t\tlet coerced = value;\n\t\tif (getType(key) === \"boolean\" && typeof value === \"string\") coerced = value !== \"false\";\n\t\telse if (isStringType(key) && typeof value === \"boolean\") coerced = \"\";\n\t\tout[key] = coerced;\n\t}\n\tfor (const [name] of Object.entries(negatedFlags)) {\n\t\tout[name] = false;\n\t\tconst mainName = aliasToMain.get(name);\n\t\tif (mainName) out[mainName] = false;\n\t\tconst aliases = mainToAliases.get(name);\n\t\tif (aliases) for (const alias of aliases) out[alias] = false;\n\t}\n\tfor (const [alias, main] of aliasToMain.entries()) {\n\t\tif (out[alias] !== void 0 && out[main] === void 0) out[main] = out[alias];\n\t\tif (out[main] !== void 0 && out[alias] === void 0) out[alias] = out[main];\n\t\tif (out[alias] !== out[main] && defaults[main] === out[main]) out[main] = out[alias];\n\t}\n\treturn out;\n}\n//#endregion\n//#region src/_color.ts\nconst noColor = /* @__PURE__ */ (() => {\n\tconst env = globalThis.process?.env ?? {};\n\treturn env.NO_COLOR === \"1\" || env.TERM === \"dumb\" || env.TEST || env.CI;\n})();\nconst _c = (c, r = 39) => (t) => noColor ? t : `\\u001B[${c}m${t}\\u001B[${r}m`;\nconst bold = /* @__PURE__ */ _c(1, 22);\nconst cyan = /* @__PURE__ */ _c(36);\nconst gray = /* @__PURE__ */ _c(90);\nconst underline = /* @__PURE__ */ _c(4, 24);\n//#endregion\n//#region src/args.ts\nfunction parseArgs(rawArgs, argsDef) {\n\tconst parseOptions = {\n\t\tboolean: [],\n\t\tstring: [],\n\t\talias: {},\n\t\tdefault: {}\n\t};\n\tconst args = resolveArgs(argsDef);\n\tfor (const arg of args) {\n\t\tif (arg.type === \"positional\") continue;\n\t\tif (arg.type === \"string\" || arg.type === \"enum\") parseOptions.string.push(arg.name);\n\t\telse if (arg.type === \"boolean\") parseOptions.boolean.push(arg.name);\n\t\tif (arg.default !== void 0) parseOptions.default[arg.name] = arg.default;\n\t\tif (arg.alias) parseOptions.alias[arg.name] = arg.alias;\n\t\tconst camelName = camelCase(arg.name);\n\t\tconst kebabName = kebabCase(arg.name);\n\t\tif (camelName !== arg.name || kebabName !== arg.name) {\n\t\t\tconst existingAliases = toArray(parseOptions.alias[arg.name] || []);\n\t\t\tif (camelName !== arg.name && !existingAliases.includes(camelName)) existingAliases.push(camelName);\n\t\t\tif (kebabName !== arg.name && !existingAliases.includes(kebabName)) existingAliases.push(kebabName);\n\t\t\tif (existingAliases.length > 0) parseOptions.alias[arg.name] = existingAliases;\n\t\t}\n\t}\n\tconst parsed = parseRawArgs(rawArgs, parseOptions);\n\tconst [ ...positionalArguments] = parsed._;\n\tconst parsedArgsProxy = new Proxy(parsed, { get(target, prop) {\n\t\treturn target[prop] ?? target[camelCase(prop)] ?? target[kebabCase(prop)];\n\t} });\n\tfor (const [, arg] of args.entries()) if (arg.type === \"positional\") {\n\t\tconst nextPositionalArgument = positionalArguments.shift();\n\t\tif (nextPositionalArgument !== void 0) parsedArgsProxy[arg.name] = nextPositionalArgument;\n\t\telse if (arg.default === void 0 && arg.required !== false) throw new CLIError(`Missing required positional argument: ${arg.name.toUpperCase()}`, \"EARG\");\n\t\telse parsedArgsProxy[arg.name] = arg.default;\n\t} else if (arg.type === \"enum\") {\n\t\tconst argument = parsedArgsProxy[arg.name];\n\t\tconst options = arg.options || [];\n\t\tif (argument !== void 0 && options.length > 0 && !options.includes(argument)) throw new CLIError(`Invalid value for argument: ${cyan(`--${arg.name}`)} (${cyan(argument)}). Expected one of: ${options.map((o) => cyan(o)).join(\", \")}.`, \"EARG\");\n\t} else if (arg.required && parsedArgsProxy[arg.name] === void 0) throw new CLIError(`Missing required argument: --${arg.name}`, \"EARG\");\n\treturn parsedArgsProxy;\n}\nfunction resolveArgs(argsDef) {\n\tconst args = [];\n\tfor (const [name, argDef] of Object.entries(argsDef || {})) args.push({\n\t\t...argDef,\n\t\tname,\n\t\talias: toArray(argDef.alias)\n\t});\n\treturn args;\n}\n//#endregion\n//#region src/plugin.ts\nfunction defineCittyPlugin(plugin) {\n\treturn plugin;\n}\nasync function resolvePlugins(plugins) {\n\treturn Promise.all(plugins.map((p) => resolveValue(p)));\n}\n//#endregion\n//#region src/command.ts\nfunction defineCommand(def) {\n\treturn def;\n}\nasync function runCommand(cmd, opts) {\n\tconst cmdArgs = await resolveValue(cmd.args || {});\n\tconst parsedArgs = parseArgs(opts.rawArgs, cmdArgs);\n\tconst context = {\n\t\trawArgs: opts.rawArgs,\n\t\targs: parsedArgs,\n\t\tdata: opts.data,\n\t\tcmd\n\t};\n\tconst plugins = await resolvePlugins(cmd.plugins ?? []);\n\tlet result;\n\tlet runError;\n\ttry {\n\t\tfor (const plugin of plugins) await plugin.setup?.(context);\n\t\tif (typeof cmd.setup === \"function\") await cmd.setup(context);\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\t\tconst subCommandArgIndex = findSubCommandIndex(opts.rawArgs, cmdArgs);\n\t\t\tconst explicitName = opts.rawArgs[subCommandArgIndex];\n\t\t\tif (explicitName) {\n\t\t\t\tconst subCommand = await _findSubCommand(subCommands, explicitName);\n\t\t\t\tif (!subCommand) throw new CLIError(`Unknown command ${cyan(explicitName)}`, \"E_UNKNOWN_COMMAND\");\n\t\t\t\tawait runCommand(subCommand, { rawArgs: opts.rawArgs.slice(subCommandArgIndex + 1) });\n\t\t\t} else {\n\t\t\t\tconst defaultSubCommand = await resolveValue(cmd.default);\n\t\t\t\tif (defaultSubCommand) {\n\t\t\t\t\tif (cmd.run) throw new CLIError(`Cannot specify both 'run' and 'default' on the same command.`, \"E_DEFAULT_CONFLICT\");\n\t\t\t\t\tconst subCommand = await _findSubCommand(subCommands, defaultSubCommand);\n\t\t\t\t\tif (!subCommand) throw new CLIError(`Default sub command ${cyan(defaultSubCommand)} not found in subCommands.`, \"E_UNKNOWN_COMMAND\");\n\t\t\t\t\tawait runCommand(subCommand, { rawArgs: opts.rawArgs });\n\t\t\t\t} else if (!cmd.run) throw new CLIError(`No command specified.`, \"E_NO_COMMAND\");\n\t\t\t}\n\t\t}\n\t\tif (typeof cmd.run === \"function\") result = await cmd.run(context);\n\t} catch (error) {\n\t\trunError = error;\n\t}\n\tconst cleanupErrors = [];\n\tif (typeof cmd.cleanup === \"function\") try {\n\t\tawait cmd.cleanup(context);\n\t} catch (error) {\n\t\tcleanupErrors.push(error);\n\t}\n\tfor (const plugin of [...plugins].reverse()) try {\n\t\tawait plugin.cleanup?.(context);\n\t} catch (error) {\n\t\tcleanupErrors.push(error);\n\t}\n\tif (runError) throw runError;\n\tif (cleanupErrors.length === 1) throw cleanupErrors[0];\n\tif (cleanupErrors.length > 1) throw new Error(\"Multiple cleanup errors\", { cause: cleanupErrors });\n\treturn { result };\n}\nasync function resolveSubCommand(cmd, rawArgs, parent) {\n\tconst subCommands = await resolveValue(cmd.subCommands);\n\tif (subCommands && Object.keys(subCommands).length > 0) {\n\t\tconst subCommandArgIndex = findSubCommandIndex(rawArgs, await resolveValue(cmd.args || {}));\n\t\tconst subCommandName = rawArgs[subCommandArgIndex];\n\t\tconst subCommand = await _findSubCommand(subCommands, subCommandName);\n\t\tif (subCommand) return resolveSubCommand(subCommand, rawArgs.slice(subCommandArgIndex + 1), cmd);\n\t}\n\treturn [cmd, parent];\n}\nasync function _findSubCommand(subCommands, name) {\n\tif (name in subCommands) return resolveValue(subCommands[name]);\n\tfor (const sub of Object.values(subCommands)) {\n\t\tconst resolved = await resolveValue(sub);\n\t\tconst meta = await resolveValue(resolved?.meta);\n\t\tif (meta?.alias) {\n\t\t\tif (toArray(meta.alias).includes(name)) return resolved;\n\t\t}\n\t}\n}\nfunction findSubCommandIndex(rawArgs, argsDef) {\n\tfor (let i = 0; i < rawArgs.length; i++) {\n\t\tconst arg = rawArgs[i];\n\t\tif (arg === \"--\") return -1;\n\t\tif (arg.startsWith(\"-\")) {\n\t\t\tif (!arg.includes(\"=\") && _isValueFlag(arg, argsDef)) i++;\n\t\t\tcontinue;\n\t\t}\n\t\treturn i;\n\t}\n\treturn -1;\n}\nfunction _isValueFlag(flag, argsDef) {\n\tconst name = flag.replace(/^-{1,2}/, \"\");\n\tconst normalized = camelCase(name);\n\tfor (const [key, def] of Object.entries(argsDef)) {\n\t\tif (def.type !== \"string\" && def.type !== \"enum\") continue;\n\t\tif (normalized === camelCase(key)) return true;\n\t\tif ((Array.isArray(def.alias) ? def.alias : def.alias ? [def.alias] : []).includes(name)) return true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region src/usage.ts\nasync function showUsage(cmd, parent) {\n\ttry {\n\t\tconsole.log(await renderUsage(cmd, parent) + \"\\n\");\n\t} catch (error) {\n\t\tconsole.error(error);\n\t}\n}\nconst negativePrefixRe = /^no[-A-Z]/;\nasync function renderUsage(cmd, parent) {\n\tconst cmdMeta = await resolveValue(cmd.meta || {});\n\tconst cmdArgs = resolveArgs(await resolveValue(cmd.args || {}));\n\tconst parentMeta = await resolveValue(parent?.meta || {});\n\tconst commandName = `${parentMeta.name ? `${parentMeta.name} ` : \"\"}` + (cmdMeta.name || process.argv[1]);\n\tconst argLines = [];\n\tconst posLines = [];\n\tconst commandsLines = [];\n\tconst usageLine = [];\n\tfor (const arg of cmdArgs) if (arg.type === \"positional\") {\n\t\tconst name = arg.name.toUpperCase();\n\t\tconst isRequired = arg.required !== false && arg.default === void 0;\n\t\tposLines.push([cyan(name + renderValueHint(arg)), renderDescription(arg, isRequired)]);\n\t\tusageLine.push(isRequired ? `<${name}>` : `[${name}]`);\n\t} else {\n\t\tconst isRequired = arg.required === true && arg.default === void 0;\n\t\tconst argStr = [...(arg.alias || []).map((a) => `-${a}`), `--${arg.name}`].join(\", \") + renderValueHint(arg);\n\t\targLines.push([cyan(argStr), renderDescription(arg, isRequired)]);\n\t\t/**\n\t\t* print negative boolean arg variant usage when\n\t\t* - enabled by default or has `negativeDescription`\n\t\t* - not prefixed with `no-` or `no[A-Z]`\n\t\t*/\n\t\tif (arg.type === \"boolean\" && (arg.default === true || arg.negativeDescription) && !negativePrefixRe.test(arg.name)) {\n\t\t\tconst negativeArgStr = [...(arg.alias || []).map((a) => `--no-${a}`), `--no-${arg.name}`].join(\", \");\n\t\t\targLines.push([cyan(negativeArgStr), [arg.negativeDescription, isRequired ? gray(\"(Required)\") : \"\"].filter(Boolean).join(\" \")]);\n\t\t}\n\t\tif (isRequired) usageLine.push(`--${arg.name}` + renderValueHint(arg));\n\t}\n\tif (cmd.subCommands) {\n\t\tconst commandNames = [];\n\t\tconst subCommands = await resolveValue(cmd.subCommands);\n\t\tfor (const [name, sub] of Object.entries(subCommands)) {\n\t\t\tconst meta = await resolveValue((await resolveValue(sub))?.meta);\n\t\t\tif (meta?.hidden) continue;\n\t\t\tconst aliases = toArray(meta?.alias);\n\t\t\tconst label = [name, ...aliases].join(\", \");\n\t\t\tcommandsLines.push([cyan(label), meta?.description || \"\"]);\n\t\t\tcommandNames.push(name, ...aliases);\n\t\t}\n\t\tusageLine.push(commandNames.join(\"|\"));\n\t}\n\tconst usageLines = [];\n\tconst version = cmdMeta.version || parentMeta.version;\n\tusageLines.push(gray(`${cmdMeta.description} (${commandName + (version ? ` v${version}` : \"\")})`), \"\");\n\tconst hasOptions = argLines.length > 0 || posLines.length > 0;\n\tusageLines.push(`${underline(bold(\"USAGE\"))} ${cyan(`${commandName}${hasOptions ? \" [OPTIONS]\" : \"\"} ${usageLine.join(\" \")}`)}`, \"\");\n\tif (posLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"ARGUMENTS\")), \"\");\n\t\tusageLines.push(formatLineColumns(posLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (argLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"OPTIONS\")), \"\");\n\t\tusageLines.push(formatLineColumns(argLines, \" \"));\n\t\tusageLines.push(\"\");\n\t}\n\tif (commandsLines.length > 0) {\n\t\tusageLines.push(underline(bold(\"COMMANDS\")), \"\");\n\t\tusageLines.push(formatLineColumns(commandsLines, \" \"));\n\t\tusageLines.push(\"\", `Use ${cyan(`${commandName} <command> --help`)} for more information about a command.`);\n\t}\n\treturn usageLines.filter((l) => typeof l === \"string\").join(\"\\n\");\n}\nfunction renderValueHint(arg) {\n\tconst valueHint = arg.valueHint ? `=<${arg.valueHint}>` : \"\";\n\tconst fallbackValueHint = valueHint || `=<${snakeCase(arg.name)}>`;\n\tif (!arg.type || arg.type === \"positional\" || arg.type === \"boolean\") return valueHint;\n\tif (arg.type === \"enum\" && arg.options?.length) return `=<${arg.options.join(\"|\")}>`;\n\treturn fallbackValueHint;\n}\nfunction renderDescription(arg, required) {\n\tconst requiredHint = required ? gray(\"(Required)\") : \"\";\n\tconst defaultHint = arg.default === void 0 ? \"\" : gray(`(Default: ${arg.default})`);\n\treturn [\n\t\targ.description,\n\t\trequiredHint,\n\t\tdefaultHint\n\t].filter(Boolean).join(\" \");\n}\n//#endregion\n//#region src/main.ts\nasync function runMain(cmd, opts = {}) {\n\tconst rawArgs = opts.rawArgs || process.argv.slice(2);\n\tconst showUsage$1 = opts.showUsage || showUsage;\n\ttry {\n\t\tconst builtinFlags = await _resolveBuiltinFlags(cmd);\n\t\tif (builtinFlags.help.length > 0 && rawArgs.some((arg) => builtinFlags.help.includes(arg))) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tprocess.exit(0);\n\t\t} else if (rawArgs.length === 1 && builtinFlags.version.includes(rawArgs[0])) {\n\t\t\tconst meta = typeof cmd.meta === \"function\" ? await cmd.meta() : await cmd.meta;\n\t\t\tif (!meta?.version) throw new CLIError(\"No version specified\", \"E_NO_VERSION\");\n\t\t\tconsole.log(meta.version);\n\t\t} else await runCommand(cmd, { rawArgs });\n\t} catch (error) {\n\t\tif (error instanceof CLIError) {\n\t\t\tawait showUsage$1(...await resolveSubCommand(cmd, rawArgs));\n\t\t\tconsole.error(error.message);\n\t\t} else console.error(error, \"\\n\");\n\t\tprocess.exit(1);\n\t}\n}\nfunction createMain(cmd) {\n\treturn (opts = {}) => runMain(cmd, opts);\n}\nasync function _resolveBuiltinFlags(cmd) {\n\tconst argsDef = await resolveValue(cmd.args || {});\n\tconst userNames = /* @__PURE__ */ new Set();\n\tconst userAliases = /* @__PURE__ */ new Set();\n\tfor (const [name, def] of Object.entries(argsDef)) {\n\t\tuserNames.add(name);\n\t\tfor (const alias of toArray(def.alias)) userAliases.add(alias);\n\t}\n\treturn {\n\t\thelp: _getBuiltinFlags(\"help\", \"h\", userNames, userAliases),\n\t\tversion: _getBuiltinFlags(\"version\", \"v\", userNames, userAliases)\n\t};\n}\nfunction _getBuiltinFlags(long, short, userNames, userAliases) {\n\tif (userNames.has(long) || userAliases.has(long)) return [];\n\tif (userNames.has(short) || userAliases.has(short)) return [`--${long}`];\n\treturn [`--${long}`, `-${short}`];\n}\n//#endregion\nexport { createMain, defineCittyPlugin, defineCommand, parseArgs, renderUsage, runCommand, runMain, showUsage };\n","const LogLevels = {\n silent: Number.NEGATIVE_INFINITY,\n fatal: 0,\n error: 0,\n warn: 1,\n log: 2,\n info: 3,\n success: 3,\n fail: 3,\n ready: 3,\n start: 3,\n box: 3,\n debug: 4,\n trace: 5,\n verbose: Number.POSITIVE_INFINITY\n};\nconst LogTypes = {\n // Silent\n silent: {\n level: -1\n },\n // Level 0\n fatal: {\n level: LogLevels.fatal\n },\n error: {\n level: LogLevels.error\n },\n // Level 1\n warn: {\n level: LogLevels.warn\n },\n // Level 2\n log: {\n level: LogLevels.log\n },\n // Level 3\n info: {\n level: LogLevels.info\n },\n success: {\n level: LogLevels.success\n },\n fail: {\n level: LogLevels.fail\n },\n ready: {\n level: LogLevels.info\n },\n start: {\n level: LogLevels.info\n },\n box: {\n level: LogLevels.info\n },\n // Level 4\n debug: {\n level: LogLevels.debug\n },\n // Level 5\n trace: {\n level: LogLevels.trace\n },\n // Verbose\n verbose: {\n level: LogLevels.verbose\n }\n};\n\nfunction isPlainObject$1(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$1(defaults)) {\n return _defu(baseObject, {}, namespace, merger);\n }\n const object = Object.assign({}, defaults);\n for (const key in 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$1(value) && isPlainObject$1(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();\n\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isLogObj(arg) {\n if (!isPlainObject(arg)) {\n return false;\n }\n if (!arg.message && !arg.args) {\n return false;\n }\n if (arg.stack) {\n return false;\n }\n return true;\n}\n\nlet paused = false;\nconst queue = [];\nclass Consola {\n options;\n _lastLog;\n _mockFn;\n /**\n * Creates an instance of Consola with specified options or defaults.\n *\n * @param {Partial<ConsolaOptions>} [options={}] - Configuration options for the Consola instance.\n */\n constructor(options = {}) {\n const types = options.types || LogTypes;\n this.options = defu(\n {\n ...options,\n defaults: { ...options.defaults },\n level: _normalizeLogLevel(options.level, types),\n reporters: [...options.reporters || []]\n },\n {\n types: LogTypes,\n throttle: 1e3,\n throttleMin: 5,\n formatOptions: {\n date: true,\n colors: false,\n compact: true\n }\n }\n );\n for (const type in types) {\n const defaults = {\n type,\n ...this.options.defaults,\n ...types[type]\n };\n this[type] = this._wrapLogFn(defaults);\n this[type].raw = this._wrapLogFn(\n defaults,\n true\n );\n }\n if (this.options.mockFn) {\n this.mockTypes();\n }\n this._lastLog = {};\n }\n /**\n * Gets the current log level of the Consola instance.\n *\n * @returns {number} The current log level.\n */\n get level() {\n return this.options.level;\n }\n /**\n * Sets the minimum log level that will be output by the instance.\n *\n * @param {number} level - The new log level to set.\n */\n set level(level) {\n this.options.level = _normalizeLogLevel(\n level,\n this.options.types,\n this.options.level\n );\n }\n /**\n * Displays a prompt to the user and returns the response.\n * Throw an error if `prompt` is not supported by the current configuration.\n *\n * @template T\n * @param {string} message - The message to display in the prompt.\n * @param {T} [opts] - Optional options for the prompt. See {@link PromptOptions}.\n * @returns {promise<T>} A promise that infer with the prompt options. See {@link PromptOptions}.\n */\n prompt(message, opts) {\n if (!this.options.prompt) {\n throw new Error(\"prompt is not supported!\");\n }\n return this.options.prompt(message, opts);\n }\n /**\n * Creates a new instance of Consola, inheriting options from the current instance, with possible overrides.\n *\n * @param {Partial<ConsolaOptions>} options - Optional overrides for the new instance. See {@link ConsolaOptions}.\n * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}.\n */\n create(options) {\n const instance = new Consola({\n ...this.options,\n ...options\n });\n if (this._mockFn) {\n instance.mockTypes(this._mockFn);\n }\n return instance;\n }\n /**\n * Creates a new Consola instance with the specified default log object properties.\n *\n * @param {InputLogObject} defaults - Default properties to include in any log from the new instance. See {@link InputLogObject}.\n * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}.\n */\n withDefaults(defaults) {\n return this.create({\n ...this.options,\n defaults: {\n ...this.options.defaults,\n ...defaults\n }\n });\n }\n /**\n * Creates a new Consola instance with a specified tag, which will be included in every log.\n *\n * @param {string} tag - The tag to include in each log of the new instance.\n * @returns {ConsolaInstance} A new Consola instance. See {@link ConsolaInstance}.\n */\n withTag(tag) {\n return this.withDefaults({\n tag: this.options.defaults.tag ? this.options.defaults.tag + \":\" + tag : tag\n });\n }\n /**\n * Adds a custom reporter to the Consola instance.\n * Reporters will be called for each log message, depending on their implementation and log level.\n *\n * @param {ConsolaReporter} reporter - The reporter to add. See {@link ConsolaReporter}.\n * @returns {Consola} The current Consola instance.\n */\n addReporter(reporter) {\n this.options.reporters.push(reporter);\n return this;\n }\n /**\n * Removes a custom reporter from the Consola instance.\n * If no reporter is specified, all reporters will be removed.\n *\n * @param {ConsolaReporter} reporter - The reporter to remove. See {@link ConsolaReporter}.\n * @returns {Consola} The current Consola instance.\n */\n removeReporter(reporter) {\n if (reporter) {\n const i = this.options.reporters.indexOf(reporter);\n if (i !== -1) {\n return this.options.reporters.splice(i, 1);\n }\n } else {\n this.options.reporters.splice(0);\n }\n return this;\n }\n /**\n * Replaces all reporters of the Consola instance with the specified array of reporters.\n *\n * @param {ConsolaReporter[]} reporters - The new reporters to set. See {@link ConsolaReporter}.\n * @returns {Consola} The current Consola instance.\n */\n setReporters(reporters) {\n this.options.reporters = Array.isArray(reporters) ? reporters : [reporters];\n return this;\n }\n wrapAll() {\n this.wrapConsole();\n this.wrapStd();\n }\n restoreAll() {\n this.restoreConsole();\n this.restoreStd();\n }\n /**\n * Overrides console methods with Consola logging methods for consistent logging.\n */\n wrapConsole() {\n for (const type in this.options.types) {\n if (!console[\"__\" + type]) {\n console[\"__\" + type] = console[type];\n }\n console[type] = this[type].raw;\n }\n }\n /**\n * Restores the original console methods, removing Consola overrides.\n */\n restoreConsole() {\n for (const type in this.options.types) {\n if (console[\"__\" + type]) {\n console[type] = console[\"__\" + type];\n delete console[\"__\" + type];\n }\n }\n }\n /**\n * Overrides standard output and error streams to redirect them through Consola.\n */\n wrapStd() {\n this._wrapStream(this.options.stdout, \"log\");\n this._wrapStream(this.options.stderr, \"log\");\n }\n _wrapStream(stream, type) {\n if (!stream) {\n return;\n }\n if (!stream.__write) {\n stream.__write = stream.write;\n }\n stream.write = (data) => {\n this[type].raw(String(data).trim());\n };\n }\n /**\n * Restores the original standard output and error streams, removing the Consola redirection.\n */\n restoreStd() {\n this._restoreStream(this.options.stdout);\n this._restoreStream(this.options.stderr);\n }\n _restoreStream(stream) {\n if (!stream) {\n return;\n }\n if (stream.__write) {\n stream.write = stream.__write;\n delete stream.__write;\n }\n }\n /**\n * Pauses logging, queues incoming logs until resumed.\n */\n pauseLogs() {\n paused = true;\n }\n /**\n * Resumes logging, processing any queued logs.\n */\n resumeLogs() {\n paused = false;\n const _queue = queue.splice(0);\n for (const item of _queue) {\n item[0]._logFn(item[1], item[2]);\n }\n }\n /**\n * Replaces logging methods with mocks if a mock function is provided.\n *\n * @param {ConsolaOptions[\"mockFn\"]} mockFn - The function to use for mocking logging methods. See {@link ConsolaOptions[\"mockFn\"]}.\n */\n mockTypes(mockFn) {\n const _mockFn = mockFn || this.options.mockFn;\n this._mockFn = _mockFn;\n if (typeof _mockFn !== \"function\") {\n return;\n }\n for (const type in this.options.types) {\n this[type] = _mockFn(type, this.options.types[type]) || this[type];\n this[type].raw = this[type];\n }\n }\n _wrapLogFn(defaults, isRaw) {\n return (...args) => {\n if (paused) {\n queue.push([this, defaults, args, isRaw]);\n return;\n }\n return this._logFn(defaults, args, isRaw);\n };\n }\n _logFn(defaults, args, isRaw) {\n if ((defaults.level || 0) > this.level) {\n return false;\n }\n const logObj = {\n date: /* @__PURE__ */ new Date(),\n args: [],\n ...defaults,\n level: _normalizeLogLevel(defaults.level, this.options.types)\n };\n if (!isRaw && args.length === 1 && isLogObj(args[0])) {\n Object.assign(logObj, args[0]);\n } else {\n logObj.args = [...args];\n }\n if (logObj.message) {\n logObj.args.unshift(logObj.message);\n delete logObj.message;\n }\n if (logObj.additional) {\n if (!Array.isArray(logObj.additional)) {\n logObj.additional = logObj.additional.split(\"\\n\");\n }\n logObj.args.push(\"\\n\" + logObj.additional.join(\"\\n\"));\n delete logObj.additional;\n }\n logObj.type = typeof logObj.type === \"string\" ? logObj.type.toLowerCase() : \"log\";\n logObj.tag = typeof logObj.tag === \"string\" ? logObj.tag : \"\";\n const resolveLog = (newLog = false) => {\n const repeated = (this._lastLog.count || 0) - this.options.throttleMin;\n if (this._lastLog.object && repeated > 0) {\n const args2 = [...this._lastLog.object.args];\n if (repeated > 1) {\n args2.push(`(repeated ${repeated} times)`);\n }\n this._log({ ...this._lastLog.object, args: args2 });\n this._lastLog.count = 1;\n }\n if (newLog) {\n this._lastLog.object = logObj;\n this._log(logObj);\n }\n };\n clearTimeout(this._lastLog.timeout);\n const diffTime = this._lastLog.time && logObj.date ? logObj.date.getTime() - this._lastLog.time.getTime() : 0;\n this._lastLog.time = logObj.date;\n if (diffTime < this.options.throttle) {\n try {\n const serializedLog = JSON.stringify([\n logObj.type,\n logObj.tag,\n logObj.args\n ]);\n const isSameLog = this._lastLog.serialized === serializedLog;\n this._lastLog.serialized = serializedLog;\n if (isSameLog) {\n this._lastLog.count = (this._lastLog.count || 0) + 1;\n if (this._lastLog.count > this.options.throttleMin) {\n this._lastLog.timeout = setTimeout(\n resolveLog,\n this.options.throttle\n );\n return;\n }\n }\n } catch {\n }\n }\n resolveLog(true);\n }\n _log(logObj) {\n for (const reporter of this.options.reporters) {\n reporter.log(logObj, {\n options: this.options\n });\n }\n }\n}\nfunction _normalizeLogLevel(input, types = {}, defaultLevel = 3) {\n if (input === void 0) {\n return defaultLevel;\n }\n if (typeof input === \"number\") {\n return input;\n }\n if (types[input] && types[input].level !== void 0) {\n return types[input].level;\n }\n return defaultLevel;\n}\nConsola.prototype.add = Consola.prototype.addReporter;\nConsola.prototype.remove = Consola.prototype.removeReporter;\nConsola.prototype.clear = Consola.prototype.removeReporter;\nConsola.prototype.withScope = Consola.prototype.withTag;\nConsola.prototype.mock = Consola.prototype.mockTypes;\nConsola.prototype.pause = Consola.prototype.pauseLogs;\nConsola.prototype.resume = Consola.prototype.resumeLogs;\nfunction createConsola(options = {}) {\n return new Consola(options);\n}\n\nexport { Consola, LogLevels, LogTypes, createConsola };\n","import { formatWithOptions } from 'node:util';\nimport { sep } from 'node:path';\n\nfunction parseStack(stack, message) {\n const cwd = process.cwd() + sep;\n const lines = stack.split(\"\\n\").splice(message.split(\"\\n\").length).map((l) => l.trim().replace(\"file://\", \"\").replace(cwd, \"\"));\n return lines;\n}\n\nfunction writeStream(data, stream) {\n const write = stream.__write || stream.write;\n return write.call(stream, data);\n}\n\nconst bracket = (x) => x ? `[${x}]` : \"\";\nclass BasicReporter {\n formatStack(stack, message, opts) {\n const indent = \" \".repeat((opts?.errorLevel || 0) + 1);\n return indent + parseStack(stack, message).join(`\n${indent}`);\n }\n formatError(err, opts) {\n const message = err.message ?? formatWithOptions(opts, err);\n const stack = err.stack ? this.formatStack(err.stack, message, opts) : \"\";\n const level = opts?.errorLevel || 0;\n const causedPrefix = level > 0 ? `${\" \".repeat(level)}[cause]: ` : \"\";\n const causedError = err.cause ? \"\\n\\n\" + this.formatError(err.cause, { ...opts, errorLevel: level + 1 }) : \"\";\n return causedPrefix + message + \"\\n\" + stack + causedError;\n }\n formatArgs(args, opts) {\n const _args = args.map((arg) => {\n if (arg && typeof arg.stack === \"string\") {\n return this.formatError(arg, opts);\n }\n return arg;\n });\n return formatWithOptions(opts, ..._args);\n }\n formatDate(date, opts) {\n return opts.date ? date.toLocaleTimeString() : \"\";\n }\n filterAndJoin(arr) {\n return arr.filter(Boolean).join(\" \");\n }\n formatLogObj(logObj, opts) {\n const message = this.formatArgs(logObj.args, opts);\n if (logObj.type === \"box\") {\n return \"\\n\" + [\n bracket(logObj.tag),\n logObj.title && logObj.title,\n ...message.split(\"\\n\")\n ].filter(Boolean).map((l) => \" > \" + l).join(\"\\n\") + \"\\n\";\n }\n return this.filterAndJoin([\n bracket(logObj.type),\n bracket(logObj.tag),\n message\n ]);\n }\n log(logObj, ctx) {\n const line = this.formatLogObj(logObj, {\n columns: ctx.options.stdout.columns || 0,\n ...ctx.options.formatOptions\n });\n return writeStream(\n line + \"\\n\",\n logObj.level < 2 ? ctx.options.stderr || process.stderr : ctx.options.stdout || process.stdout\n );\n }\n}\n\nexport { BasicReporter as B, parseStack as p };\n","import { createConsola as createConsola$1, LogLevels } from './core.mjs';\nexport { Consola, LogTypes } from './core.mjs';\nimport { B as BasicReporter, p as parseStack } from './shared/consola.DRwqZj3T.mjs';\nimport g$1 from 'node:process';\nimport { e as colors, d as box, s as stripAnsi$1 } from './shared/consola.DXBYu-KD.mjs';\nimport 'node:util';\nimport 'node:path';\nimport 'node:tty';\n\nconst r=Object.create(null),i=e=>globalThis.process?.env||import.meta.env||globalThis.Deno?.env.toObject()||globalThis.__env__||(e?r:globalThis),o=new Proxy(r,{get(e,s){return i()[s]??r[s]},has(e,s){const E=i();return s in E||s in r},set(e,s,E){const B=i(true);return B[s]=E,true},deleteProperty(e,s){if(!s)return false;const E=i(true);return delete E[s],true},ownKeys(){const e=i(true);return Object.keys(e)}}),t=typeof process<\"u\"&&process.env&&process.env.NODE_ENV||\"\",f=[[\"APPVEYOR\"],[\"AWS_AMPLIFY\",\"AWS_APP_ID\",{ci:true}],[\"AZURE_PIPELINES\",\"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI\"],[\"AZURE_STATIC\",\"INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN\"],[\"APPCIRCLE\",\"AC_APPCIRCLE\"],[\"BAMBOO\",\"bamboo_planKey\"],[\"BITBUCKET\",\"BITBUCKET_COMMIT\"],[\"BITRISE\",\"BITRISE_IO\"],[\"BUDDY\",\"BUDDY_WORKSPACE_ID\"],[\"BUILDKITE\"],[\"CIRCLE\",\"CIRCLECI\"],[\"CIRRUS\",\"CIRRUS_CI\"],[\"CLOUDFLARE_PAGES\",\"CF_PAGES\",{ci:true}],[\"CODEBUILD\",\"CODEBUILD_BUILD_ARN\"],[\"CODEFRESH\",\"CF_BUILD_ID\"],[\"DRONE\"],[\"DRONE\",\"DRONE_BUILD_EVENT\"],[\"DSARI\"],[\"GITHUB_ACTIONS\"],[\"GITLAB\",\"GITLAB_CI\"],[\"GITLAB\",\"CI_MERGE_REQUEST_ID\"],[\"GOCD\",\"GO_PIPELINE_LABEL\"],[\"LAYERCI\"],[\"HUDSON\",\"HUDSON_URL\"],[\"JENKINS\",\"JENKINS_URL\"],[\"MAGNUM\"],[\"NETLIFY\"],[\"NETLIFY\",\"NETLIFY_LOCAL\",{ci:false}],[\"NEVERCODE\"],[\"RENDER\"],[\"SAIL\",\"SAILCI\"],[\"SEMAPHORE\"],[\"SCREWDRIVER\"],[\"SHIPPABLE\"],[\"SOLANO\",\"TDDIUM\"],[\"STRIDER\"],[\"TEAMCITY\",\"TEAMCITY_VERSION\"],[\"TRAVIS\"],[\"VERCEL\",\"NOW_BUILDER\"],[\"VERCEL\",\"VERCEL\",{ci:false}],[\"VERCEL\",\"VERCEL_ENV\",{ci:false}],[\"APPCENTER\",\"APPCENTER_BUILD_ID\"],[\"CODESANDBOX\",\"CODESANDBOX_SSE\",{ci:false}],[\"CODESANDBOX\",\"CODESANDBOX_HOST\",{ci:false}],[\"STACKBLITZ\"],[\"STORMKIT\"],[\"CLEAVR\"],[\"ZEABUR\"],[\"CODESPHERE\",\"CODESPHERE_APP_ID\",{ci:true}],[\"RAILWAY\",\"RAILWAY_PROJECT_ID\"],[\"RAILWAY\",\"RAILWAY_SERVICE_ID\"],[\"DENO-DEPLOY\",\"DENO_DEPLOYMENT_ID\"],[\"FIREBASE_APP_HOSTING\",\"FIREBASE_APP_HOSTING\",{ci:true}]];function b(){if(globalThis.process?.env)for(const e of f){const s=e[1]||e[0];if(globalThis.process?.env[s])return {name:e[0].toLowerCase(),...e[2]}}return globalThis.process?.env?.SHELL===\"/bin/jsh\"&&globalThis.process?.versions?.webcontainer?{name:\"stackblitz\",ci:false}:{name:\"\",ci:false}}const l=b();l.name;function n(e){return e?e!==\"false\":false}const I=globalThis.process?.platform||\"\",T=n(o.CI)||l.ci!==false,a=n(globalThis.process?.stdout&&globalThis.process?.stdout.isTTY),g=n(o.DEBUG),R=t===\"test\"||n(o.TEST);n(o.MINIMAL)||T||R||!a;const A=/^win/i.test(I);!n(o.NO_COLOR)&&(n(o.FORCE_COLOR)||(a||A)&&o.TERM!==\"dumb\"||T);const C=(globalThis.process?.versions?.node||\"\").replace(/^v/,\"\")||null;Number(C?.split(\".\")[0])||null;const y=globalThis.process||Object.create(null),_={versions:{}};new Proxy(y,{get(e,s){if(s===\"env\")return o;if(s in e)return e[s];if(s in _)return _[s]}});const c=globalThis.process?.release?.name===\"node\",O=!!globalThis.Bun||!!globalThis.process?.versions?.bun,D=!!globalThis.Deno,L=!!globalThis.fastly,S=!!globalThis.Netlify,u=!!globalThis.EdgeRuntime,N=globalThis.navigator?.userAgent===\"Cloudflare-Workers\",F=[[S,\"netlify\"],[u,\"edge-light\"],[N,\"workerd\"],[L,\"fastly\"],[D,\"deno\"],[O,\"bun\"],[c,\"node\"]];function G(){const e=F.find(s=>s[0]);if(e)return {name:e[1]}}const P=G();P?.name||\"\";\n\nfunction ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n\nconst regex = ansiRegex();\n\nfunction stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n\n// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x === 0x16FF0\n\t\t|| x === 0x16FF1\n\t\t|| x >= 0x17000 && x <= 0x187F7\n\t\t|| x >= 0x18800 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D08\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D7\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA89\n\t\t|| x >= 0x1FA8F && x <= 0x1FAC6\n\t\t|| x >= 0x1FACE && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAE9\n\t\t|| x >= 0x1FAF0 && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nfunction eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\nconst emojiRegex = () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE89\\uDE8F-\\uDEC2\\uDEC6\\uDECE-\\uDEDC\\uDEDF-\\uDEE9]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n\nconst segmenter = globalThis.Intl?.Segmenter ? new Intl.Segmenter() : { segment: (str) => str.split('') };\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nfunction stringWidth$1(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n\nfunction isUnicodeSupported() {\n\tconst {env} = g$1;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (g$1.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n\nconst TYPE_COLOR_MAP = {\n info: \"cyan\",\n fail: \"red\",\n success: \"green\",\n ready: \"green\",\n start: \"magenta\"\n};\nconst LEVEL_COLOR_MAP = {\n 0: \"red\",\n 1: \"yellow\"\n};\nconst unicode = isUnicodeSupported();\nconst s = (c, fallback) => unicode ? c : fallback;\nconst TYPE_ICONS = {\n error: s(\"\\u2716\", \"\\xD7\"),\n fatal: s(\"\\u2716\", \"\\xD7\"),\n ready: s(\"\\u2714\", \"\\u221A\"),\n warn: s(\"\\u26A0\", \"\\u203C\"),\n info: s(\"\\u2139\", \"i\"),\n success: s(\"\\u2714\", \"\\u221A\"),\n debug: s(\"\\u2699\", \"D\"),\n trace: s(\"\\u2192\", \"\\u2192\"),\n fail: s(\"\\u2716\", \"\\xD7\"),\n start: s(\"\\u25D0\", \"o\"),\n log: \"\"\n};\nfunction stringWidth(str) {\n const hasICU = typeof Intl === \"object\";\n if (!hasICU || !Intl.Segmenter) {\n return stripAnsi$1(str).length;\n }\n return stringWidth$1(str);\n}\nclass FancyReporter extends BasicReporter {\n formatStack(stack, message, opts) {\n const indent = \" \".repeat((opts?.errorLevel || 0) + 1);\n return `\n${indent}` + parseStack(stack, message).map(\n (line) => \" \" + line.replace(/^at +/, (m) => colors.gray(m)).replace(/\\((.+)\\)/, (_, m) => `(${colors.cyan(m)})`)\n ).join(`\n${indent}`);\n }\n formatType(logObj, isBadge, opts) {\n const typeColor = TYPE_COLOR_MAP[logObj.type] || LEVEL_COLOR_MAP[logObj.level] || \"gray\";\n if (isBadge) {\n return getBgColor(typeColor)(\n colors.black(` ${logObj.type.toUpperCase()} `)\n );\n }\n const _type = typeof TYPE_ICONS[logObj.type] === \"string\" ? TYPE_ICONS[logObj.type] : logObj.icon || logObj.type;\n return _type ? getColor(typeColor)(_type) : \"\";\n }\n formatLogObj(logObj, opts) {\n const [message, ...additional] = this.formatArgs(logObj.args, opts).split(\n \"\\n\"\n );\n if (logObj.type === \"box\") {\n return box(\n characterFormat(\n message + (additional.length > 0 ? \"\\n\" + additional.join(\"\\n\") : \"\")\n ),\n {\n title: logObj.title ? characterFormat(logObj.title) : void 0,\n style: logObj.style\n }\n );\n }\n const date = this.formatDate(logObj.date, opts);\n const coloredDate = date && colors.gray(date);\n const isBadge = logObj.badge ?? logObj.level < 2;\n const type = this.formatType(logObj, isBadge, opts);\n const tag = logObj.tag ? colors.gray(logObj.tag) : \"\";\n let line;\n const left = this.filterAndJoin([type, characterFormat(message)]);\n const right = this.filterAndJoin(opts.columns ? [tag, coloredDate] : [tag]);\n const space = (opts.columns || 0) - stringWidth(left) - stringWidth(right) - 2;\n line = space > 0 && (opts.columns || 0) >= 80 ? left + \" \".repeat(space) + right : (right ? `${colors.gray(`[${right}]`)} ` : \"\") + left;\n line += characterFormat(\n additional.length > 0 ? \"\\n\" + additional.join(\"\\n\") : \"\"\n );\n if (logObj.type === \"trace\") {\n const _err = new Error(\"Trace: \" + logObj.message);\n line += this.formatStack(_err.stack || \"\", _err.message);\n }\n return isBadge ? \"\\n\" + line + \"\\n\" : line;\n }\n}\nfunction characterFormat(str) {\n return str.replace(/`([^`]+)`/gm, (_, m) => colors.cyan(m)).replace(/\\s+_([^_]+)_\\s+/gm, (_, m) => ` ${colors.underline(m)} `);\n}\nfunction getColor(color = \"white\") {\n return colors[color] || colors.white;\n}\nfunction getBgColor(color = \"bgWhite\") {\n return colors[`bg${color[0].toUpperCase()}${color.slice(1)}`] || colors.bgWhite;\n}\n\nfunction createConsola(options = {}) {\n let level = _getDefaultLogLevel();\n if (process.env.CONSOLA_LEVEL) {\n level = Number.parseInt(process.env.CONSOLA_LEVEL) ?? level;\n }\n const consola2 = createConsola$1({\n level,\n defaults: { level },\n stdout: process.stdout,\n stderr: process.stderr,\n prompt: (...args) => import('./chunks/prompt.mjs').then((m) => m.prompt(...args)),\n reporters: options.reporters || [\n options.fancy ?? !(T || R) ? new FancyReporter() : new BasicReporter()\n ],\n ...options\n });\n return consola2;\n}\nfunction _getDefaultLogLevel() {\n if (g) {\n return LogLevels.debug;\n }\n if (R) {\n return LogLevels.warn;\n }\n return LogLevels.info;\n}\nconst consola = createConsola();\n\nexport { LogLevels, consola, createConsola, consola as default };\n","import * as tty from 'node:tty';\n\nconst {\n env = {},\n argv = [],\n platform = \"\"\n} = typeof process === \"undefined\" ? {} : process;\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\");\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\");\nconst isWindows = platform === \"win32\";\nconst isDumbTerminal = env.TERM === \"dumb\";\nconst isCompatibleTerminal = tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal;\nconst isCI = \"CI\" in env && (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env);\nconst isColorSupported = !isDisabled && (isForced || isWindows && !isDumbTerminal || isCompatibleTerminal || isCI);\nfunction replaceClose(index, string, close, replace, head = string.slice(0, Math.max(0, index)) + replace, tail = string.slice(Math.max(0, index + close.length)), next = tail.indexOf(close)) {\n return head + (next < 0 ? tail : replaceClose(next, tail, close, replace));\n}\nfunction clearBleed(index, string, open, close, replace) {\n return index < 0 ? open + string + close : open + replaceClose(index, string, close, replace) + close;\n}\nfunction filterEmpty(open, close, replace = open, at = open.length + 1) {\n return (string) => string || !(string === \"\" || string === void 0) ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n ) : \"\";\n}\nfunction init(open, close, replace) {\n return filterEmpty(`\\x1B[${open}m`, `\\x1B[${close}m`, replace);\n}\nconst colorDefs = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1B[22m\\x1B[1m\"),\n dim: init(2, 22, \"\\x1B[22m\\x1B[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49)\n};\nfunction createColors(useColor = isColorSupported) {\n return useColor ? colorDefs : Object.fromEntries(Object.keys(colorDefs).map((key) => [key, String]));\n}\nconst colors = createColors();\nfunction getColor(color, fallback = \"reset\") {\n return colors[color] || colors[fallback];\n}\nfunction colorize(color, text) {\n return getColor(color)(text);\n}\n\nconst ansiRegex = [\n String.raw`[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)`,\n String.raw`(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))`\n].join(\"|\");\nfunction stripAnsi(text) {\n return text.replace(new RegExp(ansiRegex, \"g\"), \"\");\n}\nfunction centerAlign(str, len, space = \" \") {\n const free = len - str.length;\n if (free <= 0) {\n return str;\n }\n const freeLeft = Math.floor(free / 2);\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < freeLeft || i >= freeLeft + str.length ? space : str[i - freeLeft];\n }\n return _str;\n}\nfunction rightAlign(str, len, space = \" \") {\n const free = len - str.length;\n if (free <= 0) {\n return str;\n }\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < free ? space : str[i - free];\n }\n return _str;\n}\nfunction leftAlign(str, len, space = \" \") {\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < str.length ? str[i] : space;\n }\n return _str;\n}\nfunction align(alignment, str, len, space = \" \") {\n switch (alignment) {\n case \"left\": {\n return leftAlign(str, len, space);\n }\n case \"right\": {\n return rightAlign(str, len, space);\n }\n case \"center\": {\n return centerAlign(str, len, space);\n }\n default: {\n return str;\n }\n }\n}\n\nconst boxStylePresets = {\n solid: {\n tl: \"\\u250C\",\n tr: \"\\u2510\",\n bl: \"\\u2514\",\n br: \"\\u2518\",\n h: \"\\u2500\",\n v: \"\\u2502\"\n },\n double: {\n tl: \"\\u2554\",\n tr: \"\\u2557\",\n bl: \"\\u255A\",\n br: \"\\u255D\",\n h: \"\\u2550\",\n v: \"\\u2551\"\n },\n doubleSingle: {\n tl: \"\\u2553\",\n tr: \"\\u2556\",\n bl: \"\\u2559\",\n br: \"\\u255C\",\n h: \"\\u2500\",\n v: \"\\u2551\"\n },\n doubleSingleRounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2500\",\n v: \"\\u2551\"\n },\n singleThick: {\n tl: \"\\u250F\",\n tr: \"\\u2513\",\n bl: \"\\u2517\",\n br: \"\\u251B\",\n h: \"\\u2501\",\n v: \"\\u2503\"\n },\n singleDouble: {\n tl: \"\\u2552\",\n tr: \"\\u2555\",\n bl: \"\\u2558\",\n br: \"\\u255B\",\n h: \"\\u2550\",\n v: \"\\u2502\"\n },\n singleDoubleRounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2550\",\n v: \"\\u2502\"\n },\n rounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2500\",\n v: \"\\u2502\"\n }\n};\nconst defaultStyle = {\n borderColor: \"white\",\n borderStyle: \"rounded\",\n valign: \"center\",\n padding: 2,\n marginLeft: 1,\n marginTop: 1,\n marginBottom: 1\n};\nfunction box(text, _opts = {}) {\n const opts = {\n ..._opts,\n style: {\n ...defaultStyle,\n ..._opts.style\n }\n };\n const textLines = text.split(\"\\n\");\n const boxLines = [];\n const _color = getColor(opts.style.borderColor);\n const borderStyle = {\n ...typeof opts.style.borderStyle === \"string\" ? boxStylePresets[opts.style.borderStyle] || boxStylePresets.solid : opts.style.borderStyle\n };\n if (_color) {\n for (const key in borderStyle) {\n borderStyle[key] = _color(\n borderStyle[key]\n );\n }\n }\n const paddingOffset = opts.style.padding % 2 === 0 ? opts.style.padding : opts.style.padding + 1;\n const height = textLines.length + paddingOffset;\n const width = Math.max(\n ...textLines.map((line) => stripAnsi(line).length),\n opts.title ? stripAnsi(opts.title).length : 0\n ) + paddingOffset;\n const widthOffset = width + paddingOffset;\n const leftSpace = opts.style.marginLeft > 0 ? \" \".repeat(opts.style.marginLeft) : \"\";\n if (opts.style.marginTop > 0) {\n boxLines.push(\"\".repeat(opts.style.marginTop));\n }\n if (opts.title) {\n const title = _color ? _color(opts.title) : opts.title;\n const left = borderStyle.h.repeat(\n Math.floor((width - stripAnsi(opts.title).length) / 2)\n );\n const right = borderStyle.h.repeat(\n width - stripAnsi(opts.title).length - stripAnsi(left).length + paddingOffset\n );\n boxLines.push(\n `${leftSpace}${borderStyle.tl}${left}${title}${right}${borderStyle.tr}`\n );\n } else {\n boxLines.push(\n `${leftSpace}${borderStyle.tl}${borderStyle.h.repeat(widthOffset)}${borderStyle.tr}`\n );\n }\n const valignOffset = opts.style.valign === \"center\" ? Math.floor((height - textLines.length) / 2) : opts.style.valign === \"top\" ? height - textLines.length - paddingOffset : height - textLines.length;\n for (let i = 0; i < height; i++) {\n if (i < valignOffset || i >= valignOffset + textLines.length) {\n boxLines.push(\n `${leftSpace}${borderStyle.v}${\" \".repeat(widthOffset)}${borderStyle.v}`\n );\n } else {\n const line = textLines[i - valignOffset];\n const left = \" \".repeat(paddingOffset);\n const right = \" \".repeat(width - stripAnsi(line).length);\n boxLines.push(\n `${leftSpace}${borderStyle.v}${left}${line}${right}${borderStyle.v}`\n );\n }\n }\n boxLines.push(\n `${leftSpace}${borderStyle.bl}${borderStyle.h.repeat(widthOffset)}${borderStyle.br}`\n );\n if (opts.style.marginBottom > 0) {\n boxLines.push(\"\".repeat(opts.style.marginBottom));\n }\n return boxLines.join(\"\\n\");\n}\n\nexport { centerAlign as a, align as b, colorize as c, box as d, colors as e, getColor as g, leftAlign as l, rightAlign as r, stripAnsi as s };\n","import crypto from \"node:crypto\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { startOAuthCallbackServer, openBrowser } from \"../auth/auth-server.js\";\nimport {\n buildClerkAuthorizationUrl,\n createPkcePair,\n exchangeClerkOAuthCode,\n} from \"../auth/clerk-oauth.js\";\nimport { createUserSessionManager } from \"../auth/user-session-manager.js\";\nimport { DEFAULT_LOGIN_TIMEOUT_MS } from \"../constants.js\";\nimport {\n getGlobalAuthPath,\n getGlobalConfigPath,\n loadGlobalConfig,\n saveGlobalConfig,\n} from \"../config/global-config.js\";\nimport {\n getActiveCredentialBackendName,\n getStoredSession,\n} from \"../config/credential-store.js\";\nimport { getAuthTokenExpiry, resolveConfig } from \"../config/resolve.js\";\nimport { parseAuthCommandArgs } from \"../flags.js\";\nimport { IS_PUBLISHED_BUILD, PUBLISHED_ENVIRONMENT } from \"../build-target.js\";\nimport { runGitCredentialHelper } from \"../services/git/git-credential-helper.js\";\n\nconst PUBLISHED_AUTH_ACTIONS = new Set([\"login\", \"logout\", \"status\"]);\n\nasync function loginWithBrowser(\n config: ReturnType<typeof resolveConfig>,\n quiet: boolean,\n): Promise<{\n token: string;\n refreshToken: string;\n expiresAt?: string;\n tokenUrl: string;\n}> {\n const state = crypto.randomUUID();\n const pkce = createPkcePair();\n const server = await startOAuthCallbackServer(\n state,\n DEFAULT_LOGIN_TIMEOUT_MS,\n );\n const loginUrl = buildClerkAuthorizationUrl({\n config: {\n issuer: config.clerkOAuthIssuer,\n clientId: config.clerkOAuthClientId,\n tokenUrl: config.clerkOAuthTokenUrl,\n scope: config.clerkOAuthScope,\n },\n redirectUri: server.redirectUri,\n state,\n codeChallenge: pkce.challenge,\n }).toString();\n\n if (!quiet) {\n consola.info(\"Opening browser for login...\");\n consola.info(`If the browser does not open, visit: ${loginUrl}`);\n }\n\n openBrowser(loginUrl);\n\n if (!quiet) {\n consola.start(\"Waiting for login to complete...\");\n }\n\n try {\n const { code } = await server.waitForCode;\n const tokenResponse = await exchangeClerkOAuthCode({\n config: {\n issuer: config.clerkOAuthIssuer,\n clientId: config.clerkOAuthClientId,\n tokenUrl: config.clerkOAuthTokenUrl,\n },\n code,\n redirectUri: server.redirectUri,\n codeVerifier: pkce.verifier,\n });\n return {\n token: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n expiresAt: tokenResponse.expiresAt,\n tokenUrl: tokenResponse.tokenUrl,\n };\n } finally {\n server.close();\n }\n}\n\nasync function runAuthAction(rawArgs: unknown): Promise<void> {\n const parsedArgs = parseAuthCommandArgs(rawArgs);\n const action = parsedArgs.action;\n const globalConfig = await loadGlobalConfig();\n\n if (action === \"git-credential\") {\n await runGitCredentialHelper();\n return;\n }\n\n if (IS_PUBLISHED_BUILD && !PUBLISHED_AUTH_ACTIONS.has(action)) {\n throw new Error(\n \"The published Dreamboard CLI supports auth login, logout, and status.\",\n );\n }\n\n if (action === \"env\") {\n if (IS_PUBLISHED_BUILD) {\n throw new Error(\n \"The published Dreamboard CLI is production-only and does not support switching environments.\",\n );\n }\n const environment = parsedArgs.tokenValue ?? parsedArgs.env;\n if (!environment) {\n throw new Error(\"Usage: dreamboard auth env <local|staging|prod>\");\n }\n if (![\"local\", \"staging\", \"prod\"].includes(environment)) {\n throw new Error(\n `Invalid environment '${environment}'. Valid options: local, staging, prod`,\n );\n }\n await saveGlobalConfig({\n ...globalConfig,\n environment: environment as any,\n });\n consola.success(`Environment set to '${environment}'.`);\n return;\n }\n\n if (action === \"set\") {\n if (IS_PUBLISHED_BUILD) {\n throw new Error(\n \"Direct JWT injection is not supported in the published Dreamboard CLI. Use `dreamboard auth login` so the CLI can store a refreshable session.\",\n );\n }\n const token = parsedArgs.tokenValue ?? parsedArgs.token ?? \"\";\n if (!token) throw new Error(\"Usage: dreamboard auth set <token>\");\n\n // `auth set` is the power-user \"paste a JWT\" path. It has no refresh\n // token by construction, so establish an explicit access-only session.\n const config = resolveConfig(\n globalConfig,\n { env: parsedArgs.env },\n undefined,\n await getStoredSession(),\n );\n await createUserSessionManager(config).establishAccessOnlySession(token);\n consola.success(`Auth token saved to ${getGlobalAuthPath()}.`);\n return;\n }\n\n if (action === \"logout\") {\n const config = resolveConfig(\n globalConfig,\n { env: parsedArgs.env },\n undefined,\n await getStoredSession(),\n );\n await createUserSessionManager(config).logout();\n consola.success(\n `Stored Dreamboard session cleared from ${getGlobalAuthPath()}.`,\n );\n return;\n }\n\n if (action === \"login\") {\n const shouldPrintJwt = !IS_PUBLISHED_BUILD && parsedArgs.jwt === true;\n const environment = IS_PUBLISHED_BUILD\n ? PUBLISHED_ENVIRONMENT\n : parsedArgs.env || globalConfig.environment || \"staging\";\n\n const storedSession = await getStoredSession();\n const resolvedConfig = resolveConfig(\n globalConfig,\n { env: environment },\n undefined,\n storedSession,\n );\n const sessionManager = createUserSessionManager(resolvedConfig);\n const existingStatus = await sessionManager.inspectSession();\n\n if (existingStatus.kind === \"active\") {\n if (shouldPrintJwt) {\n const current = await getStoredSession();\n process.stdout.write(\n `${JSON.stringify(\n {\n token: current?.accessToken ?? existingStatus.apiToken.token,\n refreshToken: current?.refreshToken ?? null,\n environment,\n },\n null,\n 2,\n )}\\n`,\n );\n } else if (existingStatus.repaired) {\n consola.success(\n `Stored Dreamboard session repaired and saved to ${getGlobalAuthPath()}`,\n );\n } else {\n consola.success(\n `Stored Dreamboard session is active in ${getGlobalAuthPath()}`,\n );\n }\n return;\n }\n\n if (\n existingStatus.kind === \"degraded\" ||\n existingStatus.kind === \"invalid\"\n ) {\n consola.warn(existingStatus.message);\n }\n\n const browserLogin = await loginWithBrowser(resolvedConfig, shouldPrintJwt);\n await saveGlobalConfig({\n ...globalConfig,\n environment: environment as any,\n });\n await sessionManager.establishRefreshableSession({\n clerkAccessToken: browserLogin.token,\n refreshToken: browserLogin.refreshToken,\n clerkAccessExpiresAt: browserLogin.expiresAt,\n clerkOAuthIssuer: resolvedConfig.clerkOAuthIssuer,\n clerkOAuthClientId: resolvedConfig.clerkOAuthClientId,\n clerkOAuthTokenUrl: browserLogin.tokenUrl,\n environment,\n });\n\n if (shouldPrintJwt) {\n process.stdout.write(\n `${JSON.stringify(\n {\n token: browserLogin.token,\n refreshToken: browserLogin.refreshToken,\n environment,\n },\n null,\n 2,\n )}\\n`,\n );\n return;\n }\n\n consola.success(\n `Browser login successful. Session saved to ${getGlobalAuthPath()}`,\n );\n return;\n }\n\n if (action === \"status\") {\n const storedSession = await getStoredSession();\n const resolvedConfig = resolveConfig(\n globalConfig,\n { env: parsedArgs.env },\n undefined,\n storedSession,\n );\n const environment = parsedArgs.env || globalConfig.environment || \"staging\";\n const status =\n await createUserSessionManager(resolvedConfig).inspectSession();\n const backendName = await getActiveCredentialBackendName();\n\n consola.log(`Environment: ${environment}`);\n consola.log(\n `Credential backend: ${backendName}${\n backendName === \"keychain\"\n ? \" (OS keychain via @napi-rs/keyring)\"\n : ` (${getGlobalAuthPath()})`\n }`,\n );\n consola.log(`Config path: ${getGlobalConfigPath()}`);\n\n if (status.kind === \"none\") {\n consola.log(\"Session state: none\");\n consola.warn(\"No Dreamboard session found.\");\n return;\n }\n\n if (status.kind === \"degraded\") {\n consola.log(\"Session state: degraded (refreshable)\");\n consola.warn(\n `Stored Dreamboard session is refreshable but currently API-unusable: ${status.message}`,\n );\n return;\n }\n\n if (status.kind === \"invalid\") {\n consola.log(`Session state: invalid (${status.sessionKind})`);\n consola.warn(status.message);\n return;\n }\n\n consola.log(`Session state: active (${status.sessionKind})`);\n const authTokenExpiry =\n status.apiToken.expiresAt !== undefined\n ? new Date(status.apiToken.expiresAt)\n : getAuthTokenExpiry(status.apiToken.token);\n if (authTokenExpiry && Number.isFinite(authTokenExpiry.getTime())) {\n consola.log(\n `Dreamboard API token expires at: ${authTokenExpiry.toISOString()} (active)`,\n );\n } else {\n consola.log(\"Dreamboard API token expiry: unavailable\");\n }\n\n consola.success(\n status.repaired\n ? \"Dreamboard session was repaired and is active.\"\n : \"Dreamboard session is active.\",\n );\n return;\n }\n\n throw new Error(\n IS_PUBLISHED_BUILD\n ? \"Usage:\\n dreamboard auth login\\n dreamboard auth logout\\n dreamboard auth status\"\n : \"Usage:\\n dreamboard auth login [--env <local|staging|prod>] [--jwt]\\n dreamboard auth logout\\n dreamboard auth set <token>\\n dreamboard auth env <local|staging|prod>\\n dreamboard auth status [--env <local|staging|prod>]\",\n );\n}\n\nfunction defineAuthActionCommand(options: {\n name: string;\n description: string;\n action: ReturnType<typeof parseAuthCommandArgs>[\"action\"];\n args?: any;\n hidden?: boolean;\n}) {\n return defineCommand({\n meta: {\n name: options.name,\n description: options.description,\n hidden: options.hidden,\n },\n args: options.args ?? {},\n async run({ args }) {\n await runAuthAction({ ...args, action: options.action });\n },\n });\n}\n\nexport default defineCommand({\n meta: { name: \"auth\", description: \"Manage stored Dreamboard sessions\" },\n subCommands: {\n login: defineAuthActionCommand({\n name: \"login\",\n description: \"Open browser login and store a refreshable session\",\n action: \"login\",\n args: IS_PUBLISHED_BUILD\n ? {}\n : {\n env: {\n type: \"string\" as const,\n description: \"Environment: local | staging | prod\",\n },\n jwt: {\n type: \"boolean\" as const,\n description: \"Print auth token JSON to stdout\",\n },\n },\n }),\n logout: defineAuthActionCommand({\n name: \"logout\",\n description: \"Clear the stored Dreamboard session\",\n action: \"logout\",\n }),\n status: defineAuthActionCommand({\n name: \"status\",\n description: \"Show stored Dreamboard session status\",\n action: \"status\",\n args: IS_PUBLISHED_BUILD\n ? {}\n : {\n env: {\n type: \"string\" as const,\n description: \"Environment: local | staging | prod\",\n },\n },\n }),\n \"git-credential\": defineAuthActionCommand({\n name: \"git-credential\",\n description: \"Resolve Git credentials for Dreamboard remotes\",\n action: \"git-credential\",\n hidden: true,\n }),\n },\n});\n","import {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport { spawn } from \"node:child_process\";\n\ntype CliAuthPayload = {\n token?: string;\n refreshToken?: string;\n state?: string;\n};\n\ntype CliAuthResult = {\n token: string;\n refreshToken: string | null;\n};\n\ntype OAuthCodeResult = {\n code: string;\n};\n\nconst DEFAULT_OAUTH_CALLBACK_PORT = 49371;\n\nexport async function startCliAuthServer(\n state: string,\n timeoutMs: number,\n): Promise<{\n port: number;\n waitForToken: Promise<CliAuthResult>;\n close: () => void;\n}> {\n let resolveToken: (token: CliAuthResult) => void;\n let rejectToken: (error: Error) => void;\n\n const waitForToken = new Promise<CliAuthResult>((resolve, reject) => {\n resolveToken = resolve;\n rejectToken = reject;\n });\n\n let server: ReturnType<typeof createServer> | null = null;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < 10; attempt++) {\n const portCandidate = 49152 + Math.floor(Math.random() * 16383);\n try {\n server = createServer(\n async (request: IncomingMessage, response: ServerResponse) => {\n try {\n await handleAuthRequest(\n request,\n response,\n state,\n resolveToken!,\n () => server?.close(),\n );\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Failed to handle auth callback.\";\n writeCorsResponse(request, response, 500, message);\n }\n },\n );\n await new Promise<void>((resolve, reject) => {\n server!.once(\"error\", reject);\n server!.listen(portCandidate, \"127.0.0.1\", () => {\n server!.off(\"error\", reject);\n resolve();\n });\n });\n break;\n } catch (error) {\n lastError =\n error instanceof Error\n ? error\n : new Error(\"Failed to start auth server\");\n }\n }\n\n if (!server) {\n const error =\n lastError ?? new Error(\"Failed to start auth callback server.\");\n rejectToken!(error);\n throw error;\n }\n\n const timer = setTimeout(() => {\n rejectToken!(new Error(\"Login timed out.\"));\n server?.close();\n }, timeoutMs);\n\n waitForToken.finally(() => clearTimeout(timer));\n\n return {\n port: portCandidateFromServer(server),\n waitForToken,\n close: () => server?.close(),\n };\n}\n\nexport async function startOAuthCallbackServer(\n state: string,\n timeoutMs: number,\n): Promise<{\n port: number;\n redirectUri: string;\n waitForCode: Promise<OAuthCodeResult>;\n close: () => void;\n}> {\n let resolveCode: (result: OAuthCodeResult) => void;\n let rejectCode: (error: Error) => void;\n\n const waitForCode = new Promise<OAuthCodeResult>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n\n const portCandidate = resolveOAuthCallbackPort();\n const server = createServer(\n async (request: IncomingMessage, response: ServerResponse) => {\n try {\n const requestUrl = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n if (\n request.method === \"GET\" &&\n requestUrl.pathname === \"/oauth/callback\"\n ) {\n const receivedState = requestUrl.searchParams.get(\"state\");\n const code = requestUrl.searchParams.get(\"code\");\n const error = requestUrl.searchParams.get(\"error\");\n if (error) {\n throw new Error(`Clerk OAuth returned ${error}.`);\n }\n if (!code || receivedState !== state) {\n writeCorsResponse(request, response, 400, \"Invalid OAuth callback\");\n return;\n }\n resolveCode!({ code });\n response.once(\"finish\", () => server.close());\n writeHtmlResponse(\n response,\n 200,\n \"Dreamboard CLI login complete. You can return to your terminal.\",\n );\n return;\n }\n writeHtmlResponse(\n response,\n 200,\n \"Dreamboard CLI OAuth callback server\",\n );\n } catch (error) {\n rejectCode!(\n error instanceof Error\n ? error\n : new Error(\"Failed to handle OAuth callback.\"),\n );\n writeHtmlResponse(response, 500, \"Dreamboard CLI login failed.\");\n }\n },\n );\n\n try {\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(portCandidate, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n } catch (error) {\n const portError =\n error instanceof Error\n ? error\n : new Error(\"Failed to start OAuth callback server\");\n const configuredByEnv = Boolean(\n process.env.DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT,\n );\n const message = configuredByEnv\n ? `Failed to start OAuth callback server on configured port ${portCandidate}.`\n : `Failed to start OAuth callback server on port ${portCandidate}. Register this loopback redirect URI with Clerk and keep the port available, or set DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT.`;\n const wrapped = new Error(`${message} ${portError.message}`);\n server.close();\n rejectCode!(wrapped);\n throw wrapped;\n }\n\n if (!server.listening) {\n const error = new Error(\"Failed to start OAuth callback server.\");\n rejectCode!(error);\n throw error;\n }\n\n const timer = setTimeout(() => {\n rejectCode!(new Error(\"Login timed out.\"));\n server?.close();\n }, timeoutMs);\n\n waitForCode.finally(() => clearTimeout(timer));\n const port = portCandidateFromServer(server);\n\n return {\n port,\n redirectUri: `http://127.0.0.1:${port}/oauth/callback`,\n waitForCode,\n close: () => server?.close(),\n };\n}\n\nfunction resolveOAuthCallbackPort(): number {\n const rawPort = process.env.DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT?.trim();\n if (!rawPort) {\n return DEFAULT_OAUTH_CALLBACK_PORT;\n }\n const port = Number(rawPort);\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(\n `Invalid DREAMBOARD_CLERK_OAUTH_REDIRECT_PORT '${rawPort}'. Expected a TCP port from 1 to 65535.`,\n );\n }\n return port;\n}\n\nfunction portCandidateFromServer(\n server: ReturnType<typeof createServer>,\n): number {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n throw new Error(\"Auth callback server did not expose a bound port.\");\n }\n return address.port;\n}\n\nasync function handleAuthRequest(\n request: IncomingMessage,\n response: ServerResponse,\n state: string,\n resolveToken: (token: CliAuthResult) => void,\n closeServer: () => void,\n): Promise<void> {\n const requestUrl = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n\n if (request.method === \"OPTIONS\") {\n writeCorsResponse(request, response, 204, \"\");\n return;\n }\n\n if (requestUrl.pathname === \"/cli-auth\" && request.method === \"POST\") {\n const text = await readRequestBody(request);\n let payload: CliAuthPayload | null = null;\n try {\n payload = JSON.parse(text) as CliAuthPayload;\n } catch {\n payload = null;\n }\n\n const token = payload?.token;\n const refreshToken = payload?.refreshToken;\n const receivedState = payload?.state;\n if (!token || receivedState !== state) {\n writeCorsResponse(request, response, 400, \"Invalid auth payload\");\n return;\n }\n\n resolveToken({ token, refreshToken: refreshToken ?? null });\n response.once(\"finish\", () => {\n closeServer();\n });\n writeCorsResponse(request, response, 200, \"OK\");\n return;\n }\n\n writeCorsResponse(request, response, 200, \"Dreamboard CLI auth server\");\n}\n\nfunction writeCorsResponse(\n request: IncomingMessage,\n response: ServerResponse,\n statusCode: number,\n body: string,\n): void {\n const origin = request.headers.origin ?? \"*\";\n response.writeHead(statusCode, {\n \"Access-Control-Allow-Origin\": origin,\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type\",\n \"Content-Type\": \"text/plain; charset=utf-8\",\n });\n response.end(body);\n}\n\nfunction writeHtmlResponse(\n response: ServerResponse,\n statusCode: number,\n body: string,\n): void {\n response.writeHead(statusCode, {\n \"Content-Type\": \"text/html; charset=utf-8\",\n });\n response.end(\n `<!doctype html><meta charset=\"utf-8\"><title>Dreamboard CLI</title><p>${escapeHtml(body)}</p>`,\n );\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case \"&\":\n return \"&\";\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case '\"':\n return \""\";\n default:\n return \"'\";\n }\n });\n}\n\nasync function readRequestBody(request: IncomingMessage): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nexport function openBrowser(url: string): void {\n const platform = process.platform;\n let command: [string, ...string[]];\n if (platform === \"darwin\") {\n command = [\"open\", url];\n } else if (platform === \"win32\") {\n command = [\"cmd\", \"/c\", \"start\", \"\", url];\n } else {\n command = [\"xdg-open\", url];\n }\n const [commandName, ...commandArgs] = command;\n const child = spawn(commandName, commandArgs, {\n stdio: \"ignore\",\n detached: true,\n });\n child.unref();\n}\n","export const COMMAND_RESULT_SCHEMA_VERSION = 1;\n\nexport type CommandId =\n | \"auth.login\"\n | \"auth.logout\"\n | \"auth.status\"\n | \"auth.git_credential\"\n | \"project.create\"\n | \"project.clone\"\n | \"project.status\"\n | \"verify\"\n | \"test\"\n | \"dev\"\n | \"build\"\n | \"preview\"\n | \"release.publish\"\n | \"release.current\"\n | \"doctor\";\n\nexport enum ExitCode {\n Ok = 0,\n Unexpected = 1,\n Unauthenticated = 2,\n Forbidden = 3,\n Conflict = 4,\n Validation = 5,\n Transient = 6,\n CommitNotPushed = 7,\n ConfirmationRequired = 8,\n}\n\nexport type ProblemDetails = {\n readonly type?: string;\n readonly title: string;\n readonly status?: number;\n readonly detail?: string;\n readonly code?: string;\n readonly errors?: Record<string, readonly string[]>;\n};\n\nexport type AuthLoginAction = {\n readonly id: \"auth.login\";\n readonly environment: string;\n readonly unattended: false;\n};\n\nexport type GitPushRequiredAction = {\n readonly id: \"git.push_required\";\n readonly commitOid: string;\n readonly remote: \"origin\";\n readonly unattended: false;\n};\n\nexport type ValidationFixAction = {\n readonly id: \"validation.fix\";\n readonly diagnosticIds: readonly string[];\n readonly unattended: false;\n};\n\nexport type ReleaseConfirmRequiredAction = {\n readonly id: \"release.confirm_required\";\n readonly commitOid: string;\n readonly unattended: false;\n};\n\nexport type RetryAction = {\n readonly id: \"retry\";\n readonly afterSeconds?: number;\n readonly unattended: true;\n};\n\nexport type NextAction =\n | AuthLoginAction\n | GitPushRequiredAction\n | ValidationFixAction\n | ReleaseConfirmRequiredAction\n | RetryAction;\n\nexport type CommandSuccess<T> = {\n readonly schemaVersion: typeof COMMAND_RESULT_SCHEMA_VERSION;\n readonly ok: true;\n readonly command: CommandId;\n readonly result: T;\n readonly nextActions: readonly NextAction[];\n};\n\nexport type CommandFailure = {\n readonly schemaVersion: typeof COMMAND_RESULT_SCHEMA_VERSION;\n readonly ok: false;\n readonly command: CommandId;\n readonly problem: ProblemDetails;\n readonly nextActions: readonly NextAction[];\n readonly exitCode: ExitCode;\n};\n\nexport type CommandResult<T> = CommandSuccess<T> | CommandFailure;\n\nexport function commandSuccess<T>(\n command: CommandId,\n result: T,\n nextActions: readonly NextAction[] = [],\n): CommandSuccess<T> {\n return {\n schemaVersion: COMMAND_RESULT_SCHEMA_VERSION,\n ok: true,\n command,\n result,\n nextActions,\n };\n}\n\nexport function commandFailure(\n command: CommandId,\n problem: ProblemDetails,\n exitCode: ExitCode,\n nextActions: readonly NextAction[] = [],\n): CommandFailure {\n return {\n schemaVersion: COMMAND_RESULT_SCHEMA_VERSION,\n ok: false,\n command,\n problem,\n nextActions,\n exitCode,\n };\n}\n\nexport function isUnattendedAction(action: NextAction): action is RetryAction {\n return action.unattended === true;\n}\n","import type { CommandId, CommandResult } from \"../results/command-result.js\";\n\nexport const PROGRESS_EVENT_SCHEMA_VERSION = 1;\n\nexport type ProgressEventKind = \"progress\" | \"result\";\n\nexport type ProgressEvent<TPayload = unknown> = {\n readonly schemaVersion: typeof PROGRESS_EVENT_SCHEMA_VERSION;\n readonly runId: string;\n readonly seq: number;\n readonly command: CommandId;\n readonly kind: ProgressEventKind;\n readonly event: string;\n readonly payload?: TPayload;\n};\n\nexport type TerminalResultEvent<T> = ProgressEvent<CommandResult<T>> & {\n readonly kind: \"result\";\n readonly event: \"terminal\";\n readonly payload: CommandResult<T>;\n};\n\nexport type ProgressSequencer = {\n next<TPayload>(\n event: Omit<ProgressEvent<TPayload>, \"schemaVersion\" | \"runId\" | \"seq\">,\n ): ProgressEvent<TPayload>;\n terminal<T>(result: CommandResult<T>): TerminalResultEvent<T>;\n};\n\nexport function createProgressSequencer(input: {\n runId: string;\n command: CommandId;\n}): ProgressSequencer {\n let seq = 0;\n const sequencer: ProgressSequencer = {\n next<TPayload>(\n event: Omit<\n ProgressEvent<TPayload>,\n \"schemaVersion\" | \"runId\" | \"seq\"\n >,\n ) {\n seq += 1;\n return {\n schemaVersion: PROGRESS_EVENT_SCHEMA_VERSION,\n runId: input.runId,\n seq,\n ...event,\n };\n },\n terminal<T>(result: CommandResult<T>) {\n seq += 1;\n return {\n schemaVersion: PROGRESS_EVENT_SCHEMA_VERSION,\n runId: input.runId,\n seq,\n command: input.command,\n kind: \"result\",\n event: \"terminal\",\n payload: result,\n };\n },\n };\n return sequencer;\n}\n","import type { UserSessionManager } from \"../ports/user-session-manager.js\";\n\nexport type GitCredentialRequest = {\n readonly protocol?: string;\n readonly host?: string;\n readonly path?: string;\n};\n\nexport type GitCredentialPolicy = {\n readonly allowedHosts: readonly string[];\n readonly allowedPathPattern?: RegExp;\n};\n\nexport type GitCredentialResponse = {\n readonly username: \"dreamboard\";\n readonly password: string;\n};\n\nconst DEFAULT_REPOSITORY_PATH = /^repos\\/[0-9a-fA-F-]{36}\\.git$/;\n\nexport function parseGitCredentialRequest(input: string): GitCredentialRequest {\n const result: Record<string, string> = {};\n for (const line of input.split(/\\r?\\n/)) {\n if (line === \"\") continue;\n const separator = line.indexOf(\"=\");\n if (separator <= 0) continue;\n result[line.slice(0, separator)] = line.slice(separator + 1);\n }\n return {\n protocol: result.protocol,\n host: result.host,\n path: result.path,\n };\n}\n\nexport function formatGitCredentialResponse(\n response: GitCredentialResponse,\n): string {\n return `username=${response.username}\\npassword=${response.password}\\n\\n`;\n}\n\nexport async function resolveGitCredential(input: {\n request: GitCredentialRequest;\n policy: GitCredentialPolicy;\n tokenManager: Pick<UserSessionManager, \"resolveGitToken\">;\n}): Promise<GitCredentialResponse | null> {\n const protocol = input.request.protocol?.toLowerCase();\n const host = input.request.host?.toLowerCase();\n const path = normalizeCredentialPath(input.request.path);\n const allowedHosts = new Set(\n input.policy.allowedHosts.map((value) => value.toLowerCase()),\n );\n const pathPattern =\n input.policy.allowedPathPattern ?? DEFAULT_REPOSITORY_PATH;\n\n if (!protocol || !host || !allowedHosts.has(host)) {\n return null;\n }\n\n const secureProtocol =\n protocol === \"https\" || (protocol === \"http\" && isLoopbackHost(host));\n if (!secureProtocol) {\n return null;\n }\n\n if (!path || !pathPattern.test(path)) {\n return null;\n }\n\n const token = await input.tokenManager.resolveGitToken();\n return {\n username: \"dreamboard\",\n password: token.token,\n };\n}\n\nfunction isLoopbackHost(host: string): boolean {\n const hostname = host.replace(/:\\d+$/, \"\");\n return hostname === \"127.0.0.1\" || hostname === \"localhost\" || hostname === \"::1\";\n}\n\nfunction normalizeCredentialPath(value: string | undefined): string | null {\n if (!value) return null;\n return value.replace(/^\\/+/, \"\");\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport type { BootstrapGit, CommitReader } from \"../ports/bootstrap-git.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport type GitRunner = (\n args: readonly string[],\n options?: { cwd?: string },\n) => Promise<{ stdout: string; stderr: string }>;\n\nexport function createExecFileGitRunner(gitBinary = \"git\"): GitRunner {\n return async (args, options) =>\n execFileAsync(gitBinary, [...args], {\n cwd: options?.cwd,\n windowsHide: true,\n maxBuffer: 10 * 1024 * 1024,\n });\n}\n\nexport class SystemGit implements BootstrapGit, CommitReader {\n constructor(private readonly runGit: GitRunner = createExecFileGitRunner()) {}\n\n async init(root: string, initialBranch: \"main\"): Promise<void> {\n await this.runGit([\"init\", \"--initial-branch\", initialBranch], {\n cwd: root,\n });\n }\n\n async clone(\n url: string,\n destination: string,\n options?: { config?: ReadonlyArray<readonly [string, string]> },\n ): Promise<void> {\n const configArgs = (options?.config ?? []).flatMap(([key, value]) => [\n \"-c\",\n `${key}=${value}`,\n ]);\n await this.runGit([...configArgs, \"clone\", url, destination]);\n }\n\n async setRemote(root: string, name: \"origin\", url: string): Promise<void> {\n await this.runGit([\"remote\", \"remove\", name], { cwd: root }).catch(() => ({\n stdout: \"\",\n stderr: \"\",\n }));\n await this.runGit([\"remote\", \"add\", name, url], { cwd: root });\n }\n\n async setLocalConfig(root: string, key: string, value: string): Promise<void> {\n if (key.startsWith(\"--add \")) {\n await this.runGit([\"config\", \"--local\", \"--add\", key.slice(6), value], {\n cwd: root,\n });\n return;\n }\n await this.runGit([\"config\", \"--local\", key, value], { cwd: root });\n }\n\n async resolveCommit(root: string, revision: string): Promise<string> {\n const result = await this.runGit(\n [\"rev-parse\", \"--verify\", `${revision}^{commit}`],\n {\n cwd: root,\n },\n );\n return result.stdout.trim();\n }\n\n async remoteUrl(root: string, name: \"origin\"): Promise<string | null> {\n try {\n const result = await this.runGit([\"remote\", \"get-url\", name], {\n cwd: root,\n });\n return result.stdout.trim() || null;\n } catch {\n return null;\n }\n }\n\n async statusPorcelain(root: string): Promise<string> {\n const result = await this.runGit(\n [\"status\", \"--porcelain\", \"--untracked-files=no\"],\n { cwd: root },\n );\n return result.stdout.trim();\n }\n\n async createDetachedWorktree(\n root: string,\n commitOid: string,\n destination: string,\n ): Promise<void> {\n await this.runGit([\"worktree\", \"add\", \"--detach\", destination, commitOid], {\n cwd: root,\n });\n }\n\n async removeWorktree(root: string, destination: string): Promise<void> {\n await this.runGit([\"worktree\", \"remove\", \"--force\", destination], {\n cwd: root,\n });\n }\n}\n","import type { BootstrapGit } from \"../ports/bootstrap-git.js\";\n\nexport async function configureDreamboardGitRepository(input: {\n git: Pick<BootstrapGit, \"setLocalConfig\">;\n root: string;\n credentialHelper: string;\n hooksPath?: string;\n}): Promise<void> {\n await input.git.setLocalConfig(input.root, \"credential.useHttpPath\", \"true\");\n await input.git.setLocalConfig(input.root, \"credential.helper\", \"\");\n await input.git.setLocalConfig(\n input.root,\n \"--add credential.helper\",\n input.credentialHelper,\n );\n await input.git.setLocalConfig(input.root, \"http.followRedirects\", \"false\");\n await input.git.setLocalConfig(\n input.root,\n \"core.hooksPath\",\n input.hooksPath ?? \".dreamboard/hooks\",\n );\n}\n","import {\n formatGitCredentialResponse,\n parseGitCredentialRequest,\n resolveGitCredential,\n} from \"@dreamboard-games/cli-core\";\nimport { getStoredSession } from \"../../config/credential-store.js\";\nimport { loadGlobalConfig } from \"../../config/global-config.js\";\nimport { resolveConfig } from \"../../config/resolve.js\";\nimport { createUserSessionManager } from \"../../auth/user-session-manager.js\";\n\nconst DEFAULT_ALLOWED_GIT_HOSTS = [\n \"git.staging.dreamboard.games\",\n \"git.dreamboard.games\",\n];\n\nexport async function runGitCredentialHelper(\n input: {\n stdin?: NodeJS.ReadableStream;\n stdout?: NodeJS.WritableStream;\n stderr?: NodeJS.WritableStream;\n env?: NodeJS.ProcessEnv;\n } = {},\n): Promise<void> {\n const stdin = input.stdin ?? process.stdin;\n const stdout = input.stdout ?? process.stdout;\n const env = input.env ?? process.env;\n const request = parseGitCredentialRequest(await readAll(stdin));\n const response = await resolveGitCredential({\n request,\n policy: {\n allowedHosts: resolveAllowedGitHosts(env),\n },\n tokenManager: createUserSessionManager(\n resolveConfig(\n await loadGlobalConfig(),\n {},\n undefined,\n await getStoredSession(),\n ),\n ),\n });\n\n if (!response) {\n return;\n }\n\n stdout.write(formatGitCredentialResponse(response));\n}\n\nfunction resolveAllowedGitHosts(env: NodeJS.ProcessEnv): readonly string[] {\n const configured = env.DREAMBOARD_GIT_ALLOWED_HOSTS?.split(\",\")\n .map((host) => host.trim())\n .filter(Boolean);\n return configured && configured.length > 0\n ? configured\n : DEFAULT_ALLOWED_GIT_HOSTS;\n}\n\nasync function readAll(stream: NodeJS.ReadableStream): Promise<string> {\n let data = \"\";\n stream.setEncoding(\"utf8\");\n for await (const chunk of stream) {\n data += chunk;\n }\n return data;\n}\n","import {\n createProjectSession,\n createProjectSessionFromReducerSnapshot,\n ensureProject,\n ensureProjectDevCompile,\n getApiVersion,\n getCurrentAuthUser,\n getProjectBySlug,\n type CreateSessionFromReducerSnapshotRequest,\n type CreateSessionRequest,\n type CreateSessionResponse,\n type EnsureDevCompileRequest,\n type EnsureDevCompileResponse,\n type HostSessionSnapshot,\n type Project,\n} from \"@dreamboard-games/api-client\";\nimport { toDreamboardApiError } from \"../../utils/errors.js\";\nimport { titleFromSlug } from \"../../utils/strings.js\";\n\nexport type RemoteProjectIdentity = {\n deploymentId: string;\n ownerScopeId: string;\n bindingKey: string;\n};\n\nexport async function loadRemoteProjectIdentity(): Promise<RemoteProjectIdentity> {\n const [versionResponse, userResponse] = await Promise.all([\n getApiVersion(),\n getCurrentAuthUser(),\n ]);\n\n if (versionResponse.error || !versionResponse.data) {\n throw toDreamboardApiError(\n versionResponse.error as Parameters<typeof toDreamboardApiError>[0],\n versionResponse.response,\n \"Failed to resolve backend deployment identity\",\n );\n }\n if (userResponse.error || !userResponse.data) {\n throw toDreamboardApiError(\n userResponse.error,\n userResponse.response,\n \"Failed to resolve authenticated owner scope\",\n );\n }\n\n const deploymentId = versionResponse.data.deploymentId;\n const ownerScopeId = userResponse.data.ownerScopeId;\n return {\n deploymentId,\n ownerScopeId,\n bindingKey: `${deploymentId}:${ownerScopeId}`,\n };\n}\n\nexport async function ensureProjectSdk(options: {\n projectId: string;\n slug: string;\n description?: string;\n updateAlias?: boolean;\n}): Promise<Project> {\n const { data, error, response } = await ensureProject({\n path: { projectId: options.projectId },\n body: {\n slug: options.slug,\n name: titleFromSlug(options.slug),\n description:\n options.description ?? `Dreamboard workspace for ${options.slug}.`,\n ...(options.updateAlias ? { updateAlias: true } : {}),\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to ensure project\");\n }\n\n return data;\n}\n\nexport async function getProjectBySlugSdk(slug: string): Promise<Project> {\n const { data, error, response } = await getProjectBySlug({\n path: { slug },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n `Project '${slug}' not found`,\n );\n }\n\n return data;\n}\n\nexport async function ensureProjectDevCompileSdk(options: {\n projectId: string;\n request: EnsureDevCompileRequest;\n}): Promise<EnsureDevCompileResponse> {\n const { data, error, response } = await ensureProjectDevCompile({\n path: { projectId: options.projectId },\n body: options.request,\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to ensure dev compile\");\n }\n\n return data;\n}\n\nexport async function createProjectSessionSdk(options: {\n projectId: string;\n request: CreateSessionRequest;\n}): Promise<CreateSessionResponse> {\n const { data, error, response } = await createProjectSession({\n path: { projectId: options.projectId },\n body: options.request,\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to create session\");\n }\n\n return data;\n}\n\nexport async function createProjectSessionFromReducerSnapshotSdk(options: {\n projectId: string;\n request: CreateSessionFromReducerSnapshotRequest;\n}): Promise<HostSessionSnapshot> {\n const { data, error, response } =\n await createProjectSessionFromReducerSnapshot({\n path: { projectId: options.projectId },\n body: options.request,\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to create session from reducer snapshot\",\n );\n }\n\n return data;\n}\n","import {\n ensureProjectRepository,\n getProjectRepository,\n retryProjectRepositoryReconciliation,\n type ProjectRepository,\n type ProjectRepositoryProvisioningState,\n} from \"@dreamboard-games/api-client\";\nimport { toDreamboardApiError } from \"../../utils/errors.js\";\n\nconst DEFAULT_POLL_INTERVAL_MS = 1_000;\nconst TERMINAL_STATES = new Set<ProjectRepositoryProvisioningState>([\n \"READY\",\n \"ERROR\",\n \"DELETING\",\n \"DELETED\",\n]);\n\nexport class ProjectRepositoryTimeoutError extends Error {\n readonly lastRepository: ProjectRepository | null;\n\n constructor(options: {\n projectId: string;\n timeoutMs: number;\n lastRepository: ProjectRepository | null;\n }) {\n const state = options.lastRepository?.provisioningState ?? \"unknown\";\n super(\n `Repository setup for project ${options.projectId} timed out after ${options.timeoutMs}ms (last state: ${state}).`,\n );\n this.name = \"ProjectRepositoryTimeoutError\";\n this.lastRepository = options.lastRepository;\n }\n}\n\nexport async function ensureProjectRepositorySdk(\n projectId: string,\n): Promise<ProjectRepository> {\n const { data, error, response } = await ensureProjectRepository({\n path: { projectId },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to ensure project repository\",\n );\n }\n\n return data;\n}\n\nexport async function getProjectRepositorySdk(\n projectId: string,\n): Promise<ProjectRepository | null> {\n const { data, error, response } = await getProjectRepository({\n path: { projectId },\n });\n\n if (response?.status === 404) {\n return null;\n }\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to fetch project repository\",\n );\n }\n\n return data;\n}\n\nexport async function retryProjectRepositoryReconciliationSdk(\n projectId: string,\n): Promise<ProjectRepository> {\n const { data, error, response } = await retryProjectRepositoryReconciliation({\n path: { projectId },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to retry project repository reconciliation\",\n );\n }\n\n return data;\n}\n\nexport async function pollProjectRepository(options: {\n projectId: string;\n timeoutMs: number;\n intervalMs?: number;\n fetchRepository?: (projectId: string) => Promise<ProjectRepository | null>;\n sleep?: (ms: number) => Promise<void>;\n now?: () => number;\n}): Promise<ProjectRepository> {\n const intervalMs = options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const fetchRepository = options.fetchRepository ?? getProjectRepositorySdk;\n const sleep =\n options.sleep ??\n ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));\n const now = options.now ?? (() => Date.now());\n const deadline = now() + options.timeoutMs;\n let lastRepository: ProjectRepository | null = null;\n\n while (now() <= deadline) {\n lastRepository = await fetchRepository(options.projectId);\n if (\n lastRepository &&\n TERMINAL_STATES.has(lastRepository.provisioningState)\n ) {\n return lastRepository;\n }\n\n const remainingMs = deadline - now();\n if (remainingMs <= 0) {\n break;\n }\n await sleep(Math.min(intervalMs, remainingMs));\n }\n\n throw new ProjectRepositoryTimeoutError({\n projectId: options.projectId,\n timeoutMs: options.timeoutMs,\n lastRepository,\n });\n}\n","import {\n createProjectPreview,\n ensureProjectBuild,\n getCurrentProjectRelease,\n getProjectCommitStatus,\n publishProjectRelease,\n type ProjectBuild,\n type ProjectBuildTargetProfile,\n type ProjectCommitStatus,\n type ProjectPreview,\n type ProjectRelease,\n} from \"@dreamboard-games/api-client\";\nimport { toDreamboardApiError } from \"../../utils/errors.js\";\n\nexport async function ensureProjectBuildSdk(options: {\n projectId: string;\n commitOid: string;\n targetProfile: ProjectBuildTargetProfile;\n}): Promise<ProjectBuild> {\n const { data, error, response } = await ensureProjectBuild({\n path: { projectId: options.projectId },\n body: {\n commitOid: options.commitOid,\n targetProfile: options.targetProfile,\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(error, response, \"Failed to ensure project build\");\n }\n\n return data;\n}\n\nexport async function createProjectPreviewSdk(options: {\n projectId: string;\n commitOid: string;\n}): Promise<ProjectPreview> {\n const { data, error, response } = await createProjectPreview({\n path: { projectId: options.projectId },\n body: {\n commitOid: options.commitOid,\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to create project preview\",\n );\n }\n\n return data;\n}\n\nexport async function getProjectCommitStatusSdk(options: {\n projectId: string;\n commitOid: string;\n}): Promise<ProjectCommitStatus> {\n const { data, error, response } = await getProjectCommitStatus({\n path: {\n projectId: options.projectId,\n commitOid: options.commitOid,\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to get project commit status\",\n );\n }\n\n return data;\n}\n\nexport async function publishProjectReleaseSdk(options: {\n projectId: string;\n commitOid: string;\n}): Promise<ProjectRelease> {\n const { data, error, response } = await publishProjectRelease({\n path: { projectId: options.projectId },\n body: {\n commitOid: options.commitOid,\n },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to publish project release\",\n );\n }\n\n return data;\n}\n\nexport async function getCurrentProjectReleaseSdk(options: {\n projectId: string;\n}): Promise<ProjectRelease> {\n const { data, error, response } = await getCurrentProjectRelease({\n path: { projectId: options.projectId },\n });\n\n if (error || !data) {\n throw toDreamboardApiError(\n error,\n response,\n \"Failed to get current project release\",\n );\n }\n\n return data;\n}\n","import { createProjectSourceBlobUploadSession } from \"./sdk.gen.js\";\nconst textEncoder = new TextEncoder();\nfunction bytesToHex(bytes) {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\nasync function sha256Hex(bytes) {\n const normalizedBytes = new Uint8Array(bytes.byteLength);\n normalizedBytes.set(bytes);\n const digest = await crypto.subtle.digest(\"SHA-256\", normalizedBytes.buffer);\n return bytesToHex(new Uint8Array(digest));\n}\nfunction getUtf8ByteSize(content) {\n return textEncoder.encode(content).byteLength;\n}\nasync function computeSourceContentHash(content) {\n return sha256Hex(textEncoder.encode(content));\n}\nasync function describeSourceBlob(content) {\n return {\n contentHash: await computeSourceContentHash(content),\n byteSize: getUtf8ByteSize(content),\n };\n}\nexport async function materializeSourceChangeOperations(changes) {\n const blobsByHash = new Map();\n const materialized = await Promise.all(Array.from(changes, async (change) => {\n if (change.kind === \"delete\") {\n return change;\n }\n const blob = await describeSourceBlob(change.content);\n const existing = blobsByHash.get(blob.contentHash);\n if (!existing) {\n blobsByHash.set(blob.contentHash, blob);\n }\n return {\n kind: \"upsert\",\n path: change.path,\n contentHash: blob.contentHash,\n byteSize: blob.byteSize,\n };\n }));\n return {\n blobs: Array.from(blobsByHash.values()).sort((left, right) => left.contentHash.localeCompare(right.contentHash)),\n changes: materialized,\n };\n}\nexport function mapUpsertBlobContentsByContentHash(localChanges, materializedChanges) {\n const uploadBlobs = new Map();\n const length = Math.min(localChanges.length, materializedChanges.length);\n for (let index = 0; index < length; index += 1) {\n const localChange = localChanges[index];\n const materializedChange = materializedChanges[index];\n if (localChange?.kind !== \"upsert\" ||\n materializedChange?.kind !== \"upsert\") {\n continue;\n }\n uploadBlobs.set(materializedChange.contentHash, {\n contentHash: materializedChange.contentHash,\n byteSize: materializedChange.byteSize,\n content: localChange.content,\n });\n }\n return uploadBlobs;\n}\nclass SourceBlobUploadError extends Error {\n constructor(status, details) {\n const suffix = details.trim().length > 0 ? `: ${details.trim()}` : \"\";\n super(`Failed to upload source blob (HTTP ${status}${suffix})`);\n this.name = \"SourceBlobUploadError\";\n this.status = status;\n this.details = details;\n }\n}\nfunction isDuplicateDirectUploadError(error) {\n if (!(error instanceof SourceBlobUploadError)) {\n return false;\n }\n if (error.status === 409) {\n return true;\n }\n const normalizedDetails = error.details.toLowerCase();\n return (normalizedDetails.includes(\"duplicate\") ||\n normalizedDetails.includes(\"already exists\") ||\n normalizedDetails.includes(\"resource already exists\"));\n}\nasync function uploadSourceBlob(uploadTarget, content) {\n const response = await fetch(uploadTarget.url, {\n method: uploadTarget.method,\n headers: uploadTarget.headers,\n body: textEncoder.encode(content),\n });\n if (response.ok) {\n return;\n }\n const details = await response.text().catch(() => \"\");\n throw new SourceBlobUploadError(response.status, details);\n}\nexport class SourceBlobSessionRequestError extends Error {\n constructor(message, apiError, response) {\n super(message);\n this.name = \"SourceBlobSessionRequestError\";\n this.apiError = apiError;\n this.response = response;\n }\n}\nfunction assertSourceBlobUploadSession(data, response) {\n if (!data ||\n typeof data !== \"object\" ||\n !Array.isArray(data.uploads)) {\n throw new SourceBlobSessionRequestError(\"Source blob upload session response did not include an uploads array\", data, response);\n }\n}\nasync function confirmSourceBlobAlreadyExists(options) {\n const { requestUploadSession, blob } = options;\n const { data, error, response } = await requestUploadSession([\n {\n contentHash: blob.contentHash,\n byteSize: blob.byteSize,\n },\n ]);\n if (error || !data) {\n throw new SourceBlobSessionRequestError(\"Failed to create source blob upload session\", error, response);\n }\n assertSourceBlobUploadSession(data, response);\n return data.uploads[0]?.status === \"exists\";\n}\nasync function uploadSourceBlobs(options) {\n const { blobs, requestUploadSession } = options;\n const uniqueBlobs = new Map();\n for (const blob of blobs) {\n const existing = uniqueBlobs.get(blob.contentHash);\n if (!existing) {\n uniqueBlobs.set(blob.contentHash, blob);\n continue;\n }\n if (existing.byteSize !== blob.byteSize) {\n throw new Error(`Source blob ${blob.contentHash} has conflicting byte sizes.`);\n }\n }\n if (uniqueBlobs.size === 0) {\n return;\n }\n const { data, error, response } = await requestUploadSession(Array.from(uniqueBlobs.values(), ({ contentHash, byteSize }) => ({\n contentHash,\n byteSize,\n })));\n if (error || !data) {\n throw new SourceBlobSessionRequestError(\"Failed to create source blob upload session\", error, response);\n }\n assertSourceBlobUploadSession(data, response);\n for (const upload of data.uploads) {\n if (upload.status !== \"upload_required\") {\n continue;\n }\n const blob = uniqueBlobs.get(upload.contentHash);\n if (!blob) {\n throw new Error(`Upload session referenced unknown source blob ${upload.contentHash}.`);\n }\n if (!upload.uploadTarget) {\n throw new Error(`Upload target missing for source blob ${upload.contentHash}.`);\n }\n try {\n await uploadSourceBlob(upload.uploadTarget, blob.content);\n if (!(await confirmSourceBlobAlreadyExists({ requestUploadSession, blob }))) {\n throw new Error(`Source blob ${blob.contentHash} was uploaded but not registered.`);\n }\n }\n catch (error) {\n if (isDuplicateDirectUploadError(error) &&\n (await confirmSourceBlobAlreadyExists({ requestUploadSession, blob }))) {\n continue;\n }\n throw error;\n }\n }\n}\nexport async function uploadProjectSourceBlobs(options) {\n const { projectId, blobs } = options;\n return uploadSourceBlobs({\n blobs,\n requestUploadSession: (uploadBlobs) => createProjectSourceBlobUploadSession({\n path: { projectId },\n body: { blobs: uploadBlobs },\n }),\n });\n}\n","import {\n SourceBlobSessionRequestError,\n uploadProjectSourceBlobs,\n type SourceBlobUploadInput,\n} from \"@dreamboard-games/api-client/source-revisions\";\nimport { toDreamboardApiError } from \"../../utils/errors.js\";\n\nconst SOURCE_BLOB_UPLOAD_BATCH_SIZE = 20;\n\nexport async function uploadProjectSourceBlobsSdk(\n projectId: string,\n blobs: SourceBlobUploadInput[],\n): Promise<void> {\n try {\n for (const batch of chunkSourceBlobs(blobs)) {\n await uploadProjectSourceBlobs({ projectId, blobs: batch });\n }\n } catch (error) {\n if (error instanceof SourceBlobSessionRequestError) {\n throw toDreamboardApiError(\n error.apiError as Parameters<typeof toDreamboardApiError>[0],\n error.response,\n error.message,\n );\n }\n throw error;\n }\n}\n\nfunction chunkSourceBlobs(\n blobs: SourceBlobUploadInput[],\n): SourceBlobUploadInput[][] {\n const chunks: SourceBlobUploadInput[][] = [];\n for (\n let index = 0;\n index < blobs.length;\n index += SOURCE_BLOB_UPLOAD_BATCH_SIZE\n ) {\n chunks.push(blobs.slice(index, index + SOURCE_BLOB_UPLOAD_BATCH_SIZE));\n }\n return chunks;\n}\n","import { SystemGit } from \"@dreamboard-games/cli-core\";\nimport { resolveProjectContext } from \"../config/resolve.js\";\nimport type { ConfigFlags } from \"../flags.js\";\n\nexport async function resolveCommitScopedProjectContext(\n flags: ConfigFlags,\n revision: string,\n opts?: { requireAuth?: boolean },\n) {\n const context = await resolveProjectContext(flags, opts);\n const commitOid = await new SystemGit().resolveCommit(\n context.projectRoot,\n revision,\n );\n return {\n ...context,\n commitOid,\n };\n}\n\nexport function printJsonOrSummary(options: {\n json: boolean;\n value: unknown;\n summary: string;\n}): void {\n if (options.json) {\n console.log(JSON.stringify(options.value, null, 2));\n return;\n }\n console.log(options.summary);\n}\n","import { defineCommand } from \"citty\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { parseBuildCommandArgs } from \"../flags.js\";\nimport { ensureProjectBuildSdk } from \"../services/api/index.js\";\nimport {\n printJsonOrSummary,\n resolveCommitScopedProjectContext,\n} from \"./commit-scoped.js\";\n\nexport default defineCommand({\n meta: {\n name: \"build\",\n description: \"Ensure a server build exists for an exact Git commit\",\n },\n args: {\n commit: {\n type: \"string\",\n description: \"Git revision to resolve once before building\",\n required: true,\n },\n profile: {\n type: \"string\",\n valueHint: \"preview|release\",\n description: \"Build profile\",\n default: \"preview\",\n },\n json: {\n type: \"boolean\",\n description: \"Print machine-readable build JSON\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseBuildCommandArgs(args);\n const { projectConfig, commitOid } = await resolveCommitScopedProjectContext(\n parsedArgs,\n parsedArgs.commit,\n );\n const build = await ensureProjectBuildSdk({\n projectId: projectConfig.projectId,\n commitOid,\n targetProfile: parsedArgs.profile,\n });\n\n printJsonOrSummary({\n json: parsedArgs.json,\n value: build,\n summary: [\n `Build ${build.buildRecipeDigest}`,\n `commit=${build.commitOid}`,\n `profile=${build.targetProfile}`,\n `artifact=${build.compiledArtifactStatus}`,\n ].join(\" \"),\n });\n },\n});\n","import path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { defineCommand } from \"citty\";\nimport {\n getApiVersion,\n getSessionSnapshot,\n type CompiledResult,\n type EnsureDevCompileRequest,\n type EnsureDevCompileResponse,\n} from \"@dreamboard-games/api-client\";\nimport type { GameTopologyManifest as ApiGameTopologyManifest } from \"@dreamboard-games/api-client/types.gen\";\nimport {\n materializeSourceChangeOperations,\n mapUpsertBlobContentsByContentHash,\n} from \"@dreamboard-games/api-client/source-revisions\";\nimport consola from \"consola\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { PROJECT_DIR_NAME } from \"../constants.js\";\nimport { configureClient, resolveProjectContext } from \"../config/resolve.js\";\nimport { resolveLocalHarnessAccessToken } from \"../config/local-harness-auth.js\";\nimport { createUserSessionManager } from \"../auth/user-session-manager.js\";\nimport { parseDevCommandArgs, parsePlayerCountFlags } from \"../flags.js\";\nimport type { ProjectConfig } from \"../types.js\";\nimport { ensureDir, readTextFile, writeJsonFile } from \"../utils/fs.js\";\nimport {\n createPersistedDevSession,\n parseDevSeed,\n} from \"../utils/dev-session.js\";\nimport { extractUserIdFromJwt } from \"../utils/jwt.js\";\nimport { resolvePlayerCount } from \"../utils/player-count.js\";\nimport { isStaleContractArtifactError } from \"../utils/errors.js\";\nimport { openBrowser } from \"../auth/auth-server.js\";\nimport { loadProjectDevHost } from \"../services/dev-host/loader.js\";\nimport { createCliDevHostPlatform } from \"../services/dev-host/platform.js\";\nimport {\n createSessionFromScenario,\n generateReducerNativeArtifacts,\n} from \"../services/testing/reducer-native-test-harness.js\";\nimport { resolveSetupProfileSelectionForSession } from \"../services/workflows/resolve-setup-profile.js\";\nimport {\n collectLocalFiles,\n loadManifest,\n loadRule,\n} from \"../services/project/local-files.js\";\nimport {\n createProjectSessionSdk,\n ensureProjectDevCompileSdk,\n uploadProjectSourceBlobsSdk,\n waitForCompiledResultJobSdk,\n} from \"../services/api/index.js\";\nimport { resolveRemoteProject } from \"../services/project/remote-project.js\";\nimport { runLocalTypecheck } from \"../services/project/local-typecheck.js\";\nimport {\n didLocalMaintainerSnapshotChange,\n ensureLocalMaintainerSnapshot,\n isLocalMaintainerRegistryEnabled,\n} from \"../services/project/local-maintainer-registry.js\";\nimport { assertReleaseEnvironmentPortableDependencies } from \"../services/project/dependency-portability.js\";\nimport {\n getProjectLocalMaintainerRegistry,\n updateProjectLocalMaintainerRegistry,\n} from \"../services/project/project-state.js\";\nimport { updateProjectState } from \"../config/project-config.js\";\nimport { scaffoldStaticWorkspace } from \"../services/project/static-scaffold.js\";\nimport { applyWorkspaceCodegen } from \"../services/project/workspace-codegen.js\";\nimport { reconcileWorkspaceDependencies } from \"../services/project/workspace-dependencies.js\";\nimport { assertReducerContractPreflight } from \"../services/project/reducer-contract-preflight.js\";\nimport { assertReducerBundleSmoke } from \"../services/project/reducer-bundle-preflight.js\";\nimport { isSourceRevisionPath } from \"../services/project/source-revision-paths.js\";\nimport { projectIdFromSessionGameSource } from \"../utils/session-game-source.js\";\n\nasync function runLoggedStep<T>(\n message: string,\n task: () => Promise<T>,\n): Promise<T> {\n consola.start(message);\n return task();\n}\n\nfunction formatDevCompileJobProgressMessage(job: {\n status: string;\n phase?: string;\n queuePosition?: number;\n message?: string | null;\n}): string {\n const phase = job.phase ? ` [${job.phase}]` : \"\";\n const detail = job.message ? ` ${job.message}` : \"\";\n if (job.status === \"PENDING\") {\n const queue =\n typeof job.queuePosition === \"number\"\n ? ` (queue ${job.queuePosition + 1})`\n : \"\";\n return `Dev compile queued${queue}${phase}${detail}`.trim();\n }\n if (job.status === \"RUNNING\") {\n return `Dev compile running${phase}${detail}`.trim();\n }\n if (job.status === \"FAILED\") {\n return `Dev compile failed${phase}${detail}`.trim();\n }\n return `Dev compile ${job.status.toLowerCase()}${phase}${detail}`.trim();\n}\n\nfunction formatDevCompileDiagnostics(\n diagnostics: CompiledResult[\"diagnostics\"],\n): string | null {\n const lines = diagnostics\n ?.map((diagnostic) => {\n const location =\n diagnostic.type === \"file\"\n ? `${diagnostic.file}:${diagnostic.line}:${diagnostic.column}`\n : diagnostic.category;\n const code = diagnostic.code ? ` ${diagnostic.code}` : \"\";\n const message = diagnostic.message.trim();\n return `- [${diagnostic.severity}] ${location}${code}: ${message}`;\n })\n .filter((line) => line.trim().length > 0);\n\n return lines && lines.length > 0 ? lines.join(\"\\n\") : null;\n}\n\nfunction assertDevCompiledResultStartable(\n compiledResult: CompiledResult,\n): CompiledResult {\n const blockers: string[] = [];\n if (!compiledResult.success) blockers.push(\"compile did not succeed\");\n if (!compiledResult.appStorageKey) blockers.push(\"missing APP storage key\");\n if (!compiledResult.uiStorageKey) blockers.push(\"missing UI storage key\");\n\n if (blockers.length === 0) {\n return compiledResult;\n }\n\n const diagnostics = formatDevCompileDiagnostics(compiledResult.diagnostics);\n const details = diagnostics\n ? `Diagnostics:\\n${diagnostics}`\n : \"No compiler diagnostics were returned.\";\n throw new Error(\n [\n `Dev compile ${compiledResult.id} is not startable (${blockers.join(\", \")}).`,\n details,\n \"Fix the compile diagnostics before starting dreamboard dev.\",\n ].join(\"\\n\"),\n );\n}\n\nfunction clearPreflightOutput(): void {\n if (!process.stdout.isTTY || process.env.CI) return;\n console.clear();\n}\n\nfunction formatDevReadyOutput(options: {\n url: string;\n networkUrls: string[];\n allowedHosts: string[];\n apiBaseUrl: string;\n sessionStatus: \"created\" | \"reused\" | \"seeded\";\n shortCode: string;\n sessionId: string;\n seed: number | \"unknown\";\n debug: boolean;\n scenarioId?: string | null;\n materialization?: DevRunSession[\"materialization\"];\n setupProfile?: {\n id: string;\n name?: string | null;\n } | null;\n}): string {\n const lines = [\"Dreamboard dev\", \"\", `Local: ${options.url}`];\n\n for (const networkUrl of options.networkUrls) {\n lines.push(`Network: ${networkUrl}`);\n }\n\n if (options.networkUrls.length > 0) {\n lines.push(\"Access: LAN only; use trusted networks.\");\n }\n\n for (const allowedHost of options.allowedHosts) {\n lines.push(`Allowed: ${allowedHost}`);\n }\n\n lines.push(\n `Session: ${options.shortCode} (${options.sessionId}, ${options.sessionStatus})`,\n `Seed: ${options.seed}`,\n );\n\n if (options.setupProfile) {\n const label = options.setupProfile.name\n ? `${options.setupProfile.name} (${options.setupProfile.id})`\n : options.setupProfile.id;\n lines.push(`Setup: ${label}`);\n }\n\n if (options.scenarioId) {\n lines.push(`Scenario: ${options.scenarioId}`);\n }\n\n if (options.materialization) {\n lines.push(\n `Snapshot: ${options.materialization.totalMs}ms total (${options.materialization.reducerHarnessMs}ms reducer, ${options.materialization.backendHydrateMs}ms backend)`,\n );\n }\n\n lines.push(\n `Backend: ${options.apiBaseUrl}`,\n \"\",\n \"UI edits hot-reload. Rule, manifest, and app changes need restart.\",\n `Debug logs: ${options.debug ? \"on\" : \"off (--debug)\"}`,\n \"\",\n );\n\n return lines.join(\"\\n\");\n}\n\nfunction parseDevHost(\n value: string | boolean | undefined,\n): string | boolean | undefined {\n if (value === undefined || value === false) return undefined;\n if (value === true) return true;\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : true;\n}\n\nfunction parseAllowedHosts(value: string | undefined): string[] {\n if (!value) return [];\n return value\n .split(\",\")\n .map((host) => normalizeAllowedHost(host))\n .filter((host): host is string => Boolean(host));\n}\n\nfunction normalizeAllowedHost(value: string): string | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.includes(\"://\")) {\n return new URL(trimmed).hostname;\n }\n\n return trimmed.split(\"/\")[0]?.replace(/:\\d+$/, \"\") || null;\n}\n\nfunction warnForExplicitDevPort(port: number): void {\n consola.warn(\n `Using --port ${port}. If gameplay authority rejects the browser origin, add http://localhost:${port} and http://127.0.0.1:${port} to GAMEPLAY_AUTHORITY_ALLOWED_ORIGINS for this environment.`,\n );\n}\n\ntype DevResumeResult = {\n session: DevRunSession | null;\n reason: string | null;\n resetNotice?: string;\n};\n\nconst STALE_DEV_SESSION_RESET_NOTICE =\n \"Resetting disposable dev session because the previous session was created for a stale contract artifact.\";\n\ntype DevRunSession = {\n sessionId: string;\n shortCode: string;\n gameId: string;\n seed?: number;\n setupProfileId?: string;\n materialization?: {\n mode: \"snapshot\";\n totalMs: number;\n reducerHarnessMs: number;\n backendHydrateMs: number;\n };\n};\n\nexport default defineCommand({\n meta: {\n name: \"dev\",\n description:\n \"Start a local iframe host for the current project while gameplay stays on the backend\",\n },\n args: {\n seed: {\n type: \"string\",\n description: \"Deterministic RNG seed for new sessions (defaults to 1337)\",\n },\n \"setup-profile\": {\n type: \"string\",\n description:\n \"Named setup profile to use when the manifest defines curated setup presets\",\n },\n players: {\n type: \"string\",\n description: \"Number of seats to create\",\n },\n \"player-count\": {\n type: \"string\",\n description: \"Number of seats to create (alias)\",\n },\n debug: {\n type: \"boolean\",\n description:\n \"Print browser/runtime logs and full SSE payloads in the terminal\",\n default: false,\n },\n resume: {\n type: \"string\",\n description: \"Resume a specific existing backend session by session id\",\n },\n \"from-scenario\": {\n type: \"string\",\n description:\n \"Create a backend session by materializing a typed test scenario snapshot\",\n },\n \"new-session\": {\n type: \"boolean\",\n description:\n \"Deprecated alias for the default behavior of creating a fresh session\",\n default: false,\n },\n open: {\n type: \"boolean\",\n description: \"Open the local dev host in the browser\",\n default: false,\n },\n port: {\n type: \"string\",\n description: \"Preferred local Vite port (defaults to 5352)\",\n },\n host: {\n type: \"string\",\n description:\n \"Expose the local dev host on the network. Pass without a value to bind all interfaces, or provide an address.\",\n valueHint: \"address\",\n },\n \"allowed-host\": {\n type: \"string\",\n description:\n \"Additional Host header to allow, for example a Cloudflare Tunnel hostname.\",\n valueHint: \"hostname\",\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseDevCommandArgs(args);\n const { projectRoot, projectConfig, config } = await resolveProjectContext(\n parsedArgs,\n { requireAuth: false },\n );\n await configureClient(config);\n const remoteProject = await resolveRemoteProject({\n projectRoot,\n projectConfig,\n config,\n });\n const effectiveProjectConfig = remoteProject.projectConfig;\n const effectiveAuthToken =\n resolveLocalHarnessAccessToken(config) ??\n (await createUserSessionManager(config).resolveApiToken())?.token ??\n config.authToken;\n\n const devCompile = await ensureDevCompiledResult({\n projectRoot,\n projectConfig: effectiveProjectConfig,\n config,\n env: parsedArgs.env ?? \"local\",\n debug: parsedArgs.debug,\n });\n\n const devDir = path.join(projectRoot, PROJECT_DIR_NAME, \"dev\");\n await ensureDir(devDir);\n const sessionFilePath = path.join(devDir, \"session.json\");\n\n const requestedResumeSessionId = parsedArgs.resume?.trim() || null;\n const requestedScenarioId = parsedArgs[\"from-scenario\"]?.trim() || null;\n if (requestedResumeSessionId && parsedArgs[\"new-session\"]) {\n throw new Error(\"Cannot combine --resume with --new-session.\");\n }\n if (requestedResumeSessionId && requestedScenarioId) {\n throw new Error(\"Cannot combine --resume with --from-scenario.\");\n }\n if (\n requestedScenarioId &&\n (parsedArgs.seed ||\n parsedArgs[\"setup-profile\"] ||\n parsedArgs.players ||\n parsedArgs[\"player-count\"])\n ) {\n throw new Error(\n \"--from-scenario materializes the scenario's authored seed, setup profile, and player count. Remove --seed, --setup-profile, and player-count overrides.\",\n );\n }\n\n const requestedSeed = requestedScenarioId\n ? null\n : parseDevSeed(parsedArgs.seed);\n const selectedSetupProfile = requestedScenarioId\n ? null\n : await resolveSetupProfileSelectionForSession({\n projectRoot,\n requestedSetupProfileId: parsedArgs[\"setup-profile\"],\n });\n let selectedSetupProfileId = selectedSetupProfile?.id ?? null;\n let resolvedPlayerCount = requestedScenarioId\n ? 0\n : await resolvePlayerCount(\n projectRoot,\n parsePlayerCountFlags(parsedArgs),\n );\n const resumeResult = requestedResumeSessionId\n ? await tryResumeSession(\n { sessionId: requestedResumeSessionId },\n effectiveProjectConfig.projectId,\n selectedSetupProfileId,\n )\n : { session: null, reason: null };\n\n if (requestedResumeSessionId && resumeResult.resetNotice) {\n consola.info(resumeResult.resetNotice);\n } else if (requestedResumeSessionId && resumeResult.reason) {\n consola.warn(\n `Ignoring requested dev session ${requestedResumeSessionId}: ${resumeResult.reason}`,\n );\n }\n\n let runSession = resumeResult.session;\n let scenarioSeededSession = false;\n const resumedExistingSession = Boolean(\n requestedResumeSessionId &&\n runSession &&\n runSession.sessionId === requestedResumeSessionId,\n );\n\n if (requestedScenarioId) {\n await generateReducerNativeArtifacts({\n projectRoot,\n compiledResultId: devCompile.id,\n gameId: effectiveProjectConfig.gameId,\n debug: parsedArgs.debug,\n });\n const seededScenario = await createSessionFromScenario({\n projectRoot,\n scenarioId: requestedScenarioId,\n compiledResultId: devCompile.id,\n projectId: effectiveProjectConfig.projectId,\n gameId: effectiveProjectConfig.gameId,\n debug: parsedArgs.debug,\n trustGeneratedFingerprint: true,\n });\n scenarioSeededSession = true;\n selectedSetupProfileId = seededScenario.setupProfileId;\n resolvedPlayerCount = seededScenario.playerCount;\n runSession = {\n sessionId: seededScenario.sessionId,\n shortCode: seededScenario.shortCode,\n gameId: seededScenario.gameId,\n seed: seededScenario.seed,\n setupProfileId: seededScenario.setupProfileId ?? undefined,\n materialization: seededScenario.materialization,\n };\n } else if (!runSession) {\n runSession = await createDevSession({\n projectRoot,\n projectConfig: effectiveProjectConfig,\n playerCount: resolvedPlayerCount,\n seed: requestedSeed ?? 1337,\n compiledResult: devCompile,\n setupProfileId: selectedSetupProfileId,\n });\n }\n\n await writeJsonFile(\n sessionFilePath,\n createPersistedDevSession({ sessionId: runSession.sessionId }),\n );\n\n const preferredPort =\n typeof parsedArgs.port === \"string\" && parsedArgs.port.trim().length > 0\n ? Number.parseInt(parsedArgs.port, 10)\n : undefined;\n if (\n preferredPort !== undefined &&\n (!Number.isFinite(preferredPort) || preferredPort <= 0)\n ) {\n throw new Error(\"Invalid --port value. Expected a positive integer.\");\n }\n if (preferredPort !== undefined) {\n warnForExplicitDevPort(preferredPort);\n }\n const allowedHosts = parseAllowedHosts(parsedArgs[\"allowed-host\"]);\n\n const loadedDevHost = await loadProjectDevHost(projectRoot);\n const devServer = await loadedDevHost.module.start(\n {\n projectRoot,\n sessionFilePath,\n apiBaseUrl: config.apiBaseUrl,\n port: preferredPort,\n host: parseDevHost(parsedArgs.host),\n allowedHosts,\n runtimeConfig: {\n apiBaseUrl: config.apiBaseUrl,\n userId: extractUserIdFromJwt(effectiveAuthToken ?? null),\n gameId: runSession.gameId,\n compiledResultId: devCompile.id,\n setupProfileId: runSession.setupProfileId ?? null,\n playerCount: resolvedPlayerCount,\n debug: parsedArgs.debug,\n slug: effectiveProjectConfig.slug,\n autoStartGame: !resumedExistingSession && !scenarioSeededSession,\n initialSession: {\n sessionId: runSession.sessionId,\n shortCode: runSession.shortCode,\n gameId: runSession.gameId,\n seed: runSession.seed ?? null,\n },\n },\n },\n createCliDevHostPlatform(config),\n );\n\n clearPreflightOutput();\n console.log(\n formatDevReadyOutput({\n url: devServer.url,\n networkUrls: devServer.networkUrls,\n allowedHosts,\n apiBaseUrl: config.apiBaseUrl,\n sessionStatus: scenarioSeededSession\n ? \"seeded\"\n : resumedExistingSession\n ? \"reused\"\n : \"created\",\n shortCode: runSession.shortCode,\n sessionId: runSession.sessionId,\n seed: runSession.seed ?? \"unknown\",\n debug: parsedArgs.debug,\n scenarioId: scenarioSeededSession ? requestedScenarioId : null,\n materialization: runSession.materialization,\n setupProfile: selectedSetupProfileId\n ? {\n id: selectedSetupProfileId,\n name: selectedSetupProfile?.name,\n }\n : null,\n }),\n );\n\n if (parsedArgs.open) {\n openBrowser(devServer.url);\n }\n\n await waitForTermination(async () => {\n await devServer.close();\n });\n },\n});\n\nasync function tryResumeSession(\n requested: {\n sessionId: string;\n },\n currentGameId: string,\n setupProfileId: string | null,\n): Promise<DevResumeResult> {\n const { data: snapshot, error } = await getSessionSnapshot({\n path: { sessionId: requested.sessionId },\n }).catch((error: unknown) => {\n if (isStaleContractArtifactError(error)) {\n return {\n data: null,\n error,\n };\n }\n throw error;\n });\n if (isStaleContractArtifactError(error)) {\n return {\n session: null,\n reason: null,\n resetNotice: STALE_DEV_SESSION_RESET_NOTICE,\n };\n }\n if (error || !snapshot) {\n return {\n session: null,\n reason: \"backend could not confirm that the session is still active\",\n };\n }\n const context = snapshot.context;\n if (projectIdFromSessionGameSource(context.gameSource) !== currentGameId) {\n return {\n session: null,\n reason: \"session belongs to a different game\",\n };\n }\n if ((context.setupProfileId ?? null) !== setupProfileId) {\n return {\n session: null,\n reason: `setup profile changed from ${context.setupProfileId ?? \"none\"} to ${setupProfileId ?? \"none\"}`,\n };\n }\n if (context.status === \"ended\" || context.phase === \"ended\") {\n return {\n session: null,\n reason: \"session has already ended\",\n };\n }\n\n return {\n session: {\n sessionId: context.sessionId,\n shortCode: context.shortCode,\n gameId: projectIdFromSessionGameSource(context.gameSource),\n setupProfileId: context.setupProfileId ?? undefined,\n },\n reason: null,\n };\n}\n\nasync function ensureDevCompiledResult(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n config: { apiBaseUrl: string; authToken?: string };\n env: string;\n debug: boolean;\n}): Promise<CompiledResult> {\n await assertReleaseEnvironmentPortableDependencies({\n projectRoot: options.projectRoot,\n projectConfig: options.projectConfig,\n environment: options.env,\n });\n const localMaintainerEnabled = isLocalMaintainerRegistryEnabled(\n options.config.apiBaseUrl,\n );\n const existingLocalMaintainerRegistry = getProjectLocalMaintainerRegistry(\n options.projectConfig,\n );\n if (!localMaintainerEnabled && existingLocalMaintainerRegistry) {\n await updateProjectState(\n options.projectRoot,\n updateProjectLocalMaintainerRegistry(options.projectConfig, undefined),\n );\n }\n const refreshedLocalMaintainerRegistry = localMaintainerEnabled\n ? await runLoggedStep(\"Checking local SDK snapshot...\", () =>\n ensureLocalMaintainerSnapshot(options.config.apiBaseUrl),\n )\n : await ensureLocalMaintainerSnapshot(options.config.apiBaseUrl);\n const localMaintainerRegistry =\n refreshedLocalMaintainerRegistry ??\n (localMaintainerEnabled ? (existingLocalMaintainerRegistry ?? null) : null);\n if (refreshedLocalMaintainerRegistry) {\n if (\n didLocalMaintainerSnapshotChange(\n existingLocalMaintainerRegistry,\n refreshedLocalMaintainerRegistry,\n )\n ) {\n await updateProjectState(\n options.projectRoot,\n updateProjectLocalMaintainerRegistry(\n options.projectConfig,\n refreshedLocalMaintainerRegistry,\n ),\n );\n consola.info(\"Local SDK snapshot refreshed.\");\n } else {\n consola.info(\"Using existing local SDK snapshot.\");\n }\n } else if (localMaintainerRegistry) {\n consola.info(\"Using workspace-pinned local SDK snapshot.\");\n }\n\n await runLoggedStep(\"Refreshing static scaffold...\", () =>\n scaffoldStaticWorkspace(options.projectRoot, \"update\", {\n localMaintainerRegistry,\n }),\n );\n const manifest = await loadManifest(options.projectRoot);\n await runLoggedStep(\"Applying workspace codegen...\", () =>\n applyWorkspaceCodegen({\n projectRoot: options.projectRoot,\n manifest: manifest as ApiGameTopologyManifest,\n }),\n );\n const dependencyState = await runLoggedStep(\n \"Reconciling workspace dependencies...\",\n () => reconcileWorkspaceDependencies(options.projectRoot),\n );\n if (\n dependencyState.packageManagerNormalized ||\n dependencyState.lockfileGenerated ||\n dependencyState.installed\n ) {\n consola.info(\"Workspace dependencies reconciled.\");\n } else {\n consola.info(\"Workspace dependencies already up to date.\");\n }\n await runLoggedStep(\"Validating reducer contract...\", () =>\n assertReducerContractPreflight(options.projectRoot),\n );\n const typecheckResult = await runLoggedStep(\n \"Running local typecheck...\",\n () => runLocalTypecheck(options.projectRoot),\n );\n if (!typecheckResult.skipped && !typecheckResult.success) {\n if (typecheckResult.output) consola.error(typecheckResult.output);\n throw new Error(\n \"Local typecheck failed. Fix the diagnostics before starting dev.\",\n );\n }\n if (typecheckResult.output && typecheckResult.skipped)\n consola.warn(typecheckResult.output);\n await runLoggedStep(\"Smoke-testing reducer bundle...\", () =>\n assertReducerBundleSmoke({\n projectRoot: options.projectRoot,\n manifest: manifest as ApiGameTopologyManifest,\n }),\n );\n consola.success(\"Reducer bundle smoke test passed.\");\n consola.start(\"Ensuring dev compile...\");\n\n const [localFiles, ruleText, backendVersion, workspacePackageJson] =\n await Promise.all([\n collectLocalFiles(options.projectRoot),\n loadRule(options.projectRoot),\n resolveBackendVersionMetadata(),\n readWorkspacePackageJson(options.projectRoot),\n ]);\n const sourceRevisionFiles = Object.fromEntries(\n Object.entries(localFiles).filter(([filePath]) =>\n isSourceRevisionPath(filePath),\n ),\n );\n const sourceChanges = Object.entries(sourceRevisionFiles).map(\n ([filePath, content]) => ({\n kind: \"upsert\" as const,\n path: filePath,\n content,\n }),\n );\n const { changes } = await materializeSourceChangeOperations(sourceChanges);\n const uploadBlobs = mapUpsertBlobContentsByContentHash(\n sourceChanges,\n changes,\n );\n const devFingerprint = computeDevFingerprint({\n env: options.env,\n files: localFiles,\n manifest,\n ruleText,\n localMaintainerRegistry,\n backendVersion,\n workspacePackageJson,\n });\n\n const first = await postEnsureDevCompile({\n config: options.config,\n projectId: options.projectConfig.projectId,\n body: {\n devFingerprint,\n env: options.env,\n sourceRevision: { mode: \"replace\", changes: [] },\n ruleText,\n manifest: manifest as ApiGameTopologyManifest,\n },\n });\n if (first.reused && first.compiledResult) {\n const compiledResult = assertDevCompiledResultStartable(\n first.compiledResult,\n );\n consola.success(`Reusing dev compile ${compiledResult.id}.`);\n return compiledResult;\n }\n\n await uploadProjectSourceBlobsSdk(\n options.projectConfig.projectId,\n Array.from(uploadBlobs.values()),\n );\n const queued = await postEnsureDevCompile({\n config: options.config,\n projectId: options.projectConfig.projectId,\n body: {\n devFingerprint,\n env: options.env,\n sourceRevision: { mode: \"replace\", changes },\n ruleText,\n manifest: manifest as ApiGameTopologyManifest,\n },\n });\n if (queued.reused && queued.compiledResult) {\n return assertDevCompiledResultStartable(queued.compiledResult);\n }\n if (!queued.jobId)\n throw new Error(\"Backend did not return a dev compile job id.\");\n\n const { compiledResult } = await waitForCompiledResultJobSdk({\n projectId: options.projectConfig.projectId,\n jobId: queued.jobId,\n onProgress: (job) => {\n const message = formatDevCompileJobProgressMessage(job);\n if (options.debug) {\n consola.info(message);\n } else {\n consola.start(message);\n }\n },\n });\n return assertDevCompiledResultStartable(compiledResult);\n}\n\nasync function resolveBackendVersionMetadata(): Promise<unknown> {\n const { data, error } = await getApiVersion();\n return error ? null : (data ?? null);\n}\n\nasync function readWorkspacePackageJson(projectRoot: string): Promise<unknown> {\n try {\n const raw = await readTextFile(path.join(projectRoot, \"package.json\"));\n const parsed = JSON.parse(raw) as {\n dependencies?: Record<string, unknown>;\n devDependencies?: Record<string, unknown>;\n };\n return {\n dependencies: Object.fromEntries(\n Object.entries(parsed.dependencies ?? {}).filter(([name]) =>\n isDreamboardPublicPackage(name),\n ),\n ),\n devDependencies: Object.fromEntries(\n Object.entries(parsed.devDependencies ?? {}).filter(([name]) =>\n isDreamboardPublicPackage(name),\n ),\n ),\n };\n } catch {\n return null;\n }\n}\n\nfunction isDreamboardPublicPackage(packageName: string): boolean {\n return (\n packageName === \"dreamboard\" || packageName.startsWith(\"@dreamboard-games/\")\n );\n}\n\nfunction stableJson(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map(stableJson).join(\",\")}]`;\n }\n return `{${Object.entries(value)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`)\n .join(\",\")}}`;\n}\n\nfunction computeDevFingerprint(input: {\n env: string;\n files: Record<string, string>;\n manifest: unknown;\n ruleText: string;\n localMaintainerRegistry: unknown;\n backendVersion: unknown;\n workspacePackageJson: unknown;\n}): string {\n const hash = createHash(\"sha256\");\n hash.update(\n stableJson({\n env: input.env,\n manifest: input.manifest,\n ruleText: input.ruleText,\n localMaintainerRegistry: input.localMaintainerRegistry,\n backendVersion: input.backendVersion,\n workspacePackageJson: input.workspacePackageJson,\n }),\n );\n for (const [filePath, content] of Object.entries(input.files).sort(\n ([a], [b]) => a.localeCompare(b),\n )) {\n hash.update(filePath);\n hash.update(\"\\0\");\n hash.update(content);\n hash.update(\"\\0\");\n }\n return hash.digest(\"hex\");\n}\n\nasync function postEnsureDevCompile(options: {\n config: { apiBaseUrl: string; authToken?: string };\n projectId: string;\n body: EnsureDevCompileRequest;\n}): Promise<EnsureDevCompileResponse> {\n void options.config;\n return ensureProjectDevCompileSdk({\n projectId: options.projectId,\n request: options.body,\n });\n}\n\nasync function createDevSession(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n playerCount: number;\n seed: number;\n compiledResult: CompiledResult;\n setupProfileId: string | null;\n}): Promise<DevRunSession> {\n const session = await createProjectSessionSdk({\n projectId: options.projectConfig.projectId,\n request: {\n compiledResultId: options.compiledResult.id,\n seed: options.seed,\n playerCount: options.playerCount,\n autoAssignSeats: true,\n setupProfileId: options.setupProfileId ?? undefined,\n },\n });\n\n return {\n sessionId: session.sessionId,\n shortCode: session.shortCode,\n gameId: projectIdFromSessionGameSource(session.gameSource),\n seed: options.seed,\n setupProfileId: options.setupProfileId ?? undefined,\n };\n}\n\ntype TerminationOptions = {\n exitAfterShutdown?: boolean;\n exitProcess?: (code: number) => void;\n};\n\nexport async function waitForTermination(\n close: () => Promise<void>,\n options: TerminationOptions = {},\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n let shuttingDown = false;\n const exitAfterShutdown = options.exitAfterShutdown ?? true;\n const exitProcess = options.exitProcess ?? ((code) => process.exit(code));\n\n const cleanupListeners = () => {\n process.off(\"SIGINT\", handleSigint);\n process.off(\"SIGTERM\", handleSigterm);\n };\n\n const shutdown = (signal: string) => {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n cleanupListeners();\n void close()\n .then(() => {\n consola.info(`Stopped local dev host (${signal}).`);\n resolve();\n if (exitAfterShutdown) {\n exitProcess(0);\n }\n })\n .catch(reject);\n };\n\n const handleSigint = () => shutdown(\"SIGINT\");\n const handleSigterm = () => shutdown(\"SIGTERM\");\n\n process.on(\"SIGINT\", handleSigint);\n process.on(\"SIGTERM\", handleSigterm);\n });\n}\n","import { randomInt } from \"node:crypto\";\nimport { exists, readJsonFile } from \"./fs.js\";\n\nexport type PersistedDevSession = {\n sessionId: string;\n};\n\nconst DEFAULT_DEV_SEED = 1337;\nconst MAX_RANDOM_DEV_SEED_EXCLUSIVE = 2_147_483_648;\nconst MIN_KOTLIN_LONG = -9_223_372_036_854_775_808n;\nconst MAX_KOTLIN_LONG = 9_223_372_036_854_775_807n;\nconst MIN_SAFE_SEED = BigInt(Number.MIN_SAFE_INTEGER);\nconst MAX_SAFE_SEED = BigInt(Number.MAX_SAFE_INTEGER);\n\nexport function createPersistedDevSession(input: {\n sessionId: string;\n}): PersistedDevSession {\n return {\n sessionId: input.sessionId,\n };\n}\n\nexport async function loadPersistedDevSession(\n sessionFilePath: string,\n): Promise<PersistedDevSession | null> {\n if (!(await exists(sessionFilePath))) {\n return null;\n }\n const value = await readJsonFile<PersistedDevSession>(sessionFilePath);\n if (!value.sessionId) {\n return null;\n }\n return {\n sessionId: value.sessionId,\n };\n}\n\nexport function parseDevSeed(rawSeed: string | undefined): number {\n return parseOptionalDevSeed(rawSeed) ?? DEFAULT_DEV_SEED;\n}\n\nexport function parseOptionalDevSeed(\n rawSeed: string | undefined,\n): number | undefined {\n const value = rawSeed?.trim();\n if (!value) {\n return undefined;\n }\n if (!/^-?\\d+$/.test(value)) {\n throw new Error(\"seed must be an integer\");\n }\n\n const parsed = BigInt(value);\n if (parsed < MIN_KOTLIN_LONG || parsed > MAX_KOTLIN_LONG) {\n throw new Error(\"seed must be within signed 64-bit integer range\");\n }\n if (parsed < MIN_SAFE_SEED || parsed > MAX_SAFE_SEED) {\n throw new Error(\n `seed must be within JavaScript safe integer range (${Number.MIN_SAFE_INTEGER}..${Number.MAX_SAFE_INTEGER})`,\n );\n }\n\n return Number(parsed);\n}\n\nexport function generateRandomDevSeed(): number {\n return randomInt(MAX_RANDOM_DEV_SEED_EXCLUSIVE);\n}\n","export function extractUserIdFromJwt(token: string | null): string | null {\n if (!token) {\n return null;\n }\n\n const parts = token.split(\".\");\n if (parts.length < 2) {\n return null;\n }\n\n try {\n const payload = JSON.parse(\n Buffer.from(parts[1]!, \"base64url\").toString(\"utf8\"),\n ) as Record<string, unknown>;\n return typeof payload.sub === \"string\" ? payload.sub : null;\n } catch {\n return null;\n }\n}\n","import type { PlayerCountFlags } from \"../flags.js\";\nimport { loadManifest } from \"../services/project/local-files.js\";\nimport { parsePositiveInt } from \"./strings.js\";\n\nexport async function resolvePlayerCount(\n projectRoot: string,\n flags: PlayerCountFlags,\n): Promise<number> {\n const rawPlayers = flags.players ?? flags[\"player-count\"];\n if (rawPlayers !== undefined) {\n return parsePositiveInt(rawPlayers, \"players\");\n }\n\n const manifest = await loadManifest(projectRoot);\n const minPlayers = manifest.players?.minPlayers;\n if (typeof minPlayers !== \"number\" || !Number.isFinite(minPlayers)) {\n throw new Error(\n \"manifest.ts is missing players.minPlayers. Provide --players <count> instead.\",\n );\n }\n\n return Math.max(1, Math.floor(minPlayers));\n}\n","import path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport type { DevHostModuleV1 } from \"./contract.js\";\n\nexport type LoadedDevHostModuleV1 = {\n packageRoot: string;\n packageVersion: string;\n module: DevHostModuleV1;\n};\n\ntype DevHostPackageJson = {\n name?: string;\n version?: string;\n};\n\nexport async function loadProjectDevHost(\n projectRoot: string,\n): Promise<LoadedDevHostModuleV1> {\n const requireFromProject = createRequire(path.join(projectRoot, \"package.json\"));\n let packageJsonPath: string;\n let entryPath: string;\n\n try {\n packageJsonPath = requireFromProject.resolve(\n \"@dreamboard-games/dev-host/package.json\",\n );\n entryPath = requireFromProject.resolve(\"@dreamboard-games/dev-host\");\n } catch (error) {\n throw new Error(\n \"Install @dreamboard-games/dev-host in this workspace before running dreamboard dev or browser tests.\",\n { cause: error },\n );\n }\n\n const packageRoot = path.dirname(packageJsonPath);\n if (!isPathInside(packageRoot, entryPath)) {\n throw new Error(\n \"@dreamboard-games/dev-host resolved outside its installed package.\",\n );\n }\n\n const packageJson = requireFromProject(packageJsonPath) as DevHostPackageJson;\n if (\n packageJson.name !== \"@dreamboard-games/dev-host\" ||\n typeof packageJson.version !== \"string\" ||\n packageJson.version.length === 0\n ) {\n throw new Error(\"Installed @dreamboard-games/dev-host metadata is invalid.\");\n }\n\n const loaded = (await import(pathToFileURL(entryPath).href)) as Partial<\n DevHostModuleV1\n >;\n if (loaded.protocolVersion !== 1 || typeof loaded.start !== \"function\") {\n throw new Error(\n \"Installed @dreamboard-games/dev-host does not expose DevHostModuleV1.\",\n );\n }\n\n return {\n packageRoot,\n packageVersion: packageJson.version,\n module: {\n protocolVersion: loaded.protocolVersion,\n start: loaded.start,\n },\n };\n}\n\nfunction isPathInside(parent: string, candidate: string): boolean {\n const relativePath = path.relative(parent, candidate);\n return (\n relativePath === \"\" ||\n (!relativePath.startsWith(\"..\") && !path.isAbsolute(relativePath))\n );\n}\n","import { createUserSessionManager } from \"../../auth/user-session-manager.js\";\nimport { resolveLocalHarnessAccessToken } from \"../../config/local-harness-auth.js\";\nimport type { ResolvedConfig } from \"../../types.js\";\nimport type { DevHostPlatform, DevHostResolvedBearer } from \"./contract.js\";\n\nexport function createCliDevHostPlatform(\n config: ResolvedConfig,\n): DevHostPlatform {\n return {\n resolveBearer: () => resolveDevHostBearer(config),\n };\n}\n\nexport async function resolveDevHostBearer(\n config: ResolvedConfig,\n): Promise<DevHostResolvedBearer> {\n const localHarnessToken = resolveLocalHarnessAccessToken(config);\n if (localHarnessToken) {\n return { kind: \"ok\", token: localHarnessToken };\n }\n\n if (config.refreshTokenSource !== \"global\") {\n return { kind: \"ok\", token: config.authToken ?? null };\n }\n\n if (!config.refreshToken) {\n return {\n kind: \"permanent_invalid\",\n message:\n \"Stored Dreamboard session is expired or invalid. Run `dreamboard auth login` to authenticate again.\",\n };\n }\n\n const resolved = await createUserSessionManager(config).resolveApiToken();\n return { kind: \"ok\", token: resolved?.token ?? null };\n}\n","import type { Project } from \"@dreamboard-games/api-client\";\nimport { updateProjectState } from \"../../config/project-config.js\";\nimport type { ProjectConfig, ResolvedConfig } from \"../../types.js\";\nimport {\n ensureProjectSdk,\n loadRemoteProjectIdentity,\n type RemoteProjectIdentity,\n} from \"../api/index.js\";\n\nexport type ResolvedRemoteProject = {\n identity: RemoteProjectIdentity;\n project: Project;\n projectConfig: ProjectConfig;\n};\n\nexport async function resolveRemoteProject(options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n config: Pick<ResolvedConfig, \"apiBaseUrl\" | \"webBaseUrl\">;\n updateAlias?: boolean;\n}): Promise<ResolvedRemoteProject> {\n const identity = await loadRemoteProjectIdentity();\n const project = await ensureProjectSdk({\n projectId: options.projectConfig.projectId,\n slug: options.projectConfig.slug,\n updateAlias: options.updateAlias,\n });\n const nextProjectConfig: ProjectConfig = {\n ...options.projectConfig,\n slug: project.slug,\n deploymentId: identity.deploymentId,\n ownerScopeId: identity.ownerScopeId,\n bindingKey: identity.bindingKey,\n remoteHeadDigest: project.head?.revisionDigest,\n apiBaseUrl: options.config.apiBaseUrl,\n webBaseUrl: options.config.webBaseUrl,\n };\n\n await updateProjectState(options.projectRoot, nextProjectConfig);\n\n return {\n identity,\n project,\n projectConfig: nextProjectConfig,\n };\n}\n","import { MANIFEST_TYPECHECK_CONFIG_FILE } from \"../../constants.js\";\nimport { spawn } from \"node:child_process\";\nimport { lstat } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\n\nexport type LocalTypecheckResult = {\n success: boolean;\n output: string;\n skipped?: boolean;\n};\n\ntype TypecheckRunner = {\n command: string;\n argsPrefix: string[];\n};\n\nconst TYPESCRIPT_BIN_PATH_SEGMENTS = [\n \"node_modules\",\n \"typescript\",\n \"bin\",\n \"tsc\",\n];\n\n// TypeScript shipped with the CLI package itself; used as a fallback when the\n// user's workspace does not provide its own `typescript` install.\nconst CLI_PACKAGE_TYPESCRIPT_CLI = resolveCliPackageTypescriptCli();\n\nfunction resolveCliPackageTypescriptCli(): string | null {\n try {\n const require = createRequire(import.meta.url);\n return require.resolve(\"typescript/bin/tsc\");\n } catch {\n return null;\n }\n}\n\nfunction getProjectNodeModules(projectRoot: string): string {\n return path.join(projectRoot, \"node_modules\");\n}\n\nfunction getProjectTypescriptCli(projectRoot: string): string {\n return path.join(projectRoot, ...TYPESCRIPT_BIN_PATH_SEGMENTS);\n}\n\nasync function pathExists(targetPath: string): Promise<boolean> {\n try {\n await lstat(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function ensureTypecheckDependencies(\n projectRoot: string,\n): Promise<string | null> {\n if (await pathExists(getProjectNodeModules(projectRoot))) {\n return null;\n }\n\n return `Skipping local typecheck: workspace dependencies are not installed at ${getProjectNodeModules(projectRoot)}. Run \\`pnpm install --frozen-lockfile\\` or recreate the workspace with \\`dreamboard project create\\` / \\`dreamboard project clone\\` first.`;\n}\n\nasync function resolveTypecheckRunner(\n projectRoot: string,\n): Promise<TypecheckRunner | null> {\n const localTypescriptCli = getProjectTypescriptCli(projectRoot);\n if (await pathExists(localTypescriptCli)) {\n return {\n command: process.execPath,\n argsPrefix: [localTypescriptCli],\n };\n }\n\n if (\n CLI_PACKAGE_TYPESCRIPT_CLI &&\n (await pathExists(CLI_PACKAGE_TYPESCRIPT_CLI))\n ) {\n return {\n command: process.execPath,\n argsPrefix: [CLI_PACKAGE_TYPESCRIPT_CLI],\n };\n }\n\n const globalTscAvailable = await new Promise<boolean>((resolve) => {\n const child = spawn(\"tsc\", [\"--version\"], {\n env: process.env,\n stdio: \"ignore\",\n });\n\n child.on(\"error\", () => {\n resolve(false);\n });\n child.on(\"close\", (code) => {\n resolve(code === 0);\n });\n });\n\n if (!globalTscAvailable) {\n return null;\n }\n\n return {\n command: \"tsc\",\n argsPrefix: [],\n };\n}\n\nasync function runTypecheckProject(\n runner: TypecheckRunner,\n projectRoot: string,\n projectPath: string,\n): Promise<LocalTypecheckResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(\n runner.command,\n [...runner.argsPrefix, \"--noEmit\", \"-p\", projectPath],\n {\n cwd: projectRoot,\n env: process.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n\n let stdout = \"\";\n let stderr = \"\";\n\n child.stdout.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.on(\"error\", (error) => {\n reject(new Error(`Failed to start local typecheck. ${error.message}`));\n });\n child.on(\"close\", (code) => {\n const output = [stdout, stderr].filter(Boolean).join(\"\\n\").trim();\n resolve({\n success: code === 0,\n output,\n });\n });\n });\n}\n\nexport async function runLocalTypecheck(\n projectRoot: string,\n): Promise<LocalTypecheckResult> {\n const dependencySkipReason = await ensureTypecheckDependencies(projectRoot);\n if (dependencySkipReason) {\n return {\n success: true,\n skipped: true,\n output: dependencySkipReason,\n };\n }\n\n const runner = await resolveTypecheckRunner(projectRoot);\n if (!runner) {\n return {\n success: true,\n skipped: true,\n output:\n \"Skipping local typecheck: TypeScript CLI was not found in workspace dependencies or on PATH.\",\n };\n }\n\n // The three projects are independent (no cross-project references), so\n // checking them in parallel roughly halves wall-clock time without changing\n // correctness. The slowest project (typically `ui/tsconfig.json`) bounds the\n // total cost.\n const results = await Promise.all(\n [\n MANIFEST_TYPECHECK_CONFIG_FILE,\n \"app/tsconfig.json\",\n \"ui/tsconfig.json\",\n ].map((projectPath) =>\n runTypecheckProject(runner, projectRoot, projectPath),\n ),\n );\n\n const firstFailure = results.find((result) => !result.success);\n if (firstFailure) {\n return firstFailure;\n }\n\n return {\n success: true,\n output: \"\",\n };\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { LocalMaintainerRegistryConfig } from \"../../types.js\";\nimport { resolveCliRepoRoot } from \"../../utils/repo-root.js\";\nimport {\n LOCAL_REGISTRY_URL,\n didLocalMaintainerSnapshotChange,\n getLocalMaintainerNpmrcContent,\n isLocalMaintainerRegistryEnabled,\n isLocalMaintainerRegistryUrl,\n shortHash,\n} from \"./local-maintainer-registry-shared.js\";\n\nexport {\n didLocalMaintainerSnapshotChange,\n getLocalMaintainerNpmrcContent,\n isLocalMaintainerRegistryEnabled,\n isLocalMaintainerRegistryUrl,\n};\n\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\n\nfunction getCliPackageRoot(): string {\n try {\n return path.join(\n resolveCliRepoRoot(import.meta.url),\n \"apps\",\n \"dreamboard-cli\",\n );\n } catch {\n return resolveInstalledCliPackageRoot(MODULE_DIR);\n }\n}\n\nfunction resolveInstalledCliPackageRoot(moduleDir: string): string {\n let current = moduleDir;\n while (true) {\n const packageJsonPath = path.join(current, \"package.json\");\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(\n readFileSync(packageJsonPath, \"utf8\"),\n ) as { name?: unknown };\n if (\n packageJson.name === \"@dreamboard-games/cli\" ||\n packageJson.name === \"dreamboard\" ||\n packageJson.name === \"dreamboard-cli\"\n ) {\n return current;\n }\n } catch {\n // Keep walking upward; a malformed parent package should not hide the\n // installed CLI package root.\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n return moduleDir;\n }\n current = parent;\n }\n}\n\nfunction getScriptInvocation(): {\n command: string;\n args: string[];\n attemptedCommand: string;\n cwd: string;\n} {\n const cliPackageRoot = getCliPackageRoot();\n const scriptPath = getLocalMaintainerScriptPath(cliPackageRoot);\n if (!existsSync(scriptPath)) {\n throw new Error(\n [\n \"Dreamboard local maintainer registry support is only available from a source checkout.\",\n `Expected helper script at ${scriptPath}.`,\n ].join(\" \"),\n );\n }\n\n const command = process.platform === \"win32\" ? \"pnpm.cmd\" : \"pnpm\";\n const args = [\"exec\", \"tsx\", scriptPath];\n return {\n command,\n args,\n attemptedCommand: `${command} ${args.join(\" \")}`,\n cwd: cliPackageRoot,\n };\n}\n\nfunction getLocalMaintainerScriptPath(cliPackageRoot: string): string {\n return path.join(cliPackageRoot, \"scripts\", \"local-maintainer-registry.ts\");\n}\n\nfunction isInstalledCliPackageRoot(cliPackageRoot: string): boolean {\n return cliPackageRoot.split(path.sep).includes(\"node_modules\");\n}\n\nfunction shouldSkipLocalMaintainerHelper(): boolean {\n const cliPackageRoot = getCliPackageRoot();\n const scriptPath = getLocalMaintainerScriptPath(cliPackageRoot);\n return !existsSync(scriptPath) && isInstalledCliPackageRoot(cliPackageRoot);\n}\n\nexport function buildInstalledCliLocalMaintainerSnapshot(\n packageJson: { dependencies?: Record<string, unknown> },\n registryUrl: string = LOCAL_REGISTRY_URL,\n): LocalMaintainerRegistryConfig | null {\n const sdkVersion = packageJson.dependencies?.[\"@dreamboard-games/sdk\"];\n if (typeof sdkVersion !== \"string\" || !sdkVersion.includes(\"-local.\")) {\n return null;\n }\n\n return {\n registryUrl,\n snapshotId: shortHash(sdkVersion),\n fingerprint: shortHash(sdkVersion),\n publishedAt: \"\",\n packages: {\n \"@dreamboard-games/sdk\": sdkVersion,\n },\n };\n}\n\nexport function readInstalledCliLocalMaintainerSnapshot(): LocalMaintainerRegistryConfig | null {\n const cliPackageRoot = getCliPackageRoot();\n if (!isInstalledCliPackageRoot(cliPackageRoot)) {\n return null;\n }\n\n const packageJsonPath = path.join(cliPackageRoot, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return null;\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n dependencies?: Record<string, unknown>;\n };\n return buildInstalledCliLocalMaintainerSnapshot(packageJson);\n}\n\nfunction buildScriptSetupError(options: {\n attemptedCommand: string;\n message: string;\n stderr?: string;\n}): Error {\n return new Error(\n [\n \"Dreamboard local maintainer registry support requires the source-checkout CLI tooling.\",\n options.message,\n `Attempted command: ${options.attemptedCommand}`,\n options.stderr?.trim() ? `stderr:\\n${options.stderr.trim()}` : null,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n );\n}\n\nfunction parseJsonPayload<T>(output: string): T {\n const payload = output\n .trim()\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .reverse()\n .find(\n (line) => line === \"null\" || line.startsWith(\"{\") || line.startsWith(\"[\"),\n );\n\n if (!payload) {\n throw new Error(\"completed without returning a JSON payload\");\n }\n\n return JSON.parse(payload) as T;\n}\n\nasync function runLocalMaintainerScript<T>(args: string[]): Promise<T> {\n const invocation = getScriptInvocation();\n\n return new Promise<T>((resolve, reject) => {\n const child = spawn(invocation.command, [...invocation.args, ...args], {\n cwd: invocation.cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: process.env,\n });\n let stdout = \"\";\n let stderr = \"\";\n\n child.stdout.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.on(\"error\", (error) => {\n const errnoError = error as NodeJS.ErrnoException;\n if (errnoError.code === \"ENOENT\") {\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message:\n \"`pnpm` was not found on PATH, so the source-checkout local maintainer helper could not run.\",\n }),\n );\n return;\n }\n reject(error);\n });\n child.on(\"close\", (code) => {\n if (code !== 0) {\n const missingTsx =\n stderr.includes('Command \"tsx\" not found') ||\n stderr.includes(\"tsx: command not found\") ||\n stderr.includes(\"tsx: not found\");\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message: missingTsx\n ? \"`tsx` is not available for the source-checkout CLI package.\"\n : \"The source-checkout local maintainer helper failed.\",\n stderr,\n }),\n );\n return;\n }\n\n const trimmedStdout = stdout.trim();\n if (!trimmedStdout) {\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message:\n \"The source-checkout local maintainer helper completed without returning JSON.\",\n stderr,\n }),\n );\n return;\n }\n\n try {\n resolve(parseJsonPayload<T>(trimmedStdout));\n } catch (error) {\n reject(\n buildScriptSetupError({\n attemptedCommand: invocation.attemptedCommand,\n message: `Failed to parse JSON from the source-checkout local maintainer helper: ${\n error instanceof Error ? error.message : String(error)\n }`,\n stderr: [stderr.trim(), trimmedStdout].filter(Boolean).join(\"\\n\"),\n }),\n );\n }\n });\n });\n}\n\nexport async function ensureLocalMaintainerSnapshot(\n apiBaseUrl: string,\n): Promise<LocalMaintainerRegistryConfig | null> {\n if (!isLocalMaintainerRegistryEnabled(apiBaseUrl)) {\n return null;\n }\n if (shouldSkipLocalMaintainerHelper()) {\n return readInstalledCliLocalMaintainerSnapshot();\n }\n\n return runLocalMaintainerScript<LocalMaintainerRegistryConfig | null>([\n \"ensure-snapshot\",\n \"--api-base-url\",\n apiBaseUrl,\n ]);\n}\n\nexport async function readWorkspaceLocalMaintainerRegistry(\n projectRoot: string,\n fallbackRegistryUrl: string = LOCAL_REGISTRY_URL,\n): Promise<LocalMaintainerRegistryConfig | null> {\n if (shouldSkipLocalMaintainerHelper()) {\n return null;\n }\n return runLocalMaintainerScript<LocalMaintainerRegistryConfig | null>([\n \"read-workspace\",\n \"--project-root\",\n projectRoot,\n \"--fallback-registry-url\",\n fallbackRegistryUrl,\n ]);\n}\n","import path from \"node:path\";\nimport type { ProjectConfig } from \"../../types.js\";\nimport { readJsonFile, readTextFileIfExists } from \"../../utils/fs.js\";\n\ntype PackageJsonWithDeps = {\n packageManager?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n pnpm?: {\n overrides?: Record<string, unknown>;\n [key: string]: unknown;\n };\n};\n\nexport type SourceDependencyProfile = {\n kind: \"npm-registry\";\n packageManager?: string;\n dreamboardRegistryUrl?: string;\n localSnapshotId?: string;\n packages: Record<string, string>;\n};\n\ntype DependencyProblem = {\n location: string;\n packageName: string;\n specifier: string;\n};\n\ntype LegacyDependencyProblem = {\n location: string;\n packageName: string;\n};\n\nconst DEPENDENCY_FIELDS = [\n \"dependencies\",\n \"devDependencies\",\n \"optionalDependencies\",\n \"peerDependencies\",\n] as const;\n\nconst UNPORTABLE_SPECIFIER_PATTERN = /^(file|link|portal|workspace):/;\n\nexport async function buildSourceDependencyProfile(options: {\n projectRoot: string;\n projectConfig?: ProjectConfig;\n}): Promise<SourceDependencyProfile> {\n const packageJson = await readProjectPackageJson(options.projectRoot);\n const packages = collectDreamboardPackageSpecifiers(packageJson);\n const hasLocalSnapshotPackage = Object.values(packages).some((value) =>\n value.includes(\"-local.\"),\n );\n const localMaintainerRegistry = hasLocalSnapshotPackage\n ? options.projectConfig?.localMaintainerRegistry\n : undefined;\n return {\n kind: \"npm-registry\",\n packageManager: packageJson.packageManager,\n dreamboardRegistryUrl:\n (await readDreamboardRegistryFromNpmrc(options.projectRoot)) ??\n localMaintainerRegistry?.registryUrl,\n localSnapshotId: localMaintainerRegistry?.snapshotId,\n packages,\n };\n}\n\nexport async function assertCompilerPortableDependencies(options: {\n projectRoot: string;\n projectConfig?: ProjectConfig;\n}): Promise<SourceDependencyProfile> {\n const packageJson = await readProjectPackageJson(options.projectRoot);\n const legacyProblems = collectLegacyDreamboardSpecifiers(packageJson);\n if (legacyProblems.length > 0) {\n throwLegacyDreamboardPackageError(legacyProblems);\n }\n\n const problems = collectUnportableDreamboardSpecifiers(packageJson);\n if (problems.length > 0) {\n const details = problems\n .map(\n (problem) =>\n `${problem.location} ${problem.packageName} -> ${problem.specifier}`,\n )\n .join(\"; \");\n throw new Error(\n [\n \"Compiler-bound workspaces must install Dreamboard packages from a registry.\",\n `Found unportable Dreamboard dependency specifier(s): ${details}.`,\n \"Use a workspace created or cloned with the current Dreamboard CLI so @dreamboard-games/* and dreamboard versions are registry-pinned before building.\",\n ].join(\" \"),\n );\n }\n\n const profile = await buildSourceDependencyProfile(options);\n const hasLocalSnapshotPackage = Object.values(profile.packages).some(\n (value) => value.includes(\"-local.\"),\n );\n if (hasLocalSnapshotPackage && !profile.dreamboardRegistryUrl) {\n throw new Error(\n \"This workspace references local Dreamboard snapshot versions but has no @dreamboard registry configured. Recreate or reclone the workspace with the local registry configuration before building.\",\n );\n }\n\n return profile;\n}\n\nexport async function assertReleaseEnvironmentPortableDependencies(options: {\n projectRoot: string;\n projectConfig?: ProjectConfig;\n environment: string;\n}): Promise<SourceDependencyProfile> {\n const packageJson = await readProjectPackageJson(options.projectRoot);\n const legacyProblems = collectLegacyDreamboardSpecifiers(packageJson);\n if (legacyProblems.length > 0) {\n throwLegacyDreamboardPackageError(legacyProblems);\n }\n\n const profile = await buildSourceDependencyProfile(options);\n if (!isReleaseEnvironment(options.environment)) {\n return profile;\n }\n\n const localPackages = Object.entries(profile.packages).filter(([, version]) =>\n version.includes(\"-local.\"),\n );\n const localRegistryUrl = isLocalRegistryUrl(profile.dreamboardRegistryUrl)\n ? profile.dreamboardRegistryUrl\n : undefined;\n\n if (localPackages.length === 0 && !localRegistryUrl) {\n return profile;\n }\n\n const packageDetails = localPackages\n .map(([name, version]) => `${name}@${version}`)\n .join(\", \");\n const registryDetails = localRegistryUrl\n ? `local registry ${localRegistryUrl}`\n : null;\n const details = [packageDetails || null, registryDetails]\n .filter(Boolean)\n .join(\"; \");\n\n throw new Error(\n [\n `The ${options.environment} environment does not support local Dreamboard package snapshots.`,\n `Found ${details}.`,\n \"Publish a public alpha package, repin the workspace to that exact version, and rerun the command.\",\n ].join(\" \"),\n );\n}\n\nasync function readProjectPackageJson(\n projectRoot: string,\n): Promise<PackageJsonWithDeps> {\n return readJsonFile<PackageJsonWithDeps>(\n path.join(projectRoot, \"package.json\"),\n );\n}\n\nfunction collectDreamboardPackageSpecifiers(\n packageJson: PackageJsonWithDeps,\n): Record<string, string> {\n const packages: Record<string, string> = {};\n for (const field of DEPENDENCY_FIELDS) {\n const dependencies = packageJson[field];\n if (!dependencies) continue;\n for (const [packageName, specifier] of Object.entries(dependencies)) {\n if (isPortableDreamboardPackage(packageName)) {\n packages[packageName] = specifier;\n }\n }\n }\n\n const overrides = packageJson.pnpm?.overrides;\n if (overrides) {\n for (const [packageName, specifier] of Object.entries(overrides)) {\n if (\n isPortableDreamboardPackage(packageName) &&\n typeof specifier === \"string\" &&\n packages[packageName] === undefined\n ) {\n packages[packageName] = specifier;\n }\n }\n }\n return packages;\n}\n\nfunction collectUnportableDreamboardSpecifiers(\n packageJson: PackageJsonWithDeps,\n): DependencyProblem[] {\n const problems: DependencyProblem[] = [];\n for (const field of DEPENDENCY_FIELDS) {\n const dependencies = packageJson[field];\n if (!dependencies) continue;\n for (const [packageName, specifier] of Object.entries(dependencies)) {\n if (\n isPortableDreamboardPackage(packageName) &&\n UNPORTABLE_SPECIFIER_PATTERN.test(specifier)\n ) {\n problems.push({ location: field, packageName, specifier });\n }\n }\n }\n\n const overrides = packageJson.pnpm?.overrides;\n if (overrides) {\n for (const [packageName, specifier] of Object.entries(overrides)) {\n if (\n isPortableDreamboardPackage(packageName) &&\n typeof specifier === \"string\" &&\n UNPORTABLE_SPECIFIER_PATTERN.test(specifier)\n ) {\n problems.push({\n location: \"pnpm.overrides\",\n packageName,\n specifier,\n });\n }\n }\n }\n return problems;\n}\n\nfunction collectLegacyDreamboardSpecifiers(\n packageJson: PackageJsonWithDeps,\n): LegacyDependencyProblem[] {\n const problems: LegacyDependencyProblem[] = [];\n for (const field of DEPENDENCY_FIELDS) {\n const dependencies = packageJson[field];\n if (!dependencies) continue;\n for (const packageName of Object.keys(dependencies)) {\n if (isLegacyDreamboardPackage(packageName)) {\n problems.push({ location: field, packageName });\n }\n }\n }\n\n const overrides = packageJson.pnpm?.overrides;\n if (overrides) {\n for (const packageName of Object.keys(overrides)) {\n if (isLegacyDreamboardPackage(packageName)) {\n problems.push({ location: \"pnpm.overrides\", packageName });\n }\n }\n }\n return problems;\n}\n\nfunction throwLegacyDreamboardPackageError(\n problems: LegacyDependencyProblem[],\n): never {\n const details = problems\n .map((problem) => `${problem.location} ${problem.packageName}`)\n .join(\"; \");\n throw new Error(\n [\n \"Legacy @dreamboard/* package dependencies are no longer supported in compiler-bound workspaces.\",\n `Found ${details}.`,\n \"Repin to the public @dreamboard-games/* packages and rerun the command.\",\n ].join(\" \"),\n );\n}\n\nfunction isPortableDreamboardPackage(packageName: string): boolean {\n return (\n packageName === \"dreamboard\" || packageName.startsWith(\"@dreamboard-games/\")\n );\n}\n\nfunction isLegacyDreamboardPackage(packageName: string): boolean {\n return packageName.startsWith(\"@dreamboard/\");\n}\n\nfunction isReleaseEnvironment(environment: string): boolean {\n return environment === \"staging\" || environment === \"prod\";\n}\n\nfunction isLocalRegistryUrl(rawUrl: string | undefined): boolean {\n if (!rawUrl) return false;\n try {\n const url = new URL(rawUrl);\n return (\n url.hostname === \"localhost\" ||\n url.hostname === \"127.0.0.1\" ||\n url.hostname === \"::1\" ||\n url.hostname.endsWith(\".local\")\n );\n } catch {\n return /localhost|127\\.0\\.0\\.1|\\.local\\b/.test(rawUrl);\n }\n}\n\nasync function readDreamboardRegistryFromNpmrc(\n projectRoot: string,\n): Promise<string | undefined> {\n const npmrc = await readTextFileIfExists(path.join(projectRoot, \".npmrc\"));\n if (!npmrc) return undefined;\n for (const line of npmrc.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed.startsWith(\"@dreamboard-games:registry=\")) continue;\n return (\n trimmed.slice(\"@dreamboard-games:registry=\".length).trim() || undefined\n );\n }\n return undefined;\n}\n","import path from \"node:path\";\nimport { importTypeScriptModule } from \"../../utils/ts-module-loader.js\";\n\nconst GAME_CONTRACT_ENTRY_PATH = path.join(\"app\", \"game-contract.ts\");\n\nfunction normalizeErrorMessage(error: unknown): string {\n const rawMessage =\n error instanceof Error ? error.message : String(error ?? \"Unknown error\");\n return (\n rawMessage\n .split(\"\\n\")\n .map((line) => line.trim())\n .find(Boolean)\n ?.replace(/^Error:\\s*/u, \"\") ?? \"Unknown error\"\n );\n}\n\nfunction isManifestScopedIdBrandingError(message: string): boolean {\n return (\n message.includes(\"defineGameContract:\") &&\n message.includes(\"manifest-scoped\") &&\n (message.includes(\"uses a raw z.string()\") ||\n message.includes(\"uses z.array(z.string())\"))\n );\n}\n\nexport async function assertReducerContractPreflight(\n projectRoot: string,\n): Promise<void> {\n const entryPath = path.join(projectRoot, GAME_CONTRACT_ENTRY_PATH);\n\n try {\n await importTypeScriptModule(entryPath);\n } catch (error) {\n const message = normalizeErrorMessage(error);\n if (isManifestScopedIdBrandingError(message)) {\n throw new Error(\n [\n `Dreamboard could not validate \\`${GAME_CONTRACT_ENTRY_PATH}\\`.`,\n \"This happens because a state field name looks like a manifest-scoped id, but the schema uses a plain string instead of the manifest-backed id schema.\",\n \"Workaround: use `gameContract.schemas.<id>` (or `manifest.ids.<id>`) for manifest ids. If the field is intentionally free-form text, rename it so it does not look like a manifest id field.\",\n `Original error: ${message}`,\n ].join(\" \"),\n );\n }\n\n throw new Error(\n [\n `Dreamboard could not validate \\`${GAME_CONTRACT_ENTRY_PATH}\\`.`,\n \"Fix the authored reducer contract module so it can be imported locally, then rerun the command.\",\n `Original error: ${message}`,\n ].join(\" \"),\n );\n }\n}\n","import path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport type {\n GameTopologyManifest,\n SetupProfileSpec,\n} from \"@dreamboard-games/sdk/types\";\nimport { z } from \"zod\";\nimport { importTypeScriptModule } from \"../../utils/ts-module-loader.js\";\n\nnamespace Wire {\n export type JsonValue =\n | null\n | boolean\n | number\n | string\n | JsonValue[]\n | { [key: string]: JsonValue };\n export type ReducerSessionState = Record<string, unknown>;\n export type SeatProjection = { view: unknown };\n export type SeatProjectionBundle = {\n seats?: Record<string, SeatProjection | undefined>;\n };\n}\n\n// Opt in to SDK authoring warnings (e.g. concrete dependent-choice defaults).\n// Trusted reducer code cannot read process.env, so the SDK gates authoring\n// warnings on this host-set global instead.\n(globalThis as Record<string, unknown>).__DREAMBOARD_AUTHORING_WARNINGS__ =\n true;\n\n/**\n * Path to the reducer bundle entry, relative to the project root. Matches\n * the scaffold produced by `dreamboard new`.\n */\nconst REDUCER_BUNDLE_ENTRY_PATH = path.join(\"app\", \"index.ts\");\n\n/**\n * Deterministic rng seed used to drive the reducer during preflight.\n * Kept stable so local preflight failures reproduce across CLI runs.\n */\nconst PREFLIGHT_RNG_SEED = 1337;\n\n/**\n * Phase of the preflight smoke test that a failure occurred in.\n */\nexport type ReducerBundleSmokePhase =\n | \"BUILD_GAME_STATE\"\n | \"INITIALIZE\"\n | \"PROJECT_SEATS\"\n | \"VALIDATE_VIEW\";\n\nexport interface ReducerBundleSmokeScenario {\n readonly setupProfileId: string | null;\n readonly playerCount: number;\n}\n\nexport interface ReducerBundleSmokeFailure {\n readonly scenario: ReducerBundleSmokeScenario;\n readonly phase: ReducerBundleSmokePhase;\n readonly playerId?: string;\n readonly headline: string;\n readonly detail?: string;\n}\n\n/**\n * Shape of a single seat's slice in `projectSeatsDynamic(...)`. Only `view`\n * is consumed by the preflight, but the full wire DTO keeps local tests\n * aligned with the canonical reducer boundary.\n */\nexport type ReducerBundleSeatProjection = Wire.SeatProjection;\n\n/** Result of calling `bundle.projectSeatsDynamic({ state, playerIds })`. */\nexport type ReducerBundleSeatProjectionBundle = Wire.SeatProjectionBundle;\n\n/**\n * Minimal structural shape the preflight needs from the authored reducer\n * bundle. Matches the subset of `createReducerBundle(game)` used by the\n * reducer runtime.\n */\nexport type ReducerBundleLike = Pick<\n {\n initialize(input: {\n table: Wire.JsonValue;\n playerIds: readonly string[];\n rngSeed?: number | null;\n setup?: unknown;\n }): unknown | Promise<unknown>;\n projectSeatsDynamic(input: {\n state: unknown;\n playerIds: readonly string[];\n }): ReducerBundleSeatProjectionBundle;\n },\n \"initialize\" | \"projectSeatsDynamic\"\n>;\n\ntype PerPlayerValidationHelpers = {\n isPerPlayer(value: unknown): boolean;\n perPlayerSchema(\n valueSchema: z.ZodTypeAny,\n options: { players: readonly string[] },\n ): z.ZodTypeAny;\n};\n\ntype ProjectReducerPreflightModules = PerPlayerValidationHelpers & {\n materializeManifestTable(input: {\n manifest: GameTopologyManifest;\n playerIds: readonly string[];\n shuffleItems<Value>(values: readonly Value[]): Value[];\n }): unknown;\n};\n\nfunction isStructuralPerPlayer(value: unknown): boolean {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as { __perPlayer?: unknown }).__perPlayer === true &&\n Array.isArray((value as { entries?: unknown }).entries)\n );\n}\n\nfunction fallbackPerPlayerSchema(\n valueSchema: z.ZodTypeAny,\n options: { players: readonly string[] },\n): z.ZodTypeAny {\n const playerSchema =\n options.players.length > 0\n ? z.enum(options.players as [string, ...string[]])\n : z.string();\n return z\n .object({\n __perPlayer: z.literal(true),\n entries: z.array(z.tuple([playerSchema, valueSchema])),\n })\n .strict();\n}\n\nasync function loadProjectReducerPreflightModules(\n projectRoot: string,\n): Promise<ProjectReducerPreflightModules> {\n const requireFromProject = createRequire(\n path.join(projectRoot, \"package.json\"),\n );\n const reducerPath = requireFromProject.resolve(\n \"@dreamboard-games/sdk/reducer\",\n );\n const reducerContractPath = requireFromProject.resolve(\n \"@dreamboard-games/sdk/reducer-contract\",\n );\n const [reducerModule, reducerContractModule] = (await Promise.all([\n import(pathToFileURL(reducerPath).href),\n import(pathToFileURL(reducerContractPath).href),\n ])) as [\n Partial<PerPlayerValidationHelpers>,\n { materializeManifestTable?: unknown },\n ];\n\n if (\n typeof reducerModule.isPerPlayer !== \"function\" ||\n typeof reducerModule.perPlayerSchema !== \"function\" ||\n typeof reducerContractModule.materializeManifestTable !== \"function\"\n ) {\n throw new Error(\n \"Installed @dreamboard-games/sdk does not expose the reducer preflight helpers required by this CLI.\",\n );\n }\n\n return {\n isPerPlayer: reducerModule.isPerPlayer,\n perPlayerSchema: reducerModule.perPlayerSchema,\n materializeManifestTable:\n reducerContractModule.materializeManifestTable as ProjectReducerPreflightModules[\"materializeManifestTable\"],\n };\n}\n\nfunction buildPlayerIds(playerCount: number): string[] {\n const ids: string[] = [];\n for (let index = 1; index <= playerCount; index += 1) {\n ids.push(`player-${index}`);\n }\n return ids;\n}\n\n/**\n * Build the matrix of scenarios to drive. Exported for tests so we can\n * assert scenario generation without loading a full reducer bundle.\n */\nexport function buildScenarios(\n manifest: GameTopologyManifest,\n): ReducerBundleSmokeScenario[] {\n const rawCounts = [\n manifest.players?.minPlayers,\n manifest.players?.maxPlayers,\n ].filter(\n (count): count is number =>\n typeof count === \"number\" && Number.isFinite(count) && count > 0,\n );\n const playerCounts = Array.from(new Set(rawCounts));\n if (playerCounts.length === 0) {\n return [];\n }\n const profiles: SetupProfileSpec[] = manifest.setupProfiles ?? [];\n const profileIds: Array<string | null> =\n profiles.length > 0 ? profiles.map((profile) => profile.id) : [null];\n\n const scenarios: ReducerBundleSmokeScenario[] = [];\n const seen = new Set<string>();\n for (const profileId of profileIds) {\n for (const count of playerCounts) {\n const key = `${profileId ?? \"<default>\"}:${count}`;\n if (seen.has(key)) continue;\n seen.add(key);\n scenarios.push({ setupProfileId: profileId, playerCount: count });\n }\n }\n return scenarios;\n}\n\nfunction describeScenario(scenario: ReducerBundleSmokeScenario): string {\n const profileDesc = scenario.setupProfileId\n ? `setup profile '${scenario.setupProfileId}'`\n : \"no setup profile\";\n return `${profileDesc}, ${scenario.playerCount} player${\n scenario.playerCount === 1 ? \"\" : \"s\"\n }`;\n}\n\nfunction summarizeError(error: unknown): { headline: string; detail?: string } {\n if (error instanceof Error) {\n const firstLine =\n error.message\n .split(\"\\n\")\n .map((line) => line.trim())\n .find((line) => line.length > 0) ?? \"Unknown failure\";\n const detail =\n error.stack && error.stack !== error.message ? error.stack : undefined;\n return { headline: firstLine, detail };\n }\n return { headline: String(error ?? \"Unknown failure\") };\n}\n\n/**\n * Walk `view` recursively and, for every embedded `PerPlayer<T>` shape,\n * assert its seat list matches `expectedPlayerIds` using\n * `perPlayerSchema({ players })`. Returns `null` on success, or a headline\n * describing the first mismatch.\n *\n * This catches the class of bug where an author returns a `PerPlayer<T>`\n * that was built from the wrong seat list (e.g. a manifest-derived\n * `maxPlayers` literal union) while the runtime session has a different\n * number of seats. The Zod bound schema produces an identical error shape\n * to the one the backend raises in production so authors see the same\n * diagnostic locally.\n */\nexport function assertViewPerPlayerSeatsValid(\n view: unknown,\n expectedPlayerIds: readonly string[],\n helpers: PerPlayerValidationHelpers = {\n isPerPlayer: isStructuralPerPlayer,\n perPlayerSchema: fallbackPerPlayerSchema,\n },\n breadcrumb: string[] = [],\n): string | null {\n if (view === null || view === undefined) {\n return null;\n }\n\n if (helpers.isPerPlayer(view)) {\n const schema = helpers.perPlayerSchema(z.unknown(), {\n players: expectedPlayerIds as never,\n });\n const result = schema.safeParse(view);\n if (!result.success) {\n const firstIssue = result.error.issues[0];\n const location =\n breadcrumb.length > 0 ? ` at view.${breadcrumb.join(\".\")}` : \"\";\n const message = firstIssue?.message ?? \"PerPlayer seat mismatch\";\n return `PerPlayer seat mismatch${location}: ${message}`;\n }\n return null;\n }\n\n if (Array.isArray(view)) {\n for (let index = 0; index < view.length; index += 1) {\n const result = assertViewPerPlayerSeatsValid(\n view[index],\n expectedPlayerIds,\n helpers,\n [...breadcrumb, `[${index}]`],\n );\n if (result) return result;\n }\n return null;\n }\n\n if (typeof view === \"object\") {\n for (const [key, value] of Object.entries(\n view as Record<string, unknown>,\n )) {\n const result = assertViewPerPlayerSeatsValid(\n value,\n expectedPlayerIds,\n helpers,\n [...breadcrumb, key],\n );\n if (result) return result;\n }\n return null;\n }\n\n return null;\n}\n\nfunction identityShuffle<Value>(values: readonly Value[]): Value[] {\n return [...values];\n}\n\n/**\n * Drive an already-loaded reducer bundle through the provided scenarios.\n * Shared between the full `runReducerBundleSmoke` entrypoint and the\n * unit tests, which feed a fake bundle directly.\n *\n * For each (setup profile × player count) scenario this:\n *\n * 1. materializes an initial table via `materializeManifestTable`,\n * 2. calls `bundle.initialize({ table, playerIds, rngSeed, setup })`,\n * 3. calls `bundle.projectSeatsDynamic({ state, playerIds })` once, and\n * 4. validates any embedded `PerPlayer<T>` views match the runtime seat\n * list using `perPlayerSchema({ players: playerIds })`.\n *\n * Failures are collected instead of thrown so authors get the full list\n * of broken scenarios in one preflight pass.\n */\nexport async function driveReducerBundleThroughScenarios(options: {\n manifest: GameTopologyManifest;\n bundle: ReducerBundleLike;\n scenarios: readonly ReducerBundleSmokeScenario[];\n preflightModules: ProjectReducerPreflightModules;\n rngSeed?: number;\n}): Promise<ReducerBundleSmokeFailure[]> {\n const { manifest, bundle, scenarios, preflightModules } = options;\n const rngSeed = options.rngSeed ?? PREFLIGHT_RNG_SEED;\n\n const failures: ReducerBundleSmokeFailure[] = [];\n const tableCache = new Map<\n number,\n { table: unknown; playerIds: string[] } | { error: unknown }\n >();\n\n for (const scenario of scenarios) {\n let tableEntry = tableCache.get(scenario.playerCount);\n if (!tableEntry) {\n try {\n const playerIds = buildPlayerIds(scenario.playerCount);\n // JSON-roundtrip the materialized table to mirror the backend wire\n // boundary: real flows serialize the table over HTTP, which drops\n // explicit `undefined` property values (e.g. optional card text) that\n // the bundle's strict JSON state schema would otherwise reject.\n const table: unknown = JSON.parse(\n JSON.stringify(\n preflightModules.materializeManifestTable({\n manifest,\n playerIds,\n shuffleItems: identityShuffle,\n }),\n ),\n );\n tableEntry = { table, playerIds };\n } catch (error) {\n tableEntry = { error };\n }\n tableCache.set(scenario.playerCount, tableEntry);\n }\n if (\"error\" in tableEntry) {\n const summary = summarizeError(tableEntry.error);\n failures.push({\n scenario,\n phase: \"BUILD_GAME_STATE\",\n headline: summary.headline,\n detail: summary.detail,\n });\n continue;\n }\n\n const { table, playerIds } = tableEntry;\n\n let sessionState: unknown;\n try {\n sessionState = await bundle.initialize({\n table: table as Wire.JsonValue,\n playerIds: [...playerIds],\n rngSeed,\n setup: scenario.setupProfileId\n ? { profileId: scenario.setupProfileId, optionValues: {} }\n : null,\n });\n } catch (error) {\n const summary = summarizeError(error);\n failures.push({\n scenario,\n phase: \"INITIALIZE\",\n headline: summary.headline,\n detail: summary.detail,\n });\n continue;\n }\n\n let projection: ReducerBundleSeatProjectionBundle | undefined;\n try {\n projection = bundle.projectSeatsDynamic({\n state: sessionState as Wire.ReducerSessionState,\n playerIds: [...playerIds],\n });\n } catch (error) {\n const summary = summarizeError(error);\n failures.push({\n scenario,\n phase: \"PROJECT_SEATS\",\n headline: summary.headline,\n detail: summary.detail,\n });\n continue;\n }\n\n const seats = projection?.seats ?? {};\n for (const playerId of playerIds) {\n const seat = seats[playerId];\n if (!seat) {\n failures.push({\n scenario,\n phase: \"PROJECT_SEATS\",\n playerId,\n headline: `projectSeatsDynamic() did not return an entry for seat '${playerId}'.`,\n });\n continue;\n }\n const mismatch = assertViewPerPlayerSeatsValid(\n seat.view,\n playerIds,\n preflightModules,\n );\n if (mismatch) {\n failures.push({\n scenario,\n phase: \"VALIDATE_VIEW\",\n playerId,\n headline: mismatch,\n });\n }\n }\n }\n\n return failures;\n}\n\n/**\n * Import the authored reducer bundle from `projectRoot/app/index.ts` and\n * drive it through every (setup profile × player count) scenario the\n * manifest declares. Returns the collected failures without throwing so\n * callers can decide whether to surface them.\n */\nexport async function runReducerBundleSmoke(options: {\n projectRoot: string;\n manifest: GameTopologyManifest;\n}): Promise<ReducerBundleSmokeFailure[]> {\n const { projectRoot, manifest } = options;\n const scenarios = buildScenarios(manifest);\n if (scenarios.length === 0) {\n return [];\n }\n\n const entryPath = path.join(projectRoot, REDUCER_BUNDLE_ENTRY_PATH);\n let module: { default?: ReducerBundleLike };\n try {\n module = await importTypeScriptModule<{ default?: ReducerBundleLike }>(\n entryPath,\n );\n } catch (error) {\n const summary = summarizeError(error);\n throw new Error(\n [\n `Dreamboard could not import \\`${REDUCER_BUNDLE_ENTRY_PATH}\\`.`,\n \"Fix the reducer bundle entry so it can be imported locally, then rerun the command.\",\n `Original error: ${summary.headline}`,\n ].join(\" \"),\n );\n }\n const bundle = module.default;\n if (!bundle || typeof bundle.initialize !== \"function\") {\n throw new Error(\n [\n `\\`${REDUCER_BUNDLE_ENTRY_PATH}\\` does not export a reducer bundle as its default export.`,\n \"Export `createReducerBundle(game)` from `app/index.ts` so the compile pipeline can smoke-test it.\",\n ].join(\" \"),\n );\n }\n\n const preflightModules =\n await loadProjectReducerPreflightModules(projectRoot);\n return driveReducerBundleThroughScenarios({\n manifest,\n bundle,\n scenarios,\n preflightModules,\n });\n}\n\nfunction formatFailureLines(\n failures: readonly ReducerBundleSmokeFailure[],\n): string {\n return failures\n .map((failure) => {\n const location = failure.playerId ? ` (seat ${failure.playerId})` : \"\";\n return `• [${failure.phase}] ${describeScenario(failure.scenario)}${location}: ${failure.headline}`;\n })\n .join(\"\\n\");\n}\n\n/**\n * Preflight wrapper used before build, verify, test, and dev workflows. Runs\n * `runReducerBundleSmoke` and throws an aggregated error if any scenario\n * failed so the author sees every broken seat/profile in one shot.\n *\n * The surrounding workflow already guarantees that the authored contract imports cleanly\n * (via `assertReducerContractPreflight`) and that `tsc --noEmit` is\n * green (via `runLocalTypecheck`) before this runs, so failures from\n * this step are always runtime-shaped (`initialize`/`projectSeatsDynamic` rejecting,\n * `perPlayer` seat mismatches, …) rather than static type or import\n * errors.\n */\nexport async function assertReducerBundleSmoke(options: {\n projectRoot: string;\n manifest: GameTopologyManifest;\n}): Promise<void> {\n const failures = await runReducerBundleSmoke(options);\n if (failures.length === 0) {\n return;\n }\n throw new Error(\n [\n \"Reducer bundle preflight failed.\",\n \"Fix the reported scenarios locally before building or starting dev:\",\n formatFailureLines(failures),\n ].join(\"\\n\"),\n );\n}\n","import { RULE_FILE } from \"../../constants.js\";\nimport {\n isAllowedGamePath,\n isDynamicGeneratedPath,\n} from \"./scaffold-ownership.js\";\n\n/**\n * Single definition of what belongs in an uploaded source revision, shared by\n * `dev` and `sync`. The compiler consumes the uploaded workspace as-is and\n * does not regenerate codegen outputs, so dynamic generated files (manifest\n * contract, ui-contract, framework tsconfigs) must always be included.\n */\nexport function isSourceRevisionPath(filePath: string): boolean {\n return filePath !== RULE_FILE && isAllowedGamePath(filePath);\n}\n\n/**\n * Files that must be upserted on every sync even when the local diff reports\n * them unchanged: registry configuration and regenerated codegen outputs.\n */\nexport function shouldAlwaysUpsertSourcePath(filePath: string): boolean {\n return filePath === \".npmrc\" || isDynamicGeneratedPath(filePath);\n}\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\n\nexport default defineCommand({\n meta: {\n name: \"doctor\",\n description: \"Check the local Dreamboard CLI installation\",\n },\n async run() {\n consola.success(\"Dreamboard CLI is installed.\");\n },\n});\n","import { defineCommand } from \"citty\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { parseCommitScopedCommandArgs } from \"../flags.js\";\nimport { createProjectPreviewSdk } from \"../services/api/index.js\";\nimport {\n printJsonOrSummary,\n resolveCommitScopedProjectContext,\n} from \"./commit-scoped.js\";\n\nexport default defineCommand({\n meta: {\n name: \"preview\",\n description: \"Create or reuse a preview for an exact Git commit\",\n },\n args: {\n commit: {\n type: \"string\",\n description: \"Git revision to resolve once before previewing\",\n required: true,\n },\n json: {\n type: \"boolean\",\n description: \"Print machine-readable preview JSON\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseCommitScopedCommandArgs(\"preview\", args);\n const { projectConfig, commitOid } = await resolveCommitScopedProjectContext(\n parsedArgs,\n parsedArgs.commit,\n );\n const preview = await createProjectPreviewSdk({\n projectId: projectConfig.projectId,\n commitOid,\n });\n\n printJsonOrSummary({\n json: parsedArgs.json,\n value: preview,\n summary: [\n `Preview ${preview.previewId}`,\n `status=${preview.status}`,\n `retentionRef=${preview.retentionRef}`,\n ].join(\" \"),\n });\n },\n});\n","import path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport type { GameTopologyManifest } from \"@dreamboard-games/sdk/types\";\nimport {\n resolveConfig,\n requireAuth,\n configureClient,\n} from \"../config/resolve.js\";\nimport { parseNewCommandArgs } from \"../flags.js\";\nimport { loadGlobalConfig } from \"../config/global-config.js\";\nimport { getStoredSession } from \"../config/credential-store.js\";\nimport { normalizeSlug } from \"../utils/strings.js\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport {\n ensureProjectRepositorySdk,\n ensureProjectSdk,\n loadRemoteProjectIdentity,\n pollProjectRepository,\n} from \"../services/api/index.js\";\nimport { configureWorkspaceGitOrigin } from \"../services/git/workspace-origin.js\";\nimport { materializeWorkspaceProject } from \"../services/project/materialize-workspace.js\";\nimport { ensureLocalMaintainerSnapshot } from \"../services/project/local-maintainer-registry.js\";\nimport { createUuidV7 } from \"../utils/uuid-v7.js\";\n\nconst DEFAULT_REPOSITORY_WAIT_TIMEOUT_MS = 120_000;\nconst DEFAULT_REPOSITORY_POLL_INTERVAL_MS = 1_000;\n\nfunction parsePositiveIntegerFlag(\n value: string | undefined,\n flagName: string,\n defaultValue: number,\n): number {\n if (value === undefined) {\n return defaultValue;\n }\n const parsed = Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed <= 0 || String(parsed) !== value) {\n throw new Error(`${flagName} must be a positive integer.`);\n }\n return parsed;\n}\n\nexport default defineCommand({\n meta: {\n name: \"create\",\n description: \"Create a new project and scaffold a local workspace\",\n },\n args: {\n slug: { type: \"positional\", description: \"Game slug\", required: true },\n description: {\n type: \"string\",\n description: \"Short description of the game to create\",\n required: true,\n },\n force: {\n type: \"boolean\",\n description: \"Delete existing game with the same slug before creating\",\n default: false,\n },\n \"wait-timeout-ms\": {\n type: \"string\",\n description: \"Maximum time to wait for Git repository setup\",\n },\n \"repository-poll-interval-ms\": {\n type: \"string\",\n description: \"Polling interval for Git repository setup\",\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseNewCommandArgs(args);\n const slugInput = parsedArgs.slug;\n const description = parsedArgs.description.trim();\n const repositoryWaitTimeoutMs = parsePositiveIntegerFlag(\n parsedArgs[\"wait-timeout-ms\"],\n \"--wait-timeout-ms\",\n DEFAULT_REPOSITORY_WAIT_TIMEOUT_MS,\n );\n const repositoryPollIntervalMs = parsePositiveIntegerFlag(\n parsedArgs[\"repository-poll-interval-ms\"],\n \"--repository-poll-interval-ms\",\n DEFAULT_REPOSITORY_POLL_INTERVAL_MS,\n );\n\n const normalizedSlug = normalizeSlug(slugInput);\n const projectId = createUuidV7();\n if (!normalizedSlug) {\n throw new Error(\"Slug must contain at least one alphanumeric character.\");\n }\n if (normalizedSlug !== slugInput) {\n consola.info(`Normalized slug to '${normalizedSlug}'.`);\n }\n\n const [globalConfig, storedSession] = await Promise.all([\n loadGlobalConfig(),\n getStoredSession(),\n ]);\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n undefined,\n storedSession,\n );\n requireAuth(config);\n await configureClient(config);\n const localMaintainerRegistry = await ensureLocalMaintainerSnapshot(\n config.apiBaseUrl,\n );\n\n const identity = await loadRemoteProjectIdentity();\n const project = await ensureProjectSdk({\n projectId,\n slug: normalizedSlug,\n description,\n updateAlias: Boolean(parsedArgs.force),\n });\n await ensureProjectRepositorySdk(project.projectId);\n\n consola.start(\"Setting up Git repository...\");\n const repository = await pollProjectRepository({\n projectId: project.projectId,\n timeoutMs: repositoryWaitTimeoutMs,\n intervalMs: repositoryPollIntervalMs,\n });\n if (repository.provisioningState !== \"READY\") {\n throw new Error(\n `Repository setup did not complete for ${project.projectId}: ${repository.provisioningState}${repository.errorCode ? ` (${repository.errorCode})` : \"\"}. Retry project creation after fixing the repository provisioning issue.`,\n );\n }\n consola.success(\"Git repository ready.\");\n\n const blankManifest: GameTopologyManifest = {\n players: {\n minPlayers: 2,\n maxPlayers: 4,\n optimalPlayers: 4,\n },\n cardSets: [],\n zones: [],\n boardTemplates: [],\n boards: [],\n pieceTypes: [],\n pieceSeeds: [],\n dieTypes: [],\n dieSeeds: [],\n resources: [],\n setupOptions: [],\n setupProfiles: [],\n };\n\n consola.start(\"Scaffolding local workspace...\");\n\n const targetDir = path.resolve(process.cwd(), project.slug);\n await materializeWorkspaceProject({\n targetDir,\n projectId,\n slug: project.slug,\n gameId: project.projectId,\n deploymentId: identity.deploymentId,\n ownerScopeId: identity.ownerScopeId,\n bindingKey: identity.bindingKey,\n remoteHeadDigest: project.head?.revisionDigest,\n apiBaseUrl: config.apiBaseUrl,\n webBaseUrl: config.webBaseUrl,\n manifest: blankManifest,\n ruleText: \"\",\n localMaintainerRegistry,\n });\n await configureWorkspaceGitOrigin({\n projectRoot: targetDir,\n cloneUrl: repository.cloneUrl,\n });\n\n consola.success(`Created new project in ${targetDir}`);\n consola.info(\n \"Next: edit your files, commit with Git, push to origin, then run 'dreamboard build --commit HEAD'.\",\n );\n },\n});\n","import {\n SystemGit,\n configureDreamboardGitRepository,\n} from \"@dreamboard-games/cli-core\";\n\nconst DREAMBOARD_GIT_CREDENTIAL_HELPER = \"!dreamboard auth git-credential\";\n\nexport async function configureWorkspaceGitOrigin(options: {\n projectRoot: string;\n cloneUrl: string;\n}): Promise<void> {\n const git = new SystemGit();\n await git.init(options.projectRoot, \"main\");\n await git.setRemote(options.projectRoot, \"origin\", options.cloneUrl);\n await configureDreamboardGitRepository({\n git,\n root: options.projectRoot,\n credentialHelper: DREAMBOARD_GIT_CREDENTIAL_HELPER,\n });\n}\n\nexport async function cloneDreamboardGitRepository(options: {\n cloneUrl: string;\n destination: string;\n}): Promise<void> {\n const git = new SystemGit();\n await git.clone(options.cloneUrl, options.destination, {\n config: [\n [\"credential.useHttpPath\", \"true\"],\n [\"credential.helper\", \"\"],\n [\"credential.helper\", DREAMBOARD_GIT_CREDENTIAL_HELPER],\n [\"http.followRedirects\", \"false\"],\n ],\n });\n await configureDreamboardGitRepository({\n git,\n root: options.destination,\n credentialHelper: DREAMBOARD_GIT_CREDENTIAL_HELPER,\n });\n}\n","import { randomBytes } from \"node:crypto\";\n\nexport function createUuidV7(): string {\n const bytes = randomBytes(16);\n const timestamp = BigInt(Date.now());\n\n bytes[0] = Number((timestamp >> 40n) & 0xffn);\n bytes[1] = Number((timestamp >> 32n) & 0xffn);\n bytes[2] = Number((timestamp >> 24n) & 0xffn);\n bytes[3] = Number((timestamp >> 16n) & 0xffn);\n bytes[4] = Number((timestamp >> 8n) & 0xffn);\n bytes[5] = Number(timestamp & 0xffn);\n bytes[6] = (bytes[6]! & 0x0f) | 0x70;\n bytes[8] = (bytes[8]! & 0x3f) | 0x80;\n\n const hex = bytes.toString(\"hex\");\n return [\n hex.slice(0, 8),\n hex.slice(8, 12),\n hex.slice(12, 16),\n hex.slice(16, 20),\n hex.slice(20),\n ].join(\"-\");\n}\n","import { mkdtemp, rename, rm } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { SystemGit } from \"@dreamboard-games/cli-core\";\nimport {\n resolveConfig,\n requireAuth,\n configureClient,\n} from \"../config/resolve.js\";\nimport { parseCloneCommandArgs } from \"../flags.js\";\nimport { loadGlobalConfig } from \"../config/global-config.js\";\nimport { getStoredSession } from \"../config/credential-store.js\";\nimport { normalizeSlug } from \"../utils/strings.js\";\nimport { exists } from \"../utils/fs.js\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport {\n ensureProjectRepositorySdk,\n getProjectBySlugSdk,\n loadRemoteProjectIdentity,\n pollProjectRepository,\n} from \"../services/api/index.js\";\nimport {\n loadProjectConfig,\n updateProjectEnvironmentState,\n} from \"../config/project-config.js\";\nimport { cloneDreamboardGitRepository } from \"../services/git/workspace-origin.js\";\nimport { installFrozenWorkspaceDependencies } from \"../services/project/workspace-dependencies.js\";\nimport { loadManifest, writeSnapshot } from \"../services/project/local-files.js\";\n\nconst DEFAULT_REPOSITORY_WAIT_TIMEOUT_MS = 120_000;\nconst DEFAULT_REPOSITORY_POLL_INTERVAL_MS = 1_000;\n\nfunction parsePositiveIntegerFlag(\n value: string | undefined,\n flagName: string,\n defaultValue: number,\n): number {\n if (value === undefined) {\n return defaultValue;\n }\n const parsed = Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed <= 0 || String(parsed) !== value) {\n throw new Error(`${flagName} must be a positive integer.`);\n }\n return parsed;\n}\n\nfunction normalizeProjectLookup(input: string): {\n lookupSlug: string;\n targetSlug: string;\n} {\n const trimmed = input.trim();\n const slugSegment = trimmed.includes(\"/\")\n ? trimmed.split(\"/\").filter(Boolean).at(-1) ?? trimmed\n : trimmed;\n const lookupSlug = normalizeSlug(slugSegment);\n return {\n lookupSlug,\n targetSlug: lookupSlug,\n };\n}\n\nexport default defineCommand({\n meta: { name: \"clone\", description: \"Clone an existing project repository\" },\n args: {\n slug: { type: \"positional\", description: \"Game slug\", required: true },\n \"wait-timeout-ms\": {\n type: \"string\",\n description: \"Maximum time to wait for Git repository setup\",\n },\n \"repository-poll-interval-ms\": {\n type: \"string\",\n description: \"Polling interval for Git repository setup\",\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseCloneCommandArgs(args);\n const slugInput = parsedArgs.slug;\n const repositoryWaitTimeoutMs = parsePositiveIntegerFlag(\n parsedArgs[\"wait-timeout-ms\"],\n \"--wait-timeout-ms\",\n DEFAULT_REPOSITORY_WAIT_TIMEOUT_MS,\n );\n const repositoryPollIntervalMs = parsePositiveIntegerFlag(\n parsedArgs[\"repository-poll-interval-ms\"],\n \"--repository-poll-interval-ms\",\n DEFAULT_REPOSITORY_POLL_INTERVAL_MS,\n );\n\n const { lookupSlug, targetSlug } = normalizeProjectLookup(slugInput);\n if (!lookupSlug) {\n throw new Error(\"Slug must contain at least one alphanumeric character.\");\n }\n\n const [globalConfig, storedSession] = await Promise.all([\n loadGlobalConfig(),\n getStoredSession(),\n ]);\n const config = resolveConfig(\n globalConfig,\n parsedArgs,\n undefined,\n storedSession,\n );\n requireAuth(config);\n await configureClient(config);\n const identity = await loadRemoteProjectIdentity();\n\n const targetDir = path.resolve(process.cwd(), targetSlug);\n if (await exists(targetDir)) {\n throw new Error(`Target directory already exists: ${targetDir}`);\n }\n\n const project = await getProjectBySlugSdk(lookupSlug);\n await ensureProjectRepositorySdk(project.projectId);\n consola.start(\"Resolving Git repository...\");\n const repository = await pollProjectRepository({\n projectId: project.projectId,\n timeoutMs: repositoryWaitTimeoutMs,\n intervalMs: repositoryPollIntervalMs,\n });\n if (repository.provisioningState !== \"READY\") {\n throw new Error(\n `Repository setup did not complete for ${project.projectId}: ${repository.provisioningState}${repository.errorCode ? ` (${repository.errorCode})` : \"\"}. Retry project clone after fixing the repository provisioning issue.`,\n );\n }\n\n if (!repository.headCommit) {\n const error = new Error(\n `PROJECT_UNINITIALIZED: Project '${lookupSlug}' has no pushed Git commits to clone. Create and push the initial native Git commit first.`,\n );\n error.name = \"PROJECT_UNINITIALIZED\";\n throw error;\n }\n\n const parentDir = path.dirname(targetDir);\n const tempDir = await mkdtemp(\n path.join(parentDir, `.${path.basename(targetDir)}.dreamboard-clone-`),\n );\n let renamed = false;\n try {\n consola.start(\"Cloning project repository...\");\n await cloneDreamboardGitRepository({\n cloneUrl: repository.cloneUrl,\n destination: tempDir,\n });\n\n const git = new SystemGit();\n const clonedHeadCommit = await git.resolveCommit(tempDir, \"HEAD\");\n if (clonedHeadCommit !== repository.headCommit) {\n throw new Error(\n `Cloned repository HEAD mismatch: expected ${repository.headCommit}, found ${clonedHeadCommit}. Retry project clone after the repository binding settles.`,\n );\n }\n\n const clonedProjectConfig = await loadProjectConfig(tempDir);\n if (clonedProjectConfig.projectId !== project.projectId) {\n throw new Error(\n `Cloned repository projectId mismatch: expected ${project.projectId}, found ${clonedProjectConfig.projectId}.`,\n );\n }\n\n await updateProjectEnvironmentState(tempDir, {\n ...clonedProjectConfig,\n gameId: project.projectId,\n deploymentId: identity.deploymentId,\n ownerScopeId: identity.ownerScopeId,\n bindingKey: identity.bindingKey,\n remoteHeadDigest: project.head?.revisionDigest,\n apiBaseUrl: config.apiBaseUrl,\n webBaseUrl: config.webBaseUrl,\n });\n\n await installFrozenWorkspaceDependencies(tempDir);\n await loadManifest(tempDir);\n await writeSnapshot(tempDir);\n const trackedChanges = await git.statusPorcelain(tempDir);\n if (trackedChanges) {\n throw new Error(\n `Project clone prepared tracked file changes before handoff:\\n${trackedChanges}\\nRefusing to publish a mutated checkout.`,\n );\n }\n\n await rename(tempDir, targetDir);\n renamed = true;\n } finally {\n if (!renamed) {\n await rm(tempDir, { recursive: true, force: true });\n }\n }\n\n consola.success(`Cloned ${lookupSlug} into ${targetDir}`);\n },\n});\n","import { defineCommand } from \"citty\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { parseCommitScopedCommandArgs } from \"../flags.js\";\nimport { getProjectCommitStatusSdk } from \"../services/api/index.js\";\nimport type { ProjectCommitStatus } from \"@dreamboard-games/api-client\";\nimport cmdCreateProject from \"./project-create.js\";\nimport cmdCloneProject from \"./project-clone.js\";\nimport {\n printJsonOrSummary,\n resolveCommitScopedProjectContext,\n} from \"./commit-scoped.js\";\n\nconst DEFAULT_STATUS_WAIT_TIMEOUT_MS = 120_000;\nconst DEFAULT_STATUS_POLL_INTERVAL_MS = 1_000;\n\nfunction parsePositiveIntegerFlag(\n value: string | undefined,\n flagName: string,\n defaultValue: number,\n): number {\n if (value === undefined) {\n return defaultValue;\n }\n const parsed = Number.parseInt(value, 10);\n if (!Number.isFinite(parsed) || parsed <= 0 || String(parsed) !== value) {\n throw new Error(`${flagName} must be a positive integer.`);\n }\n return parsed;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isPendingStatus(status: ProjectCommitStatus): boolean {\n if (!status.source.observed) {\n return true;\n }\n if (status.source.validationStatus === \"PENDING\") {\n return true;\n }\n if (\n status.builds.some((build) => build.compiledArtifactStatus === \"PENDING\")\n ) {\n return true;\n }\n if (\n status.previews.some((preview) => preview.status === \"PENDING_RETENTION\")\n ) {\n return true;\n }\n return status.releases.some(\n (release) => release.status === \"PENDING_RETENTION\",\n );\n}\n\nasync function maybePollProjectCommitStatus(options: {\n projectId: string;\n commitOid: string;\n wait: boolean;\n timeoutMs: number;\n intervalMs: number;\n initialStatus: ProjectCommitStatus;\n}): Promise<ProjectCommitStatus> {\n if (!options.wait || !isPendingStatus(options.initialStatus)) {\n return options.initialStatus;\n }\n\n const deadline = Date.now() + options.timeoutMs;\n let status = options.initialStatus;\n while (Date.now() < deadline) {\n await sleep(options.intervalMs);\n status = await getProjectCommitStatusSdk({\n projectId: options.projectId,\n commitOid: options.commitOid,\n });\n if (!isPendingStatus(status)) {\n return status;\n }\n }\n return status;\n}\n\nfunction projectStatusSummary(status: ProjectCommitStatus): string {\n const source = status.source.observed\n ? `source=${status.source.validationStatus ?? \"UNKNOWN\"}`\n : \"source=unobserved\";\n const revision = status.gameRevision.revisionDigest\n ? `revision=${status.gameRevision.revisionDigest}`\n : \"revision=none\";\n const builds = status.builds.length\n ? `builds=${status.builds\n .map(\n (build) =>\n `${build.targetProfile}:${build.compiledArtifactStatus ?? \"NOT_QUEUED\"}`,\n )\n .join(\",\")}`\n : \"builds=none\";\n const previews = status.previews.length\n ? `previews=${status.previews\n .map((preview) => `${preview.previewId}:${preview.status}`)\n .join(\",\")}`\n : \"previews=none\";\n const releases = status.releases.length\n ? `releases=${status.releases\n .map(\n (release) =>\n `${release.releaseId}:${release.status}${release.current ? \":current\" : \"\"}`,\n )\n .join(\",\")}`\n : \"releases=none\";\n\n return [\n `Project ${status.projectId}`,\n `commit=${status.commitOid}`,\n source,\n revision,\n builds,\n previews,\n releases,\n ].join(\" \");\n}\n\nconst cmdProjectStatus = defineCommand({\n meta: {\n name: \"status\",\n description: \"Show server state for an exact Git commit\",\n },\n args: {\n commit: {\n type: \"string\",\n description: \"Git revision to resolve once before status lookup\",\n required: true,\n },\n wait: {\n type: \"boolean\",\n description: \"Wait for server-observed commit state to settle\",\n default: false,\n },\n \"wait-timeout-ms\": {\n type: \"string\",\n description: \"Maximum time to wait for server commit status\",\n },\n \"status-poll-interval-ms\": {\n type: \"string\",\n description: \"Polling interval for server commit status\",\n },\n json: {\n type: \"boolean\",\n description: \"Print machine-readable status JSON\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = {\n ...parseCommitScopedCommandArgs(\"project status\", args),\n wait: Boolean(args.wait),\n \"wait-timeout-ms\":\n typeof args[\"wait-timeout-ms\"] === \"string\"\n ? args[\"wait-timeout-ms\"]\n : undefined,\n \"status-poll-interval-ms\":\n typeof args[\"status-poll-interval-ms\"] === \"string\"\n ? args[\"status-poll-interval-ms\"]\n : undefined,\n };\n const { projectConfig, commitOid } =\n await resolveCommitScopedProjectContext(parsedArgs, parsedArgs.commit);\n const initialStatus = await getProjectCommitStatusSdk({\n projectId: projectConfig.projectId,\n commitOid,\n });\n const status = await maybePollProjectCommitStatus({\n projectId: projectConfig.projectId,\n commitOid,\n wait: parsedArgs.wait,\n timeoutMs: parsePositiveIntegerFlag(\n parsedArgs[\"wait-timeout-ms\"],\n \"--wait-timeout-ms\",\n DEFAULT_STATUS_WAIT_TIMEOUT_MS,\n ),\n intervalMs: parsePositiveIntegerFlag(\n parsedArgs[\"status-poll-interval-ms\"],\n \"--status-poll-interval-ms\",\n DEFAULT_STATUS_POLL_INTERVAL_MS,\n ),\n initialStatus,\n });\n\n printJsonOrSummary({\n json: parsedArgs.json,\n value: status,\n summary: projectStatusSummary(status),\n });\n },\n});\n\nexport default defineCommand({\n meta: {\n name: \"project\",\n description: \"Manage Dreamboard projects\",\n },\n subCommands: {\n create: cmdCreateProject,\n clone: cmdCloneProject,\n status: cmdProjectStatus,\n },\n});\n","import { defineCommand } from \"citty\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport {\n parseConfigFlags,\n parseReleasePublishCommandArgs,\n} from \"../flags.js\";\nimport { resolveProjectContext } from \"../config/resolve.js\";\nimport {\n getCurrentProjectReleaseSdk,\n publishProjectReleaseSdk,\n} from \"../services/api/index.js\";\nimport {\n printJsonOrSummary,\n resolveCommitScopedProjectContext,\n} from \"./commit-scoped.js\";\n\nconst publishCommand = defineCommand({\n meta: {\n name: \"publish\",\n description: \"Publish a release for an exact Git commit\",\n },\n args: {\n commit: {\n type: \"string\",\n description: \"Git revision to resolve once before publishing\",\n required: true,\n },\n yes: {\n type: \"boolean\",\n description: \"Approve release publication without prompting\",\n default: false,\n },\n json: {\n type: \"boolean\",\n description: \"Print machine-readable release JSON\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseReleasePublishCommandArgs(args);\n if (!parsedArgs.yes) {\n throw new Error(\n \"Release publication requires explicit approval. Re-run with --yes.\",\n );\n }\n\n const { projectConfig, commitOid } = await resolveCommitScopedProjectContext(\n parsedArgs,\n parsedArgs.commit,\n );\n const release = await publishProjectReleaseSdk({\n projectId: projectConfig.projectId,\n commitOid,\n });\n\n printJsonOrSummary({\n json: parsedArgs.json,\n value: release,\n summary: [\n `Release ${release.releaseId}`,\n `status=${release.status}`,\n `retentionRef=${release.retentionRef}`,\n ].join(\" \"),\n });\n },\n});\n\nconst currentCommand = defineCommand({\n meta: {\n name: \"current\",\n description: \"Show the current published release\",\n },\n args: {\n json: {\n type: \"boolean\",\n description: \"Print machine-readable output\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseConfigFlags(args);\n const { projectConfig } = await resolveProjectContext(parsedArgs);\n const release = await getCurrentProjectReleaseSdk({\n projectId: projectConfig.projectId,\n });\n printJsonOrSummary({\n json: Boolean(args.json),\n value: release,\n summary: [\n `Current release ${release.releaseId}`,\n `status=${release.status}`,\n `retentionRef=${release.retentionRef}`,\n ].join(\" \"),\n });\n },\n});\n\nexport default defineCommand({\n meta: {\n name: \"release\",\n description: \"Manage releases\",\n },\n subCommands: {\n publish: publishCommand,\n current: currentCommand,\n },\n});\n","import { defineCommand } from \"citty\";\nimport consola from \"consola\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport { resolveProjectContext } from \"../config/resolve.js\";\nimport { parseConfigFlags, type ConfigFlags } from \"../flags.js\";\nimport { assertReleaseEnvironmentPortableDependencies } from \"../services/project/dependency-portability.js\";\nimport {\n generateReducerNativeArtifacts,\n isReducerNativeTestingWorkspace,\n runReducerNativeScenarios,\n type ReducerNativeScenarioSummary,\n} from \"../services/testing/reducer-native-test-harness.js\";\nimport {\n isStaleContractArtifactMessage,\n STALE_CONTRACT_ARTIFACT_CODE,\n STALE_CONTRACT_ARTIFACT_EXIT_CODE,\n} from \"../utils/errors.js\";\n\ntype TestCommandArgs = ConfigFlags & {\n scenario?: string;\n debug?: boolean;\n \"update-snapshots\"?: boolean;\n};\n\nexport type TestCommandPlan = {\n updateSnapshots: boolean;\n};\n\nexport const REDUCER_NATIVE_TEST_WORKSPACE_ERROR =\n \"dreamboard test now requires a reducer-native workspace with app/game.ts, shared/generated/ui-contract.ts, test/bases/*.base.ts, and test/scenarios/*.scenario.ts. Legacy test/base-scenarios.json workspaces are no longer supported.\";\n\nexport const NO_REDUCER_NATIVE_BASES_FOUND_ERROR =\n \"No bases found under test/bases/*.base.ts\";\n\nexport const NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR =\n \"No scenarios found under test/scenarios/*.scenario.ts\";\n\nexport function resolveTestCommandPlan(args: TestCommandArgs): TestCommandPlan {\n const updateSnapshots = Boolean(args[\"update-snapshots\"]);\n\n return {\n updateSnapshots,\n };\n}\n\nexport function assertNoRemovedTestFlags(argv: readonly string[]): void {\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (arg === undefined) {\n continue;\n }\n if (arg === \"--runner\" || arg.startsWith(\"--runner=\")) {\n throw new Error(\n \"dreamboard test no longer supports --runner. The public CLI runs offline reducer tests only.\",\n );\n }\n if (arg === \"--commit\" || arg.startsWith(\"--commit=\")) {\n throw new Error(\n \"dreamboard test no longer supports --commit. Use dreamboard verify/build/preview/release with --commit for pushed-commit workflows.\",\n );\n }\n }\n}\n\nfunction isStaleContractArtifactResult(\n result: ReducerNativeScenarioSummary[\"results\"][number],\n): boolean {\n return (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE ||\n (result.error ? isStaleContractArtifactMessage(result.error) : false)\n );\n}\n\nexport function resolveTestRunExitCode(\n summary: ReducerNativeScenarioSummary,\n): number {\n if (summary.failed === 0) {\n return 0;\n }\n return summary.results.some(\n (result) => !result.success && isStaleContractArtifactResult(result),\n )\n ? STALE_CONTRACT_ARTIFACT_EXIT_CODE\n : 1;\n}\n\nasync function assertReducerNativeTestingWorkspace(\n projectRoot: string,\n): Promise<void> {\n if (await isReducerNativeTestingWorkspace(projectRoot)) {\n return;\n }\n\n throw new Error(REDUCER_NATIVE_TEST_WORKSPACE_ERROR);\n}\n\ntype TestCommandDeps = {\n resolveProjectContext?: typeof resolveProjectContext;\n assertPortableDependencies?: typeof assertReleaseEnvironmentPortableDependencies;\n assertTestingWorkspace?: typeof assertReducerNativeTestingWorkspace;\n runScenarios?: typeof runReducerNativeScenarios;\n generateArtifacts?: typeof generateReducerNativeArtifacts;\n};\n\nexport async function runTestCommand(\n args: TestCommandArgs,\n deps: TestCommandDeps = {},\n): Promise<void> {\n const parsedFlags = parseConfigFlags(args);\n const plan = resolveTestCommandPlan(args);\n\n const { projectRoot, projectConfig, config } = await (\n deps.resolveProjectContext ?? resolveProjectContext\n )(parsedFlags, {\n requireAuth: false,\n });\n await (\n deps.assertPortableDependencies ??\n assertReleaseEnvironmentPortableDependencies\n )({\n projectRoot,\n projectConfig,\n environment: config.environment,\n });\n\n await (deps.assertTestingWorkspace ?? assertReducerNativeTestingWorkspace)(\n projectRoot,\n );\n\n const generated = await (\n deps.generateArtifacts ?? generateReducerNativeArtifacts\n )({\n projectRoot,\n scenarioPath: args.scenario,\n compiledResultId: projectConfig.compile?.latestSuccessful?.resultId,\n gameId: projectConfig.gameId,\n debug: Boolean(args.debug),\n });\n if (generated.bases.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_BASES_FOUND_ERROR);\n }\n if (generated.scenarios.length === 0) {\n throw new Error(NO_REDUCER_NATIVE_SCENARIOS_FOUND_ERROR);\n }\n const summary = await (deps.runScenarios ?? runReducerNativeScenarios)({\n projectRoot,\n projectConfig,\n resolvedConfig: config,\n scenarioPath: args.scenario,\n compiledResultId: projectConfig.compile?.latestSuccessful?.resultId,\n gameId: projectConfig.gameId,\n debug: Boolean(args.debug),\n updateSnapshots: plan.updateSnapshots,\n });\n\n printTestSummary(summary);\n}\n\nfunction printTestSummary(summary: ReducerNativeScenarioSummary): void {\n for (const result of summary.results) {\n if (result.success) {\n consola.success(`PASS ${result.id}`);\n } else if (\n result.errorCode === STALE_CONTRACT_ARTIFACT_CODE &&\n result.error\n ) {\n consola.error(result.error);\n } else {\n consola.error(`FAIL ${result.id}: ${result.error ?? \"Scenario failed\"}`);\n }\n }\n\n consola.info(\n `Test summary: ${summary.passed} passed, ${summary.failed} failed.`,\n );\n if (summary.failed > 0) {\n process.exitCode = resolveTestRunExitCode(summary);\n }\n}\n\nconst runCommand = defineCommand({\n meta: {\n name: \"run\",\n description: \"Run reducer-native scenarios from test/scenarios\",\n },\n args: {\n scenario: {\n type: \"string\",\n description: \"Optional scenario file path under test/scenarios\",\n },\n debug: {\n type: \"boolean\",\n description: \"Print full reducer-native validation details\",\n default: false,\n },\n \"update-snapshots\": {\n type: \"boolean\",\n description: \"Refresh generated projection and scenario snapshots\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n assertNoRemovedTestFlags(process.argv.slice(2));\n await runTestCommand(args as TestCommandArgs);\n },\n});\n\nexport default defineCommand({\n meta: {\n name: \"test\",\n description: \"Reducer-native test runner with typed bases and scenarios\",\n },\n args: runCommand.args,\n async run(context) {\n await runCommand.run?.(context);\n },\n});\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { SystemGit, type CommitReader } from \"@dreamboard-games/cli-core\";\nimport { defineCommand } from \"citty\";\nimport { CONFIG_FLAG_ARGS } from \"../command-args.js\";\nimport {\n parseCommitScopedCommandArgs,\n type ConfigFlags,\n} from \"../flags.js\";\nimport { loadGlobalConfig } from \"../config/global-config.js\";\nimport { resolveConfig } from \"../config/resolve.js\";\nimport type { GlobalConfig, ResolvedConfig } from \"../types.js\";\nimport { printJsonOrSummary } from \"./commit-scoped.js\";\nimport {\n runExactCommitVerification,\n type ExactCommitVerificationResult,\n} from \"../services/verification/exact-commit-verifier.js\";\n\nconst execFileAsync = promisify(execFile);\n\ntype VerifyCommandArgs = ConfigFlags & {\n commit: string;\n hook?: boolean;\n json?: boolean;\n};\n\ntype VerifyCommandDeps = {\n findGitRoot?: () => Promise<string>;\n git?: Pick<CommitReader, \"resolveCommit\">;\n loadGlobalConfig?: () => Promise<GlobalConfig>;\n resolveConfig?: (\n globalConfig: GlobalConfig,\n flags: ConfigFlags,\n ) => ResolvedConfig;\n verify?: (options: {\n projectRoot: string;\n config: ResolvedConfig;\n commitOid: string;\n hook: boolean;\n }) => Promise<ExactCommitVerificationResult>;\n};\n\nasync function findGitRoot(): Promise<string> {\n const { stdout } = await execFileAsync(\n \"git\",\n [\"rev-parse\", \"--show-toplevel\"],\n {\n cwd: process.cwd(),\n windowsHide: true,\n maxBuffer: 1024 * 1024,\n },\n );\n return stdout.trim();\n}\n\nexport async function runVerifyCommand(\n args: VerifyCommandArgs,\n deps: VerifyCommandDeps = {},\n): Promise<ExactCommitVerificationResult> {\n const projectRoot = await (deps.findGitRoot ?? findGitRoot)();\n const git = deps.git ?? new SystemGit();\n const [globalConfig, commitOid] = await Promise.all([\n (deps.loadGlobalConfig ?? loadGlobalConfig)(),\n git.resolveCommit(projectRoot, args.commit),\n ]);\n const resolvedConfig = (deps.resolveConfig ?? ((global, flags) =>\n resolveConfig(global, flags, undefined, undefined)))(globalConfig, args);\n return (deps.verify ?? runExactCommitVerification)({\n projectRoot,\n config: resolvedConfig,\n commitOid,\n hook: Boolean(args.hook),\n });\n}\n\nexport default defineCommand({\n meta: {\n name: \"verify\",\n description: \"Verify an exact Git commit\",\n },\n args: {\n commit: {\n type: \"string\",\n description: \"Git revision to resolve once before verifying\",\n required: true,\n },\n hook: {\n type: \"boolean\",\n description: \"Run in advisory Git hook mode\",\n default: false,\n },\n json: {\n type: \"boolean\",\n description: \"Print machine-readable verification JSON\",\n default: false,\n },\n ...CONFIG_FLAG_ARGS,\n },\n async run({ args }) {\n const parsedArgs = parseCommitScopedCommandArgs(\"verify\", args);\n const result = await runVerifyCommand(parsedArgs);\n printJsonOrSummary({\n json: Boolean(parsedArgs.json),\n value: result,\n summary: `Verified exact commit ${result.commitOid}: ${result.scenarioSummary.passed} scenario(s) passed.`,\n });\n },\n});\n","import { spawn } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { SystemGit, type CommitReader } from \"@dreamboard-games/cli-core\";\nimport type { GameTopologyManifest } from \"@dreamboard-games/sdk/types\";\nimport type { ResolvedConfig } from \"../../types.js\";\nimport { loadProjectConfig } from \"../../config/project-config.js\";\nimport { exists } from \"../../utils/fs.js\";\nimport { assertCompilerPortableDependencies } from \"../project/dependency-portability.js\";\nimport { loadManifest } from \"../project/local-files.js\";\nimport { assertReducerContractPreflight } from \"../project/reducer-contract-preflight.js\";\nimport { assertReducerBundleSmoke } from \"../project/reducer-bundle-preflight.js\";\nimport { runLocalTypecheck } from \"../project/local-typecheck.js\";\nimport { applyWorkspaceCodegen } from \"../project/workspace-codegen.js\";\nimport {\n generateReducerNativeArtifacts,\n isReducerNativeTestingWorkspace,\n runReducerNativeScenarios,\n} from \"../testing/reducer-native-test-harness.js\";\nimport type { ProjectConfig } from \"../../types.js\";\nimport type { ReducerNativeScenarioSummary } from \"../testing/reducer-native-test-harness.js\";\n\nexport type ExactCommitVerificationResult = {\n projectId: string;\n commitOid: string;\n status: \"passed\";\n hook: boolean;\n steps: string[];\n scenarioSummary: {\n passed: number;\n failed: number;\n total: number;\n };\n};\n\nexport type ExactCommitVerifierDeps = {\n git?: CommitReader;\n makeTempDir?: () => Promise<string>;\n readGitTree?: (root: string, commitOid: string) => Promise<GitTreeEntry[]>;\n readPolicyFile?: (root: string, relativePath: string) => Promise<Buffer>;\n runInstall?: (root: string) => Promise<void>;\n loadProjectConfig?: (root: string) => Promise<ProjectConfig>;\n assertPortableDependencies?: (options: {\n projectRoot: string;\n projectConfig?: ProjectConfig;\n }) => Promise<unknown>;\n loadManifest?: (root: string) => Promise<GameTopologyManifest>;\n applyCodegen?: (options: {\n projectRoot: string;\n manifest: GameTopologyManifest;\n }) => Promise<void>;\n assertContract?: (root: string) => Promise<void>;\n runTypecheck?: (root: string) => Promise<{\n skipped: boolean;\n success: boolean;\n output?: string;\n }>;\n assertReducerBundle?: (options: {\n projectRoot: string;\n manifest: GameTopologyManifest;\n }) => Promise<void>;\n isTestingWorkspace?: (root: string) => Promise<boolean>;\n generateArtifacts?: (options: {\n projectRoot: string;\n gameId: string;\n compiledResultId?: string;\n }) => Promise<{ bases: unknown[]; scenarios: unknown[] }>;\n runScenarios?: (options: {\n projectRoot: string;\n projectConfig: ProjectConfig;\n resolvedConfig: ResolvedConfig;\n gameId: string;\n compiledResultId?: string;\n }) => Promise<ReducerNativeScenarioSummary>;\n};\n\nexport type ExactCommitWorktreeDeps = Pick<\n ExactCommitVerifierDeps,\n \"git\" | \"makeTempDir\" | \"readGitTree\" | \"readPolicyFile\"\n>;\n\nexport type ExactCommitWorkspacePreparationDeps = Pick<\n ExactCommitVerifierDeps,\n | \"loadProjectConfig\"\n | \"assertPortableDependencies\"\n | \"runInstall\"\n | \"loadManifest\"\n | \"applyCodegen\"\n>;\n\nexport type GitTreeEntry = {\n mode: string;\n type: string;\n objectId: string;\n path: string;\n};\n\ntype VerificationStep =\n | \"worktree\"\n | \"source-policy\"\n | \"dependencies\"\n | \"codegen\"\n | \"contract\"\n | \"typecheck\"\n | \"reducer-bundle\"\n | \"scenarios\";\n\nconst ALLOWED_DREAMBOARD_TRACKED_PATHS = new Set([\".dreamboard/project.json\"]);\nconst CREDENTIAL_BASENAMES = new Set([\n \".env\",\n \".env.local\",\n \".env.production\",\n \".env.staging\",\n \"auth.json\",\n \"credentials.json\",\n \"id_rsa\",\n \"id_dsa\",\n \"id_ed25519\",\n]);\nconst CREDENTIAL_EXTENSIONS = new Set([\".key\", \".pem\", \".p12\", \".pfx\"]);\nconst GENERATED_PATH_PREFIXES = [\"test/generated/\"];\nconst LFS_POINTER_PREFIX = \"version https://git-lfs.github.com/spec/v1\";\n\nexport async function runExactCommitVerification(\n options: {\n projectRoot: string;\n config: ResolvedConfig;\n commitOid: string;\n hook: boolean;\n },\n deps: ExactCommitVerifierDeps = {},\n): Promise<ExactCommitVerificationResult> {\n const steps: VerificationStep[] = [];\n\n return withExactCommitWorktree(\n {\n projectRoot: options.projectRoot,\n commitOid: options.commitOid,\n onStep: (step) => steps.push(step),\n },\n async (worktreeRoot) => {\n const { projectConfig, manifest } = await prepareExactCommitWorkspace(\n {\n worktreeRoot,\n onStep: (step) => steps.push(step),\n },\n deps,\n );\n\n await (deps.assertContract ?? assertReducerContractPreflight)(\n worktreeRoot,\n );\n steps.push(\"contract\");\n\n const typecheck = await (deps.runTypecheck ?? runLocalTypecheck)(\n worktreeRoot,\n );\n if (typecheck.skipped) {\n throw new Error(\n \"Exact commit verification requires installed workspace dependencies before typecheck.\",\n );\n }\n if (!typecheck.success) {\n throw new Error(\n [\"Exact commit typecheck failed.\", typecheck.output?.trim() || null]\n .filter(Boolean)\n .join(\"\\n\"),\n );\n }\n steps.push(\"typecheck\");\n\n await (deps.assertReducerBundle ?? assertReducerBundleSmoke)({\n projectRoot: worktreeRoot,\n manifest,\n });\n steps.push(\"reducer-bundle\");\n\n if (\n !(await (deps.isTestingWorkspace ?? isReducerNativeTestingWorkspace)(\n worktreeRoot,\n ))\n ) {\n throw new Error(\n \"Exact commit verification requires reducer-native bases and scenarios.\",\n );\n }\n const runtimeIdentity = {\n gameId: projectConfig.gameId,\n compiledResultId: projectConfig.compile?.latestSuccessful?.resultId,\n };\n const generated = await (\n deps.generateArtifacts ?? generateReducerNativeArtifacts\n )({\n projectRoot: worktreeRoot,\n gameId: runtimeIdentity.gameId,\n compiledResultId: runtimeIdentity.compiledResultId,\n });\n if (generated.bases.length === 0) {\n throw new Error(\"No bases found under test/bases/*.base.ts.\");\n }\n if (generated.scenarios.length === 0) {\n throw new Error(\n \"No scenarios found under test/scenarios/*.scenario.ts.\",\n );\n }\n const scenarioSummary = await (\n deps.runScenarios ?? runReducerNativeScenarios\n )({\n projectRoot: worktreeRoot,\n projectConfig,\n resolvedConfig: options.config,\n gameId: runtimeIdentity.gameId,\n compiledResultId: runtimeIdentity.compiledResultId,\n });\n steps.push(\"scenarios\");\n if (scenarioSummary.failed > 0) {\n const failures = scenarioSummary.results\n .filter((result) => !result.success)\n .map((result) => `FAIL ${result.id}: ${result.error ?? \"failed\"}`);\n throw new Error(\n [\n `Exact commit scenario verification failed: ${scenarioSummary.failed} failed, ${scenarioSummary.passed} passed.`,\n ...failures,\n ].join(\"\\n\"),\n );\n }\n\n return {\n projectId: projectConfig.projectId,\n commitOid: options.commitOid,\n status: \"passed\",\n hook: options.hook,\n steps,\n scenarioSummary: {\n passed: scenarioSummary.passed,\n failed: scenarioSummary.failed,\n total: scenarioSummary.results.length,\n },\n };\n },\n deps,\n );\n}\n\nexport async function withExactCommitWorktree<T>(\n options: {\n projectRoot: string;\n commitOid: string;\n onStep?: (\n step: Extract<VerificationStep, \"worktree\" | \"source-policy\">,\n ) => void;\n },\n run: (worktreeRoot: string) => Promise<T>,\n deps: ExactCommitWorktreeDeps = {},\n): Promise<T> {\n const git = deps.git ?? new SystemGit();\n const tempRoot =\n (await deps.makeTempDir?.()) ??\n (await mkdtemp(path.join(os.tmpdir(), \"dreamboard-verify-\")));\n const worktreeRoot = path.join(tempRoot, \"worktree\");\n let worktreeCreated = false;\n\n try {\n await git.createDetachedWorktree(\n options.projectRoot,\n options.commitOid,\n worktreeRoot,\n );\n worktreeCreated = true;\n options.onStep?.(\"worktree\");\n\n const treeEntries =\n (await deps.readGitTree?.(options.projectRoot, options.commitOid)) ??\n (await readGitTree(options.projectRoot, options.commitOid));\n await assertExactCommitSourcePolicy({\n worktreeRoot,\n entries: treeEntries,\n readFile: deps.readPolicyFile,\n });\n options.onStep?.(\"source-policy\");\n\n return await run(worktreeRoot);\n } finally {\n if (worktreeCreated) {\n await git\n .removeWorktree(options.projectRoot, worktreeRoot)\n .catch(() => {});\n }\n await rm(tempRoot, { recursive: true, force: true }).catch(() => {});\n }\n}\n\nexport async function prepareExactCommitWorkspace(\n options: {\n worktreeRoot: string;\n onStep?: (\n step: Extract<VerificationStep, \"dependencies\" | \"codegen\">,\n ) => void;\n },\n deps: ExactCommitWorkspacePreparationDeps = {},\n): Promise<{\n projectConfig: ProjectConfig;\n manifest: GameTopologyManifest;\n}> {\n const projectConfig = await (deps.loadProjectConfig ?? loadProjectConfig)(\n options.worktreeRoot,\n );\n await (deps.assertPortableDependencies ?? assertCompilerPortableDependencies)(\n {\n projectRoot: options.worktreeRoot,\n projectConfig,\n },\n );\n\n await (deps.runInstall ?? runFrozenNoScriptsInstall)(options.worktreeRoot);\n options.onStep?.(\"dependencies\");\n\n const manifest = await (deps.loadManifest ?? loadManifest)(\n options.worktreeRoot,\n );\n await (deps.applyCodegen ?? applyWorkspaceCodegen)({\n projectRoot: options.worktreeRoot,\n manifest,\n });\n options.onStep?.(\"codegen\");\n\n return { projectConfig, manifest };\n}\n\nexport async function assertExactCommitSourcePolicy(options: {\n worktreeRoot: string;\n entries: readonly GitTreeEntry[];\n readFile?: (root: string, relativePath: string) => Promise<Buffer>;\n}): Promise<void> {\n const readPolicyFile = options.readFile ?? readPolicyFileFromDisk;\n const violations: string[] = [];\n\n for (const entry of options.entries) {\n const normalizedPath = normalizeTreePath(entry.path);\n if (!normalizedPath) {\n violations.push(`${entry.path}: path is not normalized`);\n continue;\n }\n if (entry.mode === \"160000\") {\n violations.push(`${normalizedPath}: gitlinks/submodules are not allowed`);\n continue;\n }\n if (normalizedPath === \".gitmodules\") {\n violations.push(\".gitmodules is not allowed\");\n continue;\n }\n if (normalizedPath === \".lfsconfig\") {\n violations.push(\".lfsconfig is not allowed\");\n continue;\n }\n if (isForbiddenGeneratedPath(normalizedPath)) {\n violations.push(`${normalizedPath}: generated paths must not be tracked`);\n continue;\n }\n if (isForbiddenDreamboardStatePath(normalizedPath)) {\n violations.push(\n `${normalizedPath}: only .dreamboard/project.json may be tracked`,\n );\n continue;\n }\n if (isCredentialLikePath(normalizedPath)) {\n violations.push(\n `${normalizedPath}: credential-like files are not allowed`,\n );\n continue;\n }\n\n if (entry.type === \"blob\") {\n const content = await readPolicyFile(\n options.worktreeRoot,\n normalizedPath,\n );\n const textPrefix = content.subarray(0, 4096).toString(\"utf8\");\n if (\n normalizedPath === \".gitattributes\" &&\n /filter\\s*=\\s*lfs/.test(textPrefix)\n ) {\n violations.push(\".gitattributes configures Git LFS\");\n }\n if (textPrefix.startsWith(LFS_POINTER_PREFIX)) {\n violations.push(\n `${normalizedPath}: Git LFS pointer files are not allowed`,\n );\n }\n if (hasCredentialLikeContent(textPrefix)) {\n violations.push(\n `${normalizedPath}: credential-like content is not allowed`,\n );\n }\n }\n }\n\n if (violations.length > 0) {\n throw new Error(\n [\"Exact commit source policy rejected the commit:\", ...violations].join(\n \"\\n\",\n ),\n );\n }\n}\n\nasync function readGitTree(\n root: string,\n commitOid: string,\n): Promise<GitTreeEntry[]> {\n const { stdout } = await runCommand(\n \"git\",\n [\"ls-tree\", \"-r\", \"-z\", \"--full-tree\", commitOid],\n root,\n );\n return parseGitTree(stdout);\n}\n\nexport function parseGitTree(output: string): GitTreeEntry[] {\n return output\n .split(\"\\0\")\n .filter(Boolean)\n .map((record) => {\n const match = /^(\\d{6}) (\\S+) ([0-9a-f]+)\\t(.+)$/.exec(record);\n if (!match) {\n throw new Error(`Unable to parse git tree entry: ${record}`);\n }\n return {\n mode: match[1]!,\n type: match[2]!,\n objectId: match[3]!,\n path: match[4]!,\n };\n });\n}\n\nasync function runFrozenNoScriptsInstall(root: string): Promise<void> {\n await runCommand(\n resolvePnpmCommand(),\n [\n \"install\",\n \"--frozen-lockfile\",\n \"--ignore-scripts\",\n \"--ignore-workspace\",\n \"--config.shared-workspace-lockfile=false\",\n ],\n root,\n );\n}\n\nfunction resolvePnpmCommand(): string {\n const corepackPath = path.join(path.dirname(process.execPath), \"corepack\");\n return existsSync(corepackPath) ? corepackPath : \"pnpm\";\n}\n\nasync function runCommand(\n command: string,\n args: readonly string[],\n cwd: string,\n): Promise<{ stdout: string; stderr: string }> {\n const finalArgs =\n path.basename(command) === \"corepack\" ? [\"pnpm\", ...args] : [...args];\n return new Promise((resolve, reject) => {\n const child = spawn(command, finalArgs, {\n cwd,\n env: { ...process.env, npm_config_ignore_scripts: \"true\" },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n child.stdout.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve({ stdout, stderr });\n return;\n }\n reject(\n new Error(\n [\n `${command} ${finalArgs.join(\" \")} failed with exit code ${code}.`,\n stdout.trim() || null,\n stderr.trim() || null,\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n ),\n );\n });\n });\n}\n\nasync function readPolicyFileFromDisk(\n root: string,\n relativePath: string,\n): Promise<Buffer> {\n return readFile(path.join(root, relativePath));\n}\n\nfunction normalizeTreePath(filePath: string): string | null {\n if (filePath.includes(\"\\\\\")) return null;\n const normalized = path.posix.normalize(filePath);\n if (\n normalized === \".\" ||\n normalized.startsWith(\"../\") ||\n path.posix.isAbsolute(normalized)\n ) {\n return null;\n }\n return normalized;\n}\n\nfunction isForbiddenGeneratedPath(filePath: string): boolean {\n return GENERATED_PATH_PREFIXES.some((prefix) => filePath.startsWith(prefix));\n}\n\nfunction isForbiddenDreamboardStatePath(filePath: string): boolean {\n return (\n filePath.startsWith(\".dreamboard/\") &&\n !ALLOWED_DREAMBOARD_TRACKED_PATHS.has(filePath)\n );\n}\n\nfunction isCredentialLikePath(filePath: string): boolean {\n const basename = path.posix.basename(filePath);\n if (CREDENTIAL_BASENAMES.has(basename)) return true;\n if (CREDENTIAL_EXTENSIONS.has(path.posix.extname(basename))) return true;\n return filePath.startsWith(\".dreamboard-dev/deploy-secrets/\");\n}\n\nfunction hasCredentialLikeContent(prefix: string): boolean {\n return (\n /-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(prefix) ||\n /_authToken\\s*=/i.test(prefix) ||\n /(?:^|\\n)\\s*(?:npm_token|authToken|password|secret)\\s*=/i.test(prefix)\n );\n}\n\nexport async function computeFileDigestIfPresent(\n filePath: string,\n): Promise<string | null> {\n if (!(await exists(filePath))) return null;\n const content = await readFile(filePath);\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n","import crypto from \"node:crypto\";\nimport {\n ExitCode,\n commandFailure,\n commandSuccess,\n createProgressSequencer,\n type CommandId,\n type CommandResult,\n type ProblemDetails,\n} from \"@dreamboard-games/cli-core\";\nimport {\n isDreamboardApiError,\n isStaleContractArtifactError,\n presentCliError,\n} from \"./utils/errors.js\";\n\nexport type MachineMode = \"json\" | \"json-events\";\n\nexport type MachineOutputContext = {\n readonly mode: MachineMode;\n readonly runId: string;\n};\n\nexport type CapturedCommandResult = {\n readonly exitCode: number;\n readonly stdout: string;\n readonly stderr: string;\n};\n\nexport function consumeMachineOutputMode(\n argv: string[],\n): MachineOutputContext | null {\n let mode: MachineMode | null = null;\n for (let index = argv.length - 1; index >= 2; index -= 1) {\n const arg = argv[index];\n if (arg !== \"--json\" && arg !== \"--json-events\") continue;\n const nextMode = arg === \"--json\" ? \"json\" : \"json-events\";\n if (mode && mode !== nextMode) {\n throw new Error(\n \"Use only one machine output mode: --json or --json-events.\",\n );\n }\n mode = nextMode;\n argv.splice(index, 1);\n }\n\n return mode\n ? {\n mode,\n runId: crypto.randomUUID(),\n }\n : null;\n}\n\nexport function commandPathToId(path: readonly string[]): CommandId {\n const [first, second] = path;\n if (first === \"auth\") {\n if (second === \"git-credential\") return \"auth.git_credential\";\n if (second === \"status\") return \"auth.status\";\n if (second === \"logout\") return \"auth.logout\";\n return \"auth.login\";\n }\n if (first === \"project\") {\n if (second === \"create\") return \"project.create\";\n if (second === \"clone\") return \"project.clone\";\n return \"project.status\";\n }\n if (first === \"release\") {\n if (second === \"publish\") return \"release.publish\";\n return \"release.current\";\n }\n switch (first) {\n case \"verify\":\n return \"verify\";\n case \"test\":\n return \"test\";\n case \"dev\":\n return \"dev\";\n case \"build\":\n return \"build\";\n case \"preview\":\n return \"preview\";\n case \"doctor\":\n return \"doctor\";\n default:\n return \"doctor\";\n }\n}\n\nexport async function runWithMachineOutput<T>(\n context: MachineOutputContext,\n command: CommandId,\n run: () => Promise<T>,\n): Promise<void> {\n const sequencer = createProgressSequencer({\n runId: context.runId,\n command,\n });\n if (context.mode === \"json-events\") {\n writeJsonLine(\n sequencer.next({\n command,\n kind: \"progress\",\n event: \"started\",\n }),\n );\n }\n\n const previousExitCode = process.exitCode;\n process.exitCode = 0;\n\n try {\n const captured = await captureProcessWrites(async () => {\n await run();\n });\n const exitCode =\n typeof process.exitCode === \"number\" ? process.exitCode : ExitCode.Ok;\n const result =\n exitCode === 0\n ? commandSuccess(command, captured)\n : commandFailure(\n command,\n {\n title: \"Command failed\",\n detail: `Command completed with exit code ${exitCode}.`,\n code: \"COMMAND_EXIT_CODE\",\n },\n normalizeExitCode(exitCode),\n );\n\n emitMachineResult(context, sequencer.terminal(result), result);\n process.exitCode = exitCode;\n } catch (error) {\n const failure = commandFailure(\n command,\n problemFromError(error),\n exitCodeFromError(error),\n nextActionsFromError(error),\n );\n emitMachineResult(context, sequencer.terminal(failure), failure);\n process.exit(exitCodeFromError(error));\n } finally {\n if (process.exitCode === 0 && previousExitCode) {\n process.exitCode = previousExitCode;\n }\n }\n}\n\nexport function emitMachineFailureAndExit(\n context: MachineOutputContext,\n command: CommandId,\n error: unknown,\n): never {\n const sequencer = createProgressSequencer({\n runId: context.runId,\n command,\n });\n const failure = commandFailure(\n command,\n problemFromError(error),\n exitCodeFromError(error),\n nextActionsFromError(error),\n );\n emitMachineResult(context, sequencer.terminal(failure), failure);\n process.exit(failure.exitCode);\n}\n\nasync function captureProcessWrites(\n run: () => Promise<void>,\n): Promise<CapturedCommandResult> {\n const stdoutWrite = process.stdout.write.bind(process.stdout);\n const stderrWrite = process.stderr.write.bind(process.stderr);\n let stdout = \"\";\n let stderr = \"\";\n process.stdout.write = ((chunk: unknown, ...args: unknown[]) => {\n stdout += stringifyChunk(chunk);\n const callback = args.find(\n (arg): arg is (error?: Error | null) => void => typeof arg === \"function\",\n );\n callback?.();\n return true;\n }) as typeof process.stdout.write;\n process.stderr.write = ((chunk: unknown, ...args: unknown[]) => {\n stderr += stringifyChunk(chunk);\n const callback = args.find(\n (arg): arg is (error?: Error | null) => void => typeof arg === \"function\",\n );\n callback?.();\n return true;\n }) as typeof process.stderr.write;\n\n try {\n await run();\n return {\n exitCode:\n typeof process.exitCode === \"number\" ? process.exitCode : ExitCode.Ok,\n stdout,\n stderr,\n };\n } finally {\n process.stdout.write = stdoutWrite as typeof process.stdout.write;\n process.stderr.write = stderrWrite as typeof process.stderr.write;\n }\n}\n\nfunction emitMachineResult<T>(\n context: MachineOutputContext,\n terminalEvent: ReturnType<\n ReturnType<typeof createProgressSequencer>[\"terminal\"]\n >,\n result: CommandResult<T>,\n): void {\n if (context.mode === \"json-events\") {\n writeJsonLine(terminalEvent);\n return;\n }\n writeJsonLine(result);\n}\n\nfunction writeJsonLine(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value)}\\n`);\n}\n\nfunction stringifyChunk(chunk: unknown): string {\n if (typeof chunk === \"string\") return chunk;\n if (chunk instanceof Uint8Array) return Buffer.from(chunk).toString(\"utf8\");\n return String(chunk);\n}\n\nfunction problemFromError(error: unknown): ProblemDetails {\n if (isDreamboardApiError(error)) {\n return {\n type: error.problem.type,\n title: error.problem.title,\n status: error.problem.status,\n detail: error.problem.detail,\n code: error.problem.type,\n };\n }\n\n const presentation = presentCliError(error);\n return {\n title: presentation.message || \"Command failed\",\n detail: presentation.resolution,\n code: error instanceof Error ? error.name : undefined,\n };\n}\n\nfunction exitCodeFromError(error: unknown): ExitCode {\n if (isStaleContractArtifactError(error)) return ExitCode.Validation;\n if (isDreamboardApiError(error)) {\n if (error.status === 401) return ExitCode.Unauthenticated;\n if (error.status === 403) return ExitCode.Forbidden;\n if (error.status === 409) return ExitCode.Conflict;\n if (error.status === 422 || error.status === 400) {\n return ExitCode.Validation;\n }\n if (error.retryable || error.status === 429 || error.status >= 500) {\n return ExitCode.Transient;\n }\n }\n return ExitCode.Unexpected;\n}\n\nfunction normalizeExitCode(exitCode: number): ExitCode {\n return Object.values(ExitCode).includes(exitCode)\n ? (exitCode as ExitCode)\n : ExitCode.Unexpected;\n}\n\nfunction nextActionsFromError(error: unknown) {\n if (isDreamboardApiError(error) && error.status === 401) {\n return [\n {\n id: \"auth.login\" as const,\n environment: \"staging\",\n unattended: false as const,\n },\n ];\n }\n return [];\n}\n","import { runDreamboardCli } from \"./cli-main.js\";\n\nrunDreamboardCli();\n"],"mappings":"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KAAK,OACnB,MAAM,QACN,KAAK,QAAS,KAAK,QACnB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN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","names":["readFileSync","i","l","c","env","r","t","o","i","a","l","c","i","l","i","s","ansiRegex","stripAnsi","env","c","_","getColor","createConsola","crypto","platform","ExitCode","path","env","crypto","sleep","error","path","spawn","createRequire","path","require","spawn","path","path","spawn","path","path","path","path","path","createRequire","pathToFileURL","path","createRequire","pathToFileURL","playerIds","table","queue","path","error","compiledResult","a","b","path","path","path","DEFAULT_REPOSITORY_WAIT_TIMEOUT_MS","DEFAULT_REPOSITORY_POLL_INTERVAL_MS","parsePositiveIntegerFlag","path","parsePositiveIntegerFlag","argv","runCommand","execFile","promisify","spawn","createHash","existsSync","mkdtemp","rm","path","mkdtemp","path","rm","runCommand","existsSync","spawn","execFileAsync","promisify","execFile","crypto","argv","crypto","path","readFileSync"]}
|