@quantiya/codevibe 2.0.7 → 2.0.8
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 +171 -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,47 @@ 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 ""
|
|
72
|
+
echo "Local model:"
|
|
73
|
+
echo " model install Install the CodeVibe-managed local model (Pro/Max)"
|
|
74
|
+
echo " model status Show local-model status"
|
|
75
|
+
echo " model remove Remove the managed local model"
|
|
57
76
|
echo ""
|
|
58
|
-
echo "
|
|
59
|
-
echo "
|
|
60
|
-
echo "
|
|
77
|
+
echo "Maintenance:"
|
|
78
|
+
echo " update Update CodeVibe packages and the Claude plugin"
|
|
79
|
+
echo " version Show installed package and agent versions"
|
|
80
|
+
echo " --help, -h Show this help"
|
|
61
81
|
echo ""
|
|
62
|
-
echo "
|
|
63
|
-
echo "
|
|
64
|
-
echo "
|
|
65
|
-
echo "
|
|
82
|
+
echo "Free opens Companion. Pro/Max chooses Companion or Orchestration."
|
|
83
|
+
echo "--agent skips the mode and agent pickers and saves that Companion agent."
|
|
84
|
+
echo "Use -- before agent-specific arguments."
|
|
85
|
+
echo ""
|
|
86
|
+
echo "Inside Orchestration: /reviewer-setup, /reviewers, /status, /help"
|
|
66
87
|
echo ""
|
|
67
88
|
echo -e "${DIM}https://quantiya.ai/codevibe${NC}"
|
|
68
89
|
echo ""
|
|
@@ -193,12 +214,12 @@ do_update() {
|
|
|
193
214
|
fi
|
|
194
215
|
echo ""
|
|
195
216
|
|
|
196
|
-
# ─── Step 1: Update the global meta-package
|
|
217
|
+
# ─── Step 1: Update the global meta-package on the CodeVibe 2.x channel ───
|
|
197
218
|
echo -e "${PURPLE}▸${NC} Updating @quantiya/codevibe..."
|
|
198
219
|
# Capture output so we can check npm's exit status directly instead of the
|
|
199
220
|
# pipe's (tail's exit status would mask npm failures without `set -o pipefail`).
|
|
200
221
|
local npm_output
|
|
201
|
-
if ! npm_output=$(npm install -g --force @quantiya/codevibe@
|
|
222
|
+
if ! npm_output=$(npm install -g --force @quantiya/codevibe@next 2>&1); then
|
|
202
223
|
echo "$npm_output" | tail -10
|
|
203
224
|
echo ""
|
|
204
225
|
echo -e "${YELLOW}!${NC} Meta-package update failed. Check the output above, fix the issue, and retry 'codevibe update'."
|
|
@@ -314,18 +335,117 @@ do_update() {
|
|
|
314
335
|
exec "$0" version
|
|
315
336
|
}
|
|
316
337
|
|
|
338
|
+
# ─── Daily update notice ────────────────────────────────────────────
|
|
339
|
+
#
|
|
340
|
+
# The retired per-agent wrappers used to show a cached update notice and
|
|
341
|
+
# refresh it in the background. Keep that behavior on the single public
|
|
342
|
+
# launcher so wrapper removal does not silently remove upgrade visibility.
|
|
343
|
+
|
|
344
|
+
cache_entry_owner_uid() {
|
|
345
|
+
stat -f '%u' "$1" 2>/dev/null || stat -c '%u' "$1" 2>/dev/null
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
ensure_update_cache_dir() {
|
|
349
|
+
local cache_base cache_dir owner
|
|
350
|
+
cache_base="${XDG_CACHE_HOME:-${HOME:+$HOME/.cache}}"
|
|
351
|
+
[ -n "$cache_base" ] || return 1
|
|
352
|
+
cache_dir="$cache_base/codevibe"
|
|
353
|
+
|
|
354
|
+
# Never trust a symlinked or non-directory cache root. A custom
|
|
355
|
+
# XDG_CACHE_HOME may point into a shared location, so ownership is checked
|
|
356
|
+
# even after a successful mkdir (which also closes the create race).
|
|
357
|
+
if [ -e "$cache_dir" ] || [ -L "$cache_dir" ]; then
|
|
358
|
+
[ -d "$cache_dir" ] && [ ! -L "$cache_dir" ] || return 1
|
|
359
|
+
else
|
|
360
|
+
(umask 077; mkdir -p "$cache_dir" 2>/dev/null) || return 1
|
|
361
|
+
fi
|
|
362
|
+
owner=$(cache_entry_owner_uid "$cache_dir") || return 1
|
|
363
|
+
[ "$owner" = "$(id -u)" ] || return 1
|
|
364
|
+
chmod 700 "$cache_dir" 2>/dev/null || return 1
|
|
365
|
+
printf '%s\n' "$cache_dir"
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
update_cache_version() {
|
|
369
|
+
local current
|
|
370
|
+
current=$(node -p "require('$PACKAGE_DIR/package.json').version" 2>/dev/null)
|
|
371
|
+
case "$current" in
|
|
372
|
+
''|*[!A-Za-z0-9._-]*) current="unknown" ;;
|
|
373
|
+
esac
|
|
374
|
+
printf '%s\n' "$current"
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
is_safe_update_cache_file() {
|
|
378
|
+
local owner
|
|
379
|
+
[ -f "$1" ] && [ ! -L "$1" ] || return 1
|
|
380
|
+
owner=$(cache_entry_owner_uid "$1") || return 1
|
|
381
|
+
[ "$owner" = "$(id -u)" ]
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
atomic_write_update_cache_file() {
|
|
385
|
+
local target="$1" content="$2" cache_dir tmp
|
|
386
|
+
cache_dir="${target%/*}"
|
|
387
|
+
tmp=$(mktemp "$cache_dir/.update-tmp.XXXXXX") || return 1
|
|
388
|
+
chmod 600 "$tmp" 2>/dev/null || {
|
|
389
|
+
rm -f "$tmp"
|
|
390
|
+
return 1
|
|
391
|
+
}
|
|
392
|
+
if ! printf '%s\n' "$content" > "$tmp"; then
|
|
393
|
+
rm -f "$tmp"
|
|
394
|
+
return 1
|
|
395
|
+
fi
|
|
396
|
+
if ! mv -f "$tmp" "$target"; then
|
|
397
|
+
rm -f "$tmp"
|
|
398
|
+
return 1
|
|
399
|
+
fi
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
show_cached_update_notice() {
|
|
403
|
+
local cache_dir current message_file
|
|
404
|
+
cache_dir=$(ensure_update_cache_dir) || return 0
|
|
405
|
+
current=$(update_cache_version)
|
|
406
|
+
message_file="$cache_dir/update-msg-$current"
|
|
407
|
+
if is_safe_update_cache_file "$message_file" && [ -s "$message_file" ]; then
|
|
408
|
+
cat "$message_file" >&2
|
|
409
|
+
echo "" >&2
|
|
410
|
+
fi
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
is_newer_version() {
|
|
414
|
+
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"
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
refresh_update_notice_if_due() {
|
|
418
|
+
local cache_dir current message_file check_file
|
|
419
|
+
cache_dir=$(ensure_update_cache_dir) || return 0
|
|
420
|
+
current=$(update_cache_version)
|
|
421
|
+
message_file="$cache_dir/update-msg-$current"
|
|
422
|
+
check_file="$cache_dir/update-check-$current"
|
|
423
|
+
|
|
424
|
+
if is_safe_update_cache_file "$check_file" \
|
|
425
|
+
&& [ -z "$(find "$check_file" -mmin +1440 -print -quit 2>/dev/null)" ]; then
|
|
426
|
+
return 0
|
|
427
|
+
fi
|
|
428
|
+
|
|
429
|
+
(
|
|
430
|
+
local latest notice
|
|
431
|
+
latest=$(npm view @quantiya/codevibe@next version 2>/dev/null)
|
|
432
|
+
if [ -n "$current" ] && [ -n "$latest" ]; then
|
|
433
|
+
if is_newer_version "$latest" "$current"; then
|
|
434
|
+
notice=$(printf '\033[33m⚠️ CodeVibe update available (%s → %s). Run: codevibe update\033[0m' "$current" "$latest")
|
|
435
|
+
atomic_write_update_cache_file "$message_file" "$notice" || true
|
|
436
|
+
elif [ -e "$message_file" ] || [ -L "$message_file" ]; then
|
|
437
|
+
rm -f "$message_file" 2>/dev/null
|
|
438
|
+
fi
|
|
439
|
+
fi
|
|
440
|
+
atomic_write_update_cache_file "$check_file" "$(date +%s)" || true
|
|
441
|
+
) >/dev/null 2>&1 &
|
|
442
|
+
}
|
|
443
|
+
|
|
317
444
|
# ─── Command routing ─────────────────────────────────────────────────
|
|
318
445
|
|
|
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.
|
|
446
|
+
# Interactive launches, direct --agent launches, and local-model commands are
|
|
447
|
+
# owned by the TypeScript shell CLI. Administrative commands stay in this thin
|
|
448
|
+
# Bash router.
|
|
329
449
|
|
|
330
450
|
case "$1" in
|
|
331
451
|
--help|-h|help)
|
|
@@ -340,11 +460,8 @@ case "$1" in
|
|
|
340
460
|
do_update
|
|
341
461
|
exit $?
|
|
342
462
|
;;
|
|
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.
|
|
463
|
+
login|logout|status|reset-device|vendor-key)
|
|
464
|
+
# Delegate shared account administration to codevibe-core.
|
|
348
465
|
CORE_CLI="$PACKAGE_DIR/node_modules/@quantiya/codevibe-core/bin/codevibe.js"
|
|
349
466
|
if [ ! -f "$CORE_CLI" ]; then
|
|
350
467
|
# Local-dev fallback: meta + core repos as workspace siblings, so
|
|
@@ -355,17 +472,15 @@ case "$1" in
|
|
|
355
472
|
if [ -f "$WORKSPACE_CLI" ]; then
|
|
356
473
|
CORE_CLI="$WORKSPACE_CLI"
|
|
357
474
|
else
|
|
358
|
-
echo "Error: @quantiya/codevibe-core not found. Try reinstalling: npm install -g @quantiya/codevibe" >&2
|
|
475
|
+
echo "Error: @quantiya/codevibe-core not found. Try reinstalling: npm install -g @quantiya/codevibe@next" >&2
|
|
359
476
|
exit 1
|
|
360
477
|
fi
|
|
361
478
|
fi
|
|
362
479
|
exec node "$CORE_CLI" "$@"
|
|
363
480
|
;;
|
|
364
|
-
model|""|--
|
|
365
|
-
#
|
|
366
|
-
# the
|
|
367
|
-
# parser handles flag re-ordering + the `--` separator. Per
|
|
368
|
-
# Stage 2 r2 Codex MEDIUM-1.
|
|
481
|
+
model|""|--agent)
|
|
482
|
+
# Empty args enter the interactive route. `--agent` enters Companion
|
|
483
|
+
# directly, and the TS parser owns the `--` vendor-argument boundary.
|
|
369
484
|
#
|
|
370
485
|
# `model` (install/status/remove/health-check) also routes here: the
|
|
371
486
|
# orchestration-shell CLI owns the local Gemma runtime, so it dispatches
|
|
@@ -373,6 +488,10 @@ case "$1" in
|
|
|
373
488
|
# `codevibe model ...` fell through to the unknown-command arm on a real
|
|
374
489
|
# host install (it only worked in-container where cli.js is invoked
|
|
375
490
|
# directly).
|
|
491
|
+
if [ "$1" != "model" ]; then
|
|
492
|
+
show_cached_update_notice
|
|
493
|
+
refresh_update_notice_if_due
|
|
494
|
+
fi
|
|
376
495
|
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
496
|
if [ -n "$SHELL_CLI" ] && [ -f "$SHELL_CLI" ]; then
|
|
378
497
|
exec node "$SHELL_CLI" "$@"
|
|
@@ -383,16 +502,26 @@ case "$1" in
|
|
|
383
502
|
exec node "$SHELL_CLI_LOCAL" "$@"
|
|
384
503
|
fi
|
|
385
504
|
# Workspace-sibling fallback: meta + core repos as siblings, so
|
|
386
|
-
# `./bin/codevibe --
|
|
505
|
+
# `./bin/codevibe --agent codex` works directly from a
|
|
387
506
|
# checked-out workspace without `npm install`. No effect on global
|
|
388
507
|
# install (primary path + node_modules fallback resolve first).
|
|
389
508
|
SHELL_CLI_WORKSPACE="$(dirname "$PACKAGE_DIR")/codevibe-core/dist/orchestration-shell/cli.js"
|
|
390
509
|
if [ -f "$SHELL_CLI_WORKSPACE" ]; then
|
|
391
510
|
exec node "$SHELL_CLI_WORKSPACE" "$@"
|
|
392
511
|
fi
|
|
393
|
-
echo "Error: codevibe-core orchestration-shell CLI not found. Try reinstalling: npm install -g @quantiya/codevibe" >&2
|
|
512
|
+
echo "Error: codevibe-core orchestration-shell CLI not found. Try reinstalling: npm install -g @quantiya/codevibe@next" >&2
|
|
394
513
|
exit 1
|
|
395
514
|
;;
|
|
515
|
+
orchestration)
|
|
516
|
+
echo "'codevibe orchestration ...' has been removed." >&2
|
|
517
|
+
echo "Enter Orchestration with 'codevibe', then use /reviewer-setup, /reviewers, or /status." >&2
|
|
518
|
+
exit 2
|
|
519
|
+
;;
|
|
520
|
+
--mode|--companion|--orchestration|--forget-agent|--with-local-model|--no-orchestration)
|
|
521
|
+
echo "'$1' has been removed." >&2
|
|
522
|
+
echo "Run 'codevibe' for the interactive route, or 'codevibe --agent claude|codex|agy' for direct Companion." >&2
|
|
523
|
+
exit 2
|
|
524
|
+
;;
|
|
396
525
|
*)
|
|
397
526
|
echo "Unknown command: $1" >&2
|
|
398
527
|
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.8",
|
|
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.7",
|
|
18
|
+
"@quantiya/codevibe-claude-plugin": "2.0.7",
|
|
19
|
+
"@quantiya/codevibe-codex-plugin": "2.0.7",
|
|
20
|
+
"@quantiya/codevibe-core": "2.0.7"
|
|
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" "$@"
|