Commit Graph
8503 Commits
Author SHA1 Message Date
nesquena-hermes d7530ab90a Merge PR #7779 into stage/7779-cron-provider-pin 2026-09-23 18:23:39 +00:00
nesquena-hermes b8bda9a99e Merge pull request #7787 from nesquena/stage/7767-runtime-model
Release: #7767 publish the observed runtime model over SSE (@happy5318)
2026-09-23 10:32:52 -07:00
nesquena-hermes 6ba0a84bf0 Merge master (exp-v0.52.359) into stage/7767-runtime-model
# Conflicts:
#	CHANGELOG.md
2026-09-23 16:59:54 +00:00
nesquena-hermes 8a3418668f Merge pull request #7786 from nesquena/stage/7651-inflight-cursor
Release: #7651 new-turn reconnect no longer resumes from the previous turn's cursor (@happy5318)
2026-09-23 09:58:45 -07:00
nesquena-hermes b2b5ea282c Merge master (exp-v0.52.358) into stage/7651-inflight-cursor
# Conflicts:
#	CHANGELOG.md
2026-09-23 16:38:29 +00:00
nesquena-hermes a027a2c899 Merge pull request #7784 from nesquena/stage/7743-context-baseurl
Release: #7743 context-length keeps base_url for ownerless and underscore-named providers (@webtecnica)
2026-09-23 09:37:22 -07:00
nesquena-hermes 4c0cba898f Merge master (exp-v0.52.357) into stage/7743-context-baseurl
# Conflicts:
#	CHANGELOG.md
2026-09-23 16:26:14 +00:00
nesquena-hermes df491ee1b6 Merge pull request #7783 from nesquena/stage/7774-vanished-owner
Release: #7774 vanished-session KeyError maps to the recovery skip path (@happy5318)
2026-09-23 09:24:07 -07:00
nesquena-hermes 4ca1754ba0 test(#7767): bind nonlocal closure state when extracting _agent_status_callback
#7767 makes _agent_status_callback declare 'nonlocal _last_runtime_model_identity'
(reset on a fallback warning). #7760's test compiled the extracted callback alone
at module level, where a nonlocal has no binding -> SyntaxError, failing all six
relay tests. Wrap the callback in a scope that binds every nonlocal it declares.
Verified: 16/16 with and without the Agent on py3.11; still 16/16 against master's
callback (no nonlocal); reverting reproduces the 6 failures.
2026-09-23 16:17:17 +00:00
nesquena-hermes a4b2264446 docs(changelog): #7651 2026-09-23 14:34:41 +00:00
nesquena-hermes 16bc5ab3ed docs(changelog): #7743 2026-09-23 14:34:41 +00:00
nesquena-hermes ef7d325a54 docs(changelog): #7774 2026-09-23 14:34:41 +00:00
nesquena-hermes 866cb31e6a docs(changelog): #7767 2026-09-23 14:34:41 +00:00
nesquena-hermes 9b6f70c959 Merge PR #7767 into stage/7767-runtime-model 2026-09-23 14:11:17 +00:00
nesquena-hermes d3a5e7579a Merge PR #7651 into stage/7651-inflight-cursor 2026-09-23 14:11:13 +00:00
nesquena-hermes 7c9d3b53d6 Merge PR #7743 into stage/7743-context-baseurl 2026-09-23 14:11:09 +00:00
nesquena-hermes 889d9b1f5d Merge PR #7774 into stage/7774-vanished-owner 2026-09-23 14:11:06 +00:00
Cushing Whitney e1f90aed09 fix(cron): preserve provider-only pin on untouched save; honor explicit clear
Editing a cron job with the model picker at "Default" sent provider: null
unconditionally, wiping provider-only pins (provider set, no model — the
pattern for self-hosted LLM endpoints). The combined picker cannot express
that state, so such jobs always rendered as "Default" and were silently
re-resolved to the bare global default on any save, breaking dispatch.

#4030 deliberately made clearing the picker mean "no overrides"; that
contract is preserved for explicit clears and model+provider jobs, while
provider-only pins survive saves where the picker was never touched.

- _cronProviderForClear(prevDetail, pickerTouched) decides the provider
  submitted on clear: touched picker -> null; untouched + no model on the
  job -> prev.provider.
- _cronModelPickerTouched is set by a change listener added when the picker
  populates, and reset at openCronEdit/openCronCreate/duplicateCurrentCron.
- Tests: delegation + flag lifecycle locked in, and the helper driven
  through node for provider-only / model-pinned / no-override / no-snapshot
  inputs (6 passed).

Refs: #4030
2026-09-23 14:10:22 +00:00
nesquena-hermes 2ba3e40210 Merge pull request #7775 from nesquena/stage/7760-lease-warnings
Release: #7760 session-lease waits surface as warnings (@franksong2702)
2026-09-23 06:34:33 -07:00
happy5318 5466d09e91 fix(recovery): map vanished-session KeyError to the skip path in WebUI startup recovery (#7753) 2026-09-23 21:23:32 +08:00
nesquena-hermes e577777051 Merge master (exp-v0.52.355) into stage/7760-lease-warnings
# Conflicts:
#	CHANGELOG.md
2026-09-23 13:06:40 +00:00
nesquena-hermes 6f6d7a6451 Merge pull request #7773 from nesquena/stage/7761-watcher-fence
Release: #7761 gateway watcher stale-projection fence (@franksong2702)
2026-09-23 06:05:11 -07:00
nesquena-hermes fbfb737f72 Merge master (exp-v0.52.354) into stage/7761-watcher-fence
# Conflicts:
#	CHANGELOG.md
2026-09-23 12:57:23 +00:00
nesquena-hermes 5203e6a5e1 Merge pull request #7772 from nesquena/stage/7758-wakeup-budget
Release: #7758 retryable wake-up refusals keep their delivery budget (@franksong2702)
2026-09-23 05:56:18 -07:00
nesquena-hermes ae081638d6 Merge master into stage/7760-lease-warnings
# Conflicts:
#	CHANGELOG.md
2026-09-23 12:47:53 +00:00
nesquena-hermes c5d8e5fe4f Merge master into stage/7761-watcher-fence
# Conflicts:
#	CHANGELOG.md
2026-09-23 12:47:36 +00:00
nesquena-hermes 4eef3f3bbf Merge master into stage/7758-wakeup-budget
# Conflicts:
#	CHANGELOG.md
2026-09-23 12:46:45 +00:00
webtecnica 4b791bd820 fix(stream): require a current live assistant row to seed the replay floor
The replay-authority predicate accepted any non-empty assistant message,
but a new turn copies the full transcript into INFLIGHT.messages. In an
established conversation that content is the previous turn's reply, so
`canSeed` came back true with both stale cursor halves preserved and the
server kept skipping the range that rebuilds the body.

Message-based evidence now counts only from a current `_live` assistant
positioned after the latest user boundary; a historical assistant row
fails closed to floor 0 and an empty event id.

Refs #7640 (blocker on #7651)
2026-09-23 09:29:00 -03:00
webtecnica 301ed54ab7 fix(context-length): restore base_url for two guarded configs (#7743)
The #7535 ownership guard skipped the global model.base_url backfill for
two shapes that master handled:

- A `model` section with `base_url` but no `provider` declares no owner,
  so `_providers_match_for_context("", <session provider>)` was false and
  the endpoint was dropped, silently falling back to 256,000 instead of
  querying the configured /v1/models (the profile-setup path writes this
  shape).
- `opencode_go` and `opencode-go` are two spellings of the same built-in
  provider, but `_canonical_context_provider` does not fold underscores,
  so the owner session lost its URL.

Allow the backfill when no owner is declared, and compare both sides
through api.config._canonicalise_provider_id, which folds `_` to `-` while
keeping distinct `custom:*` slugs distinct. The #7535 case (a custom:ark
owner vs an opencode-go session) still resolves to an empty base_url.
2026-09-23 09:26:24 -03:00
webtecnica a44e329997 Merge origin/master into fix/7535-provider-base-url-ownership 2026-09-23 09:20:41 -03:00
webtecnica 03013606fe Merge remote-tracking branch 'origin/master' into fix/7640-transparent-replay-body 2026-09-23 09:20:31 -03:00
nesquena-hermes 2930cefc71 Merge pull request #7769 from nesquena/stage/7730-first-visit-locale
Release: #7730 first visit uses the browser locale (@happy5318)
2026-09-23 04:49:56 -07:00
nesquena-hermes f159d6d219 Merge master (exp-v0.52.352) into stage/7730-browser-locale
# Conflicts:
#	CHANGELOG.md
2026-09-23 11:41:53 +00:00
nesquena-hermes 38d0e10fe4 Merge pull request #7768 from nesquena/stage/7165-custom-allowlist
Release: #7165 custom-provider live models allowlist (@happy5318)
2026-09-23 04:40:35 -07:00
nesquena-hermes 002945c85a Merge master (exp-v0.52.351) into stage/7730-first-visit-locale 2026-09-23 11:33:37 +00:00
nesquena-hermes 00cefff681 Merge master (exp-v0.52.351) into stage/7165-custom-allowlist 2026-09-23 11:33:37 +00:00
Anthony Ruiz 6d830802bb test(journal): cover malformed runtime model reconnect invalidation 2026-09-23 11:22:23 +00:00
Anthony Ruiz c45cab3779 feat(streaming): publish observed local runtime model to SSE and journal 2026-09-23 11:11:52 +00:00
nesquena-hermes 3f00824916 Merge pull request #7766 from nesquena/stage/7656-resolve-cap
Release: #7656 configurable full-session resolve concurrency (@happy5318)
2026-09-23 03:49:19 -07:00
nesquena-hermes 9e8426236a docs(changelog): #7760 2026-09-23 10:41:45 +00:00
nesquena-hermes 75554fd7d6 docs(changelog): #7761 2026-09-23 10:41:22 +00:00
nesquena-hermes 0327db23ef docs(changelog): #7758 2026-09-23 10:41:22 +00:00
nesquena-hermes 86b95eadb7 Merge PR #7760 into stage/7760-lease-warnings 2026-09-23 10:29:33 +00:00
nesquena-hermes ec78f8a80d Merge PR #7761 into stage/7761-watcher-fence 2026-09-23 10:29:29 +00:00
nesquena-hermes 7f4668eb1a Merge PR #7758 into stage/7758-wakeup-budget 2026-09-23 10:29:26 +00:00
nesquena-hermes c767ac70b3 docs(changelog): #7730 2026-09-23 10:23:04 +00:00
nesquena-hermes b43a3b4d43 docs(changelog): #7165 2026-09-23 10:23:03 +00:00
nesquena-hermes aebcd96ff8 Merge PR #7730 into stage/7730-first-visit-locale 2026-09-23 10:22:45 +00:00
nesquena-hermes dc554cbd1c Merge PR #7165 into stage/7165-custom-allowlist 2026-09-23 10:22:41 +00:00
nesquena-hermes 0ff718bb11 docs(changelog): #7656 resolve-concurrency setting 2026-09-23 10:16:42 +00:00