@pellux/goodvibes-agent 0.1.105 → 0.1.106
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 +12 -0
- package/README.md +9 -2
- package/docs/getting-started.md +9 -2
- package/docs/release-and-publishing.md +5 -3
- package/package.json +1 -1
- package/src/cli/help.ts +11 -11
- package/src/cli/management-commands.ts +1 -1
- package/src/cli/package-verification.ts +5 -5
- package/src/cli/service-posture.ts +11 -10
- package/src/cli/status.ts +29 -25
- package/src/input/agent-workspace-categories.ts +5 -5
- package/src/input/commands/guidance-runtime.ts +2 -2
- package/src/input/commands/health-runtime.ts +1 -1
- package/src/input/commands/onboarding-runtime.ts +4 -3
- package/src/input/commands/platform-access-runtime.ts +31 -79
- package/src/input/commands/session-content.ts +24 -41
- package/src/input/commands.ts +15 -0
- package/src/input/handler-content-actions.ts +1 -1
- package/src/input/keybindings.ts +2 -2
- package/src/input/onboarding/onboarding-wizard-operator-steps.ts +295 -0
- package/src/input/onboarding/onboarding-wizard-steps.ts +63 -309
- package/src/main.ts +1 -1
- package/src/renderer/help-overlay.ts +4 -4
- package/src/renderer/settings-modal.ts +1 -1
- package/src/runtime/bootstrap.ts +2 -2
- package/src/tools/agent-context-policy.ts +4 -4
- package/src/tools/agent-tool-policy-guard.ts +9 -9
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GoodVibes Agent will be recorded here.
|
|
4
4
|
|
|
5
|
+
## 0.1.106 - 2026-06-01
|
|
6
|
+
|
|
7
|
+
- b67a2fe Polish Agent setup entrypoint
|
|
8
|
+
- Harden Bun global install with `bun add -g --trust`, zero-untrusted lifecycle verification, and packed TUI launch smoke.
|
|
9
|
+
- Make Agent status and doctor output client/operator focused, including external runtime diagnostics and fail-closed isolated Agent Knowledge readiness.
|
|
10
|
+
- Route `/memory` to Agent-local durable memory and move conversation-pinned compaction notes to `/session-memory`.
|
|
11
|
+
- Remove copied file-edit undo/redo behavior from Agent conversation commands.
|
|
12
|
+
- Remove stale hidden-share shortcut guidance and keep diff/file operations delegation-oriented.
|
|
13
|
+
- Make provider onboarding generic across provider routes, subscription sessions, and credential inventory while keeping OpenAI as an optional quick-start path.
|
|
14
|
+
- Remove internal audit phrase leakage from source/package-facing guards and neutralize non-Agent knowledge wording.
|
|
15
|
+
- Shorten release workflow validation by relying on the single branch-CI gate run instead of duplicating release checks.
|
|
16
|
+
|
|
5
17
|
## 0.1.105 - 2026-06-01
|
|
6
18
|
|
|
7
19
|
- 7ea88c8 Remove development panel surface
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ The Agent product connects to an already-running GoodVibes runtime. It does not
|
|
|
12
12
|
Install the public alpha package with Bun:
|
|
13
13
|
|
|
14
14
|
```sh
|
|
15
|
-
bun add -g @pellux/goodvibes-agent
|
|
15
|
+
bun add -g --trust @pellux/goodvibes-agent
|
|
16
16
|
goodvibes-agent --help
|
|
17
17
|
goodvibes-agent status
|
|
18
18
|
goodvibes-agent profiles templates
|
|
@@ -31,10 +31,17 @@ export PATH="$(bun pm bin -g):$PATH"
|
|
|
31
31
|
goodvibes-agent --help
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
`--trust` lets Bun run the package lifecycle scripts required by the shipped SDK and parser dependencies during global install. A healthy install should report no pending lifecycle scripts:
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
bun pm -g untrusted
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
If you previously installed without `--trust`, run the targeted trust command once and then re-check:
|
|
35
41
|
|
|
36
42
|
```sh
|
|
37
43
|
bun pm trust -g @pellux/goodvibes-agent @pellux/goodvibes-sdk core-js tree-sitter-css tree-sitter-javascript tree-sitter-json tree-sitter-python tree-sitter-typescript
|
|
44
|
+
bun pm -g untrusted
|
|
38
45
|
```
|
|
39
46
|
|
|
40
47
|
## Source Usage
|
package/docs/getting-started.md
CHANGED
|
@@ -13,7 +13,7 @@ Agent does not launch the runtime for you.
|
|
|
13
13
|
## Install From Package
|
|
14
14
|
|
|
15
15
|
```sh
|
|
16
|
-
bun add -g @pellux/goodvibes-agent
|
|
16
|
+
bun add -g --trust @pellux/goodvibes-agent
|
|
17
17
|
goodvibes-agent --help
|
|
18
18
|
goodvibes-agent status
|
|
19
19
|
goodvibes-agent personas list
|
|
@@ -28,10 +28,17 @@ export PATH="$(bun pm bin -g):$PATH"
|
|
|
28
28
|
goodvibes-agent --help
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
`--trust` lets Bun run the lifecycle scripts required by the shipped SDK and parser dependencies. A clean global install should leave no pending lifecycle scripts:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
bun pm -g untrusted
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If you previously installed without `--trust`, run the targeted trust command once and then re-check:
|
|
32
38
|
|
|
33
39
|
```sh
|
|
34
40
|
bun pm trust -g @pellux/goodvibes-agent @pellux/goodvibes-sdk core-js tree-sitter-css tree-sitter-javascript tree-sitter-json tree-sitter-python tree-sitter-typescript
|
|
41
|
+
bun pm -g untrusted
|
|
35
42
|
```
|
|
36
43
|
|
|
37
44
|
## Run From Source
|
|
@@ -14,11 +14,11 @@ GoodVibes Agent's current installable public alpha version is recorded in `packa
|
|
|
14
14
|
End users install and run GoodVibes Agent with Bun:
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
|
-
bun add -g @pellux/goodvibes-agent
|
|
17
|
+
bun add -g --trust @pellux/goodvibes-agent
|
|
18
18
|
goodvibes-agent --help
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
Do not add non-Bun install instructions for this product. The package is hosted on the public package registry, but the supported install and smoke path is Bun.
|
|
21
|
+
Do not add non-Bun install instructions for this product. The package is hosted on the public package registry, but the supported install and smoke path is Bun with `--trust`, followed by `bun pm -g untrusted` reporting zero pending lifecycle scripts.
|
|
22
22
|
|
|
23
23
|
## Required Gates
|
|
24
24
|
|
|
@@ -38,7 +38,7 @@ git diff --check
|
|
|
38
38
|
|
|
39
39
|
The GitHub release workflow publishes to npm only when the repository variable `PUBLISH_NPM` is `true` and the repository secret `NPM_TOKEN` is configured. Without those repository settings, the workflow still validates and creates the GitHub release, but npm publish must be run from a local environment with an exported token.
|
|
40
40
|
|
|
41
|
-
Branch CI is the only workflow that runs the full test suite. It runs `bun run test` once for the release SHA. The release workflow must not run tests
|
|
41
|
+
Branch CI is the only workflow that runs the full test suite and release gates. It runs `bun run test` once for the release SHA, along with typecheck, architecture, performance, build, publish, and packed install checks. The release workflow must not run tests or duplicate those gates; it verifies that branch CI passed for the exact checked-out SHA and then performs only package packing, GitHub Release creation, and optional npm publish.
|
|
42
42
|
|
|
43
43
|
Do not add targeted `bun test` passes or separate release-only test gates to CI, release, or aggregate scripts. Tests that matter for release must be included in the single full branch-CI suite.
|
|
44
44
|
|
|
@@ -47,6 +47,8 @@ Also run the package install smoke from a packed artifact. It must prove:
|
|
|
47
47
|
- the installed command is on `PATH`
|
|
48
48
|
- the bin target is `bin/goodvibes-agent.ts`
|
|
49
49
|
- the Bun shebang survives pack/install
|
|
50
|
+
- Bun global install uses `bun add -g --trust`
|
|
51
|
+
- `bun pm -g untrusted` reports zero pending lifecycle scripts after install
|
|
50
52
|
- `goodvibes-agent --help` works
|
|
51
53
|
- `goodvibes-agent --version` reports the package version
|
|
52
54
|
- the installed TUI launches in a PTY and does not exit immediately
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.106",
|
|
4
4
|
"private": false,
|
|
5
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",
|
package/src/cli/help.ts
CHANGED
|
@@ -31,9 +31,9 @@ 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
|
-
' status Print config, provider, auth, and
|
|
34
|
+
' status Print config, provider, auth, and setup posture',
|
|
35
35
|
' doctor Print status plus setup warnings',
|
|
36
|
-
' onboarding [status]
|
|
36
|
+
' setup|onboarding [status] Open Agent setup, or print setup status',
|
|
37
37
|
' models [provider] List/use/pin selectable models and recent model history',
|
|
38
38
|
' providers List/inspect/use provider config/auth posture',
|
|
39
39
|
' profiles Manage isolated Agent profile homes',
|
|
@@ -83,8 +83,8 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
83
83
|
` ${binary}`,
|
|
84
84
|
` ${binary} --no-alt-screen`,
|
|
85
85
|
` ${binary} --cd ~/work/project --model openai:gpt-5.2`,
|
|
86
|
-
` ${binary}
|
|
87
|
-
` ${binary}
|
|
86
|
+
` ${binary} setup`,
|
|
87
|
+
` ${binary} setup status`,
|
|
88
88
|
` ${binary} status`,
|
|
89
89
|
` ${binary} --runtime-url http://127.0.0.1:3421 status`,
|
|
90
90
|
` ${binary} models current`,
|
|
@@ -128,14 +128,14 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
128
128
|
summary: 'Run a single non-interactive agent turn and write the result to stdout.',
|
|
129
129
|
examples: ['run "summarize the current project"', 'run --output json "list risks"', 'exec --output stream-json "check runtime status"'],
|
|
130
130
|
},
|
|
131
|
-
|
|
132
|
-
usage: ['
|
|
133
|
-
summary: 'Open
|
|
134
|
-
examples: ['
|
|
131
|
+
setup: {
|
|
132
|
+
usage: ['setup', 'setup status', 'onboarding', 'onboarding status'],
|
|
133
|
+
summary: 'Open Agent setup, or inspect whether setup has already been shown for this user.',
|
|
134
|
+
examples: ['setup', 'setup status', 'onboarding status'],
|
|
135
135
|
},
|
|
136
136
|
status: {
|
|
137
137
|
usage: ['status', 'status --json', '--runtime-url http://127.0.0.1:3421 status'],
|
|
138
|
-
summary: 'Print Agent config, provider, auth, runtime connection, and
|
|
138
|
+
summary: 'Print Agent config, provider, auth, runtime connection, and setup posture.',
|
|
139
139
|
examples: ['status', 'status --json', '--runtime-url http://127.0.0.1:3421 status'],
|
|
140
140
|
},
|
|
141
141
|
doctor: {
|
|
@@ -321,7 +321,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
321
321
|
},
|
|
322
322
|
tasks: {
|
|
323
323
|
usage: ['tasks list', 'tasks show <taskId>'],
|
|
324
|
-
summary: 'Inspect in-process runtime tasks. Agent blocks
|
|
324
|
+
summary: 'Inspect in-process runtime tasks. Agent blocks runtime-owned task submission; use run for one-shot work or delegate for explicit build/fix/review handoff.',
|
|
325
325
|
examples: ['tasks list', 'tasks show task-123', 'run "check provider readiness"', 'delegate "fix the failing tests"'],
|
|
326
326
|
},
|
|
327
327
|
bundle: {
|
|
@@ -344,7 +344,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
344
344
|
const HELP_ALIASES: Record<string, string> = {
|
|
345
345
|
app: 'tui',
|
|
346
346
|
exec: 'run',
|
|
347
|
-
|
|
347
|
+
onboarding: 'setup',
|
|
348
348
|
provider: 'providers',
|
|
349
349
|
model: 'models',
|
|
350
350
|
profile: 'profiles',
|
|
@@ -279,7 +279,7 @@ export async function handleTasks(runtime: CliCommandRuntime): Promise<string> {
|
|
|
279
279
|
const [sub = 'list', ...rest] = runtime.cli.commandArgs;
|
|
280
280
|
if (sub === 'submit') {
|
|
281
281
|
return [
|
|
282
|
-
'GoodVibes Agent blocks CLI task submission from the
|
|
282
|
+
'GoodVibes Agent blocks CLI task submission from the runtime-owned task workflow.',
|
|
283
283
|
' policy: do normal assistant work in the main Agent conversation or use `goodvibes-agent run <prompt>` for an explicit one-shot run.',
|
|
284
284
|
' build/fix/review: use `goodvibes-agent delegate <task>` for explicit GoodVibes TUI handoff.',
|
|
285
285
|
' result: no local task was started.',
|
|
@@ -82,8 +82,8 @@ const PACKAGE_FACING_FORBIDDEN_TEXT = [
|
|
|
82
82
|
['Cloud', 'flare'].join(''),
|
|
83
83
|
['Open', 'Claw'].join(''),
|
|
84
84
|
['Her', 'mes'].join(''),
|
|
85
|
-
['
|
|
86
|
-
['
|
|
85
|
+
['cap', 'abilities audit'].join(''),
|
|
86
|
+
['cap', 'abilities command'].join(''),
|
|
87
87
|
['near', '-fork'].join(''),
|
|
88
88
|
['Optional ', 'Browser Access'].join(''),
|
|
89
89
|
['Optional ', 'Other-Device Access'].join(''),
|
|
@@ -113,11 +113,11 @@ const PACKAGE_FACING_REQUIRED_TEXT: readonly {
|
|
|
113
113
|
readonly path: typeof PACKAGE_FACING_TEXT_PATHS[number];
|
|
114
114
|
readonly required: readonly string[];
|
|
115
115
|
}[] = [
|
|
116
|
-
{ path: 'README.md', required: ['/api/goodvibes-agent/knowledge'] },
|
|
116
|
+
{ path: 'README.md', required: ['/api/goodvibes-agent/knowledge', 'bun add -g --trust @pellux/goodvibes-agent', 'bun pm -g untrusted'] },
|
|
117
117
|
{ path: 'docs/README.md', required: ['/api/goodvibes-agent/knowledge'] },
|
|
118
|
-
{ path: 'docs/getting-started.md', required: ['/api/goodvibes-agent/knowledge'] },
|
|
118
|
+
{ path: 'docs/getting-started.md', required: ['/api/goodvibes-agent/knowledge', 'bun add -g --trust @pellux/goodvibes-agent', 'bun pm -g untrusted'] },
|
|
119
119
|
{ path: 'docs/runtime-connection.md', required: ['/api/goodvibes-agent/knowledge'] },
|
|
120
|
-
{ path: 'docs/release-and-publishing.md', required: ['/api/goodvibes-agent/knowledge'] },
|
|
120
|
+
{ path: 'docs/release-and-publishing.md', required: ['/api/goodvibes-agent/knowledge', 'bun add -g --trust @pellux/goodvibes-agent', 'bun pm -g untrusted'] },
|
|
121
121
|
];
|
|
122
122
|
const NON_COMMAND_ROUTE_ROOTS = new Set(['api', 'status']);
|
|
123
123
|
|
|
@@ -61,9 +61,9 @@ export interface CliServicePosture {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
const ENDPOINTS: readonly { readonly id: RuntimeEndpointId; readonly label: string; readonly enabledKey: string }[] = [
|
|
64
|
-
{ id: 'controlPlane', label: 'runtime
|
|
65
|
-
{ id: 'httpListener', label: '
|
|
66
|
-
{ id: 'web', label: 'browser companion', enabledKey: 'web.enabled' },
|
|
64
|
+
{ id: 'controlPlane', label: 'runtime connection', enabledKey: 'controlPlane.enabled' },
|
|
65
|
+
{ id: 'httpListener', label: 'inbound events endpoint', enabledKey: 'danger.httpListener' },
|
|
66
|
+
{ id: 'web', label: 'browser companion route', enabledKey: 'web.enabled' },
|
|
67
67
|
];
|
|
68
68
|
|
|
69
69
|
interface CliServicePostureOptions {
|
|
@@ -184,7 +184,7 @@ export async function buildCliServicePosture(
|
|
|
184
184
|
const issues: string[] = [];
|
|
185
185
|
|
|
186
186
|
if (serverBackedEnabled && !config.enabled) {
|
|
187
|
-
issues.push('External runtime
|
|
187
|
+
issues.push('External runtime connection settings are present, but Agent runtime lifecycle ownership is disabled by design.');
|
|
188
188
|
}
|
|
189
189
|
if (config.enabled && !config.autostart) {
|
|
190
190
|
issues.push('External runtime host config has autostart off.');
|
|
@@ -229,16 +229,17 @@ function yesNo(value: boolean): string {
|
|
|
229
229
|
export function formatCliServicePosture(posture: CliServicePosture, json = false): string {
|
|
230
230
|
if (json) return JSON.stringify(posture, null, 2);
|
|
231
231
|
return [
|
|
232
|
-
'GoodVibes
|
|
232
|
+
'GoodVibes Agent runtime connection diagnostics',
|
|
233
233
|
' ownership: managed outside goodvibes-agent',
|
|
234
|
-
|
|
235
|
-
`
|
|
236
|
-
`
|
|
237
|
-
`
|
|
234
|
+
' Agent owns lifecycle: no',
|
|
235
|
+
` external host config present: ${yesNo(posture.config.enabled)}`,
|
|
236
|
+
` external host autostart config: ${yesNo(posture.config.autostart)}`,
|
|
237
|
+
` external host restart config: ${yesNo(posture.config.restartOnFailure)}`,
|
|
238
|
+
` legacy host switch present: ${yesNo(posture.config.daemonEnabled)}`,
|
|
238
239
|
` log: ${posture.log.path ?? 'n/a'} (${posture.log.exists ? 'present' : 'missing'})`,
|
|
239
240
|
...(posture.log.readError ? [` log read error: ${posture.log.readError}`] : []),
|
|
240
241
|
'',
|
|
241
|
-
'Runtime
|
|
242
|
+
'Runtime connection checks:',
|
|
242
243
|
...posture.endpoints.map((endpoint) =>
|
|
243
244
|
` ${endpoint.label}: enabled=${yesNo(endpoint.enabled)} ${endpoint.binding.hostMode} ${endpoint.binding.host}:${endpoint.binding.port} posture=${endpoint.bindPosture.label}${endpoint.reachable === undefined ? '' : ` reachable=${yesNo(endpoint.reachable)}`}`,
|
|
244
245
|
),
|
package/src/cli/status.ts
CHANGED
|
@@ -113,9 +113,9 @@ export function buildCliDoctorFindings(options: CliStatusOptions): readonly CliD
|
|
|
113
113
|
const marker = options.onboardingMarkers?.effective;
|
|
114
114
|
const serverBackedEnabled = daemonEnabled || controlPlaneEnabled || listenerEnabled || webEnabled;
|
|
115
115
|
const networkFacingSurfaces = [
|
|
116
|
-
['runtime
|
|
117
|
-
['
|
|
118
|
-
['browser companion', webEnabled, webBinding],
|
|
116
|
+
['runtime connection', controlPlaneEnabled, controlPlaneBinding],
|
|
117
|
+
['inbound events endpoint', listenerEnabled, httpListenerBinding],
|
|
118
|
+
['browser companion route', webEnabled, webBinding],
|
|
119
119
|
].filter(([, enabled, binding]) => isNetworkFacing(enabled, binding as typeof controlPlaneBinding));
|
|
120
120
|
|
|
121
121
|
const findings: CliDoctorFinding[] = [];
|
|
@@ -162,7 +162,7 @@ export function buildCliDoctorFindings(options: CliStatusOptions): readonly CliD
|
|
|
162
162
|
severity: 'warning',
|
|
163
163
|
summary: 'Isolated Agent Knowledge route is not ready.',
|
|
164
164
|
cause: `${options.externalRuntime.agentKnowledge.route} returned ${options.externalRuntime.agentKnowledge.kind}${options.externalRuntime.agentKnowledge.statusCode === null ? '' : ` (${options.externalRuntime.agentKnowledge.statusCode})`}.`,
|
|
165
|
-
impact: 'Agent Knowledge ask/search will not use any fallback wiki or
|
|
165
|
+
impact: 'Agent Knowledge ask/search will not use any fallback wiki or non-Agent knowledge segment; it will fail closed until the Agent route is available.',
|
|
166
166
|
action: 'Update/restart the external runtime to the Agent-compatible SDK and verify goodvibes-agent compat.',
|
|
167
167
|
});
|
|
168
168
|
}
|
|
@@ -173,8 +173,8 @@ export function buildCliDoctorFindings(options: CliStatusOptions): readonly CliD
|
|
|
173
173
|
id: 'runtime-ownership-external',
|
|
174
174
|
area: 'runtime',
|
|
175
175
|
severity: 'warning',
|
|
176
|
-
summary: 'External runtime
|
|
177
|
-
cause: 'One or more runtime
|
|
176
|
+
summary: 'External runtime connection settings are present while Agent lifecycle ownership is disabled by design.',
|
|
177
|
+
cause: 'One or more runtime connection, inbound events, or browser companion settings are enabled while service.enabled is false.',
|
|
178
178
|
impact: 'The external GoodVibes runtime must own availability for those endpoints; Agent will not start or enable them.',
|
|
179
179
|
action: 'Manage runtime availability from GoodVibes TUI or the owning host, then use Agent for read-only diagnostics.',
|
|
180
180
|
});
|
|
@@ -224,10 +224,10 @@ export function buildCliDoctorFindings(options: CliStatusOptions): readonly CliD
|
|
|
224
224
|
id: 'onboarding-incomplete',
|
|
225
225
|
area: 'onboarding',
|
|
226
226
|
severity: 'warning',
|
|
227
|
-
summary: '
|
|
228
|
-
cause: 'No global user
|
|
227
|
+
summary: 'Agent setup has not been shown for this user.',
|
|
228
|
+
cause: 'No global user setup check marker was found.',
|
|
229
229
|
impact: 'Important runtime, network, provider, auth, or permission choices may still be implicit defaults.',
|
|
230
|
-
action: 'Run /
|
|
230
|
+
action: 'Run /setup in GoodVibes Agent or goodvibes-agent setup status to review setup state.',
|
|
231
231
|
});
|
|
232
232
|
}
|
|
233
233
|
|
|
@@ -284,10 +284,10 @@ export function buildCliDoctorFindings(options: CliStatusOptions): readonly CliD
|
|
|
284
284
|
id: 'network-http-listener-enabled',
|
|
285
285
|
area: 'network',
|
|
286
286
|
severity: 'warning',
|
|
287
|
-
summary: 'The
|
|
288
|
-
cause: `
|
|
287
|
+
summary: 'The inbound events endpoint is reachable beyond loopback.',
|
|
288
|
+
cause: `Inbound events endpoint is enabled on ${httpListenerBinding.host}:${httpListenerBinding.port} with ${httpListenerBinding.hostMode} binding.`,
|
|
289
289
|
impact: 'External tools and devices may be able to reach incoming event endpoints.',
|
|
290
|
-
action: 'Keep
|
|
290
|
+
action: 'Keep inbound-event secrets/signature checks configured for every enabled endpoint.',
|
|
291
291
|
});
|
|
292
292
|
}
|
|
293
293
|
|
|
@@ -379,7 +379,7 @@ export function renderCliStatus(options: CliStatusOptions): string {
|
|
|
379
379
|
? ` operatorTokens: ${options.auth.operatorTokenPresent ? 'present' : 'missing'} (${options.auth.operatorTokenPath})`
|
|
380
380
|
: ' operatorTokens: unknown',
|
|
381
381
|
'',
|
|
382
|
-
'
|
|
382
|
+
'Runtime Connection:',
|
|
383
383
|
...(externalRuntime ? [
|
|
384
384
|
` baseUrl: ${externalRuntime.baseUrl}`,
|
|
385
385
|
` reachable: ${yesNo(externalRuntime.reachable)}${externalRuntime.statusCode === null ? '' : ` (HTTP ${externalRuntime.statusCode})`}`,
|
|
@@ -393,11 +393,9 @@ export function renderCliStatus(options: CliStatusOptions): string {
|
|
|
393
393
|
]),
|
|
394
394
|
'',
|
|
395
395
|
'Runtime Ownership:',
|
|
396
|
-
' Agent
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
` legacy host autostart: ${yesNo(serviceAutostart)}`,
|
|
400
|
-
` legacy host restart policy: ${yesNo(restartOnFailure)}`,
|
|
396
|
+
' Agent role: client/operator TUI only',
|
|
397
|
+
' hosting lifecycle: external',
|
|
398
|
+
' Agent starts runtime: no',
|
|
401
399
|
...(options.service ? [
|
|
402
400
|
` platform: ${options.service.managed.platform}`,
|
|
403
401
|
` installed: ${yesNo(options.service.managed.installed)}`,
|
|
@@ -405,12 +403,6 @@ export function renderCliStatus(options: CliStatusOptions): string {
|
|
|
405
403
|
` definition: ${options.service.managed.path}`,
|
|
406
404
|
` log: ${options.service.log.path ?? 'n/a'} (${options.service.log.exists ? 'present' : 'missing'})`,
|
|
407
405
|
] : []),
|
|
408
|
-
'',
|
|
409
|
-
'Runtime Endpoint Diagnostics:',
|
|
410
|
-
bindLine('runtimeApi', controlPlaneEnabled, controlPlaneBinding),
|
|
411
|
-
bindLine('incomingWebhook', listenerEnabled, httpListenerBinding),
|
|
412
|
-
bindLine('browserCompanion', webEnabled, webBinding),
|
|
413
|
-
'',
|
|
414
406
|
'Onboarding:',
|
|
415
407
|
` checked: ${marker?.exists ? 'yes' : 'no'}`,
|
|
416
408
|
` scope: ${marker?.scope ?? 'none'}`,
|
|
@@ -418,6 +410,18 @@ export function renderCliStatus(options: CliStatusOptions): string {
|
|
|
418
410
|
];
|
|
419
411
|
|
|
420
412
|
if (options.doctor) {
|
|
413
|
+
lines.push(
|
|
414
|
+
'',
|
|
415
|
+
'External Runtime Config Signals:',
|
|
416
|
+
` host config present: ${yesNo(serviceEnabled)}`,
|
|
417
|
+
` host autostart: ${yesNo(serviceAutostart)}`,
|
|
418
|
+
` host restart policy: ${yesNo(restartOnFailure)}`,
|
|
419
|
+
'',
|
|
420
|
+
'Endpoint Diagnostics:',
|
|
421
|
+
bindLine('runtimeApi', controlPlaneEnabled, controlPlaneBinding),
|
|
422
|
+
bindLine('incomingWebhook', listenerEnabled, httpListenerBinding),
|
|
423
|
+
bindLine('browserCompanion', webEnabled, webBinding),
|
|
424
|
+
);
|
|
421
425
|
lines.push('', 'Warnings:');
|
|
422
426
|
if (findings.length === 0) {
|
|
423
427
|
lines.push(' none');
|
|
@@ -439,7 +443,7 @@ export function renderCliStatus(options: CliStatusOptions): string {
|
|
|
439
443
|
export function renderOnboardingCliStatus(options: CliStatusOptions): string {
|
|
440
444
|
const marker = options.onboardingMarkers?.effective;
|
|
441
445
|
return [
|
|
442
|
-
'GoodVibes Agent
|
|
446
|
+
'GoodVibes Agent setup status',
|
|
443
447
|
` checked: ${marker?.exists ? 'yes' : 'no'}`,
|
|
444
448
|
` scope: ${marker?.scope ?? 'none'}`,
|
|
445
449
|
` source: ${marker?.payload?.source ?? 'n/a'}`,
|
|
@@ -27,14 +27,14 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
27
27
|
detail: 'Agent connects to an existing GoodVibes runtime and owns local assistant configuration only. Runtime lifecycle and connectivity posture remain external.',
|
|
28
28
|
actions: [
|
|
29
29
|
{ id: 'config', label: 'Open settings', detail: 'Open the fullscreen Agent settings workspace.', command: '/config', kind: 'command', safety: 'safe' },
|
|
30
|
-
{ id: '
|
|
30
|
+
{ id: 'setup', label: 'Run setup', detail: 'Review Agent settings in the fullscreen setup flow.', command: '/setup', kind: 'command', safety: 'safe' },
|
|
31
31
|
{ id: 'setup-provider-model', label: 'Provider and model', detail: 'Choose the provider/model route for normal assistant chat.', command: '/model', kind: 'command', safety: 'safe' },
|
|
32
32
|
{ id: 'setup-agent-knowledge', label: 'Agent Knowledge', detail: 'Inspect the isolated Agent Knowledge store before ingesting source-backed material.', command: '/knowledge status', kind: 'command', safety: 'read-only' },
|
|
33
33
|
{ id: 'setup-runtime-profiles', label: 'Agent profiles', detail: 'Browse starter templates for isolated Agent homes and operator identities.', command: '/agent-profile templates', kind: 'command', safety: 'read-only' },
|
|
34
34
|
{ id: 'setup-personas', label: 'Personas', detail: 'Create or select the active local Agent persona.', targetCategoryId: 'personas', kind: 'workspace', safety: 'safe' },
|
|
35
35
|
{ id: 'setup-skills', label: 'Skills', detail: 'Create, review, and enable reusable local Agent skills.', targetCategoryId: 'skills', kind: 'workspace', safety: 'safe' },
|
|
36
36
|
{ id: 'setup-routines', label: 'Routines', detail: 'Create, review, and enable local Agent routines before any explicit schedule promotion.', targetCategoryId: 'routines', kind: 'workspace', safety: 'safe' },
|
|
37
|
-
{ id: 'setup-memory', label: 'Local memory', detail: 'Inspect local
|
|
37
|
+
{ id: 'setup-memory', label: 'Local memory', detail: 'Inspect Agent-local memory; secrets stay rejected or redacted.', command: '/memory', kind: 'command', safety: 'read-only' },
|
|
38
38
|
{ id: 'setup-channels', label: 'Channels', detail: 'Open companion pairing and channel readiness setup.', command: '/pair', kind: 'command', safety: 'safe' },
|
|
39
39
|
{ id: 'setup-voice-media', label: 'Voice and media', detail: 'Open TTS/media settings for voice and image-capable Agent flows.', command: '/config tts', kind: 'command', safety: 'safe' },
|
|
40
40
|
{ id: 'provider', label: 'Provider status', detail: 'Review provider/model posture.', command: '/provider', kind: 'command', safety: 'read-only' },
|
|
@@ -66,7 +66,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
66
66
|
{ id: 'knowledge-ingest-url', label: 'Ingest URL', detail: 'Ingest a URL into Agent Knowledge only. Requires an explicit --yes command with a real URL.', command: '/knowledge ingest-url <url> --yes', kind: 'command', safety: 'safe' },
|
|
67
67
|
{ id: 'knowledge-import-bookmarks', label: 'Import bookmarks', detail: 'Import a browser bookmark export into Agent Knowledge only. Requires an explicit --yes command with a real path.', command: '/knowledge import-bookmarks <path> --yes', kind: 'command', safety: 'safe' },
|
|
68
68
|
{ id: 'knowledge-review-queue', label: 'Review queue', detail: 'Inspect source, item, and issue review work before accepting, rejecting, or resolving anything.', command: '/knowledge queue', kind: 'command', safety: 'read-only' },
|
|
69
|
-
{ id: 'knowledge-
|
|
69
|
+
{ id: 'knowledge-sources', label: 'Source library', detail: 'List source-backed records already ingested into the isolated Agent Knowledge segment.', command: '/knowledge list --kind sources', kind: 'command', safety: 'read-only' },
|
|
70
70
|
{ id: 'knowledge-ask', label: 'Ask Agent knowledge', detail: 'Close this workspace and run /knowledge ask <question> or ask normally in chat.', kind: 'guidance', safety: 'read-only' },
|
|
71
71
|
],
|
|
72
72
|
},
|
|
@@ -81,8 +81,8 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
81
81
|
{ id: 'tts-provider', label: 'Choose TTS provider', detail: 'Open provider/model routing for spoken responses through the settings flow.', command: '/config tts.provider', kind: 'command', safety: 'safe' },
|
|
82
82
|
{ id: 'tts-speak', label: 'Speak a prompt', detail: 'Submit a normal assistant turn and play the reply through configured live TTS. Close this workspace and provide real prompt text.', command: '/tts <prompt>', kind: 'command', safety: 'safe' },
|
|
83
83
|
{ id: 'image-attach', label: 'Attach image input', detail: 'Attach an image to the next assistant turn. Close this workspace and provide a real path and prompt.', command: '/image <path> <prompt>', kind: 'command', safety: 'safe' },
|
|
84
|
-
{ id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool readiness without starting inbound endpoints or mutating runtime state.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
|
|
85
|
-
{ id: 'mcp-
|
|
84
|
+
{ id: 'browser-tools', label: 'Browser tools', detail: 'Inspect browser/tool server readiness without starting inbound endpoints or mutating runtime state.', command: '/mcp servers', kind: 'command', safety: 'read-only' },
|
|
85
|
+
{ id: 'mcp-tools', label: 'MCP tool inventory', detail: 'List available MCP tools, including browser and automation roles, without changing server trust or setup.', command: '/mcp tools', kind: 'command', safety: 'read-only' },
|
|
86
86
|
],
|
|
87
87
|
},
|
|
88
88
|
{
|
|
@@ -13,13 +13,13 @@ export function registerGuidanceRuntimeCommands(registry: CommandRegistry): void
|
|
|
13
13
|
ctx.openOnboardingWizard({ mode: 'edit' });
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
|
-
ctx.print('Use /
|
|
16
|
+
ctx.print('Use /setup to open Agent setup.');
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
if (sub === 'print') {
|
|
20
20
|
ctx.print([
|
|
21
21
|
'Welcome To GoodVibes Agent',
|
|
22
|
-
' /
|
|
22
|
+
' /setup - open Agent setup with current settings preloaded',
|
|
23
23
|
' /agent - open the Agent operator workspace',
|
|
24
24
|
' /knowledge - inspect isolated Agent Knowledge status, ask, and search',
|
|
25
25
|
' /memory - manage local Agent memory',
|
|
@@ -3,12 +3,13 @@ import { openOnboardingWizard } from './runtime-services.ts';
|
|
|
3
3
|
|
|
4
4
|
export function registerOnboardingRuntimeCommands(registry: CommandRegistry): void {
|
|
5
5
|
registry.register({
|
|
6
|
-
name: '
|
|
7
|
-
|
|
6
|
+
name: 'setup',
|
|
7
|
+
aliases: ['onboarding'],
|
|
8
|
+
description: 'Open Agent setup with current settings preloaded for review and editing',
|
|
8
9
|
usage: '',
|
|
9
10
|
handler(_args, ctx) {
|
|
10
11
|
openOnboardingWizard(ctx, { mode: 'edit', reset: true });
|
|
11
|
-
ctx.print('Opening
|
|
12
|
+
ctx.print('Opening Agent setup.');
|
|
12
13
|
},
|
|
13
14
|
});
|
|
14
15
|
}
|