@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 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,48 @@ 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 " 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 "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."
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 "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"
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 (pulls latest core + plugins) ──
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@latest 2>&1); then
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
- # 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.
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|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.
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|""|--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.
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 --mode orchestration` works directly from a
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.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.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.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.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" "$@"
@@ -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" "$@"