ai-whisper 0.4.0 → 0.4.1

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.
@@ -9791,6 +9791,9 @@ ${hint}`,
9791
9791
  autoHandbackFiredFor = accepted.handoffId;
9792
9792
  input.turnCapture?.finishAssistantTurn();
9793
9793
  const turnResult = input.turnCapture?.extractLatestAssistantTurn() ?? { confidence: "low", text: null };
9794
+ console.warn(
9795
+ `[ai-whisper] auto-handback fire: target=${input.currentAgent} handoff=${accepted.handoffId} turnLen=${(turnResult.text ?? "").length} turnConf=${turnResult.confidence}`
9796
+ );
9794
9797
  let clipboardText = null;
9795
9798
  let leaseDegraded = false;
9796
9799
  let interferenceDetected = false;
@@ -9804,10 +9807,23 @@ ${hint}`,
9804
9807
  clipboardText = captureResult.text;
9805
9808
  } else {
9806
9809
  leaseDegraded = true;
9810
+ console.warn(
9811
+ `[ai-whisper] capture lease degraded: target=${input.currentAgent} handoff=${accepted.handoffId} interference=${interferenceDetected} \u2014 /copy was NOT executed; PTY fallback only`
9812
+ );
9807
9813
  }
9814
+ } else {
9815
+ console.warn(
9816
+ `[ai-whisper] capture pipeline returned null: target=${input.currentAgent} handoff=${accepted.handoffId} \u2014 captureHandbackText short-circuited (likely no session claim)`
9817
+ );
9808
9818
  }
9809
- } catch {
9819
+ } catch (err) {
9810
9820
  clipboardText = null;
9821
+ const msg = err instanceof Error ? `${err.message}
9822
+ ${err.stack ?? ""}` : String(err);
9823
+ console.warn(
9824
+ `[ai-whisper] capture pipeline threw (swallowed): target=${input.currentAgent} handoff=${accepted.handoffId}
9825
+ ${msg}`
9826
+ );
9811
9827
  }
9812
9828
  const classification = classifyCapture(turnResult, clipboardText);
9813
9829
  const captureStatus = classification.status;
@@ -10547,6 +10563,14 @@ function createMountSessionRuntime(input) {
10547
10563
  pid: process.pid,
10548
10564
  turnText,
10549
10565
  readChangeCount,
10566
+ // TEMP 2026-05-29: bump lease poll-acquire from default 4s to 30s
10567
+ // to absorb concurrent-collab contention while we land the proper
10568
+ // fix (per-provider capture strategies, design doc Phase 2). The
10569
+ // auto-handback already waits ≥30s grace + however long the
10570
+ // provider takes to idle, so an extra 0–30s of lease wait is
10571
+ // invisible. Revert once mount restart / per-provider strategy
10572
+ // removes the host-global single-lease bottleneck.
10573
+ acquireMaxWaitMs: 3e4,
10550
10574
  runCapture: () => captureClipboardHandback({
10551
10575
  triggerCopy: () => submitInjectedInput2("/copy"),
10552
10576
  // Some provider versions show a picker after /copy (e.g. Claude
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-whisper",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Terminal-first relay for paired AI coding agents (Claude + Codex), driven by structured workflows.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -48,8 +48,8 @@
48
48
  "@ai-whisper/adapter-claude": "0.0.0",
49
49
  "@ai-whisper/adapter-codex": "0.0.0",
50
50
  "@ai-whisper/companion-core": "0.0.0",
51
- "@ai-whisper/broker": "0.0.0",
52
- "@ai-whisper/shared": "0.0.0"
51
+ "@ai-whisper/shared": "0.0.0",
52
+ "@ai-whisper/broker": "0.0.0"
53
53
  },
54
54
  "files": [
55
55
  "dist",