@nanhara/hara 0.123.0 → 0.123.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to `@nanhara/hara`.
5
5
  > Versioning (pre-1.0, SemVer-style): the **minor** (middle) number bumps for a **new feature**; the
6
6
  > **patch** (last) number bumps for **optimizations/fixes of existing features**.
7
7
 
8
+ ## 0.123.1 — 2026-07-15 — restore default TUI keyboard input
9
+
10
+ - **The bracketed-paste proxy now resumes the real terminal stream.** The main TUI closes its temporary
11
+ readline owner before Ink mounts, which leaves `process.stdin` explicitly paused. 0.123.0 forwarded raw-mode
12
+ calls through the new proxy but did not resume that wrapped stream, so the interface rendered while ordinary
13
+ keystrokes never reached the input box. The proxy now mirrors Ink's read/raw lifecycle by resuming on demand
14
+ and pausing again during cleanup.
15
+ - **The regression starts from production's actual precondition.** A paused-stdin test verifies ordinary input,
16
+ raw-mode enable/disable, and cleanup instead of relying only on a naturally flowing test stream. Real PTY
17
+ smoke covers ordinary typing, multiline bracketed paste without auto-submit, and terminal-mode restoration.
18
+ Users on 0.123.0 should upgrade; `HARA_TUI=0 hara` remains a temporary classic-input workaround.
19
+
8
20
  ## 0.123.0 — 2026-07-15 — task-aware interaction and input/security hardening
9
21
 
10
22
  - **Conversation and execution are separate state.** Sessions now persist a bounded, redacted task record
@@ -127,10 +127,17 @@ export class BracketedPasteInput extends Readable {
127
127
  }
128
128
  incompleteTimeoutMs;
129
129
  _read() {
130
- // Input is pushed by the wrapped terminal stream.
130
+ // readline.close() explicitly pauses process.stdin before the main TUI mounts. Ink reads this
131
+ // proxy rather than the real terminal, so its readable demand must resume the wrapped stream.
132
+ // Without this hand-off the frame renders normally but every key remains stuck upstream.
133
+ this.source.resume?.();
131
134
  }
132
135
  setRawMode(enabled) {
133
136
  this.source.setRawMode?.(enabled);
137
+ if (enabled)
138
+ this.source.resume?.();
139
+ else
140
+ this.source.pause?.();
134
141
  return this;
135
142
  }
136
143
  ref() {
@@ -236,6 +243,7 @@ export class BracketedPasteInput extends Readable {
236
243
  this.source.off("data", this.onData);
237
244
  this.source.off("end", this.onEnd);
238
245
  this.source.off("error", this.onError);
246
+ this.source.pause?.();
239
247
  this.push(null);
240
248
  }
241
249
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanhara/hara",
3
- "version": "0.123.0",
3
+ "version": "0.123.1",
4
4
  "description": "hara — a coding agent CLI that runs like an engineering org.",
5
5
  "bin": {
6
6
  "hara": "runtime-bootstrap.cjs"