Commit Graph

25 Commits

Author SHA1 Message Date
BFlat c89f6603dd adb_app_show says a missing package isn't installed (#258)
`adb_app_show` treated `dumpsys package <name>` output as describing the package if it merely contained the name. Android's answer for a missing package, `Unable to find package: <name>`, contains the name, so the tool returned successful evidence with no fields and complete coverage.

It now requires that package's own `Package [<name>]` block and otherwise returns the existing `NotFound` error with the "List installed packages with adb_apps_list." remediation.

**Verified:** a unit test with Android's missing-package reply, another package's block and an installed package; `cargo test -p craft-anything-engine adb`, clippy, fmt.

**Not verified:** a run against a real device.

Fixes #235
2026-11-02 13:43:22 +07:00
BFlat 4419c674cf "It's done" keeps a build as it is and stops offering to carry on (#221)
A paused, stopped or failed build only offered Continue or Try again; there was no way to say "enough now". project_build_finish marks the project Ready and adds a Done step to its conversation, keeping everything; the project screen shows It's done beside Continue and Try again when nothing is running.

Fixes #210
2026-11-02 11:51:58 +07:00
BFlat fe6a8ad98c From the CLI, a capture with no open site says each command starts its own browser (#213)
web_site_open keeps its browser for one session, and each CLI command is a session of its own that closes its browser when it ends. From the CLI, a capture with no open site now says so, and to run the steps together in an MCP client, the app or rebuild. Documented in tool-status.

Fixes #153
2026-11-02 11:31:28 +07:00
GGWA fff225d319 The Windows pipe gap in project_play is noted in its tool help and kept as an ignored test (#212)
project_play's help says that on Windows a started program inherits the caller's output pipe (#207), and the reproducing test is kept in platform as an ignored test.
2026-11-02 11:28:57 +07:00
BFlat 4756c15642 Captured colours are the page's CSS values, not a canvas read that drifted by one (#211)
Every computed colour was painted on a 1x1 canvas and read back; Brave adds noise to canvas reads, so colours came back one unit off per channel (#F5F2EC as #f4f2ed). Computed rgb()/rgba() values are now read as numbers, and only other notations go through the canvas.

Fixes #154
2026-11-02 11:23:32 +07:00
GGWA 4448b24065 A pill corner made with calc(infinity * 1px) is captured as 9999px (#189)
Chrome reports Tailwind v4's rounded-full as its largest length, 3.35544e+07px; the capture now records any corner above 9999px as 9999px and keeps the other corners.

Fixes #155
2026-11-02 07:08:41 +07:00
BFlat 34d0d654ba Clean room captures leave out class names and query strings (#183)
A visitor's view of a site no longer keeps the page's class names (outline items and unnamed-control examples) or the query strings and fragments on image and link addresses, which can carry deployment ids and tokens.

Fixes #156
2026-11-02 06:08:01 +07:00
BFlat 7776b97d2b A question answered outside a build stays in the project's conversation (#180)
Callers take the question before answering, and record_answer adds it with its answer when the saved conversation doesn't have it, once. Fixes #176.
2026-11-02 05:35:28 +07:00
BFlat 706f250c1c A failed build check says where it looked, not app/ for an app edited in place (#178)
The build check's messages name where the app is (Workspace::app_place): app/, or the project folder for an app edited in place. Fixes #174.
2026-11-02 05:26:27 +07:00
BFlat 3a60c04c27 Browser evidence records Clean room when the run is in Clean room (#177)
Results read through a browser record the run's mode in environment.clean_room instead of always false. Fixes #157.
2026-11-02 05:23:44 +07:00
BFlat e4a4cf1f4a A website capture refuses the browser's error page (#171)
web_site_capture checks where the page is first and refuses, without making the output folder, when the browser is on its own error page or a blank one after a failed open. Fixes #158.
2026-11-02 04:54:03 +07:00
BFlat c94483d6a1 A full-page website capture scrolls through the page first (#168)
Before each width's full-page screenshot the page is scrolled through, lazy images are loaded and waited on (5 s at most), and it goes back to the top, so scroll-revealed sections and lazy images are in the picture. Fixes #160.
2026-11-02 04:37:41 +07:00
BFlat 8c3532d94c Test that a stopped stand-in frees its port where the server is, without racing other tests (#136)
The engine test no longer connects to the stopped stand-in's port, which another parallel test could be handed; platform::standin_server tests that dropping a server frees its port, trying it for a moment.
2026-11-02 02:09:00 +07:00
WadahBadawi fdcb8cb0f6 Fall back to BM_CLICK for off-screen Win32 buttons and check boxes in UI walkthroughs (#77)
When UI Automation's button or check box proxy fails (it uses SendInput, which needs an interactive desktop), the walkthrough posts BM_CLICK to the control's window instead. PostMessage, so a click that opens a dialog doesn't block the walkthrough; only for buttons and check boxes.
2026-11-01 23:56:44 +07:00
BFlat 484f22e4b7 A rebuilt stand-in waits for its predecessor's port instead of failing (#109)
Taking over a replaced stand-in's port tries a busy port again for up to two seconds, so a restart no longer fails now and then with Address already in use.
2026-11-01 23:42:45 +07:00
Max Mittelstädt f6725c2b8c Emit object schemas for compare inputs (#93)
runtime_captures_compare's right input had no description, so its schema was the boolean true and Claude Code rejected the whole tool list in Deep-mode builds. It gets a description, and a test checks every MCP input property schema is an object. Fixes #90.
2026-11-01 23:04:57 +07:00
muraa-p 3e016c92ee Leave a pin's old program copies out of the copy (#56)
A pin leaves out a program's old running copies (name.running-N.exe) when the program they copy is beside them.
2026-11-01 18:40:57 +07:00
Tommy Leonhardsen 63aaaeeb08 Every engine listing finds a Ghidra installed in a versioned folder or set through its folder setting (#55)
engines_list, doctor, capabilities and Requires::Engine share Settings::engine_path, which honours the Ghidra folder setting, and locate() finds an engine unpacked into a versioned sub-folder.
2026-11-01 18:40:51 +07:00
BFlat 96fa78e86e A builder that writes /app/… paths builds the app instead of being refused (#36)
Builders driven by our own loop (an API model such as Ollama) get file tools whose paths are
relative to the project. Models often write the project's folders from the root (/app/src/…), which
was refused as outside the project, so they could neither list, read nor write app/ and went round
in circles while each check found nothing. A path from the root whose first folder the project has
is now read inside the project (/etc/… and folders it doesn't have are still refused), and a write
outside app/ says so in its result, so a model that leaves out app/ learns where the app goes.

Refs #24
2026-11-01 15:33:26 +07:00
Brandon Thomas 4756633f89 Show what a build is on now, and open up into its activity as it arrives (#10)
The status row names the command or file under way instead of only counting
actions. "More detail" opens the latest lines: stages, every command and file
with how it ended, what the builder said, and what programs printed outside the
conversation. Everything is kept in build-activity.log, with secrets hidden, and
the rebuild_activity_show tool and the CLI read the same.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 21:12:56 -04:00
Brandon Thomas e244159c17 Call a coding agent's cost an estimate, not the bill (#9)
Claude Code's figure is its own guess at API prices, which a subscription
isn't charged. The project page now says "AI cost (estimate)" with a note
saying so, and the title bar says "(estimate)". What an API key was charged
is kept apart in usage.json; older files count as estimates.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 21:04:01 -04: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
Brandon Thomas f64ae3bf3c Craft Anything
A native, pure-Rust app that shows anyone how a piece of software works, with
evidence-backed answers, then helps them rebuild it. It ships a desktop app, a
CLI and an MCP server, all driven by one engine.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 10:52:14 -04:00