Commit Graph
8426 Commits
Author SHA1 Message Date
carlotestor d04737ec87 fix(sidebar): show delegated subagents inside their parent's project
Subagent child sessions come from state.db and never carry a project_id,
so the project filter dropped them. Resolve a child's project from its
nearest ancestor for the project filter, reference scoping and the
Unassigned chip.
2026-09-23 09:25:33 +00:00
nesquena-hermes 19b00f5e37 Merge pull request #7762 from nesquena/stage/7749-terminal-handoff
Release: #7749 preserve the chat terminal handoff when the sidebar reports idle first (@franksong2702)
2026-09-23 01:48:58 -07:00
nesquena-hermes 69655b1fc6 Merge master (exp-v0.52.348) into stage/7749-terminal-handoff
# Conflicts:
#	CHANGELOG.md
2026-09-23 08:37:23 +00:00
nesquena-hermes 6a41c23cf7 Merge pull request #7757 from nesquena/stage/7751-journal-seq
Release: #7751 allocate run-journal sequence inside the append transaction (@franksong2702)
2026-09-23 01:35:39 -07:00
nesquena-hermes adda410ec0 Merge master (exp-v0.52.347) into stage/7749-terminal-handoff
# Conflicts:
#	CHANGELOG.md
2026-09-23 08:29:47 +00:00
nesquena-hermes 64106a790d Merge master (exp-v0.52.347) into stage/7751-journal-seq
# Conflicts:
#	CHANGELOG.md
#	docs/rfcs/webui-run-state-consistency-contract.md
2026-09-23 08:28:18 +00:00
nesquena-hermes 642230b355 Merge pull request #7756 from nesquena/stage/7748-publication-fence
Release: #7748 fence Agent publication/cleanup with Stop ownership (@franksong2702)
2026-09-23 01:26:49 -07:00
nesquena-hermes 398d9495ef docs(changelog): #7749 2026-09-23 06:25:04 +00:00
nesquena-hermes e1c707c6d4 Merge PR #7749 (contributor head bbca954c5c) 2026-09-23 06:24:37 +00:00
nesquena-hermes 99e48f11c2 docs(changelog): #7751 2026-09-23 06:23:42 +00:00
nesquena-hermes 4437f5fb40 docs(changelog): #7748 2026-09-23 06:23:42 +00:00
nesquena-hermes 071710354f Merge PR #7751 (contributor head 68a068c2e5) 2026-09-23 06:22:20 +00:00
nesquena-hermes aeed25b7d0 Merge PR #7748 (contributor head 861a10ec34) 2026-09-23 06:22:18 +00:00
Frank Song 68a068c2e5 fix(run-journal): drop obsolete writer lock state 2026-09-23 13:10:19 +08:00
Frank Song 2bd87a002d fix(run-journal): allocate writer sequence within append transaction 2026-09-23 13:03:31 +08:00
nesquena-hermes b1774b45a9 Merge pull request #7750 from nesquena/stage/rm-346-flakes
Release: #7744 #7742 flaky-test fixes, test-only (@webtecnica)
2026-09-22 21:18:47 -07:00
Frank Song bbca954c5c fix: gate idle recovery on exact runtime status
(cherry picked from commit 35597715018e598bf24f0b708cbd32b039533a99)
2026-09-23 11:57:31 +08:00
Frank Song ca2153ec54 fix: bound sidebar idle recovery for missing terminal events
(cherry picked from commit 1be0e114b32eefe14f94837ed3cf78aadc14ca9b)
2026-09-23 11:57:31 +08:00
Frank Song 5dcda6f537 fix: preserve terminal handoff across idle sidebar refresh
(cherry picked from commit 85f1c2d34b62b0ade85f51ed2cf8c1cf56f5ab9e)
2026-09-23 11:57:31 +08:00
Frank Song 861a10ec34 fix: preserve successor ownership of reused Agents
(cherry picked from commit e4037f1d785aa86074e7cc84025942da5c0cc13a)
2026-09-23 11:56:10 +08:00
Frank Song acdcddf5c9 fix: make Agent cache publication atomic with Stop
(cherry picked from commit c40c43e0eee76a829b113d0119a476a651b60125)
2026-09-23 11:56:10 +08:00
Frank Song 281e91aca3 fix: publish newly constructed agents only after Stop admission
(cherry picked from commit 84a12254fc36aaff628b7e8e43daf48dfd648e67)
2026-09-23 11:56:10 +08:00
Frank Song 9b3951583d fix: fence self-heal worker registration against cancellation
(cherry picked from commit 0fb38b7b5c9453781353464ca5c48c7365359cf1)
2026-09-23 11:56:10 +08:00
nesquena-hermes 26f2456205 docs(changelog): #7744 #7742 flaky-test fixes 2026-09-23 03:51:35 +00:00
nesquena-hermes fd0842cc4d Merge #7742 2026-09-23 03:51:06 +00:00
nesquena-hermes 671905b89d Merge #7744 2026-09-23 03:51:05 +00:00
nesquena-hermes 6f14958bdc Merge pull request #7746 from nesquena/stage/7436-reconnect-replay
Release: #7436 skip redundant reconnect tool-card replay (@atchisonbrent)
2026-09-22 20:28:23 -07:00
nesquena-hermes 394ff790e5 Merge master (exp-v0.52.344) into stage/7436-reconnect-replay
# Conflicts:
#	CHANGELOG.md
2026-09-23 03:21:30 +00:00
nesquena-hermes e0a0e9fbcd Merge pull request #7745 from nesquena/stage/7374-double-render
Release: #7374 stop rendering a settled assistant answer twice (@Thireus)
2026-09-22 20:19:58 -07:00
nesquena-hermes 77182f435a docs(changelog): #7436 reconnect tool-card replay 2026-09-23 02:29:53 +00:00
nesquena-hermes c5663e86a7 Merge PR #7436 from atchisonbrent: skip unchanged tool-card replay on reconnect 2026-09-23 02:29:39 +00:00
nesquena-hermes f26f7926c6 docs(changelog): #7374 duplicate assistant answer render 2026-09-23 02:29:01 +00:00
nesquena-hermes a6d6b3da85 Merge PR #7374 from Thireus: fix duplicate assistant answer render (#2051) 2026-09-23 02:28:29 +00:00
webtecnica 67135b3b1e test(models): pin live-rebuild budget in model-cache metadata tests
The three get_available_models() tests in tests/test_model_cache_metadata.py
depend on the rebuild finishing inside _LIVE_REBUILD_BUDGET_SECONDS (4.0s).
On a loaded host the rebuild exceeds it and api/config.py::get_available_models
serves the over-budget stale payload, failing the rebuilt-metadata assertions.

Pin the budget to 0.0 (synchronous rebuild), the same pattern already used by
tests/test_issue2513_custom_provider_remote_models.py and
tests/test_copilot_provider_model_settings_not_allowlist.py.

Closes #7735
2026-09-22 22:58:20 -03:00
webtecnica 26702fd19f Remove flaky source-text oracle test (issue #7726)
test_delete_cli_session_still_opens_writable_connection asserted on
inspect.getsource(models.delete_cli_session) text, so it failed only in
single-process full-suite runs when an earlier test leaves a
monkeypatched/decorated wrapper bound on api.models.

The writable-connection contract is already covered end to end by
tests/test_issue1494_state_db_fd_leak.py::test_delete_cli_session_closes_connection,
which performs a real delete and asserts the rows are gone. Remove the
source oracle without a textual replacement; keep a short comment
pointing at the behavioral coverage.
2026-09-22 22:49:23 -03:00
nesquena-hermes 18db77a132 Merge pull request #7741 from nesquena/stage/rm-343-batch
Release: #7631 sidebar window setting (@carlotestor), #7716 hidden-tab 404 poll (@happy5318), #7734 OpenRouter GLM default (@MuhammadUsamaMX)
2026-09-22 18:15:56 -07:00
nesquena-hermes 34feb50c5b docs(changelog): #7631 #7716 #7734 2026-09-23 00:44:29 +00:00
nesquena-hermes 8a2d79ca43 Merge PR #7734 (rebased onto master; maintainer conflict resolution + follow-ups) into stage/rm-343-batch 2026-09-23 00:43:14 +00:00
nesquena-hermes 087a2df4a2 Merge PR #7716 into stage/rm-343-batch 2026-09-23 00:43:14 +00:00
nesquena-hermes d79640f6b1 Merge PR #7631 into stage/rm-343-batch 2026-09-23 00:43:13 +00:00
nesquena-hermes 090728c41d test(#7520): teach the #7514 projection tests the one glm-4.5-flash remap slot
The #7514 tests pinned a pure namespace projection (same ids modulo zai/ ->
z-ai/, same labels). #7520 intentionally serves z-ai/glm-4.5-air in the
glm-4.5-flash slot because OpenRouter does not carry glm-4.5-flash. Encode that
single explicit remap in the reference translation; keep order, length and
every other label pinned.
2026-09-23 00:13:11 +00:00
nesquena-hermes e3c21a386c fix(#7520): drop the '(free)' label from z-ai/glm-4.5-air and make the regression test non-vacuous
OpenRouter bills z-ai/glm-4.5-air as a paid model (0.13/0.85 per 1M), so the
wizard must not label it free. Since #7514 the projection offers the dead id
as z-ai/glm-4.5-flash, not zai/glm-4.5-flash, so the original assertion passed
on master; assert the z-ai spelling (fails pre-fix, passes post-fix).
2026-09-22 23:56:38 +00:00
Muhammad Usama d5349a169d fix: resolve #7520 — remap dead zai/glm-4.5-flash to z-ai/glm-4.5-air in OpenRouter wizard 2026-09-22 23:55:21 +00:00
nesquena-hermes 65b6e4d390 Merge pull request #7739 from nesquena/stage/7445-readonly
Release: #7445 keep state.db readers strictly read-only and stop idle polling (@ruizanthony)
2026-09-22 16:50:37 -07:00
nesquena-hermes e2a7acaf2e fix(#7445): require the Agent schema_version marker and sessions(id) PK before indexing
Codex round-3: a look-alike chat DB carrying the seven indexed column names was indexed. Every Agent state.db since the first schema (440c244cac) has a schema_version row and sessions keyed on id; require both before any CREATE INDEX. Test oracles now ignore sqlite_autoindex_* (TEXT PRIMARY KEY).
2026-09-22 23:24:10 +00:00
nesquena-hermes 3b1b735540 fix(state-db): validate the Agent schema up front; 'skipped' only for the known legacy gap
Codex delta gate: same-named messages/sessions tables with foreign columns
exited 0 with every index 'skipped', and a same-named incompatible index on
the legacy gap was skipped past its validation. Now: validate every keyed
column before creating anything; only sessions.last_activity_at may be
absent (reported 'skipped'); a same-named index on that gap is
'Incompatible index'. Regressions for both shapes.
2026-09-22 23:09:15 +00:00
nesquena-hermes 5729b0155c fix(state-db): fail loud when state.db has no agent table instead of skipping everything
A missing *column* is an older agent schema (skip that index); a missing
*table* means the path is not an agent state.db. Without this the new
skip path reported every index 'skipped' with exit 0 on an unrelated DB.
2026-09-22 23:00:14 +00:00
nesquena-hermes ebcba4386d docs: #7445 CHANGELOG + troubleshooting 'skipped' index status 2026-09-22 22:56:26 +00:00
nesquena-hermes b6d2a2ef17 fix(state-db): skip read indexes an older schema can't hold instead of rolling back the rest
On a pre-2026-07-28 Agent schema, sessions has no last_activity_at, so the
fingerprint index's CREATE failed inside the single BEGIN IMMEDIATE and rolled
back idx_messages_session too, leaving messages unindexed: the exact older-agent
case the troubleshooting doc says the tool fixes. Gate each index on its columns
being present and report 'skipped'. (Opus advisor SHOULD-FIX on #7445.)
2026-09-22 22:56:02 +00:00
nesquena-hermesandruizanthony 8635487d9b fix(state-db): keep non-UTF-8 POSIX paths readable in the read-only URI
state_db_file_uri() quoted the POSIX path as a str; an undecodable filename
byte is carried as a surrogateescape code point, which quote() rejects with
UnicodeEncodeError, and get_cli_sessions() swallowed that as an empty
session list. Quote os.fsencode() bytes instead (what Path.as_uri() did on
master). Regression test: a b'\xff' HERMES_HOME component opens read-only.

Maintainer fold-in during release gating (Codex re-gate finding).

Co-authored-by: ruizanthony <ruizanthony@users.noreply.github.com>
2026-09-22 22:56:02 +00:00