@agentdeck/bridge 1.0.8 → 1.0.9

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 (55) hide show
  1. package/dist/ask-gate.d.ts +113 -0
  2. package/dist/ask-gate.d.ts.map +1 -0
  3. package/dist/ask-gate.js +110 -0
  4. package/dist/ask-gate.js.map +1 -0
  5. package/dist/auth.d.ts +8 -0
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +15 -0
  8. package/dist/auth.js.map +1 -1
  9. package/dist/awaiting-overlay.d.ts +54 -6
  10. package/dist/awaiting-overlay.d.ts.map +1 -1
  11. package/dist/awaiting-overlay.js +109 -26
  12. package/dist/awaiting-overlay.js.map +1 -1
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +74 -4
  15. package/dist/cli.js.map +1 -1
  16. package/dist/daemon-server.d.ts.map +1 -1
  17. package/dist/daemon-server.js +238 -19
  18. package/dist/daemon-server.js.map +1 -1
  19. package/dist/daemon.js +1 -1
  20. package/dist/http-auth-gate.d.ts +40 -0
  21. package/dist/http-auth-gate.d.ts.map +1 -0
  22. package/dist/http-auth-gate.js +46 -0
  23. package/dist/http-auth-gate.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +3 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/mdns.d.ts +7 -1
  29. package/dist/mdns.d.ts.map +1 -1
  30. package/dist/mdns.js +7 -3
  31. package/dist/mdns.js.map +1 -1
  32. package/dist/modules/mdns-module.d.ts.map +1 -1
  33. package/dist/modules/mdns-module.js +3 -1
  34. package/dist/modules/mdns-module.js.map +1 -1
  35. package/dist/observed-inject.d.ts +21 -5
  36. package/dist/observed-inject.d.ts.map +1 -1
  37. package/dist/observed-inject.js +85 -22
  38. package/dist/observed-inject.js.map +1 -1
  39. package/dist/observed-steering.d.ts +38 -0
  40. package/dist/observed-steering.d.ts.map +1 -1
  41. package/dist/observed-steering.js +53 -0
  42. package/dist/observed-steering.js.map +1 -1
  43. package/dist/passive-observer.d.ts +9 -0
  44. package/dist/passive-observer.d.ts.map +1 -1
  45. package/dist/passive-observer.js +90 -5
  46. package/dist/passive-observer.js.map +1 -1
  47. package/dist/permission-resolver.d.ts +11 -0
  48. package/dist/permission-resolver.d.ts.map +1 -1
  49. package/dist/permission-resolver.js +23 -3
  50. package/dist/permission-resolver.js.map +1 -1
  51. package/dist/session-registry.d.ts +23 -2
  52. package/dist/session-registry.d.ts.map +1 -1
  53. package/dist/session-registry.js +56 -5
  54. package/dist/session-registry.js.map +1 -1
  55. package/package.json +3 -3
@@ -68,29 +68,65 @@ export function parseTmuxPanes(output) {
68
68
  }
69
69
  return map;
70
70
  }
71
- async function injectViaTmux(tty, downs) {
71
+ /** Gap between an arrow key and the Enter that acts on it. Measured, not
72
+ * guessed: sending `Down Enter` in one `tmux send-keys` makes the picker
73
+ * answer with the option the cursor was on BEFORE the arrow — every device
74
+ * answer silently became option 0. Splitting the calls with this pause
75
+ * selects the intended option. Same lesson `injectText` already carries for
76
+ * text-then-CR; the selection path never got it. */
77
+ const KEY_PACE_MS = 120;
78
+ /** Longer settle before the Enter, which is the irreversible key. */
79
+ const SUBMIT_PACE_MS = 300;
80
+ const pause = (ms) => new Promise((r) => setTimeout(r, ms));
81
+ async function tmuxPaneFor(tty) {
82
+ const { stdout } = await execFileAsync('tmux', ['list-panes', '-a', '-F', '#{pane_tty}\t#{pane_id}'], { encoding: 'utf8', timeout: 2_000 });
83
+ return parseTmuxPanes(stdout).get(tty);
84
+ }
85
+ async function injectViaTmux(tty, downs, submits = 1) {
86
+ let paneId;
72
87
  try {
73
- const { stdout } = await execFileAsync('tmux', ['list-panes', '-a', '-F', '#{pane_tty}\t#{pane_id}'], { encoding: 'utf8', timeout: 2_000 });
74
- const paneId = parseTmuxPanes(stdout).get(tty);
75
- if (!paneId)
76
- return false;
77
- const keys = [...Array(downs).fill('Down'), 'Enter'];
78
- await execFileAsync('tmux', ['send-keys', '-t', paneId, ...keys], { timeout: 2_000 });
88
+ paneId = await tmuxPaneFor(tty);
89
+ }
90
+ catch {
91
+ return false; // no tmux server — this rung isn't the host
92
+ }
93
+ if (!paneId)
94
+ return false;
95
+ let sent = 0;
96
+ try {
97
+ // One key per call, paced: the TUI reads a burst as a single input frame
98
+ // and resolves Enter against the pre-arrow cursor.
99
+ for (let i = 0; i < downs; i++) {
100
+ await execFileAsync('tmux', ['send-keys', '-t', paneId, 'Down'], { timeout: 2_000 });
101
+ sent++;
102
+ await pause(KEY_PACE_MS);
103
+ }
104
+ for (let i = 0; i < submits; i++) {
105
+ await pause(SUBMIT_PACE_MS);
106
+ await execFileAsync('tmux', ['send-keys', '-t', paneId, 'Enter'], { timeout: 2_000 });
107
+ sent++;
108
+ }
79
109
  return true;
80
110
  }
81
111
  catch {
82
- return false; // no tmux server / pane gone — fall through the ladder
112
+ return sent > 0 ? 'partial' : false;
83
113
  }
84
114
  }
85
- /** AppleScript that types the selection into the iTerm2 session owning `tty`. */
86
- export function buildItermSelectScript(tty, downs) {
115
+ /**
116
+ * AppleScript that types part of a selection into the iTerm2 session owning
117
+ * `tty`. Arrows and the Enter that acts on them are emitted by SEPARATE calls
118
+ * with a pause between (see `KEY_PACE_MS`): delivered as one burst the picker
119
+ * resolves Enter against the pre-arrow cursor and answers option 0.
120
+ */
121
+ export function buildItermSelectScript(tty, downs, opts = { enter: true }) {
87
122
  // ESC [ B per Down, then a bare `write text ""` for Enter (write text
88
123
  // appends CR by default; the arrow writes suppress it with `newline NO`).
89
124
  const writes = [];
90
125
  for (let i = 0; i < downs; i++) {
91
126
  writes.push('write s text ((character id 27) & "[B") newline NO');
92
127
  }
93
- writes.push('write s text ""');
128
+ if (opts.enter !== false)
129
+ writes.push('write s text ""');
94
130
  return [
95
131
  'tell application "iTerm2"',
96
132
  ' repeat with w in windows',
@@ -149,7 +185,7 @@ export function buildTerminalAppSelectTabScript(tty) {
149
185
  * Requires Accessibility permission for whatever process runs the daemon
150
186
  * (the terminal that launched it, or the LaunchAgent itself).
151
187
  */
152
- export function buildPostKeysScript(match, downs) {
188
+ export function buildPostKeysScript(match, downs, submits = 1) {
153
189
  const bundles = JSON.stringify(match.bundleIds ?? []);
154
190
  const names = JSON.stringify(match.names ?? []);
155
191
  return [
@@ -182,7 +218,9 @@ export function buildPostKeysScript(match, downs) {
182
218
  // only the Return landed (which would silently pick the WRONG option).
183
219
  ' delay(0.30);',
184
220
  ` for (let i = 0; i < ${downs}; i++) key(125);`,
185
- ' key(36);',
221
+ // A grouped AskUserQuestion answers its last question into a "Submit
222
+ // answers" confirmation rather than closing, so it needs a second Return.
223
+ ` delay(0.30); for (let i = 0; i < ${submits}; i++) { key(36); delay(0.30); }`,
186
224
  ' "ok"',
187
225
  '}',
188
226
  ].join('\n');
@@ -229,12 +267,19 @@ export function buildAppButtonPressScript(appName, label) {
229
267
  * `CGEventPostToPid` route reports the app is not running or the app ignores
230
268
  * posted events.
231
269
  */
232
- export function buildAppKeysScript(appName, downs) {
270
+ export function buildAppKeysScript(appName, downs, submits = 1) {
233
271
  const app = escapeAppleScript(appName);
234
272
  const keyLines = [];
235
- for (let i = 0; i < downs; i++)
273
+ for (let i = 0; i < downs; i++) {
236
274
  keyLines.push('key code 125');
237
- keyLines.push('key code 36');
275
+ keyLines.push('delay 0.12');
276
+ }
277
+ keyLines.push('delay 0.30');
278
+ // Grouped questions end on a "Submit answers" confirmation, not on close.
279
+ for (let i = 0; i < submits; i++) {
280
+ keyLines.push('key code 36');
281
+ keyLines.push('delay 0.30');
282
+ }
238
283
  return [
239
284
  'set prevApp to ""',
240
285
  'try',
@@ -278,23 +323,41 @@ async function runOsa(script, timeoutMs = 8_000) {
278
323
  * Answer the session's on-screen prompt by driving its host UI.
279
324
  * `index` is the zero-based option position (Claude's pickers start with the
280
325
  * cursor on the first option, so index == the number of Down presses).
326
+ *
327
+ * `confirmSubmit` covers the extra step a GROUPED AskUserQuestion adds: after
328
+ * the last question is answered its picker does not close but shows a "Review
329
+ * your answers → Submit answers / Cancel" confirmation, already sitting on
330
+ * Submit. Without a second Enter the agent waits forever on a form the user
331
+ * cannot see. Single-question calls have no such step, so this stays off for
332
+ * them — an extra Enter there would land in the prompt box.
281
333
  */
282
- export async function injectObservedSelection(target, index) {
334
+ export async function injectObservedSelection(target, index, opts = {}) {
283
335
  if (index < 0 || index > 16)
284
336
  return { ok: false, reason: 'index out of range' };
285
337
  const { tty, appName, label } = target;
286
338
  if (!tty && !appName)
287
339
  return { ok: false, reason: 'no tty or app host for session' };
340
+ const submits = opts.confirmSubmit ? 2 : 1;
288
341
  if (tty) {
289
- if (await injectViaTmux(tty, index))
342
+ const viaTmux = await injectViaTmux(tty, index, submits);
343
+ if (viaTmux === true)
290
344
  return { ok: true, via: 'tmux' };
291
- if (await runOsa(buildItermSelectScript(tty, index), 5_000) === 'ok') {
345
+ // Some keys landed before it broke: the cursor has already moved, so
346
+ // falling through would send a second set of arrows on top of them.
347
+ if (viaTmux === 'partial') {
348
+ return { ok: false, reason: `tmux injection broke partway for ${tty}` };
349
+ }
350
+ if (await runOsa(buildItermSelectScript(tty, index, { enter: false }), 5_000) === 'ok') {
351
+ for (let i = 0; i < submits; i++) {
352
+ await pause(SUBMIT_PACE_MS);
353
+ await runOsa(buildItermSelectScript(tty, 0), 5_000);
354
+ }
292
355
  return { ok: true, via: 'iterm2' };
293
356
  }
294
357
  // Terminal.app: select the owning tab (no activation), then post keys to
295
358
  // its pid — focus-free.
296
359
  if (await runOsa(buildTerminalAppSelectTabScript(tty), 5_000) === 'ok') {
297
- const posted = await runJxa(buildPostKeysScript({ bundleIds: ['com.apple.Terminal'], names: ['Terminal', '터미널'] }, index));
360
+ const posted = await runJxa(buildPostKeysScript({ bundleIds: ['com.apple.Terminal'], names: ['Terminal', '터미널'] }, index, submits));
298
361
  if (posted === 'ok')
299
362
  return { ok: true, via: 'terminal-app' };
300
363
  debug('inject', `Terminal.app tab selected but key post failed: ${posted ?? 'error'}`);
@@ -309,10 +372,10 @@ export async function injectObservedSelection(target, index) {
309
372
  return { ok: true, via: 'app-button' };
310
373
  debug('inject', `app-button press on ${appName}: ${r ?? 'error'}`);
311
374
  }
312
- const posted = await runJxa(buildPostKeysScript({ bundleIds: APP_BUNDLE_IDS[appName] ?? [], names: [appName] }, index));
375
+ const posted = await runJxa(buildPostKeysScript({ bundleIds: APP_BUNDLE_IDS[appName] ?? [], names: [appName] }, index, submits));
313
376
  if (posted === 'ok')
314
377
  return { ok: true, via: 'app-keys' };
315
- if (await runOsa(buildAppKeysScript(appName, index)) === 'ok') {
378
+ if (await runOsa(buildAppKeysScript(appName, index, submits)) === 'ok') {
316
379
  return { ok: true, via: 'app-keys-raised' };
317
380
  }
318
381
  return { ok: false, reason: `no reachable UI in ${appName}` };
@@ -1 +1 @@
1
- {"version":3,"file":"observed-inject.js","sourceRoot":"","sources":["../src/observed-inject.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observed-inject.js","sourceRoot":"","sources":["../src/observed-inject.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,22 @@ export declare function isStopRequested(sid: string): boolean;
36
36
  /** One-shot consume by the PreToolUse deny path. */
37
37
  export declare function consumeStop(sid: string): boolean;
38
38
  export declare const STOP_DENY_REASON: string;
39
+ /**
40
+ * Deliver a device-answered AskUserQuestion back to Claude.
41
+ *
42
+ * The hook contract has no field for supplying a chosen option — a PreToolUse
43
+ * hook may only allow, deny or defer. But a denial's reason text IS handed to
44
+ * the model as the tool call's feedback, which is the same reason-as-message
45
+ * channel `STOP_DENY_REASON` and the Stop-hook directive queue already ride.
46
+ * So the daemon denies the question and states the answer the user gave on
47
+ * their device. The wording has to be unambiguous that these ARE the user's
48
+ * answers and that re-asking is wrong: read as a bare refusal, a model treats
49
+ * the denial as an obstacle and calls AskUserQuestion again.
50
+ */
51
+ export declare function buildAskAnswerReason(answers: Array<{
52
+ question: string;
53
+ label: string;
54
+ }>): string;
39
55
  export declare function queueDirective(sid: string, text: string): boolean;
40
56
  /** Pop exactly one directive (Stop hook drains one per turn end). A pending
41
57
  * STOP outranks directives: stopping wins, the queue is discarded. */
@@ -66,6 +82,28 @@ export interface HoldContext {
66
82
  * uncertainty → pass through untouched (Claude's normal flow, zero latency).
67
83
  */
68
84
  export declare function shouldHoldPreToolUse(ctx: HoldContext): HoldDecision;
85
+ /**
86
+ * Register a hold for an AskUserQuestion PreToolUse so a device can answer it.
87
+ *
88
+ * Shares only the one-gate-per-session invariant with `shouldHoldPreToolUse`
89
+ * and NONE of its precision guards — deliberately. Those guards exist because
90
+ * PreToolUse fires for tool calls Claude will auto-approve without ever asking
91
+ * the user, so holding one invents a decision nobody was asked for.
92
+ * AskUserQuestion is the opposite: its entire purpose is to prompt, it always
93
+ * does, and no allowlist entry suppresses it. There is no false-hold to guard
94
+ * against, so the permission-rule predictor is skipped — which is also what
95
+ * lets this rung work in the sandboxed App Store daemon, where the predictor
96
+ * can't read `~/.claude` and therefore disables the permission gate entirely.
97
+ *
98
+ * Release it through `gateReleased` with `undecided: false`: an unanswered ask
99
+ * says nothing about whether Claude auto-approves anything, so it must never
100
+ * feed the auto-approval learner.
101
+ */
102
+ export declare function beginAskGate(ctx: {
103
+ sessionId: string;
104
+ clientCount: number;
105
+ enabled: boolean;
106
+ }): HoldDecision;
69
107
  /** The held gate resolved (device decision, timeout, sweep). `undecided` marks
70
108
  * a pass-through release, which arms the auto-approval learner below. */
71
109
  export declare function gateReleased(sid: string, requestId: string, opts: {
@@ -1 +1 @@
1
- {"version":3,"file":"observed-steering.d.ts","sourceRoot":"","sources":["../src/observed-steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA4CH;mFACmF;AACnF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAMlG;AAED;;oEAEoE;AACpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAK3F;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK9C;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKhD;AAED,eAAO,MAAM,gBAAgB,QAGuC,CAAC;AAIrE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAUjE;AAED;uEACuE;AACvE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU7D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;+CAC+C;AAC/C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/C,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAqBnE;AAED;0EAC0E;AAC1E,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9E,IAAI,CAYN;AAED;2EAC2E;AAC3E,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAevE;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAKlG;AAED,mBAAmB;AACnB,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
1
+ {"version":3,"file":"observed-steering.d.ts","sourceRoot":"","sources":["../src/observed-steering.ts"],"names":[],"mappings":"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"}
@@ -95,6 +95,30 @@ export function consumeStop(sid) {
95
95
  export const STOP_DENY_REASON = 'AgentDeck: the user pressed STOP on their AgentDeck controller. '
96
96
  + 'Halt the current work now, briefly summarize where you left off, and wait '
97
97
  + 'for the user\'s next instruction. Do not start new tool calls.';
98
+ /**
99
+ * Deliver a device-answered AskUserQuestion back to Claude.
100
+ *
101
+ * The hook contract has no field for supplying a chosen option — a PreToolUse
102
+ * hook may only allow, deny or defer. But a denial's reason text IS handed to
103
+ * the model as the tool call's feedback, which is the same reason-as-message
104
+ * channel `STOP_DENY_REASON` and the Stop-hook directive queue already ride.
105
+ * So the daemon denies the question and states the answer the user gave on
106
+ * their device. The wording has to be unambiguous that these ARE the user's
107
+ * answers and that re-asking is wrong: read as a bare refusal, a model treats
108
+ * the denial as an obstacle and calls AskUserQuestion again.
109
+ */
110
+ export function buildAskAnswerReason(answers) {
111
+ const pairs = answers
112
+ .filter((a) => a.label)
113
+ .map((a) => `Q: ${a.question}\nA: ${a.label}`)
114
+ .join('\n');
115
+ return 'AgentDeck: the user already answered this question on their connected '
116
+ + 'AgentDeck device, so the question picker was not shown in their terminal.\n'
117
+ + `${pairs}\n`
118
+ + 'These are the user\'s own answers. Treat them exactly as if the tool had '
119
+ + 'returned them and continue — do not call AskUserQuestion again for these '
120
+ + 'questions, and do not ask the user to repeat themselves.';
121
+ }
98
122
  // ─── Turn-end directive queue ───
99
123
  export function queueDirective(sid, text) {
100
124
  const trimmed = text.trim();
@@ -183,6 +207,35 @@ export function shouldHoldPreToolUse(ctx) {
183
207
  s.heldRequestId = requestId;
184
208
  return { hold: true, requestId, reason: verdict === 'ask' ? 'ask rule matches' : 'prompt-prone, no rule match' };
185
209
  }
210
+ /**
211
+ * Register a hold for an AskUserQuestion PreToolUse so a device can answer it.
212
+ *
213
+ * Shares only the one-gate-per-session invariant with `shouldHoldPreToolUse`
214
+ * and NONE of its precision guards — deliberately. Those guards exist because
215
+ * PreToolUse fires for tool calls Claude will auto-approve without ever asking
216
+ * the user, so holding one invents a decision nobody was asked for.
217
+ * AskUserQuestion is the opposite: its entire purpose is to prompt, it always
218
+ * does, and no allowlist entry suppresses it. There is no false-hold to guard
219
+ * against, so the permission-rule predictor is skipped — which is also what
220
+ * lets this rung work in the sandboxed App Store daemon, where the predictor
221
+ * can't read `~/.claude` and therefore disables the permission gate entirely.
222
+ *
223
+ * Release it through `gateReleased` with `undecided: false`: an unanswered ask
224
+ * says nothing about whether Claude auto-approves anything, so it must never
225
+ * feed the auto-approval learner.
226
+ */
227
+ export function beginAskGate(ctx) {
228
+ if (!ctx.enabled)
229
+ return { hold: false, reason: 'disabled' };
230
+ if (ctx.clientCount < 1)
231
+ return { hold: false, reason: 'no clients' };
232
+ const s = ses(ctx.sessionId);
233
+ if (s.heldRequestId)
234
+ return { hold: false, reason: 'another gate already held' };
235
+ const requestId = randomUUID();
236
+ s.heldRequestId = requestId;
237
+ return { hold: true, requestId, reason: 'AskUserQuestion always prompts' };
238
+ }
186
239
  /** The held gate resolved (device decision, timeout, sweep). `undecided` marks
187
240
  * a pass-through release, which arms the auto-approval learner below. */
188
241
  export function gateReleased(sid, requestId, opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"observed-steering.js","sourceRoot":"","sources":["../src/observed-steering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observed-steering.js","sourceRoot":"","sources":["../src/observed-steering.ts"],"names":[],"mappings":"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"}
@@ -100,6 +100,15 @@ export declare class PassiveSessionObserver {
100
100
  export declare function parseProcessTable(output: string): ProcInfo[];
101
101
  export declare function parseClaudeTranscript(raw: string): TranscriptSummary;
102
102
  export declare function parseCodexRollout(raw: string): CodexRolloutSummary;
103
+ /**
104
+ * Parse `Win32_Process | ConvertTo-Json` output into the shared ProcInfo shape.
105
+ * ConvertTo-Json emits a bare object when a single row matches and an array
106
+ * otherwise; CommandLine is null for protected/system processes (those rows
107
+ * carry nothing observable and are dropped); WorkingSetSize is bytes where ps
108
+ * reports KB. Windows has no controlling tty, so every row is tty-less — which
109
+ * host app owns a tty-less Codex there is still unmeasured (#143).
110
+ */
111
+ export declare function parseCimProcessTable(json: string): ProcInfo[];
103
112
  /** Extract the enclosing macOS app name from an executable path, e.g.
104
113
  * "/Applications/ChatGPT.app/Contents/Resources/codex …" → "ChatGPT". */
105
114
  export declare function appNameFromCommand(command: string): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"passive-observer.d.ts","sourceRoot":"","sources":["../src/passive-observer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passive-observer.d.ts","sourceRoot":"","sources":["../src/passive-observer.ts"],"names":[],"mappings":"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"}
@@ -405,12 +405,13 @@ export function parseCodexRollout(raw) {
405
405
  };
406
406
  }
407
407
  async function collectProcessInfo() {
408
+ if (process.platform === 'win32')
409
+ return collectProcessInfoWin32();
408
410
  try {
409
411
  const { stdout } = await execFileAsync('ps', ['-ww', '-eo', 'pid=,ppid=,rss=,tty=,command='], {
410
412
  encoding: 'utf8',
411
413
  timeout: 2_000,
412
414
  maxBuffer: 2 * 1024 * 1024,
413
- windowsHide: true, // git-bash ps.exe pops a console window every 5s scan on Windows without this
414
415
  });
415
416
  return parseProcessTable(stdout);
416
417
  }
@@ -418,6 +419,69 @@ async function collectProcessInfo() {
418
419
  return [];
419
420
  }
420
421
  }
422
+ /**
423
+ * Windows scan backend. `ps` there only exists under git-bash and reports MSYS
424
+ * processes, not native Win32 command lines — so the previous "run ps anyway"
425
+ * path saw nothing worth observing. Win32_Process has the real command lines.
426
+ * A PowerShell spawn per poll is real overhead; if it matters on hardware the
427
+ * fix is a persistent coprocess like the plugin's volume path (#143).
428
+ */
429
+ async function collectProcessInfoWin32() {
430
+ try {
431
+ const { stdout } = await execFileAsync('powershell.exe', [
432
+ '-NoProfile', '-NonInteractive', '-Command',
433
+ // Windows PowerShell pipes default to the OEM codepage, which mangles
434
+ // non-ASCII command lines (C:\Users\罗宾\… is a normal path here) —
435
+ // pin the pipe to UTF-8 before emitting anything.
436
+ '[Console]::OutputEncoding=[System.Text.Encoding]::UTF8; ' +
437
+ 'Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,WorkingSetSize,CommandLine | ConvertTo-Json -Compress',
438
+ ], {
439
+ encoding: 'utf8',
440
+ timeout: 10_000,
441
+ maxBuffer: 8 * 1024 * 1024,
442
+ windowsHide: true,
443
+ });
444
+ return parseCimProcessTable(stdout);
445
+ }
446
+ catch {
447
+ return [];
448
+ }
449
+ }
450
+ /**
451
+ * Parse `Win32_Process | ConvertTo-Json` output into the shared ProcInfo shape.
452
+ * ConvertTo-Json emits a bare object when a single row matches and an array
453
+ * otherwise; CommandLine is null for protected/system processes (those rows
454
+ * carry nothing observable and are dropped); WorkingSetSize is bytes where ps
455
+ * reports KB. Windows has no controlling tty, so every row is tty-less — which
456
+ * host app owns a tty-less Codex there is still unmeasured (#143).
457
+ */
458
+ export function parseCimProcessTable(json) {
459
+ let parsed;
460
+ try {
461
+ parsed = JSON.parse(json);
462
+ }
463
+ catch {
464
+ return [];
465
+ }
466
+ const rows = Array.isArray(parsed) ? parsed : [parsed];
467
+ const result = [];
468
+ for (const row of rows) {
469
+ if (!isRecord(row))
470
+ continue;
471
+ const pid = numberAt(row, 'ProcessId');
472
+ const command = stringAt(row, 'CommandLine')?.trim();
473
+ if (pid <= 0 || !command)
474
+ continue;
475
+ result.push({
476
+ pid,
477
+ ppid: numberAt(row, 'ParentProcessId'),
478
+ rssKb: Math.round(numberAt(row, 'WorkingSetSize') / 1024),
479
+ tty: undefined,
480
+ command,
481
+ });
482
+ }
483
+ return result;
484
+ }
421
485
  /** Extract the enclosing macOS app name from an executable path, e.g.
422
486
  * "/Applications/ChatGPT.app/Contents/Resources/codex …" → "ChatGPT". */
423
487
  export function appNameFromCommand(command) {
@@ -753,6 +817,12 @@ function findClaudeTranscript(configDirs, cwd, sessionId) {
753
817
  async function mapCodexPidsToRollouts(pids) {
754
818
  if (pids.length === 0)
755
819
  return new Map();
820
+ // Windows ships no lsof/procfs equivalent, so this is an explicit platform
821
+ // gap (#143) rather than a silent lsof spawn failure: Codex processes found
822
+ // by the scan are dropped here until an identity source is measured — the
823
+ // codex_* hooks are the likely one, as on macOS.
824
+ if (process.platform === 'win32')
825
+ return new Map();
756
826
  if (process.platform === 'linux') {
757
827
  const map = new Map();
758
828
  for (const pid of pids) {
@@ -986,11 +1056,26 @@ function isCodexRolloutPath(path) {
986
1056
  const name = basename(path);
987
1057
  return name.startsWith('rollout-') && name.endsWith('.jsonl');
988
1058
  }
1059
+ /** First two argv-ish tokens of a command line. Win32 CommandLine quotes an
1060
+ * argv[0] whose path contains spaces — that whole quoted span is one token,
1061
+ * where a plain whitespace split would shear it mid-path. */
1062
+ function leadingCommandTokens(command) {
1063
+ const quoted = command.match(/^"([^"]*)"\s*(.*)$/);
1064
+ if (!quoted)
1065
+ return command.split(/\s+/).slice(0, 2);
1066
+ return [quoted[1], quoted[2].split(/\s+/)[0] ?? ''];
1067
+ }
989
1068
  function cmdHasBinary(command, name) {
990
- return command
991
- .split(/\s+/)
992
- .slice(0, 2)
993
- .some((token) => basename(token) === name);
1069
+ // Split paths on both separators by hand: path.basename() is
1070
+ // platform-flavored at runtime, and a Win32 CommandLine must parse the same
1071
+ // way in macOS-run tests as on a Windows daemon. The exact-case compare
1072
+ // stays it is what excludes the Electron helper basenames (capital
1073
+ // "Codex (Renderer)"); only the .exe form is case-insensitive, since the
1074
+ // filesystem that names it is.
1075
+ return leadingCommandTokens(command).some((token) => {
1076
+ const bare = token.replace(/^"+|"+$/g, '').split(/[\\/]/).pop() ?? '';
1077
+ return bare === name || bare.toLowerCase() === `${name}.exe`;
1078
+ });
994
1079
  }
995
1080
  function isDescendantOf(pid, ancestorPid, byPid) {
996
1081
  let current = byPid.get(pid);