@pellux/goodvibes-tui 2.1.1 → 2.1.2
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 +6 -0
- package/README.md +1 -1
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +10 -10
- package/src/input/command-registry.ts +2 -0
- package/src/input/commands/runtime-services.ts +5 -0
- package/src/main.ts +1 -0
- package/src/runtime/bootstrap-command-parts.ts +2 -0
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to GoodVibes TUI.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [2.1.2] - 2026-11-03
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- `/compact` can pause an active turn, compact its settled history, and resume the same turn automatically. Started tool actions finish once before compaction, and Escape still cancels a paused turn.
|
|
12
|
+
|
|
7
13
|
## [2.1.1] - 2026-11-02
|
|
8
14
|
|
|
9
15
|
### Fixed
|
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
|
GoodVibes is a terminal console for coding and operations work with an AI model. You run `goodvibes` in a project directory and get a full-screen terminal app where you talk to a model that can read and edit your files, run shell commands, search the web, and hand work off to background agents, asking your permission before anything that writes or executes.
|
|
8
8
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-tui",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "Terminal-native GoodVibes client for coding, operations, knowledge and channel workflows; a pure client of the GoodVibes daemon.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/main.ts",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"test": "bun run scripts/run-tests.ts",
|
|
40
40
|
"test:changed": "bun run scripts/run-tests.ts --changed=origin/main",
|
|
41
41
|
"test:e2e": "bun test --timeout=300000 src/test/e2e",
|
|
42
|
-
"test:e2e:fast": "bun test --timeout=120000 src/test/e2e/startup.e2e.test.ts src/test/e2e/first-turn.e2e.test.ts",
|
|
42
|
+
"test:e2e:fast": "bun test --timeout=120000 src/test/e2e/startup.e2e.test.ts src/test/e2e/first-turn.e2e.test.ts src/test/e2e/compact-active-turn.e2e.test.ts",
|
|
43
43
|
"test:e2e:release": "bun test --timeout=300000 src/test/e2e/daemon-adoption.e2e.test.ts src/test/e2e/wrfc-chain.e2e.test.ts src/test/e2e/turn-notification.e2e.test.ts src/test/e2e/resize.e2e.test.ts",
|
|
44
44
|
"version": "bun run scripts/release-prepare.ts --no-bump",
|
|
45
45
|
"release:prepare": "bun run scripts/release-prepare.ts",
|
|
@@ -95,11 +95,11 @@
|
|
|
95
95
|
"@anthropic-ai/bedrock-sdk": "^0.29.1",
|
|
96
96
|
"@anthropic-ai/sdk": "^0.92.0",
|
|
97
97
|
"@ast-grep/napi": "^0.42.0",
|
|
98
|
-
"@pellux/goodvibes-sdk": "2.1.
|
|
99
|
-
"@pellux/goodvibes-terminal-shell": "2.1.
|
|
98
|
+
"@pellux/goodvibes-sdk": "2.1.2",
|
|
99
|
+
"@pellux/goodvibes-terminal-shell": "2.1.2",
|
|
100
100
|
"bash-language-server": "^5.6.0",
|
|
101
101
|
"fuse.js": "^7.1.0",
|
|
102
|
-
"@pellux/goodvibes-daemon": "1.29.
|
|
102
|
+
"@pellux/goodvibes-daemon": "1.29.2",
|
|
103
103
|
"graphql": "^16.13.2",
|
|
104
104
|
"jszip": "^3.10.1",
|
|
105
105
|
"node-edge-tts": "^1.2.10",
|
|
@@ -120,15 +120,15 @@
|
|
|
120
120
|
"zustand": "^5.0.12"
|
|
121
121
|
},
|
|
122
122
|
"devDependencies": {
|
|
123
|
-
"@pellux/goodvibes-toolchain": "2.1.
|
|
123
|
+
"@pellux/goodvibes-toolchain": "2.1.2",
|
|
124
124
|
"@types/bun": "^1.3.10",
|
|
125
125
|
"typescript": "^5.9.3"
|
|
126
126
|
},
|
|
127
127
|
"optionalDependencies": {
|
|
128
|
-
"@pellux/goodvibes-tui-linux-x64": "2.1.
|
|
129
|
-
"@pellux/goodvibes-tui-linux-arm64": "2.1.
|
|
130
|
-
"@pellux/goodvibes-tui-darwin-x64": "2.1.
|
|
131
|
-
"@pellux/goodvibes-tui-darwin-arm64": "2.1.
|
|
128
|
+
"@pellux/goodvibes-tui-linux-x64": "2.1.2",
|
|
129
|
+
"@pellux/goodvibes-tui-linux-arm64": "2.1.2",
|
|
130
|
+
"@pellux/goodvibes-tui-darwin-x64": "2.1.2",
|
|
131
|
+
"@pellux/goodvibes-tui-darwin-arm64": "2.1.2"
|
|
132
132
|
},
|
|
133
133
|
"trustedDependencies": [],
|
|
134
134
|
"overrides": {
|
|
@@ -121,6 +121,8 @@ export interface CommandUiActions {
|
|
|
121
121
|
/** True while an LLM turn is actively streaming. Used to give Escape
|
|
122
122
|
* cancel-turn precedence over a focused modal's own escape handling. */
|
|
123
123
|
isGenerating?: () => boolean;
|
|
124
|
+
/** Run history replacement while the active turn is paused at a safe checkpoint. */
|
|
125
|
+
withCompaction?: <T>(compact: () => Promise<T>) => Promise<T>;
|
|
124
126
|
completeModelSelection?: (selection: {
|
|
125
127
|
model: { id: string; provider: string; displayName: string; registryKey: string };
|
|
126
128
|
effort: string;
|
|
@@ -274,6 +274,11 @@ export interface CompactionRunResult {
|
|
|
274
274
|
* compaction was skipped or produced no change).
|
|
275
275
|
*/
|
|
276
276
|
export async function compactConversation(context: CommandContext): Promise<CompactionRunResult | null> {
|
|
277
|
+
if (!context.withCompaction) throw new Error('Compaction requires the active session runtime.');
|
|
278
|
+
return context.withCompaction(() => compactPausedConversation(context));
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
async function compactPausedConversation(context: CommandContext): Promise<CompactionRunResult | null> {
|
|
277
282
|
const conversationManager = context.session.conversationManager;
|
|
278
283
|
const providerRegistry = context.provider.providerRegistry;
|
|
279
284
|
// Resolve the live context window for the current model so manual /compact
|
package/src/main.ts
CHANGED
|
@@ -346,6 +346,7 @@ async function main() {
|
|
|
346
346
|
getActiveToolCallId: () => streamMetrics.activeToolCallId, toggleMemoryProvenance: () => memoryProvenanceUi.toggle(),
|
|
347
347
|
});
|
|
348
348
|
commandContext.isGenerating = () => orchestrator.isThinking;
|
|
349
|
+
commandContext.withCompaction = (compact) => orchestrator.withCompaction(compact);
|
|
349
350
|
commandContext.jumpToBookmark = jumpToBookmark; commandContext.scrollToLine = scrollToLine;
|
|
350
351
|
commandContext.clearScreen = () => {
|
|
351
352
|
compositor.resetDiff();
|
|
@@ -168,6 +168,7 @@ export function createBootstrapCommandActions(
|
|
|
168
168
|
CommandContext,
|
|
169
169
|
| 'renderRequest'
|
|
170
170
|
| 'submitInput'
|
|
171
|
+
| 'withCompaction'
|
|
171
172
|
| 'executeCommand'
|
|
172
173
|
| 'cancelGeneration'
|
|
173
174
|
| 'clearScreen'
|
|
@@ -216,6 +217,7 @@ export function createBootstrapCommandActions(
|
|
|
216
217
|
return {
|
|
217
218
|
renderRequest: requestRender,
|
|
218
219
|
submitInput: () => unwiredShellAction('submitInput'),
|
|
220
|
+
withCompaction: () => unwiredShellAction('withCompaction'),
|
|
219
221
|
executeCommand: async () => unwiredShellAction('executeCommand'),
|
|
220
222
|
cancelGeneration: () => unwiredShellAction('cancelGeneration'),
|
|
221
223
|
clearScreen: () => unwiredShellAction('clearScreen'),
|
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 = '2.1.
|
|
9
|
+
let _version = '2.1.2';
|
|
10
10
|
try {
|
|
11
11
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
|
|
12
12
|
// Only trust a version read from OUR OWN package.json. A Bun single-file
|