aiterm-mcp 0.29.13 → 0.29.15

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,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.29.15] - 2026-09-01
11
+
12
+ ### Fixed
13
+
14
+ - Preserve Aiterm's launch marker when Cursor receives its initial prompt through the post-launch TUI path, allowing the completed Cursor transcript to bind to the managed launch.
15
+
16
+ ## [0.29.14] - 2026-09-01
17
+
18
+ ### Fixed
19
+
20
+ - Recognize Cursor Agent v2026.08.31's initial `Plan, search, build anything` composer as an idle input-ready screen, so BellTeam and other callers can dispatch the first turn after launch.
21
+
10
22
  ## [0.29.13] - 2026-09-01
11
23
 
12
24
  ### Added
@@ -1426,7 +1438,9 @@ prototype (preserved under `prototype/python/` as the porting source and referen
1426
1438
  `ubuntu-latest` for Node 18/20/22, publishing to npm on `v*` tags with
1427
1439
  provenance.
1428
1440
 
1429
- [Unreleased]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.13...HEAD
1441
+ [Unreleased]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.15...HEAD
1442
+ [0.29.15]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.14...v0.29.15
1443
+ [0.29.14]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.13...v0.29.14
1430
1444
  [0.29.13]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.12...v0.29.13
1431
1445
  [0.29.12]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.11...v0.29.12
1432
1446
  [0.29.11]: https://github.com/kitepon/aiterm-mcp/compare/v0.29.10...v0.29.11
package/README.ja.md CHANGED
@@ -153,7 +153,7 @@ runtime-error store は canonical dotagents config の `collection.enabled: true
153
153
  場合だけ収集し、既定OFF、network送信は行いません。tag起点CIのnpm provenance(OIDC Trusted
154
154
  Publishing)で公開し、GitHub Release が Official MCP Registry を再登録します。
155
155
 
156
- **状態:** 開発継続中 · 現行公開版 **v0.29.13** · 動作対象は Linux · WSL2 · macOS · Windows ネイティブ · MIT · [変更履歴](CHANGELOG.md)。
156
+ **状態:** 開発継続中 · 現行公開版 **v0.29.15** · 動作対象は Linux · WSL2 · macOS · Windows ネイティブ · MIT · [変更履歴](CHANGELOG.md)。
157
157
 
158
158
  ### 更新と巻き戻し
159
159
 
package/README.md CHANGED
@@ -169,7 +169,7 @@ collection is off by default and performs no network I/O. It ships via
169
169
  tag-triggered CI with npm provenance (OIDC Trusted Publishing); the GitHub
170
170
  Release re-registers the Official MCP Registry entry.
171
171
 
172
- **Status:** actively maintained · current public release **v0.29.13** · 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).
172
+ **Status:** actively maintained · current public release **v0.29.15** · 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).
173
173
 
174
174
  ### Update and rollback
175
175
 
package/dist/core.js CHANGED
@@ -19,7 +19,7 @@ import { sleep, currentUid, runtimeStateBase, safeStatSize, readFileRange, write
19
19
  import { GROK_MODEL_DEFAULTS, realGrokHome, resolveAndValidateGrokAuth, assertGrokModelAvailable, grokEventsTranscript, latestGrokCompletion, observeGrokDone, buildGrokAgentCmd, grokLaunchNote, grokEnvTokens, grokTuiReady, GROK_COMPOSER_MARKER_RE, grokFooterHasConfiguration, grokTranscriptText, createGrokAgentMetadata, } from "./harnesses/grok.js";
20
20
  import { bindCodexTranscriptSession, latestCodexCompletion, observeCodexDone, buildCodexAgentCmd, codexLaunchNote, codexTuiReady, codexLaunchBlockingDialog, CODEX_COMPOSER_MARKER_RE, codexModelChoice, codexEffortChoice, codexMoreReasoningChoice, codexTranscriptText, createCodexAgentMetadata, } from "./harnesses/codex.js";
21
21
  import { OPERATION_ID_RE, CLAUDE_RESULT_MAX_BYTES, CLAUDE_EFFORTS, agentManagedClaudeSettingsPath, agentClaudeResultPath, agentClaudeOperationPath, agentClaudeApprovalReceiptPath, agentClaudeDispatchReceiptPath, validateOperationId, readClaudeResultText, assertClaudeAuthenticationReady, buildClaudeAgentCmd, claudeLaunchNote, claudeTuiReady, CLAUDE_COMPOSER_MARKER_RE, createClaudeAgentMetadata, } from "./harnesses/claude.js";
22
- import { bindCursorTranscriptSession, cursorTurnBoundary, latestCursorCompletion, observeCursorDone, cursorTranscriptText, assertCursorAuthenticationReady, assertCursorModelAvailable, buildCursorAgentCmd, createCursorAgentMetadata, cursorLaunchNote, cursorEffortNavigation, cursorTuiReady, CURSOR_COMPOSER_MARKER_RE, validateCursorModelEffort, } from "./harnesses/cursor.js";
22
+ import { bindCursorTranscriptSession, cursorTurnBoundary, latestCursorCompletion, observeCursorDone, cursorTranscriptText, assertCursorAuthenticationReady, assertCursorModelAvailable, buildCursorAgentCmd, cursorPromptWithLineage, createCursorAgentMetadata, cursorLaunchNote, cursorEffortNavigation, cursorTuiReady, CURSOR_COMPOSER_MARKER_RE, validateCursorModelEffort, } from "./harnesses/cursor.js";
23
23
  import { resolveAgentBin, resolveThroughlineBin, runThroughlineHandoffContext, isWindowsNativeExecutable, agentBinForPaneShell, resolveWinPaneShell } from "./agent-resolver.js";
24
24
  export { AitermError } from "./errors.js";
25
25
  export { tmuxSpawnEnv } from "./tmux-runtime.js";
@@ -2565,20 +2565,21 @@ export async function sendInitialAgentPrompt(name, text, o = {}) {
2565
2565
  throw new AitermError(`initial_prompt=not_sent vendor=${meta.kind} ready=false samples=${ready.samples} harness=${agentHarness(meta.kind)}\n` +
2566
2566
  `agent session '${name}' の ${agentLabel(meta.kind)} TUI が入力受付状態にならず、prompt は送信していません。${causeNote}`, 2);
2567
2567
  }
2568
+ const promptText = meta.kind === "cursor" ? cursorPromptWithLineage(meta, text) : text;
2568
2569
  const startOffset = agentCompletionCursor(meta);
2569
2570
  try {
2570
2571
  if (meta.kind === "claude") {
2571
2572
  prepareSendText(text, { raw: false });
2572
2573
  reserveAnonymousClaudeTurn(meta);
2573
2574
  }
2574
- await sendAgentPromptText(name, text);
2575
+ await sendAgentPromptText(name, promptText);
2575
2576
  setInitialPromptState(meta, "pending");
2576
2577
  }
2577
2578
  catch (e) {
2578
2579
  setInitialPromptState(meta, "failed");
2579
2580
  throw e;
2580
2581
  }
2581
- const residue = await detectAgentSubmitResidue(name, meta.kind, text);
2582
+ const residue = await detectAgentSubmitResidue(name, meta.kind, promptText);
2582
2583
  return {
2583
2584
  text: `initial_prompt=pending vendor=${meta.kind} event_cursor=${startOffset} harness=${agentHarness(meta.kind)}\n` +
2584
2585
  `起動時 prompt を送信した。${agentDispatchGuide(name, startOffset)}` +
@@ -375,11 +375,14 @@ export function buildCursorAgentCmd(bin, model, effort, prompt, meta) {
375
375
  if (meta?.kind === "cursor" && meta.write_scope === "read-only")
376
376
  parts.push("--mode", "ask");
377
377
  if (prompt) {
378
- const value = meta ? `${subagentInstruction(meta)}\n\n${prompt}` : prompt;
378
+ const value = meta ? cursorPromptWithLineage(meta, prompt) : prompt;
379
379
  parts.push(shq(value));
380
380
  }
381
381
  return parts.join(" ");
382
382
  }
383
+ export function cursorPromptWithLineage(meta, prompt) {
384
+ return `${subagentInstruction(meta)}\n\n${prompt}`;
385
+ }
383
386
  export function cursorLaunchNote(model, effort, meta) {
384
387
  const effective = cursorModelArgument(model, effort);
385
388
  const modelNote = effective ? ` model=${JSON.stringify(effective)}(引数)` : " model=Cursor CLI既定";
@@ -387,7 +390,9 @@ export function cursorLaunchNote(model, effort, meta) {
387
390
  }
388
391
  export const CURSOR_COMPOSER_MARKER_RE = /(?:^|\n)\s*>\s?(?:\n|$)/m;
389
392
  const CURSOR_FOLLOWUP_MARKER_RE = /(?:^|\n)\s*(?:→|->)\s*Add a follow-up\b/im;
393
+ const CURSOR_START_PROMPT_MARKER_RE = /(?:^|\n)\s*(?:→|->)\s*Plan,\s*search,\s*build anything\s*(?:\n|$)/im;
390
394
  export function cursorTuiReady(screen) {
391
395
  return /Cursor Agent/i.test(screen) &&
392
- (CURSOR_COMPOSER_MARKER_RE.test(screen) || CURSOR_FOLLOWUP_MARKER_RE.test(screen));
396
+ (CURSOR_COMPOSER_MARKER_RE.test(screen) || CURSOR_FOLLOWUP_MARKER_RE.test(screen) ||
397
+ CURSOR_START_PROMPT_MARKER_RE.test(screen));
393
398
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiterm-mcp",
3
- "version": "0.29.13",
3
+ "version": "0.29.15",
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": [