Commit Graph

282 Commits

Author SHA1 Message Date
bflatastic 632c9d4dc8 Bring over the docs, translate the Settings note, and use the throttled spinner in the builder picker 2026-11-03 20:56:27 +07:00
Fábio Soares 257fdecffe Look for LM Studio on its settings' port and the ports next to 1234, and say a server can be added by address (from #628) 2026-11-03 20:56:25 +07:00
Fábio Soares dc5a75dabe Make call observation's lldb callback valid and report a failed lldb run as an error (from #625) 2026-11-03 20:56:25 +07:00
Fábio Soares 4f84844ae5 Offer a builder on a local model the tools for building, not the whole study set (from #624) 2026-11-03 20:56:25 +07:00
Fábio Soares f76fb23821 Stop spinners from making the window redraw at the display's rate (from #589) 2026-11-03 20:56:25 +07:00
Fábio Soares 36a6f0102a Draw with the software renderer after a start that never opened a window (from #581) 2026-11-03 20:56:25 +07:00
Fábio Soares 6aea10cf1e Ask OpenRouter for a provider that supports tools, and fall back to text when there is none (from #577) 2026-11-03 20:56:25 +07:00
Fábio Soares cee452e562 Stop a builder step after 25 failed build commands in a row (from #576) 2026-11-03 20:56:25 +07:00
YoSiem ad5cd81b6a Paste pictures into the prompt box with Ctrl+V and show attachments as picture tiles (#631)
Pictures can be pasted into the prompt box with Ctrl+V (Cmd+V, Shift+Insert): a copied image is saved as a PNG in the person's own cache folder and attached, copied picture files are attached as they are, and attachments show as picture tiles.
2026-11-03 20:50:05 +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 aeb86a69a3 Agent setup and streaming fixes: Aider, Antigravity on Windows, chat-only models, SSE limits and retries (#653)
Replays #616, #617, #619, #620 and #621. Aider isn't offered until it has an adapter, Antigravity is found under a redirected LOCALAPPDATA, servers with only specialised models aren't set up for chat, an SSE event's data is capped, and a retry keeps the original request when the agent's session can't be restored. Program lookup adds lower-case extensions on Windows.

Co-authored-by: Afloat <132809511+Afloat16@users.noreply.github.com>
2026-11-03 20:41:06 +07:00
Max Mittelstädt 99bfba88bf Restore originals from long inline source maps (#368)
JavaScript analysis reads a source map comment from the last eight lines of the whole script and keeps its full URL, so originals are restored from large inline source maps.
2026-11-03 20:41:02 +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 e9852f8c58 Name every place the website check accepts a site, and where the app really is (#627)
When the website check finds no built site, it names every place a site is accepted (dist/, build/, out/, or a plain index.html without package.json) and where the app really is (fixes #494).
2026-11-03 20:35:03 +07:00
Fábio Soares 3be1d0b871 Refuse an agent's own file tools outright in Clean room chats and questions (#574)
In Clean room, a chat or question refuses the agent's own file, shell and web tools outright, so it works only through our tool server; this no longer rests on the agent's defaults (fixes #564).
2026-11-03 20:34:57 +07:00
BFlat 15de36614b Format parsers refuse or flag input they used to half-read (#652)
Replays #606–#615. Binary plists, base64, OIDs, string offsets, tar, cpio and source maps refuse or flag input they used to half-read.

Co-authored-by: Afloat <132809511+Afloat16@users.noreply.github.com>
2026-11-03 20:29:18 +07:00
BFlat 82856a30b2 Redact HAR reports more thoroughly and count their bodies correctly (#648)
Replays #602–#605. HAR reports redact percent-encoded credential names and declared secrets in every kept field, count decoded body bytes, and template only real dates in API paths; the stand-in backend matches older recordings with the current query rules.

Co-authored-by: Afloat <132809511+Afloat16@users.noreply.github.com>
2026-11-03 20:25:48 +07:00
Ole Bohmbach 472d061921 Keep build tools and approvals from following links out of the project (#623)
Builder file tools and the approval policy follow links the way the file system does, so a symlink or junction inside a project can't lead a builder's read or write outside it (CWE-59); build_files_list shows links without walking into them.
2026-11-03 20:19:16 +07:00
Ole Bohmbach 2769e787b0 Cap the size of a Ghidra bridge reply (#588)
The Ghidra client refuses a reply line over 128 MiB and closes the connection, so a hostile binary can't make one reply exhaust memory; a long reply split across read ticks is still read whole.
2026-11-03 20:19:09 +07:00
Ole Bohmbach 521947899d Copy only the scripts a web script export can write (#587)
web_scripts_save copies only the scripts that fit its max_scripts and max_bytes; scripts past them are listed by URL only, so a large or hostile capture costs no more than the export's own limits.
2026-11-03 20:19:03 +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
Ole Bohmbach a6920ff271 Cap the edges a native call graph lists (#582)
A native call graph lists at most 50,000 call edges and says when it stopped there, so one function with a huge number of call sites can't blow up the report.
2026-11-03 20:14:55 +07:00
Fábio Soares b9c4c53099 Find Hermes Agent's native Windows install when the app's PATH is older than it (#585)
Hermes Agent's native Windows install (%LOCALAPPDATA%\hermes\bin) is found even when the app's PATH predates it (refs #116).
2026-11-03 20:14:49 +07:00
Max Mittelstädt 5845227f9f Bound IPv6 extension parsing to the declared payload (#639)
IPv6 extension headers are read only within the packet's declared payload, so padding after a packet can't change its reported protocol.
2026-11-03 20:14:20 +07:00
NetterSilver 0cff0f4336 Keep-awake helper test accepts a stop that arrives after the connection (#629)
Fixes a flaky platform test: on macOS an accepted socket inherits the listener's non-blocking mode, so the keep-awake stand-in helper dropped a stop that arrived after accept.
2026-11-03 20:14:14 +07:00
BFlat 3ee1642770 Serve previews only to this computer, stream their files and bound their connections (#649)
Replays #597, #598, #600 and #601. The preview server answers only requests addressed to this computer, streams files, sends no body for HEAD on a missing file, caps open connections and gives a request head one deadline.

Co-authored-by: Afloat <132809511+Afloat16@users.noreply.github.com>
2026-11-03 20:07:33 +07:00
BFlat 0eea78d7aa Read HTML pages' scripts and preloads correctly in more cases (#645)
Replays #591–#596. The HTML scanner reads rel token lists, decodes asset URLs once, keeps script and title text through lookalike closing tags, and skips raw-text elements, markup inside attribute values and custom tag names.

Co-authored-by: Afloat <132809511+Afloat16@users.noreply.github.com>
2026-11-03 19:58:08 +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 f307d39480 Retry builder turns from typed failures, including stateless backends (#552)
Refs #377 and #142. Builder retries are decided by typed failures instead of English text: sign-in, billing, missing programs, configuration and failed required tools stop at once, while dropped connections, rate limits and plain crashes are retried up to three times with bounded waits. OpenCode's JSON output is read for errors, text, tools and usage.
2026-11-03 15:51:05 +07:00
Afloat 888f75b3f1 Help models correct rejected tool argument types (#546)
Refs #498. A tool argument of the wrong type is answered with its JSON Pointer, the type error and how to correct the call, so a model can fix it; schema types stay strict.
2026-11-03 15:48:57 +07:00
BFlat 6bbcb0d1bd Skip ZIP symlink and special members when extracting (#568)
Fixes #520. Supersedes #521. core_archive_extract skips ZIP symlink, device, FIFO and socket members and names each in skipped, instead of writing a symlink as a file holding its target.

Co-authored-by: NetterSilver <133535268+Silvertree2010@users.noreply.github.com>
2026-11-03 15:41:50 +07:00
BFlat e1d1974468 Keep a prompt's pictures when Up brings it back (#570)
Supersedes #216. A prompt brought back with Up keeps the pictures it was sent with. feed.json moves to version 3: a User item with pictures is saved as {text, pictures}, one without stays a plain string, so older files read as before. Picture paths are absolute, so they don't come back after the project is moved.

Co-authored-by: muraa-p <muraa-p@users.noreply.github.com>
2026-11-03 15:41:21 +07:00
BFlat 73f9d5a8d3 Report bytes per direction for packet capture flows (#566)
Fixes #507. Supersedes #531. Packet capture flows report bytes in each direction (bytes_a_to_b, bytes_b_to_a) next to the total.

Co-authored-by: NetterSilver <133535268+Silvertree2010@users.noreply.github.com>
2026-11-03 15:40:44 +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
GGWA 7e135c8065 Send Gemini CLI its prompt on stdin instead of the command line (#548)
Fixes #549. Gemini CLI gets its message on stdin with an empty -p, so a long message no longer passes cmd.exe's 8,191-character limit through gemini.cmd.
2026-11-03 15:17:20 +07:00
BFlat 7c20db27cc Let the Flatpak create and write its default projects folder (#565)
Fixes #505. The Flatpak grants home read-only, so new projects in the default folder (~/Documents/Craft Anything) failed with "Read-only file system". Both manifests now also grant xdg-documents/Craft Anything:create; the rest of home stays read-only.
2026-11-03 15:12:57 +07:00
Fábio Soares 0d24b0ee2f Send empty string content for tool-call-only assistant messages (#536)
Fixes #403. An assistant message with only tool calls sends an empty string as content instead of null, which Ollama rejected.
2026-11-03 15:09:05 +07:00
frankyef 549ae5e29a Give runtime_captures_compare object schemas so Claude Code keeps every MCP tool (#490)
runtime_captures_compare's left and right parameters are declared as a string or an object instead of a boolean schema, which made Claude Code drop every tool from the MCP server; on the command line a JSON object passed to them stays an object.
2026-11-03 15:09:00 +07:00
Fábio Soares 086ef3ba63 Approve Craft Anything's tools for Codex and explain a refused call instead of showing null (#553)
Fixes #540. Codex's codex exec can't ask for approval, so setup and the builder approve rebuild_start (which asks the person itself) on Codex's side, keeping the person's other settings in the entry; a refused call explains the fix instead of showing null.
2026-11-03 15:04:55 +07:00
DjMigen 09849084df Add a Russian UI catalog (#486)
Adds a Russian UI catalog (ru), selectable in Settings → General → Language, with key parity to the Chinese catalogs checked in tests.
2026-11-03 15:03:38 +07:00
NetterSilver 2b5af078f8 Say in the README that public releases are published (#501)
The README status says public releases with installers are published (still alpha); next is the managed tier.
2026-11-03 15:01:46 +07:00
Fábio Soares b002c5417f Show a named Pause button, and say Pausing… once it is pressed (#555)
Fixes #551. The pause button is named Pause, as the hint says, and reads Pausing… (ignoring further clicks) until the build stops.
2026-11-03 15:01:44 +07:00
NetterSilver 33d243674e List the current manifest and feed versions in the file formats table (#502)
Fixes #497. docs/file-formats.md lists the current craft.json and feed.json versions, and a test checks the table against the constants.
2026-11-03 15:01:41 +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
Bently f6055a5ba2 native_function_find gives an offset beyond 64-bit JSON numbers as signed hex text instead of panicking (#477)
native_function_find gives an offset that does not fit a 64-bit JSON number as signed hex text instead of panicking while serialising it.
2026-11-03 15:01:33 +07:00
Afloat 303de0a438 Keep ACP history replay out of new turns (#550)
Over ACP, session/update notifications that session/load replays before it answers are kept out of the new turn, so a continued session no longer shows the earlier conversation again.
2026-11-03 15:01:32 +07:00
Fábio Soares 199a71e08f Give Claude Code a writable conversation folder under Flatpak, and say how to sign in there (#561)
Fixes #506. Under a Flatpak, where ~/.claude is read-only, Claude Code is started with a writable CLAUDE_CONFIG_DIR in the app's data folder so its conversations are saved and --resume works; the sign-in message says how to sign in inside the sandbox. A CLAUDE_CONFIG_DIR the person sets wins, and SSH builds are unchanged.
2026-11-03 15:01:26 +07:00
NetterSilver d3bbf99b4a Write CRC-mismatched ZIP members when if_tampered=continue (#525)
Fixes #518. With if_tampered=continue, core_archive_extract writes a ZIP member whose CRC does not match (the mismatch stays in contradictions), as its remediation says.
2026-11-03 14:59:03 +07:00