@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # CodeVibe
2
2
 
3
- **Control Claude Code, OpenAI Codex CLI, and Antigravity CLI from your iPhone and Android.**
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
- ## One-command install
13
+ ## Install the 2.x candidate
14
14
 
15
15
  ```bash
16
- curl -fsSL https://quantiya.ai/codevibe/install.sh | bash
16
+ npm install -g @quantiya/codevibe@next
17
+ codevibe login
17
18
  ```
18
19
 
19
- This installs everything automatically: Node.js, tmux, Claude Code, the CodeVibe meta-package, and the Claude plugin. After it finishes, download the mobile app, sign in with the same Apple or Google account, and run:
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-claude # for Claude Code
23
- codevibe-codex # for OpenAI Codex CLI
24
- codevibe-agy # for Antigravity CLI
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
- ### Manual install
32
+ ### Stable 1.x installer
30
33
 
31
34
  ```bash
32
- npm install -g @quantiya/codevibe
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** 18.0.0+
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
- - Wrapper binaries: `codevibe-claude`, `codevibe-codex`, `codevibe-agy`
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
- # Manages authentication, updates, and plugin lifecycle.
6
- # Authentication is shared across all CodeVibe plugins (Claude, Codex, Antigravity).
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} — Control AI coding agents from your phone"
46
+ echo -e "${BOLD}CodeVibe${NC} — Companion and orchestration for AI coding agents"
46
47
  echo ""
47
- echo "Usage: codevibe <command>"
48
+ echo "Usage:"
49
+ echo " codevibe"
50
+ echo " codevibe --agent <claude|codex|agy> [-- <agent args>]"
51
+ echo " codevibe <command>"
48
52
  echo ""
49
- echo "Commands:"
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 authentication status"
53
- echo " update Update all CodeVibe packages and Claude plugin"
54
- echo " version Show installed package versions"
55
- echo " reset-device Reset device identity (destructive)"
56
- echo " orchestration Configure Quorum 2.0 reviewer policy (enable/disable/configure)"
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 "Run 'codevibe' with no arguments to launch the orchestration shell"
59
- echo "(Pro/Max only — Free tier hands off to Companion mode)."
60
- echo "Use --mode {companion|orchestration} to override mode selection."
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 "Agent wrappers:"
63
- echo " codevibe-claude Start Claude Code with mobile sync"
64
- echo " codevibe-codex Start Codex CLI with mobile sync"
65
- echo " codevibe-agy Start Antigravity CLI with mobile sync"
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 (pulls latest core + plugins) ──
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@latest 2>&1); then
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
- # CodeVibe 2.0 CP-1.a: when no recognized subcommand is provided AND
320
- # argv either contains a mode flag (`--mode|--orchestration|--companion`)
321
- # OR no args at all, dispatch to the orchestration-shell CLI bundled
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|orchestration)
344
- # Delegate to codevibe-core CLI. `orchestration` is a Quorum 2.0
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|""|--mode|--orchestration|--companion|--agent|--forget-agent|--)
365
- # CodeVibe 2.0 CP-1.a: empty args OR any mode/agent/forget flag OR
366
- # the POSIX `--` argv terminator → orchestration shell. The TS
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 --mode orchestration` works directly from a
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.7",
4
- "description": "CodeVibe — Control Claude Code, Codex CLI, and Antigravity CLI from your iPhone and Android. Real-time sync, voice prompts, approve file edits, E2E encrypted.",
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.6",
18
- "@quantiya/codevibe-claude-plugin": "2.0.6",
19
- "@quantiya/codevibe-codex-plugin": "2.0.6",
20
- "@quantiya/codevibe-core": "2.0.6"
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" "$@"
@@ -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" "$@"
@@ -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" "$@"