@sma1lboy/kobe 0.9.7 → 0.9.8

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 (77) hide show
  1. package/dist/cli/index.js +393 -389
  2. package/dist/cli/kobe-run.js +393 -389
  3. package/dist/cli/pty-host-node.mjs +24 -7
  4. package/dist/cli/rove-run.js +393 -389
  5. package/dist/web-ui/assets/AppShell-CYnOcixW.js +5 -0
  6. package/dist/web-ui/assets/Board-CPhoB6iq.js +1 -0
  7. package/dist/web-ui/assets/BoardPeek-DrOQ79OT.js +2 -0
  8. package/dist/web-ui/assets/ChatTerminal-dD7BxK7D.js +87 -0
  9. package/dist/web-ui/assets/ChatTranscript-sGctZOWf.js +1 -0
  10. package/dist/web-ui/assets/ConfirmDialog-DwCR5VCW.js +1 -0
  11. package/dist/web-ui/assets/{IssueIntakePanel-CBM21cyc.js → IssueIntakePanel-M1-5-SQo.js} +1 -1
  12. package/dist/web-ui/assets/IssuePeek-CvBjr3Uj.js +1 -0
  13. package/dist/web-ui/assets/IssuesPage-DOAacim_.js +1 -0
  14. package/dist/web-ui/assets/RichEditor-B2Hirfcc.js +173 -0
  15. package/dist/web-ui/assets/SettingsPage-DBxl8Gua.js +2 -0
  16. package/dist/web-ui/assets/SlideOver-Bt2OrIFm.js +1 -0
  17. package/dist/web-ui/assets/ViewToggle-BIW8t88D.js +1 -0
  18. package/dist/web-ui/assets/{WorkspaceTabs-DrrZuT8m.js → WorkspaceTabs-Bq1xW2Fj.js} +3 -3
  19. package/dist/web-ui/assets/active-task-DOIy-xHd.js +1 -0
  20. package/dist/web-ui/assets/arrow-left-CkmFCPVu.js +1 -0
  21. package/dist/web-ui/assets/board-Cc87lh3Z.js +1 -0
  22. package/dist/web-ui/assets/{chips-NdkDNqV7.js → chips-B2ODRu8l.js} +1 -1
  23. package/dist/web-ui/assets/{createLucideIcon-C6nfansM.js → createLucideIcon-C8T7_EGK.js} +1 -1
  24. package/dist/web-ui/assets/{external-link-Cj-9rta8.js → external-link-D4N6NrPI.js} +1 -1
  25. package/dist/web-ui/assets/{external-store-CNyRxjsC.js → external-store-Djn-EBMQ.js} +1 -1
  26. package/dist/web-ui/assets/{harness-9M6rZZri.js → harness-CzVjZ6jm.js} +1 -1
  27. package/dist/web-ui/assets/index-BnJAzfQw.js +10 -0
  28. package/dist/web-ui/assets/{index-BCOORN5f.css → index-BnjD9Q-3.css} +1 -1
  29. package/dist/web-ui/assets/issues-CiVe8q_b.js +4 -0
  30. package/dist/web-ui/assets/issues-QjkeRDbu.js +1 -0
  31. package/dist/web-ui/assets/{lazy-issue-panels-GvnRdSfG.js → lazy-issue-panels-BwPzNd74.js} +3 -3
  32. package/dist/web-ui/assets/{rotate-cw-BsVaYno1.js → rotate-cw-CSI5S-rL.js} +1 -1
  33. package/dist/web-ui/assets/routes-DzzbdStG.js +1 -0
  34. package/dist/web-ui/assets/{store-BK5yanfN.js → store-C3IHXPqa.js} +2 -2
  35. package/dist/web-ui/assets/{tabs-DHBP2ShA.js → tabs-C1KFppnz.js} +1 -1
  36. package/dist/web-ui/assets/task._taskId-IZIQEjgf.js +1 -0
  37. package/dist/web-ui/assets/terminal-Nt-mXbb9.js +1 -0
  38. package/dist/web-ui/assets/{toast-2mA6GzBq.js → toast-CTxQEYJU.js} +1 -1
  39. package/dist/web-ui/assets/{web-transport-BFuf9jKF.js → web-transport-BFmRPA6p.js} +1 -1
  40. package/dist/web-ui/assets/{worktrees-Bu5ii1XY.js → worktrees-BlU0Tq_2.js} +1 -1
  41. package/dist/web-ui/index.html +9 -23
  42. package/package.json +1 -1
  43. package/dist/web-ui/assets/AppShell-BvHb-c8o.js +0 -5
  44. package/dist/web-ui/assets/Board-CcUG5Zqa.js +0 -1
  45. package/dist/web-ui/assets/BoardPeek-C5c1gItm.js +0 -2
  46. package/dist/web-ui/assets/ChatTerminal-B32Pfuys.js +0 -144
  47. package/dist/web-ui/assets/ChatTranscript-Bw-ROsjY.js +0 -1
  48. package/dist/web-ui/assets/ConfirmDialog-CQUf9GuM.js +0 -1
  49. package/dist/web-ui/assets/IssuePeek-Ce8Qc6KY.js +0 -1
  50. package/dist/web-ui/assets/IssuesPage-BHj8y82L.js +0 -1
  51. package/dist/web-ui/assets/RichEditor-CY2cypY2.js +0 -173
  52. package/dist/web-ui/assets/SettingsPage-DovXUI00.js +0 -2
  53. package/dist/web-ui/assets/SlideOver-CI7vBtQJ.js +0 -1
  54. package/dist/web-ui/assets/ViewToggle-Bvvh1yLG.js +0 -1
  55. package/dist/web-ui/assets/active-task-CCVuYWP9.js +0 -1
  56. package/dist/web-ui/assets/activity-BjTd1D8q.js +0 -1
  57. package/dist/web-ui/assets/arrow-left-wT_Oflhg.js +0 -1
  58. package/dist/web-ui/assets/board-rQqUWfL9.js +0 -1
  59. package/dist/web-ui/assets/columns-3-xX5P4LBE.js +0 -1
  60. package/dist/web-ui/assets/desktop-B6tIfst1.js +0 -2
  61. package/dist/web-ui/assets/engines-CZCmPVm2.js +0 -1
  62. package/dist/web-ui/assets/index-BNs9r4hG.js +0 -10
  63. package/dist/web-ui/assets/issues-9Bx80Ra2.js +0 -1
  64. package/dist/web-ui/assets/issues-BjnSNgu-.js +0 -4
  65. package/dist/web-ui/assets/plus-Bz25iNHX.js +0 -1
  66. package/dist/web-ui/assets/react-dom-Ccqy9Xi6.js +0 -1
  67. package/dist/web-ui/assets/routes-F18MCI2e.js +0 -1
  68. package/dist/web-ui/assets/search-zs6lDYfz.js +0 -1
  69. package/dist/web-ui/assets/settings-Cavhxdh3.js +0 -1
  70. package/dist/web-ui/assets/task._taskId-B3nsG86I.js +0 -1
  71. package/dist/web-ui/assets/task._taskId-rxSYKMea.js +0 -2
  72. package/dist/web-ui/assets/terminal-6BCvBu4_.js +0 -1
  73. package/dist/web-ui/assets/triage-DjBy6dI9.js +0 -1
  74. package/dist/web-ui/assets/use-focus-trap-oPsw86zw.js +0 -1
  75. package/dist/web-ui/assets/vendor-CdtpTJrf.js +0 -1
  76. package/dist/web-ui/assets/with-selector-D8BuTuR6.js +0 -1
  77. package/dist/web-ui/assets/x-MtSojW5V.js +0 -1
@@ -464,6 +464,7 @@ function freezeSession(session, now = new Date) {
464
464
  title: session.title,
465
465
  totalBytes: session.totalBytes,
466
466
  exit: session.exit,
467
+ ...session.lastHumanWriteMs ? { lastHumanWriteMs: session.lastHumanWriteMs } : {},
467
468
  ringB64: Buffer.concat(session.chunks).toString("base64"),
468
469
  updatedAt: now.toISOString()
469
470
  };
@@ -503,7 +504,8 @@ function thawSession(record, cap) {
503
504
  parkedScreenBytes: 0,
504
505
  exit: record.exit,
505
506
  restored: true,
506
- lastFreezeAtMs: 0
507
+ lastFreezeAtMs: 0,
508
+ lastHumanWriteMs: record.lastHumanWriteMs ?? 0
507
509
  };
508
510
  }
509
511
  function recordFile(dir, key) {
@@ -665,7 +667,8 @@ function freshSessionState(key, spec, argv) {
665
667
  parkedScreenBytes: 0,
666
668
  exit: null,
667
669
  restored: false,
668
- lastFreezeAtMs: 0
670
+ lastFreezeAtMs: 0,
671
+ lastHumanWriteMs: 0
669
672
  };
670
673
  }
671
674
 
@@ -749,7 +752,7 @@ function scanOscTitle(session, buf) {
749
752
  session.title = title;
750
753
  session.titleCarry = carry;
751
754
  }
752
- function peekRing(session, sinceOffset) {
755
+ function peekRing(session, sinceOffset, humanWriteQuietMs) {
753
756
  if (!session) {
754
757
  return { exists: false, alive: false, pid: null, offset: 0, data: "", sinceValid: false, exit: null };
755
758
  }
@@ -767,7 +770,8 @@ function peekRing(session, sinceOffset) {
767
770
  offset: session.totalBytes,
768
771
  data: buf.toString("base64"),
769
772
  sinceValid,
770
- exit: session.exit ?? null
773
+ exit: session.exit ?? null,
774
+ ...session.lastHumanWriteMs && session.lastHumanWriteMs > 0 ? { lastHumanWriteMs: session.lastHumanWriteMs, humanWriteQuietMs } : {}
771
775
  };
772
776
  }
773
777
 
@@ -947,12 +951,21 @@ class WarmSpare {
947
951
  // ../kobe-daemon/src/daemon/pty-host.ts
948
952
  var DEFAULT_SCROLLBACK_CAP = 512 * 1024;
949
953
  var EXIT_TAIL_BYTES = 16 * 1024;
954
+ var DEFAULT_HUMAN_WRITE_QUIET_MS = 1e4;
955
+ function resolveHumanWriteQuietMs() {
956
+ const raw = process.env.KOBE_PTY_HUMAN_WRITE_QUIET_MS;
957
+ if (raw === undefined)
958
+ return DEFAULT_HUMAN_WRITE_QUIET_MS;
959
+ const n = Number(raw);
960
+ return Number.isFinite(n) && n >= 0 ? n : DEFAULT_HUMAN_WRITE_QUIET_MS;
961
+ }
950
962
  var FREEZE_INTERVAL_MS = 5000;
951
963
 
952
964
  class PtyHost {
953
965
  sessions = new Map;
954
966
  opts;
955
967
  scrollbackCap;
968
+ humanWriteQuietMs;
956
969
  parkRestoreDeltas = 0;
957
970
  parkRestoreFallbacks = 0;
958
971
  childController;
@@ -960,6 +973,7 @@ class PtyHost {
960
973
  constructor(opts = {}) {
961
974
  this.opts = opts;
962
975
  this.scrollbackCap = opts.scrollbackCap ?? DEFAULT_SCROLLBACK_CAP;
976
+ this.humanWriteQuietMs = opts.humanWriteQuietMs ?? resolveHumanWriteQuietMs();
963
977
  this.childController = new PtyChildController({
964
978
  driver: opts.driver,
965
979
  scrollbackCap: this.scrollbackCap,
@@ -1057,10 +1071,13 @@ class PtyHost {
1057
1071
  warm(cwd, shell, cols = 80, rows = 24) {
1058
1072
  this.warmSpare.warm(cwd, shell, cols, rows);
1059
1073
  }
1060
- write(key, data) {
1074
+ write(key, data, client) {
1061
1075
  const session = this.sessions.get(key);
1062
1076
  if (!session?.alive || data.length === 0)
1063
1077
  return;
1078
+ if (client !== undefined && session.sinks.has(client)) {
1079
+ session.lastHumanWriteMs = Date.now();
1080
+ }
1064
1081
  try {
1065
1082
  session.proc?.write(data);
1066
1083
  } catch {}
@@ -1118,7 +1135,7 @@ class PtyHost {
1118
1135
  return Array.from(this.sessions.values(), (s) => sessionInfo(s));
1119
1136
  }
1120
1137
  peek(key, sinceOffset) {
1121
- return peekRing(this.sessions.get(key), sinceOffset);
1138
+ return peekRing(this.sessions.get(key), sinceOffset, this.humanWriteQuietMs);
1122
1139
  }
1123
1140
  stats() {
1124
1141
  return hostStats(this.sessions.values(), this.scrollbackCap, this.parkRestoreDeltas, this.parkRestoreFallbacks);
@@ -1313,7 +1330,7 @@ async function startPtyHostServer(options = {}) {
1313
1330
  }
1314
1331
  case "pty.write": {
1315
1332
  const payload = objectPayload(req.payload);
1316
- ptys.write(requireString(payload, "key"), typeof payload.data === "string" ? payload.data : "");
1333
+ ptys.write(requireString(payload, "key"), typeof payload.data === "string" ? payload.data : "", client);
1317
1334
  return {};
1318
1335
  }
1319
1336
  case "pty.resize": {