terminalhire 0.24.0 → 0.24.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.
@@ -45,9 +45,9 @@ var init_keytar = __esm({
45
45
  }
46
46
  });
47
47
 
48
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
48
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
49
49
  var require_keytar = __commonJS({
50
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
50
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
51
51
  "use strict";
52
52
  init_keytar();
53
53
  try {
@@ -7239,9 +7239,9 @@ var init_keytar = __esm({
7239
7239
  }
7240
7240
  });
7241
7241
 
7242
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
7242
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
7243
7243
  var require_keytar = __commonJS({
7244
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7244
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7245
7245
  "use strict";
7246
7246
  init_keytar();
7247
7247
  try {
@@ -4001,9 +4001,9 @@ var init_keytar = __esm({
4001
4001
  }
4002
4002
  });
4003
4003
 
4004
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
4004
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
4005
4005
  var require_keytar = __commonJS({
4006
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
4006
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
4007
4007
  "use strict";
4008
4008
  init_keytar();
4009
4009
  try {
@@ -4029,9 +4029,9 @@ var init_keytar = __esm({
4029
4029
  }
4030
4030
  });
4031
4031
 
4032
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
4032
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
4033
4033
  var require_keytar = __commonJS({
4034
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
4034
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
4035
4035
  "use strict";
4036
4036
  init_keytar();
4037
4037
  try {
@@ -7362,9 +7362,9 @@ var init_keytar = __esm({
7362
7362
  }
7363
7363
  });
7364
7364
 
7365
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
7365
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
7366
7366
  var require_keytar = __commonJS({
7367
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7367
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7368
7368
  "use strict";
7369
7369
  init_keytar();
7370
7370
  try {
@@ -1360,9 +1360,9 @@ var init_keytar = __esm({
1360
1360
  }
1361
1361
  });
1362
1362
 
1363
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1363
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1364
1364
  var require_keytar = __commonJS({
1365
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1365
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1366
1366
  "use strict";
1367
1367
  init_keytar();
1368
1368
  try {
@@ -7239,9 +7239,9 @@ var init_keytar = __esm({
7239
7239
  }
7240
7240
  });
7241
7241
 
7242
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
7242
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
7243
7243
  var require_keytar = __commonJS({
7244
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7244
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7245
7245
  "use strict";
7246
7246
  init_keytar();
7247
7247
  try {
@@ -346,9 +346,9 @@ var init_keytar = __esm({
346
346
  }
347
347
  });
348
348
 
349
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
349
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
350
350
  var require_keytar = __commonJS({
351
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
351
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
352
352
  "use strict";
353
353
  init_keytar();
354
354
  try {
@@ -13414,7 +13414,8 @@ function createRuntime({
13414
13414
  input = typeof process !== "undefined" ? process.stdin : void 0,
13415
13415
  output = typeof process !== "undefined" ? process.stdout : void 0,
13416
13416
  signals = typeof process !== "undefined" ? process : void 0,
13417
- exit = (code) => process.exit(code)
13417
+ exit = (code) => process.exit(code),
13418
+ mouse = false
13418
13419
  } = {}) {
13419
13420
  let entered = false;
13420
13421
  let cleaned = false;
@@ -13442,7 +13443,8 @@ function createRuntime({
13442
13443
  } catch {
13443
13444
  }
13444
13445
  try {
13445
- if (output && typeof output.write === "function") output.write(SHOW_CURSOR + EXIT_ALT);
13446
+ if (output && typeof output.write === "function")
13447
+ output.write((mouse ? MOUSE_OFF : "") + SHOW_CURSOR + EXIT_ALT);
13446
13448
  } catch {
13447
13449
  }
13448
13450
  }
@@ -13477,7 +13479,8 @@ function createRuntime({
13477
13479
  signals.on("unhandledRejection", onUncaught);
13478
13480
  signals.on("exit", onExitEvt);
13479
13481
  }
13480
- if (output && typeof output.write === "function") output.write(ENTER_ALT + HIDE_CURSOR);
13482
+ if (output && typeof output.write === "function")
13483
+ output.write(ENTER_ALT + HIDE_CURSOR + (mouse ? MOUSE_ON : ""));
13481
13484
  }
13482
13485
  return {
13483
13486
  enter,
@@ -13700,7 +13703,7 @@ function gradientFg(stops, t, level = "truecolor") {
13700
13703
  const b = Math.round(c0.b + (c1.b - c0.b) * localT);
13701
13704
  return level === "256" ? `\x1B[38;5;${rgbTo256(r, g, b)}m` : `\x1B[38;2;${r};${g};${b}m`;
13702
13705
  }
13703
- var HIDE_CURSOR, SHOW_CURSOR, ENTER_ALT, EXIT_ALT, INVERSE, RESET, BOLD, KEY_CTRL_C, KEY_ESC, KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_LEFT, KEY_TAB, KEY_ENTER_A, KEY_ENTER_B, KEY_BACKSPACE_A, KEY_BACKSPACE_B, KEY_Q, KEY_DIGITS, ANSI_CSI, ANSI_OSC, ANSI_OTHER, C0_C1_DEL, PALETTE, COLOR_ROLES, CUBE_STEPS;
13706
+ var HIDE_CURSOR, SHOW_CURSOR, ENTER_ALT, EXIT_ALT, MOUSE_ON, MOUSE_OFF, INVERSE, RESET, BOLD, KEY_CTRL_C, KEY_ESC, KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_LEFT, KEY_TAB, KEY_ENTER_A, KEY_ENTER_B, KEY_BACKSPACE_A, KEY_BACKSPACE_B, KEY_Q, KEY_DIGITS, ANSI_CSI, ANSI_OSC, ANSI_OTHER, C0_C1_DEL, PALETTE, COLOR_ROLES, CUBE_STEPS;
13704
13707
  var init_tui_core = __esm({
13705
13708
  "bin/tui-core.js"() {
13706
13709
  "use strict";
@@ -13708,6 +13711,8 @@ var init_tui_core = __esm({
13708
13711
  SHOW_CURSOR = "\x1B[?25h";
13709
13712
  ENTER_ALT = "\x1B[?1049h";
13710
13713
  EXIT_ALT = "\x1B[?1049l";
13714
+ MOUSE_ON = "\x1B[?1000h\x1B[?1006h";
13715
+ MOUSE_OFF = "\x1B[?1006l\x1B[?1000l";
13711
13716
  INVERSE = "\x1B[7m";
13712
13717
  RESET = "\x1B[0m";
13713
13718
  BOLD = "\x1B[1m";
@@ -15658,7 +15663,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
15658
15663
  output && output.isTTY
15659
15664
  );
15660
15665
  const c = (role) => degrade(role, level);
15661
- const runtime = createRuntime({ input, output, signals });
15666
+ const runtime = createRuntime({ input, output, signals, mouse: true });
15662
15667
  const initial = readTermSize(output);
15663
15668
  const renderer = createRenderer({ output, rows: initial.rows, cols: initial.cols });
15664
15669
  let active = 0;
@@ -15689,6 +15694,52 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
15689
15694
  let homeIntrosOpen = false;
15690
15695
  let splashActive = true;
15691
15696
  let splashTimer = null;
15697
+ const MOUSE_SPLIT_MS = 50;
15698
+ let mousePending = "";
15699
+ let mouseFlushTimer = null;
15700
+ function clearMousePending() {
15701
+ mousePending = "";
15702
+ if (mouseFlushTimer) {
15703
+ clearTimeout(mouseFlushTimer);
15704
+ mouseFlushTimer = null;
15705
+ }
15706
+ }
15707
+ function armMouseFlush() {
15708
+ mouseFlushTimer = setTimeout(() => {
15709
+ const held = mousePending;
15710
+ mousePending = "";
15711
+ mouseFlushTimer = null;
15712
+ if (done) return;
15713
+ if (held === KEY_ESC || held === "\x1B[") {
15714
+ if (mode !== "nav") escToNav();
15715
+ const tail = held.slice(1);
15716
+ if (tail) {
15717
+ onData(Buffer.from(tail, "utf8"));
15718
+ return;
15719
+ }
15720
+ repaint();
15721
+ }
15722
+ }, MOUSE_SPLIT_MS);
15723
+ if (mouseFlushTimer.unref) mouseFlushTimer.unref();
15724
+ }
15725
+ function isIncompleteMousePrefix(x) {
15726
+ return /^\x1b\[(<[0-9;]*)?$/.test(x);
15727
+ }
15728
+ function beginsMouse(x) {
15729
+ return /^\x1b\[<\d+;\d+;\d+[Mm]/.test(x) || isIncompleteMousePrefix(x);
15730
+ }
15731
+ function reassembles(x) {
15732
+ return beginsMouse(x) || x === KEY_UP || x === KEY_DOWN || x === KEY_LEFT || x === KEY_RIGHT || x === KEY_SHIFT_TAB;
15733
+ }
15734
+ function completesEscSequence(x) {
15735
+ return (
15736
+ // eslint-disable-next-line no-control-regex -- a leading COMPLETE SGR mouse report by design
15737
+ /^\x1b\[<\d+;\d+;\d+[Mm]/.test(x) || x === KEY_UP || x === KEY_DOWN || x === KEY_LEFT || x === KEY_RIGHT || x === KEY_SHIFT_TAB
15738
+ );
15739
+ }
15740
+ function continuesSgrMouse(x) {
15741
+ return /^\x1b\[<[0-9;]*$/.test(x);
15742
+ }
15692
15743
  const errMsg = (e) => String(e && e.message ? e.message : e);
15693
15744
  function paletteResults() {
15694
15745
  return PALETTE_VERBS.filter((v) => fuzzyMatch(paletteQuery, v));
@@ -15940,7 +15991,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
15940
15991
  rows.push(inboxLine, introsLine);
15941
15992
  return rows;
15942
15993
  }
15943
- function activeSourceIndex() {
15994
+ function sourceIndexForVisible(visibleTarget) {
15944
15995
  const name = PANES[active];
15945
15996
  const raw = paneRows(name);
15946
15997
  const q = filterByPane[active];
@@ -15948,14 +15999,16 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
15948
15999
  for (let i = 0; i < raw.length; i++) {
15949
16000
  if (substrMatch(q, raw[i])) {
15950
16001
  visibleIdx++;
15951
- if (visibleIdx === offsetByPane[active]) return i;
16002
+ if (visibleIdx === visibleTarget) return i;
15952
16003
  }
15953
16004
  }
15954
16005
  return -1;
15955
16006
  }
15956
- function activateRow() {
16007
+ function activeSourceIndex() {
16008
+ return sourceIndexForVisible(offsetByPane[active]);
16009
+ }
16010
+ function activateRow(idx = activeSourceIndex()) {
15957
16011
  const name = PANES[active];
15958
- const idx = activeSourceIndex();
15959
16012
  if (idx < 0) return;
15960
16013
  if (name === "Jobs") {
15961
16014
  const st = listState.Jobs;
@@ -16025,6 +16078,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
16025
16078
  const q = filterByPane[active];
16026
16079
  return paneRows(PANES[active]).filter((r) => substrMatch(q, r));
16027
16080
  }
16081
+ const NAV_WIDTH = 16;
16028
16082
  function bodyRegion() {
16029
16083
  const rows = renderer.rows;
16030
16084
  const top = 2;
@@ -16072,7 +16126,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
16072
16126
  return;
16073
16127
  }
16074
16128
  const buf = createBuffer(rows, cols);
16075
- const navWidth = 16;
16129
+ const navWidth = NAV_WIDTH;
16076
16130
  const mainCol = navWidth + 1;
16077
16131
  const mainWidth = cols - mainCol;
16078
16132
  const { top: bodyTop, bottom: bodyBottom, listTop, viewH } = bodyRegion();
@@ -16171,6 +16225,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
16171
16225
  "\u2190 / \u2192 previous / next pane",
16172
16226
  "Tab cycle pane forward",
16173
16227
  "Shift+Tab cycle pane backward",
16228
+ "click select section \xB7 wheel scroll",
16174
16229
  "Ctrl+K / : open command palette",
16175
16230
  "/ filter the active pane",
16176
16231
  "? toggle this help",
@@ -16288,10 +16343,63 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
16288
16343
  }
16289
16344
  }
16290
16345
  }
16346
+ function onClick(row, col) {
16347
+ if (mode !== "nav") return;
16348
+ const { top: bodyTop, bottom: bodyBottom, listTop, viewH } = bodyRegion();
16349
+ if (col < NAV_WIDTH) {
16350
+ const paneIdx = row - bodyTop;
16351
+ if (paneIdx >= 0 && paneIdx < PANES.length && row <= bodyBottom) active = paneIdx;
16352
+ return;
16353
+ }
16354
+ if (col > NAV_WIDTH && row >= listTop && row < listTop + viewH) {
16355
+ const visibleTarget = offsetByPane[active] + (row - listTop);
16356
+ activateRow(sourceIndexForVisible(visibleTarget));
16357
+ }
16358
+ }
16359
+ function handleMouse(seq) {
16360
+ const head = /^\x1b\[<(\d+);(\d+);(\d+)([Mm])/;
16361
+ let rest = seq;
16362
+ let m;
16363
+ while (m = head.exec(rest)) {
16364
+ const b = Number(m[1]);
16365
+ const col = Number(m[2]) - 1;
16366
+ const row = Number(m[3]) - 1;
16367
+ const press = m[4] === "M";
16368
+ rest = rest.slice(m[0].length);
16369
+ if (b === 64) {
16370
+ if (mode === "nav") scrollActive(-1);
16371
+ continue;
16372
+ }
16373
+ if (b === 65) {
16374
+ if (mode === "nav") scrollActive(1);
16375
+ continue;
16376
+ }
16377
+ if (press && (b & 3) === 0) onClick(row, col);
16378
+ }
16379
+ return rest;
16380
+ }
16291
16381
  function onData(chunk) {
16292
16382
  if (done) return;
16293
- const s = chunk.toString("utf8");
16383
+ let s = chunk.toString("utf8");
16294
16384
  if (s === KEY_CTRL_C) return quit();
16385
+ if (mousePending) {
16386
+ const combined = mousePending + s;
16387
+ const wasEsc = mousePending === KEY_ESC;
16388
+ clearMousePending();
16389
+ if (wasEsc) {
16390
+ if (completesEscSequence(combined)) {
16391
+ s = combined;
16392
+ } else if (continuesSgrMouse(combined)) {
16393
+ mousePending = combined;
16394
+ armMouseFlush();
16395
+ return;
16396
+ } else if (mode !== "nav") {
16397
+ escToNav();
16398
+ }
16399
+ } else if (reassembles(combined)) {
16400
+ s = combined;
16401
+ }
16402
+ }
16295
16403
  if (splashActive) {
16296
16404
  splashActive = false;
16297
16405
  if (splashTimer) {
@@ -16300,11 +16408,43 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
16300
16408
  }
16301
16409
  renderer.invalidate();
16302
16410
  }
16303
- if (s === KEY_ESC) {
16304
- if (mode !== "nav") escToNav();
16411
+ if (s === "\x1B[") {
16412
+ mousePending = s;
16413
+ armMouseFlush();
16414
+ return;
16415
+ }
16416
+ if (s.length >= 3 && s.charCodeAt(0) === 27 && s[1] === "[" && s[2] === "<") {
16417
+ const remainder = handleMouse(s);
16418
+ if (remainder) {
16419
+ if (isIncompleteMousePrefix(remainder)) {
16420
+ mousePending = remainder;
16421
+ armMouseFlush();
16422
+ } else if (remainder !== s) {
16423
+ onData(Buffer.from(remainder, "utf8"));
16424
+ return;
16425
+ } else {
16426
+ const tail = s.replace(/^\x1b\[<[0-9;]*/, "");
16427
+ if (tail && tail !== s) {
16428
+ const escAt = tail.indexOf("\x1B");
16429
+ const keys = escAt === -1 ? tail : tail.slice(0, escAt);
16430
+ if (keys) dispatchKeys(keys);
16431
+ if (escAt !== -1) {
16432
+ onData(Buffer.from(tail.slice(escAt), "utf8"));
16433
+ return;
16434
+ }
16435
+ repaint();
16436
+ return;
16437
+ }
16438
+ }
16439
+ }
16305
16440
  repaint();
16306
16441
  return;
16307
16442
  }
16443
+ if (s === KEY_ESC) {
16444
+ mousePending = KEY_ESC;
16445
+ armMouseFlush();
16446
+ return;
16447
+ }
16308
16448
  if (s === KEY_SHIFT_TAB) {
16309
16449
  if (mode === "nav") cycleFocus(-1);
16310
16450
  repaint();
@@ -16352,6 +16492,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
16352
16492
  clearTimeout(splashTimer);
16353
16493
  splashTimer = null;
16354
16494
  }
16495
+ clearMousePending();
16355
16496
  try {
16356
16497
  input.removeListener("data", onData);
16357
16498
  } catch {
@@ -50,7 +50,8 @@ function createRuntime({
50
50
  input = typeof process !== "undefined" ? process.stdin : void 0,
51
51
  output = typeof process !== "undefined" ? process.stdout : void 0,
52
52
  signals = typeof process !== "undefined" ? process : void 0,
53
- exit = (code) => process.exit(code)
53
+ exit = (code) => process.exit(code),
54
+ mouse = false
54
55
  } = {}) {
55
56
  let entered = false;
56
57
  let cleaned = false;
@@ -78,7 +79,8 @@ function createRuntime({
78
79
  } catch {
79
80
  }
80
81
  try {
81
- if (output && typeof output.write === "function") output.write(SHOW_CURSOR + EXIT_ALT);
82
+ if (output && typeof output.write === "function")
83
+ output.write((mouse ? MOUSE_OFF : "") + SHOW_CURSOR + EXIT_ALT);
82
84
  } catch {
83
85
  }
84
86
  }
@@ -113,7 +115,8 @@ function createRuntime({
113
115
  signals.on("unhandledRejection", onUncaught);
114
116
  signals.on("exit", onExitEvt);
115
117
  }
116
- if (output && typeof output.write === "function") output.write(ENTER_ALT + HIDE_CURSOR);
118
+ if (output && typeof output.write === "function")
119
+ output.write(ENTER_ALT + HIDE_CURSOR + (mouse ? MOUSE_ON : ""));
117
120
  }
118
121
  return {
119
122
  enter,
@@ -336,7 +339,7 @@ function gradientFg(stops, t, level = "truecolor") {
336
339
  const b = Math.round(c0.b + (c1.b - c0.b) * localT);
337
340
  return level === "256" ? `\x1B[38;5;${rgbTo256(r, g, b)}m` : `\x1B[38;2;${r};${g};${b}m`;
338
341
  }
339
- var HIDE_CURSOR, SHOW_CURSOR, ENTER_ALT, EXIT_ALT, INVERSE, RESET, BOLD, KEY_CTRL_C, KEY_ESC, KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_LEFT, KEY_TAB, KEY_ENTER_A, KEY_ENTER_B, KEY_BACKSPACE_A, KEY_BACKSPACE_B, KEY_Q, KEY_DIGITS, ANSI_CSI, ANSI_OSC, ANSI_OTHER, C0_C1_DEL, PALETTE, COLOR_ROLES, CUBE_STEPS;
342
+ var HIDE_CURSOR, SHOW_CURSOR, ENTER_ALT, EXIT_ALT, MOUSE_ON, MOUSE_OFF, INVERSE, RESET, BOLD, KEY_CTRL_C, KEY_ESC, KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_LEFT, KEY_TAB, KEY_ENTER_A, KEY_ENTER_B, KEY_BACKSPACE_A, KEY_BACKSPACE_B, KEY_Q, KEY_DIGITS, ANSI_CSI, ANSI_OSC, ANSI_OTHER, C0_C1_DEL, PALETTE, COLOR_ROLES, CUBE_STEPS;
340
343
  var init_tui_core = __esm({
341
344
  "bin/tui-core.js"() {
342
345
  "use strict";
@@ -344,6 +347,8 @@ var init_tui_core = __esm({
344
347
  SHOW_CURSOR = "\x1B[?25h";
345
348
  ENTER_ALT = "\x1B[?1049h";
346
349
  EXIT_ALT = "\x1B[?1049l";
350
+ MOUSE_ON = "\x1B[?1000h\x1B[?1006h";
351
+ MOUSE_OFF = "\x1B[?1006l\x1B[?1000l";
347
352
  INVERSE = "\x1B[7m";
348
353
  RESET = "\x1B[0m";
349
354
  BOLD = "\x1B[1m";
@@ -7605,9 +7610,9 @@ var init_keytar = __esm({
7605
7610
  }
7606
7611
  });
7607
7612
 
7608
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
7613
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
7609
7614
  var require_keytar = __commonJS({
7610
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7615
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7611
7616
  "use strict";
7612
7617
  init_keytar();
7613
7618
  try {
@@ -9016,7 +9021,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9016
9021
  output && output.isTTY
9017
9022
  );
9018
9023
  const c = (role) => degrade(role, level);
9019
- const runtime = createRuntime({ input, output, signals });
9024
+ const runtime = createRuntime({ input, output, signals, mouse: true });
9020
9025
  const initial = readTermSize(output);
9021
9026
  const renderer = createRenderer({ output, rows: initial.rows, cols: initial.cols });
9022
9027
  let active = 0;
@@ -9047,6 +9052,52 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9047
9052
  let homeIntrosOpen = false;
9048
9053
  let splashActive = true;
9049
9054
  let splashTimer = null;
9055
+ const MOUSE_SPLIT_MS = 50;
9056
+ let mousePending = "";
9057
+ let mouseFlushTimer = null;
9058
+ function clearMousePending() {
9059
+ mousePending = "";
9060
+ if (mouseFlushTimer) {
9061
+ clearTimeout(mouseFlushTimer);
9062
+ mouseFlushTimer = null;
9063
+ }
9064
+ }
9065
+ function armMouseFlush() {
9066
+ mouseFlushTimer = setTimeout(() => {
9067
+ const held = mousePending;
9068
+ mousePending = "";
9069
+ mouseFlushTimer = null;
9070
+ if (done) return;
9071
+ if (held === KEY_ESC || held === "\x1B[") {
9072
+ if (mode !== "nav") escToNav();
9073
+ const tail = held.slice(1);
9074
+ if (tail) {
9075
+ onData(Buffer.from(tail, "utf8"));
9076
+ return;
9077
+ }
9078
+ repaint();
9079
+ }
9080
+ }, MOUSE_SPLIT_MS);
9081
+ if (mouseFlushTimer.unref) mouseFlushTimer.unref();
9082
+ }
9083
+ function isIncompleteMousePrefix(x) {
9084
+ return /^\x1b\[(<[0-9;]*)?$/.test(x);
9085
+ }
9086
+ function beginsMouse(x) {
9087
+ return /^\x1b\[<\d+;\d+;\d+[Mm]/.test(x) || isIncompleteMousePrefix(x);
9088
+ }
9089
+ function reassembles(x) {
9090
+ return beginsMouse(x) || x === KEY_UP || x === KEY_DOWN || x === KEY_LEFT || x === KEY_RIGHT || x === KEY_SHIFT_TAB;
9091
+ }
9092
+ function completesEscSequence(x) {
9093
+ return (
9094
+ // eslint-disable-next-line no-control-regex -- a leading COMPLETE SGR mouse report by design
9095
+ /^\x1b\[<\d+;\d+;\d+[Mm]/.test(x) || x === KEY_UP || x === KEY_DOWN || x === KEY_LEFT || x === KEY_RIGHT || x === KEY_SHIFT_TAB
9096
+ );
9097
+ }
9098
+ function continuesSgrMouse(x) {
9099
+ return /^\x1b\[<[0-9;]*$/.test(x);
9100
+ }
9050
9101
  const errMsg = (e) => String(e && e.message ? e.message : e);
9051
9102
  function paletteResults() {
9052
9103
  return PALETTE_VERBS.filter((v) => fuzzyMatch(paletteQuery, v));
@@ -9298,7 +9349,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9298
9349
  rows.push(inboxLine, introsLine);
9299
9350
  return rows;
9300
9351
  }
9301
- function activeSourceIndex() {
9352
+ function sourceIndexForVisible(visibleTarget) {
9302
9353
  const name = PANES[active];
9303
9354
  const raw = paneRows(name);
9304
9355
  const q = filterByPane[active];
@@ -9306,14 +9357,16 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9306
9357
  for (let i = 0; i < raw.length; i++) {
9307
9358
  if (substrMatch(q, raw[i])) {
9308
9359
  visibleIdx++;
9309
- if (visibleIdx === offsetByPane[active]) return i;
9360
+ if (visibleIdx === visibleTarget) return i;
9310
9361
  }
9311
9362
  }
9312
9363
  return -1;
9313
9364
  }
9314
- function activateRow() {
9365
+ function activeSourceIndex() {
9366
+ return sourceIndexForVisible(offsetByPane[active]);
9367
+ }
9368
+ function activateRow(idx = activeSourceIndex()) {
9315
9369
  const name = PANES[active];
9316
- const idx = activeSourceIndex();
9317
9370
  if (idx < 0) return;
9318
9371
  if (name === "Jobs") {
9319
9372
  const st = listState.Jobs;
@@ -9383,6 +9436,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9383
9436
  const q = filterByPane[active];
9384
9437
  return paneRows(PANES[active]).filter((r) => substrMatch(q, r));
9385
9438
  }
9439
+ const NAV_WIDTH = 16;
9386
9440
  function bodyRegion() {
9387
9441
  const rows = renderer.rows;
9388
9442
  const top = 2;
@@ -9430,7 +9484,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9430
9484
  return;
9431
9485
  }
9432
9486
  const buf = createBuffer(rows, cols);
9433
- const navWidth = 16;
9487
+ const navWidth = NAV_WIDTH;
9434
9488
  const mainCol = navWidth + 1;
9435
9489
  const mainWidth = cols - mainCol;
9436
9490
  const { top: bodyTop, bottom: bodyBottom, listTop, viewH } = bodyRegion();
@@ -9529,6 +9583,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9529
9583
  "\u2190 / \u2192 previous / next pane",
9530
9584
  "Tab cycle pane forward",
9531
9585
  "Shift+Tab cycle pane backward",
9586
+ "click select section \xB7 wheel scroll",
9532
9587
  "Ctrl+K / : open command palette",
9533
9588
  "/ filter the active pane",
9534
9589
  "? toggle this help",
@@ -9646,10 +9701,63 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9646
9701
  }
9647
9702
  }
9648
9703
  }
9704
+ function onClick(row, col) {
9705
+ if (mode !== "nav") return;
9706
+ const { top: bodyTop, bottom: bodyBottom, listTop, viewH } = bodyRegion();
9707
+ if (col < NAV_WIDTH) {
9708
+ const paneIdx = row - bodyTop;
9709
+ if (paneIdx >= 0 && paneIdx < PANES.length && row <= bodyBottom) active = paneIdx;
9710
+ return;
9711
+ }
9712
+ if (col > NAV_WIDTH && row >= listTop && row < listTop + viewH) {
9713
+ const visibleTarget = offsetByPane[active] + (row - listTop);
9714
+ activateRow(sourceIndexForVisible(visibleTarget));
9715
+ }
9716
+ }
9717
+ function handleMouse(seq) {
9718
+ const head = /^\x1b\[<(\d+);(\d+);(\d+)([Mm])/;
9719
+ let rest = seq;
9720
+ let m;
9721
+ while (m = head.exec(rest)) {
9722
+ const b = Number(m[1]);
9723
+ const col = Number(m[2]) - 1;
9724
+ const row = Number(m[3]) - 1;
9725
+ const press = m[4] === "M";
9726
+ rest = rest.slice(m[0].length);
9727
+ if (b === 64) {
9728
+ if (mode === "nav") scrollActive(-1);
9729
+ continue;
9730
+ }
9731
+ if (b === 65) {
9732
+ if (mode === "nav") scrollActive(1);
9733
+ continue;
9734
+ }
9735
+ if (press && (b & 3) === 0) onClick(row, col);
9736
+ }
9737
+ return rest;
9738
+ }
9649
9739
  function onData(chunk) {
9650
9740
  if (done) return;
9651
- const s = chunk.toString("utf8");
9741
+ let s = chunk.toString("utf8");
9652
9742
  if (s === KEY_CTRL_C) return quit();
9743
+ if (mousePending) {
9744
+ const combined = mousePending + s;
9745
+ const wasEsc = mousePending === KEY_ESC;
9746
+ clearMousePending();
9747
+ if (wasEsc) {
9748
+ if (completesEscSequence(combined)) {
9749
+ s = combined;
9750
+ } else if (continuesSgrMouse(combined)) {
9751
+ mousePending = combined;
9752
+ armMouseFlush();
9753
+ return;
9754
+ } else if (mode !== "nav") {
9755
+ escToNav();
9756
+ }
9757
+ } else if (reassembles(combined)) {
9758
+ s = combined;
9759
+ }
9760
+ }
9653
9761
  if (splashActive) {
9654
9762
  splashActive = false;
9655
9763
  if (splashTimer) {
@@ -9658,11 +9766,43 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9658
9766
  }
9659
9767
  renderer.invalidate();
9660
9768
  }
9661
- if (s === KEY_ESC) {
9662
- if (mode !== "nav") escToNav();
9769
+ if (s === "\x1B[") {
9770
+ mousePending = s;
9771
+ armMouseFlush();
9772
+ return;
9773
+ }
9774
+ if (s.length >= 3 && s.charCodeAt(0) === 27 && s[1] === "[" && s[2] === "<") {
9775
+ const remainder = handleMouse(s);
9776
+ if (remainder) {
9777
+ if (isIncompleteMousePrefix(remainder)) {
9778
+ mousePending = remainder;
9779
+ armMouseFlush();
9780
+ } else if (remainder !== s) {
9781
+ onData(Buffer.from(remainder, "utf8"));
9782
+ return;
9783
+ } else {
9784
+ const tail = s.replace(/^\x1b\[<[0-9;]*/, "");
9785
+ if (tail && tail !== s) {
9786
+ const escAt = tail.indexOf("\x1B");
9787
+ const keys = escAt === -1 ? tail : tail.slice(0, escAt);
9788
+ if (keys) dispatchKeys(keys);
9789
+ if (escAt !== -1) {
9790
+ onData(Buffer.from(tail.slice(escAt), "utf8"));
9791
+ return;
9792
+ }
9793
+ repaint();
9794
+ return;
9795
+ }
9796
+ }
9797
+ }
9663
9798
  repaint();
9664
9799
  return;
9665
9800
  }
9801
+ if (s === KEY_ESC) {
9802
+ mousePending = KEY_ESC;
9803
+ armMouseFlush();
9804
+ return;
9805
+ }
9666
9806
  if (s === KEY_SHIFT_TAB) {
9667
9807
  if (mode === "nav") cycleFocus(-1);
9668
9808
  repaint();
@@ -9710,6 +9850,7 @@ function runHubTui({ input = process.stdin, output = process.stdout, signals, de
9710
9850
  clearTimeout(splashTimer);
9711
9851
  splashTimer = null;
9712
9852
  }
9853
+ clearMousePending();
9713
9854
  try {
9714
9855
  input.removeListener("data", onData);
9715
9856
  } catch {
@@ -4029,9 +4029,9 @@ var init_keytar = __esm({
4029
4029
  }
4030
4030
  });
4031
4031
 
4032
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
4032
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
4033
4033
  var require_keytar = __commonJS({
4034
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
4034
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
4035
4035
  "use strict";
4036
4036
  init_keytar();
4037
4037
  try {
@@ -1047,9 +1047,9 @@ var init_keytar = __esm({
1047
1047
  }
1048
1048
  });
1049
1049
 
1050
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1050
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1051
1051
  var require_keytar = __commonJS({
1052
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1052
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1053
1053
  "use strict";
1054
1054
  init_keytar();
1055
1055
  try {
@@ -7239,9 +7239,9 @@ var init_keytar = __esm({
7239
7239
  }
7240
7240
  });
7241
7241
 
7242
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
7242
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
7243
7243
  var require_keytar = __commonJS({
7244
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7244
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7245
7245
  "use strict";
7246
7246
  init_keytar();
7247
7247
  try {
@@ -1259,9 +1259,9 @@ var init_keytar = __esm({
1259
1259
  }
1260
1260
  });
1261
1261
 
1262
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1262
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1263
1263
  var require_keytar = __commonJS({
1264
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1264
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1265
1265
  "use strict";
1266
1266
  init_keytar();
1267
1267
  try {
@@ -75,9 +75,9 @@ var init_keytar = __esm({
75
75
  }
76
76
  });
77
77
 
78
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
78
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
79
79
  var require_keytar = __commonJS({
80
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
80
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
81
81
  "use strict";
82
82
  init_keytar();
83
83
  try {
@@ -997,9 +997,9 @@ var init_keytar = __esm({
997
997
  }
998
998
  });
999
999
 
1000
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1000
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1001
1001
  var require_keytar = __commonJS({
1002
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1002
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1003
1003
  "use strict";
1004
1004
  init_keytar();
1005
1005
  try {
@@ -7329,9 +7329,9 @@ var init_keytar = __esm({
7329
7329
  }
7330
7330
  });
7331
7331
 
7332
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
7332
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
7333
7333
  var require_keytar = __commonJS({
7334
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7334
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
7335
7335
  "use strict";
7336
7336
  init_keytar();
7337
7337
  try {
@@ -997,9 +997,9 @@ var init_keytar = __esm({
997
997
  }
998
998
  });
999
999
 
1000
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1000
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1001
1001
  var require_keytar = __commonJS({
1002
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1002
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1003
1003
  "use strict";
1004
1004
  init_keytar();
1005
1005
  try {
@@ -997,9 +997,9 @@ var init_keytar = __esm({
997
997
  }
998
998
  });
999
999
 
1000
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1000
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1001
1001
  var require_keytar = __commonJS({
1002
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1002
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1003
1003
  "use strict";
1004
1004
  init_keytar();
1005
1005
  try {
@@ -1876,9 +1876,9 @@ var init_keytar = __esm({
1876
1876
  }
1877
1877
  });
1878
1878
 
1879
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1879
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1880
1880
  var require_keytar = __commonJS({
1881
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1881
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1882
1882
  "use strict";
1883
1883
  init_keytar();
1884
1884
  try {
@@ -3,6 +3,8 @@ var HIDE_CURSOR = "\x1B[?25l";
3
3
  var SHOW_CURSOR = "\x1B[?25h";
4
4
  var ENTER_ALT = "\x1B[?1049h";
5
5
  var EXIT_ALT = "\x1B[?1049l";
6
+ var MOUSE_ON = "\x1B[?1000h\x1B[?1006h";
7
+ var MOUSE_OFF = "\x1B[?1006l\x1B[?1000l";
6
8
  var CLEAR = "\x1B[2J\x1B[H";
7
9
  var INVERSE = "\x1B[7m";
8
10
  var RESET = "\x1B[0m";
@@ -36,7 +38,8 @@ function createRuntime({
36
38
  input = typeof process !== "undefined" ? process.stdin : void 0,
37
39
  output = typeof process !== "undefined" ? process.stdout : void 0,
38
40
  signals = typeof process !== "undefined" ? process : void 0,
39
- exit = (code) => process.exit(code)
41
+ exit = (code) => process.exit(code),
42
+ mouse = false
40
43
  } = {}) {
41
44
  let entered = false;
42
45
  let cleaned = false;
@@ -64,7 +67,8 @@ function createRuntime({
64
67
  } catch {
65
68
  }
66
69
  try {
67
- if (output && typeof output.write === "function") output.write(SHOW_CURSOR + EXIT_ALT);
70
+ if (output && typeof output.write === "function")
71
+ output.write((mouse ? MOUSE_OFF : "") + SHOW_CURSOR + EXIT_ALT);
68
72
  } catch {
69
73
  }
70
74
  }
@@ -99,7 +103,8 @@ function createRuntime({
99
103
  signals.on("unhandledRejection", onUncaught);
100
104
  signals.on("exit", onExitEvt);
101
105
  }
102
- if (output && typeof output.write === "function") output.write(ENTER_ALT + HIDE_CURSOR);
106
+ if (output && typeof output.write === "function")
107
+ output.write(ENTER_ALT + HIDE_CURSOR + (mouse ? MOUSE_ON : ""));
103
108
  }
104
109
  return {
105
110
  enter,
@@ -416,6 +421,8 @@ export {
416
421
  KEY_RIGHT,
417
422
  KEY_TAB,
418
423
  KEY_UP,
424
+ MOUSE_OFF,
425
+ MOUSE_ON,
419
426
  RESET,
420
427
  SHOW_CURSOR,
421
428
  clampOffset,
@@ -41,9 +41,9 @@ var init_keytar = __esm({
41
41
  }
42
42
  });
43
43
 
44
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
44
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
45
45
  var require_keytar = __commonJS({
46
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
46
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
47
47
  "use strict";
48
48
  init_keytar();
49
49
  try {
@@ -41,9 +41,9 @@ var init_keytar = __esm({
41
41
  }
42
42
  });
43
43
 
44
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
44
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
45
45
  var require_keytar = __commonJS({
46
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
46
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
47
47
  "use strict";
48
48
  init_keytar();
49
49
  try {
@@ -41,9 +41,9 @@ var init_keytar = __esm({
41
41
  }
42
42
  });
43
43
 
44
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
44
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
45
45
  var require_keytar = __commonJS({
46
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
46
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
47
47
  "use strict";
48
48
  init_keytar();
49
49
  try {
package/dist/src/intro.js CHANGED
@@ -1007,9 +1007,9 @@ var init_keytar = __esm({
1007
1007
  }
1008
1008
  });
1009
1009
 
1010
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1010
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1011
1011
  var require_keytar = __commonJS({
1012
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1012
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1013
1013
  "use strict";
1014
1014
  init_keytar();
1015
1015
  try {
@@ -41,9 +41,9 @@ var init_keytar = __esm({
41
41
  }
42
42
  });
43
43
 
44
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
44
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
45
45
  var require_keytar = __commonJS({
46
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
46
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
47
47
  "use strict";
48
48
  init_keytar();
49
49
  try {
@@ -1323,9 +1323,9 @@ var init_keytar = __esm({
1323
1323
  }
1324
1324
  });
1325
1325
 
1326
- // node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node
1326
+ // node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node
1327
1327
  var require_keytar = __commonJS({
1328
- "node-file:/Users/ericgang/job-placement-inline-wt/release-v0240/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1328
+ "node-file:/Users/ericgang/job-placement-inline/node_modules/keytar/build/Release/keytar.node"(exports, module) {
1329
1329
  "use strict";
1330
1330
  init_keytar();
1331
1331
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "terminalhire",
3
- "version": "0.24.0",
3
+ "version": "0.24.1",
4
4
  "description": "Local-first job matching for developers — ambient job matches in the Claude Code spinner. Matching runs on your machine; your profile never leaves it.",
5
5
  "repository": {
6
6
  "type": "git",