@pellux/goodvibes-tui 0.19.93 → 0.19.95

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
@@ -4,6 +4,16 @@ All notable changes to GoodVibes TUI.
4
4
 
5
5
  ---
6
6
 
7
+ ## [0.19.95] — 2026-05-11
8
+
9
+ ### Changes
10
+ - e04ad422 fix: preserve first typed key after recovery prompt
11
+
12
+ ## [0.19.94] — 2026-05-11
13
+
14
+ ### Changes
15
+ - 391e015d chore: update SDK to 0.33.26
16
+
7
17
  ## [0.19.93] — 2026-05-10
8
18
 
9
19
  ### Changes
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![CI](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml/badge.svg)](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
- [![Version](https://img.shields.io/badge/version-0.19.93-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
5
+ [![Version](https://img.shields.io/badge/version-0.19.95-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
6
6
 
7
7
  A terminal-native AI coding, operations, automation, knowledge, and integration console with a typed runtime, omnichannel surfaces, structured memory/knowledge, and a raw ANSI renderer.
8
8
 
@@ -3,7 +3,7 @@
3
3
  "product": {
4
4
  "id": "goodvibes",
5
5
  "surface": "operator",
6
- "version": "0.33.25"
6
+ "version": "0.33.26"
7
7
  },
8
8
  "auth": {
9
9
  "modes": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-tui",
3
- "version": "0.19.93",
3
+ "version": "0.19.95",
4
4
  "description": "Terminal-native GoodVibes product for coding, operations, automation, knowledge, channels, and daemon-backed control-plane workflows.",
5
5
  "type": "module",
6
6
  "main": "src/main.ts",
@@ -97,7 +97,7 @@
97
97
  "@anthropic-ai/vertex-sdk": "^0.16.0",
98
98
  "@ast-grep/napi": "^0.42.0",
99
99
  "@aws/bedrock-token-generator": "^1.1.0",
100
- "@pellux/goodvibes-sdk": "0.33.25",
100
+ "@pellux/goodvibes-sdk": "0.33.26",
101
101
  "bash-language-server": "^5.6.0",
102
102
  "fuse.js": "^7.1.0",
103
103
  "graphql": "^16.13.2",
package/src/main.ts CHANGED
@@ -766,7 +766,7 @@ async function main() {
766
766
  // --- Crash recovery check ---
767
767
  const recoveryInfo = checkRecoveryFile({ workingDirectory: workingDir, homeDirectory });
768
768
  if (recoveryInfo) {
769
- systemMessageRouter.high(`[Recovery] Found unsaved session from ${new Date(recoveryInfo.timestamp).toLocaleString()}. Title: "${recoveryInfo.title}". Press R to restore, any other key to discard.`);
769
+ systemMessageRouter.high(`[Recovery] Found unsaved session from ${new Date(recoveryInfo.timestamp).toLocaleString()}. Title: "${recoveryInfo.title}". Press Ctrl+R to restore, Esc to discard, or start typing to ignore it.`);
770
770
  for (const line of formatReturnContextForDisplay(recoveryInfo.returnContext)) {
771
771
  systemMessageRouter.low(`[Recovery] ${line}`);
772
772
  }
@@ -68,8 +68,7 @@ export function handleBlockingShellInput(
68
68
  }
69
69
 
70
70
  if (recoveryPending) {
71
- const key = data.toLowerCase();
72
- if (key === 'r') {
71
+ if (data === '\x12') {
73
72
  const recovery = loadRecoveryConversation();
74
73
  if (recovery) {
75
74
  conversation.fromJSON({ messages: recovery.messages as Parameters<typeof conversation.fromJSON>[0]['messages'] });
@@ -77,12 +76,22 @@ export function handleBlockingShellInput(
77
76
  } else {
78
77
  systemMessageRouter.high('[Recovery] Failed to restore saved data.');
79
78
  }
80
- } else {
79
+ deleteRecoveryFile();
80
+ render();
81
+ return { handled: true, pendingPermission: null, recoveryPending: false };
82
+ }
83
+
84
+ if (data === '\x1b' || data === '\x03') {
81
85
  systemMessageRouter.high('[Recovery] Discarded recovery data.');
86
+ deleteRecoveryFile();
87
+ render();
88
+ return { handled: true, pendingPermission: null, recoveryPending: false };
82
89
  }
90
+
91
+ systemMessageRouter.high('[Recovery] Ignored saved session; starting a new prompt.');
83
92
  deleteRecoveryFile();
84
93
  render();
85
- return { handled: true, pendingPermission: null, recoveryPending: false };
94
+ return { handled: false, pendingPermission: null, recoveryPending: false };
86
95
  }
87
96
 
88
97
  return { handled: false, pendingPermission, recoveryPending };
package/src/version.ts CHANGED
@@ -6,7 +6,7 @@ import { join } from 'node:path';
6
6
  // The prebuild script updates the fallback value before compilation.
7
7
  // Uses import.meta.dir (Bun) to locate package.json relative to this file,
8
8
  // which is correct regardless of the process working directory.
9
- let _version = '0.19.93';
9
+ let _version = '0.19.95';
10
10
  try {
11
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
12
12
  _version = pkg.version ?? _version;