@devlln/helm
Advanced tools
+2
-2
@@ -48,3 +48,3 @@ #!/usr/bin/env node | ||
| helm bridge up [--lan] | ||
| helm bridge pair [--no-start] | ||
| helm bridge pair [--no-start] [--show-link] | ||
| helm bridge status | ||
@@ -56,3 +56,3 @@ helm bridge down | ||
| up Start the local bridge and Codex app-server helper. | ||
| pair Start the bridge if needed, then print the pairing QR and setup link. | ||
| pair Start the bridge if needed, then print the pairing QR. | ||
| status Show bridge health, pairing details, and voice-provider availability. | ||
@@ -59,0 +59,0 @@ down Stop the local prototype bridge stack. |
| { | ||
| "name": "codex-voice-remote-bridge", | ||
| "version": "0.1.1", | ||
| "version": "0.1.3", | ||
| "lockfileVersion": 3, | ||
@@ -9,3 +9,3 @@ "requires": true, | ||
| "name": "codex-voice-remote-bridge", | ||
| "version": "0.1.1", | ||
| "version": "0.1.3", | ||
| "dependencies": { | ||
@@ -12,0 +12,0 @@ "dotenv": "^16.6.1", |
| { | ||
| "name": "codex-voice-remote-bridge", | ||
| "version": "0.1.1", | ||
| "version": "0.1.3", | ||
| "private": true, | ||
@@ -5,0 +5,0 @@ "type": "module", |
+1
-1
| { | ||
| "name": "@devlln/helm", | ||
| "version": "0.1.2", | ||
| "version": "0.1.3", | ||
| "private": false, | ||
@@ -5,0 +5,0 @@ "description": "Helm CLI bridge installer and runtime helpers.", |
@@ -91,7 +91,7 @@ #!/usr/bin/env bash | ||
| helm-enable-shell-integration | ||
| 3. Relaunch GUI apps like Codex, Claude, Grok, and VS Code so they inherit helm's runtime shim PATH. | ||
| 3. Relaunch GUI apps like Codex, Claude, and Grok so they inherit helm's runtime shim PATH. | ||
| 4. Start the bridge for cross-device use: | ||
| helm-prototype-up | ||
| 5. Print a pairing QR in the terminal if you need it again: | ||
| helm-pairing-qr | ||
| helm pair | ||
| 6. In a Helm client, scan the pairing QR. | ||
@@ -98,0 +98,0 @@ 7. Start Codex CLI, Claude Code, or Grok CLI sessions normally. |
@@ -132,5 +132,5 @@ #!/usr/bin/env bash | ||
| Next steps: | ||
| 1. Relaunch GUI apps like Codex, Claude, and VS Code so they inherit the new PATH. | ||
| 1. Relaunch GUI apps like Codex and Claude so they inherit the new PATH. | ||
| 2. Run helm-enable-binary-capture if desktop apps still bypass PATH and launch codex or claude by absolute symlink path. | ||
| 3. Enable shell integration if you also want new terminal windows to pick up the same shim path automatically. | ||
| EOF |
+48
-58
@@ -13,2 +13,3 @@ #!/usr/bin/env bash | ||
| PAIRING_QR_STATUS="not printed" | ||
| TAILSCALE_NEXT_STEP="" | ||
@@ -23,3 +24,3 @@ usage() { | ||
| 1. Helm CLI, bridge helpers, runtime shims, shell integration, and binary capture | ||
| 2. an interactive Tailscale sign-in prompt for easy remote pairing | ||
| 2. guided Tailscale setup for easy remote pairing | ||
| 3. a terminal pairing QR after bridge startup | ||
@@ -32,3 +33,3 @@ | ||
| Options: | ||
| --skip-tailscale Skip the Tailscale sign-in prompt. | ||
| --skip-tailscale Skip Tailscale setup. | ||
| --no-pairing-qr Do not print the terminal pairing QR after bridge startup. | ||
@@ -86,2 +87,12 @@ --yes Accept Helm's setup prompts automatically when a prompt is offered. | ||
| open_url() { | ||
| local url="$1" | ||
| if command -v open >/dev/null 2>&1; then | ||
| open "$url" >/dev/null 2>&1 || true | ||
| else | ||
| echo "$url" | ||
| fi | ||
| } | ||
| wait_for_tailscale_ip() { | ||
@@ -111,12 +122,6 @@ local attempts="${1:-30}" | ||
| TAILSCALE_STATUS="not installed" | ||
| echo "[helm] Tailscale is the easiest way to pair a remote Helm client when you are away from this Mac." | ||
| if prompt_yes_no "[helm] Tailscale is not installed. Open the download page now?" "yes"; then | ||
| if command -v open >/dev/null 2>&1; then | ||
| open "https://tailscale.com/download" | ||
| else | ||
| echo "[helm] Download Tailscale: https://tailscale.com/download" | ||
| fi | ||
| else | ||
| echo "[helm] Skipping Tailscale setup. Pairing may only work on local networks until Tailscale is connected." | ||
| fi | ||
| TAILSCALE_NEXT_STEP="Install Tailscale from the browser that just opened, sign in, then run: helm pair" | ||
| echo "[helm] Tailscale is not installed. Opening the download page..." | ||
| open_url "https://tailscale.com/download" | ||
| echo "[helm] Finish the install, sign in, then rerun 'helm pair' to print your QR." | ||
| return | ||
@@ -129,3 +134,3 @@ fi | ||
| TAILSCALE_STATUS="active at $ip" | ||
| echo "[helm] Tailscale is connected at $ip." | ||
| echo "[helm] Tailscale is ready." | ||
| return | ||
@@ -135,24 +140,19 @@ fi | ||
| TAILSCALE_STATUS="installed but not connected" | ||
| echo "[helm] Tailscale is installed but this Mac is not signed in to a tailnet." | ||
| if ! prompt_yes_no "[helm] Sign in to Tailscale now so a remote Helm client can pair over your tailnet?" "yes"; then | ||
| echo "[helm] Skipping Tailscale sign-in. You can run 'tailscale up' later, then rerun 'helm-pairing-qr'." | ||
| return | ||
| TAILSCALE_NEXT_STEP="Finish the Tailscale sign-in flow that just opened, then run: helm pair" | ||
| echo "[helm] Tailscale needs sign-in before Helm can print a remote pairing QR." | ||
| if command -v open >/dev/null 2>&1; then | ||
| open -a Tailscale >/dev/null 2>&1 || true | ||
| fi | ||
| open_url "https://login.tailscale.com/start" | ||
| echo "[helm] Opening Tailscale sign-in..." | ||
| tailscale up >/dev/null 2>&1 || true | ||
| echo "[helm] Starting Tailscale sign-in. Finish the browser/app login if prompted..." | ||
| if ! tailscale up; then | ||
| echo "[helm] 'tailscale up' did not complete. If you use the macOS Tailscale app, sign in there and rerun helm-install." >&2 | ||
| if command -v open >/dev/null 2>&1; then | ||
| open -a Tailscale >/dev/null 2>&1 || true | ||
| fi | ||
| fi | ||
| ip="$(wait_for_tailscale_ip 30 || true)" | ||
| if [[ -n "$ip" ]]; then | ||
| TAILSCALE_STATUS="active at $ip" | ||
| echo "[helm] Tailscale is connected at $ip." | ||
| TAILSCALE_NEXT_STEP="" | ||
| echo "[helm] Tailscale is ready." | ||
| else | ||
| TAILSCALE_STATUS="not connected" | ||
| echo "[helm] Tailscale is still not connected. Pairing QR will be easiest after you sign in and rerun 'helm-pairing-qr'." >&2 | ||
| echo "[helm] Finish the Tailscale sign-in flow, then rerun 'helm pair'." | ||
| fi | ||
@@ -199,6 +199,6 @@ } | ||
| echo "[helm] Installing CLI, bridge helpers, runtime shims, and binary capture..." | ||
| "$ROOT_DIR/scripts/install-helm-cli.sh" | ||
| echo "[helm] Installing Helm..." | ||
| "$ROOT_DIR/scripts/install-helm-cli.sh" >/dev/null | ||
| echo "[helm] Enabling shell integration..." | ||
| echo "[helm] Setting up your shell..." | ||
| SHELL_CMD=("$ROOT_DIR/scripts/install-helm-shell-integration.sh" --skip-cli-install) | ||
@@ -208,17 +208,15 @@ if [[ -n "$SHELL_NAME" ]]; then | ||
| fi | ||
| "${SHELL_CMD[@]}" | ||
| "${SHELL_CMD[@]}" >/dev/null | ||
| configure_tailscale_for_pairing | ||
| DETECTION_SUMMARY="$("$ROOT_DIR/scripts/detect-helm-platforms.sh" || true)" | ||
| if [[ "${HELM_INSTALL_SKIP_RUNTIME_START:-0}" == "1" ]]; then | ||
| BRIDGE_STATUS="skipped (HELM_INSTALL_SKIP_RUNTIME_START=1)" | ||
| else | ||
| echo "[helm] Starting the local bridge and Codex app-server when available..." | ||
| if HELM_PROTOTYPE_SKIP_PAIRING_QR=1 "$ROOT_DIR/scripts/prototype-up.sh"; then | ||
| echo "[helm] Starting the bridge..." | ||
| if HELM_PROTOTYPE_COMPACT=1 HELM_PROTOTYPE_SKIP_PAIRING_QR=1 "$ROOT_DIR/scripts/prototype-up.sh" >/dev/null; then | ||
| BRIDGE_STATUS="running" | ||
| else | ||
| BRIDGE_STATUS="not started" | ||
| echo "[helm] Bridge bring-up did not complete. Helm is installed, but Codex or bridge prerequisites still need attention." >&2 | ||
| echo "[helm] Helm installed, but the bridge did not start. Run 'helm pair' after restarting Codex and Claude." >&2 | ||
| fi | ||
@@ -238,13 +236,13 @@ fi | ||
| PAIRING_QR_STATUS="failed" | ||
| echo "[helm] Could not print the pairing QR. Re-run 'helm-pairing-qr' after the bridge is reachable." >&2 | ||
| echo "[helm] Could not print the pairing QR. Re-run 'helm pair' after the bridge is reachable." >&2 | ||
| fi | ||
| fi | ||
| PAIRING_NEXT_STEP="In a Helm client, scan the QR printed above. To print it again, run: helm-pairing-qr" | ||
| PAIRING_NEXT_STEP="In a Helm client, scan the QR printed above. To print it again, run: helm pair" | ||
| if [[ "$PAIRING_QR_STATUS" == "skipped" ]]; then | ||
| PAIRING_NEXT_STEP="Print a pairing QR when you are ready: helm-pairing-qr" | ||
| PAIRING_NEXT_STEP="Print a pairing QR when you are ready: helm pair" | ||
| elif [[ "$PAIRING_QR_STATUS" == "not printed (bridge is not running)" ]]; then | ||
| PAIRING_NEXT_STEP="Start the bridge, then print a pairing QR: helm-prototype-up && helm-pairing-qr" | ||
| PAIRING_NEXT_STEP="Start the bridge, then print a pairing QR: helm-prototype-up && helm pair" | ||
| elif [[ "$PAIRING_QR_STATUS" != "printed" ]]; then | ||
| PAIRING_NEXT_STEP="Print the pairing QR again after the bridge is reachable: helm-pairing-qr" | ||
| PAIRING_NEXT_STEP="Print the pairing QR again after the bridge is reachable: helm pair" | ||
| fi | ||
@@ -254,19 +252,11 @@ | ||
| Helm install is complete. | ||
| Helm is ready. | ||
| Installed by default: | ||
| - Helm CLI, bridge helpers, runtime shims, binary capture, and shell integration | ||
| Restart Codex and Claude. | ||
| EOF | ||
| Bridge: | ||
| - $BRIDGE_STATUS | ||
| - tailscale: $TAILSCALE_STATUS | ||
| - pairing QR: $PAIRING_QR_STATUS | ||
| Detected local runtimes and setup support: | ||
| $(while IFS= read -r line; do printf ' %s\n' "$line"; done <<<"$DETECTION_SUMMARY") | ||
| Next steps: | ||
| 1. Relaunch GUI apps like Codex, Claude, and VS Code so they inherit Helm's runtime capture. | ||
| 2. $PAIRING_NEXT_STEP | ||
| 3. Start Codex, Claude, Grok, or local Ollama model sessions. Helm will keep those sessions discoverable. | ||
| EOF | ||
| if [[ -n "$TAILSCALE_NEXT_STEP" ]]; then | ||
| printf '%s\n' "$TAILSCALE_NEXT_STEP" | ||
| elif [[ "$PAIRING_QR_STATUS" != "printed" ]]; then | ||
| printf '%s\n' "$PAIRING_NEXT_STEP" | ||
| fi |
@@ -7,6 +7,7 @@ #!/usr/bin/env bash | ||
| AUTO_START=1 | ||
| SHOW_LINK=0 | ||
| usage() { | ||
| cat <<'EOF' | ||
| Usage: helm pair [--no-start] | ||
| Usage: helm pair [--no-start] [--show-link] | ||
@@ -18,3 +19,4 @@ Print a QR code that pairs iPhone Helm with this Mac's bridge. | ||
| Options: | ||
| --no-start Only print a QR if the bridge is already running. | ||
| --no-start Only print a QR if the bridge is already running. | ||
| --show-link Also print the raw setup link after the QR. | ||
| EOF | ||
@@ -29,2 +31,6 @@ } | ||
| ;; | ||
| --show-link) | ||
| SHOW_LINK=1 | ||
| shift | ||
| ;; | ||
| -h|--help) | ||
@@ -188,5 +194,5 @@ usage | ||
| echo | ||
| echo "Setup link:" | ||
| echo "$SETUP_URL" | ||
| echo | ||
| echo "Helm prefers a non-loopback bridge URL when the bridge advertises one, so a connected Tailscale address is used automatically." | ||
| if [[ "$SHOW_LINK" -eq 1 ]]; then | ||
| echo "Setup link:" | ||
| echo "$SETUP_URL" | ||
| fi |
+11
-15
@@ -315,6 +315,7 @@ #!/usr/bin/env bash | ||
| PAIRING_JSON="$(curl -sf "$LOCAL_BRIDGE_URL/api/pairing")" | ||
| HEALTH_JSON="$(curl -sf "$LOCAL_BRIDGE_URL/health")" | ||
| if [[ "${HELM_PROTOTYPE_COMPACT:-0}" != "1" ]]; then | ||
| PAIRING_JSON="$(curl -sf "$LOCAL_BRIDGE_URL/api/pairing")" | ||
| HEALTH_JSON="$(curl -sf "$LOCAL_BRIDGE_URL/health")" | ||
| python3 - "$PAIRING_JSON" "$HEALTH_JSON" "$CODEX_APP_SERVER_URL" "$LOCAL_BRIDGE_URL" "$LOG_DIR" <<'PY' | ||
| python3 - "$PAIRING_JSON" "$HEALTH_JSON" "$CODEX_APP_SERVER_URL" "$LOCAL_BRIDGE_URL" "$LOG_DIR" <<'PY' | ||
| import json | ||
@@ -345,17 +346,12 @@ import sys | ||
| if setup_url: | ||
| print(f"Setup link: {setup_url}") | ||
| print(f"Setup link: {setup_url}") | ||
| print(f"Logs: {log_dir}") | ||
| print() | ||
| print("Next steps:") | ||
| print(" 1. Use helm bridge pair to reprint the QR or setup link.") | ||
| print(" 2. Use scripts/prototype-status.sh to reprint pairing and health info.") | ||
| print(" 3. Start Codex, Claude, Grok, or local Ollama sessions through Helm.") | ||
| print(" 4. Use scripts/prototype-down.sh when you want to stop the local stack.") | ||
| PY | ||
| if [[ "$TAILSCALE_ACTIVE" -eq 1 ]]; then | ||
| echo | ||
| echo "[prototype] Tailscale detected. helm is preferring the Tailscale bridge URL by default:" | ||
| echo "[prototype] http://${TAILSCALE_IP}:${BRIDGE_PORT}" | ||
| if [[ "$TAILSCALE_ACTIVE" -eq 1 ]]; then | ||
| echo | ||
| echo "[prototype] Tailscale detected. helm is preferring the Tailscale bridge URL by default:" | ||
| echo "[prototype] http://${TAILSCALE_IP}:${BRIDGE_PORT}" | ||
| fi | ||
| fi | ||
@@ -367,5 +363,5 @@ | ||
| if [[ -z "${OPENAI_API_KEY:-}" ]]; then | ||
| if [[ -z "${OPENAI_API_KEY:-}" && "${HELM_PROTOTYPE_COMPACT:-0}" != "1" ]]; then | ||
| echo | ||
| echo "[prototype] OPENAI_API_KEY is not set. Text control will work, but OpenAI Realtime Command and bridge speech will not." | ||
| fi |
@@ -78,3 +78,12 @@ #!/usr/bin/env bash | ||
| clear_latest_links_if_matching | ||
| rm -rf "$SANDBOX_ROOT" | ||
| local attempt | ||
| for attempt in 1 2 3; do | ||
| if rm -rf "$SANDBOX_ROOT" >/dev/null 2>&1; then | ||
| return | ||
| fi | ||
| sleep 1 | ||
| done | ||
| rm -rf "$SANDBOX_ROOT" >/dev/null 2>&1 || true | ||
| } | ||
@@ -81,0 +90,0 @@ |
Sorry, the diff of this file is too big to display
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
555563
-0.18%