imccyu
ed8431cdd0
fix: projection error
2026-08-06 19:36:15 +08:00
imccyu
f9f72e2f09
fix(ui): preserve Hero tree when selecting a Workspace
2026-08-06 18:01:11 +08:00
imccyu
b0d1d9445e
Merge remote-tracking branch 'origin/master' into mergebot/pr1667
...
# Conflicts:
# apps/web/tests/snapshots/queue-actions/preserved.expected.md
# docs/cordis-catalog/services.md
# docs/core-data-structures/session.i18n.yaml
# packages/client/runtime/src/client/session-history/history-fold.ts
# packages/client/ui-conversation/README.i18n.yaml
# packages/core/session/src/index.ts
2026-08-05 22:56:57 +08:00
_Kerman
488b8df547
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.i18n.yaml
# docs/architecture.i18n.yaml
# docs/architecture.md
# docs/architecture.zh.md
# docs/cookbook/extension-cookbook.i18n.yaml
# docs/cookbook/extension-cookbook.md
# docs/cookbook/extension-cookbook.zh.md
# docs/core-data-structures/llm-streaming.i18n.yaml
# docs/core-data-structures/session.i18n.yaml
# docs/defensive-patterns.i18n.yaml
# packages/acp/acp/README.i18n.yaml
# packages/client/runtime/README.i18n.yaml
# packages/client/ui-conversation/README.i18n.yaml
# packages/client/ui-goal/README.i18n.yaml
# packages/compact/compact-basic/README.i18n.yaml
# packages/context/README.i18n.yaml
# packages/context/README.md
# packages/context/README.zh.md
# packages/context/session-reference/README.i18n.yaml
# packages/context/session-reference/README.md
# packages/context/session-reference/README.zh.md
# packages/context/tmux-context/README.i18n.yaml
# packages/core/session/README.i18n.yaml
# packages/core/session/README.md
# packages/core/session/README.zh.md
# packages/goal/command-goal/README.i18n.yaml
# packages/goal/goal-session/README.i18n.yaml
# packages/goal/goal-session/README.zh.md
# packages/guard/README.i18n.yaml
# packages/guard/README.md
# packages/guard/README.zh.md
# packages/guard/repeat-tool-guard/README.i18n.yaml
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/README.md
# packages/host/apiproxy/README.zh.md
# packages/plan/plan-mode/README.i18n.yaml
# packages/sdk/sdk-client/README.i18n.yaml
# packages/sdk/sdk-client/README.md
# packages/sdk/sdk-client/README.zh.md
# packages/session-persistence/session-persistence/README.i18n.yaml
# packages/subagent/subagent-dsh-sdk/README.i18n.yaml
# python/sdk/README.i18n.yaml
2026-08-05 20:43:30 +08:00
creatixchu
452462a504
Merge remote-tracking branch 'origin/master' into worktree/composer-scrollbar-gutter
2026-08-05 18:20:36 +08:00
Yichen Jiang
038699bcb4
fix(web): let the context meter see a compaction
...
The composer ring, percentage, and `~used / capacity` header read
`contextPressure.pressureTokens`, which moves only when a request reports
usage. Compaction reports none — compact-basic summarizes through a direct
`ctx.llm.stream()` call and appends only its own `compact/*` records plus the
replacement `user/message` — so the meter was frozen across the one action
taken to change it. Driving a real `compactNow` through the agent loop:
BEFORE compact: ring=4% header=~4227/100000 rows=[18, 0, 4365]
AFTER compact: ring=4% header=~4227/100000 rows=[18, 0, 286]
The composition rows fell 93%; the ring did not move, and would not until an
entire further turn completed. The panel then contradicted itself by more than
an order of magnitude at exactly the moment a reader opens it.
`contextPressure` now also publishes `projectedTokens`: the provider sample
plus the heuristic repricing of everything the surface gained or lost since
that sample, clamped at zero, folded through the shared `surface-fold.ts`. The
sample is stamped before the same event joins the surface, so an
`assistant/message` anchors against the surface its own request carried. Only
the delta is estimated, so the figure stays provider-anchored — the estimator's
CJK and JSON-schema underpricing stays out of the occupancy number — while
reacting the moment content lands or a span is shadowed. Same run after:
BEFORE compact: ring=4% header=~4323/100000 (pressure=4227, projected=4323)
AFTER compact: ring=0% header=~ 244/100000 (pressure=4227, projected= 244)
`contextOccupancy` prefers the projected figure and falls back to the bare
sample, so a projection restored from a pre-field checkpoint degrades to the
old behavior rather than disappearing. `stateVersion` moves to 3.
2026-08-05 17:00:48 +08:00
creatixchu
1ed62688ab
Merge remote-tracking branch 'origin/master' into worktree/composer-scrollbar-gutter
...
# Conflicts:
# packages/client/ui-conversation/README.i18n.yaml
2026-08-05 15:36:06 +08:00
_Kerman
02efe3ccea
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.zh.md
# .agents/notes/implemented/architecture/2026-06-11-event-sourced-sessions.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-11-microkernel-event-taxonomy.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-11-microkernel-event-taxonomy.zh.md
# .agents/notes/implemented/architecture/2026-06-18-agent-lifecycle-and-ownership-seams.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-18-session-surface.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.zh.md
# .agents/notes/implemented/architecture/2026-06-30-event-domain-semantics.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-30-event-domain-semantics.zh.md
# .agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.zh.md
# .agents/notes/implemented/architecture/2026-07-10-after-call-compaction-pressure-and-overflow-recovery.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-10-after-call-compaction-pressure-and-overflow-recovery.zh.md
# .agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.zh.md
# .agents/notes/implemented/architecture/2026-07-14-provider-routed-llm-adapters.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-15-replay-token-meter-service.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-16-explicit-turn-cancellation.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-22-unified-send-and-coalesced-user-messages.zh.md
# .agents/notes/implemented/architecture/2026-07-24-separate-context-injection-from-turn-execution.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-24-separate-context-injection-from-turn-execution.zh.md
# .agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.zh.md
# .agents/notes/implemented/architecture/2026-07-28-identified-immutable-message-values.i18n.yaml
# .agents/notes/implemented/bug-fix/2026-07-21-semantic-session-checkpoints.i18n.yaml
# .agents/notes/implemented/bug-fix/2026-07-21-semantic-session-checkpoints.zh.md
# .agents/notes/implemented/feature/2026-06-18-compaction-capability-seam.i18n.yaml
# .agents/notes/implemented/feature/2026-06-18-compaction-capability-seam.zh.md
# .agents/notes/implemented/feature/2026-06-24-workspace-context.i18n.yaml
# .agents/notes/implemented/feature/2026-06-24-workspace-context.zh.md
# .agents/notes/implemented/feature/2026-06-30-hook-bridges.i18n.yaml
# .agents/notes/implemented/feature/2026-06-30-hook-protocol-lib.i18n.yaml
# .agents/notes/implemented/feature/2026-06-30-hook-protocol-lib.zh.md
# .agents/notes/implemented/feature/2026-06-30-interception-seams.i18n.yaml
# .agents/notes/implemented/feature/2026-06-30-interception-seams.zh.md
# .agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml
# .agents/notes/implemented/feature/2026-07-06-sandbox.zh.md
# .agents/notes/implemented/feature/2026-07-16-durable-per-step-time-context.i18n.yaml
# .agents/notes/implemented/feature/2026-07-16-durable-per-step-time-context.zh.md
# .agents/notes/implemented/feature/2026-07-16-harness-level-loop.i18n.yaml
# .agents/notes/implemented/feature/2026-07-16-harness-level-loop.zh.md
# .agents/notes/implemented/feature/2026-07-19-human-goal-command.i18n.yaml
# .agents/notes/implemented/feature/2026-07-19-model-facing-goal-tools.i18n.yaml
# .agents/notes/implemented/feature/2026-07-19-persisted-same-session-goal-domain.i18n.yaml
# .agents/notes/implemented/feature/2026-07-19-persisted-same-session-goal-domain.zh.md
# .agents/notes/implemented/feature/2026-07-19-plugin-command-registration.i18n.yaml
# .agents/notes/implemented/feature/2026-07-19-same-session-goal-round-driver.i18n.yaml
# .agents/notes/implemented/feature/2026-07-19-same-session-goal-round-driver.zh.md
# .agents/notes/implemented/feature/2026-07-21-cross-session-references.i18n.yaml
# .agents/notes/implemented/feature/2026-07-21-cross-session-references.zh.md
# .agents/notes/implemented/feature/2026-07-27-tmux-location-context.i18n.yaml
# .agents/notes/implemented/simplification/2026-06-20-public-agent-stop-surface.i18n.yaml
# .agents/notes/implemented/simplification/2026-07-17-one-send-one-turn.i18n.yaml
# .agents/notes/implemented/simplification/2026-07-17-one-send-one-turn.zh.md
# .agents/notes/implemented/simplification/2026-07-20-unwrap-injected-content-envelopes.i18n.yaml
# .agents/notes/implemented/simplification/2026-07-22-plan-specific-collaboration-state.i18n.yaml
# .agents/notes/implemented/simplification/2026-07-22-plan-specific-collaboration-state.zh.md
# .agents/notes/implemented/simplification/2026-07-24-agent-loop-observable-state-machine.i18n.yaml
# .agents/notes/implemented/simplification/2026-07-27-request-error-retry-action.i18n.yaml
# docs/core-data-structures/compaction.i18n.yaml
# docs/core-data-structures/goal.i18n.yaml
# docs/core-data-structures/goal.zh.md
# docs/core-data-structures/llm-streaming.i18n.yaml
# docs/core-data-structures/session.i18n.yaml
# docs/core-data-structures/session.zh.md
# docs/core-data-structures/skills.i18n.yaml
# docs/core-data-structures/skills.zh.md
# docs/core-data-structures/system-prompt.i18n.yaml
# docs/defensive-patterns.i18n.yaml
# docs/defensive-patterns.zh.md
# docs/user/develop/framework/events.i18n.yaml
# docs/user/develop/framework/events.zh.md
# packages/acp/acp/README.i18n.yaml
# packages/client/ui-goal/README.i18n.yaml
# packages/compact/compact-basic/README.i18n.yaml
# packages/compact/compact/README.i18n.yaml
# packages/context/time-context/README.i18n.yaml
# packages/context/tmux-context/README.i18n.yaml
# packages/core/agent-loop/README.i18n.yaml
# packages/core/agent-loop/README.zh.md
# packages/core/agent/README.i18n.yaml
# packages/core/agent/README.zh.md
# packages/core/session/README.i18n.yaml
# packages/core/session/README.zh.md
# packages/core/system-prompt/README.i18n.yaml
# packages/core/system-prompt/README.zh.md
# packages/examples/cli-demo/README.i18n.yaml
# packages/goal/command-goal/README.i18n.yaml
# packages/goal/goal-session/README.i18n.yaml
# packages/goal/goal/README.i18n.yaml
# packages/goal/tool-goal/README.i18n.yaml
# packages/goal/tool-goal/README.zh.md
# packages/guard/README.i18n.yaml
# packages/guard/README.zh.md
# packages/guard/repeat-tool-guard/README.i18n.yaml
# packages/hooks/hooks-claude/README.i18n.yaml
# packages/hooks/hooks-codex/README.i18n.yaml
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/README.zh.md
# packages/llm/llm/README.i18n.yaml
# packages/plan/plan-mode/README.i18n.yaml
# packages/plan/plan-mode/README.zh.md
# packages/sdk/sdk-client/README.i18n.yaml
# packages/sdk/sdk-client/README.zh.md
# packages/sdk/sdk-protocol/README.i18n.yaml
# packages/session-persistence/session-persistence/README.i18n.yaml
# packages/session-persistence/session-persistence/README.zh.md
# packages/skill/tool-skill/README.i18n.yaml
# packages/subagent/subagent-dsh-sdk/README.i18n.yaml
# packages/subagent/subagent-inprocess/README.i18n.yaml
# packages/subagent/subagent-inprocess/README.zh.md
# packages/ui/jsonrpc/README.i18n.yaml
2026-08-05 13:09:53 +08:00
_Kerman
63ba836bce
fix(client): address CI and review findings on blank-session reuse
...
- docs: fix cross-class note links (../feature/...), mirror the membership
reuse criterion in README.zh.md and the connectWorkspace architecture
note (EN/ZH/sidecars re-recorded)
- test(client): stray + member blank at the same path — the scan skips the
stray and reuses the member
- test(web): re-registration after delete now mints a fresh blank session
(the old cwd-only reuse is gone), so the account is no longer empty;
assert the retained seeded session is still not re-adopted
2026-08-05 12:21:09 +08:00
_Kerman
add1674ac4
fix(client): only reuse workspace-member blank sessions for New Session
...
The blank-session reuse scan in connectWorkspace matched on cwd alone, so a
live blank session the CLI/TUI birthed at the host cwd (never accounted to
any workspace) was hijacked when + was clicked on a workspace registered at
that path, opening a session the sidebar shows under Ungrouped instead of
the clicked workspace. Reuse now also requires membership in the workspace's
sessionIds (the host's own membership rule); cwd-only matches fall through
to session.create({workspaceId}).
Fixes #1647
2026-08-05 12:20:50 +08:00
xjt
7bd111b2af
Merge origin/master into xjt/proofreading-active-docs-2-apply
2026-08-05 10:57:53 +08:00
xjt
edb3e82c35
docs(i18n): address proofreading review findings
2026-08-04 18:42:13 +08:00
xjt
2db712eec7
docs(i18n): proofread active Chinese documentation
2026-08-04 17:36:14 +08:00
_Kerman
09e909b96b
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# apps/web/tests/snapshots/queue-actions/preserved.expected.md
# packages/client/runtime/src/client/sessions/session.ts
2026-08-04 16:56:44 +08:00
creatixchu
70ec51b1ba
Merge remote-tracking branch 'origin/master' into worktree/composer-scrollbar-gutter
2026-08-04 16:42:45 +08:00
creatixchu
1098dc9836
docs(web): cite the surviving composer scrollport note for the WebKit gutter measurement
2026-08-04 16:21:55 +08:00
creatixchu
e49f678614
Merge remote-tracking branch 'origin/master' into worktree/composer-scrollbar-gutter
2026-08-04 16:20:33 +08:00
creatixchu
29646074cd
Merge origin/master into worktree/sidebar-scrollbar-reveal
2026-08-04 16:19:46 +08:00
creatixchu
d907c8475f
fix(web): keep the input card in place across view tabs
...
The composer seat is one node laid out against two different edges: in Chat it
is a sticky child of the column's scroller and rides its content box, which a
space-consuming scrollbar shortens, while a view declaring a composer overlay
gets an absolutely positioned seat against the padding box, which no bar
reduces. With the transcript scrolling the two tabs disagreed by the bar's
width, so the centred input card moved 4px sideways on every switch — and the
same 4px inside Chat when a growing transcript began to scroll.
The column now reserves its scrollbar gutter unconditionally and states the
overlay branch a scroll container on the same axes, so both states measure
against the same width.
2026-08-04 16:13:52 +08:00
_Kerman
f5c599d0ca
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
2026-08-04 15:49:22 +08:00
_Kerman
d5527da905
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# .agents/notes/implemented/feature/2026-07-28-web-terminal-card.i18n.yaml
# .agents/notes/implemented/feature/2026-07-28-web-terminal-card.md
# .agents/notes/implemented/feature/2026-07-28-web-terminal-card.zh.md
# .agents/notes/implemented/feature/2026-07-30-search-render-card.i18n.yaml
# .agents/notes/implemented/feature/2026-07-30-search-render-card.md
# .agents/notes/implemented/feature/2026-07-30-search-render-card.zh.md
# .agents/notes/implemented/feature/2026-07-30-web-read-card.i18n.yaml
# .agents/notes/implemented/feature/2026-07-30-web-read-card.md
# .agents/notes/implemented/feature/2026-07-30-web-read-card.zh.md
# .agents/notes/implemented/feature/2026-07-30-web-result-card.i18n.yaml
# .agents/notes/implemented/feature/2026-07-30-web-result-card.md
# .agents/notes/implemented/feature/2026-07-30-web-result-card.zh.md
2026-08-04 15:49:07 +08:00
creatixchu
86514f2921
Merge origin/master into worktree/sidebar-scrollbar-reveal
...
#1381 landed the bar's horizontal position; this branch decides when it is
drawn. The e2e keeps both scenarios and the golden carries both palettes'
pointer-state readings alongside the new edge-offset lines.
2026-08-04 15:46:53 +08:00
creatixchu
398ab58a69
Merge remote-tracking branch 'origin/master' into worktree/composer-caret-binding
2026-08-04 15:40:27 +08:00
fz
193d918856
Merge remote-tracking branch 'origin/master' into codex/fix-headless-sigint
...
# Conflicts:
# apps/cli/README.i18n.yaml
# apps/cli/README.md
# apps/cli/README.zh.md
# apps/cli/config/base.cordis.yml
2026-08-04 15:18:48 +08:00
creatixchu
ef2fbdfc19
fix(web): preserve focus when restoring drafts
2026-08-04 15:12:11 +08:00
creatixchu
a030397aca
feat(web): draw the sidebar's scrollbar only under the pointer
...
The session list overflows after a handful of sessions, and its scrollbar
was drawn permanently in a column that is at rest most of the time.
SidebarRoot now tracks the pointer over the whole column and rebinds
ui-theme's scrollbar indirection pair to `transparent` while it is
outside, keeping the thumb for 2s after the pointer leaves so it does not
blink out on the way past. Rebinding colour leaves the list's
`scrollbar-gutter: stable` reservation in force, so revealing the bar
moves no row.
ui-theme's gate now states the widened contract: a rebind targets an -l2
token pair or `transparent`, and nothing else.
2026-08-04 15:05:32 +08:00
_Kerman
9b50311fd1
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
2026-08-04 14:46:18 +08:00
creatixchu
4e024da35a
Merge origin/master into worktree/composer-caret-binding
2026-08-04 14:44:09 +08:00
kingwl
9b91e5312c
fix(web): narrow chat scroll provenance
2026-08-04 14:23:34 +08:00
kingwl
8de33e42f7
fix(web): preserve chat scroll ownership
2026-08-04 14:23:34 +08:00
kingwl
6514a59d5d
fix(ui-conversation): preserve semantic chat scroll position
2026-08-04 14:23:34 +08:00
_Kerman
5356bd972d
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# .agents/notes/archived/feature/2026-07-28-dsh-guided-skill-session-commands.i18n.yaml
# .agents/notes/archived/manifest.json
# .agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.i18n.yaml
# .agents/notes/implemented/feature/2026-07-05-skill-system.i18n.yaml
# apps/cli/tests/snapshots/multi-turn-conversation/terminal.expected.txt
# apps/cli/tests/snapshots/queued-manual-compact/terminal.expected.txt
# apps/cli/tests/tui-keyless-smoke.e2e.ts
# apps/cli/tests/tui.snapshot.ts
# docs/architecture.i18n.yaml
# docs/architecture.md
# docs/architecture.zh.md
# docs/cookbook/extension-cookbook.i18n.yaml
# docs/event-producer-consumer.md
# packages/ui/tui/README.i18n.yaml
# packages/ui/tui/README.md
# packages/ui/tui/README.zh.md
# packages/ui/tui/src/index.ts
# packages/ui/tui/tests/harness.ts
# packages/ui/tui/tests/session-reference.snapshot.ts
# packages/ui/tui/tests/snapshots/conversation-streaming.expected.txt
# packages/ui/tui/tests/snapshots/details-command.expected.txt
# packages/ui/tui/tests/snapshots/details-selector.expected.txt
# packages/ui/tui/tests/snapshots/disposed-terminal.expected.txt
# packages/ui/tui/tests/snapshots/errors-and-help.expected.txt
# packages/ui/tui/tests/snapshots/status-diagnostics-narrow.expected.txt
# packages/ui/tui/tests/snapshots/status-diagnostics.expected.txt
# packages/ui/tui/tests/snapshots/surface-after-compaction-narrow.expected.txt
# packages/ui/tui/tests/snapshots/surface-after-compaction-wide.expected.txt
# packages/ui/tui/tests/snapshots/surface-before-compaction.expected.txt
# packages/ui/tui/tests/snapshots/surface-replayed-compaction.expected.txt
# packages/ui/tui/tests/snapshots/todo-plan-cleared.expected.txt
# packages/ui/tui/tests/snapshots/tool-cards-hidden-folded.expected.txt
# packages/ui/tui/tests/snapshots/untrusted-controls.expected.txt
# packages/ui/tui/tests/tui.snapshot.ts
# packages/ui/tui/tests/tui.spec.ts
2026-08-04 14:19:23 +08:00
_Kerman
e874910a76
test(session): align turn-end contract artifacts
2026-08-04 14:09:52 +08:00
Turtle
10bb9cbf4a
cleanup: remove TUI package and legacy dsh entrypoints
2026-08-04 13:20:28 +08:00
_Kerman
2a9ebfcac2
fix(session): load pre-react-loop persisted sessions
2026-08-04 11:25:31 +08:00
fz
f0e5a39d19
Merge remote-tracking branch 'origin/master' into codex/fix-headless-sigint
2026-08-04 11:07:36 +08:00
_Kerman
98947afece
chore(docs): trim translation sidecar churn
2026-08-04 11:04:03 +08:00
_Kerman
eaa497d735
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-07-19-package-owned-invariant-service.i18n.yaml
# examples/acp-agent/tests/snapshots/fs-glob-sampling/session.jsonl
# packages/ui/tui/README.i18n.yaml
# packages/ui/tui/src/components/dialogs.ts
# packages/ui/tui/tests/tui.spec.ts
2026-08-04 10:52:45 +08:00
Turtle
5329bef04d
perf(tui): incremental step timing and card render caches for long sessions
...
Resuming a long session (196k events, 2.2k steps, 1.8k tool cards) took
~12s to render and ~800ms to echo one keystroke:
- Every step's timing footer called stepTimingAt, which replayed the whole
event log per footer - O(steps x events) on the initial render.
- pi-tui re-renders every component each frame and relies on per-component
line caches, but ToolCardComponent/ContextCardComponent built throwaway
Text/Markdown instances inside render(width), re-wrapping every settled
card's output on every keystroke.
Replace the per-footer replay with one shared StepTimingTracker per chat
mount (single O(events) cursor over the append-only log), and cache card
rows by width via CardLineCache, dropped by every state mutator and
invalidate().
Measured (tmux 200x50, 196k-event session): resume prompt-ready ~12s -> ~7.6s;
per-keystroke echo ~800ms median -> ~11ms.
2026-08-04 00:37:10 +08:00
fz
003d297442
Merge remote-tracking branch 'origin/master' into codex/fix-headless-sigint
2026-08-03 22:21:46 +08:00
fz
ef23b88ad4
fix(cli): bound telemetry shutdown on signals
...
Refs #1356
2026-08-03 22:08:47 +08:00
Turtle
25d8bfac31
Merge remote-tracking branch 'origin/master' into perf/tui-resume-scan
...
# Conflicts:
# packages/ui/tui/README.i18n.yaml
2026-08-03 21:16:51 +08:00
Turtle
7a26214a81
feat(tui): resolve resume titles through the projection cache
...
session-title already registers a title projection unit; /resume now
reads it instead of scanning logs: live rows from the registry
snapshot, persisted rows from the durable checkpoint row
(cachedSnapshot, zero I/O), and only rows without a usable checkpoint
pay a coldSnapshot — checkpoint plus readFrom tail, written back so the
next scan is metadata-only. Cold reads are bounded by the new
resumeScanConcurrency config; compositions without the cache fall back
to the bounded readTitleSnapshots batch. The TUI overlay mounts the
projection registry, storage, and projection-cache rows over the same
storages root the web surface uses, so checkpoints serve both.
2026-08-03 21:13:52 +08:00
_Kerman
8ee811e8d9
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# packages/client/ui-conversation/README.i18n.yaml
# packages/host/apiproxy/README.i18n.yaml
# packages/host/apiproxy/README.md
# packages/host/apiproxy/README.zh.md
# packages/ui/tui/README.i18n.yaml
2026-08-03 18:39:58 +08:00
_Kerman
ce60304648
chore(ci): regenerate stale catalogs and re-record translation pairs
...
- gen-cordis-catalog / gen-persistence-catalog / gen-doc-graphs after the
error-reason and steering/message changes (line anchors and event
producer/consumer graph drifted).
- verify-translation-pairing --write --all: every bilingual pair touched
by the PR (agent notes, session/core docs, READMEs) plus the merge.
- queue-actions preserved golden re-recorded against the rebuilt client
(branch disabled on non-completed-turn tails is back in effect).
2026-08-03 18:06:14 +08:00
Turtle
d764cc800a
Merge remote-tracking branch 'origin/master' into perf/tui-resume-scan
...
# Conflicts:
# packages/ui/tui/README.i18n.yaml
2026-08-03 17:29:18 +08:00
_Kerman
6ae82e390e
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# packages/ui/tui/README.i18n.yaml
2026-08-03 17:22:27 +08:00
imccyu
6b79907ffd
Merge remote-tracking branch 'origin/master' into worktree/fix-multi-select-custom-answer
2026-08-03 17:19:53 +08:00
_Kerman
734c3d1f65
Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
...
# Conflicts:
# apps/cli/tests/snapshots/queued-manual-compact/terminal.expected.txt
# apps/web/tests/snapshots/queue-actions/preserved.expected.md
# packages/client/runtime/README.i18n.yaml
# packages/client/runtime/src/client/sessions/session.ts
# packages/client/ui-conversation/README.md
# packages/client/ui-conversation/README.zh.md
# packages/ui/tui/README.i18n.yaml
# packages/ui/tui/tests/snapshots/untrusted-controls.expected.txt
2026-08-03 17:15:34 +08:00
Turtle
f128e126d7
Merge remote-tracking branch 'origin/master' into perf/tui-resume-scan
...
# Conflicts:
# packages/ui/tui/README.i18n.yaml
# packages/ui/tui/src/components/dialogs.ts
2026-08-03 17:06:28 +08:00