51 Commits

Author SHA1 Message Date
Afloat cf414ff4b9 Apply replay body limits after redaction (R3.11) (#717)
A website stand-in charges its per-body and total byte limits on the text it actually keeps after redaction, and drops repeated samples before charging them, so polling no longer uses up the budget. A cached 304 whose body was left out stays unavailable (R3.11).
2026-11-04 20:32:58 +07:00
Rares Cristea 1eb4d0afe0 Read a plugin's whole tools/list line, however long (#797)
An MCP plugin whose `tools/list` answer is one JSON-RPC line over 1 MiB never loaded: the process reader cut long lines into fragments that never parsed, so the plugin timed out. The partial-line cap is now the 16 MiB the MCP client already allows, with a regression test for a multi-megabyte line.
2026-11-04 19:29:24 +07:00
BFlat 282a4bca5c Start a program that was just written, instead of failing with Text file busy (#787)
A program whose file is busy (just written, still open for writing in a child another thread is starting, so Linux says Text file busy) is tried again for about 0.3 s before its start fails. Fixes flaky test failures and a start just after an agent's CLI updates.
2026-11-04 11:32:54 +07:00
BFlat 1fbff715b5 Stop a build whose checks never find a working build, across Try again (#782)
A build whose checks keep finding no working build stops after 10 in a row, across Try again presses, until a new request starts the count again (kept in craft.json as not_working_checks), and with app/ empty the builder is asked to write the project and show its build's output instead of fixing a build that doesn't exist (refs #736).

Supersedes #776.

Co-authored-by: Fábio Soares <fabiodev1123@gmail.com>
2026-11-04 10:58:49 +07:00
Fábio Soares 41d2175e25 Say when app/ is empty in the build check and the stop message (#771)
When app/ is empty, a failed build check and the stop after two unchanged turns say the builder hasn't written the project (refs #736).
2026-11-04 10:06:23 +07:00
Tanish Manku 8cf29dfa08 The keep-awake helper ends by itself once the app it serves is gone (#762)
The keep-awake helper ends by itself once the app it serves is gone (Windows checks the process every 30 s, macOS uses caffeinate -w), so closing the window during a build no longer keeps the computer awake.
2026-11-04 10:06:18 +07:00
FuryNocturnTV (Tare Fernandez) 0fc381c206 Count Antigravity's second folder in the Windows search path test (#770)
The Windows search-path test counts Antigravity's second folder, added by #748.
2026-11-04 10:06:02 +07:00
Fábio Soares bbc06cb9c1 Start the window on Macs whose Metal compiler rejects the OS's shader version (#744)
The window opens on Macs whose Metal compiler rejects the shader language version wgpu takes from the macOS version: a patched wgpu-hal 30.0.1 (identical to the released crate except for this probe) compiles a tiny kernel with each version up to the OS's and keeps the first one accepted. A lost device on a Mac no longer points at the Windows-only software renderer setting (fixes #742).
2026-11-04 08:22:28 +07:00
Fábio Soares 7b5ce085a3 Find Ghidra in the folders people unzip it to, and don't download it again (#745)
Ghidra is found where people unzip it (Program Files, the home folder, Downloads, Desktop, /Applications, Homebrew's cask and the usual Linux folders), by folder name a set number of levels down, and the guided install uses a copy already on the computer instead of downloading it again (fixes #740).
2026-11-04 08:08:26 +07:00
Aek 66bda5607d Keep Make off the folder picked on Work on my project, and don't read an address in its request as an original (#750)
Leaving "Work on my project" forgets a folder it would edit in place, and a folder dialog that ends after leaving that door is dropped, so a version made on Make can't edit the person's own project. An address in that door's request stays part of the request instead of becoming an original to recreate. Follow-up to #686's review.
2026-11-04 08:05:51 +07:00
Tanish Manku bb66fa576a The pictures UI test waits for the worker that checks their sizes (#743) 2026-11-03 16:59:48 -07:00
BFlat fb7ac863a3 Pick the coding agents' tab before testing Add another (#732)
Fixes main: the account folder test picks the coding agents' tab of what Detect found before pressing Add another, which #687 moved there.
2026-11-04 03:36:43 +07:00
BFlat 636b3ff3d7 Bound CPIO checksum work across firmware probes (#683)
CRC cpio checksum work shares one byte allowance across a firmware scan and stops when the scan is cancelled; checksum fields must be eight hex digits, and skipped verification is reported (R3.12). Replays #676.

Co-authored-by: Afloat <132809511+Afloat16@users.noreply.github.com>
2026-11-04 00:33:08 +07:00
Ryan Missel 87174476d9 Add Copilot CLI support and shared agent investigations (#455)
GitHub Copilot CLI can be a coding agent over ACP, with its models chosen through the shared agent model catalogue; options that could bypass the app's tool restrictions are refused, and agents share investigation findings safely.
2026-11-04 00:29:11 +07:00
Firefly c7caf7de15 Offer OpenCode Go as a backend, with its session header (#672)
OpenCode Go can be added as a backend: offered when OPENCODEGO_API_KEY (or OPENCODE_GO_API_KEY) is set, on its documented base URL, with a stable per-installation x-opencode-session header kept in the AI settings. Not run against the service.
2026-11-03 23:57:07 +07:00
BFlat b79fc506e2 Auto mode deletes inside projects whose path has capitals, and reads quoted paths with spaces whole (#682)
Auto mode's delete check compares paths as written and reads quoted or escaped paths with spaces as one argument, so it neither refuses deletes inside a project with capitals in its path nor lets a delete of the folder beside the project through. Replays #357.

Co-authored-by: samurai <samuraideng@gmail.com>
2026-11-03 23:24:57 +07:00
BFlat f05f019691 Draw on the GPU that drives the screen on Linux, so laptops with two GPUs open fast and don't lag (#659)
On Linux the window is drawn on the GPU that drives the screen (the built-in panel's, or the only one with displays), so laptops with two GPUs open fast and don't lag; WGPU_ADAPTER_NAME and WGPU_POWER_PREF still decide (fixes #571). Replays #578.

Co-authored-by: Thân Minh Nghĩa <thanminhnghia3@gmail.com>
2026-11-03 21:57:08 +07:00
BFlat 9fd46b818b Builder limits, OpenRouter tools, a software-renderer fallback, calmer spinners, lean local builders, lldb calls and LM Studio ports (#657)
Replays #576, #577, #581, #589, #624, #625 and #628. Builder steps stop after 25 failed builds in a row, OpenRouter tool requests ask for a provider that supports tools, a start that never opened a window draws in software next time, spinners stop redrawing every frame, local builders get a lean tool list, lldb call observation works and reports failures, and LM Studio is found on other ports.

Co-authored-by: Fábio Soares <fabiodev1123@gmail.com>
2026-11-03 21:16:34 +07:00
BFlat ba00f86f30 The command palette stays where it's scrolled (#658)
The command palette follows its selection only when the arrow keys or typing move it, so the wheel's scroll isn't pulled back to the top on the next frame (fixes #584).
2026-11-03 21:05:27 +07:00
BFlat ebed13d0fc Keep ARM32 conditional call values, esbuild dependencies and window labels right (#656)
Replays #640–#642. Conditional A32 calls keep the skipped path's value, esbuild dependencies survive unrelated calls, and window comparison labels stay distinct without renumbering occurrences.

Co-authored-by: Afloat <132809511+Afloat16@users.noreply.github.com>
2026-11-03 20:49:11 +07:00
BFlat 0e79ffaaa5 Remember "Always for this project" on a tool's consent card (#654)
"Always for this project" on a consent card is remembered in the project, and a tool allowed that way isn't asked about again (fixes #563). Replays #575.

Co-authored-by: Fábio Soares <fabiodev1123@gmail.com>
2026-11-03 20:40:55 +07:00
Fábio Soares 78e1f7dce0 Say where a program is when it is there but can't start, instead of "isn't installed" (#583)
A program that is on disk but can't start (an npm script whose node is missing) says where it is and what to check, instead of "isn't installed"; on Windows an .exe is started by the path it was found at (refs #152, #95).
2026-11-03 20:15:01 +07:00
Matthias Bodsch 1d66a6ba4b Choose OpenCode models and thinking depth locally or over SSH (#413)
OpenCode can be chosen as a coding agent locally or over SSH, with the chat models its installation offers and the thinking depths each supports.
2026-11-03 19:53:16 +07:00
Afloat 48759fb5fc Stop unchanged rebuilds after two turns across runs (#557)
Refs #44, #110 and #481. A build stops after two builder turns in a row change no app files, counted across runs in a versioned inbox/build-progress.json; a new request or a real edit starts another attempt. File digests are cached by size and modification time, so unchanged files aren't read again.
2026-11-03 19:31:22 +07:00
Afloat 0a0fa2a43a Recover JSON tool calls emitted as text (#554)
Refs #417. A complete JSON tool call a model writes as its whole reply (bare or fenced, with name and arguments or parameters, or a function wrapper) runs as that tool when it was offered, including when native tool calling was offered; examples in prose, malformed or partial JSON stay text, and Action:/Action Input: steps still work.
2026-11-03 15:39:39 +07:00
BFlat 47e429ca15 Translate Pausing… in the Russian catalog (#567)
#555 added "Pausing…" to every UI catalog and #486 added the Russian one without it, so the catalog parity test failed on main; this adds the Russian translation.
2026-11-03 15:22:55 +07:00
Fábio Soares 6d90c65624 Draw with Windows' own shader compiler, and say how to start without the graphics card when the device is lost (#558)
Fixes #522. On Windows the app draws with the DX12 shader compiler that ships with Windows (FXC) unless WGPU_DX12_COMPILER says otherwise, and a lost graphics device says how to draw without the graphics card (CRAFT_ANYTHING_RENDERER=software).
2026-11-03 15:01:38 +07:00
Afloat 6615caa7e4 Respect stop reasons before running native tool calls (#544)
Native tool calls keep a reported output-limit or refusal stop instead of being run as tool use, and calls left unrun after a pause or other stop get matching non-execution results so the next request stays valid.
2026-11-03 14:50:10 +07:00
Tanish Manku 5a45b3cd78 Record that #490 is settled on Windows and move its macOS run to the live checks (#524)
* Record that #490 is settled on Windows and move its macOS run to the live checks

* Name R5.1's two failures, and say which checks read another worktree
2026-11-02 20:27:16 -07:00
Tanish Manku 2e4afc535c A plain HTML site passes the build check as it is, with nothing to build (#500)
* Claim: count a plain HTML site as built (R2.7)

* A plain HTML site passes the build check as it is, with nothing to build

* Note the keep-awake helper seen outliving a CLI run, and a search that found itself

* A blank page, or a game engine's project beside it, doesn't pass as a static site

* A static site with an assets folder isn't sent to Unity
2026-11-02 16:44:21 -07:00
Jesse Houston f5ed134bdd Keep building with Claude Code after moving a project to another computer (#458)
Fixes #451, fixes #452, closes #446. Claude Code's result for a --resume session it doesn't have is recognised (StreamParser::session_missing); the build forgets the stale id and starts a new session from the brief, what is in app/ and what the project kept of the old conversation, and questions answer from the project's files. After every builder turn the project keeps a private copy of the session, which is put back under Claude Code's folder on another computer when it isn't there (never over an existing one).
2026-11-03 02:20:28 +07:00
Bently 7bf8220006 Test sessions find only the engines their settings name (#466)
Test sessions set engines.only_configured (never saved), so Settings::ghidra_launcher and engine_path look only where the settings and the managed store say, not on PATH or in the usual install folders. Tests now pass the same on a machine with Ghidra installed. New locate_configured and ghidra::get::headless_configured are the first half of locate and headless, which return the same as before.
2026-11-03 01:53:53 +07:00
bently-bot 11166b3589 Deep mode decompiles position-independent programs by name: addresses move between our image base and Ghidra's (#426)
In Deep mode, a position-independent program is decompiled by name: addresses move between our image base and the one Ghidra loaded it at (the bridge now reports it), with engine_entry and an engine_rebased limitation when they differ.
2026-11-02 23:50:33 +07:00
BFlat 3357daf48e Claude Code gets its message on stdin, so a long brief starts on Windows (#430)
Claude Code's message goes to its stdin instead of argv, so a builder brief over Windows' 32,767-character command-line limit no longer stops the build with os error 206. Fixes #402.
2026-11-02 23:34:47 +07:00
phatloi0010 0748ef1be7 Start DX12 only by default on Windows to avoid Intel Vulkan driver crashes (#414)
On Windows the app starts only DX12 by default, since starting Vulkan crashed on some Intel drivers before any window opened; WGPU_BACKEND still picks others. Fixes #394.
2026-11-02 23:13:10 +07:00
zeller-lorenz 2b2e8f5287 Maki works as a coding agent, over ACP or one message at a time (R2.2) (#393)
Maki can be added as a coding agent: over ACP (maki acp, with the backend's model after it) or one message at a time with its own adapter (maki -p), which switches its writing tools off outside a build. R2.2.
2026-11-02 23:07:45 +07:00
BFlat 09fdc72e8d Saves from two threads at once never collide or mix a project file (#311)
The engine had its own `write_atomic` (used for `craft.json`, the inbox, reports and session files). Its temp file was named by process only, so two threads saving the same file at once wrote into one temp file. One rename then found it gone ("craft.json: No such file or directory"), and the file could end up with two versions mixed ("trailing characters").

The engine now uses the platform crate's `write_atomic`, which already gave each write its own temp file and kept the file's permissions. It also gains the engine's short retry when Windows briefly can't replace a file another program holds open. There is one atomic writer now; docs/pitfalls.md says so.

**Verified:**
- A new engine test: four threads each save one file 50 times and read it back. Every save succeeds, every read is one whole version, and no temp files are left. It fails against the old engine writer (checked) and passes now.
- The existing "file held open for a moment" test still passes.
- `cargo test -p craft-anything-engine` (397), the platform fs tests, clippy on both crates and fmt.

**Not covered:** two saves that overlap can still each start from what was on disk, so the later one wins for fields that aren't the person's (the person's fields are kept, as before). That's separate from the write itself.

Fixes #273
2026-11-02 14:45:46 +07:00
Brandon Thomas da83b81be2 A build stops with a plain message when craft-anything-cli is missing (#226)
A local build by Claude Code, Codex or an ACP agent now checks that craft-anything-cli starts before studying or starting the agent. When it is missing or won't start, the build stops with a plain message and what to do, instead of Claude Code's "MCP tool not found" error. A check that times out lets the build go ahead, and stopping the build ends the check.

Refs #91, #64, #113.
2026-11-02 13:16:39 +07:00
BFlat 3f15887891 The Windows app no longer starts OpenGL, which crashed some Intel drivers before the window opened (#198)
eframe starts every wgpu backend before an adapter is picked, and starting GL loads the system's OpenGL driver; Intel's ig9icd64.dll crashed in it (0xc0000005), so the app vanished with no window or error box. Windows now starts the primary backends only (DX12 with WARP, Vulkan); WGPU_BACKEND still decides when set.

Fixes #196
2026-11-02 08:10:17 +07:00
BFlat 39ca993b20 Pitfall: never type python - with a heredoc (#181)
Strengthens the pitfall about python - heredocs waiting for input.
2026-11-02 05:35:42 +07:00
BFlat 09bb4f3757 Pitfall: merge the commit CI tested, not a head read later (#150)
Adds a pitfall: merge with --match-head-commit set to the commit the green run tested.
2026-11-02 03:52:08 +07:00
BFlat 9d3ea967fb Translate the agent program setting into Chinese (#122)
Both Chinese catalogs get the five strings #117 added, so cargo xtask i18n-coverage passes again on main; pitfalls.md notes the case.
2026-11-02 00:51:01 +07:00
Agapenor 6787ae4852 The Agent console keeps its size instead of growing until its tabs are cut off (#81)
The conversation's history counts the item spacing and the prompt row is top-aligned, so the Agent console's panel no longer grows 17 points a frame until its tabs are cut off.
2026-11-01 23:32:19 +07:00
BFlat 1b54cbf99e The macOS app ships craft-anything-cli beside its executable (#99)
The DMG's app had only craft-anything, so the app couldn't start its MCP server and every Claude Code build failed with no tools. The CLI is now copied into Contents/MacOS, signed like its zip, and run from the finished DMG before release.
2026-11-01 22:56:07 +07:00
muraa-p 793e47ce0f Find the Windows shim, not npm's POSIX script, for a bare program name (#51)
On Windows, which() tries PATHEXT names before the bare name, so npm's .cmd shim is found instead of the extensionless POSIX script beside it (#41).
2026-11-01 18:40:44 +07:00
BFlat b43d1e8d14 Coding agents installed with npm on Windows start instead of "isn't on your PATH" (#23)
npm installs Gemini CLI, Codex and often Claude Code on Windows as .cmd shims. They were found,
but Rust starts only .exe files by bare name, so every build stopped with "gemini isn't installed
or isn't on your PATH". An npm (or pnpm) shim's script now runs with Node directly, so a prompt
with line breaks or over cmd.exe's 8191 characters arrives whole; any other batch file starts by
its full path. The usual Windows install folders (~\.local\bin, npm, bun, cargo) are searched
after PATH.

Fixes #18
2026-11-01 14:34:51 +07:00
Brandon Thomas 7ecce402f9 Try again picks up where a build stopped instead of starting over (#8)
A run with no message was read as a first build, so Try again studied the
original again and gave the builder the first brief, even with its session
saved. A run now carries on when the builder has already worked, and only
runs the check when the builder had finished (awaiting_check in craft.json).

A check that returns an error couldn't look at the build at all, so it gets a
second go, and then the run says the build is finished but couldn't be checked.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 21:01:22 -04:00
Brandon Thomas 292d5af06e Stop deadlocks as they form and watch every lock for one that never lets go (#5)
* Stop deadlocks as they form and watch every lock for one that never lets go

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Give the stuck-lock banner's test a program of its own

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 20:28:16 -04:00
Brandon Thomas 6a120011a1 Explain failed agent runs, keep a log to open, and stop offering git servers as computers (#3)
* Explain failed agent runs, keep a log to open, and stop offering git servers as computers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Fix a lock-up: the build's agent setup took the session lock twice in one statement

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 20:27:44 -04:00
BFlat 62700f5c69 Built by no longer offers a GitHub SSH key as a computer, and finds Claude Code on a Mac opened from the Dock (#4)
SSH hosts that point at a git server (named after one, or with its HostName or User git) are left out of the AIs found on the computer and the remote-machine picker. Programs are looked up and started with PATH plus the usual install folders (~/.local/bin, Homebrew, npm, bun, volta, cargo), which a Mac app opened from the Dock doesn't get.
2026-10-31 23:48:53 +07:00