thinkpool-pair 0.7.103 → 0.7.104

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.
Files changed (2) hide show
  1. package/bridge.mjs +25 -1
  2. package/package.json +1 -1
package/bridge.mjs CHANGED
@@ -1433,6 +1433,26 @@ function drainPending(s) {
1433
1433
  s.pending.clear()
1434
1434
  }
1435
1435
 
1436
+ // Switching a terminal to bypassPermissions must RETROACTIVELY clear the cards the
1437
+ // current turn already raised — setPermissionMode is a streaming control request that
1438
+ // only applies going forward, so without this a user who flips to bypass mid-turn keeps
1439
+ // staring at "the agent wants to run X" cards on a terminal that's supposedly hands-off
1440
+ // (the 2026-06-30 "AGENT STILL ASKING PERMISSIONS" report — incl. subagent/Explore tool
1441
+ // calls whose requestPermission was invoked before the toggle). bypass = allow-all, so
1442
+ // resolving every pending card as 'allow' is exactly what the new mode means.
1443
+ function allowPending(s) {
1444
+ if (!s?.pending) return
1445
+ for (const [key, p] of s.pending) {
1446
+ // Only auto-clear ordinary tool cards. A pending PLAN approval (risk:'plan') or an
1447
+ // AskUserQuestion (risk:'ask') is a deliberate human gate — flipping to bypass means
1448
+ // "run tools without asking", not "auto-approve my plan / answer my question" — leave
1449
+ // those for the human.
1450
+ if (p?.payload?.risk === 'plan' || p?.payload?.risk === 'ask') continue
1451
+ try { p.resolve('allow') } catch { /* noop */ }
1452
+ s.pending.delete(key)
1453
+ }
1454
+ }
1455
+
1436
1456
  function endStructured(id) {
1437
1457
  if (!id) return
1438
1458
  const s = sessions.get(id)
@@ -1712,7 +1732,11 @@ channel
1712
1732
  })
1713
1733
  .on('broadcast', { event: 'code-mode' }, ({ payload }) => {
1714
1734
  const s = payload?.term && sessions.get(payload.term)
1715
- if (s) { s.mode = payload.mode; s.session.setMode(payload.mode) } // track for persist/restore
1735
+ if (s) {
1736
+ s.mode = payload.mode; s.session.setMode(payload.mode) // track for persist/restore
1737
+ // Flipping to bypass = "stop asking, including the cards this turn already raised."
1738
+ if (payload.mode === 'bypassPermissions') allowPending(s)
1739
+ }
1716
1740
  })
1717
1741
  .on('broadcast', { event: 'code-close' }, ({ payload }) => {
1718
1742
  endStructured(payload?.id)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thinkpool-pair",
3
- "version": "0.7.103",
3
+ "version": "0.7.104",
4
4
  "description": "Share a local coding-agent CLI (Claude Code, Codex, Gemini, Aider, …) into a ThinkPool Code room, live.",
5
5
  "type": "module",
6
6
  "bin": {