Commit Graph
1288 Commits
Author SHA1 Message Date
Alexandre Teixeira 11ad4e2739 fix(url-safety): resolve NAT64 well-known prefix to IPv4 target
The R09 scholarly hardening routes every hop through check_outbound_url with
block_private=True. On a DNS64/NAT64 network, an IPv4-only host can resolve
through the RFC 6052 Well-Known Prefix. For example, export.arxiv.org resolved
to 64:ff9b::924b:5b2a in the reproduced environment.

CPython classifies that outer IPv6 prefix as reserved, so the URL guard rejected
the request before examining the effective IPv4 destination.

Decode addresses in exactly 64:ff9b::/96 to their embedded IPv4 destination and
evaluate that destination under the strict outbound policy.

The translated target is always checked with private-address blocking enabled.
This prevents the NAT64 prefix from becoming a path to loopback, private,
shared/CGNAT, link-local, multicast, unspecified, or other non-global IPv4
space.

Network-specific translation prefixes are not decoded. In particular,
64:ff9b:1::/48 remains subject to the existing IPv6 policy.

Coverage includes:

- public IPv4 destinations embedded through the RFC 6052 prefix
- loopback, link-local, private, CGNAT, multicast, unspecified, benchmark, and
  TEST-NET rejection
- network-specific NAT64 prefixes remaining undecoded
- deterministic scholarly provider tests without live DNS dependence
- redirect query parameter isolation
- relative redirect resolution
- HTTP error fallback behavior
- editor draft GET and DELETE behavior remaining unaffected

R09, R11, and R01 were independently audited and otherwise left unchanged.
2026-09-23 15:32:04 +01:00
Alexandre Teixeira 0784cd2fed fix(review): harden scholarly redirects, editor draft limits, and threat model
- Enforce outbound URL policy on all hops via bounded manual redirects in scholarly lookups
- Guard declared Content-Length in EditorDraftRoute before request body parsing
- Keep scholarly lookup timeouts and budgets as internal constants rather than surface env vars
- Narrow TUI threat-model description around demonstrable host shell bridge behavior
- Add behavioral regression tests for redirect security and pre-parsing body size guards
2026-09-23 12:53:06 +01:00
Alexandre Teixeira c90a81dbdc Merge commit '14afd3afb6274ff986733ddff992001e19c80e29' into fix/pr10-merge-ready 2026-09-23 12:29:27 +01:00
Léo 1b75fdb438 test: pin the 2026-09-23 review fixes
Covers both behaviours end to end: a refused outbound URL and an exhausted
budget must skip the request entirely rather than fall through to httpx, the
remaining budget caps each hop's timeout, and an over-ceiling Content-Length
returns 413 without the body being parsed.

Verified against the pre-fix tree: the User-Agent was hardcoded, the endpoints
were literals, check_outbound_url was absent, both hops carried independent
12.0s timeouts, and an oversized declared body returned 422 after parsing
rather than 413 before it.
2026-09-23 11:09:48 +02:00
Alexandre Teixeira 3cabbb9bca test(agent): restore exact turn-policy regressions 2026-09-23 00:14:30 +01:00
Alexandre Teixeira c0b71a5cef fix(tools): constrain Python environment namespace mount 2026-09-23 00:10:50 +01:00
Alexandre Teixeira c0a1cecc00 test(baseline): align UI and model profile expectations 2026-09-22 23:27:17 +01:00
Alexandre Teixeira 9bc1cdcab0 test(harness): isolate imports and stabilize browser and DNS fixtures 2026-09-22 23:27:08 +01:00
Alexandre Teixeira 4520b4f6f0 fix(ui): restore rich text controls and accessible research map 2026-09-22 23:26:43 +01:00
Alexandre Teixeira b9cccb93ac fix(tools): expose active Python environment in workspace namespace 2026-09-22 23:26:28 +01:00
Alexandre Teixeira 79a55fac38 fix(agent): preserve focused turn contracts and verified completion 2026-09-22 23:26:16 +01:00
Alexandre Teixeira 128102ef26 test(runtime): isolate tool execution module state 2026-09-22 18:17:42 +01:00
Alexandre Teixeira 83088f8811 ci: provision browser dependencies for pytest 2026-09-22 18:08:16 +01:00
Alexandre Teixeira ebcc6c524f test(database): restore model endpoint isolation 2026-09-22 18:07:09 +01:00
Alexandre Teixeira dbba4978ee test(harness): support cache-busted frontend module imports 2026-09-22 18:06:18 +01:00
Alexandre Teixeira 8bb48780a1 feat(provider): add lazy Featherless model discovery 2026-09-22 13:12:19 +01:00
Alexandre Teixeira 2b2bf0fb90 fix(ui): refine provider endpoint controls 2026-09-22 13:12:19 +01:00
Alexandre Teixeira 411559913c feat(ui): refine subscription model and usage controls 2026-09-22 13:12:19 +01:00
Alexandre Teixeira ed7ccfd584 feat(provider): support multiple ChatGPT subscriptions with usage 2026-09-22 13:12:19 +01:00
Alexandre Teixeira dd13f53507 ci: support maintainer lab pull requests 2026-09-22 12:39:14 +01:00
pewdiepie-archdaemon 297ad19248 Harden maintainer-preview harness and review fixes
Unify conversational domain routing, preserve artifact completion evidence, replace provisional tool-round prose with terminal synthesis, and resolve verified maintainer review findings across search, frontend module identity, path policy, configuration, and built-in skill startup.
2026-09-21 06:54:03 +00:00
pewdiepie-archdaemon d7cad0621f reserve wall time for artifact completion 2026-09-19 12:45:09 +00:00
pewdiepie-archdaemon efe8dbeab3 preserve research tools through artifact completion 2026-09-19 09:24:22 +00:00
pewdiepie-archdaemon 3f9ff9d580 trust runtime materialization evidence 2026-09-19 02:44:36 +00:00
pewdiepie-archdaemon e0c21b28d5 validate executable artifact completion code 2026-09-19 02:33:33 +00:00
pewdiepie-archdaemon f5e3119b10 bind directory completion to output descendants 2026-09-19 02:25:27 +00:00
pewdiepie-archdaemon 27affcdb58 use native python for directory artifact completion 2026-09-19 02:14:13 +00:00
pewdiepie-archdaemon b4cd39657d recover mixed artifact tool payloads 2026-09-19 02:07:04 +00:00
pewdiepie-archdaemon 2308ff9b80 recover concatenated artifact writes 2026-09-19 01:53:12 +00:00
pewdiepie-archdaemon b32fa31b37 bound malformed artifact recovery loops 2026-09-19 01:37:46 +00:00
pewdiepie-archdaemon fbaa184a7b recover required artifacts after tool suppression 2026-09-19 00:28:08 +00:00
pewdiepie-archdaemon d0044163bf exclude known inputs from completion artifacts 2026-09-19 00:08:57 +00:00
pewdiepie-archdaemon f086f66a4f preserve native web tools after network guard rejection 2026-09-18 21:41:24 +00:00
pewdiepie-archdaemon 75b2420239 constrain directory completion to child files 2026-09-18 20:51:04 +00:00
pewdiepie-archdaemon ceb79d072a handle directory artifact completion safely 2026-09-18 20:43:51 +00:00
pewdiepie-archdaemon 932f64739c bump harness to 0.20.6 2026-09-18 20:17:59 +00:00
pewdiepie-archdaemon 0865e0e8da require content in directory artifact outputs 2026-09-18 20:17:19 +00:00
pewdiepie-archdaemon 27e53e857c recover boundedly from action-only replies 2026-09-18 18:22:34 +00:00
pewdiepie-archdaemon d550bc0e74 bind binary completion code to required path 2026-09-18 18:16:12 +00:00
pewdiepie-archdaemon 7b5288f097 route binary artifact completion through Python 2026-09-18 18:08:32 +00:00
pewdiepie-archdaemon 43e50185f9 normalize named tool choice for Kimi thinking mode 2026-09-18 17:00:54 +00:00
pewdiepie-archdaemon 3985172885 recover empty artifact writer turns through body handoff 2026-09-18 16:33:30 +00:00
pewdiepie-archdaemon 629bd32d03 preserve output budget for artifact body recovery 2026-09-18 16:29:04 +00:00
pewdiepie-archdaemon a394ea25d3 drop provider-invalid reasoning-only history turns 2026-09-18 16:22:59 +00:00
pewdiepie-archdaemon 508e017d89 preserve DeepSeek reasoning across clean tool rounds 2026-09-18 16:16:09 +00:00
pewdiepie-archdaemon a453b71651 count artifact handoff once per response batch 2026-09-18 16:10:02 +00:00
pewdiepie-archdaemon 60de3b951f retry invalid artifact body immediately 2026-09-18 16:07:34 +00:00
pewdiepie-archdaemon a09acc43a6 retry bounded artifact body handoff 2026-09-18 16:02:26 +00:00
pewdiepie-archdaemon 3443b706a5 recover artifact body after repeated off-contract calls 2026-09-18 15:56:17 +00:00
pewdiepie-archdaemon afbf8cc266 bind artifact completion to required output path 2026-09-18 15:47:13 +00:00