@hydra-acp/cli 0.1.60 → 0.1.61

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/dist/cli.js +43 -3
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -6867,10 +6867,10 @@ var init_session_row = __esm({
6867
6867
  DEFAULT_COLUMNS = [
6868
6868
  "session",
6869
6869
  "state",
6870
- "agent",
6871
6870
  "age",
6872
6871
  "cwd",
6873
6872
  "title",
6873
+ "agent",
6874
6874
  "cost"
6875
6875
  ];
6876
6876
  ELASTIC_COLUMNS = /* @__PURE__ */ new Set(["cwd", "title"]);
@@ -12877,8 +12877,12 @@ async function pickSession(term, opts) {
12877
12877
  }
12878
12878
  let searchActive = false;
12879
12879
  let searchTerm = "";
12880
+ const UP_REPEAT_GAP_MS = 120;
12881
+ let upGuardArmed = false;
12882
+ let lastUpAt = 0;
12880
12883
  let mode = "normal";
12881
12884
  let pendingAction = null;
12885
+ let findLayerActive = false;
12882
12886
  let findSubMode = "input";
12883
12887
  let findComposer = new InputDispatcher({
12884
12888
  history: [],
@@ -13454,6 +13458,16 @@ async function pickSession(term, opts) {
13454
13458
  });
13455
13459
  };
13456
13460
  const findQueryText = () => findComposer.state().buffer.join("\n");
13461
+ const feedFindPaste = (text) => {
13462
+ const prevRows = findBoxRows;
13463
+ findComposer.feed({ type: "paste", text });
13464
+ computeFindBoxLayout();
13465
+ if (findBoxRows !== prevRows) {
13466
+ renderFind();
13467
+ } else {
13468
+ repaintFindBoxBodyRows();
13469
+ }
13470
+ };
13457
13471
  const runFind = async () => {
13458
13472
  const query = findQueryText().trim();
13459
13473
  if (query.length === 0) {
@@ -13596,7 +13610,11 @@ async function pickSession(term, opts) {
13596
13610
  const pasted = Buffer.from(pasteBuffer, "binary").toString("utf-8").replace(/\r\n?/g, "\n");
13597
13611
  pasteBuffer = "";
13598
13612
  const remaining = text.slice(endIdx + PASTE_END.length);
13599
- if (selectedIdx === 0 && !searchActive) {
13613
+ if (findLayerActive) {
13614
+ if (findSubMode === "input" && !findInFlight) {
13615
+ feedFindPaste(pasted);
13616
+ }
13617
+ } else if (selectedIdx === 0 && !searchActive) {
13600
13618
  composer.feed({ type: "paste", text: pasted });
13601
13619
  const after = composer.state();
13602
13620
  const newVr = computePromptVisualRows(after.buffer, composerRoom);
@@ -13659,6 +13677,7 @@ async function pickSession(term, opts) {
13659
13677
  findError = null;
13660
13678
  findInFlight = false;
13661
13679
  findSubMode = "input";
13680
+ findLayerActive = false;
13662
13681
  popLayer();
13663
13682
  };
13664
13683
  const dispatch = (name, _matches, data) => {
@@ -13871,7 +13890,10 @@ ${cells}`;
13871
13890
  paintIndicator();
13872
13891
  return;
13873
13892
  }
13874
- findComposer = new InputDispatcher({ history: [] });
13893
+ findComposer = new InputDispatcher({
13894
+ history: [],
13895
+ collapsePastes: false
13896
+ });
13875
13897
  findResults = [];
13876
13898
  findTruncated = false;
13877
13899
  findSelectedIdx = 0;
@@ -13880,6 +13902,7 @@ ${cells}`;
13880
13902
  findError = null;
13881
13903
  findInFlight = false;
13882
13904
  findSubMode = "input";
13905
+ findLayerActive = true;
13883
13906
  computeFindBoxLayout();
13884
13907
  renderFind();
13885
13908
  const findOnKey = (name, _matches, data) => {
@@ -14158,6 +14181,16 @@ ${cells}`;
14158
14181
  }
14159
14182
  return;
14160
14183
  }
14184
+ if (name === "UP" && upGuardArmed) {
14185
+ const now = Date.now();
14186
+ const gap = now - lastUpAt;
14187
+ lastUpAt = now;
14188
+ if (gap < UP_REPEAT_GAP_MS) {
14189
+ placeComposerCursor();
14190
+ return;
14191
+ }
14192
+ upGuardArmed = false;
14193
+ }
14161
14194
  if (name === "DOWN") {
14162
14195
  const cs = composer.state();
14163
14196
  const inWalk = cs.historyIndex !== -1 || cs.queueIndex !== -1;
@@ -14180,6 +14213,7 @@ ${cells}`;
14180
14213
  }
14181
14214
  return;
14182
14215
  }
14216
+ upGuardArmed = false;
14183
14217
  const before = composer.state();
14184
14218
  let event = null;
14185
14219
  if (data?.isCharacter) {
@@ -14403,6 +14437,12 @@ ${cells}`;
14403
14437
  case "UP":
14404
14438
  case "SHIFT_TAB":
14405
14439
  case "CTRL_P":
14440
+ if (name === "UP") {
14441
+ if (selectedIdx === 1) {
14442
+ upGuardArmed = true;
14443
+ }
14444
+ lastUpAt = Date.now();
14445
+ }
14406
14446
  move(-1);
14407
14447
  return;
14408
14448
  case "DOWN":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hydra-acp/cli",
3
- "version": "0.1.60",
3
+ "version": "0.1.61",
4
4
  "description": "Multi-client ACP session daemon: spawn agents, attach over WSS, multiplex sessions across editors.",
5
5
  "license": "MIT",
6
6
  "type": "module",