@capgo/cli 8.65.0 → 8.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import{createRequire as SC}from"node:module";var OC=Object.create;var{getPrototypeOf:EC,defineProperty:E2,getOwnPropertyNames:IH,getOwnPropertyDescriptor:vC}=Object,JH=Object.prototype.hasOwnProperty;function XH(D){return this[D]}var VC,jC,h$=(D,$,U)=>{var I=D!=null&&typeof D==="object";if(I){var F=$?VC??=new WeakMap:jC??=new WeakMap,J=F.get(D);if(J)return J}U=D!=null?OC(EC(D)):{};let X=$||!D||!D.__esModule?E2(U,"default",{value:D,enumerable:!0}):U;for(let Q of IH(D))if(!JH.call(X,Q))E2(X,Q,{get:XH.bind(D,Q),enumerable:!0});if(I)F.set(D,X);return X},x0=(D)=>{var $=(FH??=new WeakMap).get(D),U;if($)return $;if($=E2({},"__esModule",{value:!0}),D&&typeof D==="object"||typeof D==="function"){for(var I of IH(D))if(!JH.call($,I))E2($,I,{get:XH.bind(D,I),enumerable:!(U=vC(D,I))||U.enumerable})}return FH.set(D,$),$},FH,C=(D,$)=>()=>($||D(($={exports:{}}).exports,$),$.exports);var AC=(D)=>D;function RC(D,$){this[D]=AC.bind(null,$)}var X$=(D,$)=>{for(var U in $)E2(D,U,{get:$[U],enumerable:!0,configurable:!0,set:RC.bind($,U)})};var T=(D,$)=>()=>(D&&($=D(D=0)),$);var t=SC(import.meta.url);var t$;var A1=T(()=>{t$={name:"@capgo/cli",type:"module",version:"8.65.0",description:"A CLI to upload to capgo servers",author:"Martin martin@capgo.app",license:"Apache 2.0",homepage:"https://github.com/Cap-go/capgo/tree/main/cli#readme",repository:{type:"git",url:"https://github.com/Cap-go/capgo.app",directory:"cli"},bugs:{url:"https://github.com/Cap-go/capgo/issues"},keywords:["appflow alternative","ionic","capacitor","auto update","live update","capgo","cli","upload","capgo-cli","sdk","tanstack-intent"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js"},"./sdk":{types:"./dist/src/sdk.d.ts",import:"./dist/src/sdk.js"}},main:"dist/index.js",types:"dist/src/index.d.ts",bin:{capgo:"dist/index.js"},files:["!skills/_artifacts","dist","skills"],engines:{npm:">=8.0.0",node:">=20.0.0"},scripts:{build:"tsc && bun build.mjs",dev:"NODE_ENV=development ncc build","no-debug":"node dist/index.js","dev-build":"SUPA_DB=development ncc build",pack:"pkg",types:"bunx --bun supabase gen types typescript --project-id=xvwzpoazmxkqosrdewyv > src/types/supabase.types.ts",typecheck:"tsgo --project tsconfig.tsgo.json --noEmit",lint:"bun run lint:ox","lint:ox":"oxlint --config ../.oxlintrc.json src","lint:fix":"oxlint --config ../.oxlintrc.json --fix src","check-posix-paths":"node test/check-posix-paths.js","generate-docs":"node dist/index.js generate-docs README.md","test:notify-app-ready-background":"bun test ./test/test-notify-app-ready-background.mjs ./test/test-background-check-shutdown.mjs","test:bundle":"bun test/test-bundle.mjs","test:bundle-validation":"bun test test/bundle/","test:prescan":"bun test test/prescan/","test:functional":"bun test/test-functional.mjs","test:semver":"bun test/test-semver-validation.mjs","test:version-edge-cases":"bun test/test-version-validation.mjs","test:regex":"bun test/test-regex-validation.mjs","test:upload":"bun test/test-upload-validation.mjs","test:fail-on-incompatible":"bun test/test-fail-on-incompatible.mjs","test:native-dependencies":"bun test/test-native-dependencies.mjs && bun test/test-get-remote-dependencies.mjs","test:package-json-guard":"bun test/test-package-json-guard.mjs","test:credentials":"bun test/test-credentials.mjs","test:credentials-export":"bun test/test-credentials-export.mjs","test:asc-key-protocol":"bun test/test-asc-key-protocol.mjs","test:credentials-validation":"bun test/test-credentials-validation.mjs","test:android-service-account-validation":"bun test/test-android-service-account-validation.mjs","test:build-zip-filter":"bun test/test-build-zip-filter.mjs","test:checksum":"bun test/test-checksum-algorithm.mjs","test:build-needed":"bun test/test-build-needed.mjs","test:cli-help":"bun test/test-cli-help.mjs","test:build-cache-payload":"bun test/test-build-cache-payload.mjs","test:build-cancellation":"bun test/test-build-cancellation.mjs","test:ci-prompts":"bun test/test-ci-prompts.mjs","test:ci-secrets":"bun test/test-ci-secrets.mjs","test:android-onboarding-progress":"bun test/test-android-onboarding-progress.mjs && bun test/test-android-select-guard.mjs","test:android-keystore-action":"bun test/test-android-keystore-action.mjs","test:android-google-play-action":"bun test/test-android-google-play-action.mjs","test:onboarding-telemetry":"bun test/test-onboarding-telemetry.mjs","test:v2-event-migration":"bun test/test-v2-event-migration.mjs","test:analytics":"bun test/test-analytics.mjs","test:cli-headers":"bun test/test-cli-headers.mjs","test:min-cli-version":"bun test/test-min-cli-version.mjs","test:authenticated-command-invocation":"bun test/test-authenticated-command-invocation.mjs","test:analytics-error-category":"bun test/test-analytics-error-category.mjs","test:analytics-org-resolver":"bun test/test-analytics-org-resolver.mjs","test:supabase-perf":"bun test/test-supabase-perf.mjs","test:preview-qr":"bun test/test-preview-qr.mjs","test:bundle-pages":"bun test test/test-bundle-pages.test.ts","test:mcp-analytics":"bun test/test-mcp-analytics.mjs","test:mcp-instructions":"bun test/test-mcp-instructions.mjs","test:mcp-stdout-guard":"bun test/test-mcp-stdout-guard.mjs","test:mcp-platform-select":"bun test/test-mcp-platform-select.mjs","test:mcp-explain-scopes":"bun test/test-mcp-explain-scopes.mjs","test:mcp-oauth-reopen":"bun test/test-mcp-oauth-reopen.mjs","test:mcp-broker-oauth":"bun test/test-mcp-broker-oauth.mjs","test:mcp-broker-session":"bun test/test-mcp-broker-session.mjs","test:mcp-credentials-manage":"bun test/test-mcp-credentials-manage.mjs","test:mcp-resume-prompt":"bun test/test-mcp-resume-prompt.mjs","test:mcp-build-job":"bun test/test-mcp-build-job.mjs","test:mcp-build-tools":"bun test/test-mcp-build-tools.mjs","test:app-created-source":"bun test/test-app-created-source.mjs","test:app-add-exists":"bun test/test-app-add-exists.mjs","test:app-add-getting-started":"bun test/test-app-add-getting-started.mjs","test:app-list-output-text":"bun test/test-app-list-output-text.mjs","test:app-todo":"bun test/test-app-todo.mjs","test:doctor-analytics":"bun test/test-doctor-analytics.mjs","test:posthog-exception":"bun test/test-posthog-exception.mjs","test:cli-recovery":"bun test/test-cli-recovery.mjs","test:create-supabase-client":"bun test/test-create-supabase-client.mjs","test:onboarding-recovery":"bun test/test-onboarding-recovery.mjs","test:onboarding-progress":"bun test/test-onboarding-progress.mjs","test:onboarding-run-targets":"bun test/test-onboarding-run-targets.mjs","test:run-device-command":"bun test/test-run-device-command.mjs","test:init-app-conflict":"bun test/test-init-app-conflict.mjs","test:channel-add-exists":"bun test/test-channel-add-exists.mjs","test:wait-log":"bun test/test-wait-log.mjs","test:init-guardrails":"bun test/test-init-guardrails.mjs","test:init-upload-recovery":"bun test/test-init-upload-error-gate.mjs && bun test/test-init-upload-monorepo-recovery.mjs","test:init-replay":"bun test/test-init-replay.mjs","test:init-telemetry":"bun test/test-init-telemetry.mjs","test:capacitor-config-target":"bun test/test-capacitor-config-target.mjs","test:builder-app-id-config":"bun test/test-builder-app-id-config.mjs","test:capacitor-config-typescript7":"bun test/test-capacitor-config-typescript7.mjs","test:capacitor-config-native-import":"bun test/test-capacitor-config-native-import.mjs","test:cli-user-error-config":"bun test/test-cli-user-error-config.mjs","test:cordova-upload-mode":"bun test/test-cordova-upload-mode.mjs","test:init-monorepo-targeting":"bun run test:capacitor-config-target && bun run test:builder-app-id-config && bun run test:capacitor-config-typescript7 && bun run test:capacitor-config-native-import && bun run test:cli-user-error-config && bun test/test-init-monorepo-targeting.mjs","test:prompt-preferences":"bun test/test-prompt-preferences.mjs","test:esm-sdk":"node test/test-sdk-esm.mjs","test:auth-session":"bun test/test-auth-session.mjs","test:mcp":"node test/test-mcp.mjs","test:mcp-no-key-handshake":"node test/test-mcp-no-key-handshake.mjs","test:version-detection":"node test/test-get-installed-version.mjs","test:version-detection:setup":"./test/fixtures/setup-test-projects.sh","test:platform-paths":"bun test/test-platform-paths.mjs","test:project-type-detection":"bun test/test-project-type-detection.mjs","test:payload-split":"bun test/test-payload-split.mjs","test:macos-signing":"bun test/test-macos-signing.mjs","test:helper-dce":"bash scripts/check-helper-dce.sh","test:apple-api-import-helpers":"bun test/test-apple-api-import-helpers.mjs","test:apple-api-verify-key":"bun test/test-apple-api-verify-key.mjs","test:bundle-id-detector":"bun test/test-bundle-id-detector.mjs","test:apple-api-app-list":"bun test/test-apple-api-app-list.mjs","test:apple-api-cert-create":"bun test/test-apple-api-cert-create.mjs","test:app-verification":"bun test/test-app-verification.mjs","test:pbxproj-parser":"bun test/test-pbxproj-parser.mjs","test:manifest-path-encoding":"bun test/test-manifest-path-encoding.mjs","test:self-update":"bun test/test-self-update.mjs","test:update-prompt":"bun test/test-update-prompt.mjs","test:android-tail-engine":"bun test/test-android-tail-engine.mjs","test:android-tail-render":"bun test/test-android-tail-render.mjs","test:android-tail-routing":"bun test/test-android-tail-routing.mjs","test:dev-gate-stripped":"bun test/test-dev-gate-stripped.mjs","test:frame-fit-ios-shared":"bun test/test-frame-fit-ios-shared.mjs","test:ios-confirm-app-id":"bun test/test-ios-confirm-app-id.mjs","test:ios-create-new":"bun test/test-ios-create-new.mjs","test:ios-certificate-action":"bun test/test-ios-certificate-action.mjs","test:ios-credential-action":"bun test/test-ios-credential-action.mjs","test:ios-e2e":"bun test/test-ios-e2e.mjs","test:ios-flow-contract":"bun test/test-ios-flow-contract.mjs","test:ios-import-discovery":"bun test/test-ios-import-discovery.mjs","test:ios-import-export":"bun test/test-ios-import-export.mjs","test:ios-import-pickers":"bun test/test-ios-import-pickers.mjs","test:ios-import-recovery":"bun test/test-ios-import-recovery.mjs","test:ios-recovery":"bun test/test-ios-recovery.mjs","test:ios-resume":"bun test/test-ios-resume.mjs","test:ios-tail-handoff":"bun test/test-ios-tail-handoff.mjs","test:ios-tui-render":"bun test/test-ios-tui-render.mjs","test:p8-error":"bun test/test-p8-error.mjs","test:ios-tui-routing":"bun test/test-ios-tui-routing.mjs","test:ios-updater-sync-validation":"bun test/test-ios-updater-sync-validation.mjs","test:ios-verify-app":"bun test/test-ios-verify-app.mjs","test:ios-marketing-version":"bun test/test-ios-marketing-version.mjs","test:android-version":"bun test/test-android-version.mjs","test:platform-flow-contract":"bun test/test-platform-flow-contract.mjs","test:tail-engine-shared":"bun test/test-tail-engine-shared.mjs",test:"bun run build && bun run test:helper-dce && bun run test:version-detection:setup && bun run test:bundle && bun run test:notify-app-ready-background && bun run test:bundle-validation && bun run test:functional && bun run test:semver && bun run test:auto-bump-version && bun run test:auto-bump-ai-diff && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:cordova-upload-mode && bun run test:fail-on-incompatible && bun run test:native-dependencies && bun run test:package-json-guard && bun run test:credentials && bun run test:credentials-export && bun run test:ios-provisioning-map && bun run test:ios-provisioning-command && bun run test:credentials-validation && bun run test:android-service-account-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:build-needed && bun run test:cli-help && bun run test:build-cache-payload && bun run test:build-cancellation && bun run test:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:android-keystore-action && bun run test:android-google-play-action && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && bun run test:cli-headers && bun run test:min-cli-version && bun run test:authenticated-command-invocation && bun run test:analytics-error-category && bun run test:analytics-org-resolver && bun run test:supabase-perf && bun run test:preview-qr && bun run test:bundle-pages && bun run test:app-set-options && bun run test:mcp-analytics && bun run test:mcp-instructions && bun run test:mcp-live-update-onboarding && bun run test:mcp-stdout-guard && bun run test:mcp-platform-select && bun run test:mcp-explain-scopes && bun run test:mcp-oauth-reopen && bun run test:mcp-broker-oauth && bun run test:mcp-broker-session && bun run test:mcp-credentials-manage && bun run test:mcp-resume-prompt && bun run test:mcp-build-job && bun run test:mcp-build-tools && bun run test:app-created-source && bun run test:app-add-exists && bun run test:app-add-getting-started && bun run test:app-list-output-text && bun run test:app-todo && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:cli-recovery && bun run test:create-supabase-client && bun run test:build-platform-selection && bun run test:builder-project-discovery && bun run test:builder-app-selection && bun run test:builder-login-gate && bun run test:onboarding-recovery && bun run test:onboarding-progress && bun run test:onboarding-run-targets && bun run test:run-device-command && bun run test:init-monorepo-targeting && bun run test:init-app-conflict && bun run test:channel-list && bun run test:channel-add-exists && bun run test:wait-log && bun run test:init-guardrails && bun run test:init-upload-recovery && bun run test:init-replay && bun run test:init-telemetry && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:mcp-no-key-handshake && bun run test:auth-session && bun run test:version-detection && bun run test:platform-paths && bun run test:project-type-detection && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:asc-key-protocol && bun run test:apple-api-import-helpers && bun run test:apple-api-verify-key && bun run test:bundle-id-detector && bun run test:apple-api-app-list && bun run test:app-verification && bun run test:pbxproj-parser && bun run test:ai-log-capture && bun run test:ai-analyze-flow && bun run test:cicd-failure-help && bun run test:ai-sse-parser && bun run test:ai-render-markdown && bun run test:ai-stream-markdown && bun run test:ai-onboarding-mode && bun run test:ai-fit && bun run test:platform-layout && bun run test:frame-fit && bun run test:onboarding-min-size && bun run test:min-size-gate && bun run test:shell-size-gate && bun run test:build-log-sanitize && bun run test:build-output-viewport && bun run test:diff-viewer-viewport && bun run test:build-complete-exit && bun run test:ai-analyze-stream && bun run test:support-mailto && bun run test:support-redact && bun run test:support-internal-log && bun run test:support-help-menu && bun run test:support-contact && bun run test:support-upload-prompt && bun run test:support-bundle-files && bun run test:self-update && bun run test:update-prompt && bun run test:apple-api-cert-create && bun run test:android-tail-engine && bun run test:android-tail-render && bun run test:android-tail-routing && bun run test:dev-gate-stripped && bun run test:frame-fit-ios-shared && bun run test:ios-confirm-app-id && bun run test:ios-create-new && bun run test:ios-certificate-action && bun run test:ios-credential-action && bun run test:ios-e2e && bun run test:ios-flow-contract && bun run test:ios-import-discovery && bun run test:ios-import-export && bun run test:ios-import-pickers && bun run test:ios-import-recovery && bun run test:ios-recovery && bun run test:ios-resume && bun run test:ios-tail-handoff && bun run test:ios-tui-render && bun run test:p8-error && bun run test:ios-tui-routing && bun run test:ios-updater-sync-validation && bun run test:ios-verify-app && bun run test:ios-marketing-version && bun run test:android-version && bun run test:platform-flow-contract && bun run test:tail-engine-shared && bun run test:prescan && bun run test:android-reporting-api && bun run test:android-gcp && bun run test:android-app-verification && bun run test:android-rename && bun run test:appflow-auth && bun run test:appflow-api-map && bun run test:appflow-validate && bun run test:appflow-flow && bun run test:appflow-gapfill && bun run test:appflow-engine && bun run test:appflow-tail && bun run test:appflow-fetch && bun run test:appflow-sa-decode && bun run test:app-permission-helper && bun run test:2fa-compliance-network && bun run test:organization-set-api-host && bun run test:trial-warning && bun run test:plan-validation","test:build-platform-selection":"bun test/test-build-platform-selection.mjs","test:builder-project-discovery":"bun test/test-builder-project-discovery.mjs","test:builder-app-selection":"bun test/test-builder-app-selection.mjs","test:builder-login-gate":"bun test/test-builder-login-gate.mjs","test:ai-log-capture":"bun test/test-ai-log-capture.mjs","test:ai-analyze-flow":"bun test/test-ai-analyze-flow.mjs","test:cicd-failure-help":"bun test/test-cicd-failure-help.mjs","test:ai-analyze-stream":"bun test/test-ai-analyze-stream.mjs","test:ai-sse-parser":"bun test/test-ai-sse-parser.mjs","test:ai-render-markdown":"bun test/test-ai-render-markdown.mjs","test:ai-onboarding-mode":"bun test/test-ai-onboarding-mode.mjs","test:ai-fit":"bun test/test-ai-fit.mjs","test:platform-layout":"bun test/test-platform-layout.mjs","test:frame-fit":"bun test/run-frame-fit.mjs","test:onboarding-min-size":"bun test/test-onboarding-min-size.mjs","test:min-size-gate":"bun test/test-min-size-gate.mjs","test:shell-size-gate":"bun test/test-shell-size-gate.mjs","test:build-log-sanitize":"bun test/test-build-log-sanitize.mjs","test:build-output-viewport":"bun test/test-build-output-viewport.mjs","test:diff-viewer-viewport":"bun test/test-diff-viewer-viewport.mjs","test:build-complete-exit":"bun test/test-build-complete-exit.mjs","test:ai-stream-markdown":"bun test/test-ai-stream-markdown.mjs","test:support-mailto":"bun test/test-support-mailto.mjs","test:support-redact":"bun test/test-support-redact.mjs","test:support-internal-log":"bun test/test-support-internal-log.mjs","test:support-help-menu":"bun test/test-support-help-menu.mjs","test:support-contact":"bun test/test-support-contact.mjs","test:support-upload-prompt":"bun test/test-support-upload-prompt.mjs","test:support-bundle-files":"bun test/test-support-bundle-files.mjs","test:mcp-live-update-onboarding":"bun test/test-mcp-live-update-onboarding.mjs","test:app-set-options":"bun test/test-app-set-options.mjs && bun test/test-app-list-options.mjs","test:android-reporting-api":"bun test/test-android-reporting-api.mjs","test:android-gcp":"bun test/test-android-gcp.mjs","test:android-app-verification":"bun test/test-android-app-verification.mjs","test:android-rename":"bun test/test-android-rename.mjs","test:appflow-auth":"bun test/test-appflow-auth.mjs","test:appflow-api-map":"bun test/test-appflow-api-map.mjs","test:appflow-validate":"bun test/test-appflow-validate.mjs","test:appflow-flow":"bun test/test-appflow-flow.mjs","test:appflow-gapfill":"bun test/test-appflow-gapfill.mjs","test:appflow-engine":"bun test/test-appflow-engine.mjs","test:appflow-tail":"bun test/test-appflow-tail.mjs","test:appflow-fetch":"bun test/test-appflow-fetch.mjs","test:appflow-sa-decode":"bun test/test-appflow-sa-decode.mjs","test:app-permission-helper":"bun test/test-app-permission-helper.mjs","test:2fa-compliance-network":"bun test/test-2fa-compliance-network.mjs","test:organization-set-api-host":"bun test/test-organization-set-api-host.mjs","test:trial-warning":"bun test/test-trial-warning.mjs","test:plan-validation":"bun test/test-plan-validation.mjs","test:auto-bump-version":"bun test/test-auto-bump-version.mjs","test:auto-bump-ai-diff":"bun test/test-auto-bump-ai-diff.mjs","test:ios-provisioning-map":"bun test/test-ios-provisioning-map.mjs","test:ios-provisioning-command":"bun test/test-ios-provisioning-command.mjs","test:channel-list":"bun test/test-channel-list.mjs"},dependencies:{"@inkjs/ui":"^2.0.0","@manypkg/tools":"^2.1.2","@rrweb/types":"^2.1.1","@standard-schema/spec":"^1.1.0","@xmldom/xmldom":"^0.9.10","@xterm/addon-serialize":"^0.14.0","@xterm/headless":"^6.0.0","agent-cli-detector":"^0.1.6","happy-dom":"^20.11.0",ink:"^7.1.1","ink-spinner":"^5.0.0",jsonwebtoken:"^9.0.3","node-forge":"^1.4.0",qrcode:"^1.5.4",react:"^19.2.8","rrweb-snapshot":"^2.1.1","string-width":"^8.2.2",typescript:"6.0.3",zod:"^4.5.4"},optionalDependencies:{"@capgo/cli-helper-darwin-arm64":"^1.1.1","@capgo/cli-helper-darwin-x64":"^1.1.1","node-pty":"^1.1.0"},devDependencies:{"@antfu/eslint-config":"^9.2.0","@bradenmacdonald/s3-lite-client":"npm:@jsr/bradenmacdonald__s3-lite-client@0.9.6","@capacitor/cli":"^8.4.2","@capgo/find-package-manager":"^0.0.18","@clack/prompts":"^1.7.0","@modelcontextprotocol/client":"^2.0.0-beta.5","@modelcontextprotocol/server":"^2.0.0-beta.5","@sauber/table":"npm:@jsr/sauber__table","@std/semver":"npm:@jsr/std__semver@1.0.8","@supabase/supabase-js":"^2.110.8","@tanstack/intent":"^0.3.6","@types/adm-zip":"^0.5.8","@types/jsonwebtoken":"^9.0.10","@types/node":"^26.1.1","@types/node-forge":"^1.3.14","@types/prettyjson":"^0.0.33","@types/qrcode":"^1.5.6","@types/react":"^19.2.17","@types/tmp":"^0.2.6","@types/ws":"^8.18.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@vercel/ncc":"^0.44.1","@vue/compiler-dom":"3.5.40","@xterm/headless":"^6.0.0","adm-zip":"^0.6.0","ci-info":"^4.4.0",commander:"^15.0.0",eslint:"^10.7.0","git-format-staged":"4.0.2",husky:"^9.1.7","is-wsl":"^3.1.1",micromatch:"^4.0.8",open:"^11.0.0",oxlint:"^1.75.0",partysocket:"^1.3.0",prettyjson:"^1.2.5",tmp:"^0.2.7","tus-js-client":"^4.3.1",ws:"^8.21.1"}}});var ZD;var Z6=T(()=>{ZD=class ZD extends Error{context;constructor(D,$){super(D);this.name="CliUserError",this.context=$}}});import{platform as bC}from"node:os";import{version as PC}from"node:process";function WH(D){YH=D}function uC(D){for(let $=0;$<D.length;$++)if(D.charCodeAt($)>255)return!1;return!0}function QH(D){if(D.toLowerCase()==="x-capgo-log-token")return"Build log token is missing. Re-run the build command or pass a valid log token.";return"Capgo API key is missing. Run `npx -y @capgo/cli@latest login` or pass `--apikey`."}function kC(D){if(D.toLowerCase()==="x-capgo-log-token")return"Build log token contains invalid characters (only ASCII is allowed). Re-run the build command to get a fresh token.";if(D.toLowerCase()==="authorization")return"Authorization header contains invalid characters (only ASCII is allowed). Check your Capgo API key or Supabase anon key configuration.";return"Capgo API key contains invalid characters (only ASCII is allowed). Copy the key from the Capgo dashboard."}function qF(D,$){if($===void 0||$===null){if(GF.has(D.toLowerCase()))throw new ZD(QH(D));throw new ZD(`HTTP header "${D}" is missing or invalid.`)}if(typeof $!=="string"){if(GF.has(D.toLowerCase()))throw new ZD(QH(D));throw new ZD(`HTTP header "${D}" is missing or invalid.`)}if(!uC($)){if(GF.has(D.toLowerCase()))throw new ZD(kC(D));throw new ZD(`HTTP header "${D}" contains invalid characters (only ASCII is allowed).`)}return $}function J0(D){let $={capgo_api:CC,"x-cli-version":t$.version,"x-cli-command":YH,"x-cli-node":PC,"x-cli-os":bC()};if(D)for(let[U,I]of Object.entries(D))$[U]=qF(U,I);return $}var CC="2025-10-01",YH="",GF;var d3=T(()=>{A1();Z6();GF=new Set(["authorization","capgkey","x-capgo-log-token"])});import{existsSync as V$}from"fs";var v2=(D=".",$="unknown")=>{let U=`${D}/bun.lockb`,I=`${D}/bun.lock`,F=`${D}/pnpm-lock.yaml`,J=`${D}/shrinkwrap.yaml`,X=`${D}/yarn.lock`,Q=`${D}/package-lock.json`,Y=`${D}/npm-shrinkwrap.json`;if(V$(U)||V$(I))return"bun";if(V$(F)||V$(J))return"pnpm";if(V$(X))return"yarn";if(V$(Q)||V$(Y))return"npm";return $},c3=(D=v2(),$=!1)=>{switch(D){case"bun":return $?"bun install":"install";case"pnpm":return $?"pnpm install":"install";case"yarn":return $?"yarn install":"install";case"npm":return $?"npm install":"install";case"unknown":return $?"unknown unknown":"unknown";default:return $?"npm install":"install"}},BH=(D=".",$="npx")=>{let U=`${D}/bun.lockb`,I=`${D}/bun.lock`,F=`${D}/pnpm-lock.yaml`,J=`${D}/shrinkwrap.yaml`,X=`${D}/yarn.lock`,Q=`${D}/package-lock.json`,Y=`${D}/npm-shrinkwrap.json`;if(V$(U)||V$(I))return"bunx";if(V$(F)||V$(J))return"pnpm exec";if(V$(X))return"yarn dlx";if(V$(Q)||V$(Y))return"npx";return $};var KH=()=>{};var GH,qH=(D)=>{return D===12288||D>=65281&&D<=65376||D>=65504&&D<=65510},HH=(D)=>{return D===8987||D===9001||D>=12272&&D<=12287||D>=12289&&D<=12350||D>=12441&&D<=12543||D>=12549&&D<=12591||D>=12593&&D<=12686||D>=12688&&D<=12771||D>=12783&&D<=12830||D>=12832&&D<=12871||D>=12880&&D<=19903||D>=65040&&D<=65049||D>=65072&&D<=65106||D>=65108&&D<=65126||D>=65128&&D<=65131||D>=127488&&D<=127490||D>=127504&&D<=127547||D>=127552&&D<=127560||D>=131072&&D<=196605||D>=196608&&D<=262141};var NH=T(()=>{GH=(()=>{let D=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return($)=>{let U=0;D.lastIndex=0;while(D.test($))U+=1;return $.length-U}})()});var _C,xC,LH,gC,zH,fC,yC,mC,wH=(D,$={},U={})=>{let I=$.limit??1/0,F=$.ellipsis??"",J=$?.ellipsisWidth??(F?wH(F,mC,U).width:0),X=0,Q=U.controlWidth??0,Y=U.tabWidth??8,W=U.emojiWidth??2,B=2,K=U.regularWidth??1,q=U.wideWidth??2,H=[[fC,K],[_C,0],[xC,Q],[gC,Y],[zH,W],[LH,q]],G=0,L=0,N=D.length,M=0,Z=!1,z=N,v=Math.max(0,I-J),A=0,V=0,b=0,y=0;D:while(!0){if(V>A||L>=N&&L>G){let _=D.slice(A,V)||D.slice(G,L);M=0;for(let n of _.replaceAll(yC,"")){let m=n.codePointAt(0)||0;if(qH(m))y=2;else if(HH(m))y=q;else y=K;if(b+y>v)z=Math.min(z,Math.max(A,G)+M);if(b+y>I){Z=!0;break D}M+=n.length,b+=y}A=V=0}if(L>=N)break D;for(let _=0,n=H.length;_<n;_++){let[m,UD]=H[_];if(m.lastIndex=L,m.test(D)){if(M=m===LH?GH(D.slice(L,m.lastIndex)):m===zH?1:m.lastIndex-L,y=M*UD,b+y>v)z=Math.min(z,L+Math.floor((v-b)/UD));if(b+y>I){Z=!0;break D}b+=y,A=G,V=L,L=G=m.lastIndex;continue D}}L+=1}return{width:Z?v:b,index:Z?z:N,truncated:Z,ellipsed:Z&&I>=J}},ZH;var MH=T(()=>{NH();_C=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,xC=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,LH=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,gC=/\t{1,1000}/y,zH=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,fC=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,yC=/\p{M}+/gu,mC={limit:1/0,ellipsis:""},ZH=wH});var hC,nC=(D,$={})=>{return ZH(D,hC,$).width},X0;var HF=T(()=>{MH();hC={limit:1/0,ellipsis:"",ellipsisWidth:0},X0=nC});function g0(D,$,U){return String(D).normalize().split(pC).map((I)=>cC(I,$,U)).join(`
1
+ import{createRequire as SC}from"node:module";var OC=Object.create;var{getPrototypeOf:EC,defineProperty:E2,getOwnPropertyNames:IH,getOwnPropertyDescriptor:vC}=Object,JH=Object.prototype.hasOwnProperty;function XH(D){return this[D]}var VC,jC,h$=(D,$,U)=>{var I=D!=null&&typeof D==="object";if(I){var F=$?VC??=new WeakMap:jC??=new WeakMap,J=F.get(D);if(J)return J}U=D!=null?OC(EC(D)):{};let X=$||!D||!D.__esModule?E2(U,"default",{value:D,enumerable:!0}):U;for(let Q of IH(D))if(!JH.call(X,Q))E2(X,Q,{get:XH.bind(D,Q),enumerable:!0});if(I)F.set(D,X);return X},x0=(D)=>{var $=(FH??=new WeakMap).get(D),U;if($)return $;if($=E2({},"__esModule",{value:!0}),D&&typeof D==="object"||typeof D==="function"){for(var I of IH(D))if(!JH.call($,I))E2($,I,{get:XH.bind(D,I),enumerable:!(U=vC(D,I))||U.enumerable})}return FH.set(D,$),$},FH,C=(D,$)=>()=>($||D(($={exports:{}}).exports,$),$.exports);var AC=(D)=>D;function RC(D,$){this[D]=AC.bind(null,$)}var X$=(D,$)=>{for(var U in $)E2(D,U,{get:$[U],enumerable:!0,configurable:!0,set:RC.bind($,U)})};var T=(D,$)=>()=>(D&&($=D(D=0)),$);var t=SC(import.meta.url);var t$;var A1=T(()=>{t$={name:"@capgo/cli",type:"module",version:"8.67.0",description:"A CLI to upload to capgo servers",author:"Martin martin@capgo.app",license:"Apache 2.0",homepage:"https://github.com/Cap-go/capgo/tree/main/cli#readme",repository:{type:"git",url:"https://github.com/Cap-go/capgo.app",directory:"cli"},bugs:{url:"https://github.com/Cap-go/capgo/issues"},keywords:["appflow alternative","ionic","capacitor","auto update","live update","capgo","cli","upload","capgo-cli","sdk","tanstack-intent"],exports:{".":{import:"./dist/index.js",require:"./dist/index.js"},"./sdk":{types:"./dist/src/sdk.d.ts",import:"./dist/src/sdk.js"}},main:"dist/index.js",types:"dist/src/index.d.ts",bin:{capgo:"dist/index.js"},files:["!skills/_artifacts","dist","skills"],engines:{npm:">=8.0.0",node:">=20.0.0"},scripts:{build:"tsc && bun build.mjs",dev:"NODE_ENV=development ncc build","no-debug":"node dist/index.js","dev-build":"SUPA_DB=development ncc build",pack:"pkg",types:"bunx --bun supabase gen types typescript --project-id=xvwzpoazmxkqosrdewyv > src/types/supabase.types.ts",typecheck:"tsgo --project tsconfig.tsgo.json --noEmit",lint:"bun run lint:ox","lint:ox":"oxlint --config ../.oxlintrc.json src","lint:fix":"oxlint --config ../.oxlintrc.json --fix src","check-posix-paths":"node test/check-posix-paths.js","generate-docs":"node dist/index.js generate-docs README.md","test:notify-app-ready-background":"bun test ./test/test-notify-app-ready-background.mjs ./test/test-background-check-shutdown.mjs","test:bundle":"bun test/test-bundle.mjs","test:bundle-validation":"bun test test/bundle/","test:prescan":"bun test test/prescan/","test:functional":"bun test/test-functional.mjs","test:semver":"bun test/test-semver-validation.mjs","test:version-edge-cases":"bun test/test-version-validation.mjs","test:regex":"bun test/test-regex-validation.mjs","test:upload":"bun test/test-upload-validation.mjs","test:fail-on-incompatible":"bun test/test-fail-on-incompatible.mjs","test:native-dependencies":"bun test/test-native-dependencies.mjs && bun test/test-get-remote-dependencies.mjs","test:package-json-guard":"bun test/test-package-json-guard.mjs","test:credentials":"bun test/test-credentials.mjs","test:credentials-export":"bun test/test-credentials-export.mjs","test:asc-key-protocol":"bun test/test-asc-key-protocol.mjs","test:credentials-validation":"bun test/test-credentials-validation.mjs","test:android-service-account-validation":"bun test/test-android-service-account-validation.mjs","test:build-zip-filter":"bun test/test-build-zip-filter.mjs","test:checksum":"bun test/test-checksum-algorithm.mjs","test:build-needed":"bun test/test-build-needed.mjs","test:cli-help":"bun test/test-cli-help.mjs","test:build-cache-payload":"bun test/test-build-cache-payload.mjs","test:build-cancellation":"bun test/test-build-cancellation.mjs","test:ci-prompts":"bun test/test-ci-prompts.mjs","test:ci-secrets":"bun test/test-ci-secrets.mjs","test:android-onboarding-progress":"bun test/test-android-onboarding-progress.mjs && bun test/test-android-select-guard.mjs","test:android-keystore-action":"bun test/test-android-keystore-action.mjs","test:android-google-play-action":"bun test/test-android-google-play-action.mjs","test:onboarding-telemetry":"bun test/test-onboarding-telemetry.mjs","test:v2-event-migration":"bun test/test-v2-event-migration.mjs","test:analytics":"bun test/test-analytics.mjs","test:cli-headers":"bun test/test-cli-headers.mjs","test:min-cli-version":"bun test/test-min-cli-version.mjs","test:authenticated-command-invocation":"bun test/test-authenticated-command-invocation.mjs","test:analytics-error-category":"bun test/test-analytics-error-category.mjs","test:analytics-org-resolver":"bun test/test-analytics-org-resolver.mjs","test:supabase-perf":"bun test/test-supabase-perf.mjs","test:preview-qr":"bun test/test-preview-qr.mjs","test:bundle-pages":"bun test test/test-bundle-pages.test.ts","test:mcp-analytics":"bun test/test-mcp-analytics.mjs","test:mcp-instructions":"bun test/test-mcp-instructions.mjs","test:mcp-stdout-guard":"bun test/test-mcp-stdout-guard.mjs","test:mcp-platform-select":"bun test/test-mcp-platform-select.mjs","test:mcp-explain-scopes":"bun test/test-mcp-explain-scopes.mjs","test:mcp-oauth-reopen":"bun test/test-mcp-oauth-reopen.mjs","test:mcp-broker-oauth":"bun test/test-mcp-broker-oauth.mjs","test:mcp-broker-session":"bun test/test-mcp-broker-session.mjs","test:mcp-credentials-manage":"bun test/test-mcp-credentials-manage.mjs","test:mcp-resume-prompt":"bun test/test-mcp-resume-prompt.mjs","test:mcp-build-job":"bun test/test-mcp-build-job.mjs","test:mcp-build-tools":"bun test/test-mcp-build-tools.mjs","test:app-created-source":"bun test/test-app-created-source.mjs","test:app-add-exists":"bun test/test-app-add-exists.mjs","test:app-add-getting-started":"bun test/test-app-add-getting-started.mjs","test:app-list-output-text":"bun test/test-app-list-output-text.mjs","test:app-todo":"bun test/test-app-todo.mjs","test:doctor-analytics":"bun test/test-doctor-analytics.mjs","test:posthog-exception":"bun test/test-posthog-exception.mjs","test:cli-recovery":"bun test/test-cli-recovery.mjs","test:create-supabase-client":"bun test/test-create-supabase-client.mjs","test:onboarding-recovery":"bun test/test-onboarding-recovery.mjs","test:onboarding-progress":"bun test/test-onboarding-progress.mjs","test:onboarding-run-targets":"bun test/test-onboarding-run-targets.mjs","test:run-device-command":"bun test/test-run-device-command.mjs","test:init-app-conflict":"bun test/test-init-app-conflict.mjs","test:channel-add-exists":"bun test/test-channel-add-exists.mjs","test:wait-log":"bun test/test-wait-log.mjs","test:init-guardrails":"bun test/test-init-guardrails.mjs","test:init-upload-recovery":"bun test/test-init-upload-error-gate.mjs && bun test/test-init-upload-monorepo-recovery.mjs","test:init-replay":"bun test/test-init-replay.mjs","test:init-telemetry":"bun test/test-init-telemetry.mjs","test:capacitor-config-target":"bun test/test-capacitor-config-target.mjs","test:builder-app-id-config":"bun test/test-builder-app-id-config.mjs","test:capacitor-config-typescript7":"bun test/test-capacitor-config-typescript7.mjs","test:capacitor-config-native-import":"bun test/test-capacitor-config-native-import.mjs","test:cli-user-error-config":"bun test/test-cli-user-error-config.mjs","test:cordova-upload-mode":"bun test/test-cordova-upload-mode.mjs","test:init-monorepo-targeting":"bun run test:capacitor-config-target && bun run test:builder-app-id-config && bun run test:capacitor-config-typescript7 && bun run test:capacitor-config-native-import && bun run test:cli-user-error-config && bun test/test-init-monorepo-targeting.mjs","test:prompt-preferences":"bun test/test-prompt-preferences.mjs","test:esm-sdk":"node test/test-sdk-esm.mjs","test:auth-session":"bun test/test-auth-session.mjs","test:mcp":"node test/test-mcp.mjs","test:mcp-no-key-handshake":"node test/test-mcp-no-key-handshake.mjs","test:version-detection":"node test/test-get-installed-version.mjs","test:version-detection:setup":"./test/fixtures/setup-test-projects.sh","test:platform-paths":"bun test/test-platform-paths.mjs","test:project-type-detection":"bun test/test-project-type-detection.mjs","test:payload-split":"bun test/test-payload-split.mjs","test:macos-signing":"bun test/test-macos-signing.mjs","test:helper-dce":"bash scripts/check-helper-dce.sh","test:apple-api-import-helpers":"bun test/test-apple-api-import-helpers.mjs","test:apple-api-verify-key":"bun test/test-apple-api-verify-key.mjs","test:bundle-id-detector":"bun test/test-bundle-id-detector.mjs","test:apple-api-app-list":"bun test/test-apple-api-app-list.mjs","test:apple-api-cert-create":"bun test/test-apple-api-cert-create.mjs","test:app-verification":"bun test/test-app-verification.mjs","test:pbxproj-parser":"bun test/test-pbxproj-parser.mjs","test:manifest-path-encoding":"bun test/test-manifest-path-encoding.mjs","test:self-update":"bun test/test-self-update.mjs","test:update-prompt":"bun test/test-update-prompt.mjs","test:android-tail-engine":"bun test/test-android-tail-engine.mjs","test:android-tail-render":"bun test/test-android-tail-render.mjs","test:android-tail-routing":"bun test/test-android-tail-routing.mjs","test:dev-gate-stripped":"bun test/test-dev-gate-stripped.mjs","test:frame-fit-ios-shared":"bun test/test-frame-fit-ios-shared.mjs","test:ios-confirm-app-id":"bun test/test-ios-confirm-app-id.mjs","test:ios-create-new":"bun test/test-ios-create-new.mjs","test:ios-certificate-action":"bun test/test-ios-certificate-action.mjs","test:ios-profile-action":"bun test/test-ios-profile-action.mjs","test:ios-credential-action":"bun test/test-ios-credential-action.mjs","test:ios-e2e":"bun test/test-ios-e2e.mjs","test:ios-flow-contract":"bun test/test-ios-flow-contract.mjs","test:ios-import-discovery":"bun test/test-ios-import-discovery.mjs","test:ios-import-export":"bun test/test-ios-import-export.mjs","test:ios-import-pickers":"bun test/test-ios-import-pickers.mjs","test:ios-import-recovery":"bun test/test-ios-import-recovery.mjs","test:ios-recovery":"bun test/test-ios-recovery.mjs","test:ios-resume":"bun test/test-ios-resume.mjs","test:ios-tail-handoff":"bun test/test-ios-tail-handoff.mjs","test:ios-tui-render":"bun test/test-ios-tui-render.mjs","test:p8-error":"bun test/test-p8-error.mjs","test:ios-tui-routing":"bun test/test-ios-tui-routing.mjs","test:ios-updater-sync-validation":"bun test/test-ios-updater-sync-validation.mjs","test:ios-verify-app":"bun test/test-ios-verify-app.mjs","test:ios-marketing-version":"bun test/test-ios-marketing-version.mjs","test:android-version":"bun test/test-android-version.mjs","test:platform-flow-contract":"bun test/test-platform-flow-contract.mjs","test:tail-engine-shared":"bun test/test-tail-engine-shared.mjs",test:"bun run build && bun run test:helper-dce && bun run test:version-detection:setup && bun run test:bundle && bun run test:notify-app-ready-background && bun run test:bundle-validation && bun run test:functional && bun run test:semver && bun run test:auto-bump-version && bun run test:auto-bump-ai-diff && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:cordova-upload-mode && bun run test:fail-on-incompatible && bun run test:native-dependencies && bun run test:package-json-guard && bun run test:credentials && bun run test:credentials-export && bun run test:ios-provisioning-map && bun run test:ios-provisioning-command && bun run test:credentials-validation && bun run test:android-service-account-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:build-needed && bun run test:cli-help && bun run test:build-cache-payload && bun run test:build-cancellation && bun run test:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:android-keystore-action && bun run test:android-google-play-action && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && bun run test:cli-headers && bun run test:min-cli-version && bun run test:authenticated-command-invocation && bun run test:analytics-error-category && bun run test:analytics-org-resolver && bun run test:supabase-perf && bun run test:preview-qr && bun run test:bundle-pages && bun run test:app-set-options && bun run test:mcp-analytics && bun run test:mcp-instructions && bun run test:mcp-live-update-onboarding && bun run test:mcp-stdout-guard && bun run test:mcp-platform-select && bun run test:mcp-explain-scopes && bun run test:mcp-oauth-reopen && bun run test:mcp-broker-oauth && bun run test:mcp-broker-session && bun run test:mcp-credentials-manage && bun run test:mcp-resume-prompt && bun run test:mcp-build-job && bun run test:mcp-build-tools && bun run test:app-created-source && bun run test:app-add-exists && bun run test:app-add-getting-started && bun run test:app-list-output-text && bun run test:app-todo && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:cli-recovery && bun run test:create-supabase-client && bun run test:build-platform-selection && bun run test:builder-project-discovery && bun run test:builder-app-selection && bun run test:builder-login-gate && bun run test:onboarding-recovery && bun run test:onboarding-progress && bun run test:onboarding-run-targets && bun run test:run-device-command && bun run test:init-monorepo-targeting && bun run test:init-app-conflict && bun run test:channel-list && bun run test:channel-add-exists && bun run test:wait-log && bun run test:init-guardrails && bun run test:init-upload-recovery && bun run test:init-replay && bun run test:init-telemetry && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:mcp-no-key-handshake && bun run test:auth-session && bun run test:version-detection && bun run test:platform-paths && bun run test:project-type-detection && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:asc-key-protocol && bun run test:apple-api-import-helpers && bun run test:apple-api-verify-key && bun run test:bundle-id-detector && bun run test:apple-api-app-list && bun run test:app-verification && bun run test:pbxproj-parser && bun run test:ai-log-capture && bun run test:ai-analyze-flow && bun run test:cicd-failure-help && bun run test:ai-sse-parser && bun run test:ai-render-markdown && bun run test:ai-stream-markdown && bun run test:ai-onboarding-mode && bun run test:ai-fit && bun run test:platform-layout && bun run test:frame-fit && bun run test:onboarding-min-size && bun run test:min-size-gate && bun run test:shell-size-gate && bun run test:build-log-sanitize && bun run test:build-output-viewport && bun run test:diff-viewer-viewport && bun run test:build-complete-exit && bun run test:ai-analyze-stream && bun run test:support-mailto && bun run test:support-redact && bun run test:support-internal-log && bun run test:support-help-menu && bun run test:support-contact && bun run test:support-upload-prompt && bun run test:support-bundle-files && bun run test:self-update && bun run test:update-prompt && bun run test:apple-api-cert-create && bun run test:android-tail-engine && bun run test:android-tail-render && bun run test:android-tail-routing && bun run test:dev-gate-stripped && bun run test:frame-fit-ios-shared && bun run test:ios-confirm-app-id && bun run test:ios-create-new && bun run test:ios-certificate-action && bun run test:ios-profile-action && bun run test:ios-credential-action && bun run test:ios-e2e && bun run test:ios-flow-contract && bun run test:ios-import-discovery && bun run test:ios-import-export && bun run test:ios-import-pickers && bun run test:ios-import-recovery && bun run test:ios-recovery && bun run test:ios-resume && bun run test:ios-tail-handoff && bun run test:ios-tui-render && bun run test:p8-error && bun run test:ios-tui-routing && bun run test:ios-updater-sync-validation && bun run test:ios-verify-app && bun run test:ios-marketing-version && bun run test:android-version && bun run test:platform-flow-contract && bun run test:tail-engine-shared && bun run test:prescan && bun run test:android-reporting-api && bun run test:android-gcp && bun run test:android-app-verification && bun run test:android-rename && bun run test:appflow-auth && bun run test:appflow-api-map && bun run test:appflow-validate && bun run test:appflow-flow && bun run test:appflow-gapfill && bun run test:appflow-engine && bun run test:appflow-tail && bun run test:appflow-fetch && bun run test:appflow-sa-decode && bun run test:app-permission-helper && bun run test:2fa-compliance-network && bun run test:organization-set-api-host && bun run test:trial-warning && bun run test:plan-validation","test:build-platform-selection":"bun test/test-build-platform-selection.mjs","test:builder-project-discovery":"bun test/test-builder-project-discovery.mjs","test:builder-app-selection":"bun test/test-builder-app-selection.mjs","test:builder-login-gate":"bun test/test-builder-login-gate.mjs","test:ai-log-capture":"bun test/test-ai-log-capture.mjs","test:ai-analyze-flow":"bun test/test-ai-analyze-flow.mjs","test:cicd-failure-help":"bun test/test-cicd-failure-help.mjs","test:ai-analyze-stream":"bun test/test-ai-analyze-stream.mjs","test:ai-sse-parser":"bun test/test-ai-sse-parser.mjs","test:ai-render-markdown":"bun test/test-ai-render-markdown.mjs","test:ai-onboarding-mode":"bun test/test-ai-onboarding-mode.mjs","test:ai-fit":"bun test/test-ai-fit.mjs","test:platform-layout":"bun test/test-platform-layout.mjs","test:frame-fit":"bun test/run-frame-fit.mjs","test:onboarding-min-size":"bun test/test-onboarding-min-size.mjs","test:min-size-gate":"bun test/test-min-size-gate.mjs","test:shell-size-gate":"bun test/test-shell-size-gate.mjs","test:build-log-sanitize":"bun test/test-build-log-sanitize.mjs","test:build-output-viewport":"bun test/test-build-output-viewport.mjs","test:diff-viewer-viewport":"bun test/test-diff-viewer-viewport.mjs","test:build-complete-exit":"bun test/test-build-complete-exit.mjs","test:ai-stream-markdown":"bun test/test-ai-stream-markdown.mjs","test:support-mailto":"bun test/test-support-mailto.mjs","test:support-redact":"bun test/test-support-redact.mjs","test:support-internal-log":"bun test/test-support-internal-log.mjs","test:support-help-menu":"bun test/test-support-help-menu.mjs","test:support-contact":"bun test/test-support-contact.mjs","test:support-upload-prompt":"bun test/test-support-upload-prompt.mjs","test:support-bundle-files":"bun test/test-support-bundle-files.mjs","test:mcp-live-update-onboarding":"bun test/test-mcp-live-update-onboarding.mjs","test:app-set-options":"bun test/test-app-set-options.mjs && bun test/test-app-list-options.mjs","test:android-reporting-api":"bun test/test-android-reporting-api.mjs","test:android-gcp":"bun test/test-android-gcp.mjs","test:android-app-verification":"bun test/test-android-app-verification.mjs","test:android-rename":"bun test/test-android-rename.mjs","test:appflow-auth":"bun test/test-appflow-auth.mjs","test:appflow-api-map":"bun test/test-appflow-api-map.mjs","test:appflow-validate":"bun test/test-appflow-validate.mjs","test:appflow-flow":"bun test/test-appflow-flow.mjs","test:appflow-gapfill":"bun test/test-appflow-gapfill.mjs","test:appflow-engine":"bun test/test-appflow-engine.mjs","test:appflow-tail":"bun test/test-appflow-tail.mjs","test:appflow-fetch":"bun test/test-appflow-fetch.mjs","test:appflow-sa-decode":"bun test/test-appflow-sa-decode.mjs","test:app-permission-helper":"bun test/test-app-permission-helper.mjs","test:2fa-compliance-network":"bun test/test-2fa-compliance-network.mjs","test:organization-set-api-host":"bun test/test-organization-set-api-host.mjs","test:trial-warning":"bun test/test-trial-warning.mjs","test:plan-validation":"bun test/test-plan-validation.mjs","test:auto-bump-version":"bun test/test-auto-bump-version.mjs","test:auto-bump-ai-diff":"bun test/test-auto-bump-ai-diff.mjs","test:ios-provisioning-map":"bun test/test-ios-provisioning-map.mjs","test:ios-provisioning-command":"bun test/test-ios-provisioning-command.mjs","test:channel-list":"bun test/test-channel-list.mjs"},dependencies:{"@inkjs/ui":"^2.0.0","@manypkg/tools":"^2.1.2","@rrweb/types":"^2.1.1","@standard-schema/spec":"^1.1.0","@xmldom/xmldom":"^0.9.10","@xterm/addon-serialize":"^0.14.0","@xterm/headless":"^6.0.0","agent-cli-detector":"^0.1.6","happy-dom":"^20.11.0",ink:"^7.1.1","ink-spinner":"^5.0.0",jsonwebtoken:"^9.0.3","node-forge":"^1.4.0",qrcode:"^1.5.4",react:"^19.2.8","rrweb-snapshot":"^2.1.1","string-width":"^8.2.2",typescript:"6.0.3",zod:"^4.5.4"},optionalDependencies:{"@capgo/cli-helper-darwin-arm64":"^1.1.1","@capgo/cli-helper-darwin-x64":"^1.1.1","node-pty":"^1.1.0"},devDependencies:{"@antfu/eslint-config":"^9.2.0","@bradenmacdonald/s3-lite-client":"npm:@jsr/bradenmacdonald__s3-lite-client@0.9.6","@capacitor/cli":"^8.4.2","@capgo/find-package-manager":"^0.0.18","@clack/prompts":"^1.7.0","@modelcontextprotocol/client":"^2.0.0-beta.5","@modelcontextprotocol/server":"^2.0.0-beta.5","@sauber/table":"npm:@jsr/sauber__table","@std/semver":"npm:@jsr/std__semver@1.0.8","@supabase/supabase-js":"^2.110.8","@tanstack/intent":"^0.3.6","@types/adm-zip":"^0.5.8","@types/jsonwebtoken":"^9.0.10","@types/node":"^26.1.1","@types/node-forge":"^1.3.14","@types/prettyjson":"^0.0.33","@types/qrcode":"^1.5.6","@types/react":"^19.2.17","@types/tmp":"^0.2.6","@types/ws":"^8.18.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@vercel/ncc":"^0.44.1","@vue/compiler-dom":"3.5.40","@xterm/headless":"^6.0.0","adm-zip":"^0.6.0","ci-info":"^4.4.0",commander:"^15.0.0",eslint:"^10.7.0","git-format-staged":"4.0.2",husky:"^9.1.7","is-wsl":"^3.1.1",micromatch:"^4.0.8",open:"^11.0.0",oxlint:"^1.75.0",partysocket:"^1.3.0",prettyjson:"^1.2.5",tmp:"^0.2.7","tus-js-client":"^4.3.1",ws:"^8.21.1"}}});var ZD;var Z6=T(()=>{ZD=class ZD extends Error{context;constructor(D,$){super(D);this.name="CliUserError",this.context=$}}});import{platform as bC}from"node:os";import{version as PC}from"node:process";function WH(D){YH=D}function uC(D){for(let $=0;$<D.length;$++)if(D.charCodeAt($)>255)return!1;return!0}function QH(D){if(D.toLowerCase()==="x-capgo-log-token")return"Build log token is missing. Re-run the build command or pass a valid log token.";return"Capgo API key is missing. Run `npx -y @capgo/cli@latest login` or pass `--apikey`."}function kC(D){if(D.toLowerCase()==="x-capgo-log-token")return"Build log token contains invalid characters (only ASCII is allowed). Re-run the build command to get a fresh token.";if(D.toLowerCase()==="authorization")return"Authorization header contains invalid characters (only ASCII is allowed). Check your Capgo API key or Supabase anon key configuration.";return"Capgo API key contains invalid characters (only ASCII is allowed). Copy the key from the Capgo dashboard."}function qF(D,$){if($===void 0||$===null){if(GF.has(D.toLowerCase()))throw new ZD(QH(D));throw new ZD(`HTTP header "${D}" is missing or invalid.`)}if(typeof $!=="string"){if(GF.has(D.toLowerCase()))throw new ZD(QH(D));throw new ZD(`HTTP header "${D}" is missing or invalid.`)}if(!uC($)){if(GF.has(D.toLowerCase()))throw new ZD(kC(D));throw new ZD(`HTTP header "${D}" contains invalid characters (only ASCII is allowed).`)}return $}function J0(D){let $={capgo_api:CC,"x-cli-version":t$.version,"x-cli-command":YH,"x-cli-node":PC,"x-cli-os":bC()};if(D)for(let[U,I]of Object.entries(D))$[U]=qF(U,I);return $}var CC="2025-10-01",YH="",GF;var d3=T(()=>{A1();Z6();GF=new Set(["authorization","capgkey","x-capgo-log-token"])});import{existsSync as V$}from"fs";var v2=(D=".",$="unknown")=>{let U=`${D}/bun.lockb`,I=`${D}/bun.lock`,F=`${D}/pnpm-lock.yaml`,J=`${D}/shrinkwrap.yaml`,X=`${D}/yarn.lock`,Q=`${D}/package-lock.json`,Y=`${D}/npm-shrinkwrap.json`;if(V$(U)||V$(I))return"bun";if(V$(F)||V$(J))return"pnpm";if(V$(X))return"yarn";if(V$(Q)||V$(Y))return"npm";return $},c3=(D=v2(),$=!1)=>{switch(D){case"bun":return $?"bun install":"install";case"pnpm":return $?"pnpm install":"install";case"yarn":return $?"yarn install":"install";case"npm":return $?"npm install":"install";case"unknown":return $?"unknown unknown":"unknown";default:return $?"npm install":"install"}},BH=(D=".",$="npx")=>{let U=`${D}/bun.lockb`,I=`${D}/bun.lock`,F=`${D}/pnpm-lock.yaml`,J=`${D}/shrinkwrap.yaml`,X=`${D}/yarn.lock`,Q=`${D}/package-lock.json`,Y=`${D}/npm-shrinkwrap.json`;if(V$(U)||V$(I))return"bunx";if(V$(F)||V$(J))return"pnpm exec";if(V$(X))return"yarn dlx";if(V$(Q)||V$(Y))return"npx";return $};var KH=()=>{};var GH,qH=(D)=>{return D===12288||D>=65281&&D<=65376||D>=65504&&D<=65510},HH=(D)=>{return D===8987||D===9001||D>=12272&&D<=12287||D>=12289&&D<=12350||D>=12441&&D<=12543||D>=12549&&D<=12591||D>=12593&&D<=12686||D>=12688&&D<=12771||D>=12783&&D<=12830||D>=12832&&D<=12871||D>=12880&&D<=19903||D>=65040&&D<=65049||D>=65072&&D<=65106||D>=65108&&D<=65126||D>=65128&&D<=65131||D>=127488&&D<=127490||D>=127504&&D<=127547||D>=127552&&D<=127560||D>=131072&&D<=196605||D>=196608&&D<=262141};var NH=T(()=>{GH=(()=>{let D=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return($)=>{let U=0;D.lastIndex=0;while(D.test($))U+=1;return $.length-U}})()});var _C,xC,LH,gC,zH,fC,yC,mC,wH=(D,$={},U={})=>{let I=$.limit??1/0,F=$.ellipsis??"",J=$?.ellipsisWidth??(F?wH(F,mC,U).width:0),X=0,Q=U.controlWidth??0,Y=U.tabWidth??8,W=U.emojiWidth??2,B=2,K=U.regularWidth??1,q=U.wideWidth??2,H=[[fC,K],[_C,0],[xC,Q],[gC,Y],[zH,W],[LH,q]],G=0,L=0,N=D.length,M=0,Z=!1,z=N,v=Math.max(0,I-J),A=0,V=0,b=0,y=0;D:while(!0){if(V>A||L>=N&&L>G){let _=D.slice(A,V)||D.slice(G,L);M=0;for(let n of _.replaceAll(yC,"")){let m=n.codePointAt(0)||0;if(qH(m))y=2;else if(HH(m))y=q;else y=K;if(b+y>v)z=Math.min(z,Math.max(A,G)+M);if(b+y>I){Z=!0;break D}M+=n.length,b+=y}A=V=0}if(L>=N)break D;for(let _=0,n=H.length;_<n;_++){let[m,UD]=H[_];if(m.lastIndex=L,m.test(D)){if(M=m===LH?GH(D.slice(L,m.lastIndex)):m===zH?1:m.lastIndex-L,y=M*UD,b+y>v)z=Math.min(z,L+Math.floor((v-b)/UD));if(b+y>I){Z=!0;break D}b+=y,A=G,V=L,L=G=m.lastIndex;continue D}}L+=1}return{width:Z?v:b,index:Z?z:N,truncated:Z,ellipsed:Z&&I>=J}},ZH;var MH=T(()=>{NH();_C=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,xC=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,LH=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,gC=/\t{1,1000}/y,zH=/[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[\u{E0061}-\u{E007A}]{2}[\u{E0030}-\u{E0039}\u{E0061}-\u{E007A}]{1,3}\u{E007F}|(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})(?:\u200D(?:\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F\u20E3?))*/yu,fC=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,yC=/\p{M}+/gu,mC={limit:1/0,ellipsis:""},ZH=wH});var hC,nC=(D,$={})=>{return ZH(D,hC,$).width},X0;var HF=T(()=>{MH();hC={limit:1/0,ellipsis:"",ellipsisWidth:0},X0=nC});function g0(D,$,U){return String(D).normalize().split(pC).map((I)=>cC(I,$,U)).join(`
2
2
  `)}var p3="\x1B",jH="›",iC=39,LF="\x07",AH="[",lC="]",RH="m",zF,OH,EH=(D)=>{if(D>=30&&D<=37)return 39;if(D>=90&&D<=97)return 39;if(D>=40&&D<=47)return 49;if(D>=100&&D<=107)return 49;if(D===1||D===2)return 22;if(D===3)return 23;if(D===4)return 24;if(D===7)return 27;if(D===8)return 28;if(D===9)return 29;if(D===0)return 0;return},vH=(D)=>`${p3}${AH}${D}${RH}`,VH=(D)=>`${p3}${zF}${D}${LF}`,NF=(D,$,U)=>{let I=$[Symbol.iterator](),F=!1,J=!1,X=D.at(-1),Q=X===void 0?0:X0(X),Y=I.next(),W=I.next(),B=0;while(!Y.done){let K=Y.value,q=X0(K);if(Q+q<=U)D[D.length-1]+=K;else D.push(K),Q=0;if(K===p3||K===jH)F=!0,J=$.startsWith(zF,B+1);if(F){if(J){if(K===LF)F=!1,J=!1}else if(K===RH)F=!1}else if(Q+=q,Q===U&&!W.done)D.push(""),Q=0;Y=W,W=I.next(),B+=K.length}if(X=D.at(-1),!Q&&X!==void 0&&X.length&&D.length>1)D[D.length-2]+=D.pop()},dC=(D)=>{let $=D.split(" "),U=$.length;while(U){if(X0($[U-1]))break;U--}if(U===$.length)return D;return $.slice(0,U).join(" ")+$.slice(U).join("")},cC=(D,$,U={})=>{if(U.trim!==!1&&D.trim()==="")return"";let I="",F,J,X=D.split(" "),Q=[""],Y=0;for(let K=0;K<X.length;K++){let q=X[K];if(U.trim!==!1){let G=Q.at(-1)??"",L=G.trimStart();if(G.length!==L.length)Q[Q.length-1]=L,Y=X0(L)}if(K!==0){if(Y>=$&&(U.wordWrap===!1||U.trim===!1))Q.push(""),Y=0;if(Y||U.trim===!1)Q[Q.length-1]+=" ",Y++}let H=X0(q);if(U.hard&&H>$){let G=$-Y,L=1+Math.floor((H-G-1)/$);if(Math.floor((H-1)/$)<L)Q.push("");NF(Q,q,$),Y=X0(Q.at(-1)??"");continue}if(Y+H>$&&Y&&H){if(U.wordWrap===!1&&Y<$){NF(Q,q,$),Y=X0(Q.at(-1)??"");continue}Q.push(""),Y=0}if(Y+H>$&&U.wordWrap===!1){NF(Q,q,$),Y=X0(Q.at(-1)??"");continue}Q[Q.length-1]+=q,Y+=H}if(U.trim!==!1)Q=Q.map((K)=>dC(K));let W=Q.join(`
3
3
  `),B=!1;for(let K=0;K<W.length;K++){let q=W[K];if(I+=q,!B){if(B=q>="\uD800"&&q<="\uDBFF",B)continue}else B=!1;if(q===p3||q===jH){OH.lastIndex=K+1;let G=OH.exec(W)?.groups;if(G?.code!==void 0){let L=Number.parseFloat(G.code);F=L===iC?void 0:L}else if(G?.uri!==void 0)J=G.uri.length===0?void 0:G.uri}if(W[K+1]===`
4
4
  `){if(J)I+=VH("");let H=F?EH(F):void 0;if(F&&H)I+=vH(H)}else if(q===`
@@ -246,8 +246,8 @@ Please generate a new API key with a shorter expiration:
246
246
  tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}var CP=T(()=>{PP()});import{promisify as S6D}from"node:util";import{execFile as T6D}from"node:child_process";async function mq(D=b6D){let{stdout:$}=await D("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),U=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec($);if(!U)throw new uP(`Cannot find Windows browser in stdout: ${JSON.stringify($)}`);let{id:I}=U.groups,F=I.lastIndexOf("."),J=I.lastIndexOf("-"),X=F===-1?void 0:I.slice(0,F),Q=J===-1?void 0:I.slice(0,J);return sU[I]??sU[X]??sU[Q]??{name:I,id:I}}var b6D,sU,eU,uP;var hq=T(()=>{b6D=S6D(T6D),sU={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},eU=new Map(Object.entries(sU));uP=class uP extends Error{}});import{promisify as P6D}from"node:util";import nq from"node:process";import{execFile as C6D}from"node:child_process";async function iq(){if(nq.platform==="darwin"){let D=await fq();return{name:await yq(D),id:D}}if(nq.platform==="linux"){let{stdout:D}=await u6D("xdg-mime",["query","default","x-scheme-handler/http"]),$=D.trim();return{name:k6D($.replace(/.desktop$/,"").replace("-"," ")),id:$}}if(nq.platform==="win32")return mq();throw Error("Only macOS, Linux, and Windows are supported")}var u6D,k6D=(D)=>D.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,($)=>$.toUpperCase());var kP=T(()=>{TP();CP();hq();hq();u6D=P6D(C6D)});import lq from"node:process";var _6D,_P;var xP=T(()=>{_6D=Boolean(lq.env.SSH_CONNECTION||lq.env.SSH_CLIENT||lq.env.SSH_TTY),_P=_6D});var nP={};X$(nP,{openApp:()=>h6D,default:()=>n6D,apps:()=>E1});import dq from"node:process";import hP from"node:path";import{fileURLToPath as x6D}from"node:url";import g6D from"node:child_process";import f6D,{constants as y6D}from"node:fs/promises";function mP(D){if(typeof D==="string"||Array.isArray(D))return D;let{[fP]:$}=D;if(!$)throw Error(`${fP} is not supported`);return $}function h3({[w2]:D},{wsl:$}={}){if($&&u0)return mP($);if(!D)throw Error(`${w2} is not supported`);return mP(D)}var DF,cq,gP,w2,fP,yP=async(D,$)=>{if(D.length===0)return;let U=[];for(let I of D)try{return await $(I)}catch(F){U.push(F)}throw AggregateError(U,"Failed to open in all supported apps")},m3=async(D)=>{D={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...D};let $=D[DF]===!0;if(delete D[DF],Array.isArray(D.app))return yP(D.app,(W)=>m3({...D,app:W,[DF]:!0}));let{name:U,arguments:I=[]}=D.app??{};if(I=[...I],Array.isArray(U))return yP(U,(W)=>m3({...D,app:{name:W,arguments:I},[DF]:!0}));if(U==="browser"||U==="browserPrivate"){let W={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge","com.apple.safari":"safari"},B={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},K;if(u0){let q=await AP();K=eU.get(q)??{}}else K=await iq();if(K.id in W){let q=W[K.id.toLowerCase()];if(U==="browserPrivate"){if(q==="safari")throw Error("Safari doesn't support opening in private mode via command line");I.push(B[q])}return m3({...D,app:{name:E1[q],arguments:I}})}throw Error(`${K.name} is not supported as a default browser`)}let F,J=[],X={},Q=!1;if(u0&&!M1()&&!_P&&!U)Q=await jP();if(w2==="darwin"){if(F="open",D.wait)J.push("--wait-apps");if(D.background)J.push("--background");if(D.newInstance)J.push("--new");if(U)J.push("-a",U)}else if(w2==="win32"||Q){if(F=await aU(),J.push(...m$.argumentsPrefix),!u0)X.windowsVerbatimArguments=!0;if(u0&&D.target)D.target=await RP(D.target);let W=["$ProgressPreference = 'SilentlyContinue';","Start"];if(D.wait)W.push("-Wait");if(U){if(W.push(m$.escapeArgument(U)),D.target)I.push(D.target)}else if(D.target)W.push(m$.escapeArgument(D.target));if(I.length>0)I=I.map((B)=>m$.escapeArgument(B)),W.push("-ArgumentList",I.join(","));if(D.target=m$.encodeCommand(W.join(" ")),!D.wait)X.stdio="ignore"}else{if(U)F=U;else{let W=!cq||cq==="/",B=!1;try{await f6D.access(gP,y6D.X_OK),B=!0}catch{}F=dq.versions.electron??(w2==="android"||W||!B)?"xdg-open":gP}if(I.length>0)J.push(...I);if(!D.wait)X.stdio="ignore",X.detached=!0}if(w2==="darwin"&&I.length>0)J.push("--args",...I);if(D.target)J.push(D.target);let Y=g6D.spawn(F,J,X);if(D.wait)return new Promise((W,B)=>{Y.once("error",B),Y.once("close",(K)=>{if(!D.allowNonzeroExitCode&&K!==0){B(Error(`Exited with code ${K}`));return}W(Y)})});if($)return new Promise((W,B)=>{Y.once("error",B),Y.once("spawn",()=>{Y.once("close",(K)=>{if(Y.off("error",B),K!==0){B(Error(`Exited with code ${K}`));return}Y.unref(),W(Y)})})});return Y.unref(),new Promise((W,B)=>{Y.once("error",B),Y.once("spawn",()=>{Y.off("error",B),W(Y)})})},m6D=(D,$)=>{if(typeof D!=="string")throw TypeError("Expected a `target`");return m3({...$,target:D})},h6D=(D,$)=>{if(typeof D!=="string"&&!Array.isArray(D))throw TypeError("Expected a valid `name`");let{arguments:U=[]}=$??{};if(U!==void 0&&U!==null&&!Array.isArray(U))throw TypeError("Expected `appArguments` as Array type");return m3({...$,app:{name:D,arguments:U}})},E1,n6D;var iP=T(()=>{SP();xq();kP();Cq();xP();DF=Symbol("fallbackAttempt"),cq=import.meta.url?hP.dirname(x6D(import.meta.url)):"",gP=hP.join(cq,"xdg-open"),{platform:w2,arch:fP}=dq;E1={browser:"browser",browserPrivate:"browserPrivate"};O1(E1,"chrome",()=>h3({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium","chromium-browser"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));O1(E1,"brave",()=>h3({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));O1(E1,"firefox",()=>h3({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));O1(E1,"edge",()=>h3({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));O1(E1,"safari",()=>h3({darwin:"Safari"}));n6D=m6D});import{spawn as i6D}from"node:child_process";import{existsSync as QD,readdirSync as O2,readFileSync as lD,statSync as l6D}from"node:fs";import{homedir as tP,platform as aP}from"node:os";import j1,{dirname as k0,join as GD,relative as sP,resolve as uD,sep as eP}from"node:path";import{cwd as D$,env as V1,stdin as DC,stdout as $C}from"node:process";function $F(D,$){let U=DE();if(U)U[D]($);else vD[D]($)}function FC(D=""){if(!D)return XF;return`${XF}${D.startsWith("/")?D:`/${D}`}`}function iYD(D){let $=a6D.toLocaleString("en-US");return[`Delta updates cannot upload this bundle: it has ${D.toLocaleString("en-US")} files, and Capgo allows at most ${$} files per delta (manifest) upload.`,"Delta mode tracks and uploads each file individually so devices can download only what changed. Very large file counts are not supported on that path.","What you can do:","1. Upload a full zip instead: npx @capgo/cli@latest bundle upload --no-delta","2. Or reduce files in your web build output (remove unused assets, avoid copying large trees into dist).","See https://capgo.app/docs/faq/#are-there-delta-update-file-path-limitations"].join(`
247
247
  `)}function dYD(D){return[`Bundle upload timed out after ${Math.round(D/1000)}s.`,"The standard upload has to finish the whole transfer within this window and does not retry, so a large bundle or a slow connection can trip it.","What you can do:","1. Retry with the resumable upload, which uploads in chunks and retries automatically: npx @capgo/cli@latest bundle upload --tus","2. Or raise the limit for the standard upload: npx @capgo/cli@latest bundle upload --timeout <milliseconds>"].join(`
248
248
  `)}function Y$(D){if(!D)return"Unknown error";if(Sq(D).isSecurityPolicyError)return NP(D);let U=D;if(typeof D==="string")return D;if(D instanceof Error){let I=U.message||U.cause?.message||U.stack||D.name,F=U.cause?.name,J=I.toLowerCase();if(J.includes("fetch failed")||J.includes("failed to fetch")||J.includes("connect timeout")||J.includes("network")||F?.startsWith("UND_ERR"))return`Network error: ${I}${U.code?` (code ${U.code})`:""}. Check your network connection and API endpoint availability.`;let X=U.status||U.statusCode;return[I,U.code?`Code: ${U.code}`:void 0,X?`Status: ${X}`:void 0].filter(Boolean).join(" | ")||D.name}if(U.message){let I=[U.message,U.code?`Code: ${U.code}`:void 0,U.status||U.statusCode?`Status: ${U.status||U.statusCode}`:void 0].filter(Boolean).join(" | "),F=U.message.toLowerCase();if(F.includes("fetch failed")||F.includes("failed to fetch")||U.error==="Failed to fetch")return`Network error: ${I}. Check your network connection and API endpoint availability.`;if(U.details||U.hint||U.error)return`${I}${I?" | ":""}${U.error?typeof U.error==="string"?U.error:U.error.message??"":""}${U.details?`Details: ${U.details}`:""}${U.hint?`Hint: ${U.hint}`:""}`.trim();return I}if(typeof U.error==="string"&&U.error.length>0)return U.error;if(U.error&&typeof U.error==="object"&&typeof U.error.message==="string"&&U.error.message.length>0)return U.error.message;return`
249
- ${UC.default.render(D)}`}async function pYD(D,$,U=!1){let{data:I,error:F}=await BP(()=>D.rpc("reject_access_due_to_2fa_for_org",{org_id:$}));if(F){if(!U&&!z2(F))l.error(`Cannot check 2FA compliance: ${F.message}`);if(z2(F)){await KP({silent:U,telemetryFunctionName:"check2FAAccessForOrg"});return}GP(F)}if(I){if(!U)l.error(`\uD83D\uDD10 Access Denied: 2FA Required. Enable 2FA at ${FC("/settings/account")}`);throw Error("2FA required for this organization")}}function rYD({silent:D=!1,stdinIsTTY:$=!!DC.isTTY,stdoutIsTTY:U=!!$C.isTTY,ci:I=eq.isCI}={}){return!D&&$&&U&&!I}function s6D(D={}){let $=D.ci??eq.isCI,U=D.stdinIsTTY??!!DC.isTTY,I=D.stdoutIsTTY??!!$C.isTTY,F=D.platform??aP(),J="display"in D?D.display:V1.DISPLAY;if($||!U||!I)return!1;if(F==="linux"&&!J)return!1;return!0}async function e6D(D){if(!s6D())return;try{await(await Promise.resolve().then(() => (iP(),nP))).default(D)}catch($){if($?.code==="ENOENT")return}}function oYD(D){return MX(D)||OX(D)}function _0(D){if(MX(D))return RA(D);else if(OX(D))return SA(D);return D}function IC(D=_0(D$()),$=void 0){let U=$?.split(",")[0],I=U??GD(D,C$);if(!QD(I)){let J=U?`Package.json at ${I} does not exist`:`No package.json found at ${I}. Run this command from your project root (the folder that contains package.json), or pass --package-json <path> to point at it (for example in a monorepo).`;throw l.error(J),Error(J)}let F=lD(I);return JSON.parse(F)}function tYD(D=_0(D$()),$=void 0){return IC(D,$).scripts}function aYD(D=_0(D$()),$=void 0){return IC(D,$).version??""}function D1D(D){let $=D.replace("^","").replace("~","");if(P2($))try{let U=s$($);return gF(U)}catch{return $}return $}async function sYD(D,$=D$(),U){let I=U?U.split(",").map((X)=>X.trim()).filter(Boolean):[],F=[],J=(X)=>{let Q=uD(X);if(!F.includes(Q))F.push(Q)};for(let X of I){let Q=uD($,X);if(QD(Q))J(k0(Q))}J(uD($)),J(D$());for(let X of F)try{let Q=`${D}/package.json`,{createRequire:Y}=await import("node:module"),B=Y(GD(X,"package.json")).resolve(Q),K=JSON.parse(lD(B,"utf-8"));if(K.version)return K.version}catch{}for(let X of F){let Q=X,Y=j1.parse(Q).root;while(Q!==Y){let W=GD(Q,"node_modules",D,C$);if(QD(W))try{let K=JSON.parse(lD(W,"utf-8"));if(K.version)return K.version}catch{}let B=k0(Q);if(B===Q)break;Q=B}}if(D==="@capgo/capacitor-updater"){let X=null,Q=GD($,"ios","App","Podfile");if(QD(Q))try{let W=lD(Q,"utf-8").match(/pod\s+['"]CapgoCapacitorUpdater['"],\s*:path\s*=>\s*['"]([^'"]+)['"]/);if(W?.[1])X=uD(GD($,"ios","App",W[1]))}catch{}if(!X){let Y=GD($,"android","capacitor.settings.gradle");if(QD(Y))try{let B=lD(Y,"utf-8").match(/project\(':capgo-capacitor-updater'\)\.projectDir\s*=\s*new\s+File\(['"]([^'"]+)['"]/);if(B?.[1])X=uD(GD($,"android",B[1])).replace(/\/android$/,"")}catch{}}if(X){let Y=GD(X,C$);if(QD(Y))try{let W=JSON.parse(lD(Y,"utf-8"));if(W.version)return W.version}catch{}}}try{let X=U?U.split(",").map((W)=>W.trim()).filter(Boolean).join(","):U,Y=(await WF($,X)).get(D);if(Y)return Y}catch{}return null}async function WF(D=_0(D$()),$=void 0){let U=$?.split(",").map((J)=>J.trim()).filter(Boolean);if(U??=[GD(D,C$)],U){for(let J of U)if(!QD(J)){let X=`Package.json at ${J} does not exist`;throw l.error(X),Error(X)}}let I=new Map,{createRequire:F}=await import("node:module");for(let J of U){let X=lD(J),Q=JSON.parse(X),Y=k0(J),W=(B,K)=>{try{let L=F(GD(Y,"package.json")).resolve(`${B}/package.json`),N=JSON.parse(lD(L,"utf-8"));if(N.version)return N.version}catch{}let q=Y,H=j1.parse(q).root;while(q!==H){let G=GD(q,"node_modules",B,C$);if(QD(G))try{let N=JSON.parse(lD(G,"utf-8"));if(N.version)return N.version}catch{}let L=k0(q);if(L===q)break;q=L}return D1D(K)};for(let B in Q.dependencies)I.set(B,W(B,Q.dependencies[B]));for(let B in Q.devDependencies)I.set(B,W(B,Q.devDependencies[B]))}return I}async function $1D(D=_0(D$()),$=void 0){let U=$?.split(",").map((F)=>F.trim()).filter(Boolean);if(U??=[GD(D,C$)],U){for(let F of U)if(!QD(F)){let J=`Package.json at ${F} does not exist`;throw l.error(J),Error(J)}}let I=new Map;for(let F of U){let J=lD(F),X=JSON.parse(J);for(let Q in X.dependencies??{})if(typeof X.dependencies[Q]==="string")I.set(Q,X.dependencies[Q]);for(let Q in X.devDependencies??{})if(typeof X.devDependencies[Q]==="string")I.set(Q,X.devDependencies[Q])}return I}function U1D(D){if(!D)return!1;if(D.config&&Object.keys(D.config).length>0)return!0;return!!D.path&&QD(D.path)}async function JC(D,$=!1){let U=F1D;try{let I=await D();if(!U1D(I)){if(!$)l.error(U);throw new ZD(U)}return I}catch(I){if(I instanceof ZD)throw I;let F=Y$(I);if(!$)l.error(`${U}: ${F}`);throw new ZD(U,{cause:F})}}function wJ(D=!1){return JC(TX,D)}function I1D(D=!1){return JC(bX,D)}async function J1D(D,$){let U=await I1D();if(U?.config)U.config.plugins??={},U.config.plugins.extConfig??={},U.config.plugins[D]??={},U.config.plugins[D]={...U.config.plugins[D],...$},await PX(D,U);return U}async function eYD(D){return J1D("CapacitorUpdater",D)}async function i6(D=!1){try{let $=await wJ(D),U={host:$?.config?.plugins?.CapacitorUpdater?.localHost||lP,hostWeb:$?.config?.plugins?.CapacitorUpdater?.localWebHost||XF,hostFilesApi:$?.config?.plugins?.CapacitorUpdater?.localApiFiles||dP,hostApi:$?.config?.plugins?.CapacitorUpdater?.localApi||JF};if($?.config?.plugins?.CapacitorUpdater?.localSupa&&$?.config?.plugins?.CapacitorUpdater?.localSupaAnon){if(!D)l.info("Using custom supabase instance from capacitor.config.json");U.supaKey=$?.config?.plugins?.CapacitorUpdater?.localSupaAnon,U.supaHost=$?.config?.plugins?.CapacitorUpdater?.localSupa}return U}catch{return{host:lP,hostWeb:XF,hostFilesApi:dP,hostApi:JF}}}function pP(D){return typeof D==="object"&&D!==null}function X1D(D){if(!pP(D))return!1;let $=D.capacitor;if(pP($)&&($.ios!==void 0||$.android!==void 0))return!0;return!1}function Q1D(D){if(QD(GD(D,"plugin.xml")))return!0;let $=GD(D,C$);if(!QD($))return!1;try{return X1D(JSON.parse(lD($,"utf-8")))}catch{return!1}}async function i3(D=!1,$){let U=(F)=>{let J={...F};return _O(J,void 0,D),J};if(!$&&pq)return U(pq);if(!$&&UF)return UF.then(U);let I=(async()=>{let F=await i6(D);try{let J=YC(),X=await fetch(`${F.hostApi}/private/config`,{...$?{signal:$}:{},headers:J0(J?{capgkey:J}:void 0)});if(!X.ok)throw Error(`HTTP error! status: ${X.status}`);let Y={...await X.json(),...F};if(!$)pq=Y;return{...Y}}catch{if(!D)l.info(`Local config ${Y$(F)}`);return{...F}}finally{if(!$)UF=null}})();if(!$)UF=I;return I.then(U)}async function DWD(){let D=await i6();try{let $=YC(),U=await fetch(`${D.hostFilesApi}/files/config`,{headers:J0($?{capgkey:$}:void 0)});if(!U.ok)throw Error(`HTTP error! status: ${U.status}`);return await U.json()}catch{return{partialUpload:!1,TUSUpload:!1,partialUploadForced:!1,TUSUploadForced:!1,maxUploadLength:r6D,maxChunkSize:o6D,alertUploadSize:p6D}}}function M2(D){let $=new URL(D);if(!["http:","https:"].includes($.protocol))throw Error("Invalid Supabase host protocol");if($.username||$.password)throw Error("Supabase host must not include credentials");if($.search||$.hash)throw Error("Supabase host must not include query parameters or fragments");let U=F6($.pathname);return`${$.origin}${U}`}function Y1D(D){if(!D||typeof D!=="object")return"";let $=D;return[$.error,$.message,$.status].filter(Boolean).join(" | ")}function rP(D,$){let U=D.indexOf($);if(U<0)return D;return D.slice(U+$.length).replace(/^:\s*/,"").split(`
250
- `)[0].trim()}async function $WD(D){let $=await QC(D);if($?.error==="channel_zip_required"||$?.error==="channel_delta_required")return $.message||$.error;let U=D instanceof Error?D.message:String(D??"");if(U.includes("CHANNEL_ZIP_REQUIRED"))return rP(U,"CHANNEL_ZIP_REQUIRED");if(U.includes("CHANNEL_DELTA_REQUIRED"))return rP(U,"CHANNEL_DELTA_REQUIRED");return null}function n3(D){if(!D)return!1;try{let $=new URL(M2(D)).hostname.toLowerCase();return $==="sb.capgo.app"||$==="xvwzpoazmxkqosrdewyv.supabase.co"||$==="ibwjdnhknbkcqfbabwei.supabase.co"||$==="aucsybvnhavogdmzwtcw.supabase.co"}catch{return!1}}function W1D(D){if(D.supaHost&&D.supaKey&&D.hostApi===JF&&!n3(D.supaHost))return`${M2(D.supaHost)}/functions/v1`;return D.hostApi}function UWD(D){let $=D?.context;return typeof $?.status==="number"?$.status:void 0}async function QC(D){let $=D?.context;if(!$||typeof $.clone!=="function")return null;try{let U=await $.clone().text();try{return JSON.parse(U)}catch{return U?{message:U}:null}}catch{return null}}async function FWD(D){let $=await QC(D);if($){let U=Y1D($);if(U)return U}return Y$(D)}async function BF(D,$){let U=($.method??"POST").toUpperCase(),I,F=$.supaAnon;if($.supaHost&&$.supaAnon&&!n3($.supaHost))I=`${M2($.supaHost)}/functions/v1`;else{let Q=await i3(!0);if(F=$.supaAnon??Q.supaKey,Q.supaHost&&Q.supaKey&&Q.hostApi===JF&&!n3(Q.supaHost)&&!($.supaHost&&n3($.supaHost)))I=`${M2(Q.supaHost)}/functions/v1`;else if($.useFilesHost)I=Q.hostFilesApi;else I=Q.hostApi}let J=I.includes("/functions/v1"),X=`${F6(I)}/${D.replace(/^\//,"")}`;try{let Q=await fetch(X,{method:U,headers:J0({"Content-Type":"application/json",Authorization:J&&F?`Bearer ${F}`:$.apikey,capgkey:$.apikey}),body:U==="GET"||U==="HEAD"?void 0:typeof $.body==="string"?$.body:JSON.stringify($.body??{}),signal:$.signal});if(!Q.ok)return{data:null,error:new i$.FunctionsHttpError(Q)};return{data:(Q.headers.get("content-type")??"").includes("application/json")?await Q.json().catch(()=>null):await Q.text().catch(()=>null),error:null}}catch(Q){return{data:null,error:Q instanceof Error?Q:Error(String(Q))}}}async function IWD(D,$=!0){if(D?.supaHost&&D?.supaAnon){if(n3(D.supaHost))return(await i6($)).hostApi;return`${M2(D.supaHost)}/functions/v1`}let U=await i6($);if(U.supaHost&&U.supaKey)return W1D(U);return(await i3($)).hostApi}async function JWD(D,$,U,I=!1,F=!0,J){let X=await i3(I,J);if($&&U){if(!I)l.info("Using custom supabase instance from provided options");X.supaHost=$,X.supaKey=U}if(!X.supaHost||!X.supaKey){if(!I)l.error(cP);throw new ZD(cP,{missingSupaHost:!X.supaHost,missingSupaKey:!X.supaKey})}let Q=M2(X.supaHost);return CL(Q,X.supaKey,{auth:{persistSession:!1},global:{headers:{capgkey:qF("capgkey",D)},...PO()&&F?{fetch:uO()}:{}}})}async function B1D(D,$){let{data:U}=await D.rpc("is_paying_org",{orgid:$}).single();return U||!1}async function K1D(D,$){let{data:U}=await D.rpc("is_trial_org",{orgid:$}).single();return U||0}async function G1D(D,$,U){let{data:I}=await D.rpc("has_usage_credits_org",U?{orgid:$,appid:U}:{orgid:$}).single();return I||!1}function q1D(D){let{trialDays:$,isPaying:U,hasCredits:I,warning:F=!0}=D;return!!F&&$>0&&!U&&!I}async function H1D(D,$){let{data:U,error:I}=await D.rpc("is_allowed_action_org",{orgid:$}).single();if(I)throw Error(`Cannot validate plan: ${Y$(I)}`);return U===!0}async function rq(D,$,U,I){let{data:F,error:J}=I?await D.rpc("is_allowed_action_org_action",{orgid:$,actions:U,appid:I}):await D.rpc("is_allowed_action_org_action",{orgid:$,actions:U});if(J){if(I&&J.code==="PGRST202")return H1D(D,$);throw Error(`Cannot validate plan: ${Y$(J)}`)}return F===!0}async function N1D(D,$,U,I){if(I){if(await rq(D,$,U,I))return"allowed";if(await rq(D,$,U))return"permission_denied";return"billing_denied"}return await rq(D,$,U)?"allowed":"billing_denied"}async function L1D(D,$){throw l.error(`You need to upgrade your plan to continue to use capgo.
249
+ ${UC.default.render(D)}`}async function pYD(D,$,U=!1){let{data:I,error:F}=await BP(()=>D.rpc("reject_access_due_to_2fa_for_org",{org_id:$}));if(F){if(!U&&!z2(F))l.error(`Cannot check 2FA compliance: ${F.message}`);if(z2(F)){await KP({silent:U,telemetryFunctionName:"check2FAAccessForOrg"});return}GP(F)}if(I){if(!U)l.error(`\uD83D\uDD10 Access Denied: 2FA Required. Enable 2FA at ${FC("/settings/account")}`);throw Error("2FA required for this organization")}}function rYD({silent:D=!1,stdinIsTTY:$=!!DC.isTTY,stdoutIsTTY:U=!!$C.isTTY,ci:I=eq.isCI}={}){return!D&&$&&U&&!I}function s6D(D={}){let $=D.ci??eq.isCI,U=D.stdinIsTTY??!!DC.isTTY,I=D.stdoutIsTTY??!!$C.isTTY,F=D.platform??aP(),J="display"in D?D.display:V1.DISPLAY;if($||!U||!I)return!1;if(F==="linux"&&!J)return!1;return!0}async function e6D(D){if(!s6D())return;try{await(await Promise.resolve().then(() => (iP(),nP))).default(D)}catch($){if($?.code==="ENOENT")return}}function oYD(D){return MX(D)||OX(D)}function _0(D){if(MX(D))return RA(D);else if(OX(D))return SA(D);return D}function IC(D=_0(D$()),$=void 0){let U=$?.split(",")[0],I=U??GD(D,C$);if(!QD(I)){let J=U?`Package.json at ${I} does not exist`:`No package.json found at ${I}. Run this command from your project root (the folder that contains package.json), or pass --package-json <path> to point at it (for example in a monorepo).`;throw l.error(J),Error(J)}let F=lD(I);return JSON.parse(F)}function tYD(D=_0(D$()),$=void 0){return IC(D,$).scripts}function aYD(D=_0(D$()),$=void 0){return IC(D,$).version??""}function D1D(D){let $=D.replace("^","").replace("~","");if(P2($))try{let U=s$($);return gF(U)}catch{return $}return $}async function sYD(D,$=D$(),U){let I=U?U.split(",").map((X)=>X.trim()).filter(Boolean):[],F=[],J=(X)=>{let Q=uD(X);if(!F.includes(Q))F.push(Q)};for(let X of I){let Q=uD($,X);if(QD(Q))J(k0(Q))}J(uD($)),J(D$());for(let X of F)try{let Q=`${D}/package.json`,{createRequire:Y}=await import("node:module"),B=Y(GD(X,"package.json")).resolve(Q),K=JSON.parse(lD(B,"utf-8"));if(K.version)return K.version}catch{}for(let X of F){let Q=X,Y=j1.parse(Q).root;while(Q!==Y){let W=GD(Q,"node_modules",D,C$);if(QD(W))try{let K=JSON.parse(lD(W,"utf-8"));if(K.version)return K.version}catch{}let B=k0(Q);if(B===Q)break;Q=B}}if(D==="@capgo/capacitor-updater"){let X=null,Q=GD($,"ios","App","Podfile");if(QD(Q))try{let W=lD(Q,"utf-8").match(/pod\s+['"]CapgoCapacitorUpdater['"],\s*:path\s*=>\s*['"]([^'"]+)['"]/);if(W?.[1])X=uD(GD($,"ios","App",W[1]))}catch{}if(!X){let Y=GD($,"android","capacitor.settings.gradle");if(QD(Y))try{let B=lD(Y,"utf-8").match(/project\(':capgo-capacitor-updater'\)\.projectDir\s*=\s*new\s+File\(['"]([^'"]+)['"]/);if(B?.[1])X=uD(GD($,"android",B[1])).replace(/\/android$/,"")}catch{}}if(X){let Y=GD(X,C$);if(QD(Y))try{let W=JSON.parse(lD(Y,"utf-8"));if(W.version)return W.version}catch{}}}try{let X=U?U.split(",").map((W)=>W.trim()).filter(Boolean).join(","):U,Y=(await WF($,X)).get(D);if(Y)return Y}catch{}return null}async function WF(D=_0(D$()),$=void 0){let U=$?.split(",").map((J)=>J.trim()).filter(Boolean);if(U??=[GD(D,C$)],U){for(let J of U)if(!QD(J)){let X=`Package.json at ${J} does not exist`;throw l.error(X),Error(X)}}let I=new Map,{createRequire:F}=await import("node:module");for(let J of U){let X=lD(J),Q=JSON.parse(X),Y=k0(J),W=(B,K)=>{try{let L=F(GD(Y,"package.json")).resolve(`${B}/package.json`),N=JSON.parse(lD(L,"utf-8"));if(N.version)return N.version}catch{}let q=Y,H=j1.parse(q).root;while(q!==H){let G=GD(q,"node_modules",B,C$);if(QD(G))try{let N=JSON.parse(lD(G,"utf-8"));if(N.version)return N.version}catch{}let L=k0(q);if(L===q)break;q=L}return D1D(K)};for(let B in Q.dependencies)I.set(B,W(B,Q.dependencies[B]));for(let B in Q.devDependencies)I.set(B,W(B,Q.devDependencies[B]))}return I}async function $1D(D=_0(D$()),$=void 0){let U=$?.split(",").map((F)=>F.trim()).filter(Boolean);if(U??=[GD(D,C$)],U){for(let F of U)if(!QD(F)){let J=`Package.json at ${F} does not exist`;throw l.error(J),Error(J)}}let I=new Map;for(let F of U){let J=lD(F),X=JSON.parse(J);for(let Q in X.dependencies??{})if(typeof X.dependencies[Q]==="string")I.set(Q,X.dependencies[Q]);for(let Q in X.devDependencies??{})if(typeof X.devDependencies[Q]==="string")I.set(Q,X.devDependencies[Q])}return I}function U1D(D){if(!D)return!1;if(D.config&&Object.keys(D.config).length>0)return!0;return!!D.path&&QD(D.path)}async function JC(D,$=!1){let U=F1D;try{let I=await D();if(!U1D(I)){if(!$)l.error(U);throw new ZD(U)}return I}catch(I){if(I instanceof ZD)throw I;let F=Y$(I);if(!$)l.error(`${U}: ${F}`);throw new ZD(U,{cause:F})}}function wJ(D=!1){return JC(TX,D)}function I1D(D=!1){return JC(bX,D)}async function J1D(D,$){let U=await I1D();if(U?.config)U.config.plugins??={},U.config.plugins.extConfig??={},U.config.plugins[D]??={},U.config.plugins[D]={...U.config.plugins[D],...$},await PX(D,U);return U}async function eYD(D){return J1D("CapacitorUpdater",D)}async function i6(D=!1){try{let $=await wJ(D),U={host:$?.config?.plugins?.CapacitorUpdater?.localHost||lP,hostWeb:$?.config?.plugins?.CapacitorUpdater?.localWebHost||XF,hostFilesApi:$?.config?.plugins?.CapacitorUpdater?.localApiFiles||dP,hostApi:$?.config?.plugins?.CapacitorUpdater?.localApi||JF};if($?.config?.plugins?.CapacitorUpdater?.localSupa&&$?.config?.plugins?.CapacitorUpdater?.localSupaAnon){if(!D)l.info("Using custom supabase instance from capacitor.config.json");U.supaKey=$?.config?.plugins?.CapacitorUpdater?.localSupaAnon,U.supaHost=$?.config?.plugins?.CapacitorUpdater?.localSupa}return U}catch{return{host:lP,hostWeb:XF,hostFilesApi:dP,hostApi:JF}}}function pP(D){return typeof D==="object"&&D!==null}function X1D(D){if(!pP(D))return!1;let $=D.capacitor;if(pP($)&&($.ios!==void 0||$.android!==void 0))return!0;return!1}function Q1D(D){if(QD(GD(D,"plugin.xml")))return!0;let $=GD(D,C$);if(!QD($))return!1;try{return X1D(JSON.parse(lD($,"utf-8")))}catch{return!1}}async function i3(D=!1,$){let U=(F)=>{let J={...F};return _O(J,void 0,D),J};if(!$&&pq)return U(pq);if(!$&&UF)return UF.then(U);let I=(async()=>{let F=await i6(D);try{let J=YC(),X=await fetch(`${F.hostApi}/private/config`,{...$?{signal:$}:{},headers:J0(J?{capgkey:J}:void 0)});if(!X.ok)throw Error(`HTTP error! status: ${X.status}`);let Y={...await X.json(),...F};if(!$)pq=Y;return{...Y}}catch{if(!D)l.info(`Local config ${Y$(F)}`);return{...F}}finally{if(!$)UF=null}})();if(!$)UF=I;return I.then(U)}async function DWD(){let D=await i6();try{let $=YC(),U=await fetch(`${D.hostFilesApi}/files/config`,{headers:J0($?{capgkey:$}:void 0)});if(!U.ok)throw Error(`HTTP error! status: ${U.status}`);return await U.json()}catch{return{partialUpload:!1,TUSUpload:!1,partialUploadForced:!1,TUSUploadForced:!1,maxUploadLength:r6D,maxChunkSize:o6D,alertUploadSize:p6D}}}function M2(D){let $=new URL(D);if(!["http:","https:"].includes($.protocol))throw Error("Invalid Supabase host protocol");let U=$.hostname==="localhost"||$.hostname==="127.0.0.1"||$.hostname==="[::1]";if($.protocol==="http:"&&!U)throw Error("Supabase host must use HTTPS (HTTP is only allowed for localhost)");if($.username||$.password)throw Error("Supabase host must not include credentials");if($.search||$.hash)throw Error("Supabase host must not include query parameters or fragments");let I=F6($.pathname);return`${$.origin}${I}`}function Y1D(D){if(!D||typeof D!=="object")return"";let $=D;return[$.error,$.message,$.status].filter(Boolean).join(" | ")}function rP(D,$){let U=D.indexOf($);if(U<0)return D;return D.slice(U+$.length).replace(/^:\s*/,"").split(`
250
+ `)[0].trim()}async function $WD(D){let $=await QC(D);if($?.error==="channel_zip_required"||$?.error==="channel_delta_required")return $.message||$.error;let U=D instanceof Error?D.message:String(D??"");if(U.includes("CHANNEL_ZIP_REQUIRED"))return rP(U,"CHANNEL_ZIP_REQUIRED");if(U.includes("CHANNEL_DELTA_REQUIRED"))return rP(U,"CHANNEL_DELTA_REQUIRED");return null}function n3(D){if(!D)return!1;try{let $=new URL(M2(D)).hostname.toLowerCase();return $==="sb.capgo.app"||$==="xvwzpoazmxkqosrdewyv.supabase.co"||$==="ibwjdnhknbkcqfbabwei.supabase.co"||$==="aucsybvnhavogdmzwtcw.supabase.co"}catch{return!1}}function W1D(D){if(D.supaHost&&D.supaKey&&D.hostApi===JF&&!n3(D.supaHost))return`${M2(D.supaHost)}/functions/v1`;return D.hostApi}function UWD(D){let $=D?.context;return typeof $?.status==="number"?$.status:void 0}async function QC(D){let $=D?.context;if(!$||typeof $.clone!=="function")return null;try{let U=await $.clone().text();try{return JSON.parse(U)}catch{return U?{message:U}:null}}catch{return null}}async function FWD(D){let $=await QC(D);if($){let U=Y1D($);if(U)return U}return Y$(D)}async function BF(D,$){let U=($.method??"POST").toUpperCase(),I,F=$.supaAnon;if($.supaHost&&$.supaAnon&&!n3($.supaHost))I=`${M2($.supaHost)}/functions/v1`;else{let Q=await i3(!0);if(F=$.supaAnon??Q.supaKey,Q.supaHost&&Q.supaKey&&Q.hostApi===JF&&!n3(Q.supaHost)&&!($.supaHost&&n3($.supaHost)))I=`${M2(Q.supaHost)}/functions/v1`;else if($.useFilesHost)I=Q.hostFilesApi;else I=Q.hostApi}let J=I.includes("/functions/v1"),X=`${F6(I)}/${D.replace(/^\//,"")}`;try{let Q=await fetch(X,{method:U,redirect:"error",headers:J0({"Content-Type":"application/json",Authorization:J&&F?`Bearer ${F}`:$.apikey,capgkey:$.apikey}),body:U==="GET"||U==="HEAD"?void 0:typeof $.body==="string"?$.body:JSON.stringify($.body??{}),signal:$.signal});if(!Q.ok)return{data:null,error:new i$.FunctionsHttpError(Q)};return{data:(Q.headers.get("content-type")??"").includes("application/json")?await Q.json().catch(()=>null):await Q.text().catch(()=>null),error:null}}catch(Q){return{data:null,error:Q instanceof Error?Q:Error(String(Q))}}}async function IWD(D,$=!0){if(D?.supaHost&&D?.supaAnon){if(n3(D.supaHost))return(await i6($)).hostApi;return`${M2(D.supaHost)}/functions/v1`}let U=await i6($);if(U.supaHost&&U.supaKey)return W1D(U);return(await i3($)).hostApi}async function JWD(D,$,U,I=!1,F=!0,J){let X=await i3(I,J);if($&&U){if(!I)l.info("Using custom supabase instance from provided options");X.supaHost=$,X.supaKey=U}if(!X.supaHost||!X.supaKey){if(!I)l.error(cP);throw new ZD(cP,{missingSupaHost:!X.supaHost,missingSupaKey:!X.supaKey})}let Q=M2(X.supaHost);return CL(Q,X.supaKey,{auth:{persistSession:!1},global:{headers:{capgkey:qF("capgkey",D)},...PO()&&F?{fetch:uO()}:{}}})}async function B1D(D,$){let{data:U}=await D.rpc("is_paying_org",{orgid:$}).single();return U||!1}async function K1D(D,$){let{data:U}=await D.rpc("is_trial_org",{orgid:$}).single();return U||0}async function G1D(D,$,U){let{data:I}=await D.rpc("has_usage_credits_org",U?{orgid:$,appid:U}:{orgid:$}).single();return I||!1}function q1D(D){let{trialDays:$,isPaying:U,hasCredits:I,warning:F=!0}=D;return!!F&&$>0&&!U&&!I}async function H1D(D,$){let{data:U,error:I}=await D.rpc("is_allowed_action_org",{orgid:$}).single();if(I)throw Error(`Cannot validate plan: ${Y$(I)}`);return U===!0}async function rq(D,$,U,I){let{data:F,error:J}=I?await D.rpc("is_allowed_action_org_action",{orgid:$,actions:U,appid:I}):await D.rpc("is_allowed_action_org_action",{orgid:$,actions:U});if(J){if(I&&J.code==="PGRST202")return H1D(D,$);throw Error(`Cannot validate plan: ${Y$(J)}`)}return F===!0}async function N1D(D,$,U,I){if(I){if(await rq(D,$,U,I))return"allowed";if(await rq(D,$,U))return"permission_denied";return"billing_denied"}return await rq(D,$,U)?"allowed":"billing_denied"}async function L1D(D,$){throw l.error(`You need to upgrade your plan to continue to use capgo.
251
251
  Upgrade here: ${D}
252
252
  `),await e6D(D),new ZD($)}async function z1D(){throw l.error("Cannot validate plan usage for this app. The API key may lack permission to read app billing details."),new ZD("Plan validation permission denied")}async function XWD(D,$,U){let{data:I,error:F}=await D.rpc("get_organization_cli_warnings",{orgid:$,cli_version:U});if(F){l.error(`Cannot get cli warnings: ${Y$(F)}`);return}if(I.length>0){l.warn(`Found ${I.length} cli warnings for your organization.`);let J=null;for(let X of I){if(typeof X!=="object"||typeof X.message!=="string"||typeof X.fatal!=="boolean"){l.error(`Invalid cli warning: ${X}`);continue}let Q=X;if(Q.fatal)l.error(`${Q.message.replaceAll("\\n",`
253
253
  `)}`),J=Error(Q.message);else l.warn(`${Q.message.replaceAll("\\n",`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capgo/cli",
3
3
  "type": "module",
4
- "version": "8.65.0",
4
+ "version": "8.67.0",
5
5
  "description": "A CLI to upload to capgo servers",
6
6
  "author": "Martin martin@capgo.app",
7
7
  "license": "Apache 2.0",
@@ -172,6 +172,7 @@
172
172
  "test:ios-confirm-app-id": "bun test/test-ios-confirm-app-id.mjs",
173
173
  "test:ios-create-new": "bun test/test-ios-create-new.mjs",
174
174
  "test:ios-certificate-action": "bun test/test-ios-certificate-action.mjs",
175
+ "test:ios-profile-action": "bun test/test-ios-profile-action.mjs",
175
176
  "test:ios-credential-action": "bun test/test-ios-credential-action.mjs",
176
177
  "test:ios-e2e": "bun test/test-ios-e2e.mjs",
177
178
  "test:ios-flow-contract": "bun test/test-ios-flow-contract.mjs",
@@ -191,7 +192,7 @@
191
192
  "test:android-version": "bun test/test-android-version.mjs",
192
193
  "test:platform-flow-contract": "bun test/test-platform-flow-contract.mjs",
193
194
  "test:tail-engine-shared": "bun test/test-tail-engine-shared.mjs",
194
- "test": "bun run build && bun run test:helper-dce && bun run test:version-detection:setup && bun run test:bundle && bun run test:notify-app-ready-background && bun run test:bundle-validation && bun run test:functional && bun run test:semver && bun run test:auto-bump-version && bun run test:auto-bump-ai-diff && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:cordova-upload-mode && bun run test:fail-on-incompatible && bun run test:native-dependencies && bun run test:package-json-guard && bun run test:credentials && bun run test:credentials-export && bun run test:ios-provisioning-map && bun run test:ios-provisioning-command && bun run test:credentials-validation && bun run test:android-service-account-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:build-needed && bun run test:cli-help && bun run test:build-cache-payload && bun run test:build-cancellation && bun run test:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:android-keystore-action && bun run test:android-google-play-action && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && bun run test:cli-headers && bun run test:min-cli-version && bun run test:authenticated-command-invocation && bun run test:analytics-error-category && bun run test:analytics-org-resolver && bun run test:supabase-perf && bun run test:preview-qr && bun run test:bundle-pages && bun run test:app-set-options && bun run test:mcp-analytics && bun run test:mcp-instructions && bun run test:mcp-live-update-onboarding && bun run test:mcp-stdout-guard && bun run test:mcp-platform-select && bun run test:mcp-explain-scopes && bun run test:mcp-oauth-reopen && bun run test:mcp-broker-oauth && bun run test:mcp-broker-session && bun run test:mcp-credentials-manage && bun run test:mcp-resume-prompt && bun run test:mcp-build-job && bun run test:mcp-build-tools && bun run test:app-created-source && bun run test:app-add-exists && bun run test:app-add-getting-started && bun run test:app-list-output-text && bun run test:app-todo && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:cli-recovery && bun run test:create-supabase-client && bun run test:build-platform-selection && bun run test:builder-project-discovery && bun run test:builder-app-selection && bun run test:builder-login-gate && bun run test:onboarding-recovery && bun run test:onboarding-progress && bun run test:onboarding-run-targets && bun run test:run-device-command && bun run test:init-monorepo-targeting && bun run test:init-app-conflict && bun run test:channel-list && bun run test:channel-add-exists && bun run test:wait-log && bun run test:init-guardrails && bun run test:init-upload-recovery && bun run test:init-replay && bun run test:init-telemetry && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:mcp-no-key-handshake && bun run test:auth-session && bun run test:version-detection && bun run test:platform-paths && bun run test:project-type-detection && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:asc-key-protocol && bun run test:apple-api-import-helpers && bun run test:apple-api-verify-key && bun run test:bundle-id-detector && bun run test:apple-api-app-list && bun run test:app-verification && bun run test:pbxproj-parser && bun run test:ai-log-capture && bun run test:ai-analyze-flow && bun run test:cicd-failure-help && bun run test:ai-sse-parser && bun run test:ai-render-markdown && bun run test:ai-stream-markdown && bun run test:ai-onboarding-mode && bun run test:ai-fit && bun run test:platform-layout && bun run test:frame-fit && bun run test:onboarding-min-size && bun run test:min-size-gate && bun run test:shell-size-gate && bun run test:build-log-sanitize && bun run test:build-output-viewport && bun run test:diff-viewer-viewport && bun run test:build-complete-exit && bun run test:ai-analyze-stream && bun run test:support-mailto && bun run test:support-redact && bun run test:support-internal-log && bun run test:support-help-menu && bun run test:support-contact && bun run test:support-upload-prompt && bun run test:support-bundle-files && bun run test:self-update && bun run test:update-prompt && bun run test:apple-api-cert-create && bun run test:android-tail-engine && bun run test:android-tail-render && bun run test:android-tail-routing && bun run test:dev-gate-stripped && bun run test:frame-fit-ios-shared && bun run test:ios-confirm-app-id && bun run test:ios-create-new && bun run test:ios-certificate-action && bun run test:ios-credential-action && bun run test:ios-e2e && bun run test:ios-flow-contract && bun run test:ios-import-discovery && bun run test:ios-import-export && bun run test:ios-import-pickers && bun run test:ios-import-recovery && bun run test:ios-recovery && bun run test:ios-resume && bun run test:ios-tail-handoff && bun run test:ios-tui-render && bun run test:p8-error && bun run test:ios-tui-routing && bun run test:ios-updater-sync-validation && bun run test:ios-verify-app && bun run test:ios-marketing-version && bun run test:android-version && bun run test:platform-flow-contract && bun run test:tail-engine-shared && bun run test:prescan && bun run test:android-reporting-api && bun run test:android-gcp && bun run test:android-app-verification && bun run test:android-rename && bun run test:appflow-auth && bun run test:appflow-api-map && bun run test:appflow-validate && bun run test:appflow-flow && bun run test:appflow-gapfill && bun run test:appflow-engine && bun run test:appflow-tail && bun run test:appflow-fetch && bun run test:appflow-sa-decode && bun run test:app-permission-helper && bun run test:2fa-compliance-network && bun run test:organization-set-api-host && bun run test:trial-warning && bun run test:plan-validation",
195
+ "test": "bun run build && bun run test:helper-dce && bun run test:version-detection:setup && bun run test:bundle && bun run test:notify-app-ready-background && bun run test:bundle-validation && bun run test:functional && bun run test:semver && bun run test:auto-bump-version && bun run test:auto-bump-ai-diff && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:cordova-upload-mode && bun run test:fail-on-incompatible && bun run test:native-dependencies && bun run test:package-json-guard && bun run test:credentials && bun run test:credentials-export && bun run test:ios-provisioning-map && bun run test:ios-provisioning-command && bun run test:credentials-validation && bun run test:android-service-account-validation && bun run test:build-zip-filter && bun run test:checksum && bun run test:build-needed && bun run test:cli-help && bun run test:build-cache-payload && bun run test:build-cancellation && bun run test:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:android-keystore-action && bun run test:android-google-play-action && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && bun run test:cli-headers && bun run test:min-cli-version && bun run test:authenticated-command-invocation && bun run test:analytics-error-category && bun run test:analytics-org-resolver && bun run test:supabase-perf && bun run test:preview-qr && bun run test:bundle-pages && bun run test:app-set-options && bun run test:mcp-analytics && bun run test:mcp-instructions && bun run test:mcp-live-update-onboarding && bun run test:mcp-stdout-guard && bun run test:mcp-platform-select && bun run test:mcp-explain-scopes && bun run test:mcp-oauth-reopen && bun run test:mcp-broker-oauth && bun run test:mcp-broker-session && bun run test:mcp-credentials-manage && bun run test:mcp-resume-prompt && bun run test:mcp-build-job && bun run test:mcp-build-tools && bun run test:app-created-source && bun run test:app-add-exists && bun run test:app-add-getting-started && bun run test:app-list-output-text && bun run test:app-todo && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:cli-recovery && bun run test:create-supabase-client && bun run test:build-platform-selection && bun run test:builder-project-discovery && bun run test:builder-app-selection && bun run test:builder-login-gate && bun run test:onboarding-recovery && bun run test:onboarding-progress && bun run test:onboarding-run-targets && bun run test:run-device-command && bun run test:init-monorepo-targeting && bun run test:init-app-conflict && bun run test:channel-list && bun run test:channel-add-exists && bun run test:wait-log && bun run test:init-guardrails && bun run test:init-upload-recovery && bun run test:init-replay && bun run test:init-telemetry && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:mcp-no-key-handshake && bun run test:auth-session && bun run test:version-detection && bun run test:platform-paths && bun run test:project-type-detection && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:asc-key-protocol && bun run test:apple-api-import-helpers && bun run test:apple-api-verify-key && bun run test:bundle-id-detector && bun run test:apple-api-app-list && bun run test:app-verification && bun run test:pbxproj-parser && bun run test:ai-log-capture && bun run test:ai-analyze-flow && bun run test:cicd-failure-help && bun run test:ai-sse-parser && bun run test:ai-render-markdown && bun run test:ai-stream-markdown && bun run test:ai-onboarding-mode && bun run test:ai-fit && bun run test:platform-layout && bun run test:frame-fit && bun run test:onboarding-min-size && bun run test:min-size-gate && bun run test:shell-size-gate && bun run test:build-log-sanitize && bun run test:build-output-viewport && bun run test:diff-viewer-viewport && bun run test:build-complete-exit && bun run test:ai-analyze-stream && bun run test:support-mailto && bun run test:support-redact && bun run test:support-internal-log && bun run test:support-help-menu && bun run test:support-contact && bun run test:support-upload-prompt && bun run test:support-bundle-files && bun run test:self-update && bun run test:update-prompt && bun run test:apple-api-cert-create && bun run test:android-tail-engine && bun run test:android-tail-render && bun run test:android-tail-routing && bun run test:dev-gate-stripped && bun run test:frame-fit-ios-shared && bun run test:ios-confirm-app-id && bun run test:ios-create-new && bun run test:ios-certificate-action && bun run test:ios-profile-action && bun run test:ios-credential-action && bun run test:ios-e2e && bun run test:ios-flow-contract && bun run test:ios-import-discovery && bun run test:ios-import-export && bun run test:ios-import-pickers && bun run test:ios-import-recovery && bun run test:ios-recovery && bun run test:ios-resume && bun run test:ios-tail-handoff && bun run test:ios-tui-render && bun run test:p8-error && bun run test:ios-tui-routing && bun run test:ios-updater-sync-validation && bun run test:ios-verify-app && bun run test:ios-marketing-version && bun run test:android-version && bun run test:platform-flow-contract && bun run test:tail-engine-shared && bun run test:prescan && bun run test:android-reporting-api && bun run test:android-gcp && bun run test:android-app-verification && bun run test:android-rename && bun run test:appflow-auth && bun run test:appflow-api-map && bun run test:appflow-validate && bun run test:appflow-flow && bun run test:appflow-gapfill && bun run test:appflow-engine && bun run test:appflow-tail && bun run test:appflow-fetch && bun run test:appflow-sa-decode && bun run test:app-permission-helper && bun run test:2fa-compliance-network && bun run test:organization-set-api-host && bun run test:trial-warning && bun run test:plan-validation",
195
196
  "test:build-platform-selection": "bun test/test-build-platform-selection.mjs",
196
197
  "test:builder-project-discovery": "bun test/test-builder-project-discovery.mjs",
197
198
  "test:builder-app-selection": "bun test/test-builder-app-selection.mjs",