aiterm-mcp 0.29.8 → 0.29.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1484 -0
- package/README.ja.md +26 -16
- package/README.md +29 -19
- package/dist/core.js +20 -51
- package/dist/harnesses/grok.js +12 -58
- package/dist/index.js +39 -5
- package/dist/runtime-error-os.js +4 -4
- package/dist/runtime-error-store.js +2 -2
- package/dist/tmux-runtime.js +0 -3
- package/docs/00_overview.md +33 -0
- package/docs/DESIGN.md +72 -0
- package/docs/RELEASE.md +68 -0
- package/package.json +11 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,1484 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to **aiterm-mcp** are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.29.10] - 2026-08-31
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Return `pty_read(agent_transcript:true)` answer text separately as `aiterm.pty-read-result.v1` structured content while preserving the existing human-readable diagnostic suffix.
|
|
15
|
+
- For Grok and Composer, return only the last non-empty assistant message after the last real user row instead of joining tool-use preambles with the final answer.
|
|
16
|
+
|
|
17
|
+
## [0.29.9] - 2026-08-31
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Accept both `server` and `linux` factory profiles on native Linux for opt-in
|
|
22
|
+
runtime-error collection while keeping WSL restricted to its legacy `wsl` profile.
|
|
23
|
+
- Replace the nonexistent public `pty_kill_all` recovery guidance in the MCP error and both READMEs with the supported `pty_list` → `pty_close` → recreate flow.
|
|
24
|
+
- Keep the Grok credential-path contract in the authentication section instead of leaving it after the License heading.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- Deliver terminal text without classifying or blocking destructive-looking command content; command policy belongs to the shell, remote endpoint, or launched harness.
|
|
29
|
+
- Pass existing absolute Grok credential paths to Grok without inspecting their contents, permissions, ownership, links, ancestors, or file type. Keep only the explicit-path shape/existence preflight and the default-missing `XAI_API_KEY` branch.
|
|
30
|
+
- Let Claude Code interpret `/login` and `/logout` inside its own TUI while retaining the official CLI authentication preflight before session creation.
|
|
31
|
+
- Replace the retired `wsl2` and ambiguous `linux-native` factory CI labels with
|
|
32
|
+
separate `linux-server` and `linux-workstation` self-hosted runner contracts.
|
|
33
|
+
- Move completed, rejected, interrupted, expired, and superseded plans, audits, promotion notes, and obsolete design drafts under `docs/archive/`; retain only small compatibility stubs where Lattice, ADRs, or research evidence have immutable path references.
|
|
34
|
+
- Replace the release-by-release AGENTS log with a compact current product contract, and add product-owned DESIGN and RELEASE sources so Aiterm remains operable without dotagents.
|
|
35
|
+
- Ship the README-linked CHANGELOG and current product docs in the npm package, and document standalone npm update and version-pinned rollback for global and `npx` installations.
|
|
36
|
+
- Move the authoritative four-environment CI runner contract into this repository and have the release caller use the local reusable workflow instead of an external dotagents workflow.
|
|
37
|
+
|
|
38
|
+
## [0.29.8] - 2026-08-30
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Correct the `pty_open` MCP description and install-facing documentation to state the real platform contract: tmux on POSIX and psmux 3.3.8+ on native Windows.
|
|
43
|
+
- Add a tools/list regression that prevents the obsolete Windows-requires-tmux wording from returning.
|
|
44
|
+
- Do not mistake Claude Code 2.1.251's workspace-trust selection cursor for the composer; leave the initial prompt unsent and return an explicit blocking-UI error instead of selecting `No, exit` and issuing a false success receipt.
|
|
45
|
+
- Preserve the current composer when an old trust screen remains only in scrollback by classifying the last Claude `❯` marker rather than reversing the ready/action-required precedence.
|
|
46
|
+
- Use `TMPDIR` for the Windows managed-state root whenever it isolates the psmux namespace, preventing an isolated test process's `killAll()` from deleting live production agent metadata in the shared `%TEMP%` tree.
|
|
47
|
+
- Keep the existing `%TEMP%\aiterm-mcp-0` location for normal Windows servers where `TMPDIR` is unset.
|
|
48
|
+
|
|
49
|
+
## [0.29.7] - 2026-08-29
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- Add a structured `wait_process` executable/argument boundary plus a PowerShell `Start-Process`-ready argument string to agent launch and dispatch receipts so Windows callers do not have to interpret npm's PowerShell bin shim or re-quote paths containing spaces.
|
|
54
|
+
- Launch the bundled waiter through the current Node executable while preserving the psmux backend, PowerShell 7 interactive shell, compatibility `wait_command`, and waiter outcome contract.
|
|
55
|
+
|
|
56
|
+
## [0.29.6] - 2026-08-29
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
|
|
60
|
+
- Give Windows runtime-error diagnostics and asynchronous recording enough time for their required PowerShell 7 private-DACL operations instead of killing healthy workers at the POSIX two-second deadline.
|
|
61
|
+
- Keep the explicit per-operation timeout override and the POSIX two-second default unchanged.
|
|
62
|
+
|
|
63
|
+
## [0.29.5] - 2026-08-29
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
|
|
67
|
+
- Select the PowerShell mark sentinel from the currently rendered PowerShell prompt when psmux briefly reports the launcher shell immediately after `pty_open`.
|
|
68
|
+
- Keep the failed, unpublished `v0.29.4` tag immutable and publish this corrected patch as 0.29.5.
|
|
69
|
+
|
|
70
|
+
## [0.29.4] - 2026-08-29
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
|
|
74
|
+
- Bypass psmux 3.3.8's unreliable CLI paste-buffer/send-keys path on Windows by sending paced 256-byte `SendBytes` commands over the authenticated per-session server protocol and retaining the send lock through the final ConPTY drain.
|
|
75
|
+
- Keep agent prompts atomic on Windows with explicit bracketed-paste wrappers after the TUI ready gate, while preserving tmux `paste-buffer -p` negotiation on POSIX.
|
|
76
|
+
- Cover 6,000-character delivery, same-session cross-process serialization, eight-session concurrent delivery, and platform-specific bracketed paste in native PTY regression tests.
|
|
77
|
+
|
|
78
|
+
## [0.29.3] - 2026-08-29
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
|
|
82
|
+
- Dispatch startup prompts for every harness through the live TUI ready gate instead of treating Grok/Composer/Cursor argv prompts as already running.
|
|
83
|
+
- Recognize Grok's current response markers as busy while allowing a stable visible composer without requiring a transcript initialization event.
|
|
84
|
+
|
|
85
|
+
## [0.29.2] - 2026-08-29
|
|
86
|
+
|
|
87
|
+
### Fixed
|
|
88
|
+
|
|
89
|
+
- Prefer the current idle composer over stale startup-dialog text left in scrollback, while still returning immediately for an actually active blocking UI.
|
|
90
|
+
|
|
91
|
+
## [0.29.1] - 2026-08-29
|
|
92
|
+
|
|
93
|
+
### Fixed
|
|
94
|
+
|
|
95
|
+
- Return the existing `initial_prompt=not_sent` error immediately when a known Codex/Claude startup approval UI blocks the TUI, leaving the session alive for the caller instead of waiting for the ready timeout.
|
|
96
|
+
|
|
97
|
+
## [0.29.0] - 2026-08-25
|
|
98
|
+
|
|
99
|
+
### Changed
|
|
100
|
+
|
|
101
|
+
- **起動時promptのready gate失敗を成功形receiptから明示エラーへ変更**(実被弾 2026-08-25:
|
|
102
|
+
Codexのupdate確認ダイアログでTUIが入力受付にならず、promptが未送信のまま
|
|
103
|
+
`wait_command: null`の成功形receiptが返り、呼び出し側が40分気づけなかった)。
|
|
104
|
+
`sendInitialAgentPrompt`はready失敗時にAitermError(code 2)を投げ、sessionは
|
|
105
|
+
調査/復旧用に残す。エラーメッセージにsession_id・復旧手順(pty_read→pty_key→pty_send)を含む。
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
|
|
109
|
+
- `codexLaunchBlockingDialog(screen)`: Codexの起動前modal(update確認・directory trust確認・
|
|
110
|
+
その他「Press enter to continue」型)を実機capture逐語で検知し、ready gate失敗エラーに
|
|
111
|
+
塞いでいるダイアログ種別を明示する。ダイアログ表示中のCodexはheader/footerを描かないため
|
|
112
|
+
`codexTuiReady`では識別できない(実測フィクスチャをtestに収録)。
|
|
113
|
+
|
|
114
|
+
## [0.28.4] - 2026-08-25
|
|
115
|
+
|
|
116
|
+
### Fixed
|
|
117
|
+
|
|
118
|
+
- Native Windowsの`pty_open`既定shellをPowerShell 7(`pwsh.exe`)へ統一し、明示
|
|
119
|
+
`powershell`/`powershell.exe`も検証済みPowerShell 7実体へ正規化した。検出実体自身の
|
|
120
|
+
`PSEdition=Core`/major 7以上を確認し、Windows PowerShell 5.1・PowerShell 6・`cmd.exe`へ
|
|
121
|
+
fallbackしない。未導入時はMicrosoft公式WinGet入口を案内する。
|
|
122
|
+
- runtime error DACL、process identity、Throughline shimも同じ絶対PowerShell 7を使う。
|
|
123
|
+
DACLはPowerShell 7対応の`FileSystemAclExtensions` static APIへ移し、current SID only・
|
|
124
|
+
FullControl・継承遮断・owner readbackを維持した。
|
|
125
|
+
|
|
126
|
+
## [0.28.3] - 2026-08-24
|
|
127
|
+
|
|
128
|
+
### Changed
|
|
129
|
+
|
|
130
|
+
- campaign 32のmaintenance queueに積んだ重複を解消: stop hook 2本とagent-sharedに
|
|
131
|
+
三重実装されていた`uid()`/`runtimeStateBase()`を、node builtinだけに依存する新設の
|
|
132
|
+
最下層`src/state-root.ts`へ一本化した。stop hookの「内部moduleへ依存しない」設計は
|
|
133
|
+
state-rootがbuiltin依存だけであることで維持される。挙動・15-tool API・schemaは不変。
|
|
134
|
+
|
|
135
|
+
## [0.28.2] - 2026-08-24
|
|
136
|
+
|
|
137
|
+
### Changed
|
|
138
|
+
|
|
139
|
+
- 内部用語をharnessへ統一した(オーナー裁定: AIの実行基盤分類を「vendor」でなく「harness」と呼ぶ)。
|
|
140
|
+
`src/vendors/`を`src/harnesses/`へ改名し、内部識別子(`harnessLauncherDiagnostic`等)とコメント・
|
|
141
|
+
現役文書の分類語をharnessへ置換した。挙動・15-tool API・schemaは不変。
|
|
142
|
+
- 互換のため公開wire契約は据え置く: receipt/event fileの`vendor`・`vendor_session_id`field、
|
|
143
|
+
diagnosticsの`vendor_dependencies`、runtime error code `AITERM.VENDOR_LAUNCHER_FAILED`は
|
|
144
|
+
従来どおり(正本fieldは0.28.0以降`harness`)。
|
|
145
|
+
|
|
146
|
+
## [0.28.1] - 2026-08-24
|
|
147
|
+
|
|
148
|
+
### Changed
|
|
149
|
+
|
|
150
|
+
- 現行正典をv0.28の実装へ全面同期した。Windows nativeはWSL bridgeでなくpsmux 3.3.8以上+
|
|
151
|
+
Git for Windowsを直接使うこと、公開面は15 toolsで標準`agent_launch`と旧4 aliasを持つこと、
|
|
152
|
+
harness固有/OS固有コードの所有境界をCONTRIBUTING、SECURITY、README、AGENTS、design planへ反映した。
|
|
153
|
+
- Cursorの通常agent transcriptによる回答回収と`turn_ended(status:"success")`完了相関、同一sessionの
|
|
154
|
+
model/effort変更、複数harness運用を英日READMEと設計正本へ補完した。archive、過去版ADR、RAG rawは
|
|
155
|
+
当時の証跡なので書き換えていない。
|
|
156
|
+
- ランタイムコードと15-tool APIは0.28.0から不変。npmへ含まれるREADMEを同期して届けるため、
|
|
157
|
+
再公開不能な0.28.0を動かさず、文書同期版を0.28.1として公開する。
|
|
158
|
+
|
|
159
|
+
## [0.28.0] - 2026-08-24
|
|
160
|
+
|
|
161
|
+
### Added
|
|
162
|
+
|
|
163
|
+
- 正規の単一起動入口`agent_launch({ harness, model?, ... })`を追加した。`harness`は
|
|
164
|
+
`claude-code`/`codex-cli`/`grok-cli`/`cursor-cli`で、agent loop・認証・hook・session・
|
|
165
|
+
transcriptを所有する実行基盤を表す。`model`は別軸で、Cursor harness上のGPT/Claude/Grokも
|
|
166
|
+
Cursor方式の完了相関を維持する。ComposerはGrok CLIのmodel presetとして指定する。
|
|
167
|
+
- Cursor Agent CLI adapterを追加した。通常`~/.cursor`を共有し、初回user recordのlaunch IDで通常
|
|
168
|
+
agent transcriptを一意にbindする。末尾`turn_ended(status:"success")`を完了、同じturnのassistant textを
|
|
169
|
+
回答正本として、既存`aiterm-wait`/`pty_read(agent_transcript:true)`契約へ接続する。
|
|
170
|
+
- Cursorの`write_scope:"read-only"`を公式`--mode ask`で実効化し、model+effortは
|
|
171
|
+
現行`model-effort` IDへ変換してlive catalogへ照合する。起動中変更は標準`/model`とmodel pickerの
|
|
172
|
+
parameter editorを使う。CLI未導入・未認証・不正指定はPTY作成前に明示失敗する。
|
|
173
|
+
|
|
174
|
+
### Changed
|
|
175
|
+
|
|
176
|
+
- `claude_agent`/`codex_agent`/`grok_agent`/`composer_agent`はdeprecated thin aliasとなり、
|
|
177
|
+
正規入口と同じ共通実装へ流れる。旧receiptの`provider`は互換fieldとして残し、`harness`を追加した。
|
|
178
|
+
- `pty_send`のagent dispatch、`aiterm-wait`、`agent_configure`、`pty_list`にも正規の`harness`を追加し、
|
|
179
|
+
起動後の操作でも同じ実行基盤語彙を使えるようにした。旧`vendor`/`provider`/`agent`は互換用に残す。
|
|
180
|
+
- `event_cursor`はvendor別の完了正本境界を表すopaqueな0以上の整数とした。Cursorではfollow-up時に
|
|
181
|
+
直前末尾の`turn_ended`が書き換わる実挙動へ合わせ、単調に残るuser turn数を使う。
|
|
182
|
+
- Cursor実行ファイルは`CURSOR_AGENT_BIN`、`~/.local/bin/cursor-agent`、PATH上の`cursor-agent`だけを
|
|
183
|
+
解決し、Grok等と衝突し得る曖昧な`agent`名を使わない。導入・更新はCursor公式installer/
|
|
184
|
+
`agent update`を正本とし、独自tarball経路を追加しない。
|
|
185
|
+
|
|
186
|
+
### Fixed
|
|
187
|
+
|
|
188
|
+
- MCPB stagingが`dist`直下のJavaScriptだけをcopyし、v0.27.7以降の`dist/vendors/*.js`を欠いた
|
|
189
|
+
起動不能archiveをvalidatorが通していた欠陥を修理した。runtime JavaScriptを再帰copyし、staged serverの
|
|
190
|
+
initialize/15-tool list/stderr 0まで公開前smokeで固定する。
|
|
191
|
+
|
|
192
|
+
## [0.27.9] - 2026-08-23
|
|
193
|
+
|
|
194
|
+
### Fixed
|
|
195
|
+
|
|
196
|
+
- Windows native の PowerShell pane で `pty_send(mark:true)` が POSIX 用 `printf` を
|
|
197
|
+
連結して失敗し、コマンド本体が成功しても完了 sentinel を生成できず timeout していた。
|
|
198
|
+
前面が `powershell` / `pwsh` のときは PowerShell 構文で sentinel を実行時生成し、
|
|
199
|
+
成功を `rc=0`、失敗を `rc=1` として返す。command echo は `rc={0}` のままなので
|
|
200
|
+
数字アンカーによる早期完了防止を維持する。POSIX shell の既存形式は変更しない。
|
|
201
|
+
- 日本語 README の Windows 要件が廃止済み WSL bridge の説明を残していたため、現行の
|
|
202
|
+
native psmux 3.3.8+ と Git for Windows を使う契約へ訂正した。
|
|
203
|
+
|
|
204
|
+
## [0.27.8] - 2026-08-23
|
|
205
|
+
|
|
206
|
+
### Fixed
|
|
207
|
+
|
|
208
|
+
- 0.27.7 の npm package に `dist/vendors/` が同梱されず、公開版が起動時
|
|
209
|
+
`ERR_MODULE_NOT_FOUND` になっていた(package.json `files` の `dist/*.js` glob が
|
|
210
|
+
サブディレクトリを含まなかった)。`dist/vendors/*.js` を files へ追加し、
|
|
211
|
+
`npm pack --dry-run` で build 済み runtime dist の全 .js が tarball に含まれることを
|
|
212
|
+
固定する回帰テストを追加した(repo 内 dist で回る CI では検出できない欠陥クラスの封じ)。
|
|
213
|
+
|
|
214
|
+
## [0.27.7] - 2026-08-23(npm同梱漏れにより公開版は起動不能・0.27.8が修正版)
|
|
215
|
+
|
|
216
|
+
### Changed
|
|
217
|
+
|
|
218
|
+
- vendor固有コードとOS固有コードを専用モジュールへ分離した(外部挙動不変のリファクタ・
|
|
219
|
+
campaign正本は `docs/archive/32-vendor-os-adapter-refactor-plan.md`)。`src/vendors/{claude,codex,grok}.ts` が各ベンダーの起動引数・
|
|
220
|
+
ready/画面判定・完了検出・transcript回収・metadata生成・auth/catalog検証を所有し、
|
|
221
|
+
`src/agent-shared.ts` がvendor中立の共有プリミティブ(state path・metadata型・完了event型・
|
|
222
|
+
lineage)を所有する。psmuxのOS差(load-buffer一時ファイル・paste-buffer -r非対応・
|
|
223
|
+
pipe-pane sink settle・NUL device・mode bit検証可否・Git Bash cwd変換)は
|
|
224
|
+
`src/tmux-runtime.ts` へ集約した。依存方向は core → vendors → agent-shared →
|
|
225
|
+
(tmux-runtime, errors) の一方向。公開tool面・schema・receipt・エラーメッセージ・
|
|
226
|
+
タイミング定数は不変。core.ts は 4,912→3,647行。
|
|
227
|
+
|
|
228
|
+
## [0.27.3] - 2026-08-22
|
|
229
|
+
|
|
230
|
+
### Fixed
|
|
231
|
+
|
|
232
|
+
- agent metadata の codex_home / grok_home 照合が「現在の process env の home と等しいこと」を
|
|
233
|
+
要求し、席専用 CODEX_HOME / GROK_HOME で起動した正当な session が別の aiterm instance から
|
|
234
|
+
拒否された(2026-08-22 実測: 承認ダイアログで停止した席を親が救えず円卓が止まった)。
|
|
235
|
+
per-launch の記録値を正とし、検証は絶対パスの形だけにする。
|
|
236
|
+
- Windows CI の listSessions テストが、psmux の pane_current_command が起動直後に
|
|
237
|
+
git→bash と遷移するレースで落ちた(v0.27.1/0.27.2 の publish を連続で止めた)。
|
|
238
|
+
行が安定するまで待ってから基準を取る。
|
|
239
|
+
|
|
240
|
+
## [0.27.2] - 2026-08-22(CI 失敗により未 publish)
|
|
241
|
+
|
|
242
|
+
### Changed
|
|
243
|
+
|
|
244
|
+
- OS依存コードを独立モジュールへ分離した(挙動不変のリファクタ)。errors(AitermErrorと
|
|
245
|
+
telemetry所有の失敗経路)、tmux-runtime(tmux/psmuxの解決・socket/namespace・locale注入・
|
|
246
|
+
起動)、agent-resolver(claude/codex/grok/throughline/pane shellの実行ファイル解決と
|
|
247
|
+
起動経路)、runtime-error-os(パス規約・Windows DACL・host profile・process観測・
|
|
248
|
+
force kill)。OS分岐の規約は各モジュールだけが所有し、core.tsとruntime-error-store.tsは
|
|
249
|
+
OS非依存ロジックに保つ。
|
|
250
|
+
|
|
251
|
+
### Fixed
|
|
252
|
+
|
|
253
|
+
- process start identity の `ps -o lstart=` 観測が observer の locale に依存していた
|
|
254
|
+
(lstart の日付書式は LC_TIME で変わる。Lattice 0.63.4 で実被弾した同族の罠)。
|
|
255
|
+
観測 env を `LC_ALL=C` へ固定した。
|
|
256
|
+
- smoke の公開version検査が 0.27.0 固定のまま 0.27.1 が release され、`npm test` が
|
|
257
|
+
素で赤になっていた。versionへ追随した。
|
|
258
|
+
|
|
259
|
+
## [0.27.1] - 2026-08-20
|
|
260
|
+
|
|
261
|
+
### Fixed
|
|
262
|
+
|
|
263
|
+
- `claude_agent` が `--model` / `--effort` を渡しても、launch 固有 `--settings` に
|
|
264
|
+
model が無く Claude Code 既定(Fable 5 / high)へ落ちていた。要求した model と
|
|
265
|
+
effort をその settings JSON へ焼き、席が Fable 固定にならないようにした。
|
|
266
|
+
|
|
267
|
+
## [0.27.0] - 2026-08-19
|
|
268
|
+
|
|
269
|
+
### Changed
|
|
270
|
+
|
|
271
|
+
- **Windows基盤をWSL橋からnative psmuxへ置換**(`e3f5fc8`+本版で完成)。全tmux呼び出しは
|
|
272
|
+
tmux CLI互換のnative psmux(`-L` namespace隔離・`AITERM_PSMUX`上書き可)を直接叩き、
|
|
273
|
+
pane shellはGit for Windowsの`bash.exe`(`AITERM_BASH`上書き可)。WSL2・interop anchor・
|
|
274
|
+
`/mnt/c`変換・`WSLENV`搬送は全廃。前提のpsmux忠実度修正3件(pipe-pane直接ファイルsink・
|
|
275
|
+
paste逐語hex wire・前面`#{pane_current_command}`)はupstream貢献 psmux/psmux#577 として
|
|
276
|
+
mergeされ **psmux v3.3.8** に収録=Windows nativeの動作前提はpsmux ≥ 3.3.8。
|
|
277
|
+
- **共有/tmpの敵対的同居主体を前提とした安全設備を全プラットフォームで撤去**
|
|
278
|
+
(オーナー裁定 2026-08-19): agent state系のsymlink・hard link・owner uid比較・
|
|
279
|
+
mode bit検査・`O_NOFOLLOW`。対応OSの既定配置(`XDG_RUNTIME_DIR`/per-user tmp)では
|
|
280
|
+
前提が成立しないため。短書き込み検出、`dev`/`ino`同一性(operation相関)、size上限、
|
|
281
|
+
作成時0o600/0o700は維持。Grok auth検証とsend/wait lockは対象外(撤去していない)。
|
|
282
|
+
|
|
283
|
+
### Fixed
|
|
284
|
+
|
|
285
|
+
- **Windowsで`grok_agent`/`composer_agent`の完了eventが一度も書かれなかった**:
|
|
286
|
+
`grok-stop-hook`が`process.getuid`不在で即failしていた(claude側だけ修理され
|
|
287
|
+
grok側が取り残されていた)。`aiterm-wait`が常に600秒timeoutする実害の根治。
|
|
288
|
+
- **受入契約が通したscript binをcontrol commandが実行できなかった**: Windowsで
|
|
289
|
+
shebang script(受入が正式に許す形)をGit Bash経由、`.cmd`/`.bat`をshell経由で
|
|
290
|
+
実行する。従来は`claude auth status --json` preflightが必ず失敗し起動不能だった。
|
|
291
|
+
|
|
292
|
+
### Tests
|
|
293
|
+
|
|
294
|
+
- テスト側の`process.getuid`ハードコード述語を製品側`currentUid()`と同規則へ揃え、
|
|
295
|
+
Windows覆域を回復(skip 155→45・full 344件でfail 0)。fake vendor bin・Throughline
|
|
296
|
+
fixtureをWindows実行形へ移植。撤去済み安全設備を検証していたテストは削除し、
|
|
297
|
+
「envの任意pathへ書かない」等の撤去と無関係な不変条件は残して固定。
|
|
298
|
+
|
|
299
|
+
## [0.26.0] - 2026-08-15
|
|
300
|
+
|
|
301
|
+
### Changed
|
|
302
|
+
|
|
303
|
+
- Windows hostの`grok_agent`/`composer_agent`はWindows nativeの`grok.exe`だけを起動する
|
|
304
|
+
(オーナー裁定 2026-08-15: WindowsネイティブはWindowsネイティブで完結させ、WSL2へ持ち込まない)。
|
|
305
|
+
WSL側grokを起動するとvendor実体がWSL processになり、session記録(events/chat_history)が
|
|
306
|
+
WSL home側へ分裂して`pty_read(agent_transcript:true)`と`aiterm-wait`の完了帰属が回収不能だった
|
|
307
|
+
(実被弾: olc-plan-review-grok2)。非nativeな解決先はsession作成前に明示エラーにし、
|
|
308
|
+
Windowsの既定候補へ`~/.grok/bin/grok.exe`を追加した。native実体はWindows側`~/.grok`へ
|
|
309
|
+
記録するため、transcript/completion読取・auth検証(0.25.3)と同じ面で完結する。
|
|
310
|
+
v0.25.3の`GROK_AUTH_PATH`の`/mnt/c`変換(WSL grok前提)は撤回し、Windowsドライブ形のまま渡す。
|
|
311
|
+
- `grok_agent`のツール既定modelをdotagents規範(xAI旗艦)どおり`grok-4.6`へ更新した
|
|
312
|
+
(実catalogで現行defaultであることを確認済み)。
|
|
313
|
+
|
|
314
|
+
### Fixed
|
|
315
|
+
|
|
316
|
+
- Windowsのtmux bridgeでは各`wsl.exe`呼び出しが短命なため、paneが継承する`WSL_INTEROP`が
|
|
317
|
+
死んだsocketを指し、pane内からのWindows `.exe`起動(binfmt interop)が
|
|
318
|
+
`UtilAcceptVsock accept4=110`で失敗していた。aitermが長寿命のinterop anchor(sleepする
|
|
319
|
+
`wsl.exe` process)を1本所有し、native `.exe`起動のenvへ生きたsocketを供給する。
|
|
320
|
+
あわせてWSL側envはinterop先のWindows processへ既定では渡らないため(実測)、注入envを
|
|
321
|
+
`WSLENV`(`/w`)で明示的に運ぶ。Windows native grok.exe 1.0.4の入力欄marker `>` を
|
|
322
|
+
ready判定・submit残存観測へ追加した(`❯`は従来どおり)。
|
|
323
|
+
- Windows(`process.getuid`不在)で`existingAgentsDir()`が常に`null`を返し、close/killAll/
|
|
324
|
+
同名再起動時のagent state掃除がno-opになっていた。閉じたsessionのmetadataが残り、同名の
|
|
325
|
+
再起動が「agent metadata が複数あります」で失敗する実害を確認し、`currentUid()`の既知制約
|
|
326
|
+
受容(uid 0)へ揃えて根治した。
|
|
327
|
+
- `grok_agent`/`composer_agent`の`write_scope:"read-only"`起動へ`--always-approve`を付与し、
|
|
328
|
+
無人subagentがMCPツール初回使用の許可ダイアログで停止しないようにした。sandboxが実効
|
|
329
|
+
書込み禁止を作るread-only起動だけが対象で、read-only以外のlaunchコマンドラインには
|
|
330
|
+
従来どおり`--always-approve`を入れない(権限拡大なし)。
|
|
331
|
+
|
|
332
|
+
## [0.25.3] - 2026-08-15
|
|
333
|
+
|
|
334
|
+
<!-- 公開受入: docs/adr/0032-release-0.25.3-acceptance.md -->
|
|
335
|
+
|
|
336
|
+
### Fixed
|
|
337
|
+
|
|
338
|
+
- Windows hostで`grok_agent`/`composer_agent`が「Grok 認証正本の安全検証に失敗しました」で
|
|
339
|
+
構造的に起動不能だった。WindowsのNode `fs.Stats`はPOSIX permission bitを持たない(fileは常に
|
|
340
|
+
666、directoryは777相当)ため、`resolveAndValidateGrokAuth`のmode bit検証をWindowsでは
|
|
341
|
+
除外する(`currentUid`と同じ既知制約の明示的受容。owner・nlink・size・O_NOFOLLOW・realpath・
|
|
342
|
+
祖先symlink検証は全platform共通のまま維持)。
|
|
343
|
+
- Windowsで検証を通過しても、WSL内bashで走る起動コマンドへ`GROK_AUTH_PATH`をWindowsドライブ
|
|
344
|
+
形式のまま渡していたため、WSL側grokが認証正本を開けず接続段階で無応答のまま停止していた。
|
|
345
|
+
bin/cwdと同じ`toWslPath`変換を適用する。
|
|
346
|
+
|
|
347
|
+
## [0.25.2] - 2026-08-14
|
|
348
|
+
|
|
349
|
+
### Fixed
|
|
350
|
+
|
|
351
|
+
- Grok Build 1.0.3で`/model`成功通知が次の再描画までに消えた場合、実際にはmodel/effortが
|
|
352
|
+
変更済みでも`agent_configure`が失敗と返していた。変更前には無かった要求model/effortが
|
|
353
|
+
常駐footerへ現れた場合もvendorの最終状態として確認し、同一sessionの連続変更を正しく返す。
|
|
354
|
+
|
|
355
|
+
## [0.25.1] - 2026-08-13
|
|
356
|
+
|
|
357
|
+
### Changed
|
|
358
|
+
|
|
359
|
+
- GitHub移転後の正規repositoryを`kitepon/aiterm-mcp`へ統一した。README、contributor/security案内、
|
|
360
|
+
npm metadata、MCPB manifest、Official MCP Registry manifest、公開runbookを同じ正本へ揃えた。
|
|
361
|
+
- 工場管理製品の最終CIをself-hostedのmacOS native・Linux native・Windows native・WSL2へ移し、
|
|
362
|
+
4環境すべてで同じ`npm test`を同時実行する。OS別の縮小suiteやGitHub-hosted runnerで代用しない。
|
|
363
|
+
- npm publishは4環境full greenとrelease commitの`origin/main`祖先確認を必須条件とし、
|
|
364
|
+
GitHub Actions OIDC Trusted Publisherは移転後の`kitepon/aiterm-mcp`へ対応させる。
|
|
365
|
+
|
|
366
|
+
### Fixed
|
|
367
|
+
|
|
368
|
+
- 移転前のTrusted Publisherが発行するOIDC claimと現在のrepository ownerが食い違い、provenance署名後の
|
|
369
|
+
npm publishがE404になる公開障害を修理する。失敗済み`v0.25.0`は動かさず、修正版を`v0.25.1`として出す。
|
|
370
|
+
- Linux native/WSL2でも長いPTY入力を一括pasteするとtmuxが成功を返したまま中間を欠落させるため、
|
|
371
|
+
全OSでUTF-8境界を守る256byte chunkと10msのdrain間隔を使う。
|
|
372
|
+
- `until`/`mark`を指定したreadが、shell builtin処理中の一瞬の出力静止をquiescent完了と誤認して
|
|
373
|
+
指定証拠より先に返る欠陥を修理し、指定したmarker/sentinelを優先する。
|
|
374
|
+
- Windows nativeのself-hosted runnerをWSL所有者のinteractive taskで起動し、`NETWORK SERVICE`から
|
|
375
|
+
見えないWSL/tmuxのためWindows fullが一括失敗する工場設定を修理する。
|
|
376
|
+
|
|
377
|
+
### Verification
|
|
378
|
+
|
|
379
|
+
- tag CI/Trusted Publishing `31747150072`はself-hostedのmacOS native・Linux native・
|
|
380
|
+
Windows native・WSL2で同じ`npm test`を各347/347通過し、npm 0.25.1をSLSA provenance付きで公開した。
|
|
381
|
+
- GitHub ReleaseへMCPBを添付。Official Registry初回runのdescription 100文字超過422を根治後、
|
|
382
|
+
run `31748407046`で`io.github.kitepon/aiterm-mcp` 0.25.1を`active`/latestへ公開した。
|
|
383
|
+
- npm由来global/隔離install、3 bin、14 tools、4 launcher schema、stderr 0、配布`dist`一致、
|
|
384
|
+
Grok live smoke、Composer model不在時のsession作成前fail-loudと残骸ゼロを確認した。
|
|
385
|
+
|
|
386
|
+
## [0.25.0] - 2026-08-13
|
|
387
|
+
|
|
388
|
+
### Added
|
|
389
|
+
|
|
390
|
+
- `grok_agent`/`composer_agent`が起動時`reasoning_effort`をGrok Build TUIの
|
|
391
|
+
`--reasoning-effort`へ渡すようにした。
|
|
392
|
+
- `agent_configure`をGrok/Composerへ拡張し、同一PTY・同一会話contextのまま
|
|
393
|
+
`/model <model> [effort]`または`/effort <effort>`で変更できるようにした。
|
|
394
|
+
- Grok/Composerの`write_scope:"read-only"`を`--sandbox read-only`へ接続し、
|
|
395
|
+
Codexと同じ実効書込み壁にした。パス説明は引き続き宣言記録だけである。
|
|
396
|
+
|
|
397
|
+
### Changed
|
|
398
|
+
|
|
399
|
+
- 明示したGrok/Composer modelとComposer既定`grok-composer-2.5-fast`を、PTY作成前に
|
|
400
|
+
現在の`grok models` catalogへ照合する。取得失敗、形式不正、model不在は別modelへ
|
|
401
|
+
fallbackせず明示失敗する。現行catalogにComposer modelが無い場合、Composer既定起動も
|
|
402
|
+
利用可能と偽らずsession作成前に失敗する。
|
|
403
|
+
|
|
404
|
+
### Verification
|
|
405
|
+
|
|
406
|
+
- 起動時effort、read-only sandbox、Grok/Composerの同一session model/effort変更、
|
|
407
|
+
catalog不在時の残骸ゼロ拒否をfocused regressionで固定した。
|
|
408
|
+
- 既存agent関連回帰117/117とMCP schema smokeがgreen。
|
|
409
|
+
- 最初のfull regressionは新catalog境界を持たない既存MCP fixtureだけが失敗して344/345。fixtureを
|
|
410
|
+
focusedに修正後、最終full regression 345/345を確認した。
|
|
411
|
+
- npm pack dry-runは13 files、MCPB validate/packは0.25.0・2261 files、staged MCPは
|
|
412
|
+
version 0.25.0/14 tools/4 provider schema/stderr 0でgreen。
|
|
413
|
+
|
|
414
|
+
## [0.24.3] - 2026-08-13
|
|
415
|
+
|
|
416
|
+
### Fixed
|
|
417
|
+
|
|
418
|
+
- Agent launcherの`env_vars`で、現在のMCP processにある指定名の値だけを起動agentへ継承できるようにした。MCP processより先にtmux serverが存在していても、呼出元が所有する席identityやworkflow変数を失わない。
|
|
419
|
+
- Codex v0.147がreasoning effortの後ろへ`fast`を表示するfooterもCodex frontendとして認識する。
|
|
420
|
+
`medium fast ·`のidle実席を`agent_configure`が誤拒否していた欠陥を、vendor表示文法の判定で修理した。
|
|
421
|
+
|
|
422
|
+
### Security
|
|
423
|
+
|
|
424
|
+
- `env_vars`は名前だけをtool引数に受け取り、値は現在のMCP processから起動時に読む。全環境の暗黙継承や
|
|
425
|
+
name/value mapは追加しない。指定値はshell quoteして起動コマンドへ入るため、起動先agent、PTY、`.lastcmd`へ
|
|
426
|
+
到達する。この機能を秘密転送路として扱わず、同じOS userとvendorへ開示してよい変数だけを指定する。
|
|
427
|
+
|
|
428
|
+
### Verification
|
|
429
|
+
|
|
430
|
+
- 既存tmux serverを現在のMCP processより先に起動した条件で、指定した現在値だけがagentへ届くこと、
|
|
431
|
+
不正な変数名がsession作成前に失敗することをfocused regressionで固定した。
|
|
432
|
+
- Peertableの実席9席で、各launcherへ渡したactor値が起動agentから読めることを確認した。
|
|
433
|
+
- `fast`入りfooterのready/idle readyをpure regressionで固定し、実席soraを同じsessionのまま
|
|
434
|
+
LunaからTerraへ変更できることを確認した。
|
|
435
|
+
- final full regression 342/342、npm pack dry-run(13 files)、MCPB validate/pack、staged MCPの
|
|
436
|
+
version 0.24.3/14 tools/4 launcher schema/stderr 0がgreen。
|
|
437
|
+
- release commit `6ccb1a3add62e183d321e1ad97cd008da31026a2`のmain CI `31664655592`、
|
|
438
|
+
tag CI/Trusted Publishing `31664795704`、Official MCP Registry workflow `31664974149`がsuccess。
|
|
439
|
+
npm latest 0.24.3、SLSA provenance、GitHub Release+MCPB、Registry active/latest、registry由来
|
|
440
|
+
global install、3 bins、14 tools、schema、stderr 0、installed dist一致、2件の根治smokeを確認した。
|
|
441
|
+
- v0.24.3の完全な公開receiptは[archive plan](https://github.com/kitepon/aiterm-mcp/blob/main/docs/archive/28-agent-env-vars-release-plan.md)へ記録する。
|
|
442
|
+
|
|
443
|
+
## [0.24.2] - 2026-08-13
|
|
444
|
+
|
|
445
|
+
### Fixed
|
|
446
|
+
|
|
447
|
+
- 長寿命Codex sessionで`OpenAI Codex`ヘッダが直近のcapture範囲外へ流れた後も、常駐する
|
|
448
|
+
model/effort footerと入力欄をCodex TUIのready表現として認識する。idleの実席を
|
|
449
|
+
`agent_configure`が「入力待ちではありません」と誤拒否していた欠陥を修理した。
|
|
450
|
+
- Runtime error storeのbakery queueが固定1.5秒をqueue全体の総待ち時間として扱い、macOSでは
|
|
451
|
+
各waiterが各pollで外部`ps`を起動して自ら進行を遅らせていた欠陥を修理した。期限を同じ先頭ownerの
|
|
452
|
+
無進捗時間として測り、正常なticket進行ごとに更新する。通常pollは`kill(pid, 0)`だけを使い、
|
|
453
|
+
PID再利用を防ぐprocess-start identity照合はstall時だけ行う。
|
|
454
|
+
|
|
455
|
+
### Verification
|
|
456
|
+
|
|
457
|
+
- headerが画面外へ流れた長寿命Codexのready/idle readyと、footerだけ・入力欄だけ・busy表示の
|
|
458
|
+
負経路をpure regressionで固定した。
|
|
459
|
+
- Peertableの実席で、同じAiterm sessionと会話contextを維持したままLuna medium→Terra highの
|
|
460
|
+
`agent_configure`が成功することを確認した。
|
|
461
|
+
- v0.24.1 tag CI `31610402851`のmacOS Node 20で20並行queueの5 processが総待ち期限を超えた
|
|
462
|
+
failureを再現根拠にした。前任ticketが各900msで進み総待ち1.8秒になるregressionをred→greenで固定し、
|
|
463
|
+
20並行時の`ps`起動を258回から20回へ削減した。
|
|
464
|
+
- focused 67/67、full regression 339/339、npm pack dry-run(13 files)、MCPB validate/packと
|
|
465
|
+
staged MCPのversion 0.24.2/14 tools/`agent_configure` schema/stderr 0がgreen。
|
|
466
|
+
- release commit `9febb994370a270acd0d38a80be508318d481060`のmain CI `31611936274`、
|
|
467
|
+
tag CI/Trusted Publishing `31612206338`、Official MCP Registry workflow `31612570435`がsuccess。
|
|
468
|
+
npm latest 0.24.2、GitHub Release+MCPB、Registry active/latest、registry由来global install、
|
|
469
|
+
3 bins、14 tools、schema、stderr 0、installed dist一致、長寿命Codex ready根治を確認した。
|
|
470
|
+
|
|
471
|
+
## [0.24.1] - 2026-08-12
|
|
472
|
+
|
|
473
|
+
### Release status
|
|
474
|
+
|
|
475
|
+
- Git tagのCI `31610402851`はmacOS Node 20のruntime error store高競合試験で失敗し、publish jobは
|
|
476
|
+
実行前にskipされた。npm、GitHub Release、Official MCP Registryへは公開せず、tagを動かさず
|
|
477
|
+
長寿命Codex ready修正とqueue根治を0.24.2へ継承する。
|
|
478
|
+
|
|
479
|
+
## [0.24.0] - 2026-08-12
|
|
480
|
+
|
|
481
|
+
### Added
|
|
482
|
+
|
|
483
|
+
- `agent_configure`を追加。起動済みのCodex/Claude agent sessionへ各CLI標準のmodel/effort変更操作を送り、
|
|
484
|
+
PTYと会話contextを維持したまま設定を変更する。
|
|
485
|
+
|
|
486
|
+
### Verification
|
|
487
|
+
|
|
488
|
+
- Codex 0.147.0の実TUIでLuna low→Terra highを同一session内で確認。
|
|
489
|
+
- Claude Code 2.1.228をAitermの実PTYでSonnet low→Opus high→Sonnet lowへ変更し、同一sessionの
|
|
490
|
+
画面表示と標準`/model`・`/effort`成功応答を確認。対話fixtureでも同一sessionへの2コマンド送信を固定した。
|
|
491
|
+
- local full regression 337/337、MCPB validate/pack、npm pack dry-runがgreen。release commit
|
|
492
|
+
`764e83857c8c63416ca9da5311b73cac9364e490`のmain CI `31587209848`、tag CI/Trusted Publishing
|
|
493
|
+
`31587248091`はsuccess。npm latest 0.24.0、global install、公開MCPの14 tools/stderr 0、
|
|
494
|
+
installed distとrelease commitのバイト一致を確認した。
|
|
495
|
+
|
|
496
|
+
### Documentation
|
|
497
|
+
|
|
498
|
+
- Codex/Claudeの入口、日英README、設計索引、運用文書、旧plan/ADRをv0.22.0の共有agent環境契約へ同期。
|
|
499
|
+
旧managed home/設定snapshotの本文は歴史的証拠として保持しつつ、現行契約ではない文書をADR 0025による
|
|
500
|
+
superseded/historicalとして明示した。runtime、package version、公開成果物に変更はない。
|
|
501
|
+
- v0.23.0 portable forkの公開後全域監査を行い、`AGENTS.md`、contributor guide、security policy、
|
|
502
|
+
docs索引、Lattice計画を`throughline_source_session`とread-only DB所有境界へ同期した。README、
|
|
503
|
+
CLAUDE、ADR 0027、PROMOTIONは既に一致していたため内容を維持し、履歴ADR/archive/evidence/RAGは
|
|
504
|
+
当時の証拠として改稿していない。
|
|
505
|
+
|
|
506
|
+
## [0.23.0] - 2026-08-04
|
|
507
|
+
|
|
508
|
+
### Added
|
|
509
|
+
|
|
510
|
+
- `claude_agent`/`codex_agent`/`grok_agent`/`composer_agent`へ任意の
|
|
511
|
+
`throughline_source_session`を追加。指定時はローカルの`throughline >= 0.9.0`から対象sessionの
|
|
512
|
+
読み取り専用handoff contextをPTY作成前に取得し、context+固定区切り+必須の新ミッションを
|
|
513
|
+
そのまま初回promptにする。Throughline側のDB row所属、`merged_into`、batonは変更しない。
|
|
514
|
+
- portable forkは`launch_operation_id`と併用不可。Throughline不在、非zero、不正schema、空contextは
|
|
515
|
+
clean launchへfallbackせず、session残骸ゼロで明示失敗する。引数を省略した通常clean launchは不変。
|
|
516
|
+
|
|
517
|
+
### Verification
|
|
518
|
+
|
|
519
|
+
- Codex型TUI後送経路とGrok型argv経路で、contextがmissionより前へ一度だけ入ることをfocused testで固定。
|
|
520
|
+
外部Throughlineのmissing/nonzero/invalid schema/empty contextと、clean launch非依存も回帰した。
|
|
521
|
+
最終full regressionは335/335 green。
|
|
522
|
+
- main CI `30919026450`、tag CI `30919295270`とnpm provenance publish、GitHub Release+MCPB、
|
|
523
|
+
Registry workflow `30919622861`がsuccess。Official Registry 0.23.0はactive/latestで、global install済み。
|
|
524
|
+
- Codex source memoryをClaudeへportable forkする代表live smokeで、source marker `creates: true`と
|
|
525
|
+
mission marker `MISSION_OK`を同じ回答から回収。前後のDB ownershipは完全一致し、session残骸0。
|
|
526
|
+
|
|
527
|
+
## [0.22.0] - 2026-08-04
|
|
528
|
+
|
|
529
|
+
### Changed
|
|
530
|
+
|
|
531
|
+
- `claude_agent`/`codex_agent`/`grok_agent`/`composer_agent`を、直接CLI起動と同じ通常`HOME`、
|
|
532
|
+
vendor home、project/user/local設定、MCP、plugin、skill、permission、trust、memory、historyを使う
|
|
533
|
+
単一契約へ移行。旧fake home、private vendor home、設定snapshotはfallbackを残さず撤去した。
|
|
534
|
+
- aitermがlaunchごとに所有する範囲を、相関ID、完了event/cursor、bounded result、cleanup metadataへ限定。
|
|
535
|
+
既存`managed_completion:true`は後方互換fieldとして残すが、環境隔離ではなく完了相関を表す。
|
|
536
|
+
- 起動子へ`role=subagent`、親session、delegation depth、lineage、`delegation_allowed=true`を注入。
|
|
537
|
+
孫以降への再委譲は禁止せず、固定depth capも設けない。
|
|
538
|
+
|
|
539
|
+
### Fixed
|
|
540
|
+
|
|
541
|
+
- Grok/Composerは通常環境のMCP初期化中にも入力欄を描画するため、画面readyだけでpromptを早送信して
|
|
542
|
+
消失し得た。通常sessionの`mcp_init_completed` eventと現行model footer/入力欄の両方が揃うまで
|
|
543
|
+
dispatchしない。
|
|
544
|
+
|
|
545
|
+
### Verification
|
|
546
|
+
|
|
547
|
+
- Claude/Codex/Grok/Composerのdepth 1 live smokeで、sub-agent自己認識、親session、depth、lineage、
|
|
548
|
+
再委譲可を回収。Claude親がaitermの`claude_agent`を1回使うnested smokeで、孫のdepth 2と伸びた
|
|
549
|
+
lineageを実回収し、親子session残骸ゼロを確認。
|
|
550
|
+
- focused ready-gate回帰と関連testを追加。最終full regressionは329/329 green。公開package、CI/Registry
|
|
551
|
+
receiptはADR 0026へ固定。main CI `30880757338`、tag CI `30880912526`、npm provenance、GitHub Release、
|
|
552
|
+
Registry workflow `30880912702`がsuccess。npm registry由来の隔離installは0.22.0、3 bins、13 tools、
|
|
553
|
+
stderr 0で、4 launcherすべての共有契約文言を確認。この端末のglobal installをregistry版へ更新し、
|
|
554
|
+
global installed coreから実Claudeのsub-agent/depth 1/lineageを回収してdone。
|
|
555
|
+
|
|
556
|
+
## [0.21.4] - 2026-08-04
|
|
557
|
+
|
|
558
|
+
### Fixed
|
|
559
|
+
|
|
560
|
+
- managed Claudeの`--setting-sources ""`が通常hookだけでなくuser scope MCPまで不可視にし、fresh
|
|
561
|
+
sessionからAIShell等が使えなかった。`~/.claude.json`のtop-level `mcpServers`だけをlaunch単位の
|
|
562
|
+
0600 configへsnapshotして`--mcp-config`で渡す。通常hook/plugin/permissionとproject/local MCPの
|
|
563
|
+
隔離は維持し、破損/型不正configはsession作成前に残骸ゼロでfail loudする。
|
|
564
|
+
|
|
565
|
+
### Verification
|
|
566
|
+
|
|
567
|
+
- snapshot内容、0600 mode、argv、config欠落、破損、metadata path再束縛、close cleanupをfocused testで固定。
|
|
568
|
+
関連test 130/130、full regression 324/324がgreen。
|
|
569
|
+
|
|
570
|
+
## [0.21.3] - 2026-08-03
|
|
571
|
+
|
|
572
|
+
### Added
|
|
573
|
+
|
|
574
|
+
- `codex_agent`のtool descriptionへ、委譲時に`prompt`・`model`・`reasoning_effort`・
|
|
575
|
+
`cwd`・`write_scope`を揃えた完全な呼び出し例を追加。
|
|
576
|
+
|
|
577
|
+
### Fixed
|
|
578
|
+
|
|
579
|
+
- Codex完了検出の正本をmanaged Stop hookからCodex自身のrollout transcript
|
|
580
|
+
`task_complete.turn_id`へ変更。dispatch直前のtranscript byte境界を既存`event_cursor`で返し、
|
|
581
|
+
`aiterm-wait`と`agent_transcript`が同じ構造化記録からturnを帰属する。Codex managed homeには
|
|
582
|
+
Stop hookを生成せず、未使用になったCodex hook実装も配布物から撤去して、hook失敗・hook trust・
|
|
583
|
+
Node実行パスをCodex完了の依存から除去した。build前に既存`dist/*.js`を消すことで、旧hookが
|
|
584
|
+
dirty workspaceのtarballやMCPBへ残留する経路も閉じた。
|
|
585
|
+
- follow-up dispatchも毎回TUI idleを確認してから完了境界を切り、同じcursorへ複数turnが
|
|
586
|
+
帰属する経路を閉じた。後発sub-agent rolloutはroot TUIの完了へ誤帰属しない。
|
|
587
|
+
- Claude/Grokのmanaged Stop hookは、長寿命server起動時の`process.execPath`(Homebrew Cellarの
|
|
588
|
+
版付き実体)を設定へ焼き付けず、hook実行時に継承`PATH`から`node`を解決する。Node更新で
|
|
589
|
+
旧Cellar実体が消えた後の`exit 127`を防ぐ。
|
|
590
|
+
- `write_scope`指定時だけMCP structured launch receiptから`write_scope`と
|
|
591
|
+
`write_scope_enforcement`が欠落していた逆条件を修正。Codex/Grok/Composerの指定時と省略時を
|
|
592
|
+
実MCP境界で回帰化し、宣言値・実効性の表示と既存receipt shapeを両立する。
|
|
593
|
+
- Grok/Composerの`write_scope`回帰が開発端末の実Grok CLIを暗黙利用し、clean CI runnerでは
|
|
594
|
+
CLI不在で失敗する非hermetic fixtureを偽binへ固定した。
|
|
595
|
+
- Windowsのruntime-error-storeがlock ownerのPID再利用を防ぐprocess start identity取得だけ
|
|
596
|
+
PowerShellを1秒で打ち切り、clean runnerのcold startで失敗する不整合を修正。DACL適用と同じ
|
|
597
|
+
設定済みWindows command timeout(既定5秒)へ統一した。
|
|
598
|
+
|
|
599
|
+
### Verification
|
|
600
|
+
|
|
601
|
+
- full regression 322/322。main CI `30813089848`、tag CI/npm provenance publish
|
|
602
|
+
`30813318513`、Official MCP Registry workflow `30813724499`がsuccess。
|
|
603
|
+
- npm由来の隔離installとglobal installでversion 0.21.3、3 bins、13 tools、stderr 0、
|
|
604
|
+
Codex launcherの5引数完全例、廃止Codex hook非同梱を確認。公開receiptは
|
|
605
|
+
[ADR 0023](https://github.com/kitepon/aiterm-mcp/blob/main/docs/adr/0023-release-0.21.3-acceptance.md)に固定した。
|
|
606
|
+
|
|
607
|
+
## [0.21.2] - 2026-08-03
|
|
608
|
+
|
|
609
|
+
### Release status
|
|
610
|
+
|
|
611
|
+
- Git tagのCIでWindows 20のprocess start identity取得が1秒上限を超え、publish jobは実行前にskipされた。
|
|
612
|
+
npm、GitHub Release、Official MCP Registryへは公開せず、tagを動かさず0.21.3で置き換える。
|
|
613
|
+
|
|
614
|
+
## [0.21.1] - 2026-08-03
|
|
615
|
+
|
|
616
|
+
### Release status
|
|
617
|
+
|
|
618
|
+
- Git tagのCIが上記非hermetic fixtureで失敗し、publish jobは実行前にskipされた。npm、GitHub Release、
|
|
619
|
+
Official MCP Registryへは公開せず、tagを動かさずfixtureを0.21.2で修正した。0.21.2もpublish前に
|
|
620
|
+
Windows gateで止まったため、公開成果は0.21.3へ継承する。
|
|
621
|
+
|
|
622
|
+
## [0.21.0] - 2026-08-02
|
|
623
|
+
|
|
624
|
+
### Added
|
|
625
|
+
|
|
626
|
+
- `codex_agent`、`grok_agent`、`composer_agent`へ任意の`write_scope`能力宣言を追加。
|
|
627
|
+
指定値はlaunch receipt、per-launch metadata、`pty_list`へ保存する。Codexの
|
|
628
|
+
`write_scope:"read-only"`はCLIの`--sandbox read-only`で実効禁止する。Grok/Composerと
|
|
629
|
+
Codexのパス説明は対応するsandbox/allowlist CLI機構がないため、
|
|
630
|
+
`write_scope_enforcement:"declaration_only_unsupported"`で宣言記録だけであることを明示する。
|
|
631
|
+
|
|
632
|
+
### Unchanged
|
|
633
|
+
|
|
634
|
+
- `write_scope`省略時のagent launcher argv、launch receipt、metadata表示は従来どおり。
|
|
635
|
+
|
|
636
|
+
## [0.20.3] - 2026-08-01
|
|
637
|
+
|
|
638
|
+
### Fixed
|
|
639
|
+
|
|
640
|
+
- managed Claude/Fableの新規起動は、tmux sessionを作る前に同じCLIの
|
|
641
|
+
`auth status --json`を検証し、正常な共有認証だけを複数sessionから再利用する。
|
|
642
|
+
未認証・壊れた応答・失敗exit・timeoutは残骸を作らず明示失敗し、各sessionが
|
|
643
|
+
`/login`へ流れて共有credentialを奪い合う状態を作らない。
|
|
644
|
+
- managed Claude内のexact `/login`・`/logout`は通常dispatchとforce送信の双方で
|
|
645
|
+
副作用前に拒否する。認証の変更は通常端末で一度だけ行い、aitermはvendor所有の
|
|
646
|
+
credentialを複製・symlink・lock・自動更新しない。
|
|
647
|
+
- Stop hookのdone event公開直後にactive marker削除だけが遅れるraceでは、同じmarkerより
|
|
648
|
+
新しいresultと相関eventが揃った場合だけ回収側が短時間settleし、完了済みのexact resultを
|
|
649
|
+
誤ってactive扱いしない。
|
|
650
|
+
|
|
651
|
+
### Verification
|
|
652
|
+
|
|
653
|
+
- 関連test 99/99、release full regression 317/317、実Claude Code v2.1.220/Fable 5 low effortを独立process
|
|
654
|
+
3本×2波(計6 process)で同時・反復起動し、追加loginなしで全件done、exact result回収、close。
|
|
655
|
+
|
|
656
|
+
## [0.20.2] - 2026-07-26
|
|
657
|
+
|
|
658
|
+
### Fixed
|
|
659
|
+
|
|
660
|
+
- npmがauthor名の丸括弧をURL記法として再解釈し、指定したXプロフィールを
|
|
661
|
+
`kitepon.dev`へ置き換えたため、author名を`Quo / クオ at kitepon.dev`へ訂正した。
|
|
662
|
+
これにより作者名・所属ブランド・Xへのリンクを同時に保持する。
|
|
663
|
+
|
|
664
|
+
### Unchanged
|
|
665
|
+
|
|
666
|
+
- 0.20.1のREADME、検索語、短い説明、14ファイルのnpm tarball、およびruntime挙動は不変。
|
|
667
|
+
|
|
668
|
+
## [0.20.1] - 2026-07-26
|
|
669
|
+
|
|
670
|
+
### Changed
|
|
671
|
+
|
|
672
|
+
- npmの短い説明を、Claude CodeからCodex CLIの対話TUI(スラッシュコマンドや
|
|
673
|
+
`$imagegen`を含む)を操作できる差別化点が先頭で伝わる文へ更新した。
|
|
674
|
+
- npm authorを`Quo / クオ (kitepon.dev)`とXプロフィールへ結び、検索語へ
|
|
675
|
+
`codex-cli`、`terminal-mcp`、`persistent-terminal`、`interactive-cli`を追加した。
|
|
676
|
+
- 現行README(npm版・週間ダウンロード数バッジ、`npx` quickstart、
|
|
677
|
+
Claude Code / Claude Desktop / Cursor設定、作者帰属)をnpmへ反映するため再公開した。
|
|
678
|
+
- Official MCP RegistryとMCPBの説明・版・作者帰属を同じ公開面へ同期した。
|
|
679
|
+
- npmの`files`を実行に必要な`dist/*.js`へ限定し、Smithery向けの旧版bundleや
|
|
680
|
+
展開済み依存をnpm利用者へ重複配布しないようにした。
|
|
681
|
+
|
|
682
|
+
### Unchanged
|
|
683
|
+
|
|
684
|
+
- MCPの13ツール、3つのbin、stdio transport、PTY/agent runtimeの挙動は
|
|
685
|
+
0.20.0から変更しない。公開面だけのpatch release。
|
|
686
|
+
|
|
687
|
+
## [0.20.0] - 2026-07-26
|
|
688
|
+
|
|
689
|
+
### Added
|
|
690
|
+
|
|
691
|
+
- `aiterm-wait` の outcome に `running`(まだ終わっていない)を追加。exit code は 5。
|
|
692
|
+
`--timeout 0` は以前から「待たずに一度だけ観測する照会」として動いていたが、未完了を
|
|
693
|
+
`timeout`(既定600秒待って終わらなかった)と同じ語で返していたため、軽い照会の答えが
|
|
694
|
+
失敗・異常として親へ届いていた。これで「投げる → 自分の作業をする → 一度だけ様子を見る →
|
|
695
|
+
まだなら作業へ戻る」が語彙として表現できる(ADR 0018)。
|
|
696
|
+
|
|
697
|
+
### Changed
|
|
698
|
+
|
|
699
|
+
- outcome → exit code の対応表を型で網羅強制。語を足して表を直し忘れると `undefined` から
|
|
700
|
+
exit 0 になり、未完了が完了として親へ届く。その取りこぼしを compile error で止める。
|
|
701
|
+
|
|
702
|
+
### Unchanged
|
|
703
|
+
|
|
704
|
+
- 1秒以上を指定した待機の未完了は従来どおり `timeout` / exit 3。待ち方の意味は変えない。
|
|
705
|
+
- `done`=0 / `timeout`=3 / `closed`=4 / エラー=1、MCP の公開 tool と schema も変更なし。
|
|
706
|
+
- 照会は receipt・tool description で宣伝しない。押し込み機構を持たない親向けの逃げ道として
|
|
707
|
+
README にだけ置き、ADR 0017 で排した「親が子のお守りをする」誘惑を戻さない。
|
|
708
|
+
|
|
709
|
+
## [0.19.3] - 2026-07-26
|
|
710
|
+
|
|
711
|
+
### Changed
|
|
712
|
+
|
|
713
|
+
- dispatch/起動時 prompt 送信後の案内を「投げっぱなし」正典へ反転した。第一文で
|
|
714
|
+
「投げっぱなしでよい=ここで待たない」を宣言し、待ち方は後段へ置き、foreground 実行の
|
|
715
|
+
禁止を案内本文へ含める。従来は「即返る」の直後に完了待ち手順が続き、dispatch→wait が
|
|
716
|
+
一続きの手順に見えて親がブロックする使い方へ流れていた(ADR 0017)。
|
|
717
|
+
- 完了待ちの起動形を親ホスト別に名指しするようにした。MCP initialize の `clientInfo.name`
|
|
718
|
+
が `claude-code` の時は receipt に `Bash(command: ..., run_in_background: true)` を出す。
|
|
719
|
+
取れない/未知のホストは汎用の非ブロック指示へ落ちる。抽象名詞の
|
|
720
|
+
「ホストのバックグラウンドタスクとして実行」だけでは親が foreground 実行へ落ちるため。
|
|
721
|
+
- 未完了 session へ触れた時の復旧案内も同じ文型へ揃えた。取りこぼしゼロの `--cursor 0` は維持する。
|
|
722
|
+
|
|
723
|
+
### Unchanged
|
|
724
|
+
|
|
725
|
+
- `aiterm-wait` の既定 timeout・exit 契約・outcome 語彙・公開 schema・完了判定は変更なし。
|
|
726
|
+
待つ主体は waiter プロセスであって親ではない、が本変更の分界。
|
|
727
|
+
|
|
728
|
+
## [0.19.2] - 2026-07-20
|
|
729
|
+
|
|
730
|
+
### Fixed
|
|
731
|
+
- Native Windows factory diagnostics now report `session_count: null` when
|
|
732
|
+
the WSL-backed tmux server is not running and `pty_list.status` is
|
|
733
|
+
`not_applicable`. This restores the published status/count invariant and
|
|
734
|
+
lets strict factory adapters distinguish an absent session set from a
|
|
735
|
+
verified empty list.
|
|
736
|
+
|
|
737
|
+
## [0.19.1] - 2026-07-19
|
|
738
|
+
|
|
739
|
+
### Fixed
|
|
740
|
+
- Ordinary PTY sends no longer let a pager or REPL started by an earlier line
|
|
741
|
+
consume the beginning of later lines from the same multiline payload. When
|
|
742
|
+
the foreground process is a POSIX shell, sanitized multiline text is encoded
|
|
743
|
+
as one newline-free `eval` input, so the shell owns the complete script before
|
|
744
|
+
execution begins. Single-line input, raw byte sends, and non-shell frontends
|
|
745
|
+
keep their existing direct-paste behavior.
|
|
746
|
+
|
|
747
|
+
## [0.19.0] - 2026-07-19
|
|
748
|
+
|
|
749
|
+
### Added
|
|
750
|
+
- New `claude_approval` tool for managed Claude permission prompts. `inspect`
|
|
751
|
+
binds the currently visible `Do you want to proceed?` UI to the active
|
|
752
|
+
operation and a SHA-256 screen digest; `respond` relays only
|
|
753
|
+
`approve_once` or `deny` while that same operation and digest remain
|
|
754
|
+
current. Anonymous `pty_send` turns are supported with a null operation ID.
|
|
755
|
+
- Approval decisions are recorded as an owner-only, prompt-free structured
|
|
756
|
+
receipt and cleaned up with the managed session.
|
|
757
|
+
|
|
758
|
+
### Fixed
|
|
759
|
+
- Managed Claude turns no longer deadlock when Claude Code requests a normal
|
|
760
|
+
permission confirmation. Previously active-operation protection rejected
|
|
761
|
+
raw `pty_send(force:true)` and every `pty_key` except `C-c`, leaving no
|
|
762
|
+
supported way to answer the UI and therefore no Stop event.
|
|
763
|
+
- The documented `force:true` manual-intervention escape now states its real
|
|
764
|
+
boundary: it does not bypass an active managed-Claude operation. Arbitrary
|
|
765
|
+
text, persistent-allow choices, unknown prompt layouts, operation mismatch,
|
|
766
|
+
and screens changed after inspection fail explicitly.
|
|
767
|
+
|
|
768
|
+
### Changed
|
|
769
|
+
- The public MCP surface is now 13 tools. Package, lockfile, server manifest,
|
|
770
|
+
English/Japanese README, contributor guide, design docs, and release
|
|
771
|
+
metadata are synchronized at `0.19.0`.
|
|
772
|
+
|
|
773
|
+
## [0.18.2] - 2026-07-18
|
|
774
|
+
|
|
775
|
+
### Fixed
|
|
776
|
+
- Managed Codex homes now snapshot-copy `agents/*.toml` custom-role
|
|
777
|
+
definitions from the source `CODEX_HOME`. Symlinked definitions are resolved
|
|
778
|
+
into private regular-file copies, so `codex_agent` sessions can discover the
|
|
779
|
+
same custom roles without sharing mutable sessions, caches, or other home
|
|
780
|
+
state. A missing or empty source `agents/` directory remains valid.
|
|
781
|
+
- Hook trust state is deliberately not copied as a separate credential/state
|
|
782
|
+
artifact: aiterm's launch-owned Stop hook already uses
|
|
783
|
+
`--dangerously-bypass-hook-trust` for that process. Project directory trust
|
|
784
|
+
remains a separate safety gate and continues to come from the private
|
|
785
|
+
`config.toml` snapshot; an untrusted cwd is not auto-approved.
|
|
786
|
+
|
|
787
|
+
## [0.18.1] - 2026-07-18
|
|
788
|
+
|
|
789
|
+
### Fixed
|
|
790
|
+
- The `aiterm-wait` / agent-metadata "not a managed session" error still
|
|
791
|
+
suggested launching with `codex_agent(agent_done:true)` — an argument
|
|
792
|
+
removed in v0.16 (launchers are always managed). It now points to the
|
|
793
|
+
launchers themselves.
|
|
794
|
+
|
|
795
|
+
## [0.18.0] - 2026-07-18
|
|
796
|
+
|
|
797
|
+
### Added
|
|
798
|
+
- **Submit-strand observation** (`submit_residue`, additive nullable). Field
|
|
799
|
+
report: a managed Codex child hung during MCP initialize; the initial prompt
|
|
800
|
+
stayed **unsubmitted in the composer** for 2h18m while the TUI kept showing
|
|
801
|
+
"Working", and nothing surfaced it. After every agent dispatch (initial
|
|
802
|
+
prompt and follow-up), aiterm now runs a bounded screen poll for the sent
|
|
803
|
+
text's tail lingering in the composer region (below the last input-marker
|
|
804
|
+
line). `aiterm.pty-send-result.v1`, `aiterm.agent-launch-result.v1`,
|
|
805
|
+
`aiterm.claude-operation-result.v1` (issue) and the
|
|
806
|
+
dispatch hint carry the observation: `true` = residue confirmed (submit
|
|
807
|
+
likely did not take effect; the hint explains recovery via
|
|
808
|
+
`pty_key Enter` / `Escape`), `false` = no residue observed (not a proof of
|
|
809
|
+
submission), `null` = not applicable / undecidable. Positive evidence only —
|
|
810
|
+
no auto-retry, no silent fallback.
|
|
811
|
+
- Agent prompt injection now pastes with tmux `paste-buffer -p` (bracketed
|
|
812
|
+
paste). tmux negotiates: panes that requested bracketed-paste mode (the
|
|
813
|
+
vendor TUIs) receive the text wrapped in `ESC[200~/201~` — per paste chunk
|
|
814
|
+
(macOS splits long prompts into 256-byte chunks, so a long prompt arrives as
|
|
815
|
+
several consecutive bracketed pastes) — which hardens pastes against
|
|
816
|
+
mid-word key-interpretation corruption and
|
|
817
|
+
dropped submits; panes that did not request it receive the text unchanged.
|
|
818
|
+
Regular shell `pty_send` behaviour is untouched. Byte-level regression fixed
|
|
819
|
+
in `test/core-tmux.test.mjs`.
|
|
820
|
+
|
|
821
|
+
### Changed
|
|
822
|
+
- The pre-initial-prompt TUI ready gate no longer counts a Codex/Claude screen
|
|
823
|
+
as ready while it shows a busy indicator ("esc to interrupt"), closing the
|
|
824
|
+
window where the initial prompt was pasted into a TUI whose startup work
|
|
825
|
+
(e.g. MCP initialize) was still running behind a visible composer.
|
|
826
|
+
Grok/Composer keep the previous gate (no captured busy-string evidence yet).
|
|
827
|
+
|
|
828
|
+
### Fixed
|
|
829
|
+
- Removed stale v0.15-era guidance from six error/hint messages that still
|
|
830
|
+
told the caller to retry `pty_send(wait:"agent_done")` — an argument that no
|
|
831
|
+
longer exists since v0.16. They now point to the actual v0.17 procedure
|
|
832
|
+
(`aiterm-wait --cursor 0` for initial-prompt completion — cursor 0 is safe
|
|
833
|
+
because the event file is per-launch, and omitting `--cursor` would start at
|
|
834
|
+
the waiter's EOF and could skip an already-written done event — plain
|
|
835
|
+
`pty_send` dispatch, `pty_open` for manual operation).
|
|
836
|
+
|
|
837
|
+
## [0.17.0] - 2026-07-18
|
|
838
|
+
|
|
839
|
+
### Changed (BREAKING)
|
|
840
|
+
- `aiterm-wait` exit codes now mirror the receipt's `outcome` so exit status
|
|
841
|
+
alone can never be misread as completion: `0` = `done`, `3` = `timeout`
|
|
842
|
+
(turn **not** finished; default `--timeout` is 600 s), `4` = `closed`,
|
|
843
|
+
`1` = error. Previously every observed outcome exited `0`. The receipt's
|
|
844
|
+
`outcome` remains authoritative.
|
|
845
|
+
|
|
846
|
+
### Added
|
|
847
|
+
- `aiterm.agent-launch-result.v1` gains two additive nullable fields:
|
|
848
|
+
`event_cursor` and `wait_command` (a copy-pasteable
|
|
849
|
+
`aiterm-wait --session <id> --cursor <n>`), non-null exactly when the launch
|
|
850
|
+
carried an initial `prompt` (a turn is in flight from launch). Durable
|
|
851
|
+
callers no longer need to discover the completion procedure from other
|
|
852
|
+
tools' descriptions.
|
|
853
|
+
|
|
854
|
+
### Fixed
|
|
855
|
+
- Tool descriptions, launch/dispatch hints, and not-yet-complete errors no
|
|
856
|
+
longer imply that an `aiterm-wait` exit means completion. All four launcher
|
|
857
|
+
descriptions now state the completion procedure; `pty_read(agent_transcript)`
|
|
858
|
+
"not complete yet" errors point to the `aiterm-wait` background run instead
|
|
859
|
+
of leaving the caller to poll.
|
|
860
|
+
|
|
861
|
+
## [0.16.0] - 2026-07-18
|
|
862
|
+
|
|
863
|
+
### Changed (BREAKING)
|
|
864
|
+
- **The blocking wait surface is gone.** A parent agent never blocks on aiterm:
|
|
865
|
+
- `pty_send` no longer accepts `wait` / `timeout` / `screen` / `lines` /
|
|
866
|
+
`operation_id`. Sending to an agent session is now automatically a
|
|
867
|
+
**dispatch**: the TUI ready gate and submit separation still run, the call
|
|
868
|
+
returns immediately, and the result envelope
|
|
869
|
+
(`aiterm.pty-send-result.v1`, `mode: "sent" | "agent_dispatch"`) carries an
|
|
870
|
+
`event_cursor` — the event-file boundary taken just before the send.
|
|
871
|
+
Completion is observed by running
|
|
872
|
+
`aiterm-wait --session <id> --cursor <event_cursor>` as a host background
|
|
873
|
+
task (its exit is the push notification); results are collected with
|
|
874
|
+
`pty_read(agent_transcript: true)` or `claude_turn recover` as before.
|
|
875
|
+
`force: true` bypasses dispatch for manual intervention on non-Claude
|
|
876
|
+
agent sessions. An active managed-Claude turn remains protected; v0.19.0
|
|
877
|
+
adds the dedicated approval relay for its permission UI.
|
|
878
|
+
- `claude_turn issue` no longer takes `timeout`; it is dispatch-only and
|
|
879
|
+
returns `accepted` immediately. Recovery semantics are unchanged.
|
|
880
|
+
- Launchers (`claude_agent` / `codex_agent` / `grok_agent` /
|
|
881
|
+
`composer_agent`) no longer accept `agent_done` / `wait` / `timeout` /
|
|
882
|
+
`screen` / `lines`. **Every launch is managed** (Stop-hook completion
|
|
883
|
+
detection installed); an initial `prompt` is submitted through the ready
|
|
884
|
+
gate and the launcher returns without waiting. For raw manual TUI driving,
|
|
885
|
+
open a plain `pty_open` session and start the vendor CLI yourself.
|
|
886
|
+
- `aiterm-wait` gained `--cursor <n>` so the waiter can start after the
|
|
887
|
+
dispatch without missing a completion (start-order independent for every
|
|
888
|
+
vendor, not just Claude's `--operation`).
|
|
889
|
+
|
|
890
|
+
### Fixed
|
|
891
|
+
- tmux is now always spawned with a UTF-8 `LC_CTYPE` when the effective locale
|
|
892
|
+
is unset or plain `C`/`POSIX` (common for GUI-launched MCP clients). A tmux
|
|
893
|
+
server started under a C locale corrupts multibyte input — dropped and
|
|
894
|
+
reordered bytes in `send-keys`/paste (Japanese prompts garbled) — and a C
|
|
895
|
+
locale client sanitizes tabs in `list-sessions -F` output to `_`, which
|
|
896
|
+
silently broke the `pty_list` agent column. Explicit non-C locales (including
|
|
897
|
+
`C.UTF-8`) are respected; a stale `LC_ALL=C` is dropped so the injection can
|
|
898
|
+
take effect. Note: an already-running tmux server keeps its startup locale
|
|
899
|
+
until restarted.
|
|
900
|
+
|
|
901
|
+
## [0.15.0] - 2026-07-18
|
|
902
|
+
|
|
903
|
+
### Added
|
|
904
|
+
- Interactive Claude Code sessions now use the same persistent, user-visible
|
|
905
|
+
PTY model as the other agent launchers. Managed turns correlate a durable
|
|
906
|
+
caller operation ID through dispatch, Stop result, timeout recovery, and
|
|
907
|
+
transcript read without re-sending the prompt.
|
|
908
|
+
- `pty_close` now returns an `aiterm.pty-close-result.v1` structured receipt
|
|
909
|
+
with `closed` or `already_closed`. Retrying the same session ID after an MCP
|
|
910
|
+
response loss therefore recovers the terminal close outcome exactly.
|
|
911
|
+
- New `aiterm-wait` binary for fire-and-forget ("B-style") orchestration: it
|
|
912
|
+
observes the vendor Stop-hook completion event as a pure reader and exits with
|
|
913
|
+
a one-line `aiterm.agent-wait-result.v1` receipt (`done` / `timeout` /
|
|
914
|
+
`closed`). Run it as a parent harness background task so a completion becomes a
|
|
915
|
+
process exit — a harness that re-invokes its agent on background-task exit
|
|
916
|
+
(Claude Code) is woken with zero polling, and the parent tool call never
|
|
917
|
+
blocks. The waiter takes no locks and never writes session or dispatch state,
|
|
918
|
+
so any number run beside the MCP server and beside each other; `--operation`
|
|
919
|
+
makes Claude recovery start-order-independent. Backed by the exported
|
|
920
|
+
`observeAgentDone()` core primitive. A Codex parent has no equivalent
|
|
921
|
+
wake-on-completion hook yet (upstream openai/codex#17543 / #18056), so it keeps
|
|
922
|
+
using the blocking wait or manual recovery.
|
|
923
|
+
|
|
924
|
+
## [0.12.3] - 2026-07-14
|
|
925
|
+
|
|
926
|
+
### Fixed
|
|
927
|
+
- Grok/Composer `agent_done` launches now pass the validated canonical OAuth
|
|
928
|
+
file through vendor-owned `GROK_AUTH_PATH`. The per-launch isolated homes no
|
|
929
|
+
longer symlink auth/lock files that Grok's atomic replacement can detach from
|
|
930
|
+
the real credential store; refresh and browser approval now persist to the
|
|
931
|
+
normal credential without weakening hook/config isolation.
|
|
932
|
+
- PTY text delivery now loads uniquely named tmux buffers through stdin. macOS
|
|
933
|
+
uses UTF-8-safe 256-byte paste chunks to avoid the observed long-input PTY
|
|
934
|
+
truncation, while Linux and WSL keep a single bounded paste. Per-session
|
|
935
|
+
cross-process locks prevent concurrent sends from interleaving, inputs above
|
|
936
|
+
64 KiB fail before any bytes are sent, and partial failures never press Enter
|
|
937
|
+
automatically. A stale send lock fails closed until the session is stopped,
|
|
938
|
+
avoiding unsafe automatic-recovery ABA races. Runtime capability discovery preserves exact control bytes
|
|
939
|
+
and line feeds across older tmux (without `paste-buffer -S`) and newer tmux
|
|
940
|
+
(where `-S` disables the new `vis(3)` conversion).
|
|
941
|
+
- Runtime error-store contention no longer misclassifies ordinary hostile
|
|
942
|
+
error text as a replaced lock entry; only typed disappearance/replacement
|
|
943
|
+
races are skipped, while malformed ownership/mode/link state still fails
|
|
944
|
+
loudly.
|
|
945
|
+
|
|
946
|
+
## [0.12.2] - 2026-07-13
|
|
947
|
+
|
|
948
|
+
### Added
|
|
949
|
+
- `diagnostics`: a read-only, machine-readable factory diagnostic that reports
|
|
950
|
+
package version, MCP call readiness, a privacy-safe PTY-list summary, and
|
|
951
|
+
optional Codex/Grok launcher availability. It never launches a PTY or agent,
|
|
952
|
+
and excludes paths, environment values, credentials, command text, terminal
|
|
953
|
+
output, and raw logs. Optional unset dependencies report `not_applicable`;
|
|
954
|
+
indeterminate probes report `unverified`.
|
|
955
|
+
- Product-owned local runtime error aggregation and the `aiterm-runtime-errors`
|
|
956
|
+
snapshot/ack/resolve/reopen CLI. Collection is explicit opt-in through the
|
|
957
|
+
canonical dotagents `collection.enabled` JSON boolean; the store is offline,
|
|
958
|
+
accepts only fixed error codes/templates, preserves unacknowledged records,
|
|
959
|
+
and exposes only bounded privacy-safe status through `diagnostics`.
|
|
960
|
+
MCP-side collection/diagnostics run in timeout-bounded child processes;
|
|
961
|
+
persisted input is exact-validated with fingerprint recomputation; locks bind
|
|
962
|
+
PID/start identity/token; permissions are revalidated; and typed ownership
|
|
963
|
+
prevents lower PTY failures from being counted again as launcher failures.
|
|
964
|
+
- Collection is disabled by default and the local store performs no network I/O.
|
|
965
|
+
Public commit `239e7e4`, provenance CI `29245251184`, npm `latest`, tag /
|
|
966
|
+
GitHub Release, MCP Registry workflow `29245462227`, and a registry-derived
|
|
967
|
+
isolated install were verified.
|
|
968
|
+
|
|
969
|
+
### Fixed
|
|
970
|
+
- `aiterm-runtime-errors` now recognizes npm's POSIX bin symlink as its direct
|
|
971
|
+
entrypoint, preventing a successful empty response from packed/global installs.
|
|
972
|
+
|
|
973
|
+
## [0.12.1] - 2026-07-11
|
|
974
|
+
|
|
975
|
+
Hardening sweep that clears the audit's remaining low-priority notes
|
|
976
|
+
(`docs/11` section C — now fully consumed). Regression suite 203 → 205.
|
|
977
|
+
|
|
978
|
+
### Fixed
|
|
979
|
+
- Stop hooks now check the `writeSync` return value when appending an event
|
|
980
|
+
line; a short write (e.g. ENOSPC) is truncated back to the pre-write size
|
|
981
|
+
and reported, so a fragment can never corrupt the next event line.
|
|
982
|
+
- `latestAgentDoneEvent` no longer goes silently blind when the events file
|
|
983
|
+
exceeds 1 MB: it now reads a bounded 64 KB tail (dropping the first partial
|
|
984
|
+
line), so `agent_event_seen` / `last_turn_id` metadata stays live on
|
|
985
|
+
long-lived agent sessions — and mid-size files are read more cheaply than
|
|
986
|
+
before (the old path read the whole file up to 1 MB on every read).
|
|
987
|
+
- Non-agent sessions no longer pay the agent-metadata directory probe on
|
|
988
|
+
every `pty_read`: a 2-second in-process negative cache (absence-only,
|
|
989
|
+
read-suffix path only, invalidated on `openAgent`/`closeSession`/`killAll`)
|
|
990
|
+
skips the redundant filesystem work.
|
|
991
|
+
|
|
992
|
+
## [0.12.0] - 2026-07-11
|
|
993
|
+
|
|
994
|
+
Full-repo adversarial audit (multi-agent find → adversarial refutation → live
|
|
995
|
+
smoke) plus the fixes and one feature that survived it. Design record and
|
|
996
|
+
rejection ledger: `docs/archive/11_audit-2026-07-11.md`; transcript-read design:
|
|
997
|
+
`docs/archive/12_agent-transcript-read-plan.md`. Regression suite 183 → 203.
|
|
998
|
+
|
|
999
|
+
### Added
|
|
1000
|
+
- `pty_read({ agent_transcript: true })` recovers an agent session's most
|
|
1001
|
+
recently completed turn's final assistant message, in plain text, from the
|
|
1002
|
+
vendor's structured session transcript (JSONL under the managed home). This
|
|
1003
|
+
fixes the case where a long agent answer is truncated by the `wait:
|
|
1004
|
+
"agent_done"` screen tail (pane height ≈ 24 lines). Codex joins on the Stop
|
|
1005
|
+
hook `turn_id`; Grok/Composer take the assistant rows after the last
|
|
1006
|
+
non-synthetic user row. The extracted text is bounded through the normal
|
|
1007
|
+
reduction pipeline. Mutually exclusive with `screen`/`full`/`rtk`/
|
|
1008
|
+
`line_range`/`wait` (`lines` is allowed). Missing transcript / non-agent
|
|
1009
|
+
session / no extractable message are explicit errors, never a silent empty.
|
|
1010
|
+
- `pty_list` now appends agent metadata (`agent=<kind> agent_done=true`, plus
|
|
1011
|
+
`vendor_session_id` once bound) to agent session rows, so a resumable
|
|
1012
|
+
Codex/Grok/Composer session is distinguishable after an MCP server restart.
|
|
1013
|
+
Plain shell rows are unchanged.
|
|
1014
|
+
- `codex_agent` launch responses now surface the inherited managed-config
|
|
1015
|
+
reality: `managed config: mcp_servers <N> 個継承 / approval_policy=… /
|
|
1016
|
+
sandbox_mode=… / hook trust bypass 有効`. The inheritance itself is the
|
|
1017
|
+
intended design (the child matches the terminal's Codex behavior); this only
|
|
1018
|
+
makes its consequences visible so a "review-only" child isn't silently
|
|
1019
|
+
full-access.
|
|
1020
|
+
|
|
1021
|
+
### Fixed
|
|
1022
|
+
- Agent `wait` file locks now reclaim stale locks. A lock left behind by a
|
|
1023
|
+
crashed/killed waiter (the pid recorded in the lock is dead, or the lock is
|
|
1024
|
+
old and unreadable) no longer rejects `wait:"agent_done"` on that session
|
|
1025
|
+
forever; the live-pid check (`process.kill(pid, 0)`) reclaims dead locks and
|
|
1026
|
+
fails safe (rejects) when liveness is indeterminate. `closeSession`/`killAll`
|
|
1027
|
+
now also honor a live cross-process wait lock (previously only the in-process
|
|
1028
|
+
set), with the holder pid in the message. Agent metadata writes are now
|
|
1029
|
+
atomic (temp + rename).
|
|
1030
|
+
- `reduceOutput` now bounds over-long single lines (head + tail with a restore
|
|
1031
|
+
hint), so a few huge lines — e.g. a full-screen TUI's absolute-cursor repaint
|
|
1032
|
+
stream — no longer slip past the line-count fold and blow the response token
|
|
1033
|
+
budget. Line count and order are preserved (the `line_range` domain is
|
|
1034
|
+
unchanged); `raw: true` is untouched.
|
|
1035
|
+
- Reading from a mid-multibyte offset (full/range 8 MB truncation and the
|
|
1036
|
+
incremental path) no longer emits a leading U+FFFD; the skipped bytes are
|
|
1037
|
+
accounted into the next offset.
|
|
1038
|
+
- The pytest reducer returns `null` (falls back to generic) when the output has
|
|
1039
|
+
no pytest evidence, instead of replacing an unrelated command's output with a
|
|
1040
|
+
fabricated "Pytest: No tests collected". `classify` is unchanged, so genuine
|
|
1041
|
+
pytest wrappers still reduce; the six golden fixtures stay byte-exact. Empty
|
|
1042
|
+
input now yields `null` too.
|
|
1043
|
+
- The destructive-command tripwire now absorbs a `--` option terminator
|
|
1044
|
+
(`rm -rf -- /` was previously waved through), and `pty_send({ rtk: true })`
|
|
1045
|
+
re-checks the tripwire against the post-`rtk`-rewrite text before sending.
|
|
1046
|
+
- `pty_read` with an inverted `line_range` (`"5:3"`) is now an explicit error
|
|
1047
|
+
instead of a silent empty result.
|
|
1048
|
+
- Quiescence detection no longer mis-attributes a completion when output
|
|
1049
|
+
arrives during the foreground-shell probe: the size samples are from the
|
|
1050
|
+
past while the `pane_current_command` check is now, and output landing in
|
|
1051
|
+
that gap used to be returned as `via quiescent` even though a `mark`
|
|
1052
|
+
sentinel (or `until` match) was already in the log. The stability window is
|
|
1053
|
+
now re-validated (re-stat) after the probe; if the log grew, the loop
|
|
1054
|
+
re-runs and the sentinel/`until` claims the completion. Found by CI on slow
|
|
1055
|
+
macOS runners (the B1 regression test), where the `sleep 0.6` margin over
|
|
1056
|
+
the 0.5 s quiescence window was routinely blown.
|
|
1057
|
+
- The `force` / `mark` argument descriptions now state their full effect
|
|
1058
|
+
(`force` also lifts the initial-prompt mixing guard; `mark` needs `enter` to
|
|
1059
|
+
actually run the sentinel). Codex managed-config pin overrides now also match
|
|
1060
|
+
quoted TOML keys.
|
|
1061
|
+
|
|
1062
|
+
### Tests
|
|
1063
|
+
- Added `tools/call` dispatch coverage to the smoke test (unknown tool, bad
|
|
1064
|
+
args, inverted `line_range` — all `isError`), plus regressions for wait-lock
|
|
1065
|
+
reclamation, transcript recovery (both vendor shapes), the line/byte guards,
|
|
1066
|
+
and the tripwire gaps.
|
|
1067
|
+
|
|
1068
|
+
## [0.11.0] - 2026-07-11
|
|
1069
|
+
|
|
1070
|
+
### Added
|
|
1071
|
+
- Agent launchers accept a `model` argument. `codex_agent` passes it as `-m`
|
|
1072
|
+
and, when `agent_done: true` creates a managed `CODEX_HOME`, explicitly
|
|
1073
|
+
passed `model` / `reasoning_effort` values also rewrite the corresponding
|
|
1074
|
+
top-level pins in the managed `config.toml` copy, so terminal pins (for
|
|
1075
|
+
example an `ultra` effort pin, which enables proactive multi-agent
|
|
1076
|
+
delegation) no longer silently leak into interactive children.
|
|
1077
|
+
`grok_agent` / `composer_agent` use it to override `--model`.
|
|
1078
|
+
- Codex launch responses now state the effective model and effort with their
|
|
1079
|
+
origin — argument, terminal-config inheritance, or CLI default — and warn
|
|
1080
|
+
explicitly when the effective effort is `ultra`.
|
|
1081
|
+
|
|
1082
|
+
### Changed
|
|
1083
|
+
- `grok_agent` default model moved from the stale `grok-build` slug to
|
|
1084
|
+
`grok-4.5` (`grok-build` no longer exists in the live model catalog).
|
|
1085
|
+
- `grok_agent` / `composer_agent` now reject `reasoning_effort` with a clear
|
|
1086
|
+
error before creating a session, instead of forwarding `--effort` to the
|
|
1087
|
+
interactive TUI where the grok CLI warns and ignores it (the flag is
|
|
1088
|
+
headless-only, and Composer does not support reasoning effort at all). The
|
|
1089
|
+
former `low/medium/high/xhigh/max` enum on these tools is gone; `codex_agent`
|
|
1090
|
+
keeps an unconstrained string (CLI-version dependent, up to `ultra`).
|
|
1091
|
+
|
|
1092
|
+
## [0.10.0] - 2026-07-09
|
|
1093
|
+
|
|
1094
|
+
### Added
|
|
1095
|
+
- Codex launcher initial-prompt waits: `codex_agent` now exposes `wait`,
|
|
1096
|
+
`timeout`, `screen`, and `lines` for the launch-time `prompt`.
|
|
1097
|
+
`prompt + wait: "agent_done"` starts the persistent TUI first, waits for the
|
|
1098
|
+
TUI input area, submits the initial prompt, and waits for that first turn's
|
|
1099
|
+
Stop hook. `wait: "agent_done"` requires both `prompt` and
|
|
1100
|
+
`agent_done: true`; it does not implicitly enable hooks. Grok/Composer
|
|
1101
|
+
initial-prompt waits are intentionally not exposed until the post-OAuth smoke
|
|
1102
|
+
passes; their existing follow-up `pty_send(wait:"agent_done")` route remains
|
|
1103
|
+
unchanged.
|
|
1104
|
+
- Agent-session reads now include auxiliary metadata such as
|
|
1105
|
+
`initial_prompt`, `agent_event_seen`, `completion_attribution=none`,
|
|
1106
|
+
`last_turn_id`, and a best-effort `frontend` hint. Stale hook events are not
|
|
1107
|
+
promoted to `is_complete=True`.
|
|
1108
|
+
|
|
1109
|
+
### Fixed / Hardened
|
|
1110
|
+
- Codex initial launcher prompts are no longer placed on the shell command line
|
|
1111
|
+
in the MCP launcher path, avoiding shell continuation display for long or
|
|
1112
|
+
multiline prompts. If the TUI is blocked before input, for example on a
|
|
1113
|
+
vendor login screen, the prompt is not sent and the launcher returns the
|
|
1114
|
+
session with `initial_prompt=not_sent`.
|
|
1115
|
+
- Ordinary `pty_send` now refuses to type into a session while a launch-time
|
|
1116
|
+
initial prompt is still `pending` or `sent`, preventing follow-up input from
|
|
1117
|
+
mixing into the same live TUI turn. Manual takeover is still possible with
|
|
1118
|
+
`pty_key` or intentional `pty_send(..., force:true)`.
|
|
1119
|
+
- Post-launch initial-prompt failures preserve the created `session_id` in the
|
|
1120
|
+
error text, so the caller can inspect or recover the remaining session instead
|
|
1121
|
+
of losing the handle.
|
|
1122
|
+
|
|
1123
|
+
### Changed
|
|
1124
|
+
- Synced release-facing documentation, RAG notes, and distribution playbooks to
|
|
1125
|
+
the `v0.10.0` state after adversarial documentation verification.
|
|
1126
|
+
- Added release metadata version-sync coverage so `package.json`,
|
|
1127
|
+
`package-lock.json`, and `server.json` stay aligned after release hardening.
|
|
1128
|
+
|
|
1129
|
+
### Docs / Verification
|
|
1130
|
+
- Rechecked the public docs against npm/global install/Official MCP Registry
|
|
1131
|
+
state, current CI shape, and the **177-test** regression suite.
|
|
1132
|
+
- Verified real Codex launcher `prompt + agent_done:true + wait:"agent_done"`
|
|
1133
|
+
smoke for single-line, long Japanese, and multiline Japanese prompts.
|
|
1134
|
+
- Attempted the internal Grok/Composer initial-prompt route before exposing it;
|
|
1135
|
+
the current environment stopped at OAuth browser approval and correctly
|
|
1136
|
+
returned `initial_prompt=not_sent` without sending the prompt. Public schema
|
|
1137
|
+
therefore remains Codex-only for launch-time initial-prompt waits.
|
|
1138
|
+
- Archived completed planning/checklist documents so `docs/` keeps only live
|
|
1139
|
+
docs and current operational notes at top level.
|
|
1140
|
+
|
|
1141
|
+
## [0.9.1] - 2026-07-07
|
|
1142
|
+
|
|
1143
|
+
### Fixed / Hardened
|
|
1144
|
+
- Codex `agent_done` managed `CODEX_HOME` now allowlists only the required
|
|
1145
|
+
normal-home files: `auth.json` is linked for authentication and `config.toml`
|
|
1146
|
+
is copied privately. Other normal `~/.codex` entries are no longer symlinked
|
|
1147
|
+
into the managed home, reducing write-through side effects while still keeping
|
|
1148
|
+
aiterm-owned Stop hooks isolated from the user's normal `hooks.json`.
|
|
1149
|
+
|
|
1150
|
+
## [0.9.0] - 2026-07-07
|
|
1151
|
+
|
|
1152
|
+
### Added
|
|
1153
|
+
- **Hook-backed agent turn completion**: `codex_agent` / `grok_agent` /
|
|
1154
|
+
`composer_agent` can opt into `agent_done: true`, and `pty_send` now accepts
|
|
1155
|
+
`wait: "agent_done"` to wait for the launched agent CLI's turn boundary before
|
|
1156
|
+
returning the final terminal observation. This adds no new tools; it keeps the
|
|
1157
|
+
existing persistent-PTY model and uses vendor Stop hooks only as the completion
|
|
1158
|
+
boundary.
|
|
1159
|
+
- `pty_send` schema fields for agent waits: `wait`, `timeout`, `screen`, and
|
|
1160
|
+
`lines`. `wait: "none"` remains the default and preserves the existing send
|
|
1161
|
+
behavior.
|
|
1162
|
+
- Managed Codex/Grok/Composer hook route: launch-local vendor homes install
|
|
1163
|
+
aiterm-owned Stop hooks without editing the user's normal hook files. Grok and
|
|
1164
|
+
Composer isolate `GROK_HOME` / `HOME` to suppress compat hook and plugin
|
|
1165
|
+
contamination while sharing the normal Grok home's `auth.json` and
|
|
1166
|
+
`auth.json.lock` as a pair.
|
|
1167
|
+
|
|
1168
|
+
### Fixed / Hardened
|
|
1169
|
+
- Prevent stale or unrelated hook events from completing the wrong turn:
|
|
1170
|
+
`launch_id`, `vendor_session_id`, initial prompt completion, pre-send EOF, and
|
|
1171
|
+
post-bind missing/null vendor ids are all guarded.
|
|
1172
|
+
- Wait for the launched agent TUI to reach its input prompt before the first
|
|
1173
|
+
unbound `pty_send(wait:"agent_done")`; if the TUI is not ready, aiterm now
|
|
1174
|
+
fails before sending text instead of dropping input and later timing out.
|
|
1175
|
+
- Reject concurrent `wait:"agent_done"` calls for the same session across both
|
|
1176
|
+
in-process and cross-process MCP server instances with an agent wait lock file.
|
|
1177
|
+
- Harden hook event files and Grok auth lock handling against symlink/hard-link
|
|
1178
|
+
attacks, loose state directories, malformed or oversized JSONL, and cleanup
|
|
1179
|
+
that could otherwise follow symlink targets.
|
|
1180
|
+
- Treat a configured but missing `XDG_RUNTIME_DIR` as unusable and fall back to
|
|
1181
|
+
the normal temp dir for agent state, matching CI and non-login Linux shells.
|
|
1182
|
+
- Improve screen settling after hook completion so an old stable screen is not
|
|
1183
|
+
returned before the agent's rendered output catches up.
|
|
1184
|
+
|
|
1185
|
+
### Docs / Tests
|
|
1186
|
+
- Documented `agent_done` usage, limits, and platform support in README,
|
|
1187
|
+
design docs, ADR, and RAG. `agent_done` is supported on Linux, WSL2, and
|
|
1188
|
+
macOS; native Windows keeps the core PTY tools and agent launchers but not
|
|
1189
|
+
`agent_done` yet.
|
|
1190
|
+
- Expanded regression coverage to **167 tests**, including hook wrappers,
|
|
1191
|
+
managed homes, event parsing, race/security cases, MCP schema, and screen
|
|
1192
|
+
settle / TUI-ready behavior.
|
|
1193
|
+
- Verified real MCP `tools/call` smoke for Codex, Grok, and Composer
|
|
1194
|
+
`agent_done` plus a normal Python REPL PTY smoke.
|
|
1195
|
+
|
|
1196
|
+
## [0.8.0] - 2026-07-05
|
|
1197
|
+
|
|
1198
|
+
### Fixed (全域監査スイープ 2026-07-05 — 詳細は docs/archive/03_audit-sweep-2026-07.md)
|
|
1199
|
+
- **pytest 収集エラーの誤変換**: `read rtk:true` で pytest の収集エラー(import 失敗等)が
|
|
1200
|
+
`Pytest: No tests collected` や `Pytest: 1 passed` に潰れ、赤を無害/緑と誤読していた問題を修正(C1)。
|
|
1201
|
+
- **mark 完了検出のエコー誤爆**: `pty_send(mark:true)` の sentinel がコマンドエコーに部分一致し、
|
|
1202
|
+
長時間コマンドで早期に「完了」と偽っていた問題を修正。数字アンカー sentinel で自動検出(B1)。
|
|
1203
|
+
- **エージェント起動の破壊ゲート誤爆**: `codex_agent`/`grok_agent`/`composer_agent` の初手 prompt に
|
|
1204
|
+
`rm -rf /`・`git reset --hard` 等の語を含めると起動が拒否されていた誤検知を解消(A4)。
|
|
1205
|
+
- **破壊ゲートのすり抜け**: `rm -rf ./*`・`rm -rf "/"`・`rm -rf ..`・`rm -rf ./` を遮断対象に追加(B2)。
|
|
1206
|
+
- **セッションログの復活**: 外部 kill 後に残った同名ログを新規出力として返す問題を truncate で修正(B5)。
|
|
1207
|
+
- **UTF-8 境界分断 / DCS・APC 残存**: 増分読みの文字境界丸めと制御シーケンス除去を強化(B3/B10)。
|
|
1208
|
+
- エージェント起動の Windows 対応(bin/cwd の WSL パス変換)・env bin 実在検証・cwd の空/`~` 検証(A1/A3/A6)。
|
|
1209
|
+
- reducer の分類/除去精度(stripShellFrame の過剰除去、`python3 -m pytest`・`uv/poetry run` 等の分類)(C2-C6)。
|
|
1210
|
+
|
|
1211
|
+
### Changed
|
|
1212
|
+
- **`pty_read` の `until` を既定でリテラル部分一致に**(従来は正規表現直解釈)。`$ ` や `[..]` 等が
|
|
1213
|
+
メタ化して永遠に待つ事故を防ぐ。正規表現が必要なときは `until_regex: true` でオプトイン(B4)。
|
|
1214
|
+
- `pty_send(mark:true)` は `pty_read(wait:true)` が until 無しでも完了を自動検出するように(B1)。
|
|
1215
|
+
- `pty_read` の `screen+wait`(完了後に画面取得)・`full+lines`(末尾 N 行)を機能化(従来は黙殺)(B11)。
|
|
1216
|
+
- 読み取り・完了検出のメモリ/tmux spawn を削減(fd 範囲読み・伸長中の生存確認省略)(B6/B7)。
|
|
1217
|
+
|
|
1218
|
+
### CI / Infra
|
|
1219
|
+
- ネイティブ Windows CI(windows-latest, Node 20/22, 非ブロッキング)を追加。純粋層を検証(C9)。
|
|
1220
|
+
- registry publish が npm publish の完了を待つ/再 publish は idempotent にスキップ(C10/C11)。
|
|
1221
|
+
- テストのタイミング依存(固定 sleep・smoke の timeout 挙動)を解消しフレイキーを除去(C8)。
|
|
1222
|
+
|
|
1223
|
+
### Added
|
|
1224
|
+
- `.github/workflows/registry.yml`: publishes `server.json` to the Official MCP
|
|
1225
|
+
Registry via GitHub OIDC (on release, or manual dispatch). aiterm-mcp is now
|
|
1226
|
+
listed in the Official MCP Registry (which auto-propagates to PulseMCP and the
|
|
1227
|
+
GitHub MCP Registry) and on mcp.so.
|
|
1228
|
+
- `.github/avatar.svg` + `.github/avatar.png`: square avatar mark (terminal
|
|
1229
|
+
`>_` prompt) for directory listings and social cards.
|
|
1230
|
+
|
|
1231
|
+
### Changed (metadata)
|
|
1232
|
+
- CI: bump `actions/checkout` and `actions/setup-node` to v5 (the Node 20 action
|
|
1233
|
+
runtime is being removed from GitHub Actions).
|
|
1234
|
+
|
|
1235
|
+
## [0.7.1]
|
|
1236
|
+
|
|
1237
|
+
Codex 独立レビュー(gpt-5.5 high・実 CLI 検証つき)の指摘5件+追加発見2件の修正。
|
|
1238
|
+
|
|
1239
|
+
### Fixed
|
|
1240
|
+
- **`openAgent` が失敗時に session を残さない**: 前提検証(effort → CLI bin → cwd)を session
|
|
1241
|
+
作成前に完了させ、起動コマンド投入(send)が失敗した場合は作成済み session を片付けてから
|
|
1242
|
+
エラーを伝える。特に cwd 不存在は従来 `cd` がシェル内で静かに失敗し「起動した」と偽の成功を
|
|
1243
|
+
返していた——事前検証で明示エラーに。
|
|
1244
|
+
- **`reasoning_effort` の検証**: grok/composer は有限集合(low/medium/high/xhigh/max)を
|
|
1245
|
+
スキーマ(z.enum)と core の両方で拒否(session 作成前)。codex は CLI 側の値集合が版で
|
|
1246
|
+
変わるため縛らない。
|
|
1247
|
+
- **`pipe-pane` の失敗を検知**: 従来は戻り値を無視して成功を装い、以後の `pty_read` が永遠に
|
|
1248
|
+
空を返した。失敗時は作成した session を破棄して明示エラー。
|
|
1249
|
+
- **自動採番の高並行スケール**: 線形 t{i} リトライは全員が同じ「最小の空き番号」に殺到して
|
|
1250
|
+
上限20回でも枯渇し得た。衝突時は乱数 nonce 名(`t-xxxxxx`・1600万空間)へ切替え。
|
|
1251
|
+
実測: 20プロセス同時 open で 20/20 成功・全一意。
|
|
1252
|
+
- **smoke テストの期待値置き去り**: v0.7.0 で agent ツール3個を追加した際にツール一覧の期待値を
|
|
1253
|
+
更新し忘れテストが赤のままだった(6→9 ツールに更新)。
|
|
1254
|
+
|
|
1255
|
+
### Changed
|
|
1256
|
+
- `codex_agent` の説明を実態に合わせた: 「gpt-5.5」固定の断定を外し「モデルは Codex CLI の既定」
|
|
1257
|
+
に(実装は `-m` を渡していないため。モデル固定が要るなら将来 model 引数を追加する)。
|
|
1258
|
+
|
|
1259
|
+
### Added
|
|
1260
|
+
- `test/core-agent.test.mjs`: openAgent の前提検証・残骸ゼロ保証の characterization テスト4本
|
|
1261
|
+
(CODEX_BIN 偽装で CLI 未導入環境でも走る・隔離ソケット)。
|
|
1262
|
+
|
|
1263
|
+
## [0.7.0]
|
|
1264
|
+
|
|
1265
|
+
### Added
|
|
1266
|
+
- **対話型エージェント起動ツール**(モデルごとに1つ=ツール名/説明でどのモデルか一目瞭然):
|
|
1267
|
+
- `codex_agent` — Codex (OpenAI・モデルは Codex CLI の既定) の対話 TUI を永続端末に起動
|
|
1268
|
+
- `grok_agent` — Grok Build の Grok モデル (grok-build) の対話 TUI を起動
|
|
1269
|
+
- `composer_agent` — Grok Build の Composer モデル (grok-composer-2.5-fast) の対話 TUI を起動
|
|
1270
|
+
いずれも session_id を返し、以後は `pty_read`/`pty_send` で対話操作する(=aiterm の対話パラダイム)。
|
|
1271
|
+
`reasoning_effort`(思考レベル)・`cwd`・`prompt`(初手)・`session_name` を引数で受ける。
|
|
1272
|
+
|
|
1273
|
+
### Changed
|
|
1274
|
+
- `openSession` の自動採番を並行安全化: 複数エージェントが同時に名前なし open した際の TOCTOU
|
|
1275
|
+
競合を、衝突時に静かに次名でリトライして解消(明示名は従来どおり既存でエラー=意図的共有と区別)。
|
|
1276
|
+
|
|
1277
|
+
### Removed
|
|
1278
|
+
- `delegate` tool(v0.5.0-0.6.0)を撤去。非対話ワンショットは aiterm(対話型端末)の責務でなく、
|
|
1279
|
+
非対話 codex 委譲は codex-sidecar(codex_work/review/generate 等)が担う。aiterm は対話に専念。
|
|
1280
|
+
|
|
1281
|
+
## [0.6.0]
|
|
1282
|
+
|
|
1283
|
+
### Added
|
|
1284
|
+
- `delegate` tool に `backend`(codex|grok)パラメータ: MODELS.md の第一選択(Codex=OpenAI枠/Grok
|
|
1285
|
+
Build=xAI枠)に構造を合わせた。**codex は稼働**、**grok は要 `grok login`+非対話呼び出しの実測が
|
|
1286
|
+
未完のため明示的に「未確定」を返す**(動くフリを避ける。login+実測後に有効化)。
|
|
1287
|
+
|
|
1288
|
+
### Changed
|
|
1289
|
+
- `delegate` の出力を整形: codex の生 stdout(思考過程・セッションメタ込みで巨大)でなく、
|
|
1290
|
+
`codex exec --output-last-message` でエージェントの**最終メッセージだけ**を回収して返す
|
|
1291
|
+
(review 出力が 60k字→数十字に。空/失敗時のみ生出力へ明示フォールバック)。
|
|
1292
|
+
|
|
1293
|
+
## [0.5.0]
|
|
1294
|
+
|
|
1295
|
+
### Added
|
|
1296
|
+
- `delegate` tool: 実装の物量や独立レビューを Claude レート非依存の外部AI(Codex)へ委譲する。
|
|
1297
|
+
`mode=exec`(codex に実装させる・workspace-write)/`mode=review`(read-only レビューさせ指摘を返す)。
|
|
1298
|
+
統括(Claude)のレート窓を温存する。`prompt`/`mode`/`cwd`/`timeout_sec` を取り、codex 未導入環境では
|
|
1299
|
+
明示 no-op を返す(公開レジストリの他利用者を壊さない)。ロジックは `core.delegate`。
|
|
1300
|
+
|
|
1301
|
+
## [0.4.1] - 2026-06-08
|
|
1302
|
+
|
|
1303
|
+
### Changed
|
|
1304
|
+
- Discoverability metadata & docs (no code or behavior change from 0.4.0):
|
|
1305
|
+
added `mcpName` and an Official MCP Registry `server.json` manifest (npm /
|
|
1306
|
+
stdio), a Glama `glama.json` claim file, and expanded npm keywords
|
|
1307
|
+
(`mcp-server`, `claude-code`, `cursor`, `devtools`).
|
|
1308
|
+
- README (EN + JA) reworked for first-time visitors: leads with the
|
|
1309
|
+
SSH-persistence pitch, replaces the placeholder demo mock with **real captured
|
|
1310
|
+
`pty_read` output** (token-reduction and completion detection shown on genuine
|
|
1311
|
+
bytes), names comparison competitors, de-duplicates the install steps, and
|
|
1312
|
+
moves the constraints list below the fold.
|
|
1313
|
+
|
|
1314
|
+
## [0.4.0] - 2026-06-02
|
|
1315
|
+
|
|
1316
|
+
### Added
|
|
1317
|
+
- Nested completion early-return: while nested (ssh/docker/REPL foreground) with no `until`, `pty_read({ wait: true })` now returns `is_complete=False via nested` as soon as output settles, instead of waiting the full `timeout` for a signal that cannot fire there. The read advises passing `until` (a prompt regex) or `mark: true` for a confirmed completion. Certainty is unchanged (still none in that case) — only the wasted wait is removed.
|
|
1318
|
+
|
|
1319
|
+
### Changed
|
|
1320
|
+
- `is_complete` is reported `True` only for confirmed completion layers (`until` / `dead` / `quiescent`); `timeout` and the new `nested` are reported `False`.
|
|
1321
|
+
|
|
1322
|
+
## [0.3.1] - 2026-06-02
|
|
1323
|
+
|
|
1324
|
+
### Changed
|
|
1325
|
+
- Documentation-only release so the npm package page reflects the refreshed README (Quickstart, Demo, and a clearer call to action). No code or behavior changes from 0.3.0.
|
|
1326
|
+
|
|
1327
|
+
## [0.3.0] - 2026-06-02
|
|
1328
|
+
|
|
1329
|
+
Native macOS support. macOS previously rode the generic POSIX path (`isWin=false`)
|
|
1330
|
+
but was never verified on real hardware; this release closes the macOS-specific
|
|
1331
|
+
operational gaps in the tmux resolution layer. Verified on Apple Silicon
|
|
1332
|
+
(Homebrew tmux 3.6b): 92/92 tests plus a live E2E run (open / send / quiescence /
|
|
1333
|
+
mark+until / screen / list / close). The POSIX and Windows paths are unchanged.
|
|
1334
|
+
|
|
1335
|
+
### Added
|
|
1336
|
+
- `resolveTmux()` in `src/core.ts`: resolves the tmux binary in the order
|
|
1337
|
+
`AITERM_TMUX` (explicit override) → `PATH` → Homebrew defaults
|
|
1338
|
+
(`/opt/homebrew/bin` on Apple Silicon, `/usr/local/bin` on Intel), then caches
|
|
1339
|
+
the result. This finds tmux even under GUI launch, where the default `PATH`
|
|
1340
|
+
lacks the Homebrew bin directory. When tmux is found off `PATH`, the chosen
|
|
1341
|
+
path is announced on stderr (no silent fallback).
|
|
1342
|
+
- CI `test-macos` job on `macos-latest` (Node 18/20/22, `brew install tmux`); the
|
|
1343
|
+
`publish` job now gates on `needs: [test, test-macos]`.
|
|
1344
|
+
- `test/core-resolve.test.mjs` covering the POSIX tmux-resolution negative path
|
|
1345
|
+
(a bad `AITERM_TMUX` yields a clear code-2 error instead of an empty-stderr
|
|
1346
|
+
failure; skipped on native Windows, which uses the WSL bridge).
|
|
1347
|
+
|
|
1348
|
+
### Fixed
|
|
1349
|
+
- Missing tmux now produces a clear `brew install tmux` diagnostic instead of a
|
|
1350
|
+
cryptic empty-stderr failure; the `tmux()` `ENOENT` case is distinguished from
|
|
1351
|
+
a generic non-zero exit.
|
|
1352
|
+
- The bash 3.2 "switch to zsh" deprecation banner is suppressed via
|
|
1353
|
+
`new-session -e BASH_SILENCE_DEPRECATION_WARNING=1`. The `-e` flag is
|
|
1354
|
+
darwin-gated (and applied only when the shell is `bash`) because it requires
|
|
1355
|
+
tmux ≥ 3.2 and would break older Linux tmux.
|
|
1356
|
+
|
|
1357
|
+
## [0.2.0] - 2026-06-02
|
|
1358
|
+
|
|
1359
|
+
Native Windows support via a WSL tmux bridge. Windows has no tmux, so every tmux
|
|
1360
|
+
call is bridged through `wsl.exe -e tmux`. The POSIX (Linux / WSL2 / macOS) path
|
|
1361
|
+
is behaviorally unchanged.
|
|
1362
|
+
|
|
1363
|
+
### Added
|
|
1364
|
+
- Native Windows backend: all tmux invocations routed through `wsl.exe -e tmux`,
|
|
1365
|
+
with the control socket on the WSL-native filesystem and pipe-pane logs read
|
|
1366
|
+
back via `/mnt` (with a Windows-only settle step before declaring completion).
|
|
1367
|
+
Requires WSL with tmux installed inside it.
|
|
1368
|
+
- `toWslPath()` drive-path translation, plus `test/core-space-path.test.mjs`
|
|
1369
|
+
(pipe-pane capture under a space-containing temp path). The existing
|
|
1370
|
+
`core-pure`, `core-readoutput`, and `core-tmux` suites were extended with
|
|
1371
|
+
regression coverage for the bridge, session-name validation, path traversal,
|
|
1372
|
+
and offset clamping.
|
|
1373
|
+
|
|
1374
|
+
### Changed
|
|
1375
|
+
- Session-name validation hardened and enforced at every entry point to block
|
|
1376
|
+
path traversal and shell injection (names must match `/^[A-Za-z0-9_-]{1,64}$/`).
|
|
1377
|
+
|
|
1378
|
+
## [0.1.0] - 2026-06-02
|
|
1379
|
+
|
|
1380
|
+
Initial npm publish (with provenance): a Node/TypeScript rewrite of the Python MVP
|
|
1381
|
+
prototype (preserved under `prototype/python/` as the porting source and reference).
|
|
1382
|
+
|
|
1383
|
+
### Added
|
|
1384
|
+
- stdio MCP server exposing exactly 6 tools: `pty_open`, `pty_send`, `pty_read`,
|
|
1385
|
+
`pty_key`, `pty_close`, `pty_list`. SSH, containers, and REPLs are not separate
|
|
1386
|
+
tools — you nest into the one PTY by `pty_send`-ing `ssh host`, `docker exec …`,
|
|
1387
|
+
etc.
|
|
1388
|
+
- tmux backend: one persistent local PTY per session, surviving MCP server/client
|
|
1389
|
+
restarts via the tmux daemon. tmux is started with `-f /dev/null` (ignores
|
|
1390
|
+
`~/.tmux.conf` for reproducibility); all sessions live on one socket, so
|
|
1391
|
+
`tmux kill-server` removes them all. A human can co-drive any session via
|
|
1392
|
+
`tmux -S … attach -t <id>` (the attach command is printed by `pty_open`).
|
|
1393
|
+
- Token-reducing reads: strip control characters, collapse repeats, head+tail
|
|
1394
|
+
elision with a restore hint and a meta line. `pty_read({rtk:true})` applies
|
|
1395
|
+
per-command reducers (git status/log, grep, pytest, df, make, …) as a
|
|
1396
|
+
self-contained reimplementation — no `rtk` binary required.
|
|
1397
|
+
`pty_send({rtk:true})` delegates to the external `rtk` binary if present and
|
|
1398
|
+
passes through otherwise (`src/rtk.ts`).
|
|
1399
|
+
- Four-layer completion detection: process exit (dead) / until-regex /
|
|
1400
|
+
quiescence (output settled AND shell is back) / timeout. While nested
|
|
1401
|
+
(ssh/docker), quiescence cannot fire by design — use `until` or `mark`.
|
|
1402
|
+
- Safety gate: `pty_send` blocks destructive commands (`rm -rf /`, `mkfs`,
|
|
1403
|
+
`dd of=/dev/`, `DROP TABLE`, fork bomb, `git reset --hard`, `curl … | sh`, …),
|
|
1404
|
+
overridable with `force:true`. It is a tripwire, not a sandbox: it does not
|
|
1405
|
+
catch relative-path `rm`, post-`$VAR`-expansion danger, or commands on the far
|
|
1406
|
+
side of an ssh hop. `pty_read` neutralizes control characters in returned text.
|
|
1407
|
+
- Node regression suite (`node:test`, `npm test`, tmux required) and CI on
|
|
1408
|
+
`ubuntu-latest` for Node 18/20/22, publishing to npm on `v*` tags with
|
|
1409
|
+
provenance.
|
|
1410
|
+
|
|
1411
|
+
[Unreleased]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.10...HEAD
|
|
1412
|
+
[0.29.10]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.9...v0.29.10
|
|
1413
|
+
[0.29.9]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.8...v0.29.9
|
|
1414
|
+
[0.29.8]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.7...v0.29.8
|
|
1415
|
+
[0.29.7]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.6...v0.29.7
|
|
1416
|
+
[0.29.6]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.5...v0.29.6
|
|
1417
|
+
[0.29.5]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.4...v0.29.5
|
|
1418
|
+
[0.29.4]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.3...v0.29.4
|
|
1419
|
+
[0.29.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.2...v0.29.3
|
|
1420
|
+
[0.29.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.1...v0.29.2
|
|
1421
|
+
[0.29.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.0...v0.29.1
|
|
1422
|
+
[0.29.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.28.4...v0.29.0
|
|
1423
|
+
[0.28.4]: https://github.com/kitepon/aiterm-mcp/compare/v0.28.3...v0.28.4
|
|
1424
|
+
[0.28.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.28.2...v0.28.3
|
|
1425
|
+
[0.28.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.28.1...v0.28.2
|
|
1426
|
+
[0.28.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.28.0...v0.28.1
|
|
1427
|
+
[0.28.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.27.9...v0.28.0
|
|
1428
|
+
[0.27.9]: https://github.com/kitepon/aiterm-mcp/compare/v0.27.8...v0.27.9
|
|
1429
|
+
[0.27.8]: https://github.com/kitepon/aiterm-mcp/compare/v0.27.7...v0.27.8
|
|
1430
|
+
[0.27.7]: https://github.com/kitepon/aiterm-mcp/compare/v0.27.3...v0.27.7
|
|
1431
|
+
[0.27.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.27.2...v0.27.3
|
|
1432
|
+
[0.27.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.27.1...v0.27.2
|
|
1433
|
+
[0.27.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.27.0...v0.27.1
|
|
1434
|
+
[0.27.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.26.0...v0.27.0
|
|
1435
|
+
[0.26.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.25.3...v0.26.0
|
|
1436
|
+
[0.25.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.25.2...v0.25.3
|
|
1437
|
+
[0.25.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.25.1...v0.25.2
|
|
1438
|
+
[0.25.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.25.0...v0.25.1
|
|
1439
|
+
[0.25.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.24.3...v0.25.0
|
|
1440
|
+
[0.24.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.24.2...v0.24.3
|
|
1441
|
+
[0.24.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.24.1...v0.24.2
|
|
1442
|
+
[0.24.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.24.0...v0.24.1
|
|
1443
|
+
[0.24.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.23.0...v0.24.0
|
|
1444
|
+
[0.23.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.22.0...v0.23.0
|
|
1445
|
+
[0.22.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.21.4...v0.22.0
|
|
1446
|
+
[0.21.4]: https://github.com/kitepon/aiterm-mcp/compare/v0.21.3...v0.21.4
|
|
1447
|
+
[0.21.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.21.2...v0.21.3
|
|
1448
|
+
[0.21.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.21.1...v0.21.2
|
|
1449
|
+
[0.21.1]: https://github.com/kitepon/aiterm-mcp/compare/b8c4dbc...v0.21.1
|
|
1450
|
+
[0.21.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.20.3...b8c4dbc
|
|
1451
|
+
[0.20.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.20.2...v0.20.3
|
|
1452
|
+
[0.20.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.20.1...v0.20.2
|
|
1453
|
+
[0.20.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.20.0...v0.20.1
|
|
1454
|
+
[0.20.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.19.3...v0.20.0
|
|
1455
|
+
[0.19.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.19.2...v0.19.3
|
|
1456
|
+
[0.19.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.19.1...v0.19.2
|
|
1457
|
+
[0.19.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.19.0...v0.19.1
|
|
1458
|
+
[0.19.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.18.2...v0.19.0
|
|
1459
|
+
[0.18.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.18.1...v0.18.2
|
|
1460
|
+
[0.18.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.18.0...v0.18.1
|
|
1461
|
+
[0.18.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.17.0...v0.18.0
|
|
1462
|
+
[0.17.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.16.0...v0.17.0
|
|
1463
|
+
[0.16.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.15.1...v0.16.0
|
|
1464
|
+
[0.15.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.15.0...v0.15.1
|
|
1465
|
+
[0.15.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.12.3...v0.15.0
|
|
1466
|
+
[0.12.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.12.2...v0.12.3
|
|
1467
|
+
[0.12.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.12.1...v0.12.2
|
|
1468
|
+
[0.12.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.12.0...v0.12.1
|
|
1469
|
+
[0.12.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.11.0...v0.12.0
|
|
1470
|
+
[0.11.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.10.0...v0.11.0
|
|
1471
|
+
[0.10.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.9.1...v0.10.0
|
|
1472
|
+
[0.9.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.9.0...v0.9.1
|
|
1473
|
+
[0.9.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.8.0...v0.9.0
|
|
1474
|
+
[0.8.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.7.1...v0.8.0
|
|
1475
|
+
[0.7.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.7.0...v0.7.1
|
|
1476
|
+
[0.7.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.6.0...v0.7.0
|
|
1477
|
+
[0.6.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.5.0...v0.6.0
|
|
1478
|
+
[0.5.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.4.1...v0.5.0
|
|
1479
|
+
[0.4.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.4.0...v0.4.1
|
|
1480
|
+
[0.4.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.3.1...v0.4.0
|
|
1481
|
+
[0.3.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.3.0...v0.3.1
|
|
1482
|
+
[0.3.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.2.0...v0.3.0
|
|
1483
|
+
[0.2.0]: https://github.com/kitepon/aiterm-mcp/compare/v0.1.0...v0.2.0
|
|
1484
|
+
[0.1.0]: https://github.com/kitepon/aiterm-mcp/releases/tag/v0.1.0
|