happy-stacks 0.1.0 → 0.2.0

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.
Files changed (95) hide show
  1. package/README.md +130 -74
  2. package/bin/happys.mjs +140 -9
  3. package/docs/edison.md +381 -0
  4. package/docs/happy-development.md +733 -0
  5. package/docs/menubar.md +54 -0
  6. package/docs/paths-and-env.md +141 -0
  7. package/docs/server-flavors.md +61 -2
  8. package/docs/stacks.md +55 -4
  9. package/extras/swiftbar/auth-login.sh +10 -7
  10. package/extras/swiftbar/git-cache-refresh.sh +130 -0
  11. package/extras/swiftbar/happy-stacks.5s.sh +175 -83
  12. package/extras/swiftbar/happys-term.sh +128 -0
  13. package/extras/swiftbar/happys.sh +35 -0
  14. package/extras/swiftbar/install.sh +99 -13
  15. package/extras/swiftbar/lib/git.sh +309 -1
  16. package/extras/swiftbar/lib/icons.sh +2 -2
  17. package/extras/swiftbar/lib/render.sh +279 -132
  18. package/extras/swiftbar/lib/system.sh +64 -10
  19. package/extras/swiftbar/lib/utils.sh +469 -10
  20. package/extras/swiftbar/pnpm-term.sh +2 -122
  21. package/extras/swiftbar/pnpm.sh +4 -14
  22. package/extras/swiftbar/set-interval.sh +10 -5
  23. package/extras/swiftbar/set-server-flavor.sh +19 -10
  24. package/extras/swiftbar/wt-pr.sh +10 -3
  25. package/package.json +2 -1
  26. package/scripts/auth.mjs +833 -14
  27. package/scripts/build.mjs +24 -4
  28. package/scripts/cli-link.mjs +3 -3
  29. package/scripts/completion.mjs +15 -8
  30. package/scripts/daemon.mjs +200 -23
  31. package/scripts/dev.mjs +230 -57
  32. package/scripts/doctor.mjs +26 -21
  33. package/scripts/edison.mjs +1828 -0
  34. package/scripts/happy.mjs +3 -7
  35. package/scripts/init.mjs +275 -46
  36. package/scripts/install.mjs +14 -8
  37. package/scripts/lint.mjs +145 -0
  38. package/scripts/menubar.mjs +81 -8
  39. package/scripts/migrate.mjs +302 -0
  40. package/scripts/mobile.mjs +59 -21
  41. package/scripts/run.mjs +222 -43
  42. package/scripts/self.mjs +3 -7
  43. package/scripts/server_flavor.mjs +3 -3
  44. package/scripts/service.mjs +190 -38
  45. package/scripts/setup.mjs +790 -0
  46. package/scripts/setup_pr.mjs +182 -0
  47. package/scripts/stack.mjs +2273 -92
  48. package/scripts/stop.mjs +160 -0
  49. package/scripts/tailscale.mjs +164 -23
  50. package/scripts/test.mjs +144 -0
  51. package/scripts/tui.mjs +556 -0
  52. package/scripts/typecheck.mjs +145 -0
  53. package/scripts/ui_gateway.mjs +248 -0
  54. package/scripts/uninstall.mjs +21 -13
  55. package/scripts/utils/auth_files.mjs +58 -0
  56. package/scripts/utils/auth_login_ux.mjs +76 -0
  57. package/scripts/utils/auth_sources.mjs +12 -0
  58. package/scripts/utils/browser.mjs +22 -0
  59. package/scripts/utils/canonical_home.mjs +20 -0
  60. package/scripts/utils/{cli_registry.mjs → cli/cli_registry.mjs} +71 -0
  61. package/scripts/utils/{wizard.mjs → cli/wizard.mjs} +1 -1
  62. package/scripts/utils/config.mjs +13 -1
  63. package/scripts/utils/dev_auth_key.mjs +169 -0
  64. package/scripts/utils/dev_daemon.mjs +104 -0
  65. package/scripts/utils/dev_expo_web.mjs +112 -0
  66. package/scripts/utils/dev_server.mjs +183 -0
  67. package/scripts/utils/env.mjs +94 -23
  68. package/scripts/utils/env_file.mjs +36 -0
  69. package/scripts/utils/expo.mjs +96 -0
  70. package/scripts/utils/handy_master_secret.mjs +94 -0
  71. package/scripts/utils/happy_server_infra.mjs +484 -0
  72. package/scripts/utils/localhost_host.mjs +17 -0
  73. package/scripts/utils/ownership.mjs +135 -0
  74. package/scripts/utils/paths.mjs +5 -2
  75. package/scripts/utils/pm.mjs +132 -22
  76. package/scripts/utils/ports.mjs +51 -13
  77. package/scripts/utils/proc.mjs +75 -7
  78. package/scripts/utils/runtime.mjs +1 -3
  79. package/scripts/utils/sandbox.mjs +14 -0
  80. package/scripts/utils/server.mjs +61 -0
  81. package/scripts/utils/server_port.mjs +9 -0
  82. package/scripts/utils/server_urls.mjs +54 -0
  83. package/scripts/utils/stack_context.mjs +23 -0
  84. package/scripts/utils/stack_runtime_state.mjs +104 -0
  85. package/scripts/utils/stack_startup.mjs +208 -0
  86. package/scripts/utils/stack_stop.mjs +255 -0
  87. package/scripts/utils/stacks.mjs +38 -0
  88. package/scripts/utils/validate.mjs +42 -1
  89. package/scripts/utils/watch.mjs +63 -0
  90. package/scripts/utils/worktrees.mjs +57 -1
  91. package/scripts/where.mjs +14 -7
  92. package/scripts/worktrees.mjs +135 -15
  93. /package/scripts/utils/{args.mjs → cli/args.mjs} +0 -0
  94. /package/scripts/utils/{cli.mjs → cli/cli.mjs} +0 -0
  95. /package/scripts/utils/{smoke_help.mjs → cli/smoke_help.mjs} +0 -0
@@ -26,13 +26,18 @@ if [[ -z "$PLUGIN_DIR" ]]; then
26
26
  fi
27
27
  mkdir -p "$PLUGIN_DIR"
28
28
 
29
- TARGET="$PLUGIN_DIR/happy-stacks.${INTERVAL}.sh"
30
- HAPPY_STACKS_HOME_DIR="${HAPPY_STACKS_HOME_DIR:-$HOME/.happy-stacks}"
31
- HAPPY_LOCAL_DIR="${HAPPY_LOCAL_DIR:-$HAPPY_STACKS_HOME_DIR}"
29
+ PLUGIN_BASENAME="${HAPPY_STACKS_SWIFTBAR_PLUGIN_BASENAME:-${HAPPY_LOCAL_SWIFTBAR_PLUGIN_BASENAME:-happy-stacks}}"
30
+ TARGET="$PLUGIN_DIR/${PLUGIN_BASENAME}.${INTERVAL}.sh"
31
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
32
+ DEFAULT_HOME_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
33
+
34
+ CANONICAL_HOME_DIR="${HAPPY_STACKS_CANONICAL_HOME_DIR:-${HAPPY_LOCAL_CANONICAL_HOME_DIR:-$DEFAULT_HOME_DIR}}"
35
+ HAPPY_LOCAL_DIR="${HAPPY_LOCAL_DIR:-${HAPPY_STACKS_HOME_DIR:-$CANONICAL_HOME_DIR}}"
36
+ HAPPY_STACKS_HOME_DIR="${HAPPY_STACKS_HOME_DIR:-$HAPPY_LOCAL_DIR}"
32
37
  SOURCE="${HAPPY_LOCAL_DIR}/extras/swiftbar/happy-stacks.5s.sh"
33
38
 
34
39
  # If a happy-stacks plugin already exists, rename it into place; otherwise copy from repo source.
35
- EXISTING="$(ls "$PLUGIN_DIR"/happy-stacks.*.sh 2>/dev/null | head -1 || true)"
40
+ EXISTING="$(ls "$PLUGIN_DIR"/"${PLUGIN_BASENAME}".*.sh 2>/dev/null | head -1 || true)"
36
41
  if [[ -n "$EXISTING" ]]; then
37
42
  if [[ "$EXISTING" != "$TARGET" ]]; then
38
43
  rm -f "$TARGET"
@@ -47,7 +52,7 @@ else
47
52
  fi
48
53
 
49
54
  # Remove any other intervals to avoid duplicates in SwiftBar.
50
- for f in "$PLUGIN_DIR"/happy-stacks.*.sh; do
55
+ for f in "$PLUGIN_DIR"/"${PLUGIN_BASENAME}".*.sh; do
51
56
  [[ "$f" == "$TARGET" ]] && continue
52
57
  rm -f "$f" || true
53
58
  done
@@ -24,34 +24,43 @@ if [[ "$FLAVOR" != "happy-server" && "$FLAVOR" != "happy-server-light" ]]; then
24
24
  exit 2
25
25
  fi
26
26
 
27
- HAPPY_STACKS_HOME_DIR="${HAPPY_STACKS_HOME_DIR:-$HOME/.happy-stacks}"
28
- HAPPY_LOCAL_DIR="${HAPPY_LOCAL_DIR:-$HAPPY_STACKS_HOME_DIR}"
27
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
28
+ DEFAULT_HOME_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
29
29
 
30
- PNPM_BIN="$HAPPY_LOCAL_DIR/extras/swiftbar/pnpm.sh"
31
- if [[ ! -x "$PNPM_BIN" ]]; then
30
+ HAPPY_LOCAL_DIR="${HAPPY_LOCAL_DIR:-${HAPPY_STACKS_HOME_DIR:-$DEFAULT_HOME_DIR}}"
31
+ HAPPY_STACKS_HOME_DIR="${HAPPY_STACKS_HOME_DIR:-$HAPPY_LOCAL_DIR}"
32
+
33
+ HAPPYS_BIN="$HAPPY_LOCAL_DIR/extras/swiftbar/happys.sh"
34
+ if [[ ! -x "$HAPPYS_BIN" ]]; then
32
35
  echo "happys wrapper not found (run: happys menubar install)" >&2
33
36
  exit 1
34
37
  fi
35
38
 
36
39
  restart_main_service_best_effort() {
37
- "$PNPM_BIN" service:restart >/dev/null 2>&1 || true
40
+ if [[ -n "${HAPPY_STACKS_SANDBOX_DIR:-}" ]]; then
41
+ return 0
42
+ fi
43
+ "$HAPPYS_BIN" service:restart >/dev/null 2>&1 || true
38
44
  # If the installed LaunchAgent is still legacy/baked, reinstall so it persists only env-file pointer.
39
- "$PNPM_BIN" service:install >/dev/null 2>&1 || true
45
+ "$HAPPYS_BIN" service:install >/dev/null 2>&1 || true
40
46
  }
41
47
 
42
48
  restart_stack_service_best_effort() {
43
49
  local name="$1"
44
- "$PNPM_BIN" stack service:restart "$name" >/dev/null 2>&1 || true
45
- "$PNPM_BIN" stack service:install "$name" >/dev/null 2>&1 || true
50
+ if [[ -n "${HAPPY_STACKS_SANDBOX_DIR:-}" ]]; then
51
+ return 0
52
+ fi
53
+ "$HAPPYS_BIN" stack service:restart "$name" >/dev/null 2>&1 || true
54
+ "$HAPPYS_BIN" stack service:install "$name" >/dev/null 2>&1 || true
46
55
  }
47
56
 
48
57
  if [[ "$STACK" == "main" ]]; then
49
- "$PNPM_BIN" srv -- use "$FLAVOR"
58
+ "$HAPPYS_BIN" srv -- use "$FLAVOR"
50
59
  restart_main_service_best_effort
51
60
  echo "ok: main -> $FLAVOR"
52
61
  exit 0
53
62
  fi
54
63
 
55
- "$PNPM_BIN" stack srv "$STACK" -- use "$FLAVOR"
64
+ "$HAPPYS_BIN" stack srv "$STACK" -- use "$FLAVOR"
56
65
  restart_stack_service_best_effort "$STACK"
57
66
  echo "ok: $STACK -> $FLAVOR"
@@ -17,11 +17,18 @@ set -euo pipefail
17
17
  COMPONENT="${1:-}"
18
18
  STACK_NAME="${2:-}"
19
19
 
20
- HAPPY_STACKS_HOME_DIR="${HAPPY_STACKS_HOME_DIR:-$HOME/.happy-stacks}"
21
- HAPPY_LOCAL_DIR="${HAPPY_LOCAL_DIR:-$HAPPY_STACKS_HOME_DIR}"
20
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
21
+ DEFAULT_HOME_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
22
22
 
23
- HAPPYS="$HAPPY_LOCAL_DIR/extras/swiftbar/pnpm.sh"
23
+ HAPPY_LOCAL_DIR="${HAPPY_LOCAL_DIR:-${HAPPY_STACKS_HOME_DIR:-$DEFAULT_HOME_DIR}}"
24
+ HAPPY_STACKS_HOME_DIR="${HAPPY_STACKS_HOME_DIR:-$HAPPY_LOCAL_DIR}"
25
+
26
+ HAPPYS="$HAPPY_LOCAL_DIR/extras/swiftbar/happys.sh"
24
27
  if [[ ! -x "$HAPPYS" ]]; then
28
+ if [[ -n "${HAPPY_STACKS_SANDBOX_DIR:-}" ]]; then
29
+ echo "missing happys wrapper in sandbox: $HAPPYS" >&2
30
+ exit 1
31
+ fi
25
32
  HAPPYS="$(command -v happys 2>/dev/null || true)"
26
33
  fi
27
34
  if [[ -z "$HAPPYS" ]]; then
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "happy-stacks",
3
3
  "type": "module",
4
- "version": "0.1.0",
4
+ "version": "0.2.0",
5
5
  "packageManager": "pnpm@10.18.3",
6
6
  "bin": {
7
7
  "happys": "./bin/happys.mjs",
@@ -14,6 +14,7 @@
14
14
  "scripts/"
15
15
  ],
16
16
  "scripts": {
17
+ "setup": "node ./scripts/setup.mjs",
17
18
  "init": "node ./scripts/init.mjs",
18
19
  "uninstall": "node ./scripts/uninstall.mjs",
19
20
  "where": "node ./scripts/where.mjs",