vibora 1.15.0 → 2.1.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/README.md +54 -9
- package/bin/vibora.js +46 -16
- package/dist/assets/index-B5Ujeicd.js +118 -0
- package/dist/assets/index-DGzCy3yX.css +1 -0
- package/dist/index.html +2 -2
- package/dist/vibora-icon.png +0 -0
- package/drizzle/0008_loose_killmonger.sql +1 -0
- package/drizzle/meta/0008_snapshot.json +507 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/server/index.js +843 -364
- package/dist/assets/index-BWackAUX.css +0 -1
- package/dist/assets/index-fLTPOL0t.js +0 -118
package/README.md
CHANGED
|
@@ -14,9 +14,28 @@ The Vibe Engineer's Cockpit. A terminal-first tool for orchestrating AI coding a
|
|
|
14
14
|
|
|
15
15
|
## Quick Start
|
|
16
16
|
|
|
17
|
-
Requires [
|
|
17
|
+
Requires [Bun](https://bun.sh/) and [Claude Code](https://claude.ai/code).
|
|
18
18
|
|
|
19
|
-
###
|
|
19
|
+
### Desktop App (Recommended)
|
|
20
|
+
|
|
21
|
+
Download the latest release for your platform from [GitHub Releases](https://github.com/knowsuchagency/vibora/releases/latest):
|
|
22
|
+
|
|
23
|
+
- **macOS Apple Silicon**: `Vibora-X.X.X-macos-arm64.dmg`
|
|
24
|
+
- **macOS Intel**: `Vibora-X.X.X-macos-x64.dmg`
|
|
25
|
+
- **Linux**: `Vibora-X.X.X-linux-x64.AppImage`
|
|
26
|
+
|
|
27
|
+
The desktop app bundles everything—just install and run. It will:
|
|
28
|
+
- Start the Vibora server automatically
|
|
29
|
+
- Install the Claude Code plugin
|
|
30
|
+
- Check for updates on startup
|
|
31
|
+
|
|
32
|
+
> **macOS note**: On first launch, right-click the app and select "Open" to bypass Gatekeeper.
|
|
33
|
+
|
|
34
|
+
### Web Application (Alternative)
|
|
35
|
+
|
|
36
|
+
Run Vibora as a web server if you prefer browser access or need remote server deployment.
|
|
37
|
+
|
|
38
|
+
#### Install via curl
|
|
20
39
|
|
|
21
40
|
```bash
|
|
22
41
|
curl -fsSL https://raw.githubusercontent.com/knowsuchagency/vibora/main/install.sh | bash
|
|
@@ -24,7 +43,7 @@ curl -fsSL https://raw.githubusercontent.com/knowsuchagency/vibora/main/install.
|
|
|
24
43
|
|
|
25
44
|
This installs vibora, the Claude Code plugin, and starts the server.
|
|
26
45
|
|
|
27
|
-
|
|
46
|
+
#### Install via npm
|
|
28
47
|
|
|
29
48
|
```bash
|
|
30
49
|
npx vibora@latest up
|
|
@@ -37,7 +56,33 @@ claude plugin marketplace add knowsuchagency/vibora
|
|
|
37
56
|
claude plugin install vibora@vibora --scope user
|
|
38
57
|
```
|
|
39
58
|
|
|
40
|
-
|
|
59
|
+
Open http://localhost:7777 in your browser.
|
|
60
|
+
|
|
61
|
+
### Remote Server Setup
|
|
62
|
+
|
|
63
|
+
Run the backend on a remote server and connect from the desktop app or browser:
|
|
64
|
+
|
|
65
|
+
1. **On the remote server:**
|
|
66
|
+
```bash
|
|
67
|
+
# Install and start
|
|
68
|
+
npx vibora@latest up
|
|
69
|
+
|
|
70
|
+
# Configure for remote access
|
|
71
|
+
vibora config set remoteHost your-server.example.com
|
|
72
|
+
vibora config set basicAuthUsername admin
|
|
73
|
+
vibora config set basicAuthPassword your-secure-password
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
2. **Connect from desktop app:**
|
|
77
|
+
- Launch the app
|
|
78
|
+
- Click "Connect to Remote" (if local server not found)
|
|
79
|
+
- Enter the server URL: `your-server.example.com:7777`
|
|
80
|
+
- Enter credentials when prompted
|
|
81
|
+
|
|
82
|
+
3. **Or access via browser:**
|
|
83
|
+
Open `http://your-server.example.com:7777`
|
|
84
|
+
|
|
85
|
+
### Server Commands (Web Application)
|
|
41
86
|
|
|
42
87
|
```bash
|
|
43
88
|
vibora up # Start server daemon
|
|
@@ -45,8 +90,6 @@ vibora down # Stop the server
|
|
|
45
90
|
vibora status # Check if running
|
|
46
91
|
```
|
|
47
92
|
|
|
48
|
-
Open http://localhost:3333 in your browser.
|
|
49
|
-
|
|
50
93
|
## Configuration
|
|
51
94
|
|
|
52
95
|
Settings are stored in `.vibora/settings.json`. The vibora directory is resolved in this order:
|
|
@@ -57,9 +100,9 @@ Settings are stored in `.vibora/settings.json`. The vibora directory is resolved
|
|
|
57
100
|
|
|
58
101
|
| Setting | Env Var | Default |
|
|
59
102
|
|---------|---------|---------|
|
|
60
|
-
| port | `PORT` |
|
|
103
|
+
| port | `PORT` | 7777 |
|
|
61
104
|
| defaultGitReposDir | `VIBORA_GIT_REPOS_DIR` | ~ |
|
|
62
|
-
|
|
|
105
|
+
| remoteHost | `VIBORA_REMOTE_HOST` | (empty) |
|
|
63
106
|
| sshPort | `VIBORA_SSH_PORT` | 22 |
|
|
64
107
|
| basicAuthUsername | `VIBORA_BASIC_AUTH_USERNAME` | null |
|
|
65
108
|
| basicAuthPassword | `VIBORA_BASIC_AUTH_PASSWORD` | null |
|
|
@@ -169,7 +212,7 @@ vibora notify <title> [message] # Send a notification to all enabled channels
|
|
|
169
212
|
### Global Options
|
|
170
213
|
|
|
171
214
|
```bash
|
|
172
|
-
--port=<port> # Server port (default:
|
|
215
|
+
--port=<port> # Server port (default: 7777)
|
|
173
216
|
--url=<url> # Override full server URL
|
|
174
217
|
--pretty # Pretty-print JSON output
|
|
175
218
|
```
|
|
@@ -189,3 +232,5 @@ See [DEVELOPMENT.md](DEVELOPMENT.md) for development setup, architecture, and co
|
|
|
189
232
|
## License
|
|
190
233
|
|
|
191
234
|
[PolyForm Shield 1.0.0](LICENSE)
|
|
235
|
+
|
|
236
|
+
**In plain English:** You can use Vibora for any purpose—personal or commercial. KNOWSUCHAGENCY CORP has no claim over the software you build using Vibora. What's prohibited is reselling or redistributing Vibora itself for profit. The software is provided as-is with no warranty.
|
package/bin/vibora.js
CHANGED
|
@@ -5,6 +5,35 @@
|
|
|
5
5
|
import { existsSync, readFileSync } from "fs";
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { homedir } from "os";
|
|
8
|
+
var DEFAULT_PORT = 7777;
|
|
9
|
+
function getPortFromSettings(settings) {
|
|
10
|
+
if (!settings)
|
|
11
|
+
return null;
|
|
12
|
+
if (settings.server?.port) {
|
|
13
|
+
return settings.server.port;
|
|
14
|
+
}
|
|
15
|
+
if (settings.port) {
|
|
16
|
+
return settings.port;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
function getAuthFromSettings(settings) {
|
|
21
|
+
if (!settings)
|
|
22
|
+
return null;
|
|
23
|
+
if (settings.authentication?.username && settings.authentication?.password) {
|
|
24
|
+
return {
|
|
25
|
+
username: settings.authentication.username,
|
|
26
|
+
password: settings.authentication.password
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (settings.basicAuthUsername && settings.basicAuthPassword) {
|
|
30
|
+
return {
|
|
31
|
+
username: settings.basicAuthUsername,
|
|
32
|
+
password: settings.basicAuthPassword
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
8
37
|
function expandPath(p) {
|
|
9
38
|
if (p.startsWith("~/")) {
|
|
10
39
|
return join(homedir(), p.slice(2));
|
|
@@ -33,21 +62,24 @@ function discoverServerUrl(urlOverride, portOverride) {
|
|
|
33
62
|
if (process.env.VIBORA_DIR) {
|
|
34
63
|
const viboraDirSettings = join(expandPath(process.env.VIBORA_DIR), "settings.json");
|
|
35
64
|
const settings = readSettingsFile(viboraDirSettings);
|
|
36
|
-
|
|
37
|
-
|
|
65
|
+
const port = getPortFromSettings(settings);
|
|
66
|
+
if (port) {
|
|
67
|
+
return `http://localhost:${port}`;
|
|
38
68
|
}
|
|
39
69
|
}
|
|
40
70
|
const cwdSettings = join(process.cwd(), ".vibora", "settings.json");
|
|
41
71
|
const localSettings = readSettingsFile(cwdSettings);
|
|
42
|
-
|
|
43
|
-
|
|
72
|
+
const localPort = getPortFromSettings(localSettings);
|
|
73
|
+
if (localPort) {
|
|
74
|
+
return `http://localhost:${localPort}`;
|
|
44
75
|
}
|
|
45
76
|
const globalSettings = join(homedir(), ".vibora", "settings.json");
|
|
46
77
|
const homeSettings = readSettingsFile(globalSettings);
|
|
47
|
-
|
|
48
|
-
|
|
78
|
+
const homePort = getPortFromSettings(homeSettings);
|
|
79
|
+
if (homePort) {
|
|
80
|
+
return `http://localhost:${homePort}`;
|
|
49
81
|
}
|
|
50
|
-
return
|
|
82
|
+
return `http://localhost:${DEFAULT_PORT}`;
|
|
51
83
|
}
|
|
52
84
|
function getViboraDir() {
|
|
53
85
|
if (process.env.VIBORA_DIR) {
|
|
@@ -67,11 +99,9 @@ function getAuthCredentials() {
|
|
|
67
99
|
].filter(Boolean);
|
|
68
100
|
for (const path of settingsPaths) {
|
|
69
101
|
const settings = readSettingsFile(path);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
password: settings.basicAuthPassword
|
|
74
|
-
};
|
|
102
|
+
const auth = getAuthFromSettings(settings);
|
|
103
|
+
if (auth) {
|
|
104
|
+
return auth;
|
|
75
105
|
}
|
|
76
106
|
}
|
|
77
107
|
return null;
|
|
@@ -509,7 +539,7 @@ function getPort(portOverride) {
|
|
|
509
539
|
if (!isNaN(port))
|
|
510
540
|
return port;
|
|
511
541
|
}
|
|
512
|
-
return
|
|
542
|
+
return 7777;
|
|
513
543
|
}
|
|
514
544
|
|
|
515
545
|
// cli/src/utils/prompt.ts
|
|
@@ -917,12 +947,12 @@ async function handleDevCommand(action, flags) {
|
|
|
917
947
|
if (!devMode.enabled) {
|
|
918
948
|
throw new CliError("DEVELOPER_MODE_REQUIRED", "Developer mode is not enabled. Set VIBORA_DEVELOPER=1 environment variable.", ExitCodes.INVALID_STATE);
|
|
919
949
|
}
|
|
920
|
-
output({ status: "restarting", message: "Triggering restart (build +
|
|
950
|
+
output({ status: "restarting", message: "Triggering restart (build + migrate + restart)..." });
|
|
921
951
|
const result = await client.restartVibora();
|
|
922
952
|
if (result.error) {
|
|
923
953
|
throw new CliError("RESTART_FAILED", result.error, ExitCodes.OPERATION_FAILED);
|
|
924
954
|
}
|
|
925
|
-
output({ status: "initiated", message: "Restart initiated. If build fails, old instance keeps running." });
|
|
955
|
+
output({ status: "initiated", message: "Restart initiated. If build or migration fails, old instance keeps running." });
|
|
926
956
|
break;
|
|
927
957
|
}
|
|
928
958
|
case "status": {
|
|
@@ -1027,7 +1057,7 @@ Commands:
|
|
|
1027
1057
|
dev status Check if developer mode is enabled
|
|
1028
1058
|
|
|
1029
1059
|
Global Options:
|
|
1030
|
-
--port=<port> Server port (default:
|
|
1060
|
+
--port=<port> Server port (default: 7777)
|
|
1031
1061
|
--url=<url> Override full server URL
|
|
1032
1062
|
--pretty Pretty-print JSON output
|
|
1033
1063
|
--version Show version
|