Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
256 commits
Select commit Hold shift + click to select a range
d9e9b97
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Sep 30, 2026
2af16ab
refactor(native-chat): derive the queue's pause from Stop and Resume …
brennanb2025 Sep 30, 2026
438240a
fix(native-chat): a card queued after a Stop sends normally, never ah…
brennanb2025 Sep 30, 2026
6de6b32
fix(native-chat): the queue's own send re-checks the no-overtake rule…
brennanb2025 Sep 30, 2026
340f4a6
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Sep 30, 2026
d8b9e48
fix(native-chat): stop creating the unused queue pause table
brennanb2025 Sep 30, 2026
44e5184
fix(native-chat): a Stop's pause never hides the restart pause
brennanb2025 Sep 30, 2026
a90bd87
test(native-chat): pin the Stop's no-resend, lift and held-card rules
brennanb2025 Sep 30, 2026
fbd56c6
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Sep 30, 2026
99589e9
refactor(native-chat): a Stop writes one Stop event with its reason, …
brennanb2025 Sep 30, 2026
e0087ee
test(native-chat): a rewind keeps a lifted /clear pause lifted and re…
brennanb2025 Sep 30, 2026
e447899
test(native-chat): pin that Stop and Resume rows never reach apps or …
brennanb2025 Sep 30, 2026
60500d8
test(native-chat): only a person's Stop event pauses the queue
brennanb2025 Sep 30, 2026
839f6f4
test(native-chat): pin that a Stop's event precedes the interrupt and…
brennanb2025 Sep 30, 2026
d5b48ef
test(native-chat): a card held at a starting agent is checked before …
brennanb2025 Sep 30, 2026
5689a9d
test(native-chat): a released build keeps and folds a journal holding…
brennanb2025 Sep 30, 2026
8c5523e
style(native-chat): format the Stop event changes
brennanb2025 Sep 30, 2026
5c38ea6
test(native-chat): type the released build's exports through one chec…
brennanb2025 Sep 30, 2026
a12b65a
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Sep 30, 2026
26e9419
fix(native-chat): the Stop/Resume row guard narrows to those tombston…
brennanb2025 Sep 30, 2026
977d500
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Sep 30, 2026
806765b
test(native-chat): run the Stop-event downgrade test in CI, and cover…
brennanb2025 Sep 30, 2026
8ec0fbf
fix(native-chat): a Stop that stops nothing new writes no Stop event
brennanb2025 Sep 30, 2026
722e964
test(native-chat): pin that a later host, eviction or close Stop neve…
brennanb2025 Sep 30, 2026
74adc16
chore(native-chat): put each Stop-row doc on its own declaration, and…
brennanb2025 Sep 30, 2026
4750645
fix(native-chat): any later Stop event ends a person's Stop pause
brennanb2025 Sep 30, 2026
c0d9689
fix(native-chat): a second Stop press is a repeat even when the first…
brennanb2025 Sep 30, 2026
989f90b
fix(native-chat): the queue's pause ignores a Stop or Resume row hold…
brennanb2025 Oct 1, 2026
be2be9f
fix(native-chat): a Stop still reads as yours after Orca restarts bef…
brennanb2025 Oct 1, 2026
935d24a
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Oct 1, 2026
cc32533
refactor(native-chat): a stop no longer carries its cause; the turn's…
brennanb2025 Oct 1, 2026
93e2f55
test(native-chat): a turn a later send opened is no Stop's that named…
brennanb2025 Oct 1, 2026
4be2b8b
test(native-chat): the restart test's death proof carries its detail
brennanb2025 Oct 1, 2026
c98b280
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Oct 1, 2026
8276989
Merge #24072's branch (with #24235) into stop-event part B
brennanb2025 Oct 1, 2026
20852ee
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Oct 1, 2026
d388b9c
refactor(native-chat): a refused Stop leaves no record; a Stop only e…
brennanb2025 Oct 1, 2026
f85a984
fix(native-chat): a Stop pressed before any turn showed stops only th…
brennanb2025 Oct 1, 2026
2ba34a9
fix(native-chat): an older Claude's error end after a Stop pressed be…
brennanb2025 Oct 1, 2026
4fdd9ad
fix(native-chat): a person's Stop and /clear each name why they end t…
brennanb2025 Oct 1, 2026
98ee326
fix(native-chat): a host stop judges whether it ends work after the p…
brennanb2025 Oct 1, 2026
d0e4cfc
fix(native-chat): a Claude Stop naming a turn that just ended still m…
brennanb2025 Oct 1, 2026
771ad35
fix(native-chat): the idle sweep reads working by the same rule as a …
brennanb2025 Oct 1, 2026
a51a1ee
test(native-chat): an aborted eviction's injected drain failure lands…
brennanb2025 Oct 1, 2026
eb27559
fix(native-chat): the idle sweep's rest writes no Stop event; it evic…
brennanb2025 Oct 1, 2026
693583d
fix(native-chat): stopping a start that carries no send writes no Sto…
brennanb2025 Oct 1, 2026
3b8c6e7
test(native-chat): a Stop's pause across a restart is tested with a r…
brennanb2025 Oct 1, 2026
506c4fa
Merge remote-tracking branch 'origin/main' into brennanb2025/queue-st…
brennanb2025 Oct 1, 2026
37ed748
fix(native-chat): a host stop of a turn a person's Stop is still endi…
brennanb2025 Oct 1, 2026
69b4dec
fix(native-chat): an older Claude's error on a later turn keeps its e…
brennanb2025 Oct 1, 2026
ac4a987
Merge remote-tracking branch 'origin/brennanb2025/queue-stop-keeps-st…
brennanb2025 Oct 1, 2026
5ead1f6
fix(native-chat): a Stop of a start that never landed binds no later …
brennanb2025 Oct 1, 2026
aa7f3a7
test(native-chat): a rewind's restated turnless Stop binds no turn op…
brennanb2025 Oct 1, 2026
a5960f7
fix(native-chat): a relaunch settles a person's stopped turn with no …
brennanb2025 Oct 1, 2026
78369ee
test(native-chat): the unexpected-exit settle's journal fake answers …
brennanb2025 Oct 1, 2026
e9c8af8
fix(native-chat): a host stop whose sink drain fails reads the journa…
brennanb2025 Oct 1, 2026
8550aa1
fix(native-chat): a Stop that named no turn applies only to a turn a …
brennanb2025 Oct 1, 2026
ee54861
fix(native-chat): a host stop whose sink drain runs long reads the ag…
brennanb2025 Oct 1, 2026
bd16848
test(native-chat): a host stop with no turn running defers only while…
brennanb2025 Oct 1, 2026
ec0533b
fix(native-chat): a slow sink drain reads working only while an accep…
brennanb2025 Oct 1, 2026
3fba742
test(native-chat): the host-stop control keeps the stopped send unans…
brennanb2025 Oct 1, 2026
6a1f65b
fix(native-chat): a steer is no send owed a turn when a slow drain ju…
brennanb2025 Oct 1, 2026
e644e58
feat(native-chat): a chat reads Stopping from the person's Stop until…
brennanb2025 Oct 1, 2026
42964ad
test(native-chat): pin Stopping on the phone and across mixed versions
brennanb2025 Oct 1, 2026
79f661c
test: give touched fake journals and mocks their SAFETY notes
brennanb2025 Oct 1, 2026
c2bd622
test(native-chat): a turn waiting on the person reads attention, neve…
brennanb2025 Oct 1, 2026
fbca7ee
test(native-chat): the sidebar row follows Stopping when it is the on…
brennanb2025 Oct 1, 2026
f4b3942
test(mobile): the phone reads Stopping from its own Stop until the re…
brennanb2025 Oct 1, 2026
8f32fc2
test(mobile): type the held Stop request instead of casting it
brennanb2025 Oct 1, 2026
dd8836d
chore: keep the base lockfile (a local pnpm run rewrote it)
brennanb2025 Oct 1, 2026
fe5ed91
fix(native-chat): narrow the Stop note's optional failure; type the p…
brennanb2025 Oct 1, 2026
b10fb50
test(native-chat): type the Stop test envelope's fields narrowly
brennanb2025 Oct 1, 2026
3ca4853
Merge remote-tracking branch 'origin/brennanb2025/stop-event-b' into …
brennanb2025 Oct 1, 2026
3d10733
fix(native-chat): a Stop the agent declined, or whose child end faile…
brennanb2025 Oct 1, 2026
5042f69
fix(native-chat): Stopping holds while any press of the Stop took
brennanb2025 Oct 1, 2026
552a4ad
fix(native-chat): keep Stop enabled while the host says Stopping
brennanb2025 Oct 1, 2026
28a4de4
fix(sidebar): every agent row says Stopping in place of its tool line
brennanb2025 Oct 1, 2026
cd44de4
fix(mobile): the worktree list sees Stopping change on its own
brennanb2025 Oct 1, 2026
514a216
refactor(native-chat): fold the status feed in src/shared for both cl…
brennanb2025 Oct 1, 2026
6b65121
feat(mobile): let phones read the structured session status stream
brennanb2025 Oct 1, 2026
e6b8632
feat(mobile): the phone chat reads Stopping from the host, like the d…
brennanb2025 Oct 1, 2026
d59d573
test: give the new fakes checked types or a SAFETY reason
brennanb2025 Oct 1, 2026
bc5dcad
revert(native-chat): drop the refused-named-turn rewrite of a Stop's …
brennanb2025 Oct 1, 2026
287c86c
fix(mobile): release the status stream when the host ends it; refusal…
brennanb2025 Oct 1, 2026
feeb589
perf(native-chat): read the live turn's opener from its record when d…
brennanb2025 Oct 1, 2026
c9ba088
refactor(mobile): move the method-unavailable check into transport
brennanb2025 Oct 1, 2026
0c36f02
test(native-chat): a send after a Stop reads Working before its turn …
brennanb2025 Oct 1, 2026
6dc89f6
fix(sidebar): the compact row leads with Stopping so a narrow sidebar…
brennanb2025 Oct 1, 2026
3bf1013
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-eve…
brennanb2025 Oct 1, 2026
fc600d3
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-eve…
brennanb2025 Oct 1, 2026
32c945f
test(native-chat): the retry of a close whose exit was unproven write…
brennanb2025 Oct 1, 2026
c39f2ad
Merge remote-tracking branch 'origin/brennanb2025/stop-event-b' into …
brennanb2025 Oct 1, 2026
eee56e6
fix(native-chat): read and write a Stop's answer by the turn its even…
brennanb2025 Oct 1, 2026
528d56a
refactor(native-chat): read a Stop's target once for its event and it…
brennanb2025 Oct 1, 2026
3764929
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 1, 2026
03d1fcc
fix(native-chat): the host never steers a message into a turn a Stop …
brennanb2025 Oct 2, 2026
723fa84
feat(native-chat): while Stopping, the composer says a message runs a…
brennanb2025 Oct 2, 2026
b32f574
refactor(native-chat): the chat pane's Stop controls live in their ow…
brennanb2025 Oct 2, 2026
bc4f09c
fix(native-chat): hold a send at its handover, reading the feed's own…
brennanb2025 Oct 2, 2026
8d4f441
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 2, 2026
1699657
refactor(native-chat): one display status decides Stopping on every s…
brennanb2025 Oct 2, 2026
aff5849
fix(native-chat): Stopping holds until the stopped turn ends, whateve…
brennanb2025 Oct 2, 2026
486a4aa
fix(native-chat): a Stop binds only the turn it actually stopped
brennanb2025 Oct 2, 2026
338180b
Merge #24864 (a Stop binds only the turn it stopped) into the Stoppin…
brennanb2025 Oct 2, 2026
4d5e13e
fix(native-chat): keep the person's queue pause and close binding aft…
brennanb2025 Oct 2, 2026
bfc51ce
Merge #24864's review fixes into the Stopping state
brennanb2025 Oct 2, 2026
4ed011b
fix(native-chat): keep a failed Stop's turn display-only, and settle …
brennanb2025 Oct 2, 2026
8447d44
Merge origin/main into stop-binds-at-settle
brennanb2025 Oct 2, 2026
a7a9551
Merge #24864 (with main) into the Stopping state
brennanb2025 Oct 2, 2026
9f61404
fix(native-chat): a Codex Stop agrees on both presses when a turn is …
brennanb2025 Oct 2, 2026
78eda4a
Merge #24864's final fixes into the Stopping state
brennanb2025 Oct 2, 2026
c2f54be
fix(native-chat): a Stop that failed before its turn showed still rea…
brennanb2025 Oct 2, 2026
34acafa
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-bin…
brennanb2025 Oct 3, 2026
67a06b8
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-bin…
brennanb2025 Oct 3, 2026
057e364
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-bin…
brennanb2025 Oct 3, 2026
06261d0
test(native-chat): a Stop whose event row failed binds no turn to an …
brennanb2025 Oct 3, 2026
60572cc
test(native-chat): name the settle, not a stream drain, in the Stop's…
brennanb2025 Oct 3, 2026
5fdc221
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-bin…
brennanb2025 Oct 3, 2026
3a3b7f6
Merge origin/brennanb2025/stop-binds-at-settle (#24864 with main's on…
brennanb2025 Oct 3, 2026
0855e21
test(native-chat): a Codex Stop answered before Codex ends the turn r…
brennanb2025 Oct 3, 2026
f7c08df
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 3, 2026
8b526b7
test(native-chat): Stopping ends with a Codex turn whose interrupt is…
brennanb2025 Oct 3, 2026
bd95932
fix(native-chat): a Codex Stop interrupts a turn Codex answered but h…
brennanb2025 Oct 3, 2026
ffd8d6a
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-bin…
brennanb2025 Oct 3, 2026
a7b2a5a
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 3, 2026
c120cb0
fix(mobile): name how the phone's status stream is released in the su…
brennanb2025 Oct 3, 2026
980f0e7
fix(native-chat): every Codex Stop waits for an answered turn to star…
brennanb2025 Oct 3, 2026
f7594b6
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 3, 2026
0138f0b
fix(codex): never steer a turn whose interrupt Codex answered
brennanb2025 Oct 3, 2026
8a46f7c
fix(native-chat): a message sent while Stopping is queued as a card, …
brennanb2025 Oct 3, 2026
3bdb4de
fix(native-chat): a message queued while Stopping is a card at once, …
brennanb2025 Oct 3, 2026
a2ba0c5
fix(native-chat): a Codex Stop that ends the child before any turn op…
brennanb2025 Oct 3, 2026
a6b8185
fix(native-chat): derive the withdrawal of a Codex send whose turn ne…
brennanb2025 Oct 3, 2026
6622a37
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 3, 2026
910989f
fix(native-chat): a card queued while Stopping runs past the cards th…
brennanb2025 Oct 3, 2026
78da557
fix(native-chat): a paused queue labels only the cards it holds
brennanb2025 Oct 3, 2026
497098d
revert(native-chat): defer the per-card queue pause label to the queu…
brennanb2025 Oct 3, 2026
84f7a5f
fix(native-chat): while Stopping, say and show what a send does where…
brennanb2025 Oct 3, 2026
70601f5
fix(native-chat): keep a send in doubt when a turn was open for it
brennanb2025 Oct 3, 2026
e1d45a1
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 3, 2026
980bf93
fix(native-chat): restore the per-card queue pause label
brennanb2025 Oct 3, 2026
6186504
fix(native-chat): draw only a send made while Stopping after the Stop…
brennanb2025 Oct 3, 2026
8e3240e
fix(native-chat): withdraw a Codex send by whether it started its own…
brennanb2025 Oct 3, 2026
3c7222a
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 3, 2026
a66d22b
refactor(native-chat): move queue-while-stopping to its own follow-up
brennanb2025 Oct 3, 2026
5b60057
fix(native-chat): leave no Stop row when the Stop took back a send th…
brennanb2025 Oct 3, 2026
4888740
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 3, 2026
9f37b39
feat(native-chat): keep a message a Stop took back on screen, with on…
brennanb2025 Oct 3, 2026
f0e502e
fix(native-chat): one stop row per stopped send, drawn where the Stop…
brennanb2025 Oct 3, 2026
10d34da
fix(native-chat): draw a stopped follow-up after the turn that opened…
brennanb2025 Oct 3, 2026
3b1ca27
fix(native-chat): place a stopped send by journal order, not by turn …
brennanb2025 Oct 3, 2026
8d27b29
test(native-chat): pin a stopped send held behind the first send's an…
brennanb2025 Oct 3, 2026
7a429f3
docs(native-chat): say why the pre-echo anchor still compares times
brennanb2025 Oct 3, 2026
e5671a8
docs(native-chat): mark the pre-echo anchor's time compare temporary …
brennanb2025 Oct 3, 2026
7b5aeeb
docs(native-chat): say the placement rule reads journal position, not…
brennanb2025 Oct 3, 2026
006a051
fix(native-chat): keep sends a Stop took back in the order they were …
brennanb2025 Oct 3, 2026
e39e91f
fix(native-chat): draw a stopped send below everything sent before it
brennanb2025 Oct 3, 2026
d6a54a9
fix(native-chat): count a turn opened by the floor row as one the sto…
brennanb2025 Oct 3, 2026
ec35c43
feat(native-chat): publish each submission's journal positions
brennanb2025 Oct 3, 2026
5356531
fix(native-chat): place a stopped send by the journal row that took i…
brennanb2025 Oct 3, 2026
dee61b5
test(native-chat): pin a submission's resolved position on the provid…
brennanb2025 Oct 3, 2026
757e22c
fix(native-chat): keep the previous placement rules for a host that p…
brennanb2025 Oct 4, 2026
f271e26
perf(native-chat): place stopped sends in one pass, and skip it in ch…
brennanb2025 Oct 4, 2026
b47e696
fix(native-chat): count a send whose answer was lost when a Stop take…
brennanb2025 Oct 4, 2026
385dd20
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 4, 2026
e95b934
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 4, 2026
22d2271
test(native-chat): pin which sends a Stop's child end can take back
brennanb2025 Oct 4, 2026
fdbc922
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 4, 2026
b0397f8
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 4, 2026
2daeeea
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-bin…
brennanb2025 Oct 4, 2026
5b4c595
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 4, 2026
ff02198
fix(native-chat): read the host's Stopping beside main's startup phase
brennanb2025 Oct 4, 2026
b7cf8f8
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 4, 2026
7dcd907
test(native-chat): phone draws the same from merged frames as from a …
brennanb2025 Oct 5, 2026
60ece39
test(native-chat): widen the merged-vs-snapshot guard to content, lon…
brennanb2025 Oct 5, 2026
93aadec
test(native-chat): pin the stop row to every frame from the one that …
brennanb2025 Oct 5, 2026
c081029
test(native-chat): check the stop row in the chat view's FlatList, th…
brennanb2025 Oct 5, 2026
2c0bf29
test(native-chat): compare the live and fresh phone on the chat view'…
brennanb2025 Oct 5, 2026
f0c185e
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-bin…
brennanb2025 Oct 5, 2026
d8422dd
test(native-chat): read the outbox reconcile from where main moved it
brennanb2025 Oct 5, 2026
6b2f194
Merge remote-tracking branch 'origin/brennanb2025/stop-binds-at-settl…
brennanb2025 Oct 5, 2026
ed44d22
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 5, 2026
5be7588
test(native-chat): pass the projection's options and mock the phone r…
brennanb2025 Oct 5, 2026
70d978b
refactor(native-chat): place a taken-back send by where the host now …
brennanb2025 Oct 5, 2026
ab8ffbd
test(native-chat): a turn recorded before a send was made is not the …
brennanb2025 Oct 5, 2026
c04cf66
test(native-chat): a message a Stop withdrew is drawn with its stop r…
brennanb2025 Oct 5, 2026
eb76da2
fix(native-chat): a retried message no longer waits behind a later Stop
brennanb2025 Oct 5, 2026
aaf132e
feat(native-chat): publish the turn a withdrawn Codex send was answer…
brennanb2025 Oct 5, 2026
8a2e1ef
feat(native-chat): say how a withdrawn Codex send joined the turn it …
brennanb2025 Oct 5, 2026
9b7f810
fix(native-chat): open a turn for a stopped send only when the host s…
brennanb2025 Oct 5, 2026
808195b
test(native-chat): an echoed opener keeps its turn from a send the ho…
brennanb2025 Oct 5, 2026
92cee88
feat(native-chat): state on every rejection whether it names a turn
brennanb2025 Oct 5, 2026
ac6d23a
fix(native-chat): place a stopped send from older history by journal …
brennanb2025 Oct 5, 2026
e171d49
docs(native-chat): say an unreadable answered turn reads as none
brennanb2025 Oct 5, 2026
edc1195
refactor(native-chat): order stopped sends without non-null assertions
brennanb2025 Oct 5, 2026
9f3cd5e
docs(native-chat): say which half of the older-history turn rule is k…
brennanb2025 Oct 5, 2026
7d137d5
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 5, 2026
b36a22f
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 5, 2026
e278b7a
fix(native-chat): word a send after a Stop by whether this send will …
brennanb2025 Oct 5, 2026
c6f9699
test(native-chat): one test per case for the words of a send after a …
brennanb2025 Oct 5, 2026
a299ee4
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 5, 2026
7603054
refactor(native-chat): the dictation hook owns the composer's dictati…
brennanb2025 Oct 5, 2026
196cdb7
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 5, 2026
3bd8479
fix(mobile-chat): a send a Stop took back is not handed back to the d…
brennanb2025 Oct 5, 2026
4acb3df
refactor(native-chat): name the dictation hook for what it owns now
brennanb2025 Oct 5, 2026
0a6ac04
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 5, 2026
62d1488
fix(mobile-chat): resend a retained replay a Stop took back, under a …
brennanb2025 Oct 5, 2026
517b83e
test(mobile-chat): count every send a withdrawn replay makes
brennanb2025 Oct 5, 2026
b1800c6
fix(mobile-chat): a resend a Stop took back again is not handed back …
brennanb2025 Oct 5, 2026
8f5f49f
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 5, 2026
b0ea254
fix(native-chat): a Stop's note says it took once a joined close prov…
brennanb2025 Oct 5, 2026
bce4f42
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 5, 2026
05ba8da
test(native-chat): draw a stopped send end to end in this PR's own Co…
brennanb2025 Oct 5, 2026
9224f99
fix(native-chat): a proven turn end says a Stop's unconfirmed note took
brennanb2025 Oct 5, 2026
710773a
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 5, 2026
a5429e8
test(native-chat): a Stop's unconfirmed note says it took when the ag…
brennanb2025 Oct 5, 2026
ef4e1ce
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 5, 2026
b63bd50
test(native-chat): restore the named Stop, turn anchor and role check…
brennanb2025 Oct 5, 2026
bbee774
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 5, 2026
6503268
test(native-chat): name the Codex handle as main's opaque handle does
brennanb2025 Oct 5, 2026
b740069
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 5, 2026
843bcfe
Merge commit 'b740069c67ec593cb15a01a852a31a2011d65fe0' into brennanb…
brennanb2025 Oct 5, 2026
a353cc6
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 6, 2026
da14bd0
Merge commit 'a353cc6a19a0bd12bb722185157cab39d4df8ba0' into brennanb…
brennanb2025 Oct 6, 2026
c8a5ac8
test: restore the provider handle import the main merge dropped
brennanb2025 Oct 6, 2026
08ccf3e
Merge commit 'c8a5ac80f812be8564fcce22158acea498c46298' into brennanb…
brennanb2025 Oct 6, 2026
f803bb0
fix: derive Stop note wording from interrupted turns
brennanb2025 Oct 6, 2026
3700e2d
test: name the raw replay case for what it covers
brennanb2025 Oct 6, 2026
dbd3ad3
Merge remote-tracking branch 'origin/brennanb2025/stopping-state-on-b…
brennanb2025 Oct 6, 2026
35b6b72
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 6, 2026
53ae708
refactor(native-chat): move the waiting-slot split into its own hook
brennanb2025 Oct 6, 2026
e58e9f8
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 6, 2026
2e1b079
Merge commit 'e58e9f84494348a4841f77dc8ee217a8c33588d8' into brennanb…
brennanb2025 Oct 6, 2026
a7a5492
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 6, 2026
970c6a1
test: follow main's chat font-size rename in the stopping tests
brennanb2025 Oct 6, 2026
38567b2
Merge commit '970c6a10eb5751b0fbb596ec9acd07b63ca790bd' into brennanb…
brennanb2025 Oct 6, 2026
2fd4ad3
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 6, 2026
082ffca
test: follow main's single live-line value in the Stopping tests
brennanb2025 Oct 6, 2026
0291a43
test: give the android live-line fixtures the stopping field
brennanb2025 Oct 6, 2026
0516948
chore: keep the session host under its line limit after the main merge
brennanb2025 Oct 6, 2026
cd03818
Merge commit '0516948a2399e2b728f776e1efa99dba780118ee' into brennanb…
brennanb2025 Oct 6, 2026
ae692ea
test: follow main's card field and live-line component in the stop-wi…
brennanb2025 Oct 6, 2026
7c4be11
Merge remote-tracking branch 'origin/main' into brennanb2025/stopping…
brennanb2025 Oct 6, 2026
5dce67a
chore: keep the composer test and the phone chat view under their lin…
brennanb2025 Oct 6, 2026
c1f63e7
Merge commit '5dce67a3cb78fd331d1563c2251767e5474795bc' into brennanb…
brennanb2025 Oct 6, 2026
4418399
perf(native-chat): read a Stop note's fields before parsing its key o…
brennanb2025 Oct 6, 2026
47eb29e
Merge commit '44183990d559a970d0da2b7428c6e41abf97b7fd' into brennanb…
brennanb2025 Oct 6, 2026
f65784e
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-wit…
brennanb2025 Oct 6, 2026
a200a85
Merge remote-tracking branch 'origin/main' into brennanb2025/stop-wit…
brennanb2025 Oct 6, 2026
cc6d838
fix(native-chat): keep the Spanish 'Stopped before the agent started'…
brennanb2025 Oct 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
// What the host's own fold and history readers send a phone subscribed to a journal, at any row.

import type {
AgentJournalCursor,
AgentJournalSnapshot
} from '../../../src/shared/agent-session-journal-types'
import type { AgentSessionSubscribeEvent } from '../../../src/shared/agent-session-wire'
import {
applyJournalRow,
createJournalReducerState,
renderJournalState
} from '../../../src/main/native-chat/agent-session-journal/journal-reducer'
import type { JournalRow } from '../../../src/main/native-chat/agent-session-journal/journal-row-schema'
import type { AgentSessionJournal } from '../../../src/main/native-chat/agent-session-journal/journal-store'
import {
readAgentSessionHistory,
readAgentSessionHydrationPage
} from '../../../src/main/native-chat/agent-session-wire/agent-session-history-page'

export type HostJournalFrames = {
/** The host's fold after `upTo`, read through its own history readers. */
journalAt: (upTo: number) => AgentSessionJournal
/** The lease fence once the host has written `upTo`. */
fenceAt: (upTo: number) => number
/** The snapshot a phone subscribing at `upTo` gets. */
snapshotAt: (upTo: number) => AgentSessionSubscribeEvent
/** What the host sends a subscriber at `cursor` and `fence` once the journal reaches `upTo`: the
* rows since as batches carrying the subscriber's fence, or, once the fence moved (a new child),
* a fresh snapshot, as the attach that moved it sends every subscriber. */
framesTo: (
subscriber: { cursor: AgentJournalCursor; fence: number },
upTo: number
) => AgentSessionSubscribeEvent[]
}

export function hostJournalFrames(
sessionId: string,
epoch: string,
rows: readonly JournalRow[]
): HostJournalFrames {
// One fold, read at every row: each row's snapshot and the aliases its readers resolve with.
const state = createJournalReducerState(sessionId, epoch)
const snapshots: AgentJournalSnapshot[] = []
const aliases: ReadonlyMap<string, string>[] = []
const fences: number[] = []
for (const row of rows) {
applyJournalRow(state, row)
// A copy: the fold revises its submissions in place.
snapshots.push(structuredClone(renderJournalState(state)))
aliases.push(new Map(state.aliases))
fences.push(Math.max(row.fence, fences.at(-1) ?? 0))
}
const journalAt = (upTo: number): AgentSessionJournal => {
const snapshot = snapshots[upTo - 1]!
const journal = {
isReadOnly: false,
snapshot: () => snapshot,
cursor: () => snapshot.cursor,
// Without a body the store's own resolution reads only the aliases.
canonicalItemId: (itemId: string) => aliases[upTo - 1]!.get(itemId) ?? itemId,
readSince: (cursor: AgentJournalCursor, limit?: number) => ({
ok: true as const,
rows: rows.slice(cursor.sequence, upTo).slice(0, limit),
cursor: snapshot.cursor
})
}
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the history readers call only the members above.
return journal as unknown as AgentSessionJournal
}
const fenceAt = (upTo: number): number => fences[upTo - 1]!
const snapshotAt = (upTo: number): AgentSessionSubscribeEvent => {
const fenceThen = fenceAt(upTo)
const page = readAgentSessionHydrationPage(journalAt(upTo), fenceThen)
return { type: 'snapshot', sessionId: sessionId, page, fence: fenceThen, hostNow: 0 }
}
const framesTo: HostJournalFrames['framesTo'] = (subscriber, upTo) => {
if (fenceAt(upTo) !== subscriber.fence) {
return [snapshotAt(upTo)]
}
const journal = journalAt(upTo)
const frames: AgentSessionSubscribeEvent[] = []
let cursor = subscriber.cursor
for (;;) {
const result = readAgentSessionHistory(journal, {
sessionId: sessionId,
direction: 'after',
cursor,
limit: 200
})
if (!result.ok) {
throw new Error(`the host reset the stream: ${result.reset}`)
}
const { page } = result
if (page.window.nextCursor.sequence <= cursor.sequence) {
return frames
}
frames.push({
type: 'batch',
sessionId: sessionId,
batch: {
cursor: page.window.nextCursor,
items: page.items,
removedItemIds: page.removedItemIds,
submissions: page.submissions
},
fence: subscriber.fence,
hostNow: 0
})
cursor = page.window.nextCursor
if (!page.hasNewer) {
return frames
}
}
}
return { journalAt, fenceAt, snapshotAt, framesTo }
}
Loading
Loading