vibora 1.13.0 → 1.13.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 +87 -59
- package/bin/vibora.js +2 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,14 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
The Vibe Engineer's Cockpit. Vibora marries basic project management with actual software development by embedding terminals directly into the workflow.
|
|
7
6
|
|
|
8
|
-
Available in English and Chinese. Works with [z.ai](https://z.ai) for Claude Code proxy integration.
|
|
9
|
-
|
|
10
7
|
## Philosophy
|
|
11
8
|
|
|
12
|
-
- **
|
|
9
|
+
- **Claude Code first** — Built for developers who prefer working in the terminal with CLI agents. Vibora is designed with Claude Code in mind, though it works with other CLI agents (Codex, Gemini CLI, etc.). No abstraction layer, no wrapper APIs—agents run in terminals as-is.
|
|
13
10
|
- **Opinionated with few opinions** — Provides structure without dictating workflow.
|
|
14
11
|
- **Git worktree isolation** — Tasks create isolated git worktrees, with architecture supporting evolution toward more general task types.
|
|
15
12
|
|
|
@@ -21,113 +18,144 @@ Requires [Node.js](https://nodejs.org/). Run the latest vibora with a single com
|
|
|
21
18
|
npx vibora@latest up
|
|
22
19
|
```
|
|
23
20
|
|
|
24
|
-
This starts the
|
|
21
|
+
This starts the Vibora server as a daemon. Open http://localhost:3333 in your browser. The `up` command will help you install any missing dependencies.
|
|
25
22
|
|
|
26
23
|
```bash
|
|
27
24
|
npx vibora@latest down # Stop the server
|
|
28
25
|
npx vibora@latest status # Check if running
|
|
29
26
|
```
|
|
30
27
|
|
|
31
|
-
## Tech Stack
|
|
32
|
-
|
|
33
|
-
- **Frontend**: React 19, TanStack Router & Query, xterm.js, Tailwind CSS, shadcn/ui (v4 with baseui support)
|
|
34
|
-
- **Backend**: Hono.js on Bun, SQLite with Drizzle ORM, WebSocket for terminal I/O
|
|
35
|
-
|
|
36
28
|
## Configuration
|
|
37
29
|
|
|
38
|
-
Settings are stored in `.vibora/settings.json`.
|
|
30
|
+
Settings are stored in `.vibora/settings.json`. The vibora directory is resolved in this order:
|
|
31
|
+
|
|
32
|
+
1. `VIBORA_DIR` environment variable (explicit override)
|
|
33
|
+
2. `.vibora` in current working directory (per-worktree isolation)
|
|
34
|
+
3. `~/.vibora` (default)
|
|
39
35
|
|
|
40
36
|
| Setting | Env Var | Default |
|
|
41
37
|
|---------|---------|---------|
|
|
42
|
-
| (base directory) | `VIBORA_DIR` | .vibora in CWD or ~/.vibora |
|
|
43
38
|
| port | `PORT` | 3333 |
|
|
44
39
|
| defaultGitReposDir | `VIBORA_GIT_REPOS_DIR` | ~ |
|
|
45
40
|
| taskCreationCommand | `VIBORA_TASK_CREATION_COMMAND` | `claude --dangerously-skip-permissions` |
|
|
46
41
|
| hostname | `VIBORA_HOSTNAME` | (empty) |
|
|
47
42
|
| sshPort | `VIBORA_SSH_PORT` | 22 |
|
|
43
|
+
| basicAuthUsername | `VIBORA_BASIC_AUTH_USERNAME` | null |
|
|
44
|
+
| basicAuthPassword | `VIBORA_BASIC_AUTH_PASSWORD` | null |
|
|
48
45
|
| linearApiKey | `LINEAR_API_KEY` | null |
|
|
49
46
|
| githubPat | `GITHUB_PAT` | null |
|
|
47
|
+
| language | — | null (auto-detect) |
|
|
50
48
|
|
|
51
|
-
Notification settings (sound, Slack, Discord, Pushover) are configured via the Settings UI and stored in `settings.json`.
|
|
49
|
+
Notification settings (sound, Slack, Discord, Pushover) are configured via the Settings UI or CLI and stored in `settings.json`.
|
|
52
50
|
|
|
53
51
|
Precedence: environment variable → settings.json → default
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
### Prerequisites
|
|
58
|
-
|
|
59
|
-
- [mise](https://mise.jdx.dev/) for task running and tool management
|
|
60
|
-
- [Bun](https://bun.sh/) (installed automatically via mise)
|
|
53
|
+
### Linear Integration
|
|
61
54
|
|
|
62
|
-
|
|
55
|
+
Vibora can sync task status with Linear tickets. Configure `linearApiKey` in settings or set the `LINEAR_API_KEY` environment variable.
|
|
63
56
|
|
|
64
57
|
```bash
|
|
65
|
-
#
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
# Start both frontend and backend (recommended)
|
|
69
|
-
mise run dev
|
|
70
|
-
|
|
71
|
-
# Or run separately:
|
|
72
|
-
mise run server # Backend (port 3333, with auto-reload)
|
|
73
|
-
mise run client # Frontend (port 5173, proxies to backend)
|
|
58
|
+
# Link current task to a Linear ticket
|
|
59
|
+
vibora current-task linear https://linear.app/team/issue/TEAM-123
|
|
74
60
|
```
|
|
75
61
|
|
|
76
|
-
|
|
62
|
+
When a task status changes in Vibora, the linked Linear ticket status is updated automatically.
|
|
77
63
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
mise run client # Start frontend dev server
|
|
82
|
-
mise run build # Build for production
|
|
83
|
-
mise run start # Run production server
|
|
84
|
-
mise run lint # Run ESLint
|
|
85
|
-
mise run preview # Preview production build
|
|
86
|
-
|
|
87
|
-
# Database operations
|
|
88
|
-
mise run db:push # Sync schema to database
|
|
89
|
-
mise run db:studio # Open Drizzle Studio GUI
|
|
90
|
-
mise run db:generate # Generate migrations
|
|
91
|
-
mise run db:migrate # Apply migrations
|
|
92
|
-
```
|
|
64
|
+
### Basic Auth
|
|
65
|
+
|
|
66
|
+
Set `basicAuthUsername` and `basicAuthPassword` (via settings or environment variables) to require authentication. Useful when exposing Vibora over a network.
|
|
93
67
|
|
|
94
68
|
## CLI
|
|
95
69
|
|
|
96
70
|
The CLI lets AI agents (like Claude Code) working inside task worktrees query and update task status.
|
|
97
71
|
|
|
98
|
-
###
|
|
72
|
+
### Server Management
|
|
99
73
|
|
|
100
74
|
```bash
|
|
101
|
-
#
|
|
102
|
-
vibora
|
|
75
|
+
vibora up # Start server daemon
|
|
76
|
+
vibora down # Stop server
|
|
77
|
+
vibora status # Check server status
|
|
78
|
+
vibora health # Check server health
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Current Task (auto-detected from worktree)
|
|
103
82
|
|
|
104
|
-
|
|
83
|
+
```bash
|
|
84
|
+
vibora current-task # Get current task info
|
|
105
85
|
vibora current-task in-progress # Mark as IN_PROGRESS
|
|
106
86
|
vibora current-task review # Mark as IN_REVIEW
|
|
107
87
|
vibora current-task done # Mark as DONE
|
|
108
|
-
vibora current-task cancel # Mark as
|
|
88
|
+
vibora current-task cancel # Mark as CANCELED
|
|
89
|
+
vibora current-task pr <url> # Associate a PR with current task
|
|
90
|
+
vibora current-task linear <url> # Link to a Linear ticket
|
|
91
|
+
```
|
|
109
92
|
|
|
110
|
-
|
|
111
|
-
vibora up # Start server daemon
|
|
112
|
-
vibora down # Stop server
|
|
113
|
-
vibora status # Check server status
|
|
93
|
+
### Task Management
|
|
114
94
|
|
|
115
|
-
|
|
95
|
+
```bash
|
|
116
96
|
vibora tasks list # List all tasks
|
|
117
97
|
vibora tasks get <id> # Get task by ID
|
|
98
|
+
vibora tasks create # Create a new task
|
|
99
|
+
vibora tasks update <id> # Update a task
|
|
100
|
+
vibora tasks move <id> # Move task to different status
|
|
101
|
+
vibora tasks delete <id> # Delete a task
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Git Operations
|
|
118
105
|
|
|
119
|
-
|
|
106
|
+
```bash
|
|
120
107
|
vibora git status # Git status for current worktree
|
|
121
108
|
vibora git diff # Git diff for current worktree
|
|
109
|
+
vibora git branches # List branches in a repo
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Worktrees
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
vibora worktrees list # List all worktrees
|
|
116
|
+
vibora worktrees delete # Delete a worktree
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Configuration
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
vibora config get <key> # Get a config value
|
|
123
|
+
vibora config set <key> <value> # Set a config value
|
|
122
124
|
```
|
|
123
125
|
|
|
124
|
-
###
|
|
126
|
+
### Notifications
|
|
125
127
|
|
|
126
128
|
```bash
|
|
127
|
-
|
|
128
|
-
|
|
129
|
+
vibora notifications # Show notification settings
|
|
130
|
+
vibora notifications enable # Enable notifications
|
|
131
|
+
vibora notifications disable # Disable notifications
|
|
132
|
+
vibora notifications test <ch> # Test a channel (sound, slack, discord, pushover)
|
|
133
|
+
vibora notifications set <ch> <key> <value>
|
|
134
|
+
# Set a channel config
|
|
135
|
+
|
|
136
|
+
vibora notify <title> [message] # Send a notification to all enabled channels
|
|
129
137
|
```
|
|
130
138
|
|
|
139
|
+
### Global Options
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
--port=<port> # Server port (default: 3333)
|
|
143
|
+
--url=<url> # Override full server URL
|
|
144
|
+
--pretty # Pretty-print JSON output
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Internationalization
|
|
148
|
+
|
|
149
|
+
Available in English and Chinese. Set the `language` setting or let it auto-detect from your browser.
|
|
150
|
+
|
|
151
|
+
## z.ai Integration
|
|
152
|
+
|
|
153
|
+
Works with [z.ai](https://z.ai) for Claude Code proxy integration. Configure via the Settings UI.
|
|
154
|
+
|
|
155
|
+
## Development
|
|
156
|
+
|
|
157
|
+
See [DEVELOPMENT.md](DEVELOPMENT.md) for development setup, architecture, and contributing guidelines.
|
|
158
|
+
|
|
131
159
|
## License
|
|
132
160
|
|
|
133
161
|
[PolyForm Shield 1.0.0](LICENSE)
|
package/bin/vibora.js
CHANGED
|
@@ -279,6 +279,7 @@ function outputError(error) {
|
|
|
279
279
|
// cli/src/commands/current-task.ts
|
|
280
280
|
var STATUS_MAP = {
|
|
281
281
|
review: "IN_REVIEW",
|
|
282
|
+
done: "DONE",
|
|
282
283
|
cancel: "CANCELED",
|
|
283
284
|
"in-progress": "IN_PROGRESS"
|
|
284
285
|
};
|
|
@@ -332,7 +333,7 @@ async function handleCurrentTaskCommand(action, rest, flags) {
|
|
|
332
333
|
}
|
|
333
334
|
const newStatus = STATUS_MAP[action];
|
|
334
335
|
if (!newStatus) {
|
|
335
|
-
throw new CliError("INVALID_ACTION", `Unknown action: ${action}. Valid actions: review,
|
|
336
|
+
throw new CliError("INVALID_ACTION", `Unknown action: ${action}. Valid actions: in-progress, review, done, cancel, pr, linear`, ExitCodes.INVALID_ARGS);
|
|
336
337
|
}
|
|
337
338
|
const task = await findCurrentTask(client, pathOverride);
|
|
338
339
|
const updatedTask = await client.moveTask(task.id, newStatus);
|