@quantiya/codevibe 2.0.7 → 2.0.9
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 +25 -12
- package/bin/codevibe +172 -42
- package/package.json +10 -10
- package/bin/codevibe-agy +0 -70
- package/bin/codevibe-claude +0 -71
- package/bin/codevibe-codex +0 -70
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CodeVibe
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Companion and orchestration for Claude Code, OpenAI Codex CLI, and Antigravity — with secure mobile control when you step away.**
|
|
4
4
|
|
|
5
5
|
See your agent's work in real time, approve file edits on the go, dictate prompts by voice, send screenshots — all from your phone, anywhere you are. End-to-end encrypted.
|
|
6
6
|
|
|
@@ -10,29 +10,34 @@ See your agent's work in real time, approve file edits on the go, dictate prompt
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Install the 2.x candidate
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
|
|
16
|
+
npm install -g @quantiya/codevibe@next
|
|
17
|
+
codevibe login
|
|
17
18
|
```
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
Install Node.js 22+, tmux, and at least one supported coding-agent CLI first.
|
|
21
|
+
Then download the mobile app, sign in with the same Apple or Google account,
|
|
22
|
+
and run:
|
|
20
23
|
|
|
21
24
|
```bash
|
|
22
|
-
codevibe
|
|
23
|
-
codevibe
|
|
24
|
-
codevibe
|
|
25
|
+
codevibe --agent claude # Claude Code Companion
|
|
26
|
+
codevibe --agent codex # OpenAI Codex Companion
|
|
27
|
+
codevibe --agent agy # Antigravity Companion
|
|
25
28
|
```
|
|
26
29
|
|
|
27
30
|
Your session appears on your phone automatically.
|
|
28
31
|
|
|
29
|
-
###
|
|
32
|
+
### Stable 1.x installer
|
|
30
33
|
|
|
31
34
|
```bash
|
|
32
|
-
|
|
33
|
-
codevibe login
|
|
35
|
+
curl -fsSL https://quantiya.ai/codevibe/install.sh | bash
|
|
34
36
|
```
|
|
35
37
|
|
|
38
|
+
The hosted installer remains on stable 1.x while 2.x is validated on the
|
|
39
|
+
`next` channel. It does not install the unified `--agent` interface yet.
|
|
40
|
+
|
|
36
41
|
## Commands
|
|
37
42
|
|
|
38
43
|
```bash
|
|
@@ -41,9 +46,16 @@ codevibe logout # Sign out
|
|
|
41
46
|
codevibe status # Show auth status
|
|
42
47
|
codevibe update # Update all packages + Claude plugin
|
|
43
48
|
codevibe version # Show installed versions
|
|
49
|
+
codevibe vendor-key status # Show model credentials (redacted)
|
|
50
|
+
codevibe # Interactive route (mode picker for Pro/Max)
|
|
51
|
+
codevibe --agent codex # Direct Companion route; skips both pickers
|
|
44
52
|
codevibe --help # Show all commands
|
|
45
53
|
```
|
|
46
54
|
|
|
55
|
+
Pass vendor CLI arguments after `--`, for example
|
|
56
|
+
`codevibe --agent claude -- --resume`. In Orchestration Mode, reviewer
|
|
57
|
+
administration lives in `/reviewer-setup`, `/reviewers`, and `/status`.
|
|
58
|
+
|
|
47
59
|
## Features
|
|
48
60
|
|
|
49
61
|
- **🚀 Real-time sync** — every prompt, response, tool call, and file change on your phone in 100–500ms
|
|
@@ -60,7 +72,7 @@ codevibe --help # Show all commands
|
|
|
60
72
|
## Requirements
|
|
61
73
|
|
|
62
74
|
- **macOS, Linux, or WSL Ubuntu** — Windows without WSL is not supported
|
|
63
|
-
- **Node.js**
|
|
75
|
+
- **Node.js** 22.0.0+
|
|
64
76
|
- **tmux** — `brew install tmux` on macOS, `apt install tmux` on Linux/WSL
|
|
65
77
|
- A mobile phone with iOS 17+ or Android 8+
|
|
66
78
|
|
|
@@ -87,7 +99,8 @@ It's not a chat app. It's a remote control for the coding agents you already use
|
|
|
87
99
|
`@quantiya/codevibe` is a meta-package that installs:
|
|
88
100
|
|
|
89
101
|
- The `codevibe` CLI (login, logout, update, status)
|
|
90
|
-
-
|
|
102
|
+
- One public executable: `codevibe`
|
|
103
|
+
- Package-private Companion launchers for Claude, Codex, and Antigravity
|
|
91
104
|
- The plugin packages as dependencies:
|
|
92
105
|
- [`@quantiya/codevibe-claude-plugin`](https://www.npmjs.com/package/@quantiya/codevibe-claude-plugin)
|
|
93
106
|
- [`@quantiya/codevibe-codex-plugin`](https://www.npmjs.com/package/@quantiya/codevibe-codex-plugin)
|
package/bin/codevibe
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
#
|
|
3
3
|
# codevibe - CodeVibe CLI
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
# Authentication is shared across
|
|
5
|
+
# Canonical launcher plus authentication, updates, and plugin lifecycle.
|
|
6
|
+
# Authentication is shared across Claude, Codex, and Antigravity companions.
|
|
7
7
|
#
|
|
8
8
|
# Usage:
|
|
9
9
|
# codevibe login # Sign in via browser
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
# codevibe update # Update all CodeVibe packages + Claude plugin
|
|
13
13
|
# codevibe version # Show installed versions
|
|
14
14
|
# codevibe reset-device # Reset device identity (destructive)
|
|
15
|
+
# codevibe --agent codex # Launch a Companion agent directly
|
|
15
16
|
# codevibe --help # Show this help
|
|
16
17
|
#
|
|
17
18
|
# Environment:
|
|
@@ -42,27 +43,48 @@ PACKAGE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
42
43
|
|
|
43
44
|
show_help() {
|
|
44
45
|
echo ""
|
|
45
|
-
echo -e "${BOLD}CodeVibe${NC} —
|
|
46
|
+
echo -e "${BOLD}CodeVibe${NC} — Companion and orchestration for AI coding agents"
|
|
46
47
|
echo ""
|
|
47
|
-
echo "Usage:
|
|
48
|
+
echo "Usage:"
|
|
49
|
+
echo " codevibe"
|
|
50
|
+
echo " codevibe --agent <claude|codex|agy> [-- <agent args>]"
|
|
51
|
+
echo " codevibe <command>"
|
|
48
52
|
echo ""
|
|
49
|
-
echo "
|
|
53
|
+
echo "Launch:"
|
|
54
|
+
echo " codevibe Open the interactive route"
|
|
55
|
+
echo " codevibe --agent claude [-- args] Open Claude Companion directly"
|
|
56
|
+
echo " codevibe --agent codex [-- args] Open Codex Companion directly"
|
|
57
|
+
echo " codevibe --agent agy [-- args] Open Antigravity Companion directly"
|
|
58
|
+
echo ""
|
|
59
|
+
echo "Account:"
|
|
50
60
|
echo " login Sign in with Apple or Google (opens browser)"
|
|
51
61
|
echo " logout Sign out"
|
|
52
|
-
echo " status Show
|
|
53
|
-
echo "
|
|
54
|
-
echo "
|
|
55
|
-
echo "
|
|
56
|
-
echo "
|
|
62
|
+
echo " status Show account and continuation status"
|
|
63
|
+
echo " reset-device Reset this device identity (destructive)"
|
|
64
|
+
echo ""
|
|
65
|
+
echo "Model credentials:"
|
|
66
|
+
echo " vendor-key setup Guided Claude + Codex setup"
|
|
67
|
+
echo " vendor-key set <anthropic|openai> Store an API key in the OS keychain"
|
|
68
|
+
echo " vendor-key import-codex Import ChatGPT credentials from Codex"
|
|
69
|
+
echo " vendor-key status Show stored credential classes (redacted)"
|
|
70
|
+
echo " vendor-key clear <provider> Remove a stored credential"
|
|
71
|
+
echo " keychain migrate Move file-backed creds into the OS keychain"
|
|
72
|
+
echo ""
|
|
73
|
+
echo "Local model:"
|
|
74
|
+
echo " model install Install the CodeVibe-managed local model (Pro/Max)"
|
|
75
|
+
echo " model status Show local-model status"
|
|
76
|
+
echo " model remove Remove the managed local model"
|
|
57
77
|
echo ""
|
|
58
|
-
echo "
|
|
59
|
-
echo "
|
|
60
|
-
echo "
|
|
78
|
+
echo "Maintenance:"
|
|
79
|
+
echo " update Update CodeVibe packages and the Claude plugin"
|
|
80
|
+
echo " version Show installed package and agent versions"
|
|
81
|
+
echo " --help, -h Show this help"
|
|
61
82
|
echo ""
|
|
62
|
-
echo "
|
|
63
|
-
echo "
|
|
64
|
-
echo "
|
|
65
|
-
echo "
|
|
83
|
+
echo "Free opens Companion. Pro/Max chooses Companion or Orchestration."
|
|
84
|
+
echo "--agent skips the mode and agent pickers and saves that Companion agent."
|
|
85
|
+
echo "Use -- before agent-specific arguments."
|
|
86
|
+
echo ""
|
|
87
|
+
echo "Inside Orchestration: /reviewer-setup, /reviewers, /status, /help"
|
|
66
88
|
echo ""
|
|
67
89
|
echo -e "${DIM}https://quantiya.ai/codevibe${NC}"
|
|
68
90
|
echo ""
|
|
@@ -193,12 +215,12 @@ do_update() {
|
|
|
193
215
|
fi
|
|
194
216
|
echo ""
|
|
195
217
|
|
|
196
|
-
# ─── Step 1: Update the global meta-package
|
|
218
|
+
# ─── Step 1: Update the global meta-package on the CodeVibe 2.x channel ───
|
|
197
219
|
echo -e "${PURPLE}▸${NC} Updating @quantiya/codevibe..."
|
|
198
220
|
# Capture output so we can check npm's exit status directly instead of the
|
|
199
221
|
# pipe's (tail's exit status would mask npm failures without `set -o pipefail`).
|
|
200
222
|
local npm_output
|
|
201
|
-
if ! npm_output=$(npm install -g --force @quantiya/codevibe@
|
|
223
|
+
if ! npm_output=$(npm install -g --force @quantiya/codevibe@next 2>&1); then
|
|
202
224
|
echo "$npm_output" | tail -10
|
|
203
225
|
echo ""
|
|
204
226
|
echo -e "${YELLOW}!${NC} Meta-package update failed. Check the output above, fix the issue, and retry 'codevibe update'."
|
|
@@ -314,18 +336,117 @@ do_update() {
|
|
|
314
336
|
exec "$0" version
|
|
315
337
|
}
|
|
316
338
|
|
|
339
|
+
# ─── Daily update notice ────────────────────────────────────────────
|
|
340
|
+
#
|
|
341
|
+
# The retired per-agent wrappers used to show a cached update notice and
|
|
342
|
+
# refresh it in the background. Keep that behavior on the single public
|
|
343
|
+
# launcher so wrapper removal does not silently remove upgrade visibility.
|
|
344
|
+
|
|
345
|
+
cache_entry_owner_uid() {
|
|
346
|
+
stat -f '%u' "$1" 2>/dev/null || stat -c '%u' "$1" 2>/dev/null
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
ensure_update_cache_dir() {
|
|
350
|
+
local cache_base cache_dir owner
|
|
351
|
+
cache_base="${XDG_CACHE_HOME:-${HOME:+$HOME/.cache}}"
|
|
352
|
+
[ -n "$cache_base" ] || return 1
|
|
353
|
+
cache_dir="$cache_base/codevibe"
|
|
354
|
+
|
|
355
|
+
# Never trust a symlinked or non-directory cache root. A custom
|
|
356
|
+
# XDG_CACHE_HOME may point into a shared location, so ownership is checked
|
|
357
|
+
# even after a successful mkdir (which also closes the create race).
|
|
358
|
+
if [ -e "$cache_dir" ] || [ -L "$cache_dir" ]; then
|
|
359
|
+
[ -d "$cache_dir" ] && [ ! -L "$cache_dir" ] || return 1
|
|
360
|
+
else
|
|
361
|
+
(umask 077; mkdir -p "$cache_dir" 2>/dev/null) || return 1
|
|
362
|
+
fi
|
|
363
|
+
owner=$(cache_entry_owner_uid "$cache_dir") || return 1
|
|
364
|
+
[ "$owner" = "$(id -u)" ] || return 1
|
|
365
|
+
chmod 700 "$cache_dir" 2>/dev/null || return 1
|
|
366
|
+
printf '%s\n' "$cache_dir"
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
update_cache_version() {
|
|
370
|
+
local current
|
|
371
|
+
current=$(node -p "require('$PACKAGE_DIR/package.json').version" 2>/dev/null)
|
|
372
|
+
case "$current" in
|
|
373
|
+
''|*[!A-Za-z0-9._-]*) current="unknown" ;;
|
|
374
|
+
esac
|
|
375
|
+
printf '%s\n' "$current"
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
is_safe_update_cache_file() {
|
|
379
|
+
local owner
|
|
380
|
+
[ -f "$1" ] && [ ! -L "$1" ] || return 1
|
|
381
|
+
owner=$(cache_entry_owner_uid "$1") || return 1
|
|
382
|
+
[ "$owner" = "$(id -u)" ]
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
atomic_write_update_cache_file() {
|
|
386
|
+
local target="$1" content="$2" cache_dir tmp
|
|
387
|
+
cache_dir="${target%/*}"
|
|
388
|
+
tmp=$(mktemp "$cache_dir/.update-tmp.XXXXXX") || return 1
|
|
389
|
+
chmod 600 "$tmp" 2>/dev/null || {
|
|
390
|
+
rm -f "$tmp"
|
|
391
|
+
return 1
|
|
392
|
+
}
|
|
393
|
+
if ! printf '%s\n' "$content" > "$tmp"; then
|
|
394
|
+
rm -f "$tmp"
|
|
395
|
+
return 1
|
|
396
|
+
fi
|
|
397
|
+
if ! mv -f "$tmp" "$target"; then
|
|
398
|
+
rm -f "$tmp"
|
|
399
|
+
return 1
|
|
400
|
+
fi
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
show_cached_update_notice() {
|
|
404
|
+
local cache_dir current message_file
|
|
405
|
+
cache_dir=$(ensure_update_cache_dir) || return 0
|
|
406
|
+
current=$(update_cache_version)
|
|
407
|
+
message_file="$cache_dir/update-msg-$current"
|
|
408
|
+
if is_safe_update_cache_file "$message_file" && [ -s "$message_file" ]; then
|
|
409
|
+
cat "$message_file" >&2
|
|
410
|
+
echo "" >&2
|
|
411
|
+
fi
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
is_newer_version() {
|
|
415
|
+
node -e 'const [candidate,current]=process.argv.slice(1); const parse=(value)=>{const [base,pre=""]=value.replace(/^v/,"").split("-",2); const nums=base.split(".").map((part)=>Number(part)); return nums.length===3&&nums.every(Number.isInteger)?{nums,pre}:null}; const a=parse(candidate),b=parse(current); if(!a||!b)process.exit(1); for(let i=0;i<3;i++){if(a.nums[i]!==b.nums[i])process.exit(a.nums[i]>b.nums[i]?0:1)} if(a.pre===b.pre)process.exit(1); process.exit(!a.pre?0:b.pre&&a.pre>b.pre?0:1)' "$1" "$2"
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
refresh_update_notice_if_due() {
|
|
419
|
+
local cache_dir current message_file check_file
|
|
420
|
+
cache_dir=$(ensure_update_cache_dir) || return 0
|
|
421
|
+
current=$(update_cache_version)
|
|
422
|
+
message_file="$cache_dir/update-msg-$current"
|
|
423
|
+
check_file="$cache_dir/update-check-$current"
|
|
424
|
+
|
|
425
|
+
if is_safe_update_cache_file "$check_file" \
|
|
426
|
+
&& [ -z "$(find "$check_file" -mmin +1440 -print -quit 2>/dev/null)" ]; then
|
|
427
|
+
return 0
|
|
428
|
+
fi
|
|
429
|
+
|
|
430
|
+
(
|
|
431
|
+
local latest notice
|
|
432
|
+
latest=$(npm view @quantiya/codevibe@next version 2>/dev/null)
|
|
433
|
+
if [ -n "$current" ] && [ -n "$latest" ]; then
|
|
434
|
+
if is_newer_version "$latest" "$current"; then
|
|
435
|
+
notice=$(printf '\033[33m⚠️ CodeVibe update available (%s → %s). Run: codevibe update\033[0m' "$current" "$latest")
|
|
436
|
+
atomic_write_update_cache_file "$message_file" "$notice" || true
|
|
437
|
+
elif [ -e "$message_file" ] || [ -L "$message_file" ]; then
|
|
438
|
+
rm -f "$message_file" 2>/dev/null
|
|
439
|
+
fi
|
|
440
|
+
fi
|
|
441
|
+
atomic_write_update_cache_file "$check_file" "$(date +%s)" || true
|
|
442
|
+
) >/dev/null 2>&1 &
|
|
443
|
+
}
|
|
444
|
+
|
|
317
445
|
# ─── Command routing ─────────────────────────────────────────────────
|
|
318
446
|
|
|
319
|
-
#
|
|
320
|
-
#
|
|
321
|
-
#
|
|
322
|
-
# inside @quantiya/codevibe-core. Existing subcommands keep their Bash
|
|
323
|
-
# routing.
|
|
324
|
-
#
|
|
325
|
-
# The dispatch arm sits BELOW the existing case statement; the case
|
|
326
|
-
# statement falls through to the default `*` arm only when the first
|
|
327
|
-
# token is not recognized AND not "" (handled by --help arm). The
|
|
328
|
-
# 2.0-mode dispatch is checked BEFORE the unknown-command exit.
|
|
447
|
+
# Interactive launches, direct --agent launches, and local-model commands are
|
|
448
|
+
# owned by the TypeScript shell CLI. Administrative commands stay in this thin
|
|
449
|
+
# Bash router.
|
|
329
450
|
|
|
330
451
|
case "$1" in
|
|
331
452
|
--help|-h|help)
|
|
@@ -340,11 +461,8 @@ case "$1" in
|
|
|
340
461
|
do_update
|
|
341
462
|
exit $?
|
|
342
463
|
;;
|
|
343
|
-
login|logout|status|reset-device|
|
|
344
|
-
# Delegate to codevibe-core
|
|
345
|
-
# subcommand (2f.0.a.4) with its own sub-dispatch for
|
|
346
|
-
# enable/disable/status/configure — routed through runAuthCli's
|
|
347
|
-
# switch so core's CLI entry point stays the single Node entry.
|
|
464
|
+
login|logout|status|reset-device|vendor-key|keychain)
|
|
465
|
+
# Delegate shared account administration to codevibe-core.
|
|
348
466
|
CORE_CLI="$PACKAGE_DIR/node_modules/@quantiya/codevibe-core/bin/codevibe.js"
|
|
349
467
|
if [ ! -f "$CORE_CLI" ]; then
|
|
350
468
|
# Local-dev fallback: meta + core repos as workspace siblings, so
|
|
@@ -355,17 +473,15 @@ case "$1" in
|
|
|
355
473
|
if [ -f "$WORKSPACE_CLI" ]; then
|
|
356
474
|
CORE_CLI="$WORKSPACE_CLI"
|
|
357
475
|
else
|
|
358
|
-
echo "Error: @quantiya/codevibe-core not found. Try reinstalling: npm install -g @quantiya/codevibe" >&2
|
|
476
|
+
echo "Error: @quantiya/codevibe-core not found. Try reinstalling: npm install -g @quantiya/codevibe@next" >&2
|
|
359
477
|
exit 1
|
|
360
478
|
fi
|
|
361
479
|
fi
|
|
362
480
|
exec node "$CORE_CLI" "$@"
|
|
363
481
|
;;
|
|
364
|
-
model|""|--
|
|
365
|
-
#
|
|
366
|
-
# the
|
|
367
|
-
# parser handles flag re-ordering + the `--` separator. Per
|
|
368
|
-
# Stage 2 r2 Codex MEDIUM-1.
|
|
482
|
+
model|""|--agent)
|
|
483
|
+
# Empty args enter the interactive route. `--agent` enters Companion
|
|
484
|
+
# directly, and the TS parser owns the `--` vendor-argument boundary.
|
|
369
485
|
#
|
|
370
486
|
# `model` (install/status/remove/health-check) also routes here: the
|
|
371
487
|
# orchestration-shell CLI owns the local Gemma runtime, so it dispatches
|
|
@@ -373,6 +489,10 @@ case "$1" in
|
|
|
373
489
|
# `codevibe model ...` fell through to the unknown-command arm on a real
|
|
374
490
|
# host install (it only worked in-container where cli.js is invoked
|
|
375
491
|
# directly).
|
|
492
|
+
if [ "$1" != "model" ]; then
|
|
493
|
+
show_cached_update_notice
|
|
494
|
+
refresh_update_notice_if_due
|
|
495
|
+
fi
|
|
376
496
|
SHELL_CLI=$(node -e "try { console.log(require.resolve('@quantiya/codevibe-core/dist/orchestration-shell/cli.js')) } catch(e) { process.exit(1) }" 2>/dev/null)
|
|
377
497
|
if [ -n "$SHELL_CLI" ] && [ -f "$SHELL_CLI" ]; then
|
|
378
498
|
exec node "$SHELL_CLI" "$@"
|
|
@@ -383,16 +503,26 @@ case "$1" in
|
|
|
383
503
|
exec node "$SHELL_CLI_LOCAL" "$@"
|
|
384
504
|
fi
|
|
385
505
|
# Workspace-sibling fallback: meta + core repos as siblings, so
|
|
386
|
-
# `./bin/codevibe --
|
|
506
|
+
# `./bin/codevibe --agent codex` works directly from a
|
|
387
507
|
# checked-out workspace without `npm install`. No effect on global
|
|
388
508
|
# install (primary path + node_modules fallback resolve first).
|
|
389
509
|
SHELL_CLI_WORKSPACE="$(dirname "$PACKAGE_DIR")/codevibe-core/dist/orchestration-shell/cli.js"
|
|
390
510
|
if [ -f "$SHELL_CLI_WORKSPACE" ]; then
|
|
391
511
|
exec node "$SHELL_CLI_WORKSPACE" "$@"
|
|
392
512
|
fi
|
|
393
|
-
echo "Error: codevibe-core orchestration-shell CLI not found. Try reinstalling: npm install -g @quantiya/codevibe" >&2
|
|
513
|
+
echo "Error: codevibe-core orchestration-shell CLI not found. Try reinstalling: npm install -g @quantiya/codevibe@next" >&2
|
|
394
514
|
exit 1
|
|
395
515
|
;;
|
|
516
|
+
orchestration)
|
|
517
|
+
echo "'codevibe orchestration ...' has been removed." >&2
|
|
518
|
+
echo "Enter Orchestration with 'codevibe', then use /reviewer-setup, /reviewers, or /status." >&2
|
|
519
|
+
exit 2
|
|
520
|
+
;;
|
|
521
|
+
--mode|--companion|--orchestration|--forget-agent|--with-local-model|--no-orchestration)
|
|
522
|
+
echo "'$1' has been removed." >&2
|
|
523
|
+
echo "Run 'codevibe' for the interactive route, or 'codevibe --agent claude|codex|agy' for direct Companion." >&2
|
|
524
|
+
exit 2
|
|
525
|
+
;;
|
|
396
526
|
*)
|
|
397
527
|
echo "Unknown command: $1" >&2
|
|
398
528
|
echo "Run 'codevibe --help' for usage." >&2
|
package/package.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quantiya/codevibe",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.9",
|
|
4
|
+
"description": "Companion and orchestration for Claude Code, OpenAI Codex CLI, and Antigravity, with secure mobile control.",
|
|
5
5
|
"bin": {
|
|
6
|
-
"codevibe": "./bin/codevibe"
|
|
7
|
-
"codevibe-claude": "./bin/codevibe-claude",
|
|
8
|
-
"codevibe-codex": "./bin/codevibe-codex",
|
|
9
|
-
"codevibe-agy": "./bin/codevibe-agy"
|
|
6
|
+
"codevibe": "./bin/codevibe"
|
|
10
7
|
},
|
|
11
8
|
"files": [
|
|
12
9
|
"bin",
|
|
13
10
|
"README.md",
|
|
14
11
|
"LICENSE"
|
|
15
12
|
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"test": "node --test test/cli-surface.test.js"
|
|
15
|
+
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@quantiya/codevibe-antigravity-plugin": "2.0.
|
|
18
|
-
"@quantiya/codevibe-claude-plugin": "2.0.
|
|
19
|
-
"@quantiya/codevibe-codex-plugin": "2.0.
|
|
20
|
-
"@quantiya/codevibe-core": "2.0.
|
|
17
|
+
"@quantiya/codevibe-antigravity-plugin": "2.0.8",
|
|
18
|
+
"@quantiya/codevibe-claude-plugin": "2.0.8",
|
|
19
|
+
"@quantiya/codevibe-codex-plugin": "2.0.8",
|
|
20
|
+
"@quantiya/codevibe-core": "2.0.8"
|
|
21
21
|
},
|
|
22
22
|
"keywords": [
|
|
23
23
|
"codevibe",
|
package/bin/codevibe-agy
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Thin wrapper that delegates to @quantiya/codevibe-antigravity-plugin
|
|
3
|
-
|
|
4
|
-
SOURCE="${BASH_SOURCE[0]}"
|
|
5
|
-
while [ -L "$SOURCE" ]; do
|
|
6
|
-
DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
7
|
-
SOURCE="$(readlink "$SOURCE")"
|
|
8
|
-
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE"
|
|
9
|
-
done
|
|
10
|
-
SCRIPT_DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
11
|
-
|
|
12
|
-
DELEGATE="$SCRIPT_DIR/../node_modules/@quantiya/codevibe-antigravity-plugin/bin/codevibe-agy"
|
|
13
|
-
|
|
14
|
-
if [ ! -f "$DELEGATE" ]; then
|
|
15
|
-
echo "Error: @quantiya/codevibe-antigravity-plugin not found. Try reinstalling: npm install -g @quantiya/codevibe" >&2
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
case "${1:-}" in
|
|
20
|
-
login|logout|help|--help|-h|version|--version|-v)
|
|
21
|
-
;;
|
|
22
|
-
*)
|
|
23
|
-
if ! command -v agy >/dev/null 2>&1; then
|
|
24
|
-
cat >&2 <<'EOF'
|
|
25
|
-
|
|
26
|
-
Antigravity CLI (agy) is not installed on this system.
|
|
27
|
-
|
|
28
|
-
CodeVibe attaches to the Antigravity CLI — you need it installed first.
|
|
29
|
-
|
|
30
|
-
Install Antigravity CLI from Google's documentation:
|
|
31
|
-
https://antigravity.google/docs
|
|
32
|
-
|
|
33
|
-
Then run codevibe-agy again.
|
|
34
|
-
|
|
35
|
-
Learn more: https://quantiya.ai/codevibe
|
|
36
|
-
EOF
|
|
37
|
-
exit 1
|
|
38
|
-
fi
|
|
39
|
-
;;
|
|
40
|
-
esac
|
|
41
|
-
|
|
42
|
-
# Update check — show cached result from previous check, then refresh in background.
|
|
43
|
-
_CV_UPDATE_MSG="${TMPDIR:-/tmp}/.codevibe-update-msg"
|
|
44
|
-
_CV_UPDATE_CHECK="${TMPDIR:-/tmp}/.codevibe-update-check"
|
|
45
|
-
if [ -s "$_CV_UPDATE_MSG" ]; then
|
|
46
|
-
cat "$_CV_UPDATE_MSG" >&2
|
|
47
|
-
echo "" >&2
|
|
48
|
-
fi
|
|
49
|
-
if [ ! -f "$_CV_UPDATE_CHECK" ] || [ "$(find "$_CV_UPDATE_CHECK" -mmin +1440 2>/dev/null)" ]; then
|
|
50
|
-
(
|
|
51
|
-
_CURRENT=$(node -p "require('$SCRIPT_DIR/../package.json').version" 2>/dev/null)
|
|
52
|
-
_LATEST=$(npm view @quantiya/codevibe version 2>/dev/null)
|
|
53
|
-
if [ -n "$_CURRENT" ] && [ -n "$_LATEST" ] && [ "$_CURRENT" != "$_LATEST" ]; then
|
|
54
|
-
echo -e "\033[33m⚠️ CodeVibe update available ($_CURRENT → $_LATEST). Run: codevibe update\033[0m" > "$_CV_UPDATE_MSG" 2>/dev/null
|
|
55
|
-
else
|
|
56
|
-
rm -f "$_CV_UPDATE_MSG" 2>/dev/null
|
|
57
|
-
fi
|
|
58
|
-
touch "$_CV_UPDATE_CHECK" 2>/dev/null
|
|
59
|
-
) &
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
# Activation telemetry (background, non-blocking, no PII)
|
|
63
|
-
_CID="$(echo "$(uname -n)-$(id -u)" | (sha256sum 2>/dev/null || shasum -a 256 2>/dev/null || echo "anonymous-fallback ") | cut -c1-36)"
|
|
64
|
-
_SRC="${CODEVIBE_TELEMETRY_SOURCE:-production}"
|
|
65
|
-
curl -s -X POST "https://www.google-analytics.com/mp/collect?measurement_id=G-GS74YEQTB8&api_secret=lAfOF6OxRzSQ-NsLBRjhAg" \
|
|
66
|
-
-H "Content-Type: application/json" \
|
|
67
|
-
-d "{\"client_id\":\"${_CID}\",\"events\":[{\"name\":\"wrapper_launched\",\"params\":{\"agent\":\"antigravity\",\"platform\":\"$(uname -s)\",\"source\":\"${_SRC}\"}}]}" \
|
|
68
|
-
>/dev/null 2>&1 &
|
|
69
|
-
|
|
70
|
-
exec "$DELEGATE" "$@"
|
package/bin/codevibe-claude
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Thin wrapper that delegates to @quantiya/codevibe-claude-plugin
|
|
3
|
-
|
|
4
|
-
SOURCE="${BASH_SOURCE[0]}"
|
|
5
|
-
while [ -L "$SOURCE" ]; do
|
|
6
|
-
DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
7
|
-
SOURCE="$(readlink "$SOURCE")"
|
|
8
|
-
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE"
|
|
9
|
-
done
|
|
10
|
-
SCRIPT_DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
11
|
-
|
|
12
|
-
DELEGATE="$SCRIPT_DIR/../node_modules/@quantiya/codevibe-claude-plugin/bin/codevibe-claude"
|
|
13
|
-
|
|
14
|
-
if [ ! -f "$DELEGATE" ]; then
|
|
15
|
-
echo "Error: @quantiya/codevibe-claude-plugin not found. Try reinstalling: npm install -g @quantiya/codevibe" >&2
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
case "${1:-}" in
|
|
20
|
-
login|logout|help|--help|-h|version|--version|-v)
|
|
21
|
-
;;
|
|
22
|
-
*)
|
|
23
|
-
if ! command -v claude >/dev/null 2>&1; then
|
|
24
|
-
cat >&2 <<'EOF'
|
|
25
|
-
|
|
26
|
-
Claude Code is not installed on this system.
|
|
27
|
-
|
|
28
|
-
CodeVibe attaches to the Claude Code CLI — you need it installed first.
|
|
29
|
-
|
|
30
|
-
Install Claude Code:
|
|
31
|
-
npm install -g @anthropic-ai/claude-code
|
|
32
|
-
|
|
33
|
-
Then run codevibe-claude again.
|
|
34
|
-
|
|
35
|
-
Learn more: https://quantiya.ai/codevibe
|
|
36
|
-
EOF
|
|
37
|
-
exit 1
|
|
38
|
-
fi
|
|
39
|
-
;;
|
|
40
|
-
esac
|
|
41
|
-
|
|
42
|
-
# Update check — show cached result from previous check, then refresh in background.
|
|
43
|
-
# Never emits from a background job during the current session.
|
|
44
|
-
_CV_UPDATE_MSG="${TMPDIR:-/tmp}/.codevibe-update-msg"
|
|
45
|
-
_CV_UPDATE_CHECK="${TMPDIR:-/tmp}/.codevibe-update-check"
|
|
46
|
-
if [ -s "$_CV_UPDATE_MSG" ]; then
|
|
47
|
-
cat "$_CV_UPDATE_MSG" >&2
|
|
48
|
-
echo "" >&2
|
|
49
|
-
fi
|
|
50
|
-
if [ ! -f "$_CV_UPDATE_CHECK" ] || [ "$(find "$_CV_UPDATE_CHECK" -mmin +1440 2>/dev/null)" ]; then
|
|
51
|
-
(
|
|
52
|
-
_CURRENT=$(node -p "require('$SCRIPT_DIR/../package.json').version" 2>/dev/null)
|
|
53
|
-
_LATEST=$(npm view @quantiya/codevibe version 2>/dev/null)
|
|
54
|
-
if [ -n "$_CURRENT" ] && [ -n "$_LATEST" ] && [ "$_CURRENT" != "$_LATEST" ]; then
|
|
55
|
-
echo -e "\033[33m⚠️ CodeVibe update available ($_CURRENT → $_LATEST). Run: codevibe update\033[0m" > "$_CV_UPDATE_MSG" 2>/dev/null
|
|
56
|
-
else
|
|
57
|
-
rm -f "$_CV_UPDATE_MSG" 2>/dev/null
|
|
58
|
-
fi
|
|
59
|
-
touch "$_CV_UPDATE_CHECK" 2>/dev/null
|
|
60
|
-
) &
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
|
-
# Activation telemetry (background, non-blocking, no PII)
|
|
64
|
-
_CID="$(echo "$(uname -n)-$(id -u)" | (sha256sum 2>/dev/null || shasum -a 256 2>/dev/null || echo "anonymous-fallback ") | cut -c1-36)"
|
|
65
|
-
_SRC="${CODEVIBE_TELEMETRY_SOURCE:-production}"
|
|
66
|
-
curl -s -X POST "https://www.google-analytics.com/mp/collect?measurement_id=G-GS74YEQTB8&api_secret=lAfOF6OxRzSQ-NsLBRjhAg" \
|
|
67
|
-
-H "Content-Type: application/json" \
|
|
68
|
-
-d "{\"client_id\":\"${_CID}\",\"events\":[{\"name\":\"wrapper_launched\",\"params\":{\"agent\":\"claude\",\"platform\":\"$(uname -s)\",\"source\":\"${_SRC}\"}}]}" \
|
|
69
|
-
>/dev/null 2>&1 &
|
|
70
|
-
|
|
71
|
-
exec "$DELEGATE" "$@"
|
package/bin/codevibe-codex
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Thin wrapper that delegates to @quantiya/codevibe-codex-plugin
|
|
3
|
-
|
|
4
|
-
SOURCE="${BASH_SOURCE[0]}"
|
|
5
|
-
while [ -L "$SOURCE" ]; do
|
|
6
|
-
DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
7
|
-
SOURCE="$(readlink "$SOURCE")"
|
|
8
|
-
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE"
|
|
9
|
-
done
|
|
10
|
-
SCRIPT_DIR="$(cd "$(dirname "$SOURCE")" && pwd)"
|
|
11
|
-
|
|
12
|
-
DELEGATE="$SCRIPT_DIR/../node_modules/@quantiya/codevibe-codex-plugin/bin/codevibe-codex"
|
|
13
|
-
|
|
14
|
-
if [ ! -f "$DELEGATE" ]; then
|
|
15
|
-
echo "Error: @quantiya/codevibe-codex-plugin not found. Try reinstalling: npm install -g @quantiya/codevibe" >&2
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
case "${1:-}" in
|
|
20
|
-
login|logout|help|--help|-h|version|--version|-v)
|
|
21
|
-
;;
|
|
22
|
-
*)
|
|
23
|
-
if ! command -v codex >/dev/null 2>&1; then
|
|
24
|
-
cat >&2 <<'EOF'
|
|
25
|
-
|
|
26
|
-
Codex CLI is not installed on this system.
|
|
27
|
-
|
|
28
|
-
CodeVibe attaches to the Codex CLI — you need it installed first.
|
|
29
|
-
|
|
30
|
-
Install Codex CLI:
|
|
31
|
-
npm install -g @openai/codex
|
|
32
|
-
|
|
33
|
-
Then run codevibe-codex again.
|
|
34
|
-
|
|
35
|
-
Learn more: https://quantiya.ai/codevibe
|
|
36
|
-
EOF
|
|
37
|
-
exit 1
|
|
38
|
-
fi
|
|
39
|
-
;;
|
|
40
|
-
esac
|
|
41
|
-
|
|
42
|
-
# Update check — show cached result from previous check, then refresh in background.
|
|
43
|
-
_CV_UPDATE_MSG="${TMPDIR:-/tmp}/.codevibe-update-msg"
|
|
44
|
-
_CV_UPDATE_CHECK="${TMPDIR:-/tmp}/.codevibe-update-check"
|
|
45
|
-
if [ -s "$_CV_UPDATE_MSG" ]; then
|
|
46
|
-
cat "$_CV_UPDATE_MSG" >&2
|
|
47
|
-
echo "" >&2
|
|
48
|
-
fi
|
|
49
|
-
if [ ! -f "$_CV_UPDATE_CHECK" ] || [ "$(find "$_CV_UPDATE_CHECK" -mmin +1440 2>/dev/null)" ]; then
|
|
50
|
-
(
|
|
51
|
-
_CURRENT=$(node -p "require('$SCRIPT_DIR/../package.json').version" 2>/dev/null)
|
|
52
|
-
_LATEST=$(npm view @quantiya/codevibe version 2>/dev/null)
|
|
53
|
-
if [ -n "$_CURRENT" ] && [ -n "$_LATEST" ] && [ "$_CURRENT" != "$_LATEST" ]; then
|
|
54
|
-
echo -e "\033[33m⚠️ CodeVibe update available ($_CURRENT → $_LATEST). Run: codevibe update\033[0m" > "$_CV_UPDATE_MSG" 2>/dev/null
|
|
55
|
-
else
|
|
56
|
-
rm -f "$_CV_UPDATE_MSG" 2>/dev/null
|
|
57
|
-
fi
|
|
58
|
-
touch "$_CV_UPDATE_CHECK" 2>/dev/null
|
|
59
|
-
) &
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
# Activation telemetry (background, non-blocking, no PII)
|
|
63
|
-
_CID="$(echo "$(uname -n)-$(id -u)" | (sha256sum 2>/dev/null || shasum -a 256 2>/dev/null || echo "anonymous-fallback ") | cut -c1-36)"
|
|
64
|
-
_SRC="${CODEVIBE_TELEMETRY_SOURCE:-production}"
|
|
65
|
-
curl -s -X POST "https://www.google-analytics.com/mp/collect?measurement_id=G-GS74YEQTB8&api_secret=lAfOF6OxRzSQ-NsLBRjhAg" \
|
|
66
|
-
-H "Content-Type: application/json" \
|
|
67
|
-
-d "{\"client_id\":\"${_CID}\",\"events\":[{\"name\":\"wrapper_launched\",\"params\":{\"agent\":\"codex\",\"platform\":\"$(uname -s)\",\"source\":\"${_SRC}\"}}]}" \
|
|
68
|
-
>/dev/null 2>&1 &
|
|
69
|
-
|
|
70
|
-
exec "$DELEGATE" "$@"
|