@pellux/goodvibes-agent 0.1.59 → 0.1.61
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 +14 -0
- package/package.json +2 -18
- package/src/cli/help.ts +3 -17
- package/src/cli/package-verification.ts +1 -4
- 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 +8 -12
- package/src/input/commands.ts +0 -2
- 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/.goodvibes/skills/add-provider/SKILL.md +0 -199
- package/src/input/commands/intelligence-runtime.ts +0 -223
- 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,20 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GoodVibes Agent will be recorded here.
|
|
4
4
|
|
|
5
|
+
## 0.1.61 - 2026-05-31
|
|
6
|
+
|
|
7
|
+
- ff6766d Stop shipping repo-local skills
|
|
8
|
+
- 2eedcf5 Focus primary CLI help on Agent use
|
|
9
|
+
- 0ec6af0 Document Bun trust path for SDK native deps
|
|
10
|
+
- f9a6c76 Surface Agent actions in slash help
|
|
11
|
+
|
|
12
|
+
## 0.1.60 - 2026-05-31
|
|
13
|
+
|
|
14
|
+
- f3f2486 Stop shipping developer guidance in package
|
|
15
|
+
- 80c273e Remove developer debug surface
|
|
16
|
+
- e2d058f Remove code intelligence command surface
|
|
17
|
+
- acb3eeb Remove coding intelligence render dependencies
|
|
18
|
+
|
|
5
19
|
## 0.1.59 - 2026-05-31
|
|
6
20
|
|
|
7
21
|
- f03ee5f Remove unused coding panel sources
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.61",
|
|
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",
|
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
"files": [
|
|
13
13
|
"bin",
|
|
14
14
|
"LICENSE",
|
|
15
|
-
".goodvibes/skills",
|
|
16
|
-
".goodvibes/GOODVIBES.md",
|
|
17
15
|
"src",
|
|
18
16
|
"!src/test",
|
|
19
17
|
"!src/**/*.test.ts",
|
|
@@ -77,8 +75,6 @@
|
|
|
77
75
|
"assistant",
|
|
78
76
|
"tui",
|
|
79
77
|
"bun",
|
|
80
|
-
"daemon",
|
|
81
|
-
"control-plane",
|
|
82
78
|
"automation",
|
|
83
79
|
"ai"
|
|
84
80
|
],
|
|
@@ -93,27 +89,15 @@
|
|
|
93
89
|
"@anthropic-ai/bedrock-sdk": "^0.28.1",
|
|
94
90
|
"@anthropic-ai/sdk": "^0.82.0",
|
|
95
91
|
"@anthropic-ai/vertex-sdk": "^0.16.0",
|
|
96
|
-
"@ast-grep/napi": "^0.42.0",
|
|
97
92
|
"@aws/bedrock-token-generator": "^1.1.0",
|
|
98
93
|
"@pellux/goodvibes-sdk": "0.33.35",
|
|
99
|
-
"bash-language-server": "^5.6.0",
|
|
100
94
|
"fuse.js": "^7.1.0",
|
|
101
95
|
"graphql": "^16.13.2",
|
|
102
96
|
"jszip": "^3.10.1",
|
|
103
97
|
"node-edge-tts": "^1.2.10",
|
|
104
98
|
"openai": "^6.29.0",
|
|
105
|
-
"pyright": "^1.1.408",
|
|
106
|
-
"simple-git": "^3.33.0",
|
|
107
99
|
"sql.js": "^1.14.1",
|
|
108
100
|
"sqlite-vec": "^0.1.9",
|
|
109
|
-
"tree-sitter-css": "^0.25.0",
|
|
110
|
-
"tree-sitter-javascript": "^0.25.0",
|
|
111
|
-
"tree-sitter-json": "^0.24.8",
|
|
112
|
-
"tree-sitter-python": "^0.25.0",
|
|
113
|
-
"tree-sitter-typescript": "^0.23.2",
|
|
114
|
-
"typescript-language-server": "^5.1.3",
|
|
115
|
-
"vscode-langservers-extracted": "^4.10.0",
|
|
116
|
-
"web-tree-sitter": "^0.26.7",
|
|
117
101
|
"zustand": "^5.0.12"
|
|
118
102
|
},
|
|
119
103
|
"devDependencies": {
|
package/src/cli/help.ts
CHANGED
|
@@ -31,9 +31,7 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
31
31
|
'Commands:',
|
|
32
32
|
' tui [path] Start the interactive Agent terminal UI (default)',
|
|
33
33
|
' run|exec [prompt] Run non-interactively with text/json/stream-json output',
|
|
34
|
-
'
|
|
35
|
-
' service Inspect existing daemon service posture (read-only)',
|
|
36
|
-
' status Print config, provider, service, and onboarding posture',
|
|
34
|
+
' status Print config, provider, auth, and onboarding posture',
|
|
37
35
|
' doctor Print status plus setup warnings',
|
|
38
36
|
' onboarding [status] Open Agent onboarding, or print onboarding status',
|
|
39
37
|
' models [provider] List/use/pin selectable models and recent model history',
|
|
@@ -48,14 +46,9 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
48
46
|
' subscription Start/finish/logout provider subscription sessions',
|
|
49
47
|
' secrets List, set, link, delete, and test GoodVibes secret refs',
|
|
50
48
|
' sessions List, show, export, or resume saved sessions',
|
|
51
|
-
' tasks List/show in-process runtime tasks (read-only)',
|
|
52
49
|
' pair|qrcode Print companion pairing payload and QR code',
|
|
53
|
-
' surfaces Inspect/check browser/listener/external surfaces (read-only)',
|
|
54
|
-
' listener test Test HTTP listener/webhook readiness',
|
|
55
|
-
' control-plane status Inspect daemon auth, local admin, tokens, and ports',
|
|
56
50
|
' bundle export|inspect|import',
|
|
57
51
|
' Move setup/profile/trust/support bundles',
|
|
58
|
-
' remote|bridge Inspect remote runner/node posture',
|
|
59
52
|
' completion <shell> Generate shell completion script',
|
|
60
53
|
' help [command] Print this help or command-specific help',
|
|
61
54
|
' version Print version',
|
|
@@ -66,7 +59,6 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
66
59
|
' --agent-profile <name> Use an isolated Agent runtime profile home',
|
|
67
60
|
' -C, --cd <dir> Set working directory for this launch',
|
|
68
61
|
' --working-dir <dir> Alias for --cd',
|
|
69
|
-
' --daemon-home <dir> Override daemon home for daemon-backed commands',
|
|
70
62
|
' -c, --config <key=value> Override a config value for this launch',
|
|
71
63
|
' --enable <feature> Enable a feature flag for this launch',
|
|
72
64
|
' --disable <feature> Disable a feature flag for this launch',
|
|
@@ -76,9 +68,6 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
76
68
|
' --output-format <format> Alias for --output',
|
|
77
69
|
' --json Alias for --output-format json',
|
|
78
70
|
' --no-alt-screen Keep output in normal terminal scrollback',
|
|
79
|
-
' --port <port> Port for server/web commands',
|
|
80
|
-
' --hostname <host> Hostname for server/web commands',
|
|
81
|
-
' --open Open browser when supported',
|
|
82
71
|
' -r, --resume [id|latest] Resume saved session when supported',
|
|
83
72
|
' -s, --session <id> Use a specific session when supported',
|
|
84
73
|
' --continue Continue the latest session when supported',
|
|
@@ -105,13 +94,10 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
105
94
|
` ${binary} ask "What is GoodVibes Agent?"`,
|
|
106
95
|
` ${binary} search "release checklist"`,
|
|
107
96
|
` ${binary} delegate --wrfc "fix the failing tests in ~/work/project"`,
|
|
108
|
-
` ${binary} surfaces`,
|
|
109
|
-
` ${binary} surfaces check`,
|
|
110
|
-
` ${binary} service check`,
|
|
111
|
-
` ${binary} listener test`,
|
|
112
|
-
` ${binary} control-plane status`,
|
|
113
97
|
` ${binary} subscription providers`,
|
|
114
98
|
` ${binary} subscription login openai start --open`,
|
|
99
|
+
` ${binary} help service`,
|
|
100
|
+
` ${binary} help surfaces`,
|
|
115
101
|
].join('\n');
|
|
116
102
|
}
|
|
117
103
|
|
|
@@ -37,13 +37,12 @@ const REQUIRED_TARBALL_PATHS = [
|
|
|
37
37
|
'src/main.ts',
|
|
38
38
|
'bin/goodvibes-agent.ts',
|
|
39
39
|
'tsconfig.json',
|
|
40
|
-
'.goodvibes/GOODVIBES.md',
|
|
41
40
|
'docs/README.md',
|
|
42
41
|
'docs/getting-started.md',
|
|
43
42
|
'docs/deployment-and-services.md',
|
|
44
43
|
'docs/release-and-publishing.md',
|
|
45
44
|
] as const;
|
|
46
|
-
const FORBIDDEN_TARBALL_PREFIXES = ['.github/', 'src/test/', 'src/.test/', '.goodvibes/
|
|
45
|
+
const FORBIDDEN_TARBALL_PREFIXES = ['.github/', 'src/test/', 'src/.test/', '.goodvibes/', 'vendor/'] as const;
|
|
47
46
|
const FORBIDDEN_TARBALL_DOCS = [
|
|
48
47
|
['docs/cloud', 'flare-batch.md'].join(''),
|
|
49
48
|
['docs/home', 'assistant-surface.md'].join(''),
|
|
@@ -56,8 +55,6 @@ const PACKAGE_FACING_TEXT_PATHS = [
|
|
|
56
55
|
'docs/getting-started.md',
|
|
57
56
|
'docs/deployment-and-services.md',
|
|
58
57
|
'docs/release-and-publishing.md',
|
|
59
|
-
'.goodvibes/GOODVIBES.md',
|
|
60
|
-
'.goodvibes/skills/add-provider/SKILL.md',
|
|
61
58
|
] as const;
|
|
62
59
|
const PACKAGE_FACING_FORBIDDEN_TEXT = [
|
|
63
60
|
['/api/', 'knowledge'].join(''),
|
|
@@ -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>',
|
|
@@ -116,11 +116,17 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
116
116
|
const items: SelectionItem[] = [
|
|
117
117
|
{ id: '/agent', label: '/agent', detail: 'Open the Agent operator workspace', category: 'Agent Operator' },
|
|
118
118
|
{ id: '/home', label: '/home', detail: 'Alias for the Agent operator workspace', category: 'Agent Operator' },
|
|
119
|
+
{ id: '/knowledge', label: '/knowledge', detail: 'Inspect isolated Agent Knowledge status, ask/search, and ingest flows', category: 'Agent Operator' },
|
|
120
|
+
{ id: '/memory', label: '/memory', detail: 'Review local Agent memory records', category: 'Agent Operator' },
|
|
121
|
+
{ id: '/personas', label: '/personas', detail: 'Create, review, and activate local Agent personas', category: 'Agent Operator' },
|
|
122
|
+
{ id: '/agent-skills', label: '/agent-skills', detail: 'Create, review, and enable reusable Agent skills', category: 'Agent Operator' },
|
|
123
|
+
{ id: '/routines', label: '/routines', detail: 'Create, review, start, and promote Agent routines explicitly', category: 'Agent Operator' },
|
|
124
|
+
{ id: '/delegate', label: '/delegate [task]', detail: 'Explicit build/fix/review handoff to GoodVibes TUI', category: 'Agent Operator' },
|
|
125
|
+
{ id: '/pair', label: '/pair', detail: 'Pair companion clients through the external GoodVibes service', category: 'Agent Operator' },
|
|
119
126
|
{ id: '/model', label: '/model [id]', detail: 'Select LLM model', category: 'Model & Provider' },
|
|
120
127
|
{ id: '/provider', label: '/provider [name]', detail: 'Switch provider', category: 'Model & Provider' },
|
|
121
128
|
{ id: '/effort', label: '/effort [level]', detail: 'Reasoning effort (instant/low/medium/high)', category: 'Model & Provider' },
|
|
122
129
|
{ 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
130
|
{ id: '/expand', label: '/expand [type]', detail: 'Expand blocks (all|thinking|tool|code)', category: 'Config & Display' },
|
|
125
131
|
{ id: '/collapse', label: '/collapse [type]', detail: 'Collapse blocks', category: 'Config & Display' },
|
|
126
132
|
{ id: '/bookmarks', label: '/bookmarks', detail: 'List bookmarked blocks', category: 'Config & Display' },
|
|
@@ -172,7 +178,7 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
172
178
|
});
|
|
173
179
|
return;
|
|
174
180
|
}
|
|
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, /
|
|
181
|
+
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
182
|
},
|
|
177
183
|
});
|
|
178
184
|
|
|
@@ -234,16 +240,6 @@ export function registerShellCoreCommands(registry: CommandRegistry): void {
|
|
|
234
240
|
},
|
|
235
241
|
});
|
|
236
242
|
|
|
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
243
|
registry.register({
|
|
248
244
|
name: 'effort',
|
|
249
245
|
aliases: ['e'],
|
package/src/input/commands.ts
CHANGED
|
@@ -43,7 +43,6 @@ import { registerHealthRuntimeCommands } from './commands/health-runtime.ts';
|
|
|
43
43
|
import { registerSettingsSyncRuntimeCommands } from './commands/settings-sync-runtime.ts';
|
|
44
44
|
import { registerProviderAccountsRuntimeCommands } from './commands/provider-accounts-runtime.ts';
|
|
45
45
|
import { registerLocalAuthRuntimeCommands } from './commands/local-auth-runtime.ts';
|
|
46
|
-
import { registerIntelligenceRuntimeCommands } from './commands/intelligence-runtime.ts';
|
|
47
46
|
import { registerConversationRuntimeCommands } from './commands/conversation-runtime.ts';
|
|
48
47
|
import { registerQrcodeRuntimeCommands } from './commands/qrcode-runtime.ts';
|
|
49
48
|
import { registerOnboardingRuntimeCommands } from './commands/onboarding-runtime.ts';
|
|
@@ -99,7 +98,6 @@ export function registerBuiltinCommands(registry: CommandRegistry): void {
|
|
|
99
98
|
registerSettingsSyncRuntimeCommands(registry);
|
|
100
99
|
registerProviderAccountsRuntimeCommands(registry);
|
|
101
100
|
registerLocalAuthRuntimeCommands(registry);
|
|
102
|
-
registerIntelligenceRuntimeCommands(registry);
|
|
103
101
|
registerConversationRuntimeCommands(registry);
|
|
104
102
|
registerQrcodeRuntimeCommands(registry);
|
|
105
103
|
registerOnboardingRuntimeCommands(registry);
|
|
@@ -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.61';
|
|
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.
|