aiterm-mcp 0.57.3 → 0.57.4

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 CHANGED
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.57.4] - 2026-10-08
11
+
12
+ ### 修正
13
+
14
+ - Codexの席で、警告の画面(足元の「⚠ N warnings · f2 to view」をF2で開いた所)が開いている間に送った文が、届かないのに
15
+ `agent_dispatch`で返っていた件を直す(ADR 0107)。
16
+ 起動の見出し(`>_ OpenAI Codex`)の`>_`を入力欄の印と読んでいたので、見出しが画面に残る席では、入力欄が警告の画面に
17
+ 置き換わっていても入力待ちと読んでいた。文は警告の画面に吸われ、turnは始まらず、完了は来なかった。
18
+ - 見出しの`>_`を入力欄の印に数えない。入力欄の行がある時だけ入力待ちと読む。
19
+ - 警告の画面を、応答の要る画面と同じに数える。`pty_observe`は`blocked`・`unknown_dialog`、`pty_send`は待たずに、今までと同じ
20
+ 文面(「…入力受付状態になりません。文字列は送信していません。…」)で断る。番が動いている席・回答を流している席でも同じ。
21
+ 見出しが流れた後の席では、今まで30秒待ってから同じ文面(`state=unknown reason=unrecognized_screen`)で断っていた。
22
+ - Aitermは警告の画面を閉じない(`Esc`はその警告を消す)。引数、返りの項目、断りの文面、警告の画面が開いていない席の読みは変えていない。
23
+ 警告の画面は人がF2を押した時だけ開くので、BellTeamの席の動きは変わらない。
24
+
10
25
  ## [0.57.3] - 2026-10-08
11
26
 
12
27
  ### 修正
@@ -2430,7 +2445,8 @@ prototype (preserved under `prototype/python/` as the porting source and referen
2430
2445
  `ubuntu-latest` for Node 18/20/22, publishing to npm on `v*` tags with
2431
2446
  provenance.
2432
2447
 
2433
- [Unreleased]: https://github.com/kitepon/aiterm-mcp/compare/v0.57.3...HEAD
2448
+ [Unreleased]: https://github.com/kitepon/aiterm-mcp/compare/v0.57.4...HEAD
2449
+ [0.57.4]: https://github.com/kitepon/aiterm-mcp/compare/v0.57.3...v0.57.4
2434
2450
  [0.57.3]: https://github.com/kitepon/aiterm-mcp/compare/v0.57.2...v0.57.3
2435
2451
  [0.57.2]: https://github.com/kitepon/aiterm-mcp/compare/v0.57.1...v0.57.2
2436
2452
  [0.57.1]: https://github.com/kitepon/aiterm-mcp/compare/v0.57.0...v0.57.1
package/README.ja.md CHANGED
@@ -209,7 +209,7 @@ runtime-error store は canonical dotagents config の `collection.enabled: true
209
209
  場合だけ収集し、既定OFF、network送信は行いません。tag起点CIのnpm provenance(OIDC Trusted
210
210
  Publishing)で公開し、GitHub Release が Official MCP Registry を再登録します。
211
211
 
212
- **状態:** 開発継続中 · 現行公開版 **v0.57.3** · 動作対象は Linux · WSL2 · macOS · Windows ネイティブ · MIT · [変更履歴](CHANGELOG.md)。
212
+ **状態:** 開発継続中 · 現行公開版 **v0.57.4** · 動作対象は Linux · WSL2 · macOS · Windows ネイティブ · MIT · [変更履歴](CHANGELOG.md)。
213
213
 
214
214
  ### 更新と巻き戻し
215
215
 
package/README.md CHANGED
@@ -223,7 +223,7 @@ collection is off by default and performs no network I/O. It ships via
223
223
  tag-triggered CI with npm provenance (OIDC Trusted Publishing); the GitHub
224
224
  Release re-registers the Official MCP Registry entry.
225
225
 
226
- **Status:** actively maintained · current public release **v0.57.3** · runs on Linux · WSL2 · macOS · native Windows (tmux on POSIX, the tmux-CLI-compatible [psmux](https://github.com/psmux/psmux) on native Windows — no WSL required) · MIT · see the [CHANGELOG](CHANGELOG.md).
226
+ **Status:** actively maintained · current public release **v0.57.4** · runs on Linux · WSL2 · macOS · native Windows (tmux on POSIX, the tmux-CLI-compatible [psmux](https://github.com/psmux/psmux) on native Windows — no WSL required) · MIT · see the [CHANGELOG](CHANGELOG.md).
227
227
 
228
228
  ### Update and rollback
229
229
 
@@ -632,6 +632,11 @@ export function codexLaunchNote(model, effort, meta) {
632
632
  const summary = meta?.kind === "codex" && meta.codex_home ? codexConfigSummary(configPath) : "";
633
633
  return (summary ? `${launch}\n${summary}\n` : launch) + writeScopeNote;
634
634
  }
635
+ // 入力欄の行頭の印(「›」。古い描画では「>」)。番号つきの行(「› 1. …」)はmodalで選択中の選択肢。
636
+ // 起動の見出し(「>_ OpenAI Codex (v0.161.0)」)の「>_」は入力欄ではない。これを入力欄と数えると、見出しが残っている席で
637
+ // 入力欄が別の画面(F2で開いた警告の画面など)に置き換わっていても入力待ちと読み、文がその画面に吸われる
638
+ // (Codex 0.161.0の実物、2026-10-08。ADR 0107)。
639
+ const CODEX_COMPOSER_LINE = String.raw `(?:^|\n)[ \t]*[›>](?!_)(?![ \t]*\d+\.)`;
635
640
  export function codexTuiReady(screen) {
636
641
  if (codexStartupFailure(screen))
637
642
  return false;
@@ -639,11 +644,14 @@ export function codexTuiReady(screen) {
639
644
  // capture-paneは直近45行だけなので、会話が進むとheaderは正常に画面外へ流れる。
640
645
  const codexFrontend = screen.includes("OpenAI Codex")
641
646
  || /(^|\n)\s*\S+\s+(?:default|low|medium|high|xhigh|max|ultra)(?:\s+fast)?\s+·\s+\S.*$/m.test(screen);
642
- return codexFrontend && /(^|\n)[ \t]*[›>](?![ \t]*\d+\.)/.test(screen);
647
+ return codexFrontend && new RegExp(CODEX_COMPOSER_LINE).test(screen);
643
648
  }
644
649
  // 0.155までは文章のfooter、0.157からは「enter select · esc back」のようなkey hint行になった。
645
- const CODEX_MODAL_FOOTER = /Press enter to confirm or esc to (?:cancel|go back)|enter to submit\s*\|\s*esc to cancel|(?<=^|\n)[ \t]*(?:[^\n]*· )?enter [a-z]+ · (?:[^\n]* · )?esc [a-z]+[ \t]*(?=\n|$)/gi;
646
- const CODEX_DIALOG_HEADING = /Would you like to run the following command\?|Allow the [^\n]+ MCP server to run tool|Hooks need review|Do you trust the contents of this directory|Trust this folder\?|Update available!|Approaching rate limits/g;
650
+ // 足元の「⚠ N warnings · f2 to view」をF2で開いた警告の画面は、入力欄の場所に出て、鍵を自分で受ける
651
+ // (足元は「k keep & next · esc dismiss & close · ^o copy · ←/→ warning · ↓ scroll」、見出しは「Warnings · 1 of 3 · Startup」)。
652
+ // 開いている間に打った文は入力欄へ入らないので、応答の要るmodalと同じに数える。Aitermは閉じない(Escはその警告を消す)。
653
+ const CODEX_MODAL_FOOTER = /Press enter to confirm or esc to (?:cancel|go back)|enter to submit\s*\|\s*esc to cancel|(?<=^|\n)[ \t]*(?:[^\n]*· )?enter [a-z]+ · (?:[^\n]* · )?esc [a-z]+[ \t]*(?=\n|$)|(?<=^|\n)[ \t]*(?:[^\n]*· )?esc dismiss(?: & close)?(?: · [^\n]*)?[ \t]*(?=\n|$)/gi;
654
+ const CODEX_DIALOG_HEADING = /Would you like to run the following command\?|Allow the [^\n]+ MCP server to run tool|Hooks need review|Do you trust the contents of this directory|Trust this folder\?|Update available!|Approaching rate limits|(?<=^|\n)[ \t]*Warnings · \d+ of \d+(?= ·|[ \t]*(?:\n|$))/g;
647
655
  const CODEX_MODAL_MARKER = new RegExp(`${CODEX_MODAL_FOOTER.source}|${CODEX_DIALOG_HEADING.source}`, "gi");
648
656
  function currentCodexDialog(screen) {
649
657
  const footers = [...screen.matchAll(CODEX_MODAL_FOOTER)];
@@ -675,7 +683,7 @@ export function codexPaneObservation(screen) {
675
683
  // psmuxはmodalを画面上部へ描き、下の空行もcaptureへ含める。空行を落としてから末尾を取る。
676
684
  const tail = screen.replace(/\s+$/, "").split("\n").slice(-24).join("\n");
677
685
  // 現在のmodal footerがある時だけ、折返しで上へ出た質問を画面全体から探す。
678
- const lastComposer = [...tail.matchAll(/(?:^|\n)[ \t]*[›>](?![ \t]*\d+\.)/g)].at(-1)?.index ?? -1;
686
+ const lastComposer = [...tail.matchAll(new RegExp(CODEX_COMPOSER_LINE, "g"))].at(-1)?.index ?? -1;
679
687
  const lastDialog = [...tail.matchAll(CODEX_MODAL_MARKER)].at(-1)?.index ?? -1;
680
688
  const modal = lastDialog > lastComposer;
681
689
  if (!modal) {
@@ -707,7 +715,7 @@ export function codexPaneObservation(screen) {
707
715
  export function codexRateLimitModelSwitchDialog(screen) {
708
716
  const current = currentCodexDialog(screen);
709
717
  const footer = [...current.matchAll(CODEX_MODAL_FOOTER)].at(-1)?.index ?? -1;
710
- const composer = [...current.matchAll(/(?:^|\n)[ \t]*[›>](?![ \t]*\d+\.)/g)].at(-1)?.index ?? -1;
718
+ const composer = [...current.matchAll(new RegExp(CODEX_COMPOSER_LINE, "g"))].at(-1)?.index ?? -1;
711
719
  // footerが無いか、現在のcomposerがmodal footerより後なら、scrollbackの古いmodalである。
712
720
  if (footer < 0 || composer > footer)
713
721
  return null;
@@ -796,7 +804,7 @@ export function codexStartupAction(screen, trustProject) {
796
804
  return { kind, keys: [...Array(Math.abs(distance)).fill(distance > 0 ? "Down" : "Up"), "Enter"] };
797
805
  }
798
806
  // submit座礁観測のcomposer領域マーカー(ready判定と同じ記号を行頭基準で探す)。
799
- export const CODEX_COMPOSER_MARKER_RE = /^\s*[›>]/;
807
+ export const CODEX_COMPOSER_MARKER_RE = /^\s*[›>](?!_)/;
800
808
  // Codexの起動前modalダイアログ検知。表示中はheader/footerが描かれず codexTuiReady が
801
809
  // 恒久falseになるため、ready gate失敗の原因究明用に画面から種別を特定する
802
810
  // (実被弾 2026-08-25: update確認で初手prompt未送信のまま30秒timeout→40分停滞)。
package/docs/DESIGN.md CHANGED
@@ -128,6 +128,8 @@ Cursorのsubmitはadapterがextended keyboard protocolのEnterへ変換し、呼
128
128
  Codex・Grok・Cursorの席は、新しいturnを送るたびに入力受付を確かめる。起動の途中の入力欄を採らないよう、500msおきに11回続けて
129
129
  入力待ちを読む(ADR 0014)。席のharnessが自分の記録で「この起動でturnを1つ終えていて、次のturnを始めていない」と示している時は、
130
130
  100msおきに2回で通す(ADR 0097)。記録の上でturnが動いている間は、画面が入力待ちに見えても11回の確かめを通る。
131
+ Codexの入力待ちは、入力欄の行(`›`、古い描画の`>`)がある時だけ読む。起動の見出しの`>_`は入力欄ではない。足元の警告をF2で開いた
132
+ 警告の画面は、入力欄の場所に出て鍵を受けるので、応答の要る画面と同じに数え、`pty_send`は打鍵の前に断る。Aitermは閉じない(ADR 0107)。
131
133
 
132
134
  ### 親配送の共通モジュール化(設計)
133
135
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiterm-mcp",
3
- "version": "0.57.3",
3
+ "version": "0.57.4",
4
4
  "mcpName": "io.github.kitepon/aiterm-mcp",
5
5
  "description": "Persistent terminal MCP with one harness-based launcher for Claude Code, Codex CLI, Grok CLI, and Cursor Agent CLI, plus durable PTYs for SSH, containers, and REPLs.",
6
6
  "keywords": [