Commit Graph

27679 Commits

Author SHA1 Message Date
Lior Balmas
b94919ab1b test(gateway): isolate Fly env container checks 2026-05-11 13:06:49 +01:00
Lior Balmas
0f8fc6bb61 fix(runtime): detect Fly Machines as containers 2026-05-11 13:06:49 +01:00
Shakker
9bb7f220c9 test: assert daemon config guard json 2026-05-11 13:06:23 +01:00
Peter Steinberger
1f49d34c5f fix(gateway): preserve batched client tool calls 2026-05-11 13:06:05 +01:00
Lellansin
0e6aca34db fix(gateway): align OpenAI chat completions tool protocol
fix(gateway): remove unnecessary type assertion in buildAgentPrompt

fix(gateway): reject unsupported forced tool_choice modes

tool_choice=required and named function tool_choice are now rejected
with invalid_request_error until hard enforcement is implemented
at the agent runtime layer. Only auto and none remain supported.

docs: update Chat Completions tool_choice contract to match rejection behavior

Only auto and none are currently accepted; required and named
function tool_choice are rejected until hard enforcement exists.
2026-05-11 13:06:05 +01:00
Peter Steinberger
efbc550dc9 test: tighten gateway helper assertions 2026-05-11 13:05:47 +01:00
Peter Steinberger
26ac5a3596 test: tighten assistant identity assertions 2026-05-11 13:04:24 +01:00
Peter Steinberger
e6b0b37e3f test: tighten websocket log assertions 2026-05-11 13:02:51 +01:00
Shakker
1d5785ba85 test: assert gateway restart handoffs 2026-05-11 13:02:47 +01:00
samzong
c1b29bf5db fix(gateway): scope session resolve store loads 2026-05-11 13:02:42 +01:00
Peter Steinberger
776c39b00c test: tighten gateway readiness assertions 2026-05-11 13:01:23 +01:00
Shakker
8f1e6ab13c test: assert config write warnings 2026-05-11 13:00:44 +01:00
Peter Steinberger
e8dc492cb0 test: tighten gateway runtime assertions 2026-05-11 12:59:51 +01:00
Peter Steinberger
8d6bef0de1 test: tighten session create assertions 2026-05-11 12:58:08 +01:00
Shakker
a62b8c77a4 test: assert followup collect prompts 2026-05-11 12:57:48 +01:00
Peter Steinberger
96c2502bfb test: tighten gateway startup assertions 2026-05-11 12:56:28 +01:00
Shakker
51ad59ea0c test: assert acp ledger replay order 2026-05-11 12:55:19 +01:00
Peter Steinberger
a199ddf995 test: tighten gateway response assertions 2026-05-11 12:54:28 +01:00
Shakker
85d5718236 test: assert cli startup routing 2026-05-11 12:52:39 +01:00
Peter Steinberger
3c1d8bbc09 test: tighten shared auth rotation assertions 2026-05-11 12:51:41 +01:00
Shakker
1eb42c68d9 test: assert completion cache writes 2026-05-11 12:50:46 +01:00
Peter Steinberger
7a6dbffa05 test: tighten gateway auth path assertions 2026-05-11 12:49:55 +01:00
Peter Steinberger
a85c7936e9 test: tighten node pending work assertions 2026-05-11 12:48:31 +01:00
Shakker
c7016bf988 test: assert update cli errors 2026-05-11 12:47:36 +01:00
Peter Steinberger
5f0449d3f3 test: tighten client bootstrap assertions 2026-05-11 12:47:25 +01:00
Shakker
cffe71e2ba test: assert legacy sender warnings 2026-05-11 12:46:02 +01:00
Peter Steinberger
d26bc48ae7 test: tighten models http assertions 2026-05-11 12:45:55 +01:00
Peter Steinberger
5da239473c fix(sessions): stream transcript reverse scans 2026-05-11 12:44:59 +01:00
jack-stormentswe
9654239af9 fix(sessions): stream JSONL transcript scans instead of buffering whole files (#54296)
The remaining whole-file transcript scans flagged by ClawSweeper triage on
splitting on newlines. On long-running sessions where transcripts grow into
the multi-MB / 100s-of-MB range that scales peak RSS with file size and is
the practical OOM risk in the report.

Add a shared streaming helper module `src/config/sessions/transcript-stream.ts`
exposing:

- `streamSessionTranscriptLines(filePath, { signal? })`: forward async-iterator
  over trimmed non-empty lines using `fs.createReadStream` + `readline` with
  `crlfDelay: Infinity`. Bounded to one line of memory at a time and honours
  an abort signal between lines.
- `readSessionTranscriptTailLines(filePath, { maxBytes? })`: tail-only read of
  the last `maxBytes` of a file (default 4 MiB, clamped to [1 KiB, 64 MiB]),
  returning trimmed non-empty lines in reverse order. Drops the leading line
  of the slice when the window does not start at byte zero so callers never
  see a partial-line suffix.

Migrate every flagged whole-file scan to these helpers while preserving the
malformed-line tolerance and idempotency-key return semantics callers depend
on (see `Remaining risk / open question` on the issue):

- `src/config/sessions/transcript.ts`: `readLatestAssistantTextFromSessionTranscript`,
  `readTailAssistantTextFromSessionTranscript`, and the delivery-mirror dedupe
  helper `findLatestEquivalentAssistantMessageId` now use the tail helper;
  `transcriptHasIdempotencyKey` uses the forward stream helper.
- `src/gateway/server-methods/chat.ts`: the inline `transcriptHasIdempotencyKey`
  used by chat-method append idempotency now uses the forward stream helper
  and tolerates malformed lines mid-scan (matching the sibling helper in
  `config/sessions/transcript.ts`).
- `src/gateway/session-compaction-checkpoints.ts`: `readTranscriptEntriesForForkAsync`
  builds the fork entry array from the forward stream helper instead of one
  big `fileHandle.readFile("utf-8")` call.

Fixes #54296.
2026-05-11 12:44:59 +01:00
Shakker
69c2bc58fa test: assert cron model diagnostics 2026-05-11 12:44:21 +01:00
Kaspre
775a24e57c fix(doctor): warn when per-agent model omits fallbacks key and defaults chain is non-empty (#79826)
* fix(doctor): warn when per-agent model omits fallbacks key and defaults chain is non-empty

`resolveAgentModelFallbacksOverride` in `src/agents/agent-scope.ts` returns
`[]` (no fallbacks) when a per-agent model is configured without an explicit
`fallbacks` key. At runtime this silently clobbers
`agents.defaults.model.fallbacks`, leaving the agent with no fallbacks.

Two config patterns hit this:

1. String form: `"model": "openai/gpt-5.5"` — user likely means "use this model,
   inherit fallbacks from defaults".
2. Object without `fallbacks` key: `"model": { "primary": "openai/gpt-5.5" }` —
   user likely means "just set the primary, keep defaults fallbacks".

The only explicit "no fallbacks" signal is `fallbacks: []`. This change adds
`collectImplicitFallbackClobberWarnings` / `noteImplicitFallbackClobberWarnings`
to the doctor config-analysis flow, which warns on either ambiguous shape only
when `agents.defaults.model.fallbacks` is non-empty (so there is something to
clobber).

No semantic change to how fallbacks resolve; this is a doctor-only diagnostic.

Closes #79369. Extends the scope of closed PR #79389 (string-form only) to
also cover the object-without-fallbacks case.

* fix(doctor): mirror runtime model primary normalization

* fix(doctor): strengthen fallback warning proof

* fix(doctor): tolerate malformed agent lists

* fix(doctor): type guarded agent runtime policy

* fix(ui): sync quick settings i18n baseline

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-11 12:43:51 +01:00
Peter Steinberger
9c736af39d test: tighten session cost usage assertions 2026-05-11 12:43:05 +01:00
Shakker
2d73d59905 test: assert cron store loads 2026-05-11 12:41:55 +01:00
pashpashpash
2846d9ea56 test: type acp cli option mock assertions 2026-05-11 12:41:21 +01:00
Peter Steinberger
6ee0c9a696 fix(codex): honor codex fallback blocking 2026-05-11 12:41:21 +01:00
Peter Steinberger
3f05165c47 fix(codex): preserve codex auth order 2026-05-11 12:41:21 +01:00
Peter Steinberger
554d80c060 fix(codex): scope auth state updates 2026-05-11 12:41:21 +01:00
Peter Steinberger
95cee42b5b fix(codex): prefer direct codex auth order 2026-05-11 12:41:21 +01:00
Peter Steinberger
8185eb40e8 fix(codex): complete side thread request parity 2026-05-11 12:41:21 +01:00
pashpashpash
ddc9581d00 fix(codex): preserve side thread tools 2026-05-11 12:41:21 +01:00
pashpashpash
3ae2799e28 fix(codex): preserve auth candidates for auto profiles 2026-05-11 12:41:21 +01:00
pashpashpash
cc95d4dd28 fix(codex): rotate auth profiles inside harness 2026-05-11 12:41:21 +01:00
pashpashpash
f447e5b9db fix(btw): keep Codex side questions tool-free 2026-05-11 12:41:21 +01:00
pashpashpash
517566e39a fix(auth): accept friendly OpenAI order for Codex profiles 2026-05-11 12:41:21 +01:00
pashpashpash
a947e8fae0 fix(codex): align btw side thread semantics 2026-05-11 12:41:21 +01:00
pashpashpash
42e259a696 fix(codex): route btw through native side threads 2026-05-11 12:41:21 +01:00
Peter Steinberger
4aa13b5338 test: tighten outbound target assertions 2026-05-11 12:40:55 +01:00
Shakker
1c452ddabf test: assert aux reload failures 2026-05-11 12:40:15 +01:00
Shakker
996a38466f test: assert session usage errors 2026-05-11 12:38:28 +01:00
Peter Steinberger
f57bcb0788 test: tighten outbound route assertions 2026-05-11 12:37:21 +01:00