Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
94d69b6
build: build-time DEV gate (globalThis.__CAPGO_DEV__) — strips never-…
WcaleNieWolny Jun 3, 2026
671771f
feat(onboarding): integrate the MCP shared engine onto main + unify A…
WcaleNieWolny Jun 3, 2026
98b0734
feat(onboarding): platform-agnostic PlatformFlow + StepView contract
WcaleNieWolny Jun 3, 2026
e63c8cf
feat(onboarding): androidFlow adapter implementing PlatformFlow (rena…
WcaleNieWolny Jun 3, 2026
1e1d887
feat(mcp): build-time gate the onboarding tools OFF for release (DCE-…
WcaleNieWolny Jun 3, 2026
956f4c9
fix(onboarding): enforce keystore store-password validation (min 6 / …
WcaleNieWolny Jun 3, 2026
a5d1e3c
fix(onboarding): support creating a new GCP project in the MCP flow (…
WcaleNieWolny Jun 3, 2026
6099d33
fix(onboarding): protect existing android credentials with a backup-o…
WcaleNieWolny Jun 3, 2026
a1703d2
feat(onboarding/tui): route android in-session sequencing through the…
WcaleNieWolny Jun 3, 2026
5657be7
refactor(onboarding/tui): route android engine-driven auto-effects th…
WcaleNieWolny Jun 3, 2026
797fb66
refactor(onboarding/tui): migrate android TUI renders to progress-as-…
WcaleNieWolny Jun 3, 2026
c294833
refactor(onboarding/tui): drop redundant hardcoded sequencing + dead …
WcaleNieWolny Jun 3, 2026
2a6eca3
refactor(onboarding/contract): real StepView conformance via explicit…
WcaleNieWolny Jun 3, 2026
9e6629f
refactor(onboarding/types): shared TailProgress mixin for the post-sa…
WcaleNieWolny Jun 3, 2026
5bd4d36
docs(onboarding): clarify env-export writes a local file, no auto-com…
WcaleNieWolny Jun 3, 2026
6441474
test(onboarding/engine): RED android tail-engine spec (drives runAndr…
WcaleNieWolny Jun 3, 2026
9cb6462
feat(onboarding/engine): additive AndroidEffectDeps surface for the p…
WcaleNieWolny Jun 3, 2026
1396a6a
feat(onboarding/engine): runAndroidEffect drives creds tail step(s)
WcaleNieWolny Jun 3, 2026
18888fa
feat(onboarding/engine): runAndroidEffect drives ci-secrets tail step(s)
WcaleNieWolny Jun 3, 2026
34e4324
feat(onboarding/engine): runAndroidEffect drives env+workflow tail st…
WcaleNieWolny Jun 3, 2026
33bf49a
feat(onboarding/engine): runAndroidEffect drives build tail step(s)
WcaleNieWolny Jun 3, 2026
25b6758
feat(onboarding/engine): android tail choice/input views + reducers
WcaleNieWolny Jun 3, 2026
5e60c8f
feat(onboarding/engine): getAndroidResumeStep routes through the post…
WcaleNieWolny Jun 3, 2026
baaa12a
fix(onboarding/engine): thread tail credentials+ci-secret-entries via…
WcaleNieWolny Jun 3, 2026
4b2f8b6
refactor(onboarding/tail): extract platform-neutral shared tail modul…
WcaleNieWolny Jun 3, 2026
20ecc74
test(onboarding/engine): RED iOS PlatformFlow contract spec
WcaleNieWolny Jun 3, 2026
6f5f0b1
feat(onboarding/engine): iOS engine skeleton + PlatformFlow adapter (…
WcaleNieWolny Jun 3, 2026
e93d283
feat(onboarding/engine): iOS BATCH 0 — total getIosResumeStep + trans…
WcaleNieWolny Jun 3, 2026
f797dec
fix(onboarding/engine): iOS deps/ctx use real apple-api/csr/macos-sig…
WcaleNieWolny Jun 3, 2026
a38fb7e
feat(onboarding/engine): iOS BATCH 1 — route saving-credentials + pos…
WcaleNieWolny Jun 3, 2026
6a0617f
feat(onboarding/engine): iOS BATCH 2a — create-new credential effects…
WcaleNieWolny Jun 3, 2026
c833aaa
feat(onboarding/engine): iOS BATCH 2b — create-new choice/input views…
WcaleNieWolny Jun 3, 2026
c8b48ab
feat(onboarding/engine): iOS BATCH 3 — cert-limit + duplicate-profile…
WcaleNieWolny Jun 3, 2026
7d31b57
feat(onboarding/engine): iOS BATCH 4 — confirm-app-id view + reducer …
WcaleNieWolny Jun 3, 2026
04a9cf5
feat(onboarding/engine): iOS BATCH 5 — import discovery (scanning/val…
WcaleNieWolny Jun 3, 2026
51abcb7
feat(onboarding/engine): iOS BATCH 6 — import pickers (identity/profi…
WcaleNieWolny Jun 3, 2026
bf8a26e
fix(onboarding/engine): iOS import-checking-apple-cert synthesizes Di…
WcaleNieWolny Jun 3, 2026
cd7dbeb
feat(onboarding/engine): iOS BATCH 7a — import recovery (no-match hub…
WcaleNieWolny Jun 3, 2026
388812a
feat(onboarding/engine): iOS BATCH 7b — import export (warning/compil…
WcaleNieWolny Jun 3, 2026
ec98c53
fix(onboarding/engine): iOS import-no-match-recovery hasAscKey matche…
WcaleNieWolny Jun 3, 2026
5432c5a
fix(onboarding/engine): iOS import-no-match-recovery resolver hasAscK…
WcaleNieWolny Jun 3, 2026
44db999
feat(onboarding/engine): iOS BATCH 8 — error step + end-to-end engine…
WcaleNieWolny Jun 3, 2026
13281cd
feat(tail-engine): requesting-build threads injected logger + driver-…
WcaleNieWolny Jun 4, 2026
4275f0f
feat(tail-engine): uploading-ci-secrets forwards upload progress + pr…
WcaleNieWolny Jun 4, 2026
2bd3e42
feat(tail-engine): checking-ci-secrets surfaces the 2-phase check status
WcaleNieWolny Jun 4, 2026
88f85be
feat(tail-engine): workflow-file telemetry + env-export error routing
WcaleNieWolny Jun 4, 2026
ec40ef4
feat(onboarding/engine): android adapter forwards tail streaming/tele…
WcaleNieWolny Jun 4, 2026
3d62595
feat(tail-engine): requesting-build emits build-viewer lines via onBu…
WcaleNieWolny Jun 4, 2026
d740bd8
feat(tail-engine): checking-ci-secrets sets ciSecretError + routes to…
WcaleNieWolny Jun 4, 2026
0480ad3
feat(tail-engine): writing-workflow-file logs Wrote vs Overwrote from…
WcaleNieWolny Jun 4, 2026
4ba43ae
fix(tail-engine): post-save tail steps never re-create progress.json …
WcaleNieWolny Jun 4, 2026
18f8010
feat(tail-engine): saving-credentials self-heal emits the missing-inp…
WcaleNieWolny Jun 4, 2026
002e7f8
docs(tail-engine): document the keystorePasswordGenerated driver cont…
WcaleNieWolny Jun 4, 2026
f06f014
test(onboarding/tui): android tail render-snapshot baseline (renderFr…
WcaleNieWolny Jun 4, 2026
a6d46d2
refactor(onboarding/tui): android CI-secrets tail steps via engine-dr…
WcaleNieWolny Jun 4, 2026
ecfcd2c
refactor(onboarding/tui): android env-export + workflow-file tail ste…
WcaleNieWolny Jun 4, 2026
01a708f
refactor(onboarding/tui): android requesting-build tail step via engi…
WcaleNieWolny Jun 4, 2026
4e12daf
test(onboarding/engine): android tail choice/input routing parity (ap…
WcaleNieWolny Jun 4, 2026
8dfbc6e
refactor(onboarding/tui): add tailEngineNext helper for engine-derive…
WcaleNieWolny Jun 4, 2026
54fb012
refactor(onboarding/tui): pick-package-manager tail routing via engin…
WcaleNieWolny Jun 4, 2026
7e45b8d
refactor(onboarding/tui): ask-github-actions-setup tail routing via e…
WcaleNieWolny Jun 4, 2026
89c1161
refactor(onboarding/tui): ask-export-env yes-branch tail routing via …
WcaleNieWolny Jun 4, 2026
eb3f25c
docs(onboarding/tui): document DIVERGE tail inputs kept driver-routed…
WcaleNieWolny Jun 4, 2026
563b295
test(onboarding/tui): iOS step render-snapshot baseline (renderFrameT…
WcaleNieWolny Jun 4, 2026
3807c76
feat(onboarding/ios-tui): route create-new provisioning effects throu…
WcaleNieWolny Jun 4, 2026
f3c9e60
fix(onboarding/engine): iOS tail credential builder emits full map (A…
WcaleNieWolny Jun 4, 2026
48a48b3
feat(onboarding/ios-tui): route saving-credentials + post-save tail t…
WcaleNieWolny Jun 4, 2026
37fbf4e
test(onboarding/engine): iOS choice/input routing parity (applyIosInp…
WcaleNieWolny Jun 4, 2026
e5f8df1
fix(onboarding/ios-tui): mirror tail engine transient.ciSecretError +…
WcaleNieWolny Jun 4, 2026
0b31451
refactor(onboarding/ios-tui): route create-new choice/input next-step…
WcaleNieWolny Jun 4, 2026
dd8cd1d
fix(onboarding/tui): iOS input-p8-path routing loads full progress (p…
WcaleNieWolny Jun 4, 2026
a19648a
refactor(onboarding/ios-tui): route import discovery/effect steps thr…
WcaleNieWolny Jun 4, 2026
4d03f34
refactor(onboarding/ios-tui): route import pickers + distribution-mod…
WcaleNieWolny Jun 4, 2026
db9a81e
refactor(onboarding/ios-tui): route import recovery/export choices + …
WcaleNieWolny Jun 4, 2026
345f9d0
refactor(onboarding/ios-tui): restore verify success log + drop dead …
WcaleNieWolny Jun 4, 2026
c139fa7
test(onboarding): wire engine + TUI test suites into the CI test chain
WcaleNieWolny Jun 4, 2026
aa1a00f
fix(onboarding/ios-tui): resume landing uses the engine's total getIo…
WcaleNieWolny Jun 5, 2026
618d3f4
Merge origin/main into wolny/mcp-tui-integration
WcaleNieWolny Jun 5, 2026
08a93f1
feat(onboarding/engine): iOS verify-app effect + gate (engine-driven)
WcaleNieWolny Jun 5, 2026
7d0e83d
refactor(onboarding/ios-tui): route verify-app through the engine (dr…
WcaleNieWolny Jun 5, 2026
442786e
fix(onboarding/tail): saving-credentials builds first, self-heals onl…
WcaleNieWolny Jun 5, 2026
8363b26
fix(onboarding/ios): create modern Apple Distribution certs; scope th…
WcaleNieWolny Jun 5, 2026
af629dc
Merge origin/main into wolny/mcp-tui-integration
WcaleNieWolny Jun 11, 2026
a29b2bb
fix(onboarding/ios): two screen-parity regressions vs the bespoke TUI…
WcaleNieWolny Jun 11, 2026
704d287
chore(e2e): bump private/cli-mcp-tests to 8a615f2
WcaleNieWolny Jun 11, 2026
3a89935
test(android-tail-render): error step asserts main's #2406 help menu
WcaleNieWolny Jun 11, 2026
297d250
Merge origin/main into wolny/mcp-tui-integration
WcaleNieWolny Jun 12, 2026
73fe414
chore(e2e): bump private/cli-mcp-tests to 1044e70
WcaleNieWolny Jun 12, 2026
7f62c4b
fix(onboarding): hostile-review engine fixes — crash-recovery .p8 re-…
WcaleNieWolny Jun 12, 2026
1db3bf6
fix(onboarding/ui): hostile-review TUI fixes — truthful .p8 errors, s…
WcaleNieWolny Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions cli/build.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,8 @@ const buildCLI = Bun.build({
external: HELPER_PACKAGES,
define: {
'process.env.SUPA_DB': '"production"',
'globalThis.__CAPGO_DEV__': 'false',
'globalThis.__CAPGO_MCP_ONBOARDING__': 'false',
// Gates the CAPGO_KEYCHAIN_HELPER_PATH dev override. `false` here makes
// the minifier delete the whole branch from release bundles —
// publish_cli.yml asserts the string is absent from dist/index.js.
Expand Down Expand Up @@ -351,6 +353,8 @@ const buildSDK = Bun.build({
external: HELPER_PACKAGES,
define: {
'process.env.SUPA_DB': '"production"',
'globalThis.__CAPGO_DEV__': 'false',
'globalThis.__CAPGO_MCP_ONBOARDING__': 'false',
// Gates the CAPGO_KEYCHAIN_HELPER_PATH dev override. `false` here makes
// the minifier delete the whole branch from release bundles —
// publish_cli.yml asserts the string is absent from dist/index.js.
Expand Down
26 changes: 25 additions & 1 deletion cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,36 @@
"test:apple-api-import-helpers": "bun test/test-apple-api-import-helpers.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": "bun run build && bun run test:helper-dce && bun run test:version-detection:setup && bun run test:bundle && bun run test:functional && bun run test:semver && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:fail-on-incompatible && bun run test:credentials && 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:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && 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:mcp-analytics && bun run test:app-created-source && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:build-platform-selection && 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-app-conflict && bun run test:init-guardrails && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:version-detection && bun run test:platform-paths && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:apple-api-import-helpers && 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: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-bundle-files && bun run test:self-update && bun run test:update-prompt",
"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-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: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:functional && bun run test:semver && bun run test:version-edge-cases && bun run test:regex && bun run test:upload && bun run test:fail-on-incompatible && bun run test:credentials && 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:ci-prompts && bun run test:ci-secrets && bun run test:android-onboarding-progress && bun run test:onboarding-telemetry && bun run test:v2-event-migration && bun run test:analytics && 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:mcp-analytics && bun run test:app-created-source && bun run test:doctor-analytics && bun run test:posthog-exception && bun run test:build-platform-selection && 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-app-conflict && bun run test:init-guardrails && bun run test:prompt-preferences && bun run test:esm-sdk && bun run test:mcp && bun run test:version-detection && bun run test:platform-paths && bun run test:payload-split && bun run test:manifest-path-encoding && bun run test:macos-signing && bun run test:apple-api-import-helpers && 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: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-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-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:platform-flow-contract && bun run test:tail-engine-shared",
"test:build-platform-selection": "bun test/test-build-platform-selection.mjs",
"test:ai-log-capture": "bun test/test-ai-log-capture.mjs",
"test:ai-analyze-flow": "bun test/test-ai-analyze-flow.mjs",
Expand Down
16 changes: 16 additions & 0 deletions cli/src/__dev__/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# `src/__dev__/` — dev/test-only modules (NEVER shipped)

Modules here exist only for development and testing (e.g. spoofing the Apple API
in AI tests). They MUST be referenced **only** from inside
`if (globalThis.__CAPGO_DEV__) { … }` branches.

Why this is safe in the NPM release:

1. The release build defines `globalThis.__CAPGO_DEV__ = false` (see `build.mjs`),
so `minify`'s dead-code elimination removes the branch **and** tree-shakes the
imported `__dev__` module out of `dist/index.js`.
2. npm publishes only `dist/` (`package.json` `files`), so source is never published.
3. `test/test-dev-gate-stripped.mjs` greps the built bundle for dev markers and
fails the build if any leak.

Never import a `__dev__` module from a non-dev (always-on) code path.
9 changes: 8 additions & 1 deletion cli/src/build/mobileprovision-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,14 @@ function parseMobileprovisionBuffer(data: Buffer, source: string): Mobileprovisi
return { name, uuid, applicationIdentifier, bundleId }
}

function parseMobileprovisionBufferDetailed(data: Buffer, source: string): MobileprovisionDetail {
/**
* Buffer-based variant of {@link parseMobileprovisionDetailed} — parses the raw
* .mobileprovision bytes directly instead of reading a path. Used by the iOS
* onboarding engine's import-provide-profile-path effect, which reads the file
* via its injected `readFile` dep (so the IO stays at the boundary) and parses
* the returned Buffer here. `source` is a label used only in error messages.
*/
export function parseMobileprovisionBufferDetailed(data: Buffer, source = '<buffer input>'): MobileprovisionDetail {
const base = parseMobileprovisionBuffer(data, source)

const xmlStartMarker = '<?xml'
Expand Down
Loading
Loading