@pellux/goodvibes-agent 0.1.58 → 0.1.60
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 +13 -0
- package/README.md +1 -1
- package/docs/getting-started.md +1 -1
- package/package.json +3 -28
- package/src/cli/package-verification.ts +0 -3
- package/src/input/commands/guidance-runtime.ts +1 -2
- package/src/input/commands/health-runtime.ts +2 -36
- package/src/input/commands/shell-core.ts +1 -12
- package/src/input/commands.ts +0 -4
- package/src/input/submission-router.ts +1 -1
- package/src/panels/builtin/operations.ts +0 -15
- package/src/panels/index.ts +0 -2
- package/src/panels/provider-health-domains.ts +0 -27
- package/src/panels/provider-health-panel.ts +0 -4
- package/src/renderer/code-block.ts +2 -13
- package/src/version.ts +1 -1
- package/.goodvibes/GOODVIBES.md +0 -35
- package/scripts/check-bun.sh +0 -22
- package/src/input/commands/intelligence-runtime.ts +0 -223
- package/src/input/commands/teamwork-runtime.ts +0 -339
- package/src/panels/debug-panel.ts +0 -432
- package/src/panels/intelligence-panel.ts +0 -176
- package/src/renderer/semantic-diff.ts +0 -369
- package/src/renderer/syntax-highlighter.ts +0 -542
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GoodVibes Agent will be recorded here.
|
|
4
4
|
|
|
5
|
+
## 0.1.60 - 2026-05-31
|
|
6
|
+
|
|
7
|
+
- f3f2486 Stop shipping developer guidance in package
|
|
8
|
+
- 80c273e Remove developer debug surface
|
|
9
|
+
- e2d058f Remove code intelligence command surface
|
|
10
|
+
- acb3eeb Remove coding intelligence render dependencies
|
|
11
|
+
|
|
12
|
+
## 0.1.59 - 2026-05-31
|
|
13
|
+
|
|
14
|
+
- f03ee5f Remove unused coding panel sources
|
|
15
|
+
- 5950687 Remove blocked teamwork command surface
|
|
16
|
+
- e60bf10 Remove noisy Bun preinstall lifecycle
|
|
17
|
+
|
|
5
18
|
## 0.1.58 - 2026-05-31
|
|
6
19
|
|
|
7
20
|
- e137f90 Fail cleanly for non-TTY TUI launch
|
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ goodvibes-agent --help
|
|
|
29
29
|
If Bun reports untrusted lifecycle dependencies, trust only the package and dependencies required by this package:
|
|
30
30
|
|
|
31
31
|
```sh
|
|
32
|
-
bun pm trust -g @pellux/goodvibes-agent @pellux/goodvibes-sdk core-js
|
|
32
|
+
bun pm trust -g @pellux/goodvibes-agent @pellux/goodvibes-sdk core-js
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Source Usage
|
package/docs/getting-started.md
CHANGED
|
@@ -28,7 +28,7 @@ goodvibes-agent --help
|
|
|
28
28
|
If Bun requires lifecycle trust:
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
|
-
bun pm trust -g @pellux/goodvibes-agent @pellux/goodvibes-sdk core-js
|
|
31
|
+
bun pm trust -g @pellux/goodvibes-agent @pellux/goodvibes-sdk core-js
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
## Run From Source
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.60",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "GoodVibes personal operator assistant TUI with a proactive Agent product brain, isolated Agent Knowledge, local profiles, routines, skills, personas, and explicit build delegation.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"packageManager": "bun@1.3.10",
|
|
8
8
|
"main": "src/main.ts",
|
|
@@ -13,20 +13,15 @@
|
|
|
13
13
|
"bin",
|
|
14
14
|
"LICENSE",
|
|
15
15
|
".goodvibes/skills",
|
|
16
|
-
".goodvibes/GOODVIBES.md",
|
|
17
16
|
"src",
|
|
18
17
|
"!src/test",
|
|
19
18
|
"!src/**/*.test.ts",
|
|
20
19
|
"!src/**/__tests__",
|
|
21
20
|
"!src/panels/diff-panel.ts",
|
|
22
|
-
"!src/panels/file-explorer-panel.ts",
|
|
23
|
-
"!src/panels/file-preview-panel.ts",
|
|
24
21
|
"!src/panels/git-panel.ts",
|
|
25
22
|
"!src/panels/sandbox-panel.ts",
|
|
26
|
-
"!src/panels/symbol-outline-panel.ts",
|
|
27
23
|
"!src/panels/worktree-panel.ts",
|
|
28
24
|
"!src/panels/wrfc-panel.ts",
|
|
29
|
-
"scripts/check-bun.sh",
|
|
30
25
|
"tsconfig.json",
|
|
31
26
|
"README.md",
|
|
32
27
|
"CHANGELOG.md",
|
|
@@ -51,7 +46,6 @@
|
|
|
51
46
|
"build:all-shell": "bun run build:linux-x64 && bun run build:linux-arm64 && bun run build:macos-x64 && bun run build:macos-arm64 && bun run build:windows",
|
|
52
47
|
"test": "bun run scripts/run-tests.ts",
|
|
53
48
|
"version": "bun run scripts/prebuild.ts",
|
|
54
|
-
"preinstall": "sh scripts/check-bun.sh",
|
|
55
49
|
"release": "bun run scripts/release.ts",
|
|
56
50
|
"release:dry": "bun run scripts/release.ts --dry-run",
|
|
57
51
|
"publish:package": "bun run scripts/publish-package.ts",
|
|
@@ -82,8 +76,6 @@
|
|
|
82
76
|
"assistant",
|
|
83
77
|
"tui",
|
|
84
78
|
"bun",
|
|
85
|
-
"daemon",
|
|
86
|
-
"control-plane",
|
|
87
79
|
"automation",
|
|
88
80
|
"ai"
|
|
89
81
|
],
|
|
@@ -98,27 +90,15 @@
|
|
|
98
90
|
"@anthropic-ai/bedrock-sdk": "^0.28.1",
|
|
99
91
|
"@anthropic-ai/sdk": "^0.82.0",
|
|
100
92
|
"@anthropic-ai/vertex-sdk": "^0.16.0",
|
|
101
|
-
"@ast-grep/napi": "^0.42.0",
|
|
102
93
|
"@aws/bedrock-token-generator": "^1.1.0",
|
|
103
94
|
"@pellux/goodvibes-sdk": "0.33.35",
|
|
104
|
-
"bash-language-server": "^5.6.0",
|
|
105
95
|
"fuse.js": "^7.1.0",
|
|
106
96
|
"graphql": "^16.13.2",
|
|
107
97
|
"jszip": "^3.10.1",
|
|
108
98
|
"node-edge-tts": "^1.2.10",
|
|
109
99
|
"openai": "^6.29.0",
|
|
110
|
-
"pyright": "^1.1.408",
|
|
111
|
-
"simple-git": "^3.33.0",
|
|
112
100
|
"sql.js": "^1.14.1",
|
|
113
101
|
"sqlite-vec": "^0.1.9",
|
|
114
|
-
"tree-sitter-css": "^0.25.0",
|
|
115
|
-
"tree-sitter-javascript": "^0.25.0",
|
|
116
|
-
"tree-sitter-json": "^0.24.8",
|
|
117
|
-
"tree-sitter-python": "^0.25.0",
|
|
118
|
-
"tree-sitter-typescript": "^0.23.2",
|
|
119
|
-
"typescript-language-server": "^5.1.3",
|
|
120
|
-
"vscode-langservers-extracted": "^4.10.0",
|
|
121
|
-
"web-tree-sitter": "^0.26.7",
|
|
122
102
|
"zustand": "^5.0.12"
|
|
123
103
|
},
|
|
124
104
|
"devDependencies": {
|
|
@@ -127,12 +107,7 @@
|
|
|
127
107
|
},
|
|
128
108
|
"trustedDependencies": [
|
|
129
109
|
"@pellux/goodvibes-sdk",
|
|
130
|
-
"core-js"
|
|
131
|
-
"tree-sitter-css",
|
|
132
|
-
"tree-sitter-javascript",
|
|
133
|
-
"tree-sitter-json",
|
|
134
|
-
"tree-sitter-python",
|
|
135
|
-
"tree-sitter-typescript"
|
|
110
|
+
"core-js"
|
|
136
111
|
],
|
|
137
112
|
"overrides": {
|
|
138
113
|
"minimatch": "^10.2.5"
|
|
@@ -36,9 +36,7 @@ const REQUIRED_TARBALL_PATHS = [
|
|
|
36
36
|
'package.json',
|
|
37
37
|
'src/main.ts',
|
|
38
38
|
'bin/goodvibes-agent.ts',
|
|
39
|
-
'scripts/check-bun.sh',
|
|
40
39
|
'tsconfig.json',
|
|
41
|
-
'.goodvibes/GOODVIBES.md',
|
|
42
40
|
'docs/README.md',
|
|
43
41
|
'docs/getting-started.md',
|
|
44
42
|
'docs/deployment-and-services.md',
|
|
@@ -57,7 +55,6 @@ const PACKAGE_FACING_TEXT_PATHS = [
|
|
|
57
55
|
'docs/getting-started.md',
|
|
58
56
|
'docs/deployment-and-services.md',
|
|
59
57
|
'docs/release-and-publishing.md',
|
|
60
|
-
'.goodvibes/GOODVIBES.md',
|
|
61
58
|
'.goodvibes/skills/add-provider/SKILL.md',
|
|
62
59
|
] as const;
|
|
63
60
|
const PACKAGE_FACING_FORBIDDEN_TEXT = [
|
|
@@ -72,7 +72,6 @@ export function registerGuidanceRuntimeCommands(registry: CommandRegistry): void
|
|
|
72
72
|
const llmMessages = ctx.session.conversationManager.getMessagesForLLM();
|
|
73
73
|
const readModels = requireReadModels(ctx);
|
|
74
74
|
const session = readModels.session.getSnapshot();
|
|
75
|
-
const intelligence = readModels.intelligence.getSnapshot();
|
|
76
75
|
const mcp = readModels.mcp.getSnapshot();
|
|
77
76
|
const health = readModels.health.getSnapshot();
|
|
78
77
|
const marketplace = readModels.marketplace.getSnapshot();
|
|
@@ -89,7 +88,7 @@ export function registerGuidanceRuntimeCommands(registry: CommandRegistry): void
|
|
|
89
88
|
denialCount: session.denialCount,
|
|
90
89
|
authRequiredMcpCount: mcp.servers.filter((server) => server.status === 'auth_required').length,
|
|
91
90
|
degradedProviderCount: health.providerProblems.length,
|
|
92
|
-
intelligenceUnavailable:
|
|
91
|
+
intelligenceUnavailable: false,
|
|
93
92
|
recommendations: marketplace.recommendations,
|
|
94
93
|
}, maintenance, guidanceOptions);
|
|
95
94
|
|
|
@@ -23,7 +23,7 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
23
23
|
name: 'health',
|
|
24
24
|
aliases: ['doctor'],
|
|
25
25
|
description: 'Health workspace for startup posture, service readiness, provider health, and Agent continuity',
|
|
26
|
-
usage: '[open|review|setup|services|provider|accounts|auth|settings|
|
|
26
|
+
usage: '[open|review|setup|services|provider|accounts|auth|settings|remote|mcp|continuity|maintenance|repair [domain]]',
|
|
27
27
|
async handler(args, ctx) {
|
|
28
28
|
const sub = (args[0] ?? 'review').toLowerCase();
|
|
29
29
|
const readModels = requireReadModels(ctx);
|
|
@@ -110,32 +110,6 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
if (sub === 'intelligence') {
|
|
114
|
-
const intelligence = readModels.intelligence.getSnapshot();
|
|
115
|
-
const issues: string[] = [];
|
|
116
|
-
if (intelligence.diagnosticsStatus !== 'ready') issues.push(`diagnostics=${intelligence.diagnosticsStatus}`);
|
|
117
|
-
if (intelligence.symbolSearchStatus !== 'ready') issues.push(`symbols=${intelligence.symbolSearchStatus}`);
|
|
118
|
-
if (intelligence.completionsStatus !== 'ready') issues.push(`completions=${intelligence.completionsStatus}`);
|
|
119
|
-
if (intelligence.hoverStatus !== 'ready') issues.push(`hover=${intelligence.hoverStatus}`);
|
|
120
|
-
ctx.print([
|
|
121
|
-
'Health Review: Intelligence',
|
|
122
|
-
` diagnostics: ${intelligence.diagnosticsStatus}`,
|
|
123
|
-
` symbols: ${intelligence.symbolSearchStatus}`,
|
|
124
|
-
` completions: ${intelligence.completionsStatus}`,
|
|
125
|
-
` hover: ${intelligence.hoverStatus}`,
|
|
126
|
-
` errors: ${intelligence.errorCount}`,
|
|
127
|
-
` warnings: ${intelligence.warningCount}`,
|
|
128
|
-
` requests: ${intelligence.totalRequests}`,
|
|
129
|
-
` avg latency: ${Math.round(intelligence.avgLatencyMs)}ms`,
|
|
130
|
-
...(issues.length > 0
|
|
131
|
-
? issues.map((issue) => ` issue: ${issue}`)
|
|
132
|
-
: [' no active intelligence readiness issues detected']),
|
|
133
|
-
' next: /intelligence review',
|
|
134
|
-
' next: /setup review',
|
|
135
|
-
].join('\n'));
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
113
|
if (sub === 'remote') {
|
|
140
114
|
const snapshot = readModels.remote.getSnapshot().supervisor;
|
|
141
115
|
const issues = snapshot.sessions.flatMap((session) => {
|
|
@@ -294,15 +268,8 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
294
268
|
lines.push(' /compact');
|
|
295
269
|
lines.push(' /panel tokens');
|
|
296
270
|
lines.push(' verify: /health maintenance');
|
|
297
|
-
} else if (domain === 'intelligence') {
|
|
298
|
-
lines.push(' domain: intelligence');
|
|
299
|
-
lines.push(' /intelligence review');
|
|
300
|
-
lines.push(' /intelligence symbols <file>');
|
|
301
|
-
lines.push(' /intelligence definition <file> <line> <column>');
|
|
302
|
-
lines.push(' /setup review');
|
|
303
|
-
lines.push(' verify: /health intelligence');
|
|
304
271
|
} else {
|
|
305
|
-
lines.push(' domains: settings, auth, accounts, services, remote, mcp, continuity, maintenance
|
|
272
|
+
lines.push(' domains: settings, auth, accounts, services, remote, mcp, continuity, maintenance');
|
|
306
273
|
lines.push(' use: /health repair <domain>');
|
|
307
274
|
}
|
|
308
275
|
ctx.print(lines.join('\n'));
|
|
@@ -361,7 +328,6 @@ export function registerHealthRuntimeCommands(registry: CommandRegistry): void {
|
|
|
361
328
|
' /health accounts',
|
|
362
329
|
' /health auth',
|
|
363
330
|
' /health settings',
|
|
364
|
-
' /health intelligence',
|
|
365
331
|
' /health remote',
|
|
366
332
|
' /health maintenance',
|
|
367
333
|
' /health repair <domain>',
|
|
@@ -120,7 +120,6 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
120
120
|
{ id: '/provider', label: '/provider [name]', detail: 'Switch provider', category: 'Model & Provider' },
|
|
121
121
|
{ id: '/effort', label: '/effort [level]', detail: 'Reasoning effort (instant/low/medium/high)', category: 'Model & Provider' },
|
|
122
122
|
{ id: '/config', label: '/config [category|key]', detail: 'Open fullscreen configuration workspace', category: 'Config & Display' },
|
|
123
|
-
{ id: '/debug', label: '/debug', detail: 'Toggle debug mode', category: 'Config & Display' },
|
|
124
123
|
{ id: '/expand', label: '/expand [type]', detail: 'Expand blocks (all|thinking|tool|code)', category: 'Config & Display' },
|
|
125
124
|
{ id: '/collapse', label: '/collapse [type]', detail: 'Collapse blocks', category: 'Config & Display' },
|
|
126
125
|
{ id: '/bookmarks', label: '/bookmarks', detail: 'List bookmarked blocks', category: 'Config & Display' },
|
|
@@ -172,7 +171,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
172
171
|
});
|
|
173
172
|
return;
|
|
174
173
|
}
|
|
175
|
-
ctx.print('Use /help to open the help modal. Commands: /agent, /model, /provider, /config, /template, /tools, /paste, /sessions, /bookmarks, /save, /load, /undo, /redo, /retry, /clear, /reset, /compact, /export, /title, /effort, /expand, /collapse, /
|
|
174
|
+
ctx.print('Use /help to open the help modal. Commands: /agent, /model, /provider, /config, /template, /tools, /paste, /sessions, /bookmarks, /save, /load, /undo, /redo, /retry, /clear, /reset, /compact, /export, /title, /effort, /expand, /collapse, /quit');
|
|
176
175
|
},
|
|
177
176
|
});
|
|
178
177
|
|
|
@@ -234,16 +233,6 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
234
233
|
},
|
|
235
234
|
});
|
|
236
235
|
|
|
237
|
-
registry.register({
|
|
238
|
-
name: 'debug',
|
|
239
|
-
aliases: [],
|
|
240
|
-
description: 'Toggle debug mode',
|
|
241
|
-
handler(_args, ctx) {
|
|
242
|
-
ctx.session.runtime.debugMode = !ctx.session.runtime.debugMode;
|
|
243
|
-
ctx.print(`Debug mode: ${ctx.session.runtime.debugMode ? 'ON' : 'OFF'}`);
|
|
244
|
-
},
|
|
245
|
-
});
|
|
246
|
-
|
|
247
236
|
registry.register({
|
|
248
237
|
name: 'effort',
|
|
249
238
|
aliases: ['e'],
|
package/src/input/commands.ts
CHANGED
|
@@ -22,7 +22,6 @@ import { registerProfileSyncRuntimeCommands } from './commands/profile-sync-runt
|
|
|
22
22
|
import { registerManagedRuntimeCommands } from './commands/managed-runtime.ts';
|
|
23
23
|
import { registerPlatformAccessRuntimeCommands } from './commands/platform-access-runtime.ts';
|
|
24
24
|
import { registerPlatformServicesRuntimeCommands } from './commands/platform-services-runtime.ts';
|
|
25
|
-
import { registerTeamworkRuntimeCommands } from './commands/teamwork-runtime.ts';
|
|
26
25
|
import { registerMarketplaceRuntimeCommands } from './commands/marketplace-runtime.ts';
|
|
27
26
|
import { registerGuidanceRuntimeCommands } from './commands/guidance-runtime.ts';
|
|
28
27
|
import { registerRemoteRuntimeCommands } from './commands/remote-runtime.ts';
|
|
@@ -44,7 +43,6 @@ import { registerHealthRuntimeCommands } from './commands/health-runtime.ts';
|
|
|
44
43
|
import { registerSettingsSyncRuntimeCommands } from './commands/settings-sync-runtime.ts';
|
|
45
44
|
import { registerProviderAccountsRuntimeCommands } from './commands/provider-accounts-runtime.ts';
|
|
46
45
|
import { registerLocalAuthRuntimeCommands } from './commands/local-auth-runtime.ts';
|
|
47
|
-
import { registerIntelligenceRuntimeCommands } from './commands/intelligence-runtime.ts';
|
|
48
46
|
import { registerConversationRuntimeCommands } from './commands/conversation-runtime.ts';
|
|
49
47
|
import { registerQrcodeRuntimeCommands } from './commands/qrcode-runtime.ts';
|
|
50
48
|
import { registerOnboardingRuntimeCommands } from './commands/onboarding-runtime.ts';
|
|
@@ -81,7 +79,6 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
81
79
|
registerManagedRuntimeCommands(registry);
|
|
82
80
|
registerPlatformAccessRuntimeCommands(registry);
|
|
83
81
|
registerPlatformServicesRuntimeCommands(registry);
|
|
84
|
-
registerTeamworkRuntimeCommands(registry);
|
|
85
82
|
registerMarketplaceRuntimeCommands(registry);
|
|
86
83
|
registerGuidanceRuntimeCommands(registry);
|
|
87
84
|
registerRemoteRuntimeCommands(registry);
|
|
@@ -101,7 +98,6 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
101
98
|
registerSettingsSyncRuntimeCommands(registry);
|
|
102
99
|
registerProviderAccountsRuntimeCommands(registry);
|
|
103
100
|
registerLocalAuthRuntimeCommands(registry);
|
|
104
|
-
registerIntelligenceRuntimeCommands(registry);
|
|
105
101
|
registerConversationRuntimeCommands(registry);
|
|
106
102
|
registerQrcodeRuntimeCommands(registry);
|
|
107
103
|
registerOnboardingRuntimeCommands(registry);
|
|
@@ -8,7 +8,7 @@ export interface SubmissionRouterInput {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
const PLAN_COMMANDS = new Set(['plan']);
|
|
11
|
-
const DELEGATION_COMMANDS = new Set(['delegate', 'build', 'review', 'wrfc', '
|
|
11
|
+
const DELEGATION_COMMANDS = new Set(['delegate', 'build', 'review', 'wrfc', 'agents', 'remote']);
|
|
12
12
|
const PANEL_COMMANDS = new Set(['panel']);
|
|
13
13
|
const ORCHESTRATION_COMMANDS = new Set([
|
|
14
14
|
'orchestration',
|
|
@@ -23,7 +23,6 @@ import { RemotePanel } from '../remote-panel.ts';
|
|
|
23
23
|
import { ProviderStatsPanel } from '../provider-stats-panel.ts';
|
|
24
24
|
import { ProviderHealthPanel } from '../provider-health-panel.ts';
|
|
25
25
|
import { GOODVIBES_AGENT_SURFACE_ROOT } from '../../config/surface.ts';
|
|
26
|
-
import { DebugPanel } from '../debug-panel.ts';
|
|
27
26
|
import { IncidentReviewPanel } from '../incident-review-panel.ts';
|
|
28
27
|
import { ForensicsPanel } from '../forensics-panel.ts';
|
|
29
28
|
import { PolicyPanel } from '../policy-panel.ts';
|
|
@@ -284,26 +283,12 @@ export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBu
|
|
|
284
283
|
localAuth: ui.readModels.localAuth,
|
|
285
284
|
settings: ui.readModels.settings,
|
|
286
285
|
remote: ui.readModels.remote,
|
|
287
|
-
intelligence: ui.readModels.intelligence,
|
|
288
286
|
continuity: ui.readModels.continuity,
|
|
289
287
|
},
|
|
290
288
|
deps.requestRender,
|
|
291
289
|
),
|
|
292
290
|
});
|
|
293
291
|
|
|
294
|
-
manager.registerType({
|
|
295
|
-
id: 'debug',
|
|
296
|
-
name: 'Debug',
|
|
297
|
-
icon: 'B',
|
|
298
|
-
category: 'monitoring',
|
|
299
|
-
description: 'API debug panel: per-call log with model, provider, tokens, latency, status, and error history',
|
|
300
|
-
factory: () => {
|
|
301
|
-
const panel = new DebugPanel(ui.events.turns, deps.requestRender);
|
|
302
|
-
if (deps.orchestrator) panel.wireOrchestrator(deps.orchestrator);
|
|
303
|
-
return panel;
|
|
304
|
-
},
|
|
305
|
-
});
|
|
306
|
-
|
|
307
292
|
if (deps.forensicsRegistry) {
|
|
308
293
|
const { forensicsRegistry } = deps;
|
|
309
294
|
manager.registerType({
|
package/src/panels/index.ts
CHANGED
|
@@ -15,8 +15,6 @@ export { DocsPanel } from './docs-panel.ts';
|
|
|
15
15
|
export { ThinkingPanel } from './thinking-panel.ts';
|
|
16
16
|
export { ToolInspectorPanel } from './tool-inspector-panel.ts';
|
|
17
17
|
export { ContextVisualizerPanel } from './context-visualizer-panel.ts';
|
|
18
|
-
export { DebugPanel } from './debug-panel.ts';
|
|
19
|
-
export type { ApiCallEntry, ApiCallStatus } from './debug-panel.ts';
|
|
20
18
|
export { registerBuiltinPanels } from './builtin-panels.ts';
|
|
21
19
|
export type { BuiltinPanelDeps } from './builtin-panels.ts';
|
|
22
20
|
export { ForensicsPanel } from './forensics-panel.ts';
|
|
@@ -2,7 +2,6 @@ import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
|
|
|
2
2
|
import { evaluateSessionMaintenance } from '@/runtime/index.ts';
|
|
3
3
|
import type {
|
|
4
4
|
UiContinuitySnapshot,
|
|
5
|
-
UiIntelligenceSnapshot,
|
|
6
5
|
UiLocalAuthSnapshot,
|
|
7
6
|
UiRemoteSnapshot,
|
|
8
7
|
UiSecuritySnapshot,
|
|
@@ -25,7 +24,6 @@ export interface ProviderHealthDomainInputs {
|
|
|
25
24
|
readonly settings: UiSettingsSnapshot;
|
|
26
25
|
readonly remote: UiRemoteSnapshot;
|
|
27
26
|
readonly security: UiSecuritySnapshot;
|
|
28
|
-
readonly intelligence: UiIntelligenceSnapshot;
|
|
29
27
|
readonly continuity: UiContinuitySnapshot;
|
|
30
28
|
readonly session: UiSessionSnapshot;
|
|
31
29
|
}
|
|
@@ -40,7 +38,6 @@ export function buildProviderHealthDomainSummaries(
|
|
|
40
38
|
settings,
|
|
41
39
|
remote,
|
|
42
40
|
security,
|
|
43
|
-
intelligence,
|
|
44
41
|
continuity,
|
|
45
42
|
session,
|
|
46
43
|
} = input;
|
|
@@ -128,30 +125,6 @@ export function buildProviderHealthDomainSummaries(
|
|
|
128
125
|
: ['/mcp review'],
|
|
129
126
|
});
|
|
130
127
|
|
|
131
|
-
const intelligenceIssues = [
|
|
132
|
-
intelligence.diagnosticsStatus,
|
|
133
|
-
intelligence.symbolSearchStatus,
|
|
134
|
-
intelligence.completionsStatus,
|
|
135
|
-
intelligence.hoverStatus,
|
|
136
|
-
].filter((status) => status !== 'ready').length;
|
|
137
|
-
summaries.push({
|
|
138
|
-
name: 'intelligence',
|
|
139
|
-
level: intelligenceIssues > 0 ? 'warn' : 'good',
|
|
140
|
-
summary: intelligenceIssues > 0
|
|
141
|
-
? `${intelligenceIssues} readiness surface(s) degraded`
|
|
142
|
-
: `ready (${intelligence.totalRequests} req / ${Math.round(intelligence.avgLatencyMs)}ms avg)`,
|
|
143
|
-
next: intelligenceIssues > 0 ? '/intelligence repair' : '/intelligence review',
|
|
144
|
-
details: [
|
|
145
|
-
intelligence.diagnosticsStatus !== 'ready' ? `diagnostics=${intelligence.diagnosticsStatus}` : '',
|
|
146
|
-
intelligence.symbolSearchStatus !== 'ready' ? `symbols=${intelligence.symbolSearchStatus}` : '',
|
|
147
|
-
intelligence.completionsStatus !== 'ready' ? `completions=${intelligence.completionsStatus}` : '',
|
|
148
|
-
intelligence.hoverStatus !== 'ready' ? `hover=${intelligence.hoverStatus}` : '',
|
|
149
|
-
].filter(Boolean),
|
|
150
|
-
nextSteps: intelligenceIssues > 0
|
|
151
|
-
? ['/intelligence diagnostics', '/intelligence repair', '/health intelligence']
|
|
152
|
-
: ['/intelligence review'],
|
|
153
|
-
});
|
|
154
|
-
|
|
155
128
|
const maintenance = evaluateSessionMaintenance({
|
|
156
129
|
configManager,
|
|
157
130
|
currentTokens: session.estimatedContextTokens,
|
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
} from './provider-health-domains.ts';
|
|
15
15
|
import type {
|
|
16
16
|
UiContinuitySnapshot,
|
|
17
|
-
UiIntelligenceSnapshot,
|
|
18
17
|
UiLocalAuthSnapshot,
|
|
19
18
|
UiProvidersSnapshot,
|
|
20
19
|
UiReadModel,
|
|
@@ -53,7 +52,6 @@ export interface ProviderHealthPanelDeps {
|
|
|
53
52
|
readonly localAuth: UiReadModel<UiLocalAuthSnapshot>;
|
|
54
53
|
readonly settings: UiReadModel<UiSettingsSnapshot>;
|
|
55
54
|
readonly remote: UiReadModel<UiRemoteSnapshot>;
|
|
56
|
-
readonly intelligence: UiReadModel<UiIntelligenceSnapshot>;
|
|
57
55
|
readonly continuity: UiReadModel<UiContinuitySnapshot>;
|
|
58
56
|
}
|
|
59
57
|
|
|
@@ -430,7 +428,6 @@ export class ProviderHealthPanel extends BasePanel {
|
|
|
430
428
|
this.deps.localAuth,
|
|
431
429
|
this.deps.settings,
|
|
432
430
|
this.deps.remote,
|
|
433
|
-
this.deps.intelligence,
|
|
434
431
|
this.deps.continuity,
|
|
435
432
|
] as const) {
|
|
436
433
|
this._unsubs.push(readModel.subscribe(() => this._markDirtyAndRender()));
|
|
@@ -591,7 +588,6 @@ export class ProviderHealthPanel extends BasePanel {
|
|
|
591
588
|
settings: this.deps.settings.getSnapshot(),
|
|
592
589
|
remote: this.deps.remote.getSnapshot(),
|
|
593
590
|
security: this.deps.security.getSnapshot(),
|
|
594
|
-
intelligence: this.deps.intelligence.getSnapshot(),
|
|
595
591
|
continuity: this.deps.continuity.getSnapshot(),
|
|
596
592
|
session: this.deps.session.getSnapshot(),
|
|
597
593
|
})) {
|
|
@@ -2,7 +2,6 @@ import { type Line, type Cell, createStyledCell, createEmptyLine } from '../type
|
|
|
2
2
|
import { UIFactory } from './ui-factory.ts';
|
|
3
3
|
import { getDisplayWidth } from '../utils/terminal-width.ts';
|
|
4
4
|
import { LAYOUT } from './layout.ts';
|
|
5
|
-
import { SyntaxHighlighter, type SyntaxToken as HLToken } from './syntax-highlighter.ts';
|
|
6
5
|
|
|
7
6
|
// ─── Language Keyword Maps ───────────────────────────────────────────────────
|
|
8
7
|
|
|
@@ -288,13 +287,7 @@ export function renderCodeBlock(
|
|
|
288
287
|
const LINE_NUM_FG = '238';
|
|
289
288
|
const effectiveWidth = width - LAYOUT.RIGHT_MARGIN;
|
|
290
289
|
|
|
291
|
-
|
|
292
|
-
// Falls back to regex tokenizer when parser not yet ready or language unsupported.
|
|
293
|
-
const fullCode = codeLines.join('\n');
|
|
294
|
-
const hlLines = lang ? new SyntaxHighlighter().highlight(fullCode, lang) : null;
|
|
295
|
-
|
|
296
|
-
// Regex tokenizer fallback (used when tree-sitter not ready)
|
|
297
|
-
const regexTokenize = (line: string): SyntaxToken[] => {
|
|
290
|
+
const tokenize = (line: string): SyntaxToken[] => {
|
|
298
291
|
switch (language) {
|
|
299
292
|
case 'ts': return tokenizeTsJs(line);
|
|
300
293
|
case 'python': return tokenizePython(line);
|
|
@@ -322,11 +315,7 @@ export function renderCodeBlock(
|
|
|
322
315
|
const rawLine = codeLines[i];
|
|
323
316
|
const lineNum = String(i + 1).padStart(lineNumW);
|
|
324
317
|
|
|
325
|
-
|
|
326
|
-
const tokens: SyntaxToken[] =
|
|
327
|
-
hlLines && i < hlLines.length && hlLines[i].length > 0
|
|
328
|
-
? (hlLines[i] as HLToken[])
|
|
329
|
-
: regexTokenize(rawLine);
|
|
318
|
+
const tokens = tokenize(rawLine);
|
|
330
319
|
|
|
331
320
|
const line: Cell[] = createEmptyLine(width);
|
|
332
321
|
// Paint only the code-block body band so body rows match the header/footer width.
|
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.1.
|
|
9
|
+
let _version = '0.1.60';
|
|
10
10
|
let _sdkVersion = '0.33.35';
|
|
11
11
|
try {
|
|
12
12
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8')) as {
|
package/.goodvibes/GOODVIBES.md
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
## GoodVibes Agent Operating Policy
|
|
2
|
-
|
|
3
|
-
GoodVibes Agent is a proactive personal operator assistant built on the GoodVibes TUI shell foundation. Its default work happens serially in the main conversation.
|
|
4
|
-
|
|
5
|
-
## Default Behavior
|
|
6
|
-
|
|
7
|
-
- Work in the main conversation by default.
|
|
8
|
-
- Take safe, non-destructive actions proactively when the user asks for an outcome.
|
|
9
|
-
- Use read-only daemon/operator routes, local Agent memory, local skills, local personas, and Agent knowledge when they help the task.
|
|
10
|
-
- Ask before destructive, externally visible, costly, privacy-sensitive, service-changing, package-installing, or broad filesystem/network actions unless the user explicitly commanded that exact action.
|
|
11
|
-
- Keep normal assistant chat separate from shared build/delegation sessions.
|
|
12
|
-
|
|
13
|
-
## Background Agents And WRFC
|
|
14
|
-
|
|
15
|
-
- Do not use background agents as a default execution strategy.
|
|
16
|
-
- Do not fan out Engineer, Reviewer, Tester, Verifier, or similar local roots from Agent.
|
|
17
|
-
- WRFC is never the default reasoning path.
|
|
18
|
-
- Request WRFC only when the user explicitly asks to build, implement, fix, patch, or review code, or explicitly says to use WRFC/agent review.
|
|
19
|
-
- For explicit build/fix/review work, delegate one request to GoodVibes TUI through the public shared-session/build-delegation contract with the full original user ask.
|
|
20
|
-
- If no stable public delegation route is available, report the missing route instead of pretending to implement locally.
|
|
21
|
-
|
|
22
|
-
## Product Boundaries
|
|
23
|
-
|
|
24
|
-
- Agent connects to an already-running GoodVibes daemon. It does not start, restart, install, or own daemon/listener services.
|
|
25
|
-
- GoodVibes TUI owns coding execution, file edits, git/worktree lifecycle, runtime-isolation UX, and WRFC owner chains.
|
|
26
|
-
- Agent owns personal operator flow, setup/config surfaces, local memory, local skills, local personas, Agent knowledge, status/approval/automation observability, and explicit delegation receipts.
|
|
27
|
-
|
|
28
|
-
## Engineering Rules
|
|
29
|
-
|
|
30
|
-
- Use Bun.
|
|
31
|
-
- Author code in TypeScript only.
|
|
32
|
-
- Do not add explicit `any`.
|
|
33
|
-
- Do not add runtime imports from `goodvibes-tui/src/*`.
|
|
34
|
-
- Prefer public `@pellux/goodvibes-sdk` contracts and daemon routes.
|
|
35
|
-
- Keep copied TUI bones deliberate and document promotion candidates for shared packages.
|
package/scripts/check-bun.sh
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
set -eu
|
|
3
|
-
|
|
4
|
-
if ! command -v bun >/dev/null 2>&1; then
|
|
5
|
-
cat >&2 <<'EOF'
|
|
6
|
-
goodvibes-agent requires Bun.
|
|
7
|
-
|
|
8
|
-
Install Bun first, then install GoodVibes Agent with:
|
|
9
|
-
|
|
10
|
-
bun add -g @pellux/goodvibes-agent
|
|
11
|
-
|
|
12
|
-
If the installed command is not found, add Bun's global bin directory to PATH:
|
|
13
|
-
|
|
14
|
-
export PATH="$(bun pm bin -g):$PATH"
|
|
15
|
-
EOF
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
if ! bun --version >/dev/null 2>&1; then
|
|
20
|
-
echo "goodvibes-agent requires a working Bun executable on PATH." >&2
|
|
21
|
-
exit 1
|
|
22
|
-
fi
|