@pellux/goodvibes-agent 0.1.105 → 0.1.107
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 +18 -0
- package/README.md +13 -3
- package/docs/getting-started.md +13 -3
- package/docs/release-and-publishing.md +5 -3
- package/package.json +1 -1
- package/src/cli/completion.ts +2 -0
- package/src/cli/help.ts +15 -14
- package/src/cli/management-commands.ts +1 -1
- package/src/cli/package-verification.ts +5 -5
- package/src/cli/parser.ts +2 -0
- package/src/cli/service-posture.ts +11 -10
- package/src/cli/status.ts +29 -25
- package/src/cli/tui-startup.ts +3 -1
- 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,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GoodVibes Agent will be recorded here.
|
|
4
4
|
|
|
5
|
+
## 0.1.107 - Unreleased
|
|
6
|
+
|
|
7
|
+
- Add `goodvibes-agent launch` and `goodvibes-agent start` as explicit aliases for starting the Agent TUI.
|
|
8
|
+
- Open the Agent operator workspace automatically on normal TUI launch after first-run setup has been shown.
|
|
9
|
+
- Document the Bun global install path with `goodvibes-agent launch` as the first interactive smoke.
|
|
10
|
+
|
|
11
|
+
## 0.1.106 - 2026-06-01
|
|
12
|
+
|
|
13
|
+
- b67a2fe Polish Agent setup entrypoint
|
|
14
|
+
- Harden Bun global install with `bun add -g --trust`, zero-untrusted lifecycle verification, and packed TUI launch smoke.
|
|
15
|
+
- Make Agent status and doctor output client/operator focused, including external runtime diagnostics and fail-closed isolated Agent Knowledge readiness.
|
|
16
|
+
- Route `/memory` to Agent-local durable memory and move conversation-pinned compaction notes to `/session-memory`.
|
|
17
|
+
- Remove copied file-edit undo/redo behavior from Agent conversation commands.
|
|
18
|
+
- Remove stale hidden-share shortcut guidance and keep diff/file operations delegation-oriented.
|
|
19
|
+
- Make provider onboarding generic across provider routes, subscription sessions, and credential inventory while keeping OpenAI as an optional quick-start path.
|
|
20
|
+
- Remove internal audit phrase leakage from source/package-facing guards and neutralize non-Agent knowledge wording.
|
|
21
|
+
- Shorten release workflow validation by relying on the single branch-CI gate run instead of duplicating release checks.
|
|
22
|
+
|
|
5
23
|
## 0.1.105 - 2026-06-01
|
|
6
24
|
|
|
7
25
|
- 7ea88c8 Remove development panel surface
|
package/README.md
CHANGED
|
@@ -12,8 +12,9 @@ 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
|
+
goodvibes-agent launch
|
|
17
18
|
goodvibes-agent status
|
|
18
19
|
goodvibes-agent profiles templates
|
|
19
20
|
goodvibes-agent personas list
|
|
@@ -31,10 +32,19 @@ export PATH="$(bun pm bin -g):$PATH"
|
|
|
31
32
|
goodvibes-agent --help
|
|
32
33
|
```
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
`goodvibes-agent` and `goodvibes-agent launch` both start the interactive Agent TUI. On a fresh Agent home, the TUI opens Agent setup first.
|
|
36
|
+
|
|
37
|
+
`--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:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
bun pm -g untrusted
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
If you previously installed without `--trust`, run the targeted trust command once and then re-check:
|
|
35
44
|
|
|
36
45
|
```sh
|
|
37
46
|
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
|
|
47
|
+
bun pm -g untrusted
|
|
38
48
|
```
|
|
39
49
|
|
|
40
50
|
## Source Usage
|
|
@@ -55,7 +65,7 @@ bun run package:install-check
|
|
|
55
65
|
bun run publish:check
|
|
56
66
|
```
|
|
57
67
|
|
|
58
|
-
|
|
68
|
+
After setup has been shown once, the Agent TUI opens directly into the operator workspace. You can also reopen it with `/agent`, `/home`, or `/operator`. It is the Agent-first fullscreen workspace for setup, status, knowledge, local memory/skills, work-plan/approval review, automation observability, and explicit build delegation to GoodVibes TUI.
|
|
59
69
|
|
|
60
70
|
Inside the workspace, use `/agent-profile guide` to author custom profile starters without leaving the Agent TUI. The guided flow lists starters, exports starter JSON, imports edited local starters, and creates isolated Agent profiles from them.
|
|
61
71
|
|
package/docs/getting-started.md
CHANGED
|
@@ -13,8 +13,9 @@ 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
|
+
goodvibes-agent launch
|
|
18
19
|
goodvibes-agent status
|
|
19
20
|
goodvibes-agent personas list
|
|
20
21
|
goodvibes-agent skills list
|
|
@@ -28,10 +29,17 @@ export PATH="$(bun pm bin -g):$PATH"
|
|
|
28
29
|
goodvibes-agent --help
|
|
29
30
|
```
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
`--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:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
bun pm -g untrusted
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
If you previously installed without `--trust`, run the targeted trust command once and then re-check:
|
|
32
39
|
|
|
33
40
|
```sh
|
|
34
41
|
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
|
|
42
|
+
bun pm -g untrusted
|
|
35
43
|
```
|
|
36
44
|
|
|
37
45
|
## Run From Source
|
|
@@ -45,7 +53,9 @@ bun run dev
|
|
|
45
53
|
|
|
46
54
|
`bun run dev` starts the Agent TUI. The same entrypoint backs the installed `goodvibes-agent` command.
|
|
47
55
|
|
|
48
|
-
|
|
56
|
+
`goodvibes-agent` and `goodvibes-agent launch` both start the interactive Agent TUI. On a fresh Agent home, the TUI opens Agent setup first.
|
|
57
|
+
|
|
58
|
+
After setup has been shown once, the TUI opens directly into the Agent operator workspace. You can also reopen it with `/agent`, `/home`, or `/operator`. That fullscreen workspace is the current front door for setup/config, knowledge status, local memory and skills, read-only work/approval/automation views, and explicit GoodVibes TUI build delegation.
|
|
49
59
|
|
|
50
60
|
Use `/agent-profile guide` inside that workspace to walk through starter-profile authoring. It lists built-in and local starters, exports a JSON starter for editing, imports the edited starter back into this Agent home, and creates isolated profiles from the result.
|
|
51
61
|
|
|
@@ -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.107",
|
|
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/completion.ts
CHANGED
package/src/cli/help.ts
CHANGED
|
@@ -29,11 +29,11 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
29
29
|
` ${binary} [OPTIONS] <COMMAND> [ARGS]`,
|
|
30
30
|
'',
|
|
31
31
|
'Commands:',
|
|
32
|
-
' tui [path]
|
|
32
|
+
' tui|launch [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',
|
|
@@ -81,10 +81,11 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
81
81
|
'',
|
|
82
82
|
'Examples:',
|
|
83
83
|
` ${binary}`,
|
|
84
|
+
` ${binary} launch`,
|
|
84
85
|
` ${binary} --no-alt-screen`,
|
|
85
86
|
` ${binary} --cd ~/work/project --model openai:gpt-5.2`,
|
|
86
|
-
` ${binary}
|
|
87
|
-
` ${binary}
|
|
87
|
+
` ${binary} setup`,
|
|
88
|
+
` ${binary} setup status`,
|
|
88
89
|
` ${binary} status`,
|
|
89
90
|
` ${binary} --runtime-url http://127.0.0.1:3421 status`,
|
|
90
91
|
` ${binary} models current`,
|
|
@@ -119,23 +120,23 @@ type CommandHelp = {
|
|
|
119
120
|
|
|
120
121
|
const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
121
122
|
tui: {
|
|
122
|
-
usage: ['tui [path]', '[prompt]'],
|
|
123
|
+
usage: ['tui [path]', 'launch [path]', '[prompt]'],
|
|
123
124
|
summary: 'Start the interactive Agent terminal UI. A prompt starts Agent with that prompt seeded.',
|
|
124
|
-
examples: ['', 'tui ~/work/project', '"summarize current tasks"'],
|
|
125
|
+
examples: ['', 'launch', 'tui ~/work/project', '"summarize current tasks"'],
|
|
125
126
|
},
|
|
126
127
|
run: {
|
|
127
128
|
usage: ['run [prompt] [--output text|json|stream-json]', 'exec [prompt]'],
|
|
128
129
|
summary: 'Run a single non-interactive agent turn and write the result to stdout.',
|
|
129
130
|
examples: ['run "summarize the current project"', 'run --output json "list risks"', 'exec --output stream-json "check runtime status"'],
|
|
130
131
|
},
|
|
131
|
-
|
|
132
|
-
usage: ['
|
|
133
|
-
summary: 'Open
|
|
134
|
-
examples: ['
|
|
132
|
+
setup: {
|
|
133
|
+
usage: ['setup', 'setup status', 'onboarding', 'onboarding status'],
|
|
134
|
+
summary: 'Open Agent setup, or inspect whether setup has already been shown for this user.',
|
|
135
|
+
examples: ['setup', 'setup status', 'onboarding status'],
|
|
135
136
|
},
|
|
136
137
|
status: {
|
|
137
138
|
usage: ['status', 'status --json', '--runtime-url http://127.0.0.1:3421 status'],
|
|
138
|
-
summary: 'Print Agent config, provider, auth, runtime connection, and
|
|
139
|
+
summary: 'Print Agent config, provider, auth, runtime connection, and setup posture.',
|
|
139
140
|
examples: ['status', 'status --json', '--runtime-url http://127.0.0.1:3421 status'],
|
|
140
141
|
},
|
|
141
142
|
doctor: {
|
|
@@ -321,7 +322,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
321
322
|
},
|
|
322
323
|
tasks: {
|
|
323
324
|
usage: ['tasks list', 'tasks show <taskId>'],
|
|
324
|
-
summary: 'Inspect in-process runtime tasks. Agent blocks
|
|
325
|
+
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
326
|
examples: ['tasks list', 'tasks show task-123', 'run "check provider readiness"', 'delegate "fix the failing tests"'],
|
|
326
327
|
},
|
|
327
328
|
bundle: {
|
|
@@ -344,7 +345,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
344
345
|
const HELP_ALIASES: Record<string, string> = {
|
|
345
346
|
app: 'tui',
|
|
346
347
|
exec: 'run',
|
|
347
|
-
|
|
348
|
+
onboarding: 'setup',
|
|
348
349
|
provider: 'providers',
|
|
349
350
|
model: 'models',
|
|
350
351
|
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
|
|
package/src/cli/parser.ts
CHANGED
|
@@ -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'}`,
|
package/src/cli/tui-startup.ts
CHANGED
|
@@ -100,6 +100,7 @@ export function applyInitialTuiCliState(options: {
|
|
|
100
100
|
}): void {
|
|
101
101
|
const { cli, input, commandRegistry, commandContext, shellPaths, render } = options;
|
|
102
102
|
const globalOnboardingMarker = readOnboardingCheckMarker(shellPaths, 'user');
|
|
103
|
+
const seededPrompt = cli.flags.prompt ?? (cli.rawCommand === undefined && cli.positionals.length > 0 ? cli.positionals.join(' ') : undefined);
|
|
103
104
|
if (cli.command === 'onboarding') {
|
|
104
105
|
input.openOnboardingWizard({ mode: 'edit', reset: true });
|
|
105
106
|
} else if (cli.command === 'sessions' && cli.commandArgs[0] === 'resume') {
|
|
@@ -109,9 +110,10 @@ export function applyInitialTuiCliState(options: {
|
|
|
109
110
|
}
|
|
110
111
|
} else if (!globalOnboardingMarker.exists) {
|
|
111
112
|
input.openOnboardingWizard({ mode: 'new', reset: true });
|
|
113
|
+
} else if (cli.command === 'tui' && seededPrompt === undefined) {
|
|
114
|
+
input.openAgentWorkspace(commandContext);
|
|
112
115
|
}
|
|
113
116
|
|
|
114
|
-
const seededPrompt = cli.flags.prompt ?? (cli.rawCommand === undefined && cli.positionals.length > 0 ? cli.positionals.join(' ') : undefined);
|
|
115
117
|
if (seededPrompt) {
|
|
116
118
|
input.prompt = seededPrompt;
|
|
117
119
|
input.cursorPos = seededPrompt.length;
|
|
@@ -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
|
}
|