@pellux/goodvibes-tui 2.0.11 → 2.0.12
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 +22 -0
- package/README.md +1 -1
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +4 -4
- package/src/runtime/index.ts +155 -152
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,28 @@ All notable changes to GoodVibes TUI.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [2.0.12] - 2026-08-07
|
|
8
|
+
|
|
9
|
+
### Changes
|
|
10
|
+
|
|
11
|
+
- **Post-wake capture ends when the room goes quiet** (platform runtime
|
|
12
|
+
2.0.12): the silence floor is measured from the room's own ambient level
|
|
13
|
+
in the pre-wake window instead of a fixed constant, so steady background
|
|
14
|
+
noise no longer holds the microphone open to the ceiling. The floor is a
|
|
15
|
+
real setting (`voice.wake.silenceFloorRms`, 0 = adaptive), and
|
|
16
|
+
`voice.wake.captureMaxSeconds: 0` genuinely means no hard maximum.
|
|
17
|
+
- **The compiled TUI no longer plays a build-order lottery at load**
|
|
18
|
+
(platform runtime 2.0.13): the runtime barrel read over a hundred values
|
|
19
|
+
off the SDK's runtime namespace objects at module scope, and the
|
|
20
|
+
single-file compiler emits module bodies in an order that varies
|
|
21
|
+
build-to-build — on some builds such a read landed before the module that
|
|
22
|
+
defines the binding and the binary died at load with a ReferenceError.
|
|
23
|
+
Every one of those reads is now a grouped live re-export from the SDK's
|
|
24
|
+
registered runtime subpaths, and the shared post-build check fails any
|
|
25
|
+
artifact that carries the eager pattern, even one that happened to boot.
|
|
26
|
+
- Bundled daemon floor moves to 1.28.16; the exec sandbox's
|
|
27
|
+
self-description now names the built-in daemon and settings tools.
|
|
28
|
+
|
|
7
29
|
## [2.0.11] - 2026-08-06
|
|
8
30
|
|
|
9
31
|
### 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
|
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. It talks to many model providers (OpenAI, Anthropic, Gemini, Bedrock, Copilot, OpenRouter and other OpenAI-compatible gateways, plus local servers like Ollama and LM Studio that it finds on startup), keeps its settings, sessions, and secrets on your own machine, and shows you the token count and running cost of every turn. Alongside the conversation, panels turn background work — running agents, git state, diffs, tokens, cost — into live control rooms.
|
|
8
8
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-tui",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
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",
|
|
@@ -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.0.
|
|
99
|
-
"@pellux/goodvibes-terminal-shell": "2.0.
|
|
98
|
+
"@pellux/goodvibes-sdk": "2.0.13",
|
|
99
|
+
"@pellux/goodvibes-terminal-shell": "2.0.13",
|
|
100
100
|
"bash-language-server": "^5.6.0",
|
|
101
101
|
"fuse.js": "^7.1.0",
|
|
102
|
-
"@pellux/goodvibes-daemon": "1.28.
|
|
102
|
+
"@pellux/goodvibes-daemon": "1.28.16",
|
|
103
103
|
"graphql": "^16.13.2",
|
|
104
104
|
"jszip": "^3.10.1",
|
|
105
105
|
"node-edge-tts": "^1.2.10",
|
package/src/runtime/index.ts
CHANGED
|
@@ -6,13 +6,15 @@
|
|
|
6
6
|
* local import surface used by the app.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
// No runtime namespace objects are imported as values here: an eager
|
|
10
|
+
// `export const X = ns.X` compiles to a top-level property read off a lazy
|
|
11
|
+
// namespace object, and Bun's single-file compiler orders module bodies
|
|
12
|
+
// nondeterministically — on some builds the read lands before the defining
|
|
13
|
+
// module and the compiled binary dies at load with a ReferenceError. Every
|
|
14
|
+
// value below is a grouped live re-export from the SDK's registered runtime
|
|
15
|
+
// subpaths instead (exactly how the operations block below fixed the first
|
|
16
|
+
// bite of this class); the toolchain post-build-smoke scans compiled
|
|
17
|
+
// artifacts for the eager pattern and fails the build if one returns.
|
|
16
18
|
import { existsSync, statSync } from 'node:fs';
|
|
17
19
|
import { join, resolve } from 'node:path';
|
|
18
20
|
import type {
|
|
@@ -71,36 +73,39 @@ export type {
|
|
|
71
73
|
WorkflowEvent,
|
|
72
74
|
} from '@pellux/goodvibes-sdk/events';
|
|
73
75
|
|
|
74
|
-
// Bootstrap compatibility aliases
|
|
75
|
-
|
|
76
|
-
export
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
76
|
+
// Bootstrap compatibility aliases — grouped live re-exports (see the header
|
|
77
|
+
// comment for why these must not be eager namespace reads).
|
|
78
|
+
export {
|
|
79
|
+
scheduleBackgroundMcpDiscovery,
|
|
80
|
+
startBackgroundProviderDiscovery,
|
|
81
|
+
startBackgroundProviderDiscovery as startBackgroundProviderRegistration,
|
|
82
|
+
loadRuntimeSystemPrompt,
|
|
83
|
+
loadRuntimeSystemPrompt as loadBootstrapSystemPrompt,
|
|
84
|
+
restoreRuntimeModel,
|
|
85
|
+
restoreRuntimeModel as restoreSavedModel,
|
|
86
|
+
synchronizeConfiguredServices,
|
|
87
|
+
synchronizeConfiguredServices as syncConfiguredServices,
|
|
88
|
+
registerBootstrapRuntimeEvents,
|
|
89
|
+
registerHostRuntimeEvents,
|
|
90
|
+
startHostServices,
|
|
91
|
+
startHostServices as startExternalServices,
|
|
92
|
+
registerBootstrapHookBridge,
|
|
93
|
+
createDeferredStartupCoordinator,
|
|
94
|
+
shutdownRuntime,
|
|
95
|
+
saveSession,
|
|
96
|
+
fireSessionStart,
|
|
97
|
+
createDirectTransportServices,
|
|
98
|
+
createOperatorClientServices,
|
|
99
|
+
createPeerClientDependencies,
|
|
100
|
+
createRuntimeFoundationClients,
|
|
101
|
+
createOperatorClient,
|
|
102
|
+
createPeerClient,
|
|
103
|
+
createRuntimeProviderApi,
|
|
104
|
+
createRuntimeKnowledgeApi,
|
|
105
|
+
createRuntimeHookApi,
|
|
106
|
+
createRuntimeMcpApi,
|
|
107
|
+
createRuntimeOpsApi,
|
|
108
|
+
} from '@pellux/goodvibes-sdk/platform/runtime/bootstrap';
|
|
104
109
|
|
|
105
110
|
export type BackgroundRuntimeTaskHandle = Bootstrap.BackgroundRuntimeTaskHandle;
|
|
106
111
|
export type BackgroundMcpDiscoveryOptions = Bootstrap.BackgroundMcpDiscoveryOptions;
|
|
@@ -130,46 +135,48 @@ export type OperatorClient = Bootstrap.OperatorClient;
|
|
|
130
135
|
export type PeerClient = Bootstrap.PeerClient;
|
|
131
136
|
export type OpsApi = Bootstrap.OpsApi;
|
|
132
137
|
|
|
133
|
-
// Transport compatibility aliases.
|
|
134
|
-
export
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
138
|
+
// Transport compatibility aliases — grouped live re-exports.
|
|
139
|
+
export {
|
|
140
|
+
createDirectTransport,
|
|
141
|
+
createDirectTransportFromServices,
|
|
142
|
+
createRuntimeDirectTransport,
|
|
143
|
+
createDirectClientTransport,
|
|
144
|
+
createHttpTransport,
|
|
145
|
+
createClientTransport,
|
|
146
|
+
buildUrl,
|
|
147
|
+
createTransportPaths,
|
|
148
|
+
normalizeBaseUrl,
|
|
149
|
+
createFetch,
|
|
150
|
+
createHttpJsonTransport,
|
|
151
|
+
createJsonInit,
|
|
152
|
+
createJsonRequestInit,
|
|
153
|
+
readJsonBody,
|
|
154
|
+
requestJsonRaw,
|
|
155
|
+
requestJsonRaw as requestJson,
|
|
156
|
+
createRealtimeTransport,
|
|
157
|
+
invokeContractRoute,
|
|
158
|
+
openContractRouteStream,
|
|
159
|
+
requireContractRoute,
|
|
160
|
+
isAbortError,
|
|
161
|
+
openServerSentEventStream,
|
|
162
|
+
createOperatorRemoteClient,
|
|
163
|
+
createPeerRemoteClient,
|
|
164
|
+
buildEventSourceUrl,
|
|
165
|
+
buildWebSocketUrl,
|
|
166
|
+
createEventSourceConnector,
|
|
167
|
+
createRemoteDomainEvents,
|
|
168
|
+
createRemoteRuntimeEvents,
|
|
169
|
+
createRemoteUiRuntimeEvents,
|
|
170
|
+
createWebSocketConnector,
|
|
171
|
+
applyOutboundTlsToFetchInit,
|
|
172
|
+
createNetworkFetch,
|
|
173
|
+
GlobalNetworkTransportInstaller,
|
|
174
|
+
inspectOutboundTls,
|
|
175
|
+
} from '@pellux/goodvibes-sdk/platform/runtime/transport';
|
|
156
176
|
// Re-exported here because bootstrap.ts — the one place an exit can await
|
|
157
177
|
// anything — sits on the 800-line per-file gate, so it reaches this through the
|
|
158
178
|
// import block it already has rather than a second import line.
|
|
159
179
|
export { leaveHostedSessionOnExit } from './client/hosted-exit.ts';
|
|
160
|
-
export const createOperatorRemoteClient = transport.createOperatorRemoteClient;
|
|
161
|
-
export const createPeerRemoteClient = transport.createPeerRemoteClient;
|
|
162
|
-
export const buildEventSourceUrl = transport.buildEventSourceUrl;
|
|
163
|
-
export const buildWebSocketUrl = transport.buildWebSocketUrl;
|
|
164
|
-
export const createEventSourceConnector = transport.createEventSourceConnector;
|
|
165
|
-
export const createRemoteDomainEvents = transport.createRemoteDomainEvents;
|
|
166
|
-
export const createRemoteRuntimeEvents = transport.createRemoteRuntimeEvents;
|
|
167
|
-
export const createRemoteUiRuntimeEvents = transport.createRemoteUiRuntimeEvents;
|
|
168
|
-
export const createWebSocketConnector = transport.createWebSocketConnector;
|
|
169
|
-
export const applyOutboundTlsToFetchInit = transport.applyOutboundTlsToFetchInit;
|
|
170
|
-
export const createNetworkFetch = transport.createNetworkFetch;
|
|
171
|
-
export const GlobalNetworkTransportInstaller = transport.GlobalNetworkTransportInstaller;
|
|
172
|
-
export const inspectOutboundTls = transport.inspectOutboundTls;
|
|
173
180
|
|
|
174
181
|
export type DirectTransport = Transport.DirectTransport;
|
|
175
182
|
export type DirectClientTransport<TOperator = unknown, TPeer = unknown> = Transport.DirectClientTransport<TOperator, TPeer>;
|
|
@@ -414,37 +421,41 @@ export type ToolExecutionPhase = Operations.ToolExecutionPhase;
|
|
|
414
421
|
export type PhaseResult = Operations.PhaseResult;
|
|
415
422
|
export type ToolExecutionRecord = Operations.ToolExecutionRecord;
|
|
416
423
|
|
|
417
|
-
// Runtime shell compatibility aliases.
|
|
418
|
-
export
|
|
419
|
-
export
|
|
420
|
-
export
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
424
|
+
// Runtime shell compatibility aliases — grouped live re-exports.
|
|
425
|
+
// WorktreeRegistry is a class: the value re-export carries its instance type,
|
|
426
|
+
// so the old separate `export type WorktreeRegistry` alias is gone (TS2484).
|
|
427
|
+
export {
|
|
428
|
+
createShellPathService,
|
|
429
|
+
createShellPlanRuntime,
|
|
430
|
+
createShellRemoteCommandService,
|
|
431
|
+
createBootstrapCommandShellServices,
|
|
432
|
+
resolveSurfaceDirectory,
|
|
433
|
+
classifySystemMessageKind,
|
|
434
|
+
classifySystemMessagePriority,
|
|
435
|
+
defaultSystemMessageTarget,
|
|
436
|
+
resolveSystemMessageDelivery,
|
|
437
|
+
buildProviderAccountSnapshot,
|
|
438
|
+
loadEcosystemCatalog,
|
|
439
|
+
searchEcosystemCatalog,
|
|
440
|
+
exportEcosystemCatalogBundle,
|
|
441
|
+
importEcosystemCatalogBundle,
|
|
442
|
+
inspectEcosystemCatalogBundle,
|
|
443
|
+
inspectInstalledEcosystemEntry,
|
|
444
|
+
installEcosystemCatalogEntry,
|
|
445
|
+
listEcosystemInstallBackups,
|
|
446
|
+
listInstalledEcosystemEntries,
|
|
447
|
+
removeEcosystemCatalogEntry,
|
|
448
|
+
reviewEcosystemCatalogEntry,
|
|
449
|
+
rollbackInstalledEcosystemEntry,
|
|
450
|
+
uninstallEcosystemCatalogEntry,
|
|
451
|
+
updateInstalledEcosystemEntry,
|
|
452
|
+
upsertEcosystemCatalogEntry,
|
|
453
|
+
summarizeWorktreeOwnership,
|
|
454
|
+
WorktreeRegistry,
|
|
455
|
+
listPersistedWorktreeMeta,
|
|
456
|
+
getPersistedWorktreeMeta,
|
|
457
|
+
reviewWorktreeAttachments,
|
|
458
|
+
} from '@pellux/goodvibes-sdk/platform/runtime/shell';
|
|
448
459
|
|
|
449
460
|
export type MutableRuntimeState = Shell.MutableRuntimeState;
|
|
450
461
|
export type ProviderAccountRecord = Shell.ProviderAccountRecord;
|
|
@@ -459,7 +470,6 @@ export type CommandPlatformShellServices = Shell.CommandPlatformShellServices;
|
|
|
459
470
|
export type CommandWorkspaceShellServices = Shell.CommandWorkspaceShellServices;
|
|
460
471
|
export type RemoteCommandService = Shell.RemoteCommandService;
|
|
461
472
|
export type PlanRuntimeService = Shell.PlanRuntimeService;
|
|
462
|
-
export type WorktreeRegistry = Shell.WorktreeRegistry;
|
|
463
473
|
export type WorktreeStatusRecord = Shell.WorktreeStatusRecord;
|
|
464
474
|
export type ManagedWorktreeMeta = Shell.ManagedWorktreeMeta;
|
|
465
475
|
export type ShellAgentManagerService = Shell.ShellAgentManagerService;
|
|
@@ -476,51 +486,46 @@ export type EcosystemCatalogBundle = Shell.EcosystemCatalogBundle;
|
|
|
476
486
|
export type EcosystemCatalogEntry = Shell.EcosystemCatalogEntry;
|
|
477
487
|
export type EcosystemEntryKind = Shell.EcosystemEntryKind;
|
|
478
488
|
|
|
479
|
-
// Runtime security compatibility aliases.
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
export
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
export type DivergenceDashboard = InstanceType<typeof security.DivergenceDashboard>;
|
|
520
|
-
export type DivergenceGateError = InstanceType<typeof security.DivergenceGateError>;
|
|
521
|
-
export type LayeredPolicyEvaluator = InstanceType<typeof security.LayeredPolicyEvaluator>;
|
|
522
|
-
export type PermissionSimulator = InstanceType<typeof security.PermissionSimulator>;
|
|
523
|
-
export type PolicySignatureError = InstanceType<typeof security.PolicySignatureError>;
|
|
489
|
+
// Runtime security compatibility aliases — grouped live re-exports. The class
|
|
490
|
+
// re-exports (DivergenceDashboard, PolicyRegistry, …) carry their instance
|
|
491
|
+
// types, so the old separate type companions for those names are gone.
|
|
492
|
+
export {
|
|
493
|
+
buildAuthInspectionSnapshot,
|
|
494
|
+
inspectProviderAuth,
|
|
495
|
+
DivergenceDashboard,
|
|
496
|
+
DivergenceGateError,
|
|
497
|
+
LayeredPolicyEvaluator,
|
|
498
|
+
PermissionSimulator,
|
|
499
|
+
PolicyRegistry,
|
|
500
|
+
PolicyRuntimeState,
|
|
501
|
+
buildDefaultPolicySimulationScenarios,
|
|
502
|
+
buildPermissionRuleSuggestions,
|
|
503
|
+
buildPolicyPreflightReview,
|
|
504
|
+
createPermissionEvaluator,
|
|
505
|
+
createPermissionSimulator,
|
|
506
|
+
createUnsignedBundle,
|
|
507
|
+
lintPolicyConfig,
|
|
508
|
+
loadPolicyBundle,
|
|
509
|
+
runPolicySimulationScenarios,
|
|
510
|
+
buildDenialExplanation,
|
|
511
|
+
canonicalize,
|
|
512
|
+
classifyCommand,
|
|
513
|
+
classifySegment,
|
|
514
|
+
collectCommandNodes,
|
|
515
|
+
evaluateCommandAST,
|
|
516
|
+
evaluateSegmentNode,
|
|
517
|
+
higherPriority,
|
|
518
|
+
parseAST,
|
|
519
|
+
parseCommandAST,
|
|
520
|
+
tokenize,
|
|
521
|
+
PolicySignatureError,
|
|
522
|
+
canonicalise,
|
|
523
|
+
runSafetyChecks,
|
|
524
|
+
signBundle,
|
|
525
|
+
verifyBundle,
|
|
526
|
+
MAX_INPUT_LENGTH,
|
|
527
|
+
MAX_TOKEN_COUNT,
|
|
528
|
+
} from '@pellux/goodvibes-sdk/platform/runtime/security';
|
|
524
529
|
|
|
525
530
|
export type AuthInspectionSnapshot = Security.AuthInspectionSnapshot;
|
|
526
531
|
export type ProviderAuthInspection = Security.ProviderAuthInspection;
|
|
@@ -533,8 +538,6 @@ export type PolicyDiffResult = Security.PolicyDiffResult;
|
|
|
533
538
|
export type PolicyLintFinding = Security.PolicyLintFinding;
|
|
534
539
|
export type PolicyPreflightReview = Security.PolicyPreflightReview;
|
|
535
540
|
export type PolicyRule = Security.PolicyRule;
|
|
536
|
-
export type PolicyRegistry = Security.PolicyRegistry;
|
|
537
|
-
export type PolicyRuntimeState = Security.PolicyRuntimeState;
|
|
538
541
|
export type PolicySimulationSummary = Security.PolicySimulationSummary;
|
|
539
542
|
export type PermissionAuditEntry = Security.PermissionAuditEntry;
|
|
540
543
|
export type CommandClassification = Security.CommandClassification;
|
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.0.
|
|
9
|
+
let _version = '2.0.12';
|
|
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
|