@pellux/goodvibes-agent 0.1.61 → 0.1.63
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 +24 -12
- package/README.md +8 -8
- package/docs/README.md +2 -2
- package/docs/deployment-and-services.md +8 -8
- package/docs/getting-started.md +9 -9
- package/docs/release-and-publishing.md +4 -4
- package/package.json +1 -1
- package/src/agent/routine-schedule-format.ts +20 -20
- package/src/agent/routine-schedule-promotion.ts +1 -1
- package/src/agent/routine-schedule-receipts.ts +1 -1
- package/src/cli/agent-knowledge-command.ts +7 -7
- package/src/cli/entrypoint.ts +2 -2
- package/src/cli/help.ts +14 -14
- package/src/cli/management-commands.ts +3 -3
- package/src/cli/service-command.ts +1 -1
- package/src/cli/service-posture.ts +6 -6
- package/src/cli/status.ts +12 -12
- package/src/cli/surface-command.ts +5 -5
- package/src/input/agent-workspace-categories.ts +18 -18
- package/src/input/agent-workspace-editors.ts +1 -1
- package/src/input/agent-workspace-setup.ts +3 -3
- package/src/input/commands/delegation-runtime.ts +1 -1
- package/src/input/commands/schedule-runtime.ts +3 -3
- package/src/input/commands/shell-core.ts +1 -1
- package/src/input/handler-onboarding.ts +4 -4
- package/src/input/onboarding/onboarding-wizard-steps.ts +13 -13
- package/src/input/settings-modal-agent-policy.ts +1 -1
- package/src/renderer/agent-workspace.ts +5 -5
- package/src/renderer/settings-modal.ts +7 -7
- 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.63 - 2026-05-31
|
|
6
|
+
|
|
7
|
+
- Rewrote the remaining repo docs that still read like copied runtime/API notes into Agent-facing product docs.
|
|
8
|
+
- Clarified channel, provider, planning, voice, tools, and Agent Knowledge boundaries around external runtime usage and no default Knowledge/Wiki fallback.
|
|
9
|
+
- Kept the shipped package focused on the Agent TUI while preserving non-packaged foundation docs as Agent-specific references.
|
|
10
|
+
|
|
11
|
+
## 0.1.62 - 2026-05-31
|
|
12
|
+
|
|
13
|
+
- Tightened primary CLI help around Agent workflows instead of advanced runtime diagnostics.
|
|
14
|
+
- Reworded onboarding, workspace, and routine schedule surfaces toward Agent/operator language.
|
|
15
|
+
- Kept schedule promotion explicit while removing stale runtime-schedule wording from user-facing flows.
|
|
16
|
+
|
|
5
17
|
## 0.1.61 - 2026-05-31
|
|
6
18
|
|
|
7
19
|
- ff6766d Stop shipping repo-local skills
|
|
@@ -117,7 +129,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
117
129
|
|
|
118
130
|
## 0.1.37 - 2026-05-31
|
|
119
131
|
|
|
120
|
-
- 656b6f4 Add Agent routine
|
|
132
|
+
- 656b6f4 Add Agent routine runtime schedule promotion
|
|
121
133
|
|
|
122
134
|
## 0.1.36 - 2026-05-31
|
|
123
135
|
|
|
@@ -216,7 +228,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
216
228
|
|
|
217
229
|
## 0.1.12 - 2026-05-31
|
|
218
230
|
|
|
219
|
-
- 1843a77 Handle external
|
|
231
|
+
- 1843a77 Handle external runtime SDK mismatch in live verification
|
|
220
232
|
- 2b1a3f4 Align agent-owned test paths
|
|
221
233
|
|
|
222
234
|
## 0.1.11 - 2026-05-31
|
|
@@ -258,7 +270,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
258
270
|
- 6b57500 Hide local agent activity in Agent UI
|
|
259
271
|
- 7166188 Add Agent Knowledge CLI shortcuts
|
|
260
272
|
- 386c19d Align service diagnostics with Agent boundaries
|
|
261
|
-
- e8b19db Lock
|
|
273
|
+
- e8b19db Lock runtime-owned settings in Agent
|
|
262
274
|
|
|
263
275
|
## 0.1.9 - 2026-05-31
|
|
264
276
|
|
|
@@ -266,7 +278,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
266
278
|
- a24c581 Use delegation wording in runtime indicator
|
|
267
279
|
- 259a75f Guard Agent knowledge isolation
|
|
268
280
|
- 59b6729 Align task help with Agent policy
|
|
269
|
-
- 0074a76 Classify stale
|
|
281
|
+
- 0074a76 Classify stale runtime knowledge routes
|
|
270
282
|
|
|
271
283
|
## 0.1.8 - 2026-05-31
|
|
272
284
|
|
|
@@ -297,7 +309,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
297
309
|
- Added `LICENSE` to the explicit package file contract and release verification so registry tarballs cannot omit license text.
|
|
298
310
|
- Prevented the operator workspace from dispatching placeholder delegation commands such as `/delegate --wrfc <task>`; those actions now provide guidance until the user supplies real task text.
|
|
299
311
|
- Added local Agent routines with `/routines`: create/list/search/show/enable/disable/start/review/stale/delete, secret-looking value rejection, enabled routine prompt injection, and operator workspace status. Starting a routine stays in the main conversation and does not create hidden background jobs.
|
|
300
|
-
- Removed copied TUI release, UAT, and WRFC artifact docs from the Agent source tree and updated remaining source docs so channel, voice, integration, and panel guidance speaks in Agent/external-
|
|
312
|
+
- Removed copied TUI release, UAT, and WRFC artifact docs from the Agent source tree and updated remaining source docs so channel, voice, integration, and panel guidance speaks in Agent/external-runtime terms.
|
|
301
313
|
|
|
302
314
|
## 0.1.6 - 2026-05-31
|
|
303
315
|
|
|
@@ -308,10 +320,10 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
308
320
|
|
|
309
321
|
## 0.1.5 - 2026-05-31
|
|
310
322
|
|
|
311
|
-
- Hardened package-facing release checks so shipped docs and Agent guidance cannot reintroduce default Knowledge/Wiki, non-Agent graph, copied
|
|
323
|
+
- Hardened package-facing release checks so shipped docs and Agent guidance cannot reintroduce default Knowledge/Wiki, non-Agent graph, copied runtime-hosting, or copied WRFC-first policy text.
|
|
312
324
|
- Removed the generic default `knowledgeApi` client from the active Agent command context so slash commands must use the isolated Agent Knowledge API.
|
|
313
325
|
- Changed CLI `knowledge ingest-url` to post directly to `/api/goodvibes-agent/knowledge/ingest/url` instead of invoking the generic knowledge operator method.
|
|
314
|
-
- Rejected default-space and broad cross-space query flags in CLI and slash Agent Knowledge commands before any
|
|
326
|
+
- Rejected default-space and broad cross-space query flags in CLI and slash Agent Knowledge commands before any runtime call.
|
|
315
327
|
|
|
316
328
|
## 0.1.4 - 2026-05-31
|
|
317
329
|
|
|
@@ -327,7 +339,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
327
339
|
|
|
328
340
|
## 0.1.2 - 2026-05-30
|
|
329
341
|
|
|
330
|
-
- Added `goodvibes-agent compat` for package SDK pin, external
|
|
342
|
+
- Added `goodvibes-agent compat` for package SDK pin, external runtime version, auth presence, and isolated Agent Knowledge route readiness.
|
|
331
343
|
- Added `goodvibes-agent knowledge ...` commands for the isolated `/api/goodvibes-agent/knowledge/*` environment with no default Knowledge/Wiki or non-Agent graph fallback.
|
|
332
344
|
- Added explicit GoodVibes TUI build delegation through `goodvibes-agent delegate` and `/delegate`; WRFC is requested only through explicit `--wrfc`, `/wrfc`, or `/review` delegation.
|
|
333
345
|
- Removed the copied WRFC panel from the default Agent panel registry while preserving explicit TUI delegation for build/fix/review work.
|
|
@@ -336,7 +348,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
336
348
|
## 0.1.1 - 2026-05-30
|
|
337
349
|
|
|
338
350
|
- Reissued the first public alpha package after the initial `0.1.0` registry publish produced an install-blocking npm packument inconsistency.
|
|
339
|
-
- Kept the same Agent runtime boundary and TUI-derived shell foundation: external
|
|
351
|
+
- Kept the same Agent runtime boundary and TUI-derived shell foundation: external runtime only, serial/proactive Agent policy, and explicit GoodVibes TUI delegation for build/fix/review work.
|
|
340
352
|
|
|
341
353
|
## 0.1.0 - 2026-05-28
|
|
342
354
|
|
|
@@ -345,7 +357,7 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
345
357
|
- Preserved Agent product policy: serial/proactive main conversation by default, no local Agent-owned WRFC/spawn fanout, and explicit GoodVibes TUI delegation for build/fix/review work.
|
|
346
358
|
- Moved Agent-owned runtime state to `.goodvibes/agent` surface roots.
|
|
347
359
|
- Updated packaged Agent guidance, reviewer persona, and provider skill to avoid copied TUI WRFC/multi-agent defaults.
|
|
348
|
-
- Kept
|
|
360
|
+
- Kept runtime lifecycle external: Agent connects to an already-running GoodVibes runtime and blocks runtime/service ownership commands.
|
|
349
361
|
- Pinned `@pellux/goodvibes-sdk` to `0.33.35`.
|
|
350
362
|
|
|
351
363
|
## 0.0.0 - Private Baseline
|
|
@@ -353,8 +365,8 @@ All notable changes to GoodVibes Agent will be recorded here.
|
|
|
353
365
|
- Copied the GoodVibes terminal foundation as a near-fork starting point for the Agent product.
|
|
354
366
|
- Renamed package identity to `@pellux/goodvibes-agent` and exposed one executable, `goodvibes-agent`.
|
|
355
367
|
- Pinned `@pellux/goodvibes-sdk` to `0.33.35`.
|
|
356
|
-
- Removed packaged
|
|
357
|
-
- Limited package-facing docs to Agent install, external-
|
|
368
|
+
- Removed packaged runtime-host binaries and blocked Agent-owned runtime/service lifecycle commands.
|
|
369
|
+
- Limited package-facing docs to Agent install, external-runtime deployment, and release guidance.
|
|
358
370
|
- Replaced copied coding-first orchestration policy with Agent serial/proactive policy and explicit GoodVibes TUI build delegation.
|
|
359
371
|
- Added the first Agent operator workspace on the copied fullscreen workspace foundation, exposed through `/agent`, `/home`, and `/operator`.
|
|
360
372
|
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
GoodVibes Agent is the personal operator assistant built on the GoodVibes terminal UI foundation. This repository is intentionally in a near-fork baseline phase: the shell, renderer, input, fullscreen workspace, command, and release bones are copied from the terminal product first, then the coding-specific behavior is removed or reshaped deliberately.
|
|
7
7
|
|
|
8
|
-
The Agent product connects to an already-running GoodVibes
|
|
8
|
+
The Agent product connects to an already-running GoodVibes runtime. It does not install, start, stop, restart, or own runtime connectivity or service lifecycle.
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
@@ -65,7 +65,7 @@ goodvibes-agent --agent-profile household status
|
|
|
65
65
|
GOODVIBES_AGENT_HOME=/path/to/agent-home goodvibes-agent status
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
Profiles isolate Agent-local config, sessions, local memory, personas, skills, routines, and setup state. Starter templates seed local personas, skills, and routines for household, research, travel, operations, and personal productivity profiles; exported starter JSON can be edited and re-imported as a local starter. The
|
|
68
|
+
Profiles isolate Agent-local config, sessions, local memory, personas, skills, routines, and setup state. Starter templates seed local personas, skills, and routines for household, research, travel, operations, and personal productivity profiles; exported starter JSON can be edited and re-imported as a local starter. The GoodVibes runtime is still external and shared unless the owning host is separately configured otherwise.
|
|
69
69
|
|
|
70
70
|
Local Agent behavior is editable from the TUI:
|
|
71
71
|
|
|
@@ -81,13 +81,13 @@ Local Agent behavior is editable from the TUI:
|
|
|
81
81
|
/skills local list
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
Starting a routine records local usage and prints its steps; it does not spawn background agents or
|
|
84
|
+
Starting a routine records local usage and prints its steps; it does not spawn background agents or automation jobs. Promotion to an external schedule is separate and explicit: it calls the public `schedules.create` route only after `--yes`, can include explicit delivery targets such as `--delivery-surface slack`, records a redacted local receipt, and the generated scheduled prompt keeps Agent Knowledge isolated from default Knowledge/Wiki and non-Agent knowledge segments. Use `/schedule reconcile` to compare those local receipts against live external schedules through public `schedules.list`.
|
|
85
85
|
|
|
86
|
-
##
|
|
86
|
+
## Runtime Prerequisite
|
|
87
87
|
|
|
88
|
-
Start or restart the
|
|
88
|
+
Start or restart the GoodVibes runtime from GoodVibes TUI or the owning host before launching Agent. Agent status and companion/knowledge routes connect to that external runtime, normally on `http://127.0.0.1:3421`.
|
|
89
89
|
|
|
90
|
-
Agent intentionally blocks
|
|
90
|
+
Agent intentionally blocks runtime lifecycle commands:
|
|
91
91
|
|
|
92
92
|
```sh
|
|
93
93
|
goodvibes-agent serve
|
|
@@ -95,7 +95,7 @@ goodvibes-agent service start
|
|
|
95
95
|
goodvibes-agent surfaces enable web
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
Those commands should return explicit external-
|
|
98
|
+
Those commands should return explicit external-runtime guidance instead of mutating local service posture.
|
|
99
99
|
|
|
100
100
|
## Product Boundary
|
|
101
101
|
|
|
@@ -103,7 +103,7 @@ GoodVibes Agent owns the operator assistant surface: serial assistant flow, proa
|
|
|
103
103
|
|
|
104
104
|
Agent Knowledge/Wiki is its own product segment. Agent uses `/api/goodvibes-agent/knowledge/*` and must not fall back to default Knowledge/Wiki or other product-specific knowledge routes.
|
|
105
105
|
|
|
106
|
-
GoodVibes TUI owns coding execution: file edits, git/worktree workflows, coding panels, runtime-isolation UX, and WRFC execution. Agent may delegate explicit build/fix/review work to TUI through public
|
|
106
|
+
GoodVibes TUI owns coding execution: file edits, git/worktree workflows, coding panels, runtime-isolation UX, and WRFC execution. Agent may delegate explicit build/fix/review work to TUI through public runtime/session contracts; normal assistant chat must not use shared coding sessions.
|
|
107
107
|
|
|
108
108
|
## Package Docs
|
|
109
109
|
|
package/docs/README.md
CHANGED
|
@@ -15,8 +15,8 @@ Important baseline constraints:
|
|
|
15
15
|
- Agent installs one executable: `goodvibes-agent`.
|
|
16
16
|
- Agent uses Bun and TypeScript-authored source.
|
|
17
17
|
- Agent depends on `@pellux/goodvibes-sdk@0.33.35`.
|
|
18
|
-
- Agent connects to an externally managed
|
|
19
|
-
- Agent does not start, stop, restart, install, uninstall, or own
|
|
18
|
+
- Agent connects to an externally managed GoodVibes runtime.
|
|
19
|
+
- Agent does not start, stop, restart, install, uninstall, or own runtime connectivity or service lifecycle.
|
|
20
20
|
- Agent Knowledge/Wiki uses only `/api/goodvibes-agent/knowledge/*`; there is no default Knowledge/Wiki or non-Agent product fallback.
|
|
21
21
|
- Agent supports isolated runtime homes with `GOODVIBES_AGENT_HOME=<path>` and named profile homes with `goodvibes-agent profiles create <name> --template <starter> --yes` plus `--agent-profile <name>`.
|
|
22
22
|
- Agent ships starter profile templates for household, research, travel, operations, and personal productivity local state; `profiles templates export/import` and `/agent-profile guide` support local custom starters.
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# Deployment And Services
|
|
2
2
|
|
|
3
|
-
GoodVibes Agent is a client/operator surface. It does not own
|
|
3
|
+
GoodVibes Agent is a client/operator surface. It does not own runtime or listener deployment.
|
|
4
4
|
|
|
5
5
|
## Service Ownership
|
|
6
6
|
|
|
7
7
|
Agent must not:
|
|
8
8
|
|
|
9
|
-
- start an embedded
|
|
9
|
+
- start an embedded runtime
|
|
10
10
|
- start an embedded HTTP listener
|
|
11
11
|
- install or uninstall OS services
|
|
12
|
-
- start, stop, or restart
|
|
12
|
+
- start, stop, or restart runtime services
|
|
13
13
|
- enable web, listener, control-plane, or channel surface posture
|
|
14
14
|
|
|
15
|
-
Those operations belong to GoodVibes TUI or the
|
|
15
|
+
Those operations belong to GoodVibes TUI or the owning runtime host.
|
|
16
16
|
|
|
17
17
|
## Agent Runtime
|
|
18
18
|
|
|
@@ -30,21 +30,21 @@ The executable is backed by TypeScript-authored source with a Bun shebang. Packa
|
|
|
30
30
|
- `goodvibes-agent` launches the TUI in a real PTY
|
|
31
31
|
- `goodvibes-agent smoke --json` when that command is available in the baseline being tested
|
|
32
32
|
|
|
33
|
-
## External
|
|
33
|
+
## External Runtime Connection
|
|
34
34
|
|
|
35
|
-
Agent reads configuration and tokens, then connects to an already-running
|
|
35
|
+
Agent reads configuration and tokens, then connects to an already-running GoodVibes runtime. The default local control-plane URL is normally:
|
|
36
36
|
|
|
37
37
|
```text
|
|
38
38
|
http://127.0.0.1:3421
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
If the
|
|
41
|
+
If the runtime is unavailable, unauthenticated, or on an incompatible SDK version, Agent commands should report actionable diagnostics without printing token values.
|
|
42
42
|
|
|
43
43
|
## Surface Commands
|
|
44
44
|
|
|
45
45
|
`goodvibes-agent surfaces`, `surfaces check`, and `surfaces show <surfaceId>` are read-only diagnostics.
|
|
46
46
|
|
|
47
|
-
`surfaces enable` and `surfaces disable` are intentionally blocked in Agent because they can mutate
|
|
47
|
+
`surfaces enable` and `surfaces disable` are intentionally blocked in Agent because they can mutate runtime/listener/web/channel posture.
|
|
48
48
|
|
|
49
49
|
## Release Rule
|
|
50
50
|
|
package/docs/getting-started.md
CHANGED
|
@@ -5,10 +5,10 @@ GoodVibes Agent is the installable public alpha of the personal operator assista
|
|
|
5
5
|
## Requirements
|
|
6
6
|
|
|
7
7
|
- Bun `1.3.10` or newer
|
|
8
|
-
- An already-running GoodVibes
|
|
9
|
-
- A
|
|
8
|
+
- An already-running GoodVibes runtime compatible with `@pellux/goodvibes-sdk@0.33.35`
|
|
9
|
+
- A runtime token/config path accepted by that external runtime
|
|
10
10
|
|
|
11
|
-
Agent does not launch the
|
|
11
|
+
Agent does not launch the runtime for you.
|
|
12
12
|
|
|
13
13
|
## Install From Package
|
|
14
14
|
|
|
@@ -46,7 +46,7 @@ Once the TUI opens, run `/agent`, `/home`, or `/operator` to open the Agent oper
|
|
|
46
46
|
|
|
47
47
|
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.
|
|
48
48
|
|
|
49
|
-
Use `/schedule receipts` to review redacted local routine promotion history and `/schedule reconcile` to compare those receipts with live
|
|
49
|
+
Use `/schedule receipts` to review redacted local routine promotion history and `/schedule reconcile` to compare those receipts with live external schedules through public `schedules.list`.
|
|
50
50
|
|
|
51
51
|
## Isolated Agent Profiles
|
|
52
52
|
|
|
@@ -67,7 +67,7 @@ goodvibes-agent --agent-profile household status
|
|
|
67
67
|
goodvibes-agent --agent-profile household
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
Named profiles isolate Agent-local config, sessions, memory, personas, skills, routines, and setup state under a profile-specific home. Starter templates seed local personas, skills, and routines for household, research, travel, operations, and personal productivity profiles; exported starter JSON can be edited and re-imported as a local starter. They do not start or isolate the external
|
|
70
|
+
Named profiles isolate Agent-local config, sessions, memory, personas, skills, routines, and setup state under a profile-specific home. Starter templates seed local personas, skills, and routines for household, research, travel, operations, and personal productivity profiles; exported starter JSON can be edited and re-imported as a local starter. They do not start or isolate the external GoodVibes runtime by themselves.
|
|
71
71
|
|
|
72
72
|
## Local Personas, Routines, And Skills
|
|
73
73
|
|
|
@@ -85,11 +85,11 @@ Personas, routines, and reusable Agent skills are local to GoodVibes Agent. They
|
|
|
85
85
|
/skills local list
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
The active persona plus enabled Agent routines and skills are injected into the main serial assistant conversation. Starting a routine records local usage and prints its steps; it does not spawn background agents or
|
|
88
|
+
The active persona plus enabled Agent routines and skills are injected into the main serial assistant conversation. Starting a routine records local usage and prints its steps; it does not spawn background agents or automation jobs. Promoting a routine to a schedule is an explicit `schedules.create` call, requires `--yes`, writes a local redacted promotion receipt, and preserves the rule that Agent Knowledge never falls back to default Knowledge/Wiki or non-Agent knowledge segments.
|
|
89
89
|
|
|
90
|
-
## External
|
|
90
|
+
## External Runtime
|
|
91
91
|
|
|
92
|
-
Start the
|
|
92
|
+
Start the runtime from GoodVibes TUI or the owning host before using runtime-backed Agent features. Agent expects the runtime to expose the public operator/Agent routes, including:
|
|
93
93
|
|
|
94
94
|
- `/status`
|
|
95
95
|
- `/api/goodvibes-agent/knowledge/status`
|
|
@@ -99,7 +99,7 @@ Start the daemon from GoodVibes TUI or the daemon host before using daemon-backe
|
|
|
99
99
|
|
|
100
100
|
Agent Knowledge/Wiki is an Agent-owned product segment. Agent commands must not fall back to default Knowledge/Wiki or other product-specific knowledge spaces.
|
|
101
101
|
|
|
102
|
-
Agent lifecycle commands that would start or mutate
|
|
102
|
+
Agent lifecycle commands that would start or mutate runtime posture are blocked intentionally. Use `goodvibes-agent status`, `goodvibes-agent doctor`, and read-only surface checks for diagnostics.
|
|
103
103
|
|
|
104
104
|
## Current Baseline Notes
|
|
105
105
|
|
|
@@ -9,7 +9,7 @@ GoodVibes Agent's current installable public alpha version is recorded in `packa
|
|
|
9
9
|
- SDK dependency: exact pin to `@pellux/goodvibes-sdk@0.33.35`
|
|
10
10
|
- runtime: Bun
|
|
11
11
|
- source language: TypeScript
|
|
12
|
-
-
|
|
12
|
+
- runtime ownership: external only
|
|
13
13
|
|
|
14
14
|
End users install and run GoodVibes Agent with Bun:
|
|
15
15
|
|
|
@@ -44,16 +44,16 @@ Also run the package install smoke from a packed artifact. It must prove:
|
|
|
44
44
|
- `goodvibes-agent --help` works
|
|
45
45
|
- `goodvibes-agent --version` reports the package version
|
|
46
46
|
- the installed TUI launches in a PTY and does not exit immediately
|
|
47
|
-
-
|
|
47
|
+
- runtime-backed commands fail clearly when the external GoodVibes runtime is unavailable or unauthenticated
|
|
48
48
|
- no token value is printed
|
|
49
49
|
|
|
50
50
|
## Do Not Ship
|
|
51
51
|
|
|
52
|
-
Do not publish if package-facing docs or install commands refer to another package name, another executable, or Agent-owned
|
|
52
|
+
Do not publish if package-facing docs or install commands refer to another package name, another executable, or Agent-owned runtime lifecycle.
|
|
53
53
|
|
|
54
54
|
Do not publish if Agent Knowledge commands can fall back to default Knowledge/Wiki or another product-specific knowledge route. Agent Knowledge must use the isolated `/api/goodvibes-agent/knowledge/*` segment.
|
|
55
55
|
|
|
56
|
-
Do not ship
|
|
56
|
+
Do not ship runtime host binaries from this package. If Agent later gets compiled artifacts, they must use Agent artifact names and remain separate from runtime ownership.
|
|
57
57
|
|
|
58
58
|
## Near-Fork Baseline Rule
|
|
59
59
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.63",
|
|
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",
|
|
@@ -27,16 +27,16 @@ export function formatRoutineSchedulePreview(preview: RoutineSchedulePromotionPr
|
|
|
27
27
|
const delivery = preview.payload.delivery;
|
|
28
28
|
const deliveryTargetCount = delivery?.targets.length ?? 0;
|
|
29
29
|
return [
|
|
30
|
-
'
|
|
30
|
+
'GoodVibes schedule preview for Agent routine',
|
|
31
31
|
` routine: ${preview.routineName} (${preview.routineId})`,
|
|
32
32
|
` route: ${preview.method} ${preview.route}`,
|
|
33
|
-
` name: ${String(preview.payload.name ?? '(
|
|
33
|
+
` name: ${String(preview.payload.name ?? '(runtime default)')}`,
|
|
34
34
|
` schedule: ${preview.payload.kind} ${schedule}`,
|
|
35
35
|
` enabled: ${preview.payload.enabled === false ? 'no' : 'yes'}`,
|
|
36
36
|
` delivery: ${delivery?.mode ?? 'none'}${deliveryTargetCount > 0 ? ` (${deliveryTargetCount} target${deliveryTargetCount === 1 ? '' : 's'})` : ''}`,
|
|
37
|
-
' target:
|
|
37
|
+
' target: GoodVibes runtime/main conversation route',
|
|
38
38
|
' policy: isolated Agent Knowledge only; no default wiki/non-Agent fallback; no WRFC unless explicitly delegated',
|
|
39
|
-
' next: rerun with --yes to create this
|
|
39
|
+
' next: rerun with --yes to create this external schedule',
|
|
40
40
|
].join('\n');
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -45,12 +45,12 @@ export function formatRoutineScheduleSuccess(result: RoutineSchedulePromotionSuc
|
|
|
45
45
|
const id = readString(record, 'id') ?? '(unknown)';
|
|
46
46
|
const status = readString(record, 'status') ?? (record.enabled === false ? 'paused' : 'enabled');
|
|
47
47
|
return [
|
|
48
|
-
'Created
|
|
48
|
+
'Created GoodVibes schedule for Agent routine',
|
|
49
49
|
` routine: ${result.routineName} (${result.routineId})`,
|
|
50
50
|
` schedule: ${id}`,
|
|
51
51
|
` status: ${status}`,
|
|
52
52
|
` route: ${result.kind} ${result.route}`,
|
|
53
|
-
' next: inspect with /schedule list or
|
|
53
|
+
' next: inspect with /schedule list or schedule observability',
|
|
54
54
|
].join('\n');
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -83,7 +83,7 @@ export function formatRoutineScheduleReceipt(receipt: RoutineScheduleReceipt): s
|
|
|
83
83
|
` status: ${receipt.status}`,
|
|
84
84
|
` routine: ${receipt.routineName} (${receipt.routineId})`,
|
|
85
85
|
` route: ${receipt.method} ${receipt.route}`,
|
|
86
|
-
`
|
|
86
|
+
` runtime: ${receipt.daemonBaseUrl}`,
|
|
87
87
|
` schedule: ${receipt.scheduleName}${receipt.scheduleId ? ` (${receipt.scheduleId})` : ''}`,
|
|
88
88
|
receipt.scheduleStatus ? ` schedule status: ${receipt.scheduleStatus}` : '',
|
|
89
89
|
` cadence: ${receipt.scheduleKind} ${receipt.scheduleValue}${receipt.timezone ? ` [${receipt.timezone}]` : ''}`,
|
|
@@ -101,18 +101,18 @@ export function formatRoutineScheduleReceipt(receipt: RoutineScheduleReceipt): s
|
|
|
101
101
|
export function formatRoutineScheduleCorrelation(result: RoutineScheduleCorrelationResult, limit = 10): string {
|
|
102
102
|
if (!result.ok) {
|
|
103
103
|
return [
|
|
104
|
-
`
|
|
104
|
+
`GoodVibes schedule reconciliation error: ${result.kind}`,
|
|
105
105
|
` ${result.error}`,
|
|
106
|
-
result.baseUrl ? `
|
|
106
|
+
result.baseUrl ? ` runtime: ${result.baseUrl}` : null,
|
|
107
107
|
` route: ${ROUTINE_SCHEDULE_LIST_METHOD} ${result.route}`,
|
|
108
108
|
result.kind === 'auth_required'
|
|
109
|
-
? ' next: pair/authenticate with the
|
|
109
|
+
? ' next: pair/authenticate with the external GoodVibes runtime, then retry.'
|
|
110
110
|
: null,
|
|
111
111
|
result.kind === 'daemon_unavailable'
|
|
112
|
-
? ' next: start/restart the external GoodVibes
|
|
112
|
+
? ' next: start/restart the external GoodVibes runtime from TUI or host tooling; Agent does not own runtime lifecycle.'
|
|
113
113
|
: null,
|
|
114
114
|
result.kind === 'version_mismatch' || result.kind === 'daemon_route_unavailable'
|
|
115
|
-
? ' next: update/restart the external GoodVibes
|
|
115
|
+
? ' next: update/restart the external GoodVibes runtime so public schedules.list is available.'
|
|
116
116
|
: null,
|
|
117
117
|
].filter((line): line is string => Boolean(line)).join('\n');
|
|
118
118
|
}
|
|
@@ -120,7 +120,7 @@ export function formatRoutineScheduleCorrelation(result: RoutineScheduleCorrelat
|
|
|
120
120
|
if (result.receiptCount === 0) {
|
|
121
121
|
return [
|
|
122
122
|
'Agent routine schedule reconciliation',
|
|
123
|
-
`
|
|
123
|
+
` runtime: ${result.baseUrl}`,
|
|
124
124
|
` route: ${result.kind} ${result.route}`,
|
|
125
125
|
` live schedules: ${result.scheduleCount}`,
|
|
126
126
|
' No local routine promotion receipts exist yet.',
|
|
@@ -132,7 +132,7 @@ export function formatRoutineScheduleCorrelation(result: RoutineScheduleCorrelat
|
|
|
132
132
|
const failed = result.correlations.filter((entry) => entry.liveStatus === 'failed-receipt').length;
|
|
133
133
|
return [
|
|
134
134
|
'Agent routine schedule reconciliation',
|
|
135
|
-
`
|
|
135
|
+
` runtime: ${result.baseUrl}`,
|
|
136
136
|
` route: ${result.kind} ${result.route}`,
|
|
137
137
|
` receipts: ${result.receiptCount}; live schedules: ${result.scheduleCount}; matched: ${matched}; missing: ${missing}; failed receipts: ${failed}`,
|
|
138
138
|
...correlations.map((entry) => {
|
|
@@ -153,21 +153,21 @@ export function formatRoutineScheduleCorrelation(result: RoutineScheduleCorrelat
|
|
|
153
153
|
|
|
154
154
|
export function formatRoutineScheduleFailure(failure: RoutineSchedulePromotionFailure): string {
|
|
155
155
|
return [
|
|
156
|
-
`
|
|
156
|
+
`GoodVibes schedule error: ${failure.kind}`,
|
|
157
157
|
` ${failure.error}`,
|
|
158
|
-
failure.baseUrl ? `
|
|
158
|
+
failure.baseUrl ? ` runtime: ${failure.baseUrl}` : null,
|
|
159
159
|
` route: ${ROUTINE_SCHEDULE_METHOD} ${failure.route}`,
|
|
160
160
|
failure.kind === 'version_mismatch' && failure.daemonVersion && failure.expectedSdkVersion
|
|
161
|
-
? ` versions:
|
|
161
|
+
? ` versions: runtime=${failure.daemonVersion} expected=${failure.expectedSdkVersion}`
|
|
162
162
|
: null,
|
|
163
163
|
failure.kind === 'auth_required'
|
|
164
|
-
? ' next: pair/authenticate with the
|
|
164
|
+
? ' next: pair/authenticate with the external GoodVibes runtime, then retry with --yes.'
|
|
165
165
|
: null,
|
|
166
166
|
failure.kind === 'daemon_unavailable'
|
|
167
|
-
? ' next: start/restart the external GoodVibes
|
|
167
|
+
? ' next: start/restart the external GoodVibes runtime from TUI or host tooling; Agent does not own runtime lifecycle.'
|
|
168
168
|
: null,
|
|
169
169
|
failure.kind === 'version_mismatch' || failure.kind === 'daemon_route_unavailable'
|
|
170
|
-
? ' next: update/restart the external GoodVibes
|
|
170
|
+
? ' next: update/restart the external GoodVibes runtime so public schedules.create is available.'
|
|
171
171
|
: null,
|
|
172
172
|
].filter((line): line is string => Boolean(line)).join('\n');
|
|
173
173
|
}
|
|
@@ -393,7 +393,7 @@ async function classifyScheduleError(
|
|
|
393
393
|
return {
|
|
394
394
|
ok: false,
|
|
395
395
|
kind: 'version_mismatch',
|
|
396
|
-
error: `External
|
|
396
|
+
error: `External runtime SDK version ${daemonVersion} does not match Agent SDK pin ${SDK_VERSION}; schedules.create is unavailable.`,
|
|
397
397
|
route: ROUTINE_SCHEDULE_ROUTE,
|
|
398
398
|
baseUrl: connection.baseUrl,
|
|
399
399
|
daemonVersion,
|
|
@@ -454,7 +454,7 @@ async function classifyScheduleListError(
|
|
|
454
454
|
return {
|
|
455
455
|
ok: false,
|
|
456
456
|
kind: 'version_mismatch',
|
|
457
|
-
error: `External
|
|
457
|
+
error: `External runtime SDK version ${daemonVersion} does not match Agent SDK pin ${SDK_VERSION}; schedules.list is unavailable.`,
|
|
458
458
|
route: ROUTINE_SCHEDULE_ROUTE,
|
|
459
459
|
baseUrl: connection.baseUrl,
|
|
460
460
|
daemonVersion,
|
|
@@ -214,7 +214,7 @@ async function classifyKnowledgeError(error: unknown, connection: AgentDaemonCon
|
|
|
214
214
|
return {
|
|
215
215
|
ok: false,
|
|
216
216
|
kind: 'version_mismatch',
|
|
217
|
-
error: `External
|
|
217
|
+
error: `External runtime SDK version ${daemonVersion} does not match Agent SDK pin ${metadata.sdkVersion}; Agent Knowledge route is unavailable.`,
|
|
218
218
|
baseUrl: connection.baseUrl,
|
|
219
219
|
route,
|
|
220
220
|
daemonVersion,
|
|
@@ -419,16 +419,16 @@ function formatFailure(failure: AgentKnowledgeFailure, json: boolean): string {
|
|
|
419
419
|
return [
|
|
420
420
|
`Agent Knowledge error: ${failure.kind}`,
|
|
421
421
|
` ${failure.error}`,
|
|
422
|
-
`
|
|
422
|
+
` runtime: ${failure.baseUrl}`,
|
|
423
423
|
` route: ${failure.route}`,
|
|
424
424
|
failure.kind === 'version_mismatch' && failure.daemonVersion && failure.expectedSdkVersion
|
|
425
|
-
? ` versions:
|
|
425
|
+
? ` versions: runtime=${failure.daemonVersion} expected=${failure.expectedSdkVersion}`
|
|
426
426
|
: null,
|
|
427
427
|
failure.kind === 'version_mismatch'
|
|
428
|
-
? ' next: update/restart the external GoodVibes
|
|
428
|
+
? ' next: update/restart the external GoodVibes runtime so /status matches the Agent SDK pin.'
|
|
429
429
|
: null,
|
|
430
430
|
failure.kind === 'daemon_route_unavailable'
|
|
431
|
-
? ' next: update/restart the external GoodVibes
|
|
431
|
+
? ' next: update/restart the external GoodVibes runtime to the SDK version required by this Agent package.'
|
|
432
432
|
: null,
|
|
433
433
|
].filter((line): line is string => Boolean(line)).join('\n');
|
|
434
434
|
}
|
|
@@ -615,11 +615,11 @@ export async function handleCompatCommand(runtime: CliCommandRuntime): Promise<C
|
|
|
615
615
|
'GoodVibes Agent compatibility',
|
|
616
616
|
` package: ${metadata.version}`,
|
|
617
617
|
` SDK pin: ${metadata.sdkVersion}`,
|
|
618
|
-
`
|
|
618
|
+
` runtime: ${daemonVersion} at ${connection.baseUrl} (${daemon.ok ? 'reachable' : 'unreachable'})`,
|
|
619
619
|
` version compatible: ${yesNo(versionCompatible)}`,
|
|
620
620
|
` operator token: ${connection.token ? 'present' : 'missing'} (${connection.tokenPath})`,
|
|
621
621
|
` Agent knowledge route: ${knowledgeRouteReady ? 'ready' : `not ready (${knowledgeRoute.ok ? 'unknown' : knowledgeRoute.kind})`}`,
|
|
622
|
-
...(versionCompatible ? [] : [' next: update/restart the external GoodVibes
|
|
622
|
+
...(versionCompatible ? [] : [' next: update/restart the external GoodVibes runtime so /status matches the Agent SDK pin.']),
|
|
623
623
|
].join('\n');
|
|
624
624
|
return {
|
|
625
625
|
output: runtime.cli.flags.outputFormat === 'json' ? JSON.stringify(value, null, 2) : text,
|
package/src/cli/entrypoint.ts
CHANGED
|
@@ -89,8 +89,8 @@ export async function prepareShellCliRuntime(
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
if (cli.command === 'serve') {
|
|
92
|
-
console.error(`${binary} connects to an already-running GoodVibes
|
|
93
|
-
console.error('Start or manage the
|
|
92
|
+
console.error(`${binary} connects to an already-running GoodVibes runtime and does not start or own runtime lifecycle.`);
|
|
93
|
+
console.error('Start or manage the runtime from GoodVibes TUI or host tooling, then run this Agent against it.');
|
|
94
94
|
process.exit(2);
|
|
95
95
|
}
|
|
96
96
|
|
package/src/cli/help.ts
CHANGED
|
@@ -37,9 +37,9 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
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 runtime profile homes',
|
|
40
|
-
' routines Inspect local routines and explicitly promote one to
|
|
40
|
+
' routines Inspect local routines and explicitly promote one to an external schedule',
|
|
41
41
|
' auth Inspect and manage local users, sessions, and bootstrap auth',
|
|
42
|
-
' compat Inspect Agent SDK pin,
|
|
42
|
+
' compat Inspect Agent SDK pin, runtime version, and Agent knowledge route readiness',
|
|
43
43
|
' knowledge Use isolated Agent Knowledge/Wiki routes',
|
|
44
44
|
' ask|search Shortcuts for isolated Agent Knowledge ask/search',
|
|
45
45
|
' delegate Explicitly delegate build/fix/review work to GoodVibes TUI',
|
|
@@ -96,8 +96,8 @@ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
|
|
|
96
96
|
` ${binary} delegate --wrfc "fix the failing tests in ~/work/project"`,
|
|
97
97
|
` ${binary} subscription providers`,
|
|
98
98
|
` ${binary} subscription login openai start --open`,
|
|
99
|
-
` ${binary}
|
|
100
|
-
` ${binary}
|
|
99
|
+
` ${binary} pair`,
|
|
100
|
+
` ${binary} routines list`,
|
|
101
101
|
].join('\n');
|
|
102
102
|
}
|
|
103
103
|
|
|
@@ -117,7 +117,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
117
117
|
run: {
|
|
118
118
|
usage: ['run [prompt] [--output text|json|stream-json]', 'exec [prompt]'],
|
|
119
119
|
summary: 'Run a single non-interactive agent turn and write the result to stdout.',
|
|
120
|
-
examples: ['run "summarize the current project"', 'run --output json "list risks"', 'exec --output stream-json "check
|
|
120
|
+
examples: ['run "summarize the current project"', 'run --output json "list risks"', 'exec --output stream-json "check runtime status"'],
|
|
121
121
|
},
|
|
122
122
|
onboarding: {
|
|
123
123
|
usage: ['onboarding', 'setup', 'onboarding status'],
|
|
@@ -126,7 +126,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
126
126
|
},
|
|
127
127
|
status: {
|
|
128
128
|
usage: ['status', 'status --json'],
|
|
129
|
-
summary: 'Print config, provider, auth,
|
|
129
|
+
summary: 'Print Agent config, provider, auth, runtime connection, and onboarding posture.',
|
|
130
130
|
examples: ['status', 'status --json'],
|
|
131
131
|
},
|
|
132
132
|
doctor: {
|
|
@@ -141,7 +141,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
141
141
|
},
|
|
142
142
|
profiles: {
|
|
143
143
|
usage: ['profiles list', 'profiles templates', 'profiles templates export <id> <path> --yes', 'profiles templates import <path> --yes', 'profiles show <name>', 'profiles create <name> [--template <id>] --yes', 'profiles delete <name> --yes', '--agent-profile <name>'],
|
|
144
|
-
summary: 'Create and inspect isolated Agent runtime profile homes, with starter templates for household, research, travel, operations, personal productivity, and local imported starters. A profile changes Agent-local config, sessions, memory, personas, skills, routines, and setup paths without changing the
|
|
144
|
+
summary: 'Create and inspect isolated Agent runtime profile homes, with starter templates for household, research, travel, operations, personal productivity, and local imported starters. A profile changes Agent-local config, sessions, memory, personas, skills, routines, and setup paths without changing the shared GoodVibes runtime.',
|
|
145
145
|
examples: ['profiles templates', 'profiles templates export research ./research-starter.json --yes', 'profiles templates import ./research-starter.json --yes', 'profiles create household --template household --yes', '--agent-profile household status'],
|
|
146
146
|
},
|
|
147
147
|
routines: {
|
|
@@ -154,7 +154,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
154
154
|
'routines receipt <receipt-id>',
|
|
155
155
|
'routines promote <id> (--cron <expr>|--every <interval>|--at <iso-time>) [--timezone <tz>] [--name <schedule-name>] [--provider <id>] [--model <model>] [--delivery-surface <surface[:route[:label]]>|--delivery-route <route[:label]>|--delivery-webhook <url>|--delivery-link <url>] [--disabled] --yes',
|
|
156
156
|
],
|
|
157
|
-
summary: 'Inspect Agent-local routines, review local promotion receipts, reconcile receipts against live
|
|
157
|
+
summary: 'Inspect Agent-local routines, review local promotion receipts, reconcile receipts against live external schedules, and explicitly promote a reviewed routine into a GoodVibes schedule. Without --yes, promote only prints the schedules.create preview.',
|
|
158
158
|
examples: [
|
|
159
159
|
'routines list',
|
|
160
160
|
'routines show daily-operations-sweep',
|
|
@@ -176,7 +176,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
176
176
|
},
|
|
177
177
|
compat: {
|
|
178
178
|
usage: ['compat', 'compat --json'],
|
|
179
|
-
summary: 'Inspect package SDK pin, live
|
|
179
|
+
summary: 'Inspect package SDK pin, live runtime version, and Agent-specific knowledge route readiness.',
|
|
180
180
|
examples: ['compat', 'compat --json'],
|
|
181
181
|
},
|
|
182
182
|
knowledge: {
|
|
@@ -234,17 +234,17 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
234
234
|
},
|
|
235
235
|
surfaces: {
|
|
236
236
|
usage: ['surfaces [list]', 'surfaces check', 'surfaces show <surfaceId>'],
|
|
237
|
-
summary: 'Inspect browser,
|
|
237
|
+
summary: 'Inspect advanced browser, channel, and runtime connection surfaces. Agent does not mutate runtime connection posture.',
|
|
238
238
|
examples: ['surfaces', 'surfaces check', 'surfaces show slack'],
|
|
239
239
|
},
|
|
240
240
|
listener: {
|
|
241
241
|
usage: ['listener test'],
|
|
242
|
-
summary: 'Check
|
|
242
|
+
summary: 'Check advanced inbound webhook readiness, network posture, auth, and enabled channel requirements.',
|
|
243
243
|
examples: ['listener test', 'listener test --json'],
|
|
244
244
|
},
|
|
245
245
|
'control-plane': {
|
|
246
246
|
usage: ['control-plane status'],
|
|
247
|
-
summary: 'Inspect
|
|
247
|
+
summary: 'Inspect advanced runtime API reachability, local auth, bootstrap credentials, and operator tokens.',
|
|
248
248
|
examples: ['control-plane status', 'control-plane status --json'],
|
|
249
249
|
},
|
|
250
250
|
bundle: {
|
|
@@ -264,7 +264,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
264
264
|
},
|
|
265
265
|
service: {
|
|
266
266
|
usage: ['service status', 'service check'],
|
|
267
|
-
summary: 'Inspect the externally owned GoodVibes
|
|
267
|
+
summary: 'Inspect the externally owned GoodVibes runtime service posture. Agent does not install, start, stop, restart, or uninstall the runtime.',
|
|
268
268
|
examples: ['service status', 'service check --json'],
|
|
269
269
|
},
|
|
270
270
|
completion: {
|
|
@@ -274,7 +274,7 @@ const COMMAND_HELP: Record<string, CommandHelp> = {
|
|
|
274
274
|
},
|
|
275
275
|
serve: {
|
|
276
276
|
usage: ['serve [--hostname <host>] [--port <port>]', 'daemon [--hostname <host>] [--port <port>]'],
|
|
277
|
-
summary: 'Unavailable in GoodVibes Agent. Agent connects to an already-running GoodVibes
|
|
277
|
+
summary: 'Unavailable in GoodVibes Agent. Agent connects to an already-running GoodVibes runtime owned by GoodVibes TUI/host tooling.',
|
|
278
278
|
examples: [],
|
|
279
279
|
},
|
|
280
280
|
remote: {
|