Releases
v1.38.0
Compare
Sorry, something went wrong.
No results found
yaleh
released this
29 Sep 16:15
1.38.0 (2026-09-29)
New Features
add Playwright MCP directory to .gitignore (5c11f44 )
asr: land the inline-only multimodal adapter as the second recogniser (AC-132) (9a36a1c )
chat: a resident status bar, its marks, and the turns nobody typed (c10b834 )
chat: decide the composer footer's tier from the box's own width (cb15da7 )
chat: disclose the resident-mode tradeoff before it is enabled (e51569b )
chat: draw the running turn inline below md (b24128b )
chat: identifier fidelity metric + voice fill-back reading (AC-114) (a56e1a3 )
chat: prototype a touch-scoped send key for the composer (bb787bc )
chat: render workspace image paths in markdown (#1307 ) (4b98d2e )
chat: route a busy resident session's send to the process instead of the local queue (df558ec )
chat: say a compaction out loud, as one row with its summary folded in (#1295 ) (d450ed8 ), closes #1292
chat: scope the composer send key to the device's input capabilities (7d842d4 )
chat: 权限模式随发送落库,客户端不再持久化 (5b61e03 )
claude-resident: intercept the three human-facing permission entries (4db6cae )
claude-resident: reconcile held-work reasons from the Stop hook and the stream (e64c0e3 )
claude-resident: refuse a bypass launch when user settings enable Remote Control (b5f2575 )
claude: busy input joins the CLI's own queue and stays withdrawable until it starts (AC-163) (35e9401 )
claude: resident host driver — one CLI across turns (AC-161) (8436c6f )
cost: show the session's Claude-generated ai-title in the /cost modal (ad95447 )
debug-agent: an output engine that writes the transcript it forwards (c05f4fd )
debug-agent: drive resident host states, turn origins and the run seam (003c009 )
debug-agent: gate the debug agent so "off" means structurally absent (4b14dd8 )
debug-agent: hold resident debug sessions on a multiplexed host (ecca928 )
debug-agent: seed a scenario's lifecycle mode and keep the host writer across turns (5d9d1a1 )
e2e: Playwright toolchain + launch-profiles real-browser spec; profile create/edit UI with baseUrl/auth/contextWindow (d882915 )
goals: 激活 GOAL-007,并把激活记录改成实测的 (a204fff )
goals: 立 GOAL-007 调试 Agent + 六条红先行判据(据 ADR-003 评审通过) (acc1430 )
i18n: add Indonesian language support (#1328 ) (b8e572b )
launch-profiles: Profiles settings tab + composer profile select sends launchProfileId (AC-010) (803c71d )
models: explain every env row kind, including unset (fe19d09 )
plugins: recommend GLM Usage plugin (#1323 ) (f05ba1f )
projects: per-project session name filter (backend) (507d405 )
providers: cap each Claude session in its own systemd scope (4e25271 )
providers: give a resident process a stable SendMessage address (11b3370 )
providers: make a resident process's unattended turn a run (3fd1ecb )
providers: pick the session watcher's mechanism per root, and back off when polling (a07e7ae )
quay: scripts/test.sh emits per-file results for the quay tests page (e776459 )
resident-experiments: 控制协议清单 E9 取数并定稿 proposal (7d37fd6 )
resident-smoke: land AC-170 API-面真模型冒烟脚本、护栏判据与人证记录 (e7ab6a4 )
resident: collapse the status bar's per-kind lease chips into one count (917916c )
resident: move the enable switch under the model card and retire the consent gate (6814265 )
scripts: add suite-concurrency-check.sh — AC-103 的并发判据读数 (64e46f0 )
scripts: gate scripts/ with strict TS and run its tests (e320cd0 )
scripts: restart the :3001 server unit on failure and cap its V8 heap (66755b7 )
scripts: 新增 suite-scope-check 守卫(活跃任务的自测作用域),并在 test.sh 前置调用 (ce34887 )
scripts: 给 test.sh 加 max-runtime / silence 两条活性看门狗,阈值由实测推出 (0fded85 )
server: resident caps from config, and an OOM fact a host can read (5cbe85d )
session-hosts: bind sessions 1:N, refuse a second binding, supersede before start (5ea8711 )
session-hosts: drive Claude per-run hosts from the session-host layer (05db7d4 )
session-hosts: drive host lifecycle from leases, with two policies (b071ac9 )
session-hosts: lifecycle-mode preference write path and host start/close API (30ce434 )
session-hosts: make the resident idle ceiling configurable (AC-181) (4a3cf0b )
session-hosts: report dropped resident sessions and sweep restart residue (0e14412 )
session-hosts: serve the host listing over GET /api/session-hosts (ac0feb8 )
session-title: show the live session name on every display surface (6fd914b )
sessions: track where a session name came from and honour ai-title (9a80839 )
settings: close settings modal with escape and backdrop click (#1164 ) (3ed3be5 )
sidebar: a draggable splitter for the sidebar width (293eb56 )
sidebar: group forked sessions by lineage and mark branches (ed1df4d )
sidebar: pin expanded project header while sessions scroll (#1312 ) (b028e0d )
sidebar: project session-name filter UI (hidden bar, rules editor, keepSessionIds, filtered mark) (f24c041 )
sidebar: resizable sidebar width (prototype, verified in a browser) (6827804 )
sidebar: split running view into turns in flight and held-open residents (8357e62 )
static-assets: gzip/brotli the dist bundle and SPA entry (8437e54 )
voice: an audio-file entry into the transcription chain, behind a debug switch (57e044f )
voice: answer health from the user's effective config, refuse unknown provider ids (187d98d )
voice: dispatch the proxy path to the selected provider's adapter (fd910f7 )
voice: isolate a capture failure from the transcription (AC-147) (f35f2a9 )
voice: let the recogniser's declared pause capability decide 裁不裁 (488218c )
voice: pure DSP silence trim module for voice input (c537d60 )
voice: register the shipped recogniser as the first adapter (9c80995 )
voice: store the per-user voice settings on the server (c16be88 )
workspace: close the Shell tab for resident sessions (387d684 )
Bug Fixes
allow zrok subdomains in dev, guard SW cache against transient failures (eafd765 )
asr: align the multimodal adapter with the real Gemini wire (9a81fb5 )
asr: 补 AC-132/AC-133 判据的薄委托入口(capability / mime-allowlist) (3c9de66 )
chat: a small gesture owns the transcript, by direction not distance (90393b9 )
chat: collapse a persisted echo that meets the row still streaming it (6a5901a )
chat: detach the transcript follow on an up scroll key, at the key (185b886 )
chat: Enter that confirms an IME candidate must not send on Safari (#1332 ) (fd424f3 )
chat: fold a background session's stream deltas into one row (411d903 )
chat: hide the resident switch once a session is already resident (f8382b7 )
chat: keep the resident status bar out of the transcript's scroll box (e0a601b )
chat: make in-chat file references land where they point (#1256 ) (580be52 )
chat: portal the resident popover out of the transcript clip (AC-177) (7b0e553 )
claude-resident: name the websocket leaf so the root stops closing an eval cycle (8b6e7d9 )
claude: hold the CLI open for backgrounded agents and workflows (#1291 ) (208c715 ), closes #1113 #1268
claude: identify a resident round by its conversation, not its model name (6a4957b )
claude: show session titles instead of prompts in the sidebar (#1258 ) (7704a90 )
codex: restore user prompts from canonical typed rollout rows (#1277 ) (5ce8ed4 )
codex: support image-only prompts (#1346 ) (a6d50c8 )
composer: 桌面档位允许工具组自身换行,768 双回放不再横向溢出 (74edd76 )
composer: 触摸设备不再显示发送键提示行,任何宽度都不显示 (c954770 )
criteria: 两条 ASR 判据重指到 registry 架构,解开 GOAL-008 的达成死锁 (beba8cc )
debug-agent: scope the AC10 providers/list assertion to its own branch (b5d6c66 )
derive session last activity from transcript content, not file mtime (e7534bc )
e2e: bound the criterion run itself and make a crossed ceiling name its stage (5fb9888 )
e2e: drop the dead node:os imports that red the repo lint stage (b429a07 )
e2e: give each run its own scratch root, prepared under a budget (092857e )
e2e: reclaim the run directories an earlier run left behind (18c69a1 )
e2e: scope the session-filter editor entry to the project under test (25dac48 )
e2e: 每个 run 用自己的 Vite dep cache,切断共享 node_modules/.vite 的重预构建作废 (a7b4d41 )
goals: AC-103 expect 要求冷路径在 60000ms 硬上限内判绿 (1d9ec1d )
goals: 修 AC-126 frontmatter 的 ASCII 冒号致 YAML 解析失败 (e17fc0d )
i18n: merge duplicate top-level resident keys in en/zh-CN chat.json (0f42f2b )
i18n: 补齐 7 个 locale 缺失的 input.queue.*(排队消息 6 键) (7418671 )
launch-profiles: import provider and websocket helpers through module barrels (fa6e459 )
launch-profiles: import websocket helpers through the module barrel (37ea91c )
launch-profiles: import websocket helpers through the module barrel (461ed77 )
launch-profiles: untrack accidentally committed node_modules symlink (fa17a8f )
models: gateway template merges rows and is a reversible aria-pressed toggle (4fd2917 )
opencode: compose the provider prefix into session model ids (#1333 ) (544baff )
opencode: hide child sessions (#1344 ) (ed3f0bf )
project-workspace: keep the selected session's title in step with session_upserted (6e5b6da )
projects: route session-filter test imports through module barrels (1266d45 )
providers: export createProviderTokenUsageService via the module barrel (59832bf )
providers: finish the address contract at the type boundary (84b60df )
providers: scope AC6's driver-in-delta assertion to its own branch (d320ac5 )
providers: strip ANSI escapes from OpenCode and Cursor stderr (#1303 ) (f362080 )
quay: point worker-default at the claude-fjdac gateway launcher (79b4f52 )
quay: test.sh handles --for-task/--allow-thin/--static-checks-doc from the scoped gate (b167e28 )
resident-experiments: 补齐 resident-experiment.mjs 的 6 处 tsc 错误 (94bff35 )
route Enter through the composer's single submit entry (75f1630 )
scripts: attribute every test.sh failure as infra or assert (3fe400c )
scripts: normalise the client assertion tally before testing it (be80f1e )
scripts: type scripts/resident-smoke.mjs(+test) so npm run typecheck is green again (a05471a )
server/providers: widen sessions-watcher-mode's poll-window slack under fleet load (b0073b9 )
server/tsconfig: exclude __criterion-falsify-* from the tsc program (7e6d074 )
server/tsconfig: exclude ./modules/voice/tmp from the tsc program (cfd66ce )
server: keep throwaway servers and host-wide tests off the operator's scopes (49c2047 )
sessions: keep the recent-sessions payload test in step with lineage (74f5fc1 )
settings: empty env rows are reported before a model save drops them (5dc4a34 )
shared/ui: close the late-arm window in ActionMenu's viewport dismissal (ac1cd4c )
sidebar-tests: stub useResidentProviders in the two capability-module mocks (9aa412f )
sidebar: arm ActionMenu viewport dismissal on the next frame (35cd475 )
sidebar: let Running collapse project groups (#1166 ) (7090a5d )
sidebar: route cross-module import through project-workspace barrel (cd48d11 )
suite: keep the per-file child logs when a run is red or aborted (45884ca )
test: cap the vitest client worker pool adaptively (e0ed491 )
tests: move the resetModules cold compile out of the case budget (73cecff )
tests: scope the timeout-margin criterion to its invariant, not the mechanism (9dba1f9 )
tests: size hookTimeout from the measurement, report it in the criterion (7b2d3f9 )
tests: 服务端阶段的并发改为上限夹取(上限 16,由实测坡度表推出) (71bedc3 )
transcript: attribute scroll intent to its input source, not to the offset's delta (16c1678 )
upstream electron build bug (5e73a49 )
voice-trim: let a harness import the shipping tree, not one named file (f53524d )
voice-trim: scope the uniqueness scan to the harness, not to one file (28daa7e )
voice: a provider with its own model field ignores the shared x-voice-stt-model header (87a2554 )
voice: AC7 enumerates the asr contract spec instead of running a second vitest (ed5da1f )
voice: dashscope-omni resolves an unset model to its own default; repair AC-137/138 entry order (406b0c9 )
voice: exempt quay's own runtime state from the AC-152 residue guard (ecab901 )
voice: isolate capture failures at the call site, not in the capture module (ee1b5fb )
voice: proxy-only 闸的兄弟判据输入改白名单内主机;host-bearers 收窄为出货源 (9161b88 )
voice: the trim asks the registry for 裁不裁, not a table of its own (0ae696c )
voice: 让 AC6 的红点名失败子命令、退出码与它自己说的那句话 (1fe9714 )
workspace: stop showing the resident Shell notice as a persistent banner (3b50a13 )
Performance
cap the transcript tail window at 512 KiB and widen by the delta (c4c843d )
Refactoring
launch-profiles: 拆除旧实体,AC-001 黄金基准移植到新入口 (b34a662 )
launch-profiles: 清数据库残留结构,并收拾 GOAL-001 记录 (3ff33d4 )
providers: keep the shared compile layer reachable without closing the eval cycle (a76f151 )
providers: relocate the shared launch-spec compile layer out of launch-profiles (1d76cac )
voice: name the direct path's transcript parse (a87ba53 )
voice: one implementation of the transcription wire protocol (9e7ee00 )
Documentation
add Gemini voice input proposal (a867913 )
add launch profile proposal (6c900ce )
adr-003: 现场验证记录拆成独立文件(评审裁决 E) (691c83f )
adr-003: 评审通过(附 A–E 裁决)落到 canonical checkout (dec53e4 )
adr: ADR-003 可控制的调试 Agent —— 不跑真 CLI 也能产生输出 (1e6df28 )
adr: 记入七条开放问题的裁定,并记下决策 9 的已执行 (62aea1b )
adr: 记入总判定「通过」,并保留两项不由通过消除的事项 (9f86bca )
adr: 语音识别 provider 缝的决策记录 第二版(评审修订) (483b2c5 )
adr: 语音识别 provider 缝的决策记录(ADR-004) (dc568d2 )
correct the scoped-gate reading — it starts and passes (a1fea4e )
experiments: a1 本地会话记录中口述目标与上下文竞争者的基础比例 (9ccb4aa )
experiments: a2 结果修正更正说明的排版 (4e04667 )
experiments: a2 结果写明超时次数与离线重算的音频依赖 (ca5291c )
experiments: a2 结果更正与现有 goal-010 的命名冲突 (d0c5f48 )
experiments: a2 结果未通过预注册规则,不进入 goal-010 (a73c5c0 )
experiments: a2 结果补上去掉 c1、c7 的敏感性检查读数 (9675753 )
experiments: a2 补充条件使用上下文的离线模拟,结论不变 (346c1a1 )
experiments: a2 语义核验,规则一致率 93.8%,结论更强 (1280271 )
experiments: a2 预注册判定规则与冻结的真实会话上下文 (5f4b7a9 )
experiments: 保存 qwen3.8-omni-flash 书面化实验的原始读数与脚本 (a298761 )
experiments: 扩展集 5 条 webm 音频入库并登记理由 (9f5910c )
experiments: 语音链路实验记录入库(实验协议 + 标点实验) (0faa2e0 )
goals: add exit-conditions section to GOAL-001 (e5117b7 )
mark launch profile proposal as partially superseded by ADR-002 (42809eb )
ops: measure the heap ceiling's channel boundary and record why the incident replay is unfaithful (cef20f4 )
proposal for pre-ASR silence trimming (GOAL-006), and split P2 in the old one (20a3a9c )
proposal for unified session lifecycle and Claude resident sessions (e88175c )
proposals: record the measured cross-session arrival shape (2600a9d )
proposals: 语音输入接入 DashScope Qwen3.8-Omni-Flash,口述直接产出书面化指令 (8207f6d )
proposal: use control-protocol events for turns, leases and busy input; isolate remote control (41bd6ab )
resident-experiments: 记录 E2/E3 基准的人工确认行(AC4) (4438319 )
resolve open questions in launch profile proposal (7da6f45 )
voice: proposal for actionable speech-recognition error messages (GOAL-011) (9fe6309 )
voice: proposal for server-side capture of speech-recognition attempts (GOAL-010) (51f5cb5 )
语音识别 provider 缝 proposal 第二版(与 ADR 第二版对齐) (566a445 )
语音识别 provider 缝 proposal(设计细节与实施顺序) (caa3b62 )
语音输入标识符修复与时间轴压缩 proposal (57b957f )
Maintenance
adr: 删除误建的 ADR-999 存根 (f47561d )
e2e: tighten the resident-ui-layout gate comment to one line (f1cf6d7 )
lint: ignore the voice criteria's transient scratch files (5eb18a9 )
ops: isolate tests and the :3001 server in their own cgroups (ade2dfb )
ops: put the quay fleet under one shared memory ceiling (8e49b82 )
quay: supply plugin/scripts/runner-static-gate.ts so fan-in can classify its delta (f7604c6 )
quay: track tasks/ and quay config; drop legacy tasks/ ignore (4aacbef )
scripts: make server-phase-concurrency-check.sh executable (scripts/*.sh 约定 100755) (362c9c0 )
scripts: retire suite-concurrency-check.sh with AC-103 (f974268 )
tasks: carry the ABI-written AC tick onto the task branch (30439b5 )
tasks: gap-e2e-data-dir-has-no-reclaimer 勾选入任务分支 (83a8132 )
tasks: record AC-169 satisfied via task_write (501c0f9 )
tasks: record the load-induced false red in the round's notes (fc476a6 )
tasks: space the Touches annotation so the scoped gate resolves the criterion (8e2d794 )
tasks: sync the ABI-written body into the worktree copy (d76b9f6 )
tasks: 立案 gap-launch-profiles-env-injection-closed-test(GOAL-001 AC-004 结构性缺口) (f9aff6d )
untrack accidentally committed node_modules symlink (1289220 )
CI/CD
release: fork release pipeline to yaleh — GitHub Release + Windows + local-server only (5abf677 )
Tests
chat-edit-send: await the turn instead of sleeping 30ms through it (54e83c2 )
chat: read the running turn's stop entries across the composer and the pane (8bc3226 )
claude-resident: criterion for the idle ceiling and its held work (624a536 )
claude-resident: narrow the cron deadline before stepping the clock (7deac21 )
claude-resident: print the tokens the criteria name (e44916e )
claude-resident: read loop liveness directly in the unread-subtype leg (1abc0c6 )
composer: 钉住触摸提示行省下的 20px,并记下改动前的对照读数 (90f696d )
debug-agent: cover the external-write path end to end (e22e6ad )
debug-agent: make the closed arm carry the root it must not use (f04e44b )
debug-agent: read the load event's readiness from the observer itself (e356215 )
debug-agent: the display-identity criterion AC-136 is judged by (325a89f )
debug-agent: the fixture-home isolation criterion AC-127 is judged by (c8bb1ed )
debug-agent: 短窗口试次并入臂内终态等待,收掉最重文件的叠死等 (a78b6db )
e2e: anchor post-onboarding waits on the app shell, not the empty state (eb128a0 )
e2e: anchor the env-kind spec on the main UI, not the project empty state (a71596f )
e2e: bound session-filter's startup path with the family's warm-up and navigation probe (069c663 )
e2e: make the close-reachability spec independent of the consent notice (d678f36 )
e2e: pay the AC-115 preamble's client startup before the page, and bound it (9274519 )
e2e: real-browser spec for the session name filter (0a64846 )
e2e: state plainly what the close-reachability reading no longer proves (97bceba )
e2e: the resident busy-send criterion, and the debug-agent gate it needs (21a9586 )
gate the oom-cap hog tests behind RUN_OOM_CAP_TESTS=1 (f5bd7d7 )
give AC-176's out-of-harness fake arms their own migrated database (66d0271 )
harden two fleet-concurrency flakes (voice AC8 probe, model-gateway teardown) (5accfa1 )
launch-profiles: fix event typing (c96494e )
launch-profiles: model-library gateway end-to-end (AC-025) (ede1b40 )
projects: real-data criterion for the session name filter (95112dc )
projects: take the real-data filter criterion off this machine's clock (196c249 )
providers: AC-001 golden-baseline provenance banner on passthrough-parity (f8d5152 )
providers: attribute session-scope reads to this process (421b66d )
providers: bound the unattended-turn criterion's waits below its budget (a330009 )
providers: measure a resident session's address end to end (b7fa4d0 )
providers: pin the AC-028 provenance header on the context-window criterion file (deacbf2 )
providers: re-cover the compile-path allowlist re-validation on both final spawn envs (37f1fcf )
providers: 为 AC-025 网关端到端判据补溯源注释 (f6d883b )
resident-server-restart cleanup stops only its own servers' scopes (5d208d6 )
resident-status-bar: the clock as printed, and the count that must fall (271eccc )
retry the SIGKILL-then-reboot legs when a foreign boot reaped the orphan (f2cd622 )
seed the voice fixture before the repair, not after it (d688294 )
server: read the over-limit reap before any control, and pin the literal slice (adf651d )
session-hosts: assert the binding cardinality before its proxies (384954b )
session-hosts: declare peerName in the listing's binding contract (8b1b02b )
session-hosts: name the frame that actually went missing (7cc6c66 )
session-hosts: per-run frame parity criterion for AC-155 (d16f4a3 )
transcript-follow: 整行追加的跟住判据(夹具 + 单测) (bc66462 )
transcript: name the AC-111 instruments as the criterion names them (302fd36 )
transcript: print the AC-111 readings from the run itself (795bf0e )
voice: drive the four fake shapes the parity criterion must go red on (5cd753b )
voice: judge the real service process's stdout for the capture line (AC-148) (145aa1b )
voice: list the seam in the two module doubles that drive the mic (2506f8d )
voice: name a commit the baseline can be reproduced from (c4ca434 )
voice: read the four parity groups off the shipped code (f28578e )
voice: record the pre-extraction parity baseline (8bff677 )
voice: spell the module type as the repo does (8dbe90b )
voice: the three capture modes, and the four secrets that must not survive them (c471f1a )
voice: the two mic doubles follow the seam the trim now reads (c828520 )
You can’t perform that action at this time.