Commit graph

5380 commits

Author SHA1 Message Date
nesquena-hermes
cca7421743
Release YM (v0.51.683): pip-style agent-root discovery (#4998, fixes #4700)
Release YM (v0.51.683): pip-style agent-root discovery (#4998, fixes #4700)
2026-06-26 10:39:10 -07:00
nesquena-hermes
9ffb907951 Release YM (v0.51.683): pip-style agent-root discovery (#4998, fixes #4700) 2026-06-26 17:35:41 +00:00
Rod Boev
781223fa18 fix(agent): keep real checkouts ahead of pip-style lookalikes (#4700) 2026-06-26 17:15:03 +00:00
Rod Boev
998c88a7e1 test(#4700): tighten agent discovery regression wording 2026-06-26 17:15:03 +00:00
Rod Boev
b4dadc9939 fix(#4700): recognize nested pip-style agent roots 2026-06-26 17:15:03 +00:00
Rod Boev
b5d462812c fix(#4700): recognize pip-style agent roots for cron imports 2026-06-26 17:15:02 +00:00
nesquena-hermes
83fa82d4fe
Release YL (v0.51.682): indexed compression-continuation lookup (#4991, fixes #4990)
Release YL (v0.51.682): indexed compression-continuation lookup (#4991, fixes #4990)
2026-06-26 09:44:24 -07:00
nesquena-hermes
cf1c15bdcc Release YL (v0.51.682): indexed compression-continuation lookup (#4991, fixes #4990) 2026-06-26 16:40:55 +00:00
nesquena-hermes
f8c4d50950 harden(#4991): session_id max() tiebreaker + membership-completeness doc (Opus gate findings)
Co-authored-by: franksong2702 <franksong2702@users.noreply.github.com>
2026-06-26 16:40:27 +00:00
Frank Song
d68760b288 Prove continuation index completeness before trusting it
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 16:27:40 +00:00
Frank Song
eda4c50cf5 Handle stale compression continuation index fallback
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 16:27:40 +00:00
Frank Song
0f87757a47 Use session index for compression continuations 2026-06-26 16:27:40 +00:00
nesquena-hermes
7763e92d09
Release YK (v0.51.681): Anthropic OAuth-token env detection parity (#4995, fixes #4770)
Release YK (v0.51.681): Anthropic OAuth-token env detection parity (#4995, fixes #4770)
2026-06-26 09:16:15 -07:00
nesquena-hermes
287b84359e Release YK (v0.51.681): Anthropic OAuth-token env detection parity (#4995, fixes #4770)
Co-authored-by: rodboev <rodboev@users.noreply.github.com>
2026-06-26 16:12:46 +00:00
nesquena-hermes
903dabd29b fix(providers): strip Anthropic env values so whitespace-only OAuth tokens don't false-positive (#4995 gate finding) 2026-06-26 15:44:15 +00:00
Rod Boev
f4c0064d16 test(providers): force Anthropic fallback tests past cached imports (#4770) 2026-06-26 15:34:59 +00:00
Rod Boev
06902d8038 fix(providers): detect Anthropic OAuth credentials in WebUI parity paths (#4770) 2026-06-26 15:34:59 +00:00
nesquena-hermes
60f6779e47
Release YJ (v0.51.680): explicit session-index rebuild thread ownership (#4993, #3894)
Release YJ (v0.51.680): explicit session-index rebuild thread ownership (#4993, #3894)
2026-06-26 08:30:10 -07:00
nesquena-hermes
877cdac3c6 Release YJ (v0.51.680): explicit session-index rebuild thread ownership (#4993, #3894) 2026-06-26 15:25:13 +00:00
Rod Boev
f36a427872 fix(models): make session-index rebuild thread ownership explicit (#3894) 2026-06-26 15:13:41 +00:00
nesquena-hermes
b9cea92fa1
Release YI (v0.51.679): parallelize fresh sidebar boot fetches (#4992, fixes #4759)
Release YI (v0.51.679): parallelize fresh sidebar boot fetches (#4992, fixes #4759)
2026-06-26 08:11:15 -07:00
nesquena-hermes
83fec56124 Release YI (v0.51.679): parallelize fresh sidebar boot fetches (#4992, fixes #4759) 2026-06-26 15:07:49 +00:00
Rod Boev
c071da4f5d test(#4759): guard async harness extraction for sidebar refresh 2026-06-26 10:35:43 -04:00
Rod Boev
9cae66a1a0 test(#4759): keep sidebar harnesses aligned with helper extraction 2026-06-26 10:08:28 -04:00
Rod Boev
187931be8e perf(#4759): parallelize fresh sidebar boot fetches 2026-06-26 10:08:28 -04:00
nesquena-hermes
87acf25e98
Release YH (v0.51.678): suppress post-render scroll artifact across all intent modalities (#4970)
Release YH (v0.51.678): suppress post-render scroll artifact across all intent modalities (#4970)
2026-06-26 06:47:31 -07:00
nesquena-hermes
a89c303912 Release YH (v0.51.678): suppress post-render scroll artifact across all intent modalities (#4970) 2026-06-26 13:44:39 +00:00
allenliang2022
e2ea0789b3 fix(chat): do not treat Space on transcript controls as scroll intent (#4970 review)
Maintainer/Codex found one narrow edge in the keyboard intent stamp: because the
listener runs capture-phase and accepts any focused descendant of #messages,
Space/Spacebar on an in-transcript control (tool-card toggles, copy buttons,
role buttons, links/tabs) stamped _lastMessageKeyScrollIntentMs before the
control handler could preventDefault/stopPropagation. That made a button
activation look like a scroll intent and could mask a legitimate post-render
artifact.

Fix by excluding Space/Spacebar when the event target or active element is an
interactive transcript control: button, a[href], select, summary, role=button,
role=tab, role=menuitem, or contenteditable. Keep PageUp/PageDown/arrows/Home/End
stamping unchanged, and keep the existing INPUT/TEXTAREA/contenteditable composer
exclusion.

Add a behavioral node-harness test: Space on a focused transcript button leaves
the key-scroll stamp at -Infinity (serialized null), while PageUp on the pane
still stamps 1234. test_4856 + test_4295 green (20 passed), node --check clean.
2026-06-26 13:29:14 +00:00
allenliang2022
6825bc03b4 fix(chat): record keyboard message-pane scroll as intent (#4970 greptile P1)
Keyboard scrolling of the message pane (PageUp/PageDown, Arrow keys, Space,
Home/End) fires a native scroll event with no wheel/touch/scrollbar/non-message
intent. Inside the 1400ms post-render artifact window the suppression branch
then returned before movedUp could unpin, so a keyboard scroll-up was swallowed
and live-follow snapped the reader back to the bottom.

- Add _lastMessageKeyScrollIntentMs + _recentMessageKeyScrollIntent(), stamped
  by a capture-phase keydown listener on the scroll keys, gated to when the
  message pane is the scroll target (focused/contains focus/hovered) and not an
  editable field (composer/input/contenteditable).
- Gate the post-render suppression on !_recentMessageKeyScrollIntent() (typeof
  guard keeps the #4295 node harness inert).
- Clear the stamp in both _resetScrollDirectionTracker() and
  _resetStreamScrollFollow() (same stale-state hygiene as the wheel stamp).

Tests: keyboard-scroll-inside-window-still-unpins behavioral regression (harness
extended with injected _recentMessageKeyScrollIntent), plus a source lock for the
helper/keydown-stamp/suppression-gate/both-resets. test_4856 + test_4295 green
(19 passed), node --check clean.
2026-06-26 13:29:14 +00:00
allenliang2022
67d9580825 fix(chat): reset wheel intent on session/stream resets + gate suppression on scrollbar drag (#4970 review)
Maintainer dual-gate found two stale-state leaks in the new
_lastMessageWheelIntentMs and one adjacent pre-existing gap; all three fixed:

MUST-FIX 1 — _resetScrollDirectionTracker() (session switch) did not clear
_lastMessageWheelIntentMs, so a gentle wheel in chat A left
_recentMessageWheelIntent() true into chat B's first post-render window,
under-suppressing the artifact and falsely unpinning. Now reset to -Infinity.

MUST-FIX 2 — _resetStreamScrollFollow() (fresh stream) had the same leak: a
gentle upward wheel within 1200ms of a new stream could silently disable live
follow. Now reset to -Infinity.

SHOULD-FIX 3 — the suppression branch ignored _scrollbarDragActive, so a manual
scrollbar-drag upward scroll inside the 1400ms window was swallowed. Gate the
branch on (typeof _scrollbarDragActive==='undefined' || !_scrollbarDragActive);
typeof guard keeps the #4295 node harness inert.

Tests: scrollbar-drag-inside-window-still-unpins behavioral regression (harness
extended with injected _scrollbarDragActive), plus source locks for both resets
and the scrollbar-drag gate. test_4856 + test_4295 green (17 passed),
node --check clean.
2026-06-26 13:29:14 +00:00
allenliang2022
2ce0e731ec fix(chat): scope post-render suppression to true no-intent artifacts (#4970 review)
Maintainer dual-gate (Codex) found the suppression could swallow a genuine
low-delta trackpad wheel scroll-up for ~1.4s after a render:
_recordNonMessageScrollIntent() only recorded message-pane wheel intent at
deltaY<-30, so a gentle deltaY:-5 left both intent helpers false and the
post-render branch returned before movedUp set _messageUserUnpinned.

- Track recent low-delta upward message-pane wheel intent separately
  (_lastMessageWheelIntentMs / _recentMessageWheelIntent), recorded for any
  upward wheel (deltaY<0). The decisive deltaY<-30 sticky-unpin is unchanged.
- Require !_recentMessageWheelIntent() before suppressing the artifact, so a
  real gentle scroll-up inside the window still unpins.
- Add behavioral node-harness regressions: gentle wheel inside the window
  unpins; no-intent artifact inside the window stays suppressed; outside the
  window unpins. Plus a source lock that low-delta intent is tracked.
2026-06-26 13:29:14 +00:00
allenliang2022
e102f4e0d9 fix(chat): guard post-render artifact suppression so #4295 harness passes
The new movedUp suppression branch called _recentMessageRenderArtifactWindow()
and the intent helpers in an unguarded position. The #4295 unit harness injects
the scroll-listener body via new Function() without those helpers, so the branch
threw ReferenceError on a movedUp sample and crashed the node subprocess.

Reorder the && chain with typeof-function guards first; production evaluates the
real helpers, the harness short-circuits before any call. Behavior unchanged.
2026-06-26 13:29:14 +00:00
allenliang2022
f9a952f085 fix(chat): suppress post-render scroll artifacts 2026-06-26 13:29:14 +00:00
nesquena-hermes
ffef6fa4ec
Release YG (v0.51.677): render cron run output as literal pre/code (#4977)
Release YG (v0.51.677): render cron run output as literal pre/code (#4977)
2026-06-26 05:11:28 -07:00
nesquena-hermes
5c0cda025a Release YG (v0.51.677): render cron run output as literal pre/code (#4977) 2026-06-26 12:08:01 +00:00
luandnh
046a0f68b8 fix: render cron run output as literal pre code, not via renderMd
Cron run output is never authored Markdown -- it is logs/JSON/plain text.
Using renderMd() with any heuristic or synthetic fence is fragile:
- Content starting with #, |, > becomes headings/tables/blockquotes
- Embedded triple-backtick in content breaks the synthetic fence

Fix: use DOM-created pre/code with textContent throughout:
- No heuristic, no synthetic fence -- every byte renders verbatim
- Both render paths (initial load + View full output) use the same approach
2026-06-26 11:56:09 +00:00
luandnh
ca1a4ee2dd fix: extract _wrapCronOutput helper, expand heuristic per review
- Extracted duplicated detection logic into shared _wrapCronOutput(text)
- Expanded heuristic to cover ~~~, -, *, _, [ markers
- Added empty-output guard (returns '' for falsy/empty text)
- Fixes Greptile review P2-P3
2026-06-26 11:56:09 +00:00
luandnh
92e8b6a0ba fix: wrap raw cron run output in code block for proper formatting
When viewing cron job run logs (prompt/response), the raw content
was passed through renderMd() which broke formatting for JSON and
plain text (single newlines collapsed, special chars interpreted).
Now detects if content looks like markdown and wraps raw content
in triple backticks so it renders as a proper code block with
preserved whitespace and formatting.
2026-06-26 11:56:09 +00:00
nesquena-hermes
f6910eeed8
Release YF (v0.51.676): scope pending user-turn dedupe to current tail (#4826, fixes #4825)
Release YF (v0.51.676): scope pending user-turn dedupe to current tail (#4826, fixes #4825)
2026-06-26 04:27:23 -07:00
nesquena-hermes
148d7b1e99 Release YF (v0.51.676): scope pending user-turn dedupe to current tail (#4826, fixes #4825) 2026-06-26 11:23:49 +00:00
Frank Song
ecf2eda433 Update pending user reattach regression
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 11:12:50 +00:00
Frank Song
2d21eff780 Fix pending user dedupe current-turn scope
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 11:12:50 +00:00
Frank Song
540d36d0b0 Fix inflight tail merge harness dependency 2026-06-26 11:12:50 +00:00
Frank Song
24b6e87aea Scope active user turn dedupe to current turn 2026-06-26 11:12:50 +00:00
Frank Song
035a2609f1 Harden active user turn dedupe tests 2026-06-26 11:12:50 +00:00
Frank Song
709f133d76 Fix active user turn replay dedupe 2026-06-26 11:12:50 +00:00
nesquena-hermes
42b3ada3f2
Release YE (v0.51.675): bounded state.db tail reads for paginated session loads (#4920, fixes #4918 P1)
Release YE (v0.51.675): bounded state.db tail reads for paginated session loads (#4920, fixes #4918 P1)
2026-06-26 03:57:13 -07:00
nesquena-hermes
fdfed7a0d5 Release YE (v0.51.675): bounded state.db tail reads for paginated session loads (#4920, fixes #4918 P1) 2026-06-26 10:54:13 +00:00
Frank Song
f15f178b5e Guard state db prefix keys with tool calls
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 10:43:28 +00:00
Frank Song
7a38b09af1 Fix lint for state db prefix key guard
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 10:43:28 +00:00