@quantiya/codevibe 1.0.4 → 1.0.6
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 +33 -55
- package/bin/codevibe +149 -17
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,84 +1,62 @@
|
|
|
1
1
|
# CodeVibe
|
|
2
2
|
|
|
3
|
-
Monitor and control AI coding agents from your
|
|
3
|
+
Monitor and control AI coding agents from your phone.
|
|
4
4
|
|
|
5
|
-
CodeVibe syncs your terminal sessions (Claude Code, Gemini CLI, Codex CLI) to the
|
|
5
|
+
CodeVibe syncs your terminal sessions (Claude Code, Gemini CLI, Codex CLI) to the CodeVibe mobile app, letting you review code changes, approve actions, and send prompts — all from your phone.
|
|
6
6
|
|
|
7
|
-
## Install
|
|
7
|
+
## Quick Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
This installs wrapper commands for all three agents:
|
|
14
|
-
- `codevibe-claude` — Claude Code integration
|
|
15
|
-
- `codevibe-gemini` — Gemini CLI integration
|
|
16
|
-
- `codevibe-codex` — Codex CLI integration
|
|
17
|
-
|
|
18
|
-
### Claude Code: Additional Step
|
|
19
|
-
|
|
20
|
-
Claude Code also requires its MCP plugin to be registered. Inside a Claude Code session, run:
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
/plugin marketplace add https://github.com/hendryyeh/quantiya-codevibe-marketplace
|
|
24
|
-
/plugin install codevibe-claude
|
|
10
|
+
curl -fsSL https://quantiya.ai/codevibe/install.sh | bash
|
|
25
11
|
```
|
|
26
12
|
|
|
27
|
-
This
|
|
28
|
-
|
|
29
|
-
### Install individual plugins
|
|
13
|
+
This installs everything automatically: Node.js, tmux, Claude Code, CodeVibe, and the Claude plugin.
|
|
30
14
|
|
|
31
|
-
|
|
15
|
+
### Manual Install
|
|
32
16
|
|
|
33
17
|
```bash
|
|
34
|
-
npm install -g @quantiya/codevibe
|
|
35
|
-
|
|
36
|
-
|
|
18
|
+
npm install -g @quantiya/codevibe
|
|
19
|
+
claude plugin marketplace add https://github.com/hendryyeh/quantiya-codevibe-marketplace
|
|
20
|
+
claude plugin install codevibe-claude@codevibe-marketplace
|
|
21
|
+
codevibe login
|
|
37
22
|
```
|
|
38
23
|
|
|
39
|
-
##
|
|
24
|
+
## Commands
|
|
40
25
|
|
|
41
26
|
```bash
|
|
42
|
-
#
|
|
43
|
-
codevibe
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
codevibe
|
|
27
|
+
codevibe login # Sign in with Apple or Google
|
|
28
|
+
codevibe status # Show auth status
|
|
29
|
+
codevibe update # Update all packages + Claude plugin
|
|
30
|
+
codevibe version # Show installed versions
|
|
31
|
+
codevibe --help # Show all commands
|
|
47
32
|
```
|
|
48
33
|
|
|
49
|
-
|
|
34
|
+
### Agent Wrappers
|
|
50
35
|
|
|
51
36
|
```bash
|
|
52
|
-
codevibe-
|
|
53
|
-
codevibe-
|
|
37
|
+
codevibe-claude # Start Claude Code with mobile sync
|
|
38
|
+
codevibe-gemini # Start Gemini CLI with mobile sync
|
|
39
|
+
codevibe-codex # Start Codex CLI with mobile sync
|
|
54
40
|
```
|
|
55
41
|
|
|
56
42
|
## Features
|
|
57
43
|
|
|
58
|
-
**Real-time sync** — See
|
|
59
|
-
|
|
60
|
-
**
|
|
61
|
-
|
|
62
|
-
**
|
|
63
|
-
|
|
64
|
-
**
|
|
65
|
-
|
|
66
|
-
**
|
|
67
|
-
|
|
68
|
-
**Push notifications** — Get notified when your agent needs attention, with deep linking to the relevant session
|
|
69
|
-
|
|
70
|
-
**Delivery status** — WhatsApp-style checkmarks: sent, delivered, and executed confirmations
|
|
71
|
-
|
|
72
|
-
**Multi-agent** — Run Claude Code, Gemini CLI, and Codex CLI sessions simultaneously, each clearly labeled in the app
|
|
73
|
-
|
|
74
|
-
**End-to-end encryption** — All messages encrypted with AES-256-GCM. Your code stays private
|
|
75
|
-
|
|
76
|
-
**Offline queue** — Messages queue automatically when offline and send when connection restores
|
|
44
|
+
- **Real-time sync** — See responses, tool usage, and file changes on your phone (~100-500ms latency)
|
|
45
|
+
- **Mobile approval** — Approve or reject tool permissions remotely with full file diff preview
|
|
46
|
+
- **Send prompts** — Type or dictate prompts from your phone
|
|
47
|
+
- **Voice input** — Speech-to-text with live transcription
|
|
48
|
+
- **Image attachments** — Send screenshots or photos alongside messages
|
|
49
|
+
- **Push notifications** — Get notified when your agent needs attention
|
|
50
|
+
- **Delivery status** — Checkmarks: sent, delivered, and executed confirmations
|
|
51
|
+
- **Multi-agent** — Claude Code, Gemini CLI, and Codex CLI from one app
|
|
52
|
+
- **E2E encrypted** — AES-256-GCM encryption for all content
|
|
53
|
+
- **Offline queue** — Messages queue when offline, send on reconnect
|
|
77
54
|
|
|
78
55
|
## Links
|
|
79
56
|
|
|
80
|
-
- [
|
|
81
|
-
- [
|
|
57
|
+
- [Landing Page](https://quantiya.ai/codevibe)
|
|
58
|
+
- [Android — Google Play](https://play.google.com/store/apps/details?id=ai.quantiya.app.codevibe)
|
|
59
|
+
- [iOS — App Store](https://apps.apple.com/app/id6756500217)
|
|
82
60
|
|
|
83
61
|
## License
|
|
84
62
|
|
package/bin/codevibe
CHANGED
|
@@ -103,42 +103,174 @@ show_version() {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
# ─── Update ──────────────────────────────────────────────────────────
|
|
106
|
+
#
|
|
107
|
+
# NOTE: Claude Code's plugin lifecycle has known bugs as of Claude Code 2.1.x:
|
|
108
|
+
# 1. `claude plugin update` lies — reports "already at latest version" based on
|
|
109
|
+
# the installed plugin's own package.json, never consults the marketplace
|
|
110
|
+
# manifest for the authoritative latest version.
|
|
111
|
+
# 2. `claude plugin install` doesn't refetch — if a cache directory for the
|
|
112
|
+
# plugin exists, it reuses it silently instead of downloading the version
|
|
113
|
+
# pinned in the marketplace manifest.
|
|
114
|
+
# 3. `claude plugin uninstall` doesn't delete the cached plugin directory —
|
|
115
|
+
# only removes the installed_plugins.json entry, leaving stale code on disk
|
|
116
|
+
# for the next install to silently reuse.
|
|
117
|
+
#
|
|
118
|
+
# This function works around all three by detecting when the installed version
|
|
119
|
+
# on disk doesn't match the version the marketplace says it should be, then
|
|
120
|
+
# manually clearing all stale cache paths before reinstalling and verifying.
|
|
121
|
+
#
|
|
122
|
+
# If Anthropic fixes these bugs, the cache-nuking path is a no-op (the version
|
|
123
|
+
# comparison will always match) and the code stays correct.
|
|
124
|
+
|
|
125
|
+
_read_marketplace_version() {
|
|
126
|
+
# Read the pinned source.version for codevibe-claude from the marketplace manifest.
|
|
127
|
+
# Echoes the version string, or empty on failure.
|
|
128
|
+
local manifest="$HOME/.claude/plugins/marketplaces/codevibe-marketplace/.claude-plugin/marketplace.json"
|
|
129
|
+
[ -f "$manifest" ] || return 0
|
|
130
|
+
node -p "
|
|
131
|
+
try {
|
|
132
|
+
const m = require('$manifest');
|
|
133
|
+
const p = (m.plugins || []).find(x => x.name === 'codevibe-claude');
|
|
134
|
+
(p && p.source && p.source.version) || '';
|
|
135
|
+
} catch (e) { '' }
|
|
136
|
+
" 2>/dev/null
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
_read_installed_version() {
|
|
140
|
+
# Read the installed version of codevibe-claude from installed_plugins.json.
|
|
141
|
+
# Echoes the version string, or empty if not installed.
|
|
142
|
+
local db="$HOME/.claude/plugins/installed_plugins.json"
|
|
143
|
+
[ -f "$db" ] || return 0
|
|
144
|
+
node -p "
|
|
145
|
+
try {
|
|
146
|
+
const ip = require('$db');
|
|
147
|
+
const e = (ip.plugins || {})['codevibe-claude@codevibe-marketplace'];
|
|
148
|
+
(e && e[0] && e[0].version) || '';
|
|
149
|
+
} catch (e) { '' }
|
|
150
|
+
" 2>/dev/null
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
_nuke_claude_plugin_cache() {
|
|
154
|
+
# Remove every path Claude Code's plugin loader might read stale code from.
|
|
155
|
+
rm -rf "$HOME/.claude/plugins/cache/codevibe-marketplace/codevibe-claude"
|
|
156
|
+
rm -rf "$HOME/.claude/plugins/npm-cache/node_modules/@quantiya/codevibe-claude-plugin"
|
|
157
|
+
rm -rf "$HOME/.claude/plugins/npm-cache/node_modules/codevibe-claude-plugin"
|
|
158
|
+
rm -f "$HOME/.claude/plugins/npm-cache/package-lock.json"
|
|
159
|
+
}
|
|
106
160
|
|
|
107
161
|
do_update() {
|
|
108
162
|
echo ""
|
|
109
163
|
echo -e "${BOLD}${PURPLE}CodeVibe Update${NC}"
|
|
110
164
|
echo ""
|
|
111
165
|
|
|
112
|
-
# Show current
|
|
166
|
+
# Show current meta-package version
|
|
113
167
|
if [ -f "$PACKAGE_DIR/package.json" ]; then
|
|
114
168
|
CUR_VER=$(node -p "require('$PACKAGE_DIR/package.json').version" 2>/dev/null || echo "?")
|
|
115
|
-
echo -e " ${DIM}Current
|
|
169
|
+
echo -e " ${DIM}Current meta-package: $CUR_VER${NC}"
|
|
116
170
|
fi
|
|
117
171
|
echo ""
|
|
118
172
|
|
|
119
|
-
# Update meta-package (pulls latest core +
|
|
173
|
+
# ─── Step 1: Update the global meta-package (pulls latest core + plugins) ──
|
|
120
174
|
echo -e "${PURPLE}▸${NC} Updating @quantiya/codevibe..."
|
|
121
|
-
|
|
122
|
-
|
|
175
|
+
# Capture output so we can check npm's exit status directly instead of the
|
|
176
|
+
# pipe's (tail's exit status would mask npm failures without `set -o pipefail`).
|
|
177
|
+
local npm_output
|
|
178
|
+
if ! npm_output=$(npm install -g --force @quantiya/codevibe@latest 2>&1); then
|
|
179
|
+
echo "$npm_output" | tail -10
|
|
180
|
+
echo ""
|
|
181
|
+
echo -e "${YELLOW}!${NC} Meta-package update failed. Check the output above, fix the issue, and retry 'codevibe update'."
|
|
182
|
+
return 1
|
|
183
|
+
fi
|
|
184
|
+
echo "$npm_output" | tail -3
|
|
185
|
+
echo -e "${GREEN}✓${NC} Meta-package updated"
|
|
123
186
|
|
|
124
|
-
#
|
|
125
|
-
if command -v claude >/dev/null 2>&1; then
|
|
187
|
+
# ─── Step 2: Update the Claude Code plugin ─────────────────────────────────
|
|
188
|
+
if ! command -v claude >/dev/null 2>&1; then
|
|
189
|
+
echo ""
|
|
190
|
+
echo -e "${YELLOW}!${NC} claude CLI not found — skipping Claude Code plugin update"
|
|
126
191
|
echo ""
|
|
127
|
-
echo -e "${
|
|
192
|
+
echo -e "${BOLD}Updated versions:${NC}"
|
|
193
|
+
show_version
|
|
194
|
+
return 0
|
|
195
|
+
fi
|
|
128
196
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
197
|
+
echo ""
|
|
198
|
+
echo -e "${PURPLE}▸${NC} Updating Claude Code plugin..."
|
|
199
|
+
|
|
200
|
+
# Refresh the marketplace manifest so we see the latest pinned version.
|
|
201
|
+
# Errors here are non-fatal at this step — the previously-cached manifest may
|
|
202
|
+
# still be usable — but the EXPECTED_VERSION read below is the real gate.
|
|
203
|
+
if claude plugin marketplace update codevibe-marketplace; then
|
|
204
|
+
echo -e "${GREEN}✓${NC} Marketplace refreshed"
|
|
205
|
+
else
|
|
206
|
+
echo -e "${YELLOW}!${NC} Marketplace refresh failed (falling back to cached manifest)"
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
local EXPECTED_VERSION
|
|
210
|
+
local INSTALLED_VERSION
|
|
211
|
+
EXPECTED_VERSION=$(_read_marketplace_version)
|
|
212
|
+
INSTALLED_VERSION=$(_read_installed_version)
|
|
213
|
+
|
|
214
|
+
# EXPECTED_VERSION is required — without it we have no ground truth to verify
|
|
215
|
+
# against, so the whole cache-bug workaround is blind. Fail loudly rather than
|
|
216
|
+
# claim success we can't prove.
|
|
217
|
+
if [ -z "$EXPECTED_VERSION" ]; then
|
|
218
|
+
echo ""
|
|
219
|
+
echo -e "${YELLOW}!${NC} Could not read expected version from marketplace manifest."
|
|
220
|
+
echo -e " ${DIM}Expected at: \$HOME/.claude/plugins/marketplaces/codevibe-marketplace/.claude-plugin/marketplace.json${NC}"
|
|
221
|
+
echo -e " ${DIM}This usually means the marketplace refresh failed or the manifest schema has drifted.${NC}"
|
|
222
|
+
echo -e " ${DIM}Try: claude plugin marketplace update codevibe-marketplace${NC}"
|
|
223
|
+
return 1
|
|
224
|
+
fi
|
|
225
|
+
|
|
226
|
+
echo -e " ${DIM}installed: ${INSTALLED_VERSION:-<none>} marketplace: ${EXPECTED_VERSION}${NC}"
|
|
227
|
+
|
|
228
|
+
# ─── Step 3: Decide if we need to force a cache-clearing reinstall ─────────
|
|
229
|
+
local NEEDS_REINSTALL=false
|
|
230
|
+
if [ -z "$INSTALLED_VERSION" ] || [ "$INSTALLED_VERSION" != "$EXPECTED_VERSION" ]; then
|
|
231
|
+
NEEDS_REINSTALL=true
|
|
232
|
+
if [ -n "$INSTALLED_VERSION" ]; then
|
|
233
|
+
echo -e "${YELLOW}!${NC} Cache is stale (${INSTALLED_VERSION} on disk, ${EXPECTED_VERSION} in marketplace)."
|
|
234
|
+
echo -e " ${DIM}Working around Claude Code plugin update bug...${NC}"
|
|
134
235
|
fi
|
|
236
|
+
fi
|
|
237
|
+
|
|
238
|
+
if [ "$NEEDS_REINSTALL" = "true" ]; then
|
|
239
|
+
# Must uninstall + nuke cache BEFORE install. `claude plugin install` will
|
|
240
|
+
# silently reuse an existing cache dir even if the marketplace version changed.
|
|
241
|
+
claude plugin uninstall codevibe-claude@codevibe-marketplace >/dev/null 2>&1 || true
|
|
242
|
+
_nuke_claude_plugin_cache
|
|
135
243
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
echo -e "${GREEN}✓${NC} Claude plugin updated"
|
|
244
|
+
if claude plugin install codevibe-claude@codevibe-marketplace; then
|
|
245
|
+
echo -e "${GREEN}✓${NC} Claude plugin reinstalled"
|
|
139
246
|
else
|
|
140
|
-
echo
|
|
247
|
+
echo ""
|
|
248
|
+
echo -e "${YELLOW}!${NC} Claude plugin install failed — try running 'codevibe update' again"
|
|
249
|
+
return 1
|
|
141
250
|
fi
|
|
251
|
+
else
|
|
252
|
+
# Version already matches. Still call install to make sure installed_plugins.json
|
|
253
|
+
# is in sync, but treat any error as non-fatal since we're not actually changing state.
|
|
254
|
+
claude plugin install codevibe-claude@codevibe-marketplace >/dev/null 2>&1 || true
|
|
255
|
+
echo -e "${GREEN}✓${NC} Claude plugin already at ${INSTALLED_VERSION}"
|
|
256
|
+
fi
|
|
257
|
+
|
|
258
|
+
# ─── Step 4: Verify the installed version is now what we expected ──────────
|
|
259
|
+
# EXPECTED_VERSION is guaranteed non-empty here (we bailed earlier otherwise),
|
|
260
|
+
# so the verification is unconditional.
|
|
261
|
+
INSTALLED_VERSION=$(_read_installed_version)
|
|
262
|
+
if [ "$INSTALLED_VERSION" != "$EXPECTED_VERSION" ]; then
|
|
263
|
+
echo ""
|
|
264
|
+
echo -e "${YELLOW}!${NC} WARNING: Installed version (${INSTALLED_VERSION:-<none>}) still doesn't match expected (${EXPECTED_VERSION})."
|
|
265
|
+
echo -e " ${DIM}Try: rm -rf ~/.claude/plugins/cache/codevibe-marketplace/codevibe-claude && codevibe update${NC}"
|
|
266
|
+
return 1
|
|
267
|
+
fi
|
|
268
|
+
|
|
269
|
+
# ─── Step 5: Tell the user about running sessions ──────────────────────────
|
|
270
|
+
if [ "$NEEDS_REINSTALL" = "true" ]; then
|
|
271
|
+
echo ""
|
|
272
|
+
echo -e "${YELLOW}!${NC} Running Claude Code sessions still have the OLD plugin server in memory."
|
|
273
|
+
echo -e " ${DIM}Exit and restart any active session to pick up the new plugin.${NC}"
|
|
142
274
|
fi
|
|
143
275
|
|
|
144
276
|
echo ""
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quantiya/codevibe",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "CodeVibe - Monitor and control AI coding agents (Claude Code, Gemini CLI, Codex CLI) from your mobile device",
|
|
5
5
|
"bin": {
|
|
6
6
|
"codevibe": "./bin/codevibe",
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
"LICENSE"
|
|
15
15
|
],
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@quantiya/codevibe-core": "^1.0.
|
|
18
|
-
"@quantiya/codevibe-claude-plugin": "^1.0.
|
|
19
|
-
"@quantiya/codevibe-gemini-plugin": "^1.0.
|
|
20
|
-
"@quantiya/codevibe-codex-plugin": "^1.0.
|
|
17
|
+
"@quantiya/codevibe-core": "^1.0.3",
|
|
18
|
+
"@quantiya/codevibe-claude-plugin": "^1.0.9",
|
|
19
|
+
"@quantiya/codevibe-gemini-plugin": "^1.0.5",
|
|
20
|
+
"@quantiya/codevibe-codex-plugin": "^1.0.6"
|
|
21
21
|
},
|
|
22
22
|
"keywords": [
|
|
23
23
|
"codevibe",
|