The previous heredoc-into-temp-file approach broke `require('./...')`
because Node resolves relative paths against the temp file's location
(under `C:\Users\runneradmin\AppData\Local\Temp\`), not against the
runner's working directory — so the require for
`./packages/native-devtools-ios/dist/index.js` always errored with
MODULE_NOT_FOUND on Windows CI even though the resolver itself was
correctly fail-closed.
Switch to a dedicated `scripts/assert-windows-fails-closed.cjs` that
resolves paths via `path.resolve(__dirname, ..., ...)` so the require
target is unambiguous regardless of cwd. Also short-circuits with a
"skipped" message on non-Windows so the same script is safe to invoke
from a future cross-platform CI matrix.
The macOS argent simulator-server build deliberately strips the streaming
surface (no `stream_ready` protocol message, codec/encoder count down 30%
vs the vanilla macOS build). Upstream `radon-main` only publishes the
`-argent-` variant for macOS — `simulator-server-windows.exe` and
`simulator-server-linux` in the same release are vanilla.
The previous shape of this branch shipped the vanilla Windows / Linux
binaries inside `@swmansion/argent`, which would have given non-mac
users a streaming surface the macOS build deliberately suppresses —
feature-parity divergence and an IP / licensing concern. Fixing.
Changes:
- scripts/download-simulator-server.cjs: only fetch
`simulator-server-argent-macos`. The block comment at the top of the
file documents the rationale and the two-line edit needed to flip
Windows / Linux on once upstream argent-windows / argent-linux exist.
- packages/argent/scripts/bundle-tools.cjs: SIMULATOR_SERVER_BINARIES
collapsed to `["simulator-server"]`. Same rationale + same flip-on
recipe.
- The runtime resolver in @argent/native-devtools-ios already branches
on process.platform; on Windows / Linux it now throws "binary not
found" — the correct fail-closed behavior.
- .github/workflows/windows-e2e.yml:
* Replaced "Verify simulator-server.exe is bundled and executable"
with two assertions: (1) the bundle does NOT contain
`simulator-server.exe` (regression guard against accidentally
re-shipping the vanilla binary), and (2) `simulatorServerBinaryPath()`
throws on Windows so silent feature drift can't hide as a passing
simulator path.
* windows-android-e2e job is `if: false` (was workflow_dispatch).
Two blockers: no Windows binary, and hosted runner Android
emulators stall past 20 min anyway. The
`scripts/windows-e2e.cjs` driver is still maintained for local
VM use.
- docs/windows-support.md rewritten: "code-complete but binary-blocked"
with the upstream asset table, the precise unblock recipe, and the
fail-closed runtime behavior on Windows / Linux today.
Triggered first Windows-CI run on the branch and fixed every regression it
surfaced:
Tests (POSIX-only assertions → cross-platform):
- argent-installer/test/mcp-configs.test.ts: Zed adapter test now picks
the platform-correct expected path (AppData on Windows, ~/.config
elsewhere) — mirrors the source change.
- argent-installer/test/mcp-configs.test.ts: getManagedContentTargets
expectations rebuilt via path.join + path.sep so labels round-trip on
both `\` and `/` separators (path.join produces native separators).
- argent-installer/test/utils.test.ts: skill-lock paths use path.join +
os.tmpdir instead of literal `/some/project` and `/tmp/xdg`.
- tool-server/test/debugger/log-file-writer.test.ts +
tool-server/test/debugger/log-registry.test.ts: regex character classes
accept `\` or `/` between path segments.
- tool-server/test/native-devtools-env.test.ts: skip the entire suite on
Windows. The module under test parses macOS DYLD_INSERT_LIBRARIES (a
colon-separated path list); Windows drive letters (C:\…) collide with
the colon separator, so a Windows tmp path can't round-trip through it.
Production code is gated to iOS device dispatch, so the skip is honest.
Workflow:
- windows-e2e.yml: append $ANDROID_HOME/{emulator,platform-tools,
cmdline-tools/latest/bin} to PATH after `setup-android` so bare
`emulator`/`avdmanager`/`adb` calls resolve. setup-android sets
ANDROID_HOME but doesn't touch PATH on Windows.
- windows-e2e.yml: don't fail the job when accel-check exits non-zero;
TCG fallback still works, just slower.
Stacks on top of feat/android-emulator-support, since Windows is Android-only:
iOS support is fundamentally mac-bound (DYLD_INSERT_LIBRARIES, xcrun, simctl,
dylib injection) and stays mac-only behind the platform dispatcher.
Build pipeline
- Replace bash download scripts with Node CJS scripts (cross-platform).
- Download all three simulator-server binaries (argent-macos, vanilla
windows.exe, vanilla linux) on every pack so the npm package is
platform-agnostic. The runtime resolver picks the right filename by
process.platform.
- Replace `rm -rf dist tsconfig.tsbuildinfo && tsc` with `tsc -b --clean &&
tsc -b` in every package — portable, no shell-isms.
- Replace `cp src/.../Argent.tracetemplate dist/...` in tool-server build
with a tiny Node script.
Runtime
- @argent/native-devtools-ios picks `simulator-server.exe` on Windows;
ax-service is gated to darwin (iOS-only daemon).
- check-deps.ts and android-binary.ts use `where` on Windows instead of
`/bin/sh -c 'command -v X'` — `/bin/sh` doesn't exist on Windows.
- android-binary.ts looks for `adb.exe` / `emulator.exe` under
`$ANDROID_HOME` on Windows, bare names elsewhere.
- stop-metro.ts uses `netstat -ano -p TCP` on Windows; `lsof -ti tcp:port`
elsewhere. Parses LISTENING rows by port.
- update-argent.ts spawns `argent.cmd` with `shell: true` on Windows so
npm shims resolve via PATHEXT.
- launcher.ts falls back to `nul` instead of `/dev/null` on Windows when
the log dir is unwritable.
- argent-simulator-server bin entry now points at a tiny Node wrapper
that exec's the right native binary per platform; npm-shim generation
works correctly on Windows since the wrapper is a Node script.
Installer
- Zed adapter writes `%APPDATA%\Zed\settings.json` on Windows, not
`~/.config/zed/settings.json`. Other adapters' homedir-relative paths
resolve correctly via path.join + os.homedir.
CI + docs
- New .github/workflows/windows-e2e.yml: a fast build+CLI smoke job that
runs on every push, plus a heavier Android-emulator E2E job (boots an
AVD on windows-latest, runs scripts/windows-e2e.cjs against it, calls
list-devices / screenshot / stop-all-simulator-servers) gated to the
windows-support branch.
- docs/windows-support.md documents the architecture, the package
layout, supported IDE config paths, and how to verify locally via UTM
or Parallels when the CI loop isn't tight enough.
- download-native-binaries.sh now requires an explicit release tag (e.g.
argent-v0.4.3) and fails fast with a clear error if the release doesn't
exist in argent-private-releases
- publish.yml is now manual-only (workflow_dispatch) with a ref input
(branch/tag/SHA); derives the binaries tag as argent-{ref} and checks
out the repo at that ref
- publish.yml now targets npm (registry.npmjs.org + NPM_TOKEN) instead
of GitHub Packages
- download:native-binaries npm script auto-derives the tag from
packages/mcp/package.json version for local pack:mcp usage
* fix: move describe to native devtools
Replace the AX describe path with an app-scoped native hierarchy adapter so coordinate discovery stays on the supported injection flow.
Also add safer targeting and restart guidance to reduce ambiguous Home and cold-start recovery paths.
Made-with: Cursor
* init
* update sim server
* Delete NATIVE_DEVTOOLS_DESCRIBE_MIGRATION_NOTE.md
- Adds native-devtools-ios package with pre-built dylibs (libNativeDevtoolsIos, libKeyboardPatch, libInjectionBootstrap)
- Passive simulator watcher injects dylibs into all booted simulators on tool-server startup, eliminating manual restart requirement
- Lazy network activation: NSURLProtocol interception is opt-in per bundleId via Control socket command, re-activated on reconnect
- New tools: native-find-views, native-full-hierarchy, native-network-logs, native-devtools-status
- dev script: non-fatal argent-private submodule (uses pre-built dylibs when source unavailable)
- Adds Prettier config and format script
- Updates CONTRIBUTING.md with npm run dev workflow and project structure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add argent-private as git submodule at packages/argent-private
- Remove Sources/ from packages/native-devtools-ios (now in submodule)
- Update build.sh to resolve SRC_DIR from submodule path with clear
error message if submodule is not initialised
- Update scripts/dev.cjs to run git submodule update --init before
building dylibs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds `npm run dev` which:
- Builds MCP TypeScript (tsc only, skips esbuild tool-server bundle)
- Copies simulator-server binary and skills/rules/agents into mcp package
- Patches ~/.claude.json to point argent MCP at the local dist/cli.js
- Starts tool-server from source via ts-node, writes ~/.argent/tool-server.json
- On exit: restores ~/.claude.json and stops the tool-server
* ci: add description quality workflow for tools and skills
Adds a GitHub Actions workflow that gates PRs on tool description quality
using SpiderShield (threshold 3.0/10 against current 3.3 baseline) and
informally grades skill SKILL.md frontmatter with a self-contained Node.js
grader. Includes extract-tools.mjs for converting ToolDefinition objects to
MCP tools/list JSON and grade-skills.mjs for scoring skill files.
* ci: fix profiler skill description and enforce 10.0 skill quality gate
* ci: split description quality into two separate scoped workflows
* ci: raise tool description quality gate to 10.0
* docs: update installation guide to streamline setup process and add local tarball installation instructions
* docs: remove INSTALL.md and RELEASING.md, update CONTRIBUTING.md to streamline release process, and adjust README.md to reflect changes
* chore: remove unused agentic files
* chore: remove deprecated configuration and script files, add new setup-in-workspace script for argent installation
* refactor: rename RADON references to ARGENT across the codebase
* Merge main into branch and complete ARGENT rename in new files
Merges main's changes: modular CLI architecture, UI package deprecation,
db tool removal, skills/agents prefix rename, and MCP server consolidation.
Extends the RADON→ARGENT rename to cover new files introduced in main
(ARGENT_MCP_LOG, ARGENT_TOOLS_URL env vars, argent-skills bin).
Made-with: Cursor
* fix: rename RADON_MCP_LOG in observe.cjs, regenerate lockfile for argent-skills bin
Made-with: Cursor
* chore: remove accidental PUBLIC_RELEASE_AUDIT.md
* feat: first improved CLI implementation
* feat: add ASCII banner to `argent init` and installation guide
Add a gradient ASCII art banner displayed at the start of `argent init`.
Add docs/install-guide.md with concise instructions for installing from
the GitHub Packages registry (including PAT generation) and from a local
tarball.
Made-with: Cursor
* refactor: update ASCII banner in `init.ts` for improved aesthetics