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 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 [Node.js](https://nodejs.org/) and [Claude Code](https://claude.ai/code).
17
+ Requires [Bun](https://bun.sh/) and [Claude Code](https://claude.ai/code).
18
18
 
19
- ### Install via curl (recommended)
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
- ### Install via npm
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
- ### Server Commands
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` | 3333 |
103
+ | port | `PORT` | 7777 |
61
104
  | defaultGitReposDir | `VIBORA_GIT_REPOS_DIR` | ~ |
62
- | hostname | `VIBORA_HOSTNAME` | (empty) |
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: 3333)
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
- if (settings?.port) {
37
- return `http://localhost:${settings.port}`;
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
- if (localSettings?.port) {
43
- return `http://localhost:${localSettings.port}`;
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
- if (homeSettings?.port) {
48
- return `http://localhost:${homeSettings.port}`;
78
+ const homePort = getPortFromSettings(homeSettings);
79
+ if (homePort) {
80
+ return `http://localhost:${homePort}`;
49
81
  }
50
- return "http://localhost:3333";
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
- if (settings?.basicAuthUsername && settings?.basicAuthPassword) {
71
- return {
72
- username: settings.basicAuthUsername,
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 3333;
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 + restart via systemd)..." });
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: 3333)
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