limbo-ai 1.22.0 → 1.22.1
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 +31 -0
- package/cli.js +26 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -58,10 +58,39 @@ npx limbo-ai@latest update # Pull latest image and restart
|
|
|
58
58
|
npx limbo-ai@latest status # Show container status
|
|
59
59
|
npx limbo-ai@latest logs # Tail container logs
|
|
60
60
|
npx limbo-ai@latest start --reconfigure # Change API keys or settings
|
|
61
|
+
npx limbo-ai@latest config # Configure optional features (voice, web-search)
|
|
61
62
|
```
|
|
62
63
|
|
|
63
64
|
---
|
|
64
65
|
|
|
66
|
+
## Optional Features
|
|
67
|
+
|
|
68
|
+
Limbo supports optional features that can be enabled during the setup wizard (step 7) or anytime via the CLI.
|
|
69
|
+
|
|
70
|
+
### Voice Messages
|
|
71
|
+
|
|
72
|
+
Transcribe Telegram voice notes using [Groq](https://groq.com) Whisper. Requires a Groq API key (`gsk_...`).
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
npx limbo-ai@latest config voice --enable --api-key gsk_xxx
|
|
76
|
+
npx limbo-ai@latest config voice --status
|
|
77
|
+
npx limbo-ai@latest config voice --disable
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Web Search
|
|
81
|
+
|
|
82
|
+
Give Limbo real-time web search via the [Brave Search API](https://brave.com/search/api/). Requires a Brave API key (`BSA...`).
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
npx limbo-ai@latest config web-search --enable --api-key BSAxxx
|
|
86
|
+
npx limbo-ai@latest config web-search --status
|
|
87
|
+
npx limbo-ai@latest config web-search --disable
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Both features store API keys as Docker secrets and toggle config sections in the container on restart.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
65
94
|
## Updating
|
|
66
95
|
|
|
67
96
|
```sh
|
|
@@ -124,6 +153,8 @@ Managed automatically by `npx limbo-ai start`, stored in `~/.limbo/.env`.
|
|
|
124
153
|
| `MODEL_NAME` | no | `claude-opus-4-6` | Model name (e.g. `claude-opus-4-6`, `claude-sonnet-4-6`, `gpt-5.4`) |
|
|
125
154
|
| `TELEGRAM_ENABLED` | no | `false` | Enable Telegram bot integration |
|
|
126
155
|
| `TELEGRAM_BOT_TOKEN` | no | — | Telegram bot token (required if `TELEGRAM_ENABLED=true`) |
|
|
156
|
+
| `VOICE_ENABLED` | no | `false` | Enable voice transcription (requires Groq API key as Docker secret) |
|
|
157
|
+
| `WEB_SEARCH_ENABLED` | no | `false` | Enable web search (requires Brave API key as Docker secret) |
|
|
127
158
|
|
|
128
159
|
> \* API keys are required only for `AUTH_MODE=api-key`. Subscription auth uses ZeroClaw auth profiles instead.
|
|
129
160
|
|
package/cli.js
CHANGED
|
@@ -1067,7 +1067,7 @@ function teardownSetupTunnel(tunnel) {
|
|
|
1067
1067
|
function installGlobalAlias() {
|
|
1068
1068
|
// Create a `limbo` shell wrapper so users don't have to type `npx limbo-ai` every time.
|
|
1069
1069
|
// Tries /usr/local/bin first (macOS, Linux with sudo), falls back to ~/.local/bin (no sudo).
|
|
1070
|
-
const wrapper = '#!/bin/sh\nexec npx limbo-ai "$@"\n';
|
|
1070
|
+
const wrapper = '#!/bin/sh\nexec npx limbo-ai@latest "$@"\n';
|
|
1071
1071
|
const candidates = [
|
|
1072
1072
|
path.join(os.homedir(), '.local', 'bin', 'limbo'),
|
|
1073
1073
|
'/usr/local/bin/limbo',
|
|
@@ -1075,10 +1075,10 @@ function installGlobalAlias() {
|
|
|
1075
1075
|
|
|
1076
1076
|
for (const target of candidates) {
|
|
1077
1077
|
try {
|
|
1078
|
-
// Skip if already installed and current
|
|
1078
|
+
// Skip if already installed and current (must include @latest)
|
|
1079
1079
|
if (fs.existsSync(target)) {
|
|
1080
1080
|
const existing = fs.readFileSync(target, 'utf8');
|
|
1081
|
-
if (existing.includes('limbo-ai')) return;
|
|
1081
|
+
if (existing.includes('limbo-ai@latest')) return;
|
|
1082
1082
|
}
|
|
1083
1083
|
const dir = path.dirname(target);
|
|
1084
1084
|
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
@@ -1670,9 +1670,32 @@ function cmdLogs() {
|
|
|
1670
1670
|
run('docker compose logs -f');
|
|
1671
1671
|
}
|
|
1672
1672
|
|
|
1673
|
+
function selfUpdateCli() {
|
|
1674
|
+
const pkg = require('./package.json');
|
|
1675
|
+
try {
|
|
1676
|
+
const latest = execSync('npm view limbo-ai version', { encoding: 'utf8', timeout: 10000 }).trim();
|
|
1677
|
+
if (!latest || latest === pkg.version) return;
|
|
1678
|
+
const cur = pkg.version.split('.').map(Number);
|
|
1679
|
+
const lat = latest.split('.').map(Number);
|
|
1680
|
+
const isNewer = lat[0] > cur[0] || (lat[0] === cur[0] && lat[1] > cur[1]) ||
|
|
1681
|
+
(lat[0] === cur[0] && lat[1] === cur[1] && lat[2] > cur[2]);
|
|
1682
|
+
if (!isNewer) return;
|
|
1683
|
+
|
|
1684
|
+
log(`Updating CLI: ${pkg.version} → ${latest}...`);
|
|
1685
|
+
execSync('npm install -g limbo-ai@latest', { stdio: 'inherit', timeout: 60000 });
|
|
1686
|
+
ok(`CLI updated to ${latest}.`);
|
|
1687
|
+
} catch {
|
|
1688
|
+
warn('Could not self-update CLI. Run: npm install -g limbo-ai@latest');
|
|
1689
|
+
}
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1673
1692
|
function cmdUpdate() {
|
|
1674
1693
|
if (!fs.existsSync(COMPOSE_FILE)) die(t('en', 'installMissing'));
|
|
1675
1694
|
|
|
1695
|
+
// Self-update the CLI if installed globally
|
|
1696
|
+
const isGlobal = !process.argv[1].includes('npx') && !process.argv[1].includes('node_modules/.cache');
|
|
1697
|
+
if (isGlobal) selfUpdateCli();
|
|
1698
|
+
|
|
1676
1699
|
// Patch image tag to :latest in existing compose files (handles upgrades from pinned tags)
|
|
1677
1700
|
let compose = fs.readFileSync(COMPOSE_FILE, 'utf8');
|
|
1678
1701
|
const patched = compose.replace(
|