@pellux/goodvibes-tui 1.24.2 → 1.26.0
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 +32 -0
- package/README.md +1 -1
- package/bin/goodvibes-daemon +24 -0
- package/docs/foundation-artifacts/operator-contract.json +18234 -12253
- package/package.json +8 -7
- package/src/cli/help.ts +10 -0
- package/src/cli/redaction.ts +68 -3
- package/src/config/goodvibes-home.ts +149 -0
- package/src/config/secret-config.ts +64 -8
- package/src/core/turn-event-wiring.ts +7 -16
- package/src/core/workstream-notification.ts +69 -0
- package/src/daemon/cli.ts +62 -7
- package/src/daemon/handlers/credentials.ts +15 -5
- package/src/daemon/handlers/index.ts +7 -6
- package/src/daemon/send/channels.ts +200 -0
- package/src/daemon/send/command.ts +332 -0
- package/src/daemon/send/composition.ts +99 -0
- package/src/daemon/send/failure-text.ts +93 -0
- package/src/daemon/send/inert-text.ts +225 -0
- package/src/daemon/send/stdin.ts +24 -0
- package/src/input/commands/calendar-runtime.ts +245 -0
- package/src/input/commands/config.ts +68 -2
- package/src/input/commands/connection-status.ts +258 -0
- package/src/input/commands/local-provider-runtime.ts +9 -1
- package/src/input/commands/mail-runtime.ts +267 -0
- package/src/input/commands/operator-runtime.ts +6 -1
- package/src/input/commands/payment-card-intake.ts +200 -0
- package/src/input/commands/profile-render.ts +250 -0
- package/src/input/commands/profile-runtime.ts +362 -0
- package/src/input/commands/profile-types.ts +381 -0
- package/src/input/commands/review-runtime.ts +13 -1
- package/src/input/commands.ts +11 -0
- package/src/input/composer-editor.ts +4 -0
- package/src/input/onboarding/onboarding-wizard-apply.ts +13 -1
- package/src/input/payments-config.ts +167 -0
- package/src/input/provider-key-intake.ts +10 -2
- package/src/input/settings-modal-commit.ts +146 -0
- package/src/input/settings-modal-connections.ts +102 -0
- package/src/input/settings-modal-data.ts +30 -0
- package/src/input/settings-modal-reset.ts +6 -2
- package/src/input/settings-modal-secrets.ts +9 -2
- package/src/input/settings-modal-types.ts +19 -3
- package/src/input/settings-modal.ts +54 -107
- package/src/main.ts +7 -2
- package/src/panels/modals/marketplace-modal.ts +5 -0
- package/src/panels/modals/skills-modal.ts +5 -0
- package/src/renderer/settings-modal-connections.ts +63 -0
- package/src/renderer/settings-modal-helpers.ts +6 -0
- package/src/renderer/settings-modal.ts +21 -1
- package/src/runtime/bootstrap-core.ts +1 -1
- package/src/runtime/bootstrap.ts +2 -2
- package/src/runtime/context.ts +9 -0
- package/src/runtime/credential-composition.ts +54 -0
- package/src/runtime/daemon-handler-composition.ts +0 -4
- package/src/runtime/install-self-check-startup.ts +23 -0
- package/src/runtime/mail-composition.ts +65 -0
- package/src/runtime/onboarding/types.ts +6 -1
- package/src/runtime/path-shadow-startup.ts +243 -0
- package/src/runtime/path-shadow.ts +418 -0
- package/src/runtime/reachability-notice.ts +100 -0
- package/src/runtime/runtime-services-types.ts +243 -0
- package/src/runtime/services.ts +30 -224
- package/src/shell/ui-openers.ts +7 -0
- package/src/verification/verification-ledger.ts +158 -0
- package/src/version.ts +1 -1
- package/src/daemon/handlers/calendar/caldav-client.ts +0 -662
- package/src/daemon/handlers/calendar/ics.ts +0 -556
- package/src/daemon/handlers/calendar/index.ts +0 -316
- package/src/daemon/handlers/email/config.ts +0 -164
- package/src/daemon/handlers/email/imap-connector.ts +0 -441
- package/src/daemon/handlers/email/imap-parsing.ts +0 -499
- package/src/daemon/handlers/email/index.ts +0 -43
- package/src/daemon/handlers/email/read-handlers.ts +0 -80
- package/src/daemon/handlers/email/runtime.ts +0 -140
- package/src/daemon/handlers/email/smtp-connector.ts +0 -557
- package/src/daemon/handlers/email/validation.ts +0 -147
- package/src/daemon/handlers/email/write-handlers.ts +0 -133
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,38 @@ All notable changes to GoodVibes TUI.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.26.0] - 2026-07-29
|
|
8
|
+
|
|
9
|
+
### Changes
|
|
10
|
+
|
|
11
|
+
- Added: a payment card on file for daemon-initiated purchases, entered through /payments card with concealed input. Card material is secret-tier and never rendered or written in plaintext, and the CVV can be stored or requested at purchase time.
|
|
12
|
+
- Added: /profile — what the platform knows about you, kept as one Markdown file you can open and edit by hand at any time. Read the whole thing, trace where any recorded line came from, or forget a single field.
|
|
13
|
+
- Added: goodvibes-daemon send — put a message on a channel straight from the daemon, including --channel telegram, with the message taken from an argument or from stdin.
|
|
14
|
+
- Added: the installer now proves the install you get is the install you reach, and says so when something earlier on your PATH would shadow it.
|
|
15
|
+
- Fixed: a credential configured on a surface now goes to the tier the daemon actually reads. Pairing a Slack bot token or entering a payment card used to report success while the value sat where the daemon never looks.
|
|
16
|
+
- Fixed: inbound webhook surfaces authenticate again. A credential moved into the secret store left a reference behind that the ingress path compared literally, so a correctly configured surface refused every incoming request.
|
|
17
|
+
- Fixed: support bundles no longer carry card material or mailbox passwords in the clear.
|
|
18
|
+
- Fixed: a desktop notification about stopped work now says what stopped and why, in words, instead of naming internal machinery and an identifier you cannot act on.
|
|
19
|
+
- Fixed: test scratch directories no longer accumulate in the system temp directory. The cleanup they relied on never ran at all, which quietly exhausted one host's free inodes.
|
|
20
|
+
|
|
21
|
+
## [1.25.0] - 2026-07-27
|
|
22
|
+
|
|
23
|
+
### Changes
|
|
24
|
+
|
|
25
|
+
- Mail and calendar are surfaces here now: `/mail` and `/calendar`, a Connections category in settings, and sending behind `--confirm`.
|
|
26
|
+
- The daemon this package ships stops carrying its own CalDAV and IMAP/SMTP handlers and lets the platform serve `calendar.*` and `email.*`. Both implementations were bound to the same descriptor ids and the local ones registered later, so they were the ones answering — two implementations behind one path, which is the drift the move exists to end. Nothing was deleted until the platform could do it: generic CalDAV, both spellings of the mail settings with their fallbacks, and address-digested logging were all ported first.
|
|
27
|
+
- The Connections category shows what mail and calendar are actually doing, and never guesses. A row starts as "checking" and only ever changes to something the daemon confirmed; an unconfigured account reports needs-setup naming the exact keys to set, and a daemon that does not serve the surface at all reports unreachable instead. Those two are kept apart deliberately: telling someone to connect an account when the daemon cannot serve mail at all would be a wasted afternoon.
|
|
28
|
+
- Setting a mail or calendar password now works from here. The platform declares the whole mail and CalDAV connection as daemon-owned, so `/secrets set` is relocated into the daemon's own tier rather than filed in this client's store where the daemon never looked. The old guidance said to put it in the daemon's environment and restart, because that was the only thing that actually reached it; that is no longer necessary and the guidance says so.
|
|
29
|
+
|
|
30
|
+
### Fixes
|
|
31
|
+
|
|
32
|
+
- `GOODVIBES_HOME` has one meaning and one reader. The client CLI now honours the same home redirection the daemon already did, and an architecture rule covers `scripts/` so a new entry point cannot quietly read it a second way.
|
|
33
|
+
- `--daemon-home` / `GOODVIBES_DAEMON_HOME` reaches the credential store, not just the identity directory. Without it a daemon told to run out of a temp tree still read the real home's daemon secrets, so an "isolated" test daemon held live credentials.
|
|
34
|
+
- A daemon started with an overridden home never adopts the machine's service unit. One did: launched from a scratchpad, it found the unit not running, wrote its own scratchpad command line into the systemd user unit and exited, and systemd then supervised the throwaway as the machine's daemon for five hours while it read real credentials and long-polled a real bot. The check runs before the service-enabled setting deliberately — that setting is client-owned and resolves against the real home, so a test tree's own opt-out was written and never read, and isolation that depends on the isolated process reading its own settings file is not isolation.
|
|
35
|
+
- The review pane declares itself an explicit user request, which is honest there and only there: that path runs because a person is looking at a hunk and pressed a key. It is what lets a confirmation-gated verb tell an authorized action apart from one initiated by content, so scheduled work, triggers and channel-driven work deliberately do not set it.
|
|
36
|
+
- The daemon launcher now says, in the file, that it prefers a prebuilt binary over this source tree. A route added to source answers 404 and every explanation reached for is wrong, because the process answering never contained the code. It cost a round several hours.
|
|
37
|
+
|
|
38
|
+
|
|
7
39
|
## [1.24.2] - 2026-07-27
|
|
8
40
|
|
|
9
41
|
### Changes
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
-
[](https://github.com/mgd34msu/goodvibes-tui)
|
|
6
6
|
|
|
7
7
|
GoodVibes is a terminal console for coding and operations work with an AI model. You run `goodvibes` in a project directory and get a full-screen terminal app where you talk to a model that can read and edit your files, run shell commands, search the web, and hand work off to background agents — asking your permission before anything that writes or executes. It talks to many model providers (OpenAI, Anthropic, Gemini, Bedrock, Copilot, OpenRouter and other OpenAI-compatible gateways, plus local servers like Ollama and LM Studio that it finds on startup), keeps its settings, sessions, and secrets on your own machine, and shows you the token count and running cost of every turn. Alongside the conversation, panels turn background work — running agents, git state, diffs, tokens, cost — into live control rooms.
|
|
8
8
|
|
package/bin/goodvibes-daemon
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
+
//
|
|
3
|
+
// ── READ THIS BEFORE DEV-TESTING DAEMON ROUTES THROUGH THIS SHIM ──────────
|
|
4
|
+
//
|
|
5
|
+
// This launcher prefers a PREBUILT binary over the source checkout. On a
|
|
6
|
+
// machine with `vendor/goodvibes-daemon-<platform>` staged, `bun bin/goodvibes-daemon`
|
|
7
|
+
// runs THAT binary — compiled against the PUBLISHED SDK — not the source in
|
|
8
|
+
// this repo and not whatever `sdk-dev link` overlaid into node_modules.
|
|
9
|
+
//
|
|
10
|
+
// The consequence is quiet and expensive: a route you just added returns 404
|
|
11
|
+
// and every explanation you reach for is wrong, because the process answering
|
|
12
|
+
// never contained your code. It cost a round several hours.
|
|
13
|
+
//
|
|
14
|
+
// Two further traps in the same area:
|
|
15
|
+
// - Killing this shim does NOT kill the vendored child. `pkill -f` on the
|
|
16
|
+
// shim's command line leaves the daemon listening, so the "restart" you
|
|
17
|
+
// think you performed changed nothing.
|
|
18
|
+
// - `sdk-dev link` overlays node_modules only. A vendored binary ignores it
|
|
19
|
+
// completely.
|
|
20
|
+
//
|
|
21
|
+
// To exercise source (and a linked SDK), bypass this launcher:
|
|
22
|
+
// bun src/daemon/cli.ts --port <port> --hostname 127.0.0.1
|
|
23
|
+
// and isolate it with GOODVIBES_HOME / GOODVIBES_DAEMON_HOME / GOODVIBES_WORKING_DIR
|
|
24
|
+
// so it cannot read the machine's real credentials or claim its service unit.
|
|
25
|
+
//
|
|
2
26
|
import { dirname, join } from 'node:path';
|
|
3
27
|
import { fileURLToPath } from 'node:url';
|
|
4
28
|
import { spawnSync } from 'node:child_process';
|