aiterm-mcp 0.61.7 → 0.61.8
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 +8 -1
- package/README.ja.md +2 -2
- package/README.md +2 -2
- package/dist/execution-service.js +17 -1
- package/docs/DESIGN.md +2 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.61.8] - 2026-10-23
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Repeating empty-launch reconciliation now rechecks the current managed generation, no-input readiness and competing session operations before returning an accepted launch with an unissued send. A historical accepted receipt cannot authorize clearing a newer generation's launch uncertainty. Rejection preserves the existing graph and issues no native input.
|
|
15
|
+
|
|
10
16
|
## [0.61.7] - 2026-10-23
|
|
11
17
|
|
|
12
18
|
### Fixed
|
|
@@ -2753,7 +2759,8 @@ prototype (preserved under `prototype/python/` as the porting source and referen
|
|
|
2753
2759
|
`ubuntu-latest` for Node 18/20/22, publishing to npm on `v*` tags with
|
|
2754
2760
|
provenance.
|
|
2755
2761
|
|
|
2756
|
-
[Unreleased]: https://github.com/kitepon/aiterm-mcp/compare/v0.61.
|
|
2762
|
+
[Unreleased]: https://github.com/kitepon/aiterm-mcp/compare/v0.61.8...HEAD
|
|
2763
|
+
[0.61.8]: https://github.com/kitepon/aiterm-mcp/compare/v0.61.7...v0.61.8
|
|
2757
2764
|
[0.61.7]: https://github.com/kitepon/aiterm-mcp/compare/v0.61.6...v0.61.7
|
|
2758
2765
|
[0.61.6]: https://github.com/kitepon/aiterm-mcp/compare/v0.61.5...v0.61.6
|
|
2759
2766
|
[0.61.5]: https://github.com/kitepon/aiterm-mcp/compare/v0.61.4...v0.61.5
|
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.61.
|
|
212
|
+
**状態:** 開発継続中 · 現行公開版 **v0.61.8** · 動作対象は Linux · WSL2 · macOS · Windows ネイティブ · MIT · [変更履歴](CHANGELOG.md)。
|
|
213
213
|
|
|
214
214
|
### 更新と巻き戻し
|
|
215
215
|
|
|
@@ -738,7 +738,7 @@ BellTeamのmodel・effort・fast変更も、既存session世代に結合したna
|
|
|
738
738
|
|
|
739
739
|
POSIXの明示native入口でも、`agent_auth`の名前なし開始、認証済みで何も起こさない開始、既存v1の確認・初回案内・取消を受け付ける。認証PTYは実際の作成元nativeと世代へ結合する。BellTeamの参照なし入力・キーは、この証拠がある認証PTYにだけ許可し、通常agentの本文には配送参照を引き続き必要とする。作成証拠のない旧認証metadataを自動登録しない。
|
|
740
740
|
|
|
741
|
-
この明示入口では `agent_execution` の `reconcile_launch` に元の `request` と正確な `target: {session_id, launch_id}` を渡し、結果不明の空起動を既存世代へ結合できる。保存したnative/serverと現在のmanaged世代、raw状態で初期promptなし、生存して入力待ちのharnessをmetadata受付内で照合し、該当するunknown launch
|
|
741
|
+
この明示入口では `agent_execution` の `reconcile_launch` に元の `request` と正確な `target: {session_id, launch_id}` を渡し、結果不明の空起動を既存世代へ結合できる。保存したnative/serverと現在のmanaged世代、raw状態で初期promptなし、生存して入力待ちのharnessをmetadata受付内で照合し、該当するunknown launch枠だけを解放する。受付済みでも本文未発行なら、照合を繰り返すたびに現在世代・入力待ち・競合操作なしを再確認する。保存した受付結果だけで後の世代を確認済みとしない。起動・打鍵・close・本文再送は行わない。issuedのRPC、入力状態不明、世代交代や世代未確認は拒否する。後続本文は元参照で通常のsend受付を通して一度だけ発行する。照合成功は失われた元RPC receiptの回収を意味しない。
|
|
742
742
|
|
|
743
743
|
|
|
744
744
|
## 人が覗く
|
package/README.md
CHANGED
|
@@ -227,7 +227,7 @@ collection is off by default and performs no network I/O. It ships via
|
|
|
227
227
|
tag-triggered CI with npm provenance (OIDC Trusted Publishing); the GitHub
|
|
228
228
|
Release re-registers the Official MCP Registry entry.
|
|
229
229
|
|
|
230
|
-
**Status:** actively maintained · current public release **v0.61.
|
|
230
|
+
**Status:** actively maintained · current public release **v0.61.8** · 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).
|
|
231
231
|
|
|
232
232
|
### Update and rollback
|
|
233
233
|
|
|
@@ -796,7 +796,7 @@ Each `pty_send` accepts at most 64 KiB of UTF-8 text. Sends to the same session
|
|
|
796
796
|
|
|
797
797
|
In the opt-in POSIX native execution entry, an ordinary message arriving at a verified caller can overlap that caller's outgoing send. It does not replace the caller's generation or clear either request's slot. Agent paste/submit segments wait for metadata mutex contention before input; uncertain operations, generation changes and stops still prevent input. BellTeam may explicitly recreate a closed session with a promptless management `agent_launch`; sending a prompt still requires its original execution reference.
|
|
798
798
|
|
|
799
|
-
An explicit `agent_execution` action `reconcile_launch` can bind an existing empty launch after a lost launch result in this opt-in entry. Supply the original `request` and exact `target: {session_id, launch_id}`. The server checks the original native/server identity, current managed generation, raw no-prompt state and a live ready harness under metadata admission, then releases only that unknown launch slot. It never launches, types, closes or resends. `issued` RPCs, unknown input and changed or unverified generations remain blocked. Any subsequent body uses the original reference through normal send admission once; a successful reconciliation does not prove the lost RPC receipt.
|
|
799
|
+
An explicit `agent_execution` action `reconcile_launch` can bind an existing empty launch after a lost launch result in this opt-in entry. Supply the original `request` and exact `target: {session_id, launch_id}`. The server checks the original native/server identity, current managed generation, raw no-prompt state and a live ready harness under metadata admission, then releases only that unknown launch slot. Repeating an accepted empty launch before its send also rechecks the current generation, readiness and absence of competing session operations; a saved acceptance alone cannot confirm a later generation. It never launches, types, closes or resends. `issued` RPCs, unknown input and changed or unverified generations remain blocked. Any subsequent body uses the original reference through normal send admission once; a successful reconciliation does not prove the lost RPC receipt.
|
|
800
800
|
|
|
801
801
|
|
|
802
802
|
Sessions live on a shared tmux socket on POSIX or a shared psmux namespace on native Windows. The attach line printed by `pty_open` and `agent_launch` lets a human attach to the same terminal and intervene, including a Claude/Codex/Grok/Cursor harness session: `tmux -S … attach -t <id>` on POSIX, or `psmux -L <namespace> attach -t <id>` on native Windows.
|
|
@@ -967,8 +967,24 @@ export class ExecutionService {
|
|
|
967
967
|
async reconcileLaunch(args) {
|
|
968
968
|
return this.store.transaction(state => {
|
|
969
969
|
const record = find(state, args.request), relation = record.relation;
|
|
970
|
-
if (record.operations.launch === "accepted" && same(relation.target?.launch, args.target))
|
|
970
|
+
if (record.operations.launch === "accepted" && same(relation.target?.launch, args.target)) {
|
|
971
|
+
// A saved accepted receipt is historical. Before a caller can use an
|
|
972
|
+
// empty launch to resume input, prove that this generation is still
|
|
973
|
+
// present and no later operation owns the same session slot.
|
|
974
|
+
if (record.operations.send === "not_issued") {
|
|
975
|
+
if (record.stopping || stopped(state, args.target) || stopped(state, relation.source?.launch)
|
|
976
|
+
|| interruptionBlocksRequest(state, args.request))
|
|
977
|
+
throw new ExecutionError("EXECUTION_STOPPING");
|
|
978
|
+
if (state.slots.some(slot => slot.session_id === args.target.session_id) || openParentEffect(state, args.request))
|
|
979
|
+
throw new ExecutionError("EXECUTION_UNCONFIRMED");
|
|
980
|
+
if (!this.runtime.observeCreatedLaunchSync)
|
|
981
|
+
throw new ExecutionError("EXECUTION_UNSUPPORTED");
|
|
982
|
+
const parsed = createdLaunchObservationSchema.safeParse(this.runtime.observeCreatedLaunchSync(args.target));
|
|
983
|
+
if (!parsed.success || !same(parsed.data.target, args.target))
|
|
984
|
+
throw new ExecutionError("EXECUTION_UNCONFIRMED");
|
|
985
|
+
}
|
|
971
986
|
return view(state, record);
|
|
987
|
+
}
|
|
972
988
|
if (record.operations.launch === "issued")
|
|
973
989
|
throw new ExecutionError("EXECUTION_BUSY");
|
|
974
990
|
if (record.stopping || stopped(state, args.target) || stopped(state, relation.source?.launch)
|
package/docs/DESIGN.md
CHANGED
|
@@ -458,6 +458,8 @@ issued、管理close自体のunknown、親作用のslot、世代/native/server
|
|
|
458
458
|
同じmetadata transaction内のprivate同期primitiveで現在のnative/managed世代、生のinitial_prompt:none・初期配送なし、
|
|
459
459
|
harness生存とidleを照合する。既存recordのlaunchをaccepted、targetを当該世代へ結合し、該当slotだけを外す。
|
|
460
460
|
これは現在世代の明示採用で、失われたRPC receiptの復元ではない。本文・初期prompt・claim・nativeには作用しない。
|
|
461
|
+
同じaccepted targetへの再照合もsend:not_issuedなら現在のmanaged世代・生の未入力状態・入力待ちを再確認し、
|
|
462
|
+
同じsessionへの競合slotや親の未確定作用があれば拒否する。保存済みacceptedを後の世代の不明解除の証拠にしない。
|
|
461
463
|
issued、入力済み・不明、停止、別slot、世代/native/serverの不一致は拒否。後続sendは元source世代を含め通常受付を通る。
|
|
462
464
|
遅着した元callbackはまだ所有するissued stage/slotがある時だけunknownを書け、照合後や別stageを上書きしない。
|
|
463
465
|
native handlerのisErrorは元の本文を保持し、`aiterm/execution_error`のcode/effectを併記する。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aiterm-mcp",
|
|
3
|
-
"version": "0.61.
|
|
3
|
+
"version": "0.61.8",
|
|
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": [
|