Commit graph

4790 commits

Author SHA1 Message Date
Christian Klotz
cb86f08447
fix(server): enforce protocol adapter invariants 2026-07-31 17:38:00 +03:00
Armin Ronacher
bf4a90d819 fix(tui): preserve spaces in settings searches 2026-07-31 16:34:27 +02:00
Christian Klotz
2e60d3cbdf
feat(server): add composable protocol server 2026-07-31 17:32:29 +03:00
Armin Ronacher
3c717842e8 feat(tui): add fullscreen transcript navigation 2026-07-31 16:23:58 +02:00
Christian Klotz
2b765ef529
fix(agent): restore forward session cursor reads
Document complete session store and search composition for scanning and canonical SQLite search.
2026-07-31 17:17:41 +03:00
Christian Klotz
4e81b79615
fix(agent): restrict session construction to repositories 2026-07-31 16:56:51 +03:00
Christian Klotz
f4a96c62b3
docs(agent): simplify session store guidance 2026-07-31 16:42:14 +03:00
Christian Klotz
0b229f1046
docs(agent): document session persistence migration 2026-07-31 16:37:13 +03:00
Vegard Stikbakke
f074efd921 feat(coding-agent): add ui mode setting 2026-07-31 15:33:52 +02:00
Christian Klotz
d937ee15d6
docs(agent): remove session API migration example 2026-07-31 16:23:57 +03:00
Christian Klotz
f90b8595db
fix(agent): update harness lifecycle tests 2026-07-31 16:20:59 +03:00
Christian Klotz
11679808c7
Merge remote-tracking branch 'origin/main' into refactor/session-store-file-names
* origin/main: (25 commits)
  fix(tui): prevent phantom alt-screen selections
  feat(tui): add draggable transient scrollbars
  fix(coding-agent): avoid auth read lock contention
  fix(ai): route Fireworks Kimi K3 through OpenAI compatibility
  docs(client): document Bun Unix transport support
  feat(client): add Unix socket transport
  fix: forward autocompleteMaxVisible to custom editors (#7369)
  fix(ai): scope Codex sockets to accounts
  docs(client): note promise helper removal
  refactor(client): retain ES2022 compatibility
  refactor(client): simplify lifecycle architecture
  refactor(client): tighten lifecycle state modeling
  feat(client): add runtime-neutral session client
  fix(coding-agent): decouple auth lock error tests
  fix: custom-compaction through provider via new model runtime complete (#7325)
  fix(ai): preserve Anthropic initial stream block content (#7358)
  fix(coding-agent): update vulnerable brace-expansion
  fix(ai): keep signed empty text/thinking blocks in google history (#7362)
  feat(tui): add stacked alt-screen flashes (#7361)
  fix(coding-agent): reload credentials before reads
  ...
2026-07-31 16:20:00 +03:00
Christian Klotz
2132f8f75f
fix(agent): clarify session persistence ownership 2026-07-31 16:16:42 +03:00
Armin Ronacher
696a828a4d fix(tui): prevent phantom alt-screen selections 2026-07-31 15:13:53 +02:00
Armin Ronacher
8ac92f831c feat(tui): add draggable transient scrollbars 2026-07-31 15:02:52 +02:00
Christian Klotz
784653468c
Merge pull request #7364 from earendil-works/fix/codex-account-websocket
fix(ai): scope Codex sockets to accounts
2026-07-31 14:43:08 +03:00
Armin Ronacher
d2be68dbeb fix(coding-agent): avoid auth read lock contention
closes #7319
2026-07-31 13:23:08 +02:00
Christian Klotz
7d5fc9499b
Merge pull request #7371 from earendil-works/feat/unix-client-transport
feat(client): add Unix socket transport
2026-07-31 14:13:35 +03:00
David Brailovsky
a688e257c5 fix(ai): route Fireworks Kimi K3 through OpenAI compatibility
closes #7199

Co-authored-by: Fedir Skitsko <fedya@skitsko.com>
2026-07-31 12:47:07 +02:00
Christian Klotz
e44c129749
docs(client): document Bun Unix transport support 2026-07-31 13:12:38 +03:00
Christian Klotz
1c418f6245
feat(client): add Unix socket transport 2026-07-31 13:01:12 +03:00
Cristina Poncela Cubeiro
ea781d68f2
fix: forward autocompleteMaxVisible to custom editors (#7369) 2026-07-31 12:00:17 +02:00
Christian Klotz
cfe6b6a058
fix(ai): scope Codex sockets to accounts
Fixes #7284

Co-authored-by: vince <vincelwt@users.noreply.github.com>
2026-07-31 12:58:56 +03:00
Christian Klotz
f9b0634534
docs(client): note promise helper removal 2026-07-31 12:19:19 +03:00
Christian Klotz
6e16f77161
refactor(client): retain ES2022 compatibility 2026-07-31 12:19:19 +03:00
Christian Klotz
ee3156715d
refactor(client): simplify lifecycle architecture 2026-07-31 12:19:19 +03:00
Christian Klotz
7e121c67cf
refactor(client): tighten lifecycle state modeling 2026-07-31 12:19:19 +03:00
Christian Klotz
33bc0a7b83
feat(client): add runtime-neutral session client
Split harness shutdown initiation from settlement so callbacks can request shutdown without deadlocking active work.
2026-07-31 12:19:19 +03:00
Christian Klotz
8ee2207824
fix(coding-agent): decouple auth lock error tests 2026-07-31 12:09:16 +03:00
Cristina Poncela Cubeiro
ab366ebe94
fix: custom-compaction through provider via new model runtime complete (#7325)
* fix: custom-compaction through provider via new model runtime complete

* Update CHANGELOG.md
2026-07-31 10:54:26 +02:00
David Brailovsky
59ad3dead3
fix(ai): preserve Anthropic initial stream block content (#7358)
fixes #7283
2026-07-31 10:39:38 +02:00
Mario Zechner
9786716d4d fix(coding-agent): update vulnerable brace-expansion
closes #7316
2026-07-31 10:36:02 +02:00
jingtao
6138f5a079
fix(ai): keep signed empty text/thinking blocks in google history (#7362)
Gemini can attach thoughtSignature to a part whose visible text is
empty and requires it echoed back; convertMessages dropped such blocks
together with the signature, breaking the reasoning chain. With the
chain broken, gemini flash models intermittently end a mid-task turn
with a thought-only STOP and no tool call. Empty blocks are now dropped
only when they are unsigned, mirroring the anthropic converter.

Co-authored-by: Jingtao Xu <jingtaozf@gmail.com>
2026-07-31 10:30:38 +02:00
Armin Ronacher
17090d4b99
feat(tui): add stacked alt-screen flashes (#7361) 2026-07-31 10:13:31 +02:00
Mario Zechner
57cde86906 fix(coding-agent): reload credentials before reads
closes #7319
2026-07-31 10:05:57 +02:00
Mario Zechner
32761383d2 fix(coding-agent): update Doom WAD download source 2026-07-31 10:03:41 +02:00
David Brailovsky
3c5a1b2393 fix(tui): reduce default mouse wheel scroll speed 2026-07-31 09:53:33 +02:00
Christian Klotz
97cfd708d4
Merge pull request #7359 from earendil-works/refactor/session-repository-factory-names
fix(agent): refine session repository API
2026-07-31 10:42:23 +03:00
Erik Ogenvik
4523528b21
fix(ai): treat only plain objects as provider error bodies (#7205)
pickBodyText serialized any non-empty object into the error body. SDK error
fields can hold class instances instead of parsed bodies - AWS SDK v3's
$response.body is an HTTP stream/response wrapper - and stringifying one
produced garbage like {"_events":...} as the body, which then replaced
error.message in the composed display string. error.message is where the SDK
puts the real deserialized exception text ("Input is too long...", schema
validation details), so the one useful string was discarded for noise.

The existing pipe-based stream sniffing only covers node-style streams; web
ReadableStreams (pipeTo/pipeThrough, no pipe) and non-stream wrapper classes
slipped through. Require Object.prototype/null prototype before serializing
a candidate body - parsed JSON bodies are plain objects by construction, so
real gateway bodies still surface.
2026-07-31 09:38:54 +02:00
Christian Klotz
8eda7d5020
fix(agent): type composed session stores explicitly 2026-07-31 10:37:12 +03:00
Christian Klotz
a1bb7e4483
fix(agent): expose session stores through factories 2026-07-31 10:28:59 +03:00
Mario Zechner
ea1e77e2db feat(tui): add alternate-screen viewport layouts 2026-07-31 09:22:10 +02:00
Christian Klotz
2700511e45
fix(agent): refine session repository API 2026-07-31 09:48:24 +03:00
Christian Klotz
9b50b046d3
Merge pull request #7163 from cristinaponcela/feat/search
feat: search index sqlite
2026-07-31 09:15:12 +03:00
Cristina Poncela Cubeiro
aa784e5eed refactor, cleanup and conditionals for fts5 2026-07-31 05:51:24 +02:00
Cristina Poncela Cubeiro
c984b7c9e2 cleanup 2026-07-31 05:35:19 +02:00
Cristina Poncela Cubeiro
fb0f0f7cd5 rename: vars 2026-07-31 05:19:23 +02:00
Mario Zechner
74caa2649f fix(coding-agent): validate package manifests
closes #7187
2026-07-30 22:43:22 +02:00
Alexey Zaytsev
714978bf51
Markdown api (#7231)
* feat(tui): export bundled Marked parser

* feat(coding-agent): add width-aware Markdown transformers

---------

Co-authored-by: Mario Zechner <badlogicgames@gmail.com>
2026-07-30 22:39:04 +02:00
Brian
70bbe47a9d
feat(ai): preserve structured metadata for Bedrock provider errors (#7286)
* feat(ai): preserve structured metadata for Bedrock provider errors

A failed Bedrock turn only exposed `errorMessage`, so downstream runtimes
could not classify a provider failure or correlate it with AWS support
without parsing that string. The AWS SDK carries the HTTP status, the
modeled error code, and the request id on the thrown exception; the
provider dropped all three.

Attach them as a `bedrock_response_failure` diagnostic on the existing
`AssistantMessage.diagnostics` array. No new core type surface, and no
existing line changed: the diff is purely additive.

`errorMessage` stays byte-identical because `isRetryableAssistantError`
classifies retries by string-matching it, and `BEDROCK_ERROR_PREFIXES` is
documented as load-bearing for that.

Scope note: the serialized-stream noise in the original report
(`Validation error: 400: {"_events":...}`) was already fixed in v0.82.1 by
 #7081, which added the unread-stream guard in `normalizeProviderError`.
Verified against main: `errorMessage` is clean today. This change covers
only the remaining half of the issue, the missing structured metadata.

Details:
- Carries `details` only, no `error` block, as `pi_messages_rewrite` does.
  A modeled mid-stream exception is not an `Error` at all, so routing it
  through `extractDiagnosticError` would record `"[object Object]"` plus a
  stack trace pointing into the SDK. The readable text is in `errorMessage`.
- `errorCode` reads `error.name`, which is where the SDK puts the modeled
  code for both paths that expose one: service exceptions from
  `client.send()` (via `x-amzn-errortype`) and the plain `Error` the
  event-stream unmarshaller throws for an unmodeled stream error (via
  `:error-code`). All 13 modeled Bedrock errors end in `Exception`, so that
  suffix is the gate; it excludes transport failures such as `TimeoutError`
  and `CredentialsProviderError`, and the SDK's `Unknown` placeholder,
  without enumerating them.
- A modeled mid-stream exception reports only a request id, on purpose.
  `@smithy/core` `getMessageUnmarshaller` throws `deserializedException[code]`
  after reading the code into a local, and the JSON shape deserializer built
  that value as a bare object literal, so the code no longer exists by the
  time it reaches us. The request id from the initial response is used as a
  fallback so these failures stay correlatable.
- `details.status` matches the key `pi_messages_response_failure` uses.
- Header-derived values are dropped when over-long rather than truncated: a
  truncated request id is not a request id.
- Aborted turns emit no diagnostic.

closes #7224

* docs(ai): trim comment density in the Bedrock failure diagnostic

The added block sat at 52 percent comment against 14 percent for the rest
of bedrock-converse-stream.ts and 2-9 percent across the other providers.
Cut to the facts a future maintainer cannot infer from the code: why the
error code is not gated on `BedrockRuntimeServiceException`, why a modeled
mid-stream exception yields only a request id, and the `errorMessage`
byte-identity invariant. Now 29 percent of a 27-line block.

Test comments trimmed the same way, 15 percent to 4 percent, matching
bedrock-custom-headers.test.ts. No behavior change; all tests unchanged
and passing.

---------

Co-authored-by: Brian Stanley <brian.stanley@kavak.com>
2026-07-30 22:32:20 +02:00