nexrall-code 0.5.79 → 0.5.81

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/index.js +69 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -55821,7 +55821,7 @@ function bottomChromeRows(opts = {
55821
55821
  footerText: ""
55822
55822
  }) {
55823
55823
  const columns = opts.columns ?? process.stdout.columns ?? 80;
55824
- const separatorRows = 1;
55824
+ const separatorRows = 2;
55825
55825
  const inputRows = rowsOccupied(
55826
55826
  " ".repeat(opts.promptWidth ?? 2) + (opts.inputText ?? ""),
55827
55827
  columns
@@ -64824,6 +64824,36 @@ function askForTrust(workDir, signals) {
64824
64824
 
64825
64825
  // src/ui/inkTerminal.tsx
64826
64826
  var import_react35 = __toESM(require_react(), 1);
64827
+
64828
+ // src/ui/resizeRepaint.ts
64829
+ var defaultDeps = {
64830
+ setTimeout: (fn, ms) => setTimeout(fn, ms),
64831
+ clearTimeout: (handle2) => clearTimeout(handle2)
64832
+ };
64833
+ function createResizeDebouncer(settleMs, onSettle, deps = defaultDeps) {
64834
+ let timer = null;
64835
+ let disposed = false;
64836
+ const notify = () => {
64837
+ if (disposed)
64838
+ return;
64839
+ if (timer !== null)
64840
+ deps.clearTimeout(timer);
64841
+ timer = deps.setTimeout(() => {
64842
+ timer = null;
64843
+ onSettle();
64844
+ }, settleMs);
64845
+ };
64846
+ const dispose = () => {
64847
+ disposed = true;
64848
+ if (timer !== null) {
64849
+ deps.clearTimeout(timer);
64850
+ timer = null;
64851
+ }
64852
+ };
64853
+ return { notify, dispose };
64854
+ }
64855
+
64856
+ // src/ui/inkTerminal.tsx
64827
64857
  function footerText(info) {
64828
64858
  const modeLabel = info.autoApprove ? "yolo mode on" : info.mode === "plan" ? "plan mode on" : info.mode === "edit" ? "edit mode on" : info.mode === "ask" ? "ask mode on" : "auto mode on";
64829
64859
  return `${modeLabel} \xB7 /help for shortcuts \xB7 /agents for agents`;
@@ -64898,6 +64928,19 @@ function decideCtrlC(state) {
64898
64928
  var handle = null;
64899
64929
  var inkInstance = null;
64900
64930
  var idCounter = 0;
64931
+ var resizeDebouncer = null;
64932
+ var resizeListenerAttached = false;
64933
+ var RESIZE_SETTLE_MS = 120;
64934
+ function repaintAfterResizeSettle() {
64935
+ const instance = inkInstance;
64936
+ if (!instance || !process.stdout.isTTY)
64937
+ return;
64938
+ void instance.waitUntilRenderFlush().then(() => {
64939
+ if (inkInstance !== instance)
64940
+ return;
64941
+ process.stdout.write("\x1B[0J");
64942
+ });
64943
+ }
64901
64944
  var DEFAULT_PROMPT = colors.primary.bold("> ");
64902
64945
  var App2 = ({ onReady }) => {
64903
64946
  const [items, setItems] = (0, import_react35.useState)([]);
@@ -65091,7 +65134,17 @@ var App2 = ({ onReady }) => {
65091
65134
  borderRight: false,
65092
65135
  borderDimColor: true
65093
65136
  }
65094
- ), /* @__PURE__ */ import_react35.default.createElement(Box_default, null, /* @__PURE__ */ import_react35.default.createElement(Text, null, prompt2), /* @__PURE__ */ import_react35.default.createElement(Text, null, slices.before), /* @__PURE__ */ import_react35.default.createElement(Text, { inverse: true }, slices.atCursor), /* @__PURE__ */ import_react35.default.createElement(Text, null, slices.after)), quitArmed !== null ? /* @__PURE__ */ import_react35.default.createElement(Text, { color: "yellow" }, CTRL_C_HINT) : /* @__PURE__ */ import_react35.default.createElement(Text, { dimColor: true }, footerText(footer), busy ? " \xB7 agent working\u2026" : ""));
65137
+ ), /* @__PURE__ */ import_react35.default.createElement(Box_default, null, /* @__PURE__ */ import_react35.default.createElement(Text, null, prompt2), /* @__PURE__ */ import_react35.default.createElement(Text, null, slices.before), /* @__PURE__ */ import_react35.default.createElement(Text, { inverse: true }, slices.atCursor), /* @__PURE__ */ import_react35.default.createElement(Text, null, slices.after)), /* @__PURE__ */ import_react35.default.createElement(
65138
+ Box_default,
65139
+ {
65140
+ borderStyle: "single",
65141
+ borderTop: false,
65142
+ borderBottom: true,
65143
+ borderLeft: false,
65144
+ borderRight: false,
65145
+ borderDimColor: true
65146
+ }
65147
+ ), quitArmed !== null ? /* @__PURE__ */ import_react35.default.createElement(Text, { color: "yellow" }, CTRL_C_HINT) : /* @__PURE__ */ import_react35.default.createElement(Text, { dimColor: true }, footerText(footer), busy ? " \xB7 agent working\u2026" : ""));
65095
65148
  };
65096
65149
  function startInkTerminal() {
65097
65150
  if (handle)
@@ -65103,6 +65156,7 @@ function startInkTerminal() {
65103
65156
  {
65104
65157
  onReady: (h2) => {
65105
65158
  handle = h2;
65159
+ attachResizeCleanup();
65106
65160
  resolve3(h2);
65107
65161
  }
65108
65162
  }
@@ -65140,7 +65194,20 @@ function startInkTerminal() {
65140
65194
  );
65141
65195
  });
65142
65196
  }
65197
+ function attachResizeCleanup() {
65198
+ if (resizeListenerAttached || !process.stdout.isTTY)
65199
+ return;
65200
+ resizeListenerAttached = true;
65201
+ resizeDebouncer = createResizeDebouncer(RESIZE_SETTLE_MS, repaintAfterResizeSettle);
65202
+ process.stdout.on("resize", resizeDebouncer.notify);
65203
+ }
65143
65204
  function stopInkTerminal() {
65205
+ if (resizeDebouncer) {
65206
+ process.stdout.off("resize", resizeDebouncer.notify);
65207
+ resizeDebouncer.dispose();
65208
+ resizeDebouncer = null;
65209
+ }
65210
+ resizeListenerAttached = false;
65144
65211
  inkInstance?.unmount();
65145
65212
  inkInstance = null;
65146
65213
  handle = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexrall-code",
3
- "version": "0.5.79",
3
+ "version": "0.5.81",
4
4
  "description": "Nexrall Code — AI coding assistant for your terminal (headless agent for scripts, CI and automation)",
5
5
  "keywords": [
6
6
  "ai",