Skip to content

Releases: nativeapptemplate/nativeapptemplate-agent

v0.1.2

05 May 09:04
10759e3

Choose a tag to compare

Patch release — first stable

Fixes two launch-blocker bugs in v0.1.1 that surfaced when running the published package via npx from a /tmp/ directory.

This is the first version that's verified-clean from a never-seen-before user cwd. v0.1.0 and v0.1.1 have been deprecated.

Install:

npx -y nativeapptemplate-agent@latest "your spec"

What changed

Bug 1 — Ruby script path resolution (src/ruby.ts)

src/ruby.ts looked for scripts/ruby/rename.rb relative to process.cwd(), not the package install directory. From /tmp/anything/, this looked for /tmp/anything/scripts/ruby/rename.rb and failed:

Error: ruby script rename.rb exited 1: ruby: No such file or directory --
       /private/tmp/nat-test3/scripts/ruby/rename.rb (LoadError)

Fix: resolve the script path relative to the module's own location via import.meta.url + fileURLToPath. Module-relative for packaged resources; cwd-relative for user-output paths (out/, tmp/trace/, tmp/screenshots/) which were already correct and stay that way.

Bug 2 — rename.rb skip-rule false-matched user cwd ancestors (scripts/ruby/rename.rb)

The renamer's skip?(path) check ran SKIP_DIR_SEGMENTS (tmp, log, build, node_modules, .git, …) against the absolute path. When the user runs from /tmp/myproject/, every file under that prefix matched tmp and got skipped — so the renamer scanned 0 files and produced 0 substitutions. The substrate was copied but never renamed, and Layer 1 reported thousands of leftover tokens.

Fix: compute the path relative to the project root before running skip checks. /tmp/myproject/out/<slug>/rails/README.md becomes out/<slug>/rails/README.md for skip-comparison purposes, no skip-segment matches, file is scanned.

Verified

End-to-end run from /tmp/nat-test4/ (a previously-broken cwd):

$ npx nativeapptemplate-agent "a personal task tracker with due dates"
nativeapptemplate-agent: received spec: a personal task tracker with due dates
=== run complete ===
result: Layer 1 3/3 pass · Layer 2 3/3 pass · Layer 3 skipped · reviewer PASS
overall: PASS

rg "Shop|Shopkeeper|ItemTag" out/task-tracker/ outside vendor/bundle/ → zero matches. Substrate fully renamed.

Deprecations

Version Status Reason
0.1.0 deprecated Silent no-op when invoked via npm bin symlink.
0.1.1 deprecated Renamer no-op when run from /tmp/ or any path containing tmp/.
0.1.2 latest Verified clean from /tmp/.

npm install nativeapptemplate-agent (no version) now resolves to 0.1.2.

Full changelog: v0.1.1...v0.1.2

v0.1.1 — bin entry-guard fix

05 May 07:35
461fc5b

Choose a tag to compare

Warning

v0.1.1 has been deprecated. Use v0.1.2 or later. The renamer silently no-ops when run from /tmp/ or any path containing tmp/ as a directory segment, and the Ruby script path was resolved against the user's cwd instead of the package directory — so npx nativeapptemplate-agent from /tmp/anything/ failed entirely. Both bugs are fixed in v0.1.2.

npm warn deprecated nativeapptemplate-agent@0.1.1: Renamer no-op when run from /tmp/ or any path containing 'tmp/'. Use 0.1.2+.

Patch release

Fixes a launch-blocker bug in v0.1.0 where the CLI exited 0 silently when invoked via the npm bin symlink (the npx and ./node_modules/.bin/... code path).

Install:

npx -y nativeapptemplate-agent@0.1.1 "your spec"

What changed

src/index.ts entry-guard previously compared import.meta.url against process.argv[1] without resolving symlinks. When npm installs a package's bin, it symlinks node_modules/.bin/<name> to the actual entry file — so process.argv[1] was the symlink path while import.meta.url was the resolved file URL. The two never matched, the guard fell through silently, and main() was never called.

Fix: resolve both sides via realpathSync + fileURLToPath before comparing. Direct invocation (node dist/index.js) and symlink invocation (./node_modules/.bin/...) now produce identical output.

Verified

  • Direct: node dist/index.js "test spec" → full output, overall: PASS, exit 0
  • Symlinked: npx -y nativeapptemplate-agent@0.1.1 "test spec" from a clean directory → identical output
  • npm view nativeapptemplate-agent@0.1.0 deprecated confirms 0.1.0 is deprecated with a yellow warning steering users to 0.1.1+

v0.1.0 has been deprecated

Anyone running npm install nativeapptemplate-agent@0.1.0 now sees:

npm warn deprecated nativeapptemplate-agent@0.1.0: Silent no-op when invoked via npm bin symlink. Use 0.1.1+.

The version stays available in the registry for anyone with a lockfile pin to 0.1.0, but new installs default to 0.1.1.

v0.1.0 — first release

04 May 04:27
4acfcdd

Choose a tag to compare

⚠️ v0.1.0 has a launch-blocker bug — the CLI exits 0 silently when invoked via npx or any npm bin symlink. Use v0.1.1 or later instead. The 0.1.0 npm package has been deprecated; new installs of nativeapptemplate-agent default to v0.1.1+.


Highlights

The agent generates three coherent platform implementations from a one-sentence natural-language SaaS spec, validated end-to-end through four layers.

Validation stack:

  • Layer 1 — Structural — ripgrep leftover-token scan across all three platforms
  • Layer 2 — Runtime — fast-mode toolchain probe by default; real xcodebuild build + ./gradlew assembleDebug when opted in via NATIVEAPPTEMPLATE_VISUAL=1
  • Layer 3 — Semantic — Opus 4.7 vision judge against captured home-screen screenshots, median-of-3 sampling per criterion, two-criterion Stage 1 rubric (substrate-leak detection + render-failure detection)
  • Reviewer — OpenAPI three-way contract diff with canonical path normalization across Rails OpenAPI / iOS Request structs / Android Retrofit interfaces

Validated demo specs (overall PASS, all four layers green):

  • "a walk-in clinic queue for small veterinary practices" — adapt path
  • "a restaurant waitlist for casual dining" — adapt path
  • "a personal task tracker with due dates" — replace path

Dual-edition support: Same code path works against the free (MIT) edition or the paid edition substrate without modification — pick which by pointing env vars at the corresponding repos. Paid-only features (org switching, invitations, role permissions) survive the rename pipeline intact.

Quickstart

export ANTHROPIC_API_KEY=sk-ant-...
export NATIVEAPPTEMPLATE_API=/path/to/nativeapptemplateapi
export NATIVEAPPTEMPLATE_IOS=/path/to/NativeAppTemplate-Free-iOS
export NATIVEAPPTEMPLATE_ANDROID=/path/to/NativeAppTemplate-Free-Android

npm run dev -- "a walk-in clinic queue for small veterinary practices"

For Layer 3 visual judging (with sim/emulator booted):

ANDROID_SERIAL=emulator-5554 NATIVEAPPTEMPLATE_VISUAL=1 \
  npm run dev -- "a walk-in clinic queue for small veterinary practices"

See README for the full validation table and screenshots.

Acknowledgments

Built with Claude Opus 4.7 + Claude Code. Substrate is the free-edition NativeAppTemplate family of repos.