@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 +10 -0
- package/README.md +1 -1
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +2 -2
- package/src/main.ts +1 -1
- package/src/shell/blocking-input.ts +13 -4
- package/src/version.ts +1 -1
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
|
[](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
-
[](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
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-tui",
|
|
3
|
-
"version": "0.19.
|
|
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.
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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.
|
|
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;
|