@dinglebear/labby 1.13.3 → 1.17.3
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/README.md +139 -41
- package/lib/platform.js +11 -1
- package/package.json +1 -1
- package/scripts/check-package.js +1 -1
package/README.md
CHANGED
|
@@ -52,13 +52,11 @@ Labby is centered on the current gateway/operator surface:
|
|
|
52
52
|
feature-matrix artifacts under
|
|
53
53
|
[docs/generated](./docs/generated/README.md).
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
no CLI commands. Use the generated catalogs below for the current surface
|
|
61
|
-
instead of copying command or action lists by hand.
|
|
55
|
+
Use the generated service, action, and CLI catalogs below for the complete
|
|
56
|
+
current product surface instead of copying inventories into hand-written
|
|
57
|
+
documentation. Standalone ACP chat, Marketplace/MCP Registry browser, Fleet,
|
|
58
|
+
Deploy, and Stash products remain retired; bounded provider-backed discovery
|
|
59
|
+
through the `artifacts` control-plane service does not restore those products.
|
|
62
60
|
|
|
63
61
|
## Quick Start
|
|
64
62
|
|
|
@@ -92,7 +90,17 @@ the [stdio MCP proxy guide](./docs/guides/STDIO_MCP_PROXY.md).
|
|
|
92
90
|
Linux/macOS:
|
|
93
91
|
|
|
94
92
|
```bash
|
|
95
|
-
|
|
93
|
+
version=vX.Y.Z
|
|
94
|
+
base="https://github.com/dinglebear-ai/labby/releases/download/$version"
|
|
95
|
+
curl -fSLO "$base/labby-install.sh"
|
|
96
|
+
curl -fSLO "$base/labby-install.sh.sha256"
|
|
97
|
+
gh attestation verify labby-install.sh \
|
|
98
|
+
--repo dinglebear-ai/labby \
|
|
99
|
+
--signer-workflow dinglebear-ai/labby/.github/workflows/release.yml \
|
|
100
|
+
--source-ref "refs/tags/$version" \
|
|
101
|
+
--deny-self-hosted-runners
|
|
102
|
+
shasum -a 256 -c labby-install.sh.sha256
|
|
103
|
+
LABBY_INSTALL_VERSION="$version" sh ./labby-install.sh
|
|
96
104
|
labby setup
|
|
97
105
|
labby serve --host 127.0.0.1 --port 8765
|
|
98
106
|
```
|
|
@@ -106,19 +114,90 @@ npx -y @dinglebear/labby mcp
|
|
|
106
114
|
Windows PowerShell:
|
|
107
115
|
|
|
108
116
|
```powershell
|
|
109
|
-
|
|
117
|
+
$Version = "vX.Y.Z"
|
|
118
|
+
$Base = "https://github.com/dinglebear-ai/labby/releases/download/$Version"
|
|
119
|
+
Invoke-WebRequest "$Base/labby-install.ps1" -OutFile labby-install.ps1
|
|
120
|
+
Invoke-WebRequest "$Base/labby-install.ps1.sha256" -OutFile labby-install.ps1.sha256
|
|
121
|
+
gh attestation verify labby-install.ps1 `
|
|
122
|
+
--repo dinglebear-ai/labby `
|
|
123
|
+
--signer-workflow dinglebear-ai/labby/.github/workflows/release.yml `
|
|
124
|
+
--source-ref "refs/tags/$Version" `
|
|
125
|
+
--deny-self-hosted-runners
|
|
126
|
+
$Expected = ((Get-Content labby-install.ps1.sha256) -split '\s+')[0]
|
|
127
|
+
if ((Get-FileHash labby-install.ps1 -Algorithm SHA256).Hash.ToLower() -ne $Expected) { throw "installer digest mismatch" }
|
|
128
|
+
$env:LABBY_INSTALL_VERSION = $Version
|
|
129
|
+
& ./labby-install.ps1
|
|
110
130
|
labby setup
|
|
111
131
|
labby serve --host 127.0.0.1 --port 8765
|
|
112
132
|
```
|
|
113
133
|
|
|
114
|
-
The install scripts
|
|
115
|
-
|
|
134
|
+
The separately downloaded and attested install scripts resolve an immutable GitHub Release containing the current
|
|
135
|
+
platform asset, require `gh`, verify the archive's attestation against the
|
|
136
|
+
Labby repository, `release.yml`, exact tag, and hosted-runner policy, verify its checksum, and install `labby` onto the
|
|
137
|
+
user PATH. They do **not** perform
|
|
116
138
|
operator provisioning or environment setup. The scripts only install the binary
|
|
117
139
|
(from a release or fallback source build); all first-run provisioning is handled
|
|
118
140
|
inside `labby` via `labby serve` bootstrap and `labby setup`.
|
|
119
141
|
|
|
120
142
|
Override install behavior with `LABBY_INSTALL_DIR`, `LABBY_INSTALL_VERSION`, or
|
|
121
|
-
`LABBY_INSTALL_REPO`.
|
|
143
|
+
`LABBY_INSTALL_REPO`. Source fallback is off by default. Opt in with
|
|
144
|
+
`LABBY_ALLOW_SOURCE_FALLBACK=1`; a pinned `LABBY_INSTALL_VERSION` is passed to
|
|
145
|
+
Cargo as the exact tag instead of silently building the default branch.
|
|
146
|
+
|
|
147
|
+
Each successful install retains the verified binary by SHA-256 plus an
|
|
148
|
+
owner-only receipt beneath `<install-dir>/.labby-install/`. At least the prior
|
|
149
|
+
verified artifact remains available when distribution is unavailable. Restore
|
|
150
|
+
it without downloading or changing `$LABBY_HOME`:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
LABBY_INSTALL_ROLLBACK=1 sh ./labby-install.sh
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```powershell
|
|
157
|
+
$env:LABBY_INSTALL_ROLLBACK = '1'
|
|
158
|
+
& .\labby-install.ps1
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Rollback switches only the installed executable and receipt. It does not
|
|
162
|
+
downgrade or delete configuration, credentials, databases, or other durable
|
|
163
|
+
state. Inspect the receipt at `<install-dir>/.labby-install/receipt` on Unix or
|
|
164
|
+
`receipt.json` on Windows.
|
|
165
|
+
|
|
166
|
+
Release qualification can install an already-downloaded candidate without
|
|
167
|
+
network or source fallback by setting `LABBY_INSTALL_LOCAL_BINARY` and its exact
|
|
168
|
+
lowercase `LABBY_INSTALL_LOCAL_SHA256`. The installer copies that input once to
|
|
169
|
+
private staging, verifies the staged bytes, and activates those same bytes. It
|
|
170
|
+
also rehashes every existing cached artifact before reuse. Before changing the
|
|
171
|
+
binary or either receipt, the installer writes a recovery journal beneath
|
|
172
|
+
`.labby-install/`; a later invocation restores the complete pre-install
|
|
173
|
+
snapshot when it finds an interrupted activation. If restoration fails, the
|
|
174
|
+
installer stops and retains the journal for diagnosis.
|
|
175
|
+
|
|
176
|
+
### Automatic updates on macOS
|
|
177
|
+
|
|
178
|
+
For a persistent macOS server, enable daily updates in the existing server job:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
LABBY_SERVICE_AUTO_UPDATE=1 bash scripts/install-macos-service.sh install
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
This runs `labby serve --auto-update` under launchd and removes the separate
|
|
185
|
+
updater job after the server passes its health check. See the
|
|
186
|
+
[macOS setup instructions](docs/services/SETUP.md#macos-server-and-automatic-updates).
|
|
187
|
+
|
|
188
|
+
For an installation without a persistent server, use the standalone daily job:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
labby update --auto-update enable
|
|
192
|
+
labby update --auto-update status
|
|
193
|
+
labby update --auto-update disable
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Both modes require Apple Silicon and GitHub CLI (`gh`) for release attestation
|
|
197
|
+
verification. They skip drafts, prereleases, missing platform assets, and versions
|
|
198
|
+
equal to or older than the installed binary. The installer verifies attestations
|
|
199
|
+
and checksums before atomic replacement. No separate language runtime is required.
|
|
200
|
+
Use `labby update --automatic --dry-run` to check without installing.
|
|
122
201
|
|
|
123
202
|
### Build From Source
|
|
124
203
|
|
|
@@ -152,14 +231,21 @@ just macos-service-status
|
|
|
152
231
|
```
|
|
153
232
|
|
|
154
233
|
This installs a `launchd` LaunchAgent that keeps Labby listening on
|
|
155
|
-
`127.0.0.1:8765`, restarts it after login or exit, and
|
|
156
|
-
`~/.labby
|
|
234
|
+
`127.0.0.1:8765`, restarts it after login or exit, and uses the stable absolute
|
|
235
|
+
`LABBY_HOME` (default `~/.labby`) as both working directory and durable
|
|
236
|
+
configuration root. It never persists the directory from which installation
|
|
237
|
+
was invoked. Logs default to the same root. Use `just macos-service-restart`
|
|
238
|
+
after changing service settings
|
|
157
239
|
or `just macos-service-uninstall` to remove it. The cross-platform
|
|
158
240
|
`just service-install`, `just service-status`, `just service-restart`, and
|
|
159
241
|
`just service-uninstall` bindings select launchd on macOS and systemd on
|
|
160
242
|
Linux. This is suitable for a Tailscale Serve/Funnel route whose OAuth
|
|
161
243
|
callback targets the local gateway.
|
|
162
244
|
|
|
245
|
+
When overriding the launchd paths, `LABBY_SERVICE_BIN`, `LABBY_STATE_DIR`, and
|
|
246
|
+
`LABBY_HOME` must all be absolute; relative paths fail before the plist or
|
|
247
|
+
service is changed.
|
|
248
|
+
|
|
163
249
|
### First Run
|
|
164
250
|
|
|
165
251
|
For loopback development, `labby serve` can bootstrap a missing bearer token for
|
|
@@ -176,7 +262,7 @@ Bootstrap writes these required `setup` keys if no env exists yet:
|
|
|
176
262
|
- `LABBY_MCP_HTTP_PORT=8765`
|
|
177
263
|
- `LABBY_AUTH_MODE=bearer`
|
|
178
264
|
|
|
179
|
-
It also enforces secure file creation via
|
|
265
|
+
It also enforces secure file creation via Labby's `env_merge` path (`0600` perms on
|
|
180
266
|
Unix) and then skips creating anything else until the web wizard runs.
|
|
181
267
|
|
|
182
268
|
For explicit setup:
|
|
@@ -223,7 +309,13 @@ labby mcp
|
|
|
223
309
|
`labby serve` starts the hosted HTTP runtime: `/v1` product APIs, `/mcp`
|
|
224
310
|
streamable HTTP MCP, auth routes, OAuth relay endpoints, and static Labby web
|
|
225
311
|
assets when an export is available. `labby mcp` is the stdio MCP entrypoint for
|
|
226
|
-
local MCP clients.
|
|
312
|
+
local MCP clients. A client configured to launch `labby mcp` does not need an
|
|
313
|
+
HTTP URL: when a `labby serve` daemon is reachable, the stdio process becomes a
|
|
314
|
+
transparent bridge to that daemon and uses its gateway configuration, upstream
|
|
315
|
+
connections, and OAuth state. If no daemon is found and no explicit target is
|
|
316
|
+
set, it starts a standalone local gateway instead. See the
|
|
317
|
+
[local bridge guide](./docs/surfaces/TRANSPORT.md#local-bridge-to-the-running-daemon)
|
|
318
|
+
for client configuration and `LABBY_SERVER_URL` fail-closed behavior.
|
|
227
319
|
|
|
228
320
|
### Manage Upstream MCP Gateways
|
|
229
321
|
|
|
@@ -284,7 +376,7 @@ labby snippets test my-snippet
|
|
|
284
376
|
```
|
|
285
377
|
|
|
286
378
|
Snippets are stored per-user under `$LABBY_HOME` and executed through the
|
|
287
|
-
gateway Code Mode runner, so they can reach exposed upstream tools but not
|
|
379
|
+
gateway Code Mode runner, so they can reach exposed upstream tools but not Labby
|
|
288
380
|
actions. The `snippets` service is gateway-gated: it is unavailable in builds
|
|
289
381
|
without the `gateway` feature.
|
|
290
382
|
|
|
@@ -311,7 +403,7 @@ severity found.
|
|
|
311
403
|
> from source, manifests, packaging, and CI — not merely feature-gated.
|
|
312
404
|
> `scripts/check-retired-features.sh` guards against reintroduction, and the
|
|
313
405
|
> historical designs are archived under
|
|
314
|
-
> [docs/
|
|
406
|
+
> [docs/archive/retired-labby](./docs/archive/retired-labby/). Plugin
|
|
315
407
|
> marketplace assets now live in the separate
|
|
316
408
|
> [dendrite](https://github.com/dinglebear-ai/dendrite) repo.
|
|
317
409
|
|
|
@@ -362,17 +454,13 @@ Configuration is split deliberately:
|
|
|
362
454
|
|
|
363
455
|
| Data | Location | Examples |
|
|
364
456
|
| --- | --- | --- |
|
|
365
|
-
| Secrets and endpoint values |
|
|
366
|
-
| Preferences |
|
|
367
|
-
|
|
368
|
-
`config.toml` is searched in this order:
|
|
369
|
-
|
|
370
|
-
1. `./config.toml`
|
|
371
|
-
2. `~/.labby/config.toml`
|
|
372
|
-
3. `~/.config/labby/config.toml`
|
|
457
|
+
| Secrets and endpoint values | `$LABBY_HOME/.env` | `LABBY_MCP_HTTP_TOKEN`, `LABBY_GOOGLE_CLIENT_SECRET`, upstream bearer token env values |
|
|
458
|
+
| Preferences | `$LABBY_HOME/config.toml` | transport, CORS, auth mode, workspace root, gateway spawn guard, and upstream behavior |
|
|
373
459
|
|
|
374
|
-
|
|
375
|
-
|
|
460
|
+
`LABBY_HOME` selects the one authoritative configuration and durable-state
|
|
461
|
+
root and must be absolute. It defaults to `~/.labby`; Labby does not implicitly
|
|
462
|
+
read CWD or XDG fallback files. Existing process environment values win over
|
|
463
|
+
values loaded from the selected `.env`. Runtime precedence is:
|
|
376
464
|
|
|
377
465
|
1. CLI flags
|
|
378
466
|
2. Environment variables
|
|
@@ -386,7 +474,9 @@ Useful environment variables:
|
|
|
386
474
|
| `LABBY_MCP_HTTP_TOKEN` | Static bearer token for protected admin/API/MCP routes. |
|
|
387
475
|
| `LABBY_AUTH_MODE` | `bearer` or `oauth`. |
|
|
388
476
|
| `LABBY_PUBLIC_URL` | Public base URL for OAuth metadata, issuer/audience, callbacks, and allowed-host derivation. |
|
|
389
|
-
| `
|
|
477
|
+
| `LABBY_AUTH_PROVIDER` | Inbound OAuth identity provider: `google` (stable) or `authelia` (open beta). |
|
|
478
|
+
| `LABBY_GOOGLE_CLIENT_ID` / `LABBY_GOOGLE_CLIENT_SECRET` | Google credentials when Google is selected. |
|
|
479
|
+
| `LABBY_AUTHELIA_ISSUER_URL` / `LABBY_AUTHELIA_CLIENT_ID` / `LABBY_AUTHELIA_CLIENT_SECRET` | Authelia OIDC configuration; see the pinned registration contract in the OAuth guide. |
|
|
390
480
|
| `LABBY_AUTH_ADMIN_EMAIL` | Bootstrap admin email; required in OAuth mode. |
|
|
391
481
|
| `LABBY_OAUTH_ENCRYPTION_KEY` | Base64 32-byte key required for encrypted upstream OAuth credentials. Rotation requires reauthorizing affected upstreams. |
|
|
392
482
|
| `LABBY_WEB_ASSETS_DIR` | Override static Labby export directory. |
|
|
@@ -396,8 +486,8 @@ Useful environment variables:
|
|
|
396
486
|
| `LABBY_ACTOR_KEY_SECRET` | Stable secret for redacted actor correlation in logs. |
|
|
397
487
|
| `LABBY_ADMIN_ENABLED` | Runtime opt-in for the `lab_admin` tool. |
|
|
398
488
|
|
|
399
|
-
Bearer auth is an operator/admin shortcut for
|
|
400
|
-
routes validate route-scoped
|
|
489
|
+
Bearer auth is an operator/admin shortcut for Labby routes. Public protected MCP
|
|
490
|
+
routes validate route-scoped Labby OAuth JWTs; do not treat `LABBY_MCP_HTTP_TOKEN` as
|
|
401
491
|
a public resource credential.
|
|
402
492
|
|
|
403
493
|
When driving the web UI with automation while OAuth is enabled, pass the bearer
|
|
@@ -533,20 +623,28 @@ recommended agent gateway runtime.
|
|
|
533
623
|
|
|
534
624
|
### Dev Container
|
|
535
625
|
|
|
536
|
-
The Compose stack
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
626
|
+
The development Compose stack mirrors the production process controls: a
|
|
627
|
+
read-only root filesystem, dropped capabilities, `no-new-privileges`, loopback
|
|
628
|
+
port binding, bounded logs, and named volumes for durable state and data. It
|
|
629
|
+
also bind-mounts the source repository read-only so locally built web assets are
|
|
630
|
+
visible without rebuilding the image. The clean-checkout defaults mount the
|
|
631
|
+
tracked, non-secret `config/config.example.toml` and `config/.env.example`.
|
|
632
|
+
Set `LABBY_CONFIG_FILE` and `LABBY_ENV_FILE` to select local runtime files;
|
|
633
|
+
Compose mounts both read-only at their canonical paths beneath `$LABBY_HOME`. Labby-owned runtime
|
|
634
|
+
state remains writable in the surrounding `labby-home` named volume. Startup logs and the
|
|
635
|
+
setup settings state report `/home/labby/.labby/config.toml` as the effective
|
|
636
|
+
source. The image installs pinned Claude,
|
|
637
|
+
Codex, and Gemini CLIs for stdio upstreams that invoke provider tools.
|
|
541
638
|
|
|
542
639
|
### Releases
|
|
543
640
|
|
|
544
641
|
Release Please maintains the version/changelog pull request and creates the
|
|
545
|
-
stable tag plus draft GitHub release when that pull request merges.
|
|
546
|
-
|
|
547
|
-
and Windows archives with checksums,
|
|
548
|
-
|
|
549
|
-
`server.json` metadata to the official MCP Registry.
|
|
642
|
+
stable tag plus draft GitHub release when that pull request merges. The stable
|
|
643
|
+
tag triggers the heavy GitHub-hosted candidate workflow. It builds Linux,
|
|
644
|
+
macOS, and Windows archives with checksums, builds and smokes the Incus image,
|
|
645
|
+
publishes the npm launcher, and publishes Labby's
|
|
646
|
+
`server.json` metadata to the official MCP Registry. Only after qualification
|
|
647
|
+
and publication succeed does the workflow promote the draft GitHub release.
|
|
550
648
|
|
|
551
649
|
### Plugin Setup
|
|
552
650
|
|
package/lib/platform.js
CHANGED
|
@@ -23,7 +23,17 @@ function targetFor(platform = process.platform, arch = process.arch) {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
if (platform === "darwin" && arch === "arm64") {
|
|
27
|
+
return {
|
|
28
|
+
asset: "lab-aarch64-apple-darwin.tar.gz",
|
|
29
|
+
binary: "labby",
|
|
30
|
+
archiveType: "tar.gz",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
throw new Error(
|
|
35
|
+
`Unsupported platform ${platform}/${arch}. Supported targets: linux/x64, darwin/arm64, win32/x64.`,
|
|
36
|
+
);
|
|
27
37
|
}
|
|
28
38
|
|
|
29
39
|
function releaseVersion(env = process.env) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dinglebear/labby",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.3",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"description": "Rust MCP gateway with Code Mode, authentication, setup, logs, CLI, HTTP API, and operator web UI.",
|
|
6
6
|
"homepage": "https://github.com/dinglebear-ai/labby#readme",
|