Commit Graph

249 Commits

Author SHA1 Message Date
BFlat 6943cfe97d Merge branch 'main' into bugfix/507-flow-bytes-per-direction 2026-11-03 15:23:34 +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
NetterSilver d1dfbc50cd Report bytes per direction for packet capture flows
Fixes #507

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 15:03:47 +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
GGWA a007d128af Read ZIP names without the UTF-8 flag as CP437 (#532)
Fixes #515. ZIP member names without the UTF-8 flag that are not valid UTF-8 are decoded as CP437, as the ZIP specification says, instead of lossily.
2026-11-03 14:58:57 +07:00
GGWA 5cdcbb7503 The archive inventory says when nested archives were left unopened (#534)
Fixes #519. core_archive_show counts nested archives that a depth or size limit left unopened, reports a nested_not_opened limitation and marks coverage partial.
2026-11-03 14:58:51 +07:00
GGWA 60c3a97a66 Archive extraction refuses names Windows would change: a trailing dot or space, or a colon (#533)
Fixes #516 and #517. Archive extraction refuses member names with a colon or a trailing dot or space, which Windows would change (merging two members, or hiding bytes in an alternate data stream).
2026-11-03 14:58:45 +07:00
NetterSilver d0c5feefa7 List DNS answers the same way on both packet engines (#514)
Fixes #510. The built-in engine lists DNS answers like tshark does: each A/AAAA address keyed by the response's first question, so CNAME chains end at the name asked. Both engines report the dns_answer_attribution limitation.
2026-11-03 14:58:38 +07:00
NetterSilver b0003d7ab2 Keep TCP ports when a frame is cut inside the TCP header (#529)
Fixes #509. The TCP decoder keeps the ports (and the tcp protocol entry) when a frame is cut later in the TCP header; each later field is set only when its own bytes were captured.
2026-11-03 14:56:12 +07:00
NetterSilver 493c20f414 Count each protocol once per frame in the capture summary (#513)
Fixes #508. The capture summary counts each protocol once per frame, so a QinQ frame no longer counts twice under vlan.
2026-11-03 14:56:07 +07:00
Afloat e3d95b4300 Test big-endian nanosecond pcap captures with FCS metadata (#433)
Adds tests for big-endian nanosecond pcap files with FCS metadata, for both Ethernet and raw IPv4 link types.
2026-11-03 14:56:01 +07:00
Alex Joaquim Pereira a3e6bd1b13 C# operators keep their CLR names (#456)
Fixes #316. The C# declaration scanner records operators under their CLR names (op_Equality, op_Addition, op_Implicit…), so managed_reconstruction_check no longer reports declared operators as missing.
2026-11-03 14:54:00 +07:00
Afloat c4e3d79dda Honor per-backend conversation context budgets (#559)
Refs #374. A backend can set its own conversation budget (context_tokens in [[ai.backends]]); the conversation is fitted to it before each model attempt, including a fallback with a smaller window, counting history added since the last measured request.
2026-11-03 14:53:55 +07:00
Bently 0ec096c569 Deep mode uses Ghidra when the engine store is under a dot folder such as ~/.config (#484)
On Linux, where the default engine store is under ~/.config, Ghidra is given a dot-free link to the store in a private runtime folder, since it refuses project paths with a dot folder; Deep mode now uses Ghidra there.
2026-11-03 14:51:00 +07:00
Bently c9c263832e Ghidra's pseudo-C uses the names you set, in the code and in its summary (#488)
In Deep mode, Ghidra's pseudo-C uses the names set with native_name_set in the function field, the summary and the code (whole identifiers only, never inside comments, literals or fields); names that can't stand in C or would clash are listed in a limitation.
2026-11-03 14:50:54 +07:00
Bently 473f187c5d doctor says which Java Ghidra runs on as well as the Java on PATH (#489)
doctor reports which Java Ghidra runs on (JAVA_HOME_OVERRIDE in its launch.properties, the Java set for it in Settings, JAVA_HOME, then PATH), and warns when the set folder has no Java or an override wins over it.
2026-11-03 14:50:48 +07:00
Bently 2c7a311dfd Find strings in ELF files with no section headers, read from their loaded segments (#491)
For ELF files with no section headers (common in firmware), native strings are read from the loaded segments, limited to the bytes each segment maps.
2026-11-03 14:50:43 +07:00
Bently c5fce85fe0 In stripped programs, a jump below a function's entry is a tail call to a function of its own (#492)
In a stripped program, an unconditional jump to code below a function's entry that the function hasn't reached otherwise is a tail call to a function of its own (such as frame_dummy jumping to register_tm_clones), instead of pulling that code into the caller.
2026-11-03 14:50: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
Afloat d5e07a8262 Report unavailable cached bodies in stand-in replay (#543)
A stand-in backend no longer replays a recorded 304 without its cached body: such samples are kept for diagnosis, skipped in replay, and a request with no usable answer gets cached_body_unavailable. Builds count them.
2026-11-03 14:50:01 +07:00
Afloat 925d4737d1 Wait for keep-awake cleanup before a rebuild reports it finished (#541)
The rebuild releases its keep-awake helper before reporting Finished, and dropping the guard waits up to five seconds for the helper to stop (logging if it doesn't), so a CLI that exits right away no longer leaves it running.
2026-11-03 14:49:55 +07:00
Afloat 2546042d4c Show upstream provider reasons in API errors (#542)
Refs #369. API errors show the provider's own reason from error.metadata.raw (with the provider's name) instead of only "Provider returned error"; unknown or malformed payloads are not dumped, and the message is bounded.
2026-11-03 14:49:50 +07:00
NetterSilver 821d82fb85 Send Codex its prompt on stdin instead of the command line (#530)
Fixes #528. Codex gets its message on stdin (codex exec -) instead of as the last argument, so a long message no longer passes Windows' command-line limit (os error 206).
2026-11-03 14:48:47 +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 4142d1c653 Bump the version to 0.4.0 (#526) 2026-11-02 20:14:06 -07:00
Tanish Manku 8638d6b72b Rebuild the roadmap around what people hit now, and keep finished work in its own file (#512) 2026-11-02 17:38:37 -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
BFlat e56379f062 Keep every character string in a decoded DNS TXT answer (#485)
Fixes #330. Supersedes #342. A DNS TXT answer keeps every length-prefixed character string, joined, instead of only the first; an empty string doesn't end the record.

Co-authored-by: Rahul <rahulsingh.ranjan06@gmail.com>
2026-11-03 02:55:24 +07:00
BFlat 6fef18141c Accept UTF-16 XML plists after either byte-order mark (#483)
Fixes #333. Supersedes #341. parse_xml decodes an XML plist that starts with a UTF-16LE or UTF-16BE byte-order mark as UTF-16 before tokenizing; a lone surrogate is an error.

Co-authored-by: Rahul <rahulsingh.ranjan06@gmail.com>
2026-11-03 02:50:12 +07:00
BFlat c2ad022f50 Page states select the original tab again after photographing another (#475)
Fixes #335. Before a tab is clicked, web_page_states_capture marks the tab its list has selected and clicks it again after the picture, so later states and the next capture see the page as it was.
2026-11-03 02:47:05 +07:00
BFlat 1e8f661673 A builder never continues a session another builder saved (#471)
Fixes #469. craft.json records which coding agent saved the session (agent_session_by). A build or a question continues the session only with that agent; after the builder changes, the new one starts from the brief. A follow-up to an agent with no saved session also gets the brief.
2026-11-03 02:38:46 +07:00
Bently 09401b6458 Changing a setting keeps a test session to its configured engines, and the live browser tests find the installed browser (#479)
settings_set keeps a test session's engines.only_configured across its settings round trip, so a test that changes a setting still doesn't find this computer's engines. New testing::live_session() finds installed engines for the --ignored live tests; the live website tests use it.
2026-11-03 02:29:14 +07:00
BFlat 843099abca Page states at a second width open that width's own controls (#474)
Fixes #339. web_page_states_capture drops the data-craft-state marks an earlier call left before marking, so a capture at a second width opens that width's own controls instead of a hidden one from the first width.
2026-11-03 02:24:26 +07:00
Kushagra Kumar 1c204067dc Scan C# delegate declarations in reconstruction (#463)
Fixes #315. The C# declaration scanner reads delegate declarations (top-level, nested and generic, with tuple return types), so reconciliation no longer reports a published delegate as a missing type; anonymous delegates and function pointers aren't taken for declarations.
2026-11-03 02:22:01 +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
BFlat 5b09ab03ab A website capture says when its HTML was cut at the size limit (#472)
Fixes #336. web_site_capture keeps the first 4 MiB of the page's HTML; when the page has more, the evidence carries an html_cut limitation with both sizes and the README says page.html is the first part, cut at the size limit.
2026-11-03 02:12:11 +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