nativeapptemplate-agent 0.2.2 → 0.2.4

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.
Files changed (66) hide show
  1. package/AGENTS.md +18 -9
  2. package/README.md +8 -5
  3. package/dist/agents/reviewer.d.ts +1 -0
  4. package/dist/agents/reviewer.d.ts.map +1 -1
  5. package/dist/agents/reviewer.js +17 -3
  6. package/dist/agents/reviewer.js.map +1 -1
  7. package/dist/agents/workers/android.d.ts.map +1 -1
  8. package/dist/agents/workers/android.js +15 -33
  9. package/dist/agents/workers/android.js.map +1 -1
  10. package/dist/agents/workers/copy.d.ts +6 -0
  11. package/dist/agents/workers/copy.d.ts.map +1 -0
  12. package/dist/agents/workers/copy.js +32 -0
  13. package/dist/agents/workers/copy.js.map +1 -0
  14. package/dist/agents/workers/ios.d.ts.map +1 -1
  15. package/dist/agents/workers/ios.js +7 -27
  16. package/dist/agents/workers/ios.js.map +1 -1
  17. package/dist/agents/workers/rails.d.ts +1 -0
  18. package/dist/agents/workers/rails.d.ts.map +1 -1
  19. package/dist/agents/workers/rails.js +19 -27
  20. package/dist/agents/workers/rails.js.map +1 -1
  21. package/dist/env-bridge.d.ts.map +1 -1
  22. package/dist/env-bridge.js +3 -2
  23. package/dist/env-bridge.js.map +1 -1
  24. package/dist/index.d.ts +4 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +39 -4
  27. package/dist/index.js.map +1 -1
  28. package/dist/mcp.d.ts.map +1 -1
  29. package/dist/mcp.js +4 -1
  30. package/dist/mcp.js.map +1 -1
  31. package/dist/rails-lifecycle.d.ts +2 -0
  32. package/dist/rails-lifecycle.d.ts.map +1 -1
  33. package/dist/rails-lifecycle.js +91 -24
  34. package/dist/rails-lifecycle.js.map +1 -1
  35. package/dist/report/collect.d.ts.map +1 -1
  36. package/dist/report/collect.js +26 -2
  37. package/dist/report/collect.js.map +1 -1
  38. package/dist/report/model.d.ts +2 -0
  39. package/dist/report/model.d.ts.map +1 -1
  40. package/dist/report/render.js +4 -2
  41. package/dist/report/render.js.map +1 -1
  42. package/dist/report/theme.d.ts +1 -1
  43. package/dist/report/theme.d.ts.map +1 -1
  44. package/dist/report/theme.js +2 -0
  45. package/dist/report/theme.js.map +1 -1
  46. package/dist/ruby.d.ts.map +1 -1
  47. package/dist/ruby.js +8 -1
  48. package/dist/ruby.js.map +1 -1
  49. package/dist/validation/discover.d.ts.map +1 -1
  50. package/dist/validation/discover.js +2 -4
  51. package/dist/validation/discover.js.map +1 -1
  52. package/dist/validation/ios-destination.d.ts +2 -0
  53. package/dist/validation/ios-destination.d.ts.map +1 -0
  54. package/dist/validation/ios-destination.js +7 -0
  55. package/dist/validation/ios-destination.js.map +1 -0
  56. package/dist/validation/layer2.d.ts.map +1 -1
  57. package/dist/validation/layer2.js +7 -7
  58. package/dist/validation/layer2.js.map +1 -1
  59. package/dist/validation/stage2-judge.d.ts.map +1 -1
  60. package/dist/validation/stage2-judge.js +21 -4
  61. package/dist/validation/stage2-judge.js.map +1 -1
  62. package/dist/validation/visual-judge.d.ts.map +1 -1
  63. package/dist/validation/visual-judge.js +22 -3
  64. package/dist/validation/visual-judge.js.map +1 -1
  65. package/package.json +1 -1
  66. package/scripts/ruby/rename.rb +25 -8
package/AGENTS.md CHANGED
@@ -25,14 +25,27 @@ Project-wide instructions for AI coding agents (Claude Code, Codex, etc.). Keep
25
25
 
26
26
  - TypeScript `strict: true`; no implicit `any`.
27
27
  - Prefer functions over classes — introduce a class only when state + lifecycle justify it (e.g. a long-lived MCP client wrapper). Stateless transforms are functions.
28
- - Ruby subprocesses: shell out via `execFile("ruby", ["scripts/ruby/<script>.rb", ...])` from a thin wrapper in `src/ruby.ts`. Pass structured data as JSON on stdin/stdout, not positional CLI args. Each script must be self-contained and re-entrant.
28
+ - Ruby subprocesses: shell out via `spawn("ruby", ["scripts/ruby/<script>.rb"])` from the thin wrapper in `src/ruby.ts` (`runRuby`). Pass structured data as JSON on stdin/stdout, not positional CLI args. Each script must be self-contained and re-entrant.
29
29
  - No comments explaining *what* the code does — name things well instead. Reserve comments for non-obvious *why*.
30
30
 
31
+ ## Testing policy
32
+
33
+ Applies to this repo's own code. For generated projects, see Guardrails ("Do not invent tests for the generated code").
34
+
35
+ - **Bug fixes start with a failing test that reproduces the bug. No exceptions.** The fix commit always includes that reproduction test.
36
+ - **Record where each expected value comes from, in the code.** One of: the relevant spec section, a hand calculation, or a known oracle. Never paste in whatever the implementation happened to output as the expected value.
37
+
38
+ # floor(10000 * 31 / 71) = 4366 ← document the basis like this
39
+
40
+ - **See it red at least once before calling it done.** For every new test — especially guards and config checks — deliberately break the target and confirm the test fails. A test that can't fail verifies nothing.
41
+ - **Passing tests alone don't mean done.** Actually run the thing and exercise it.
42
+ - Implementation and tests go in the same commit. "I'll write the tests later" never happens.
43
+
31
44
  ## Substrate (what the agent operates on)
32
45
 
33
46
  The agent targets BOTH the paid and free (MIT-licensed) editions — the same code path handles both, validated end-to-end. **Test the paid edition first**: the free edition is a strict subset of paid (paid = free + multi-tenancy + invitations + role permissions + org switching), so anything that works on paid works on free, but not vice-versa. Catching paid-only regressions first avoids "free passes, paid breaks" surprises.
34
47
 
35
- Env vars point at the paid edition by default. Pick which substrate to use by pointing them at the corresponding repos:
48
+ The three env vars are required (the workers throw if one is unset; there is no built-in default). Point them at the paid repos first, then at the free repos:
36
49
 
37
50
  - `$NATIVEAPPTEMPLATE_API` — Rails 8.1 API repo (`nativeapptemplateapi`, single repo serves both editions; multi-tenancy + invitations are conditional features)
38
51
  - `$NATIVEAPPTEMPLATE_IOS` — SwiftUI iOS repo. Paid: `NativeAppTemplate` (Swift 23,003 LOC, adds org switching, invitations, role permissions). Free: `NativeAppTemplate-Free-iOS` (Swift 15,311 LOC).
@@ -48,16 +61,12 @@ The renamer's substitution rules (Shop / Shopkeeper / ItemTag / NativeAppTemplat
48
61
  - `Shopkeeper` → the authenticated user/owner of a Shop
49
62
  - `ItemTag` (aka Number Tag) → a queue entry, attached to a Shop
50
63
  - **ItemTag has TWO states: `Idled` ↔ `Completed`.** It's a toggle, not a three-state machine. If a user's spec wants three states (e.g. "in-service"), extend the machine rather than assume it.
51
- - Free edition is single-organization (personal account is transparent). Paid edition adds multi-tenancy, invitations, roles, org switching — all out of scope for the rename pipeline (paid-only concepts aren't in the rename plan), but the agent still operates against paid substrates by default since paid is a superset of free.
52
-
53
- ## Repository state
54
-
55
- Pre-implementation as of this writing: `src/` and `scripts/ruby/` are empty, and there is no `package.json`. The npm commands below are the target interface — don't try to run them until the scaffolding lands. Check `src/` before assuming.
64
+ - Free edition is single-organization (personal account is transparent). Paid edition adds multi-tenancy, invitations, roles, org switching — all out of scope for the rename pipeline (paid-only concepts aren't in the rename plan), but test against the paid substrates first since paid is a superset of free.
56
65
 
57
66
  ## Commands
58
67
 
59
68
  ```bash
60
- # Build & test the agent (run from this repo root — once package.json exists)
69
+ # Build & test the agent (run from this repo root)
61
70
  npm run build
62
71
  npm run test
63
72
  npm run dev -- "your spec here"
@@ -139,4 +148,4 @@ Plugin `.mcp.json` pins are load-bearing: `nativeapptemplate-agent@latest` (MCP
139
148
  - **Don't extend scope beyond the queue / simple-CRUD-SaaS family** during the hackathon week. See `docs/SPEC.md` section 9 for the full non-goals list.
140
149
  - **Test the paid edition first.** Free is a strict subset of paid, so running paid first catches regressions that wouldn't surface against free alone. The OSS reproducibility story (judges/contributors with no paid license) lives in the free edition — once paid is green, point env vars at the free repos and re-run for the public demo.
141
150
  - **Don't skip the validation layers to save time.** They are the demo story. A run that green-builds without passing Layer 3 is a failed run.
142
- - **Don't edit, commit, push, or run `git clean` / `rm` inside `$NATIVEAPPTEMPLATE_API`, `$NATIVEAPPTEMPLATE_IOS`, or `$NATIVEAPPTEMPLATE_ANDROID`.** Those are the developer's working copies of the substrate (paid by default; possibly free), shared with other projects on the same machine. Copy them into `./out/<slug>/` first; change nothing in place. If unsure whether a command is safe, ask.
151
+ - **Don't edit, commit, push, or run `git clean` / `rm` inside `$NATIVEAPPTEMPLATE_API`, `$NATIVEAPPTEMPLATE_IOS`, or `$NATIVEAPPTEMPLATE_ANDROID`.** Those are the developer's working copies of the substrate (paid or free), shared with other projects on the same machine. Copy them into `./out/<slug>/` first; change nothing in place. If unsure whether a command is safe, ask.
package/README.md CHANGED
@@ -17,7 +17,7 @@ Coherent across all three, in under an hour.
17
17
  npx nativeapptemplate-agent "a walk-in clinic queue for small veterinary practices" --project-name="VetClinic"
18
18
  ```
19
19
 
20
- > **Status: 0.2.2 stable.** First built during [Built with Opus 4.7: a Claude Code Hackathon](https://cerebralvalley.ai/e/built-with-4-7-hackathon) (April 21–27, 2026); shipped to npm post-hackathon. Verified end-to-end on the three demo specs below from a fresh `/tmp/` cwd — the full 3-spec × 2-edition × 2-platform matrix is green at `NATIVEAPPTEMPLATE_VISUAL=2` (see the [matrix](#demo)). Stage 2 (scripted-CRUD walk-through via `mobile-mcp` against a live Rails server) and paid-edition parity validation landed post-launch. Active development continues — see the [roadmap](./ROADMAP.md) for what's next.
20
+ > **Status: 0.2.4 stable.** First built during [Built with Opus 4.7: a Claude Code Hackathon](https://cerebralvalley.ai/e/built-with-4-7-hackathon) (April 21–27, 2026); shipped to npm post-hackathon. Verified end-to-end on the three demo specs below from a fresh `/tmp/` cwd — the full 3-spec × 2-edition × 2-platform matrix is green at `NATIVEAPPTEMPLATE_VISUAL=2` (see the [matrix](#demo)). Stage 2 (scripted-CRUD walk-through via `mobile-mcp` against a live Rails server) and paid-edition parity validation landed post-launch. Active development continues — see the [roadmap](./ROADMAP.md) for what's next.
21
21
 
22
22
  ---
23
23
 
@@ -223,7 +223,10 @@ The same generator also ships as an MCP server — `npx -y -p nativeapptemplate-
223
223
  - `NATIVEAPPTEMPLATE_BRIDGE=off` — skip writing to `~/.gradle/gradle.properties`. The agent normally mirrors `NATIVEAPPTEMPLATE_API_*` (HOST/PORT/SCHEME) into renamed-product variants (`<PRODUCT>_API_*`) at run time so the generated Android app picks them up via `gradle.properties` and the iOS sim launch picks them up via `SIMCTL_CHILD_*`. Set this to disable the file write (process.env injection still runs for child-spawn paths).
224
224
  - `NATIVEAPPTEMPLATE_BRIDGE_DRY_RUN=1` — log what would be written to `~/.gradle/gradle.properties` instead of writing. Useful before granting the bridge write access to your user-global gradle.
225
225
  - `NATIVEAPPTEMPLATE_AGENT_ANTHROPIC_KEY` — dedicated workspace key, see [Security](#security).
226
- - `ANDROID_SERIAL` — when more than one Android device/emulator is attached (e.g. a physical device plus a running emulator), `adb` standard practice is to set `ANDROID_SERIAL=<serial>` to disambiguate. The agent honors this transparently because it runs `adb` directly. Run `adb devices` to list serials. Visual-judge runs with multiple Android targets attached will error with `more than one device/emulator` if this isn't set.
226
+ - `NATIVEAPPTEMPLATE_ADB_SERIAL` — the `adb -s` target when more than one Android device/emulator is attached. Without it the agent prefers an `emulator-*` serial, then the first device. Run `adb devices` to list serials.
227
+ - `NATIVEAPPTEMPLATE_MOBILE_IOS_DEVICE` / `NATIVEAPPTEMPLATE_MOBILE_ANDROID_DEVICE` — pin the device `mobile-mcp` drives in Stage 2 (device id or exact name) when several are booted.
228
+ - `NATIVEAPPTEMPLATE_IOS_DESTINATION` — the `xcodebuild -destination` for build mode (default `platform=iOS Simulator,name=iPhone 17 Pro,OS=26.2`). Set it if you don't have that simulator, e.g. `platform=iOS Simulator,name=iPhone 16`.
229
+ - `NATIVEAPPTEMPLATE_API_SCHEME` — `http` or `https` for the generated apps' API URL (read by the env bridge alongside the substrate Rails `.env` HOST/PORT).
227
230
 
228
231
  The agent resolves `adb` to a known-good binary in this priority order: `$ANDROID_HOME/platform-tools/adb`, `$ANDROID_SDK_ROOT/platform-tools/adb`, `~/Library/Android/sdk/platform-tools/adb` (Android Studio default), `/Applications/android-sdk-macosx/platform-tools/adb`, `/opt/homebrew/bin/adb`, `/usr/local/bin/adb`, then PATH. This avoids surprises like a stale `~/.apportable/SDK/bin/adb` (i386, won't exec on Apple Silicon) shadowing a working `adb` on PATH.
229
232
 
@@ -232,7 +235,7 @@ The agent resolves `adb` to a known-good binary in this priority order: `$ANDROI
232
235
  The agent doesn't just generate code and exit — it validates the output.
233
236
 
234
237
  1. **Structural.** `ripgrep` for leftover domain tokens; OpenAPI contract parity check between Rails, iOS networking, and Android repository layers. A silent rename inconsistency fails the run before any tests execute.
235
- 2. **Runtime.** Verify the generated Rails app boots (`bin/rails runner 'puts OK'`); type-check or build the iOS and Android apps. With `NATIVEAPPTEMPLATE_VISUAL=1`, escalate to a full build (`xcodebuild build` + `./gradlew assembleDebug`) and install on the booted sim/emulator. With `=2`, additionally boot the live Rails server and drive a scripted CRUD walk-through via [`mobile-next/mobile-mcp`](https://github.com/mobile-next/mobile-mcp). Any 4xx/5xx or unhandled client error fails the run.
238
+ 2. **Runtime.** Verify the generated Rails app boots (`bin/rails runner 'puts OK'`); type-check or build the iOS and Android apps. With `NATIVEAPPTEMPLATE_VISUAL=1`, escalate to a full build (`xcodebuild build` + `./gradlew assembleDebug`) and install on the booted sim/emulator. With `=2`, additionally boot the live Rails server and drive a scripted CRUD walk-through via [`mobile-next/mobile-mcp`](https://github.com/mobile-next/mobile-mcp). A walk step that doesn't reach its expected screen fails the run.
236
239
  3. **Semantic.** Opus 4.7 as judge — scores whether the generated code and rendered UI actually express the intended domain. Vision judges read simulator/emulator screenshots directly.
237
240
 
238
241
  See [`docs/SPEC.md`](./docs/SPEC.md) for the full design.
@@ -245,10 +248,10 @@ Every run writes a report of the validation results to the output directory:
245
248
 
246
249
  *Example report from a free-edition run of `"a walk-in queue for small veterinary clinics"` — all three layers green. Click to view full size; the real artifact is a live, self-contained HTML file you open in a browser.*
247
250
 
248
- - **`out/<slug>/validation-report.html`** — a self-contained HTML report (screenshots base64-embedded, no external assets, no JavaScript) you can open in a browser, attach to a PR, or drop into a demo. It shows the overall verdict, a platform×layer matrix, Layer 1 leftover-token findings, Layer 2 build commands + `stderr`, Layer 3 home-screen screenshots with the vision judge's per-criterion rationales (plus the Stage 2 filmstrip when `NATIVEAPPTEMPLATE_VISUAL=2`), the reviewer's contract diff, and the domain rename plan.
251
+ - **`out/<slug>/validation-report.html`** — a self-contained HTML report (screenshots base64-embedded, no external assets, no JavaScript) you can open in a browser, attach to a PR, or drop into a demo. It shows the overall verdict — **PASS**, **FAIL**, or **PARTIAL** (nothing failed, but Layer 3 didn't judge the UI, as in a default `NATIVEAPPTEMPLATE_VISUAL=0` run) — a platform×layer matrix, Layer 1 leftover-token findings, Layer 2 build commands + `stderr`, Layer 3 home-screen screenshots with the vision judge's per-criterion rationales (plus the Stage 2 filmstrip when `NATIVEAPPTEMPLATE_VISUAL=2`), the reviewer's contract diff, and the domain rename plan.
249
252
  - **`out/<slug>/report.json`** — the same data, machine-readable, for CI gating or programmatic use. The full schema lives in [`docs/validation-report.md`](./docs/validation-report.md).
250
253
 
251
- The CLI **exits non-zero when validation fails**, so a shell `&&` chain or CI step catches it:
254
+ The CLI **exits non-zero when validation fails** (PARTIAL exits 0), so a shell `&&` chain or CI step catches it:
252
255
 
253
256
  ```bash
254
257
  npx nativeapptemplate-agent "a walk-in clinic queue" && echo "validation passed"
@@ -6,4 +6,5 @@ export type ReviewerInput = {
6
6
  android: WorkerResult;
7
7
  };
8
8
  export declare function runReviewer(input: ReviewerInput): Promise<ReviewerResult>;
9
+ export declare function deriveRole(domain: DomainSpec): string;
9
10
  //# sourceMappingURL=reviewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAeF,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAgE/E"}
1
+ {"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;CACvB,CAAC;AAeF,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAuE/E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAGrD"}
@@ -41,7 +41,13 @@ export async function runReviewer(input) {
41
41
  const summary = formatDiffSummary(diff);
42
42
  for (const line of summary)
43
43
  trace("reviewer", line);
44
- const fatalCount = diff.iosOrphan.length + diff.androidOrphan.length + diff.iosOnly.length + diff.androidOnly.length;
44
+ // An extractor that finds nothing (e.g. a renamed networking dir it no
45
+ // longer recognizes) would otherwise yield an empty diff and a vacuous PASS.
46
+ const emptyClients = [
47
+ ...(iosEndpoints.length === 0 ? ["ios:no-endpoints-extracted"] : []),
48
+ ...(androidEndpoints.length === 0 ? ["android:no-endpoints-extracted"] : []),
49
+ ];
50
+ const fatalCount = diff.iosOrphan.length + diff.androidOrphan.length + diff.iosOnly.length + diff.androidOnly.length + emptyClients.length;
45
51
  const baseDiffs = [
46
52
  `rails:openapi=${railsContract.openapiVersion}`,
47
53
  `rails:title=${railsContract.title}`,
@@ -57,6 +63,7 @@ export async function runReviewer(input) {
57
63
  `android-only=${diff.androidOnly.length}`,
58
64
  ];
59
65
  const findings = [
66
+ ...emptyClients,
60
67
  ...formatFindings("ios-orphan", diff.iosOrphan),
61
68
  ...formatFindings("android-orphan", diff.androidOrphan),
62
69
  ...formatFindings("ios-only", diff.iosOnly),
@@ -69,9 +76,16 @@ export async function runReviewer(input) {
69
76
  trace("reviewer", `${domain.displayName}: contract parity PASS`);
70
77
  return { contractParity: "pass", diffs: [...baseDiffs, ...findings] };
71
78
  }
72
- function deriveRole(domain) {
79
+ export function deriveRole(domain) {
73
80
  const pair = domain.renamePlan.find((p) => p.from === "Shopkeeper");
74
- return (pair?.to ?? "Shopkeeper").toLowerCase();
81
+ return pascalToSnake(pair?.to ?? "Shopkeeper");
82
+ }
83
+ // Mirrors rename.rb's snake_case: the route segment for FrontDesk is front_desk.
84
+ function pascalToSnake(pascal) {
85
+ return pascal
86
+ .replace(/([a-z\d])([A-Z])/g, "$1_$2")
87
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2")
88
+ .toLowerCase();
75
89
  }
76
90
  function formatDiffSummary(diff) {
77
91
  const lines = [];
@@ -1 +1 @@
1
- {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/agents/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,GAGd,MAAM,uBAAuB,CAAC;AAU/B,wEAAwE;AACxE,2EAA2E;AAC3E,4EAA4E;AAC5E,qBAAqB;AACrB,EAAE;AACF,oBAAoB;AACpB,2EAA2E;AAC3E,2DAA2D;AAC3D,sEAAsE;AACtE,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAoB;IACpD,IAAI,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAEtD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1D,KAAK,CAAC,UAAU,EAAE,iCAAiC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,mDAAmD,CAAC,CAAC;QAC5F,OAAO;YACL,cAAc,EAAE,MAAM;YACtB,KAAK,EAAE,CAAC,6DAA6D,CAAC;SACvE,CAAC;IACJ,CAAC;IACD,KAAK,CACH,UAAU,EACV,UAAU,aAAa,CAAC,SAAS,CAAC,MAAM,eAAe,aAAa,CAAC,WAAW,qBAAqB,aAAa,CAAC,cAAc,YAAY,aAAa,CAAC,KAAK,GAAG,CACpK,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACnE,KAAK,CAAC,UAAU,EAAE,QAAQ,YAAY,CAAC,MAAM,oBAAoB,CAAC,CAAC;IACnE,KAAK,CAAC,UAAU,EAAE,YAAY,gBAAgB,CAAC,MAAM,qBAAqB,CAAC,CAAC;IAE5E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9F,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,OAAO;QAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEpD,uEAAuE;IACvE,6EAA6E;IAC7E,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC;IACF,MAAM,UAAU,GACd,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAE1H,MAAM,SAAS,GAAa;QAC1B,iBAAiB,aAAa,CAAC,cAAc,EAAE;QAC/C,eAAe,aAAa,CAAC,KAAK,EAAE;QACpC,mBAAmB,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE;QACnD,iBAAiB,aAAa,CAAC,WAAW,EAAE;QAC5C,iBAAiB,YAAY,CAAC,MAAM,EAAE;QACtC,qBAAqB,gBAAgB,CAAC,MAAM,EAAE;QAC9C,QAAQ,IAAI,EAAE;QACd,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QACrC,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QACrC,kBAAkB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QAC7C,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACjC,gBAAgB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;KAC1C,CAAC;IACF,MAAM,QAAQ,GAAa;QACzB,GAAG,YAAY;QACf,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;QAC/C,GAAG,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC;QACvD,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;QAC3C,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC;KACpD,CAAC;IAEF,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,4BAA4B,UAAU,WAAW,CAAC,CAAC;QAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,wBAAwB,CAAC,CAAC;IACjE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACpE,OAAO,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM;SACV,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC;SACrC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAkB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,oBAAoB,IAAI,CAAC,SAAS,CAAC,MAAM,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,oBAAoB,IAAI,CAAC,aAAa,CAAC,MAAM,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,kBAAkB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CACxM,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,qCAAqC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1G,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,SAA8B;IACnE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,OAAO,CAAC,SAA8B,EAAE,MAAc,CAAC;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,SAAS,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9F,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF,KAAK,UAAU,eAAe,CAAC,KAAoB;IACjD,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACjC,KAAK,CAAC,UAAU,EAAE,2BAA2B,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,KAAK,CAAC,UAAU,EAAE,+CAA+C,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,KAAK,CAAC,UAAU,EAAE,mDAAmD,CAAC,CAAC;IACvE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,KAAK,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,+BAA+B,CAAC,CAAC;IAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/android.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAoBxE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAwChF"}
1
+ {"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/android.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAsBxE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAwChF"}
@@ -1,21 +1,24 @@
1
- import { cp, lstat, mkdir, rm, stat } from "node:fs/promises";
1
+ import { mkdir, rm, stat } from "node:fs/promises";
2
2
  import { spawn } from "node:child_process";
3
3
  import { scrubbedEnv } from "../../env.js";
4
4
  import { resolve } from "node:path";
5
5
  import { trace } from "../../trace.js";
6
6
  import { isStub } from "../../stub.js";
7
7
  import { runRuby } from "../../ruby.js";
8
+ import { copySubstrate } from "./copy.js";
8
9
  import { slugToPascal } from "../../slug.js";
9
- const SKIP_SEGMENTS = new Set([
10
- ".git",
11
- ".claude",
12
- "build",
13
- ".gradle",
14
- ".idea",
15
- ".kotlin",
16
- "captures",
17
- "node_modules",
18
- ]);
10
+ const SKIP_RULES = {
11
+ anySegment: [
12
+ ".git",
13
+ ".claude",
14
+ "build",
15
+ ".gradle",
16
+ ".idea",
17
+ ".kotlin",
18
+ "captures",
19
+ "node_modules",
20
+ ],
21
+ };
19
22
  export async function runAndroidWorker(domain) {
20
23
  if (isStub("android")) {
21
24
  return runStubAndroidWorker(domain);
@@ -27,7 +30,7 @@ export async function runAndroidWorker(domain) {
27
30
  const outDir = resolve(process.cwd(), "out", domain.slug, "android");
28
31
  trace("android", `copying substrate from ${substrate} to ${outDir}`);
29
32
  await prepareFresh(outDir);
30
- await copyFiltered(substrate, outDir);
33
+ await copySubstrate(substrate, outDir, SKIP_RULES);
31
34
  const productPairs = buildProductRenamePairs(domain.slug);
32
35
  const renamePlan = [...productPairs, ...domain.renamePlan].filter((p) => p.from !== p.to);
33
36
  const plan = renamePlan.map((p) => `${p.from}->${p.to}`).join(", ");
@@ -60,27 +63,6 @@ async function prepareFresh(dir) {
60
63
  }
61
64
  await mkdir(dir, { recursive: true });
62
65
  }
63
- async function copyFiltered(src, dest) {
64
- await cp(src, dest, {
65
- recursive: true,
66
- force: true,
67
- filter: async (source) => {
68
- const rel = source.slice(src.length);
69
- const segments = rel.split("/").filter(Boolean);
70
- if (segments.some((seg) => SKIP_SEGMENTS.has(seg)))
71
- return false;
72
- try {
73
- const s = await lstat(source);
74
- if (s.isSocket() || s.isFIFO() || s.isBlockDevice() || s.isCharacterDevice())
75
- return false;
76
- }
77
- catch {
78
- return false;
79
- }
80
- return true;
81
- },
82
- });
83
- }
84
66
  async function initGit(dir) {
85
67
  await new Promise((resolvePromise, rejectPromise) => {
86
68
  const child = spawn("git", ["init", "-q", "-b", "main"], { cwd: dir, env: scrubbedEnv() });
@@ -1 +1 @@
1
- {"version":3,"file":"android.js","sourceRoot":"","sources":["../../../src/agents/workers/android.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"android.js","sourceRoot":"","sources":["../../../src/agents/workers/android.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type CopySkipRules = {
2
+ rootPaths?: readonly string[];
3
+ anySegment?: readonly string[];
4
+ };
5
+ export declare function copySubstrate(src: string, dest: string, rules: CopySkipRules): Promise<void>;
6
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/copy.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAE1B,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE9B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBlG"}
@@ -0,0 +1,32 @@
1
+ import { cp, lstat } from "node:fs/promises";
2
+ import { relative, resolve, sep } from "node:path";
3
+ export async function copySubstrate(src, dest, rules) {
4
+ const rootPaths = rules.rootPaths ?? [];
5
+ const anySegment = new Set(rules.anySegment ?? []);
6
+ const root = resolve(src);
7
+ await cp(root, dest, {
8
+ recursive: true,
9
+ force: true,
10
+ // Default cp rewrites relative symlinks as absolute paths into the
11
+ // substrate, so a later in-place rewrite of out/ would edit the substrate.
12
+ verbatimSymlinks: true,
13
+ filter: async (source) => {
14
+ const segments = relative(root, source).split(sep).filter(Boolean);
15
+ const rel = segments.join("/");
16
+ if (rootPaths.some((p) => rel === p || rel.startsWith(`${p}/`)))
17
+ return false;
18
+ if (segments.some((seg) => anySegment.has(seg)))
19
+ return false;
20
+ try {
21
+ const s = await lstat(source);
22
+ if (s.isSocket() || s.isFIFO() || s.isBlockDevice() || s.isCharacterDevice())
23
+ return false;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ return true;
29
+ },
30
+ });
31
+ }
32
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/agents/workers/copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AASnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY,EAAE,KAAoB;IACjF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE;QACnB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,mEAAmE;QACnE,2EAA2E;QAC3E,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;YAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9E,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC9D,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,iBAAiB,EAAE;oBAAE,OAAO,KAAK,CAAC;YAC7F,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/ios.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAYxE,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAwC5E"}
1
+ {"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/ios.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAcxE,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAwC5E"}
@@ -1,13 +1,16 @@
1
- import { cp, lstat, mkdir, rm, stat } from "node:fs/promises";
1
+ import { mkdir, rm, stat } from "node:fs/promises";
2
2
  import { spawn } from "node:child_process";
3
3
  import { scrubbedEnv } from "../../env.js";
4
4
  import { resolve } from "node:path";
5
5
  import { trace } from "../../trace.js";
6
6
  import { isStub } from "../../stub.js";
7
7
  import { runRuby } from "../../ruby.js";
8
+ import { copySubstrate } from "./copy.js";
8
9
  import { slugToPascal } from "../../slug.js";
9
- const SKIP_RELATIVE_PATHS = ["/.git", "/.claude", "/DerivedData", "/.build", "/Pods", "/Carthage"];
10
- const SKIP_DIR_NAMES = new Set(["xcuserdata"]);
10
+ const SKIP_RULES = {
11
+ rootPaths: [".git", ".claude", "DerivedData", ".build", "Pods", "Carthage"],
12
+ anySegment: ["xcuserdata"],
13
+ };
11
14
  export async function runIosWorker(domain) {
12
15
  if (isStub("ios")) {
13
16
  return runStubIosWorker(domain);
@@ -19,7 +22,7 @@ export async function runIosWorker(domain) {
19
22
  const outDir = resolve(process.cwd(), "out", domain.slug, "ios");
20
23
  trace("ios", `copying substrate from ${substrate} to ${outDir}`);
21
24
  await prepareFresh(outDir);
22
- await copyFiltered(substrate, outDir);
25
+ await copySubstrate(substrate, outDir, SKIP_RULES);
23
26
  const productPairs = buildProductRenamePairs(domain.slug);
24
27
  const renamePlan = [...productPairs, ...domain.renamePlan].filter((p) => p.from !== p.to);
25
28
  const plan = renamePlan.map((p) => `${p.from}->${p.to}`).join(", ");
@@ -52,29 +55,6 @@ async function prepareFresh(dir) {
52
55
  }
53
56
  await mkdir(dir, { recursive: true });
54
57
  }
55
- async function copyFiltered(src, dest) {
56
- await cp(src, dest, {
57
- recursive: true,
58
- force: true,
59
- filter: async (source) => {
60
- const rel = source.slice(src.length);
61
- if (SKIP_RELATIVE_PATHS.some((p) => rel === p || rel.startsWith(`${p}/`)))
62
- return false;
63
- const segments = rel.split("/").filter(Boolean);
64
- if (segments.some((seg) => SKIP_DIR_NAMES.has(seg)))
65
- return false;
66
- try {
67
- const s = await lstat(source);
68
- if (s.isSocket() || s.isFIFO() || s.isBlockDevice() || s.isCharacterDevice())
69
- return false;
70
- }
71
- catch {
72
- return false;
73
- }
74
- return true;
75
- },
76
- });
77
- }
78
58
  async function initGit(dir) {
79
59
  await new Promise((resolvePromise, rejectPromise) => {
80
60
  const child = spawn("git", ["init", "-q", "-b", "main"], { cwd: dir, env: scrubbedEnv() });
@@ -1 +1 @@
1
- {"version":3,"file":"ios.js","sourceRoot":"","sources":["../../../src/agents/workers/ios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ios.js","sourceRoot":"","sources":["../../../src/agents/workers/ios.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import type { DomainSpec, WorkerResult } from "../types.js";
2
2
  export declare function runRailsWorker(domain: DomainSpec): Promise<WorkerResult>;
3
+ export declare function dropSlugDatabases(slug: string): Promise<void>;
3
4
  //# sourceMappingURL=rails.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rails.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/rails.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAWxE,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAyC9E"}
1
+ {"version":3,"file":"rails.d.ts","sourceRoot":"","sources":["../../../src/agents/workers/rails.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAc,YAAY,EAAE,MAAM,aAAa,CAAC;AAaxE,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAyC9E;AAqBD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBnE"}
@@ -1,12 +1,15 @@
1
- import { cp, lstat, mkdir, rm, stat } from "node:fs/promises";
1
+ import { mkdir, rm, stat } from "node:fs/promises";
2
2
  import { spawn } from "node:child_process";
3
3
  import { scrubbedEnv } from "../../env.js";
4
4
  import { resolve } from "node:path";
5
5
  import { trace } from "../../trace.js";
6
6
  import { isStub } from "../../stub.js";
7
7
  import { runRuby } from "../../ruby.js";
8
+ import { copySubstrate } from "./copy.js";
8
9
  import { slugToPascal, slugToSnake } from "../../slug.js";
9
- const SKIP_RELATIVE_PATHS = ["/.git", "/.claude", "/node_modules", "/tmp", "/log", "/vendor/bundle"];
10
+ const SKIP_RULES = {
11
+ rootPaths: [".git", ".claude", "node_modules", "tmp", "log", "vendor/bundle"],
12
+ };
10
13
  export async function runRailsWorker(domain) {
11
14
  if (isStub("rails")) {
12
15
  return runStubRailsWorker(domain);
@@ -18,7 +21,7 @@ export async function runRailsWorker(domain) {
18
21
  const outDir = resolve(process.cwd(), "out", domain.slug, "rails");
19
22
  trace("rails", `copying substrate from ${substrate} to ${outDir}`);
20
23
  await prepareFresh(outDir);
21
- await copyFiltered(substrate, outDir);
24
+ await copySubstrate(substrate, outDir, SKIP_RULES);
22
25
  const productPairs = buildProductRenamePairs(domain.slug);
23
26
  const renamePlan = [...productPairs, ...domain.renamePlan].filter((p) => p.from !== p.to);
24
27
  const plan = renamePlan.map((p) => `${p.from}->${p.to}`).join(", ");
@@ -52,41 +55,30 @@ async function prepareFresh(dir) {
52
55
  }
53
56
  await mkdir(dir, { recursive: true });
54
57
  }
55
- async function copyFiltered(src, dest) {
56
- await cp(src, dest, {
57
- recursive: true,
58
- force: true,
59
- filter: async (source) => {
60
- const rel = source.slice(src.length);
61
- if (SKIP_RELATIVE_PATHS.some((p) => rel === p || rel.startsWith(`${p}/`)))
62
- return false;
63
- try {
64
- const s = await lstat(source);
65
- if (s.isSocket() || s.isFIFO() || s.isBlockDevice() || s.isCharacterDevice())
66
- return false;
67
- }
68
- catch {
69
- return false;
70
- }
71
- return true;
72
- },
73
- });
74
- }
75
- async function dropSlugDatabases(slug) {
58
+ export async function dropSlugDatabases(slug) {
76
59
  const prefix = `${slugToSnake(slug)}_api`;
77
60
  const names = await listDatabasesStartingWith(prefix);
78
61
  if (names.length === 0) {
79
62
  trace("rails", `no stale ${prefix}* databases to drop`);
80
63
  return;
81
64
  }
65
+ const dropped = [];
82
66
  for (const name of names) {
83
- await execPsql(["-c", `DROP DATABASE IF EXISTS "${name}";`]);
67
+ // Best-effort: a DB still held open by a previous bin/dev must not abort
68
+ // the run (the other workers would keep running with no report written).
69
+ try {
70
+ await execPsql(["-c", `DROP DATABASE IF EXISTS "${name}";`]);
71
+ dropped.push(name);
72
+ }
73
+ catch (err) {
74
+ trace("rails", `could not drop ${name} (left in place): ${err instanceof Error ? err.message.trim() : String(err)}`);
75
+ }
84
76
  }
85
- trace("rails", `dropped ${names.length} stale slug-scoped database(s): ${names.join(", ")}`);
77
+ trace("rails", `dropped ${dropped.length} stale slug-scoped database(s): ${dropped.join(", ")}`);
86
78
  }
87
79
  async function listDatabasesStartingWith(prefix) {
88
80
  try {
89
- const stdout = await execPsql(["-tAc", `SELECT datname FROM pg_database WHERE datname LIKE '${prefix}%' ORDER BY datname;`]);
81
+ const stdout = await execPsql(["-tAc", `SELECT datname FROM pg_database WHERE datname LIKE '${prefix.replace(/_/g, "\\_")}%' ORDER BY datname;`]);
90
82
  return stdout.split("\n").map((s) => s.trim()).filter(Boolean);
91
83
  }
92
84
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"rails.js","sourceRoot":"","sources":["../../../src/agents/workers/rails.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rails.js","sourceRoot":"","sources":["../../../src/agents/workers/rails.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"env-bridge.d.ts","sourceRoot":"","sources":["../src/env-bridge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsCpD,MAAM,MAAM,YAAY,GAAG;IAGzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAE1D;AAKD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAyBtF;AAkBD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAQjF;AAMD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAKlE;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IAGtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAoBF,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CA8BpF"}
1
+ {"version":3,"file":"env-bridge.d.ts","sourceRoot":"","sources":["../src/env-bridge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsCpD,MAAM,MAAM,YAAY,GAAG;IAGzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAE1D;AAKD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAyBtF;AAkBD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAQjF;AAMD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAKlE;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IAGtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAoBF,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BpF"}
@@ -1,6 +1,6 @@
1
- import { readFile, writeFile } from "node:fs/promises";
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
2
  import { homedir } from "node:os";
3
- import { join } from "node:path";
3
+ import { dirname, join } from "node:path";
4
4
  import { slugToPascal } from "./slug.js";
5
5
  // Bridges substrate-named API config (NATIVEAPPTEMPLATE_API_*) to the
6
6
  // renamed-product equivalents (<PRODUCT>_API_*) so the agent's auto-
@@ -147,6 +147,7 @@ export async function syncGradleProperties(bridge) {
147
147
  if (dryRun) {
148
148
  return { path, mode: "dry-run", removedStale, preview: next };
149
149
  }
150
+ await mkdir(dirname(path), { recursive: true });
150
151
  await writeFile(path, next);
151
152
  return { path, mode: hasValues ? "wrote" : "noop", removedStale };
152
153
  }