Commit Graph

171 Commits

Author SHA1 Message Date
NetterSilver a094ed23a9 Fail builds when required Windows resource embedding fails (#427)
The app build scripts stop the build when required Windows resources fail to embed (cargo::error instead of the ignored cargo:error). Fixes #264.
2026-11-02 23:40:59 +07:00
GGWA cf87e54725 A Haswell request picks the x86_64h Mach-O slice (#371)
A request for x86_64h picks the Haswell slice of a universal Mach-O instead of the generic x86_64 one. Fixes #322.
2026-11-02 23:40:33 +07:00
GGWA 004e1c1dfc Firmware extraction reports a region-scan cap as partial (#366)
firmware_image_extract reports a region scan stopped at its cap as truncated, partial coverage. Fixes #302.
2026-11-02 23:40:07 +07:00
GGWA f58c3a66ba Triage says a damaged ELF, PE or Mach-O header can't be read (#365)
Triage says a file that starts like an ELF, PE or Mach-O but can't be read is damaged, with the parse error, instead of calling it an unknown format. Fixes #319.
2026-11-02 23:39:40 +07:00
GGWA d57649cf7a ARM and Thumb branches point at their real targets (#363)
ARM and Thumb branches, BL/BLX calls and CBZ/CBNZ point at the targets llvm-objdump reports, so Thumb calls no longer land four bytes early. Fixes #250.
2026-11-02 23:39:14 +07:00
Max Mittelstädt df18c969b2 Allow packaged programs with crash in their names (#376)
Play's packaged-program choice skips crash reporters by name (crashreport, crashhandler, crashpad), not every name containing crash. Fixes #275.
2026-11-02 23:38:48 +07:00
Max Mittelstädt 54bef1e6e2 Trace universal helper executables (#375)
Library resolution also follows universal (fat) helper executables found in app bundles. Fixes #276.
2026-11-02 23:38:22 +07:00
Afloat d8314238ae Files inside extended SquashFS directories are recovered (R0.5) (#434)
Extended SquashFS directory inodes read their listing offset from the right field, so files inside them are recovered. Fixes #338.
2026-11-02 23:37:59 +07:00
GGWA 6e9fc1a3d2 External tools' stderr survives a cap inside a multibyte character (#364)
objdump's and rtl_433's stderr keep the text before a cap that falls inside a multibyte character instead of losing it all. Fixes #287.
2026-11-02 23:35:13 +07:00
phatloi0010 53586bb9cf Call resolution retains the known memory slot of an indirect import (#424)
native_call_site_resolve keeps the memory slot of a call through an import. Fixes #349.
2026-11-02 23:34:56 +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 0c0a776ed6 Return header metadata for unencrypted IoStore containers without a directory index (#396)
Unencrypted IoStore containers without a directory index return their header facts and a not_indexed limitation, with unknown file totals. Fixes #303.
2026-11-02 23:34:29 +07:00
phatloi0010 766234ba40 Record folder truncation notices in js_sources_restore (#392)
js_sources_restore notes when a folder listing was cut short by its file-count or depth limit. Fixes #332.
2026-11-02 23:34:02 +07:00
BFlat 8f81b8edf2 Reopening raw bytes with a new architecture or address uses them (#432)
Reopening the same raw bytes with another architecture or entry point replaces the open target instead of silently keeping the first settings and caches. Fixes #305.
2026-11-02 23:32:25 +07:00
NetterSilver cf267b0f9d Recognise bare Java classes in target triage (#431)
Triage of a bare .class file says it is a compiled Java class and recommends the java toolset (java_class_show, java_classes_find) instead of calling it an unrecognised format. Fixes #348.
2026-11-02 23:29:55 +07:00
BFlat 51f48fe6f0 Live coverage and module traces record the scripts they show (#429)
web_coverage_measure and web_modules_trace settle their page size once (limit 0 shows one), and record the scripts they show as examined. Fixes #331.
2026-11-02 23:23:07 +07:00
Agapenor 3861132c04 A remote OpenAI-compatible service gets the cloud context budget and its price, not a local model's (R2.1) (#379)
Only an OpenAI-compatible server on this computer or its network (loopback, private and link-local addresses, bare and .local/.lan/.home.arpa/.internal names) or reached over ssh counts as a local model; a remote gateway gets the cloud context budget and its price. Fixes #374.
2026-11-02 23:22:40 +07:00
GGWA 0f580c7722 HAR request hosts no longer include query text when the URL has no path (#422)
A HAR URL's host ends at the first /, ? or #, so query or path text with an @ never reaches the host (same cause as #308, in the HAR reader).
2026-11-02 23:22:13 +07:00
GGWA c217cd6f99 Classic pcap files with FCS bits in the link-type word decode as Ethernet and raw IP again (#421)
Classic pcap files read the link type from the low 16 bits, so FCS metadata no longer hides Ethernet and raw IP. Fixes #326.
2026-11-02 23:21:47 +07:00
phatloi0010 dd0731f8e9 Display annotated function name in native function tool summaries (#418)
Native function summaries use a function's annotated name after a rename. Fixes #350.
2026-11-02 23:14:04 +07:00
phatloi0010 510b4111e3 Report actual matching function count beyond cap in feature_paths (#415)
feature_paths reports the real number of matches beyond its 200-entry cap and marks the result truncated. Fixes #351.
2026-11-02 23:13:37 +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
phatloi0010 71b0524fce Only treat code/module CArchive members as PyInstaller crypto_key markers (#398)
Only code and module members named crypto_key mark PyInstaller modules as encrypted; a data file with that name no longer does. Fixes #334.
2026-11-02 23:12:43 +07:00
phatloi0010 34216be702 Apply pcapng interface if_tsoffset to packet and capture timestamps (#397)
pcapng if_tsoffset is added to packet and capture timestamps. Fixes #327.
2026-11-02 23:12:18 +07:00
phatloi0010 d908b73d2c Zero-fill ext4 unwritten extents during file reads (#391)
ext4 unwritten extents read as zeros instead of the blocks' old contents. Fixes #321.
2026-11-02 23:11:52 +07:00
phatloi0010 4bb8f76158 Walkthrough preflight rejects timeout_secs values outside 1..=600 (#390)
The walkthrough check refuses timeout_secs outside 1..=600, as the recorder does. Fixes #288.
2026-11-02 23:11:25 +07:00
phatloi0010 735a96db2f URL sanitization only strips @ userinfo inside the authority (#389)
URL sanitising only strips user-info before the path, so an @ in a path or query is kept. Fixes #308.
2026-11-02 23:10:59 +07:00
phatloi0010 d7583c8063 Generated Ghidra function names parse their address suffix as hexadecimal (#388)
Generated Ghidra names such as FUN_00401000 are read as hexadecimal addresses. Fixes #318.
2026-11-02 23:10:30 +07:00
phatloi0010 87b191a6be Capture teardown stops surviving group helpers after a normal leader exit (#387)
Capture teardown stops a helper left in the process group after the leader exits normally. Fixes #361.
2026-11-02 23:10:03 +07:00
Alex Joaquim Pereira 80cf0b8a50 A GraphQL document that begins with a comment is still read (#386)
js_app_map keeps a literal GraphQL document that begins with a # comment, and a lone CR ends a comment. Fixes #260.
2026-11-02 23:09:36 +07:00
phatloi0010 b1d6f012e5 Module-filtered macOS function breakpoints omit unsupported --name-mask (#383)
Module-filtered function breakpoints on macOS no longer pass the unsupported --name-mask option to LLDB. Fixes #360.
2026-11-02 23:09:09 +07:00
phatloi0010 8fb98ceea7 ARM32 pseudo-C keeps call return values in r0 (#380)
ARM32 and Thumb pseudo-C returns a call's result in r0 instead of an x86 register. Fixes #278.
2026-11-02 23:08:39 +07:00
zeller-lorenz ea8f4b82b8 Claude's effort goes up to xhigh and max, chosen in Settings → AI and the CLI (R2.9) (#395)
Claude's effort goes up to xhigh and max. A model without a level gets the nearest one below it. The level is chosen in Settings → AI or with craft-anything-cli ai effort, and over SSH it reaches the other computer. R2.9.
2026-11-02 23:08:12 +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
Brandon Thomas e6280b5dc5 Bump the version to 0.3.0 (#425)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.3.0
2026-11-02 10:56:40 -05:00
phatloi0010 ba37b0cd80 SquashFS extended regular file inodes read their 64-bit layout (#384)
Extended SquashFS file inodes are read with their 64-bit layout, so small extended files are no longer extracted empty. Fixes #352.
2026-11-02 22:35:41 +07:00
phatloi0010 bcc08c0ada Truncated sBPF .text sections decode readable bytes and report partial coverage (#381)
A .text section that runs past the end of the file is decoded as far as the bytes go, with a text_truncated limitation and partial coverage. Fixes #306.
2026-11-02 22:35:15 +07:00
GGWA 489f2976b4 SQLite rowid alias columns show the rowid instead of NULL (#409)
db_sqlite_show shows an INTEGER PRIMARY KEY column's value from the rowid instead of NULL. Fixes #405.
2026-11-02 22:29:10 +07:00
NetterSilver 9896e18c28 Stop advising report --format in the CLI help (#419)
The CLI help no longer suggests report --format; it points to report --html. Fixes #254.
2026-11-02 22:28:24 +07:00
Brandon Thomas 7bbf6c02ef Bump the version to 0.2.1 (#382)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 10:24:50 -05:00
BFlat 5185f36ab0 Import maps, speculation rules and data blocks aren't read as JavaScript (#353)
The HTML scanner skipped only `<script>` bodies whose type mentioned "json" or "template". Import maps (`importmap`), speculation rules (`speculationrules`) and data blocks such as `text/html` became JavaScript modules in app maps: an import map was reported as a broken script, and an inert HTML template could add made-up fetch endpoints.

A `<script>` now counts as a script only when the page runs it as code: no type, `module`, or a JavaScript MIME type (parameters such as `; charset=…` are ignored), plus `text/babel` and `text/jsx`, which in-browser Babel runs. Other types are left out, both inline and with `src`.

**Verified:** a new scanner test. Five non-JavaScript types (inline and with `src`) give no scripts; six JavaScript spellings, including a mixed-case type and one with a charset, give one each. `cargo test -p craft-anything-js` (41) and `-p craft-anything-analysis` (85), clippy and fmt pass.

**Not run:** `cargo xtask wasm`. The change is pure string logic in an existing function.

Fixes #285
2026-11-02 15:42:22 +07:00
BFlat 9bec65baf2 The change summary counts a comparison where files only moved as changed (#345)
`app_changes_summarize` decided whether each comparison found changes. For records with `counts` it added added + removed + changed, which left out moves. So an archive or folder comparison whose only difference was a moved file (reported `identical: false`, `moved: 1`) counted as unchanged ("0 of 1 comparisons found changes").

A record's own `identical` verdict now decides when it has one, and moves count otherwise. Archive `counts.changed` keeps its meaning (content-edited files).

**Verified:** a new test of the verdict: a move-only comparison is changed (with and without `identical`), and an identical one is not. The engine's compare tests, clippy and fmt pass.

Fixes #286
2026-11-02 15:38:16 +07:00
BFlat eaaa8d3f8f Comparing folders or archives moves each new file at most once (#343)
`core_archives_compare` matched moves by content through a map from hash to one new path. Two identical old files missing on the new side both "moved" to that one path, so a removal went unreported. With two renamed copies, one copy was reused and the other was reported as added.

Each new-only file is now a move destination at most once. Old files are paired with distinct new copies of the same content, and the rest are removed or added. Every file on each side is accounted for once.

**Verified:** a new test with the reporter's fixtures. Two old copies and one new copy give 1 move and 1 removal; two and two give 2 moves to different paths, with no additions or removals. The existing comparison test still passes. `cargo test -p craft-anything-analysis` (86), the engine's artifact tests, clippy and fmt pass.

Fixes #283
2026-11-02 15:33:05 +07:00
BFlat cc2e7b7eee Comparing two runs tells a deleted file from a created one (#340)
`runtime_captures_compare` compared the filesystem dimension by the set of changed paths only. A run that deleted a watched file and a run that created the same file both "changed" that path, so they matched, and the comparison said the two runs were the same.

Each path is now compared together with how it changed (created, deleted or modified). Two deletions of the same file still match, and different paths still differ.

**Verified:** a new test of the filesystem comparison covering deleted vs created (changed), deleted vs deleted (unchanged), different paths (changed), and an `unchanged` effect against none (unchanged). The engine's process-tool tests, clippy and fmt pass.

Fixes #300
2026-11-02 15:29:06 +07:00
BFlat 5ea84a8f4c Cached prompt tokens from OpenAI-style APIs are counted once (#337)
OpenAI-style APIs report `prompt_tokens` including the cached part (`prompt_tokens_details.cached_tokens`). We stored the whole `prompt_tokens` as `input_tokens` and the cached part again as `cache_read_tokens`. The context budget and the cost meter add the two, so cached tokens counted twice: a 100,000-token prompt with 65,536 cached read as 165,536, crossing the 150k budget and summarising early, and it was charged both rates.

`input_tokens` is now `prompt_tokens` minus the cached tokens, as Anthropic reports it, so every consumer counts each token once.

**Verified:** a new stream test with the reporter's numbers (100,000 prompt, 65,536 cached, 10 output): input 34,464, cache reads 65,536. `cargo test -p craft-anything-ai` (186), clippy and fmt pass.

Fixes #252
2026-11-02 15:19:45 +07:00
Firefly 8f5de31d5b Say the English README wins in the Chinese one too (#313)
The Chinese README ends with the same note as the Japanese one: it is a translation, and the English version wins where they differ.
2026-11-02 15:08:42 +07:00
Firefly c5da0d5a0e Catch the Japanese README up with the English one (#312)
The Japanese README catches up with the English one: the macOS command-line note and the Craft App Suite table.
2026-11-02 15:08:31 +07:00
BFlat 4ab820fe7f Enabling a toolset in Clean room counts only the tools it lists (#324)
`enable_toolset` reports `visible_tools`, the number of tools now on the connection's list. It counted every tool in the enabled toolsets, but in Clean room `tools/list` leaves out the tools Clean room refuses. So enabling all toolsets said 299 while 86 were listed.

The count and the list now use one check (`listed`): a tool's toolset is shown and, in Clean room, Clean room runs it. Deep mode counts are unchanged, and the two meta-tools are still left out of the count.

**Verified:** a new MCP test in a Clean room session enables all toolsets and checks the count against the tools Clean room runs. It fails without the fix (299 against 86). `cargo test -p craft-anything-mcp` (16), clippy and fmt pass.

Fixes #263
2026-11-02 15:07:10 +07:00
Oliver Mee 8b5826f9bd Selected macOS app folders and nested XPC services are recognised (#297)
Selecting a macOS app folder is recognised as an app bundle (its root-relative Contents/Info.plist), and nested XPC services appear as services and xpc-service graph nodes.

Fixes #282
2026-11-02 15:04:00 +07:00
BFlat 460e2a3c3d The approval check allows npx vite build and still refuses dev servers (#328)
The builder's approval check refused dev servers before looking at the safe build list. `npx vite build` is on that list, but it also starts with `npx vite` (a dev server), so it was refused as one, whatever the mode or Auto setting.

A listed build is no longer read as a dev server: `npx vite build` and `cd app && npx vite build` are allowed, while `npx vite` and `npx vite --host …` are still refused. A command in watch mode (`--watch`) is now refused with the same hint, since it never exits either. That includes a listed build such as `npx vite build --watch`. The safe-list match moved into one helper used by both checks.

**Verified:** new cases in the approval tests (three spellings of the build allowed; two server forms and a watch build refused). The engine's approval tests, clippy and fmt pass.

Fixes #291
2026-11-02 15:02:34 +07:00