@boxes-dev/dvb 0.2.4

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 (201) hide show
  1. package/dist/bin/dvb.cjs +28232 -0
  2. package/dist/bin/dvb.d.ts +2 -0
  3. package/dist/bin/dvb.d.ts.map +1 -0
  4. package/dist/bin/dvb.js +71 -0
  5. package/dist/bin/dvb.js.map +1 -0
  6. package/dist/bin/dvbd.cjs +11816 -0
  7. package/dist/bin/dvbd.d.ts +2 -0
  8. package/dist/bin/dvbd.d.ts.map +1 -0
  9. package/dist/bin/dvbd.js +20 -0
  10. package/dist/bin/dvbd.js.map +1 -0
  11. package/dist/codex/services-schema.json +59 -0
  12. package/dist/codex/setup-schema.json +176 -0
  13. package/dist/devbox/auth.d.ts +17 -0
  14. package/dist/devbox/auth.d.ts.map +1 -0
  15. package/dist/devbox/auth.js +302 -0
  16. package/dist/devbox/auth.js.map +1 -0
  17. package/dist/devbox/cli.d.ts +2 -0
  18. package/dist/devbox/cli.d.ts.map +1 -0
  19. package/dist/devbox/cli.js +142 -0
  20. package/dist/devbox/cli.js.map +1 -0
  21. package/dist/devbox/commands/agent.d.ts +21 -0
  22. package/dist/devbox/commands/agent.d.ts.map +1 -0
  23. package/dist/devbox/commands/agent.js +257 -0
  24. package/dist/devbox/commands/agent.js.map +1 -0
  25. package/dist/devbox/commands/boxSelect.d.ts +14 -0
  26. package/dist/devbox/commands/boxSelect.d.ts.map +1 -0
  27. package/dist/devbox/commands/boxSelect.js +82 -0
  28. package/dist/devbox/commands/boxSelect.js.map +1 -0
  29. package/dist/devbox/commands/connect.d.ts +8 -0
  30. package/dist/devbox/commands/connect.d.ts.map +1 -0
  31. package/dist/devbox/commands/connect.js +1369 -0
  32. package/dist/devbox/commands/connect.js.map +1 -0
  33. package/dist/devbox/commands/daemon.d.ts +4 -0
  34. package/dist/devbox/commands/daemon.d.ts.map +1 -0
  35. package/dist/devbox/commands/daemon.js +36 -0
  36. package/dist/devbox/commands/daemon.js.map +1 -0
  37. package/dist/devbox/commands/destroy.d.ts +2 -0
  38. package/dist/devbox/commands/destroy.d.ts.map +1 -0
  39. package/dist/devbox/commands/destroy.js +131 -0
  40. package/dist/devbox/commands/destroy.js.map +1 -0
  41. package/dist/devbox/commands/init/args.d.ts +12 -0
  42. package/dist/devbox/commands/init/args.d.ts.map +1 -0
  43. package/dist/devbox/commands/init/args.js +42 -0
  44. package/dist/devbox/commands/init/args.js.map +1 -0
  45. package/dist/devbox/commands/init/codex/artifacts.d.ts +26 -0
  46. package/dist/devbox/commands/init/codex/artifacts.d.ts.map +1 -0
  47. package/dist/devbox/commands/init/codex/artifacts.js +108 -0
  48. package/dist/devbox/commands/init/codex/artifacts.js.map +1 -0
  49. package/dist/devbox/commands/init/codex/index.d.ts +35 -0
  50. package/dist/devbox/commands/init/codex/index.d.ts.map +1 -0
  51. package/dist/devbox/commands/init/codex/index.js +147 -0
  52. package/dist/devbox/commands/init/codex/index.js.map +1 -0
  53. package/dist/devbox/commands/init/codex/local.d.ts +19 -0
  54. package/dist/devbox/commands/init/codex/local.d.ts.map +1 -0
  55. package/dist/devbox/commands/init/codex/local.js +189 -0
  56. package/dist/devbox/commands/init/codex/local.js.map +1 -0
  57. package/dist/devbox/commands/init/codex/plan.d.ts +61 -0
  58. package/dist/devbox/commands/init/codex/plan.d.ts.map +1 -0
  59. package/dist/devbox/commands/init/codex/plan.js +39 -0
  60. package/dist/devbox/commands/init/codex/plan.js.map +1 -0
  61. package/dist/devbox/commands/init/codex/prompts.d.ts +6 -0
  62. package/dist/devbox/commands/init/codex/prompts.d.ts.map +1 -0
  63. package/dist/devbox/commands/init/codex/prompts.js +26 -0
  64. package/dist/devbox/commands/init/codex/prompts.js.map +1 -0
  65. package/dist/devbox/commands/init/codex/remote.d.ts +56 -0
  66. package/dist/devbox/commands/init/codex/remote.d.ts.map +1 -0
  67. package/dist/devbox/commands/init/codex/remote.js +395 -0
  68. package/dist/devbox/commands/init/codex/remote.js.map +1 -0
  69. package/dist/devbox/commands/init/codex/template.d.ts +3 -0
  70. package/dist/devbox/commands/init/codex/template.d.ts.map +1 -0
  71. package/dist/devbox/commands/init/codex/template.js +3 -0
  72. package/dist/devbox/commands/init/codex/template.js.map +1 -0
  73. package/dist/devbox/commands/init/index.d.ts +2 -0
  74. package/dist/devbox/commands/init/index.d.ts.map +1 -0
  75. package/dist/devbox/commands/init/index.js +1117 -0
  76. package/dist/devbox/commands/init/index.js.map +1 -0
  77. package/dist/devbox/commands/init/packaging.d.ts +5 -0
  78. package/dist/devbox/commands/init/packaging.d.ts.map +1 -0
  79. package/dist/devbox/commands/init/packaging.js +86 -0
  80. package/dist/devbox/commands/init/packaging.js.map +1 -0
  81. package/dist/devbox/commands/init/registry.d.ts +14 -0
  82. package/dist/devbox/commands/init/registry.d.ts.map +1 -0
  83. package/dist/devbox/commands/init/registry.js +61 -0
  84. package/dist/devbox/commands/init/registry.js.map +1 -0
  85. package/dist/devbox/commands/init/remote.d.ts +38 -0
  86. package/dist/devbox/commands/init/remote.d.ts.map +1 -0
  87. package/dist/devbox/commands/init/remote.js +554 -0
  88. package/dist/devbox/commands/init/remote.js.map +1 -0
  89. package/dist/devbox/commands/init/repo.d.ts +31 -0
  90. package/dist/devbox/commands/init/repo.d.ts.map +1 -0
  91. package/dist/devbox/commands/init/repo.js +164 -0
  92. package/dist/devbox/commands/init/repo.js.map +1 -0
  93. package/dist/devbox/commands/init/scripts.d.ts +3 -0
  94. package/dist/devbox/commands/init/scripts.d.ts.map +1 -0
  95. package/dist/devbox/commands/init/scripts.js +15 -0
  96. package/dist/devbox/commands/init/scripts.js.map +1 -0
  97. package/dist/devbox/commands/init/ssh.d.ts +19 -0
  98. package/dist/devbox/commands/init/ssh.d.ts.map +1 -0
  99. package/dist/devbox/commands/init/ssh.js +270 -0
  100. package/dist/devbox/commands/init/ssh.js.map +1 -0
  101. package/dist/devbox/commands/init/state.d.ts +31 -0
  102. package/dist/devbox/commands/init/state.d.ts.map +1 -0
  103. package/dist/devbox/commands/init/state.js +25 -0
  104. package/dist/devbox/commands/init/state.js.map +1 -0
  105. package/dist/devbox/commands/list.d.ts +2 -0
  106. package/dist/devbox/commands/list.d.ts.map +1 -0
  107. package/dist/devbox/commands/list.js +213 -0
  108. package/dist/devbox/commands/list.js.map +1 -0
  109. package/dist/devbox/commands/listFormatting.d.ts +27 -0
  110. package/dist/devbox/commands/listFormatting.d.ts.map +1 -0
  111. package/dist/devbox/commands/listFormatting.js +155 -0
  112. package/dist/devbox/commands/listFormatting.js.map +1 -0
  113. package/dist/devbox/commands/logout.d.ts +2 -0
  114. package/dist/devbox/commands/logout.d.ts.map +1 -0
  115. package/dist/devbox/commands/logout.js +45 -0
  116. package/dist/devbox/commands/logout.js.map +1 -0
  117. package/dist/devbox/commands/mount.d.ts +3 -0
  118. package/dist/devbox/commands/mount.d.ts.map +1 -0
  119. package/dist/devbox/commands/mount.js +144 -0
  120. package/dist/devbox/commands/mount.js.map +1 -0
  121. package/dist/devbox/commands/mountSsh.d.ts +12 -0
  122. package/dist/devbox/commands/mountSsh.d.ts.map +1 -0
  123. package/dist/devbox/commands/mountSsh.js +137 -0
  124. package/dist/devbox/commands/mountSsh.js.map +1 -0
  125. package/dist/devbox/commands/ports.d.ts +2 -0
  126. package/dist/devbox/commands/ports.d.ts.map +1 -0
  127. package/dist/devbox/commands/ports.js +145 -0
  128. package/dist/devbox/commands/ports.js.map +1 -0
  129. package/dist/devbox/commands/services.d.ts +2 -0
  130. package/dist/devbox/commands/services.d.ts.map +1 -0
  131. package/dist/devbox/commands/services.js +552 -0
  132. package/dist/devbox/commands/services.js.map +1 -0
  133. package/dist/devbox/commands/servicesToml.d.ts +13 -0
  134. package/dist/devbox/commands/servicesToml.d.ts.map +1 -0
  135. package/dist/devbox/commands/servicesToml.js +198 -0
  136. package/dist/devbox/commands/servicesToml.js.map +1 -0
  137. package/dist/devbox/commands/sessionUtils.d.ts +10 -0
  138. package/dist/devbox/commands/sessionUtils.d.ts.map +1 -0
  139. package/dist/devbox/commands/sessionUtils.js +48 -0
  140. package/dist/devbox/commands/sessionUtils.js.map +1 -0
  141. package/dist/devbox/commands/sessions.d.ts +2 -0
  142. package/dist/devbox/commands/sessions.d.ts.map +1 -0
  143. package/dist/devbox/commands/sessions.js +425 -0
  144. package/dist/devbox/commands/sessions.js.map +1 -0
  145. package/dist/devbox/commands/setup.d.ts +2 -0
  146. package/dist/devbox/commands/setup.d.ts.map +1 -0
  147. package/dist/devbox/commands/setup.js +183 -0
  148. package/dist/devbox/commands/setup.js.map +1 -0
  149. package/dist/devbox/commands/wezterm.d.ts +3 -0
  150. package/dist/devbox/commands/wezterm.d.ts.map +1 -0
  151. package/dist/devbox/commands/wezterm.js +878 -0
  152. package/dist/devbox/commands/wezterm.js.map +1 -0
  153. package/dist/devbox/completions/cache.d.ts +59 -0
  154. package/dist/devbox/completions/cache.d.ts.map +1 -0
  155. package/dist/devbox/completions/cache.js +122 -0
  156. package/dist/devbox/completions/cache.js.map +1 -0
  157. package/dist/devbox/completions/index.d.ts +14 -0
  158. package/dist/devbox/completions/index.d.ts.map +1 -0
  159. package/dist/devbox/completions/index.js +796 -0
  160. package/dist/devbox/completions/index.js.map +1 -0
  161. package/dist/devbox/controlPlane.d.ts +44 -0
  162. package/dist/devbox/controlPlane.d.ts.map +1 -0
  163. package/dist/devbox/controlPlane.js +310 -0
  164. package/dist/devbox/controlPlane.js.map +1 -0
  165. package/dist/devbox/daemonClient.d.ts +28 -0
  166. package/dist/devbox/daemonClient.d.ts.map +1 -0
  167. package/dist/devbox/daemonClient.js +276 -0
  168. package/dist/devbox/daemonClient.js.map +1 -0
  169. package/dist/devbox/latency.d.ts +25 -0
  170. package/dist/devbox/latency.d.ts.map +1 -0
  171. package/dist/devbox/latency.js +186 -0
  172. package/dist/devbox/latency.js.map +1 -0
  173. package/dist/devbox/logger.d.ts +2 -0
  174. package/dist/devbox/logger.d.ts.map +1 -0
  175. package/dist/devbox/logger.js +3 -0
  176. package/dist/devbox/logger.js.map +1 -0
  177. package/dist/devbox/terminal/osc.d.ts +10 -0
  178. package/dist/devbox/terminal/osc.d.ts.map +1 -0
  179. package/dist/devbox/terminal/osc.js +88 -0
  180. package/dist/devbox/terminal/osc.js.map +1 -0
  181. package/dist/devbox/types.d.ts +4 -0
  182. package/dist/devbox/types.d.ts.map +1 -0
  183. package/dist/devbox/types.js +2 -0
  184. package/dist/devbox/types.js.map +1 -0
  185. package/dist/devbox/ui/colors.d.ts +19 -0
  186. package/dist/devbox/ui/colors.d.ts.map +1 -0
  187. package/dist/devbox/ui/colors.js +22 -0
  188. package/dist/devbox/ui/colors.js.map +1 -0
  189. package/dist/devbox/ui/statusLine.d.ts +14 -0
  190. package/dist/devbox/ui/statusLine.d.ts.map +1 -0
  191. package/dist/devbox/ui/statusLine.js +90 -0
  192. package/dist/devbox/ui/statusLine.js.map +1 -0
  193. package/dist/devbox/weztermMux.d.ts +11 -0
  194. package/dist/devbox/weztermMux.d.ts.map +1 -0
  195. package/dist/devbox/weztermMux.js +11 -0
  196. package/dist/devbox/weztermMux.js.map +1 -0
  197. package/dist/prompts/local-scan.md +32 -0
  198. package/dist/prompts/local-services-scan.md +17 -0
  199. package/dist/prompts/remote-apply.md +370 -0
  200. package/dist/scripts/fix-bashrc.sh +48 -0
  201. package/package.json +38 -0
@@ -0,0 +1,554 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { createLogger } from "@boxes-dev/core";
3
+ import { buildCodexConfig } from "./registry.js";
4
+ import { loadInitScript } from "./scripts.js";
5
+ import { WEZTERM_MUX_BIN_DIR, WEZTERM_MUX_CONFIG_PATH, WEZTERM_MUX_DIR, WEZTERM_MUX_ENV_PATH, WEZTERM_MUX_INSTALL_DIR, WEZTERM_MUX_RUNNER_PATH, WEZTERM_MUX_SERVICE_NAME, WEZTERM_MUX_SOCKET_PATH, WEZTERM_MUX_TCP_PORT, } from "../../weztermMux.js";
6
+ const DAEMON_DIR = "/home/sprite/.devbox/daemon";
7
+ const DAEMON_TARBALL = `${DAEMON_DIR}/sprite-daemon.tar.gz`;
8
+ const DAEMON_BUNDLE_DIR = `${DAEMON_DIR}/bundle`;
9
+ const DAEMON_ENTRY = `${DAEMON_BUNDLE_DIR}/sprite-daemon.mjs`;
10
+ const DAEMON_WRAPPER = `${DAEMON_DIR}/run-daemon.sh`;
11
+ const DAEMON_SERVICE_NAME = "devbox-sprite-daemon";
12
+ const DAEMON_CONFIG_FILE = `${DAEMON_DIR}/config.json`;
13
+ const DEFAULT_DAEMON_BASE_URL = "https://deploy-dev.boxes.dev";
14
+ const DEFAULT_HEARTBEAT_MS = 30_000;
15
+ const logger = createLogger("devbox-init");
16
+ const shellQuote = (value) => `'${value.replace(/'/g, `'\\''`)}'`;
17
+ const expandHome = (value) => {
18
+ if (value.startsWith("~/")) {
19
+ return `/home/sprite/${value.slice(2)}`;
20
+ }
21
+ return value;
22
+ };
23
+ const execWithLog = async (client, canonical, script, stage) => {
24
+ const requestId = randomUUID();
25
+ logger.info("sprites_request", {
26
+ requestId,
27
+ method: "exec",
28
+ path: "/exec",
29
+ box: canonical,
30
+ stage,
31
+ });
32
+ const result = await client.exec(canonical, ["/bin/bash", "-lc", script]);
33
+ logger.info("sprites_response", {
34
+ requestId,
35
+ method: "exec",
36
+ path: "/exec",
37
+ status: result.exitCode === 0 ? "ok" : "error",
38
+ exitCode: result.exitCode,
39
+ box: canonical,
40
+ stage,
41
+ });
42
+ return result;
43
+ };
44
+ const writeRemoteFile = async (client, canonical, path, content, stage) => {
45
+ const requestId = randomUUID();
46
+ logger.info("sprites_request", {
47
+ requestId,
48
+ method: "writeFile",
49
+ path,
50
+ box: canonical,
51
+ stage,
52
+ });
53
+ const buffer = typeof content === "string" ? Buffer.from(content, "utf8") : content;
54
+ await client.writeFile(canonical, path, buffer);
55
+ logger.info("sprites_response", {
56
+ requestId,
57
+ method: "writeFile",
58
+ path,
59
+ status: "ok",
60
+ box: canonical,
61
+ stage,
62
+ });
63
+ };
64
+ const bootstrapDevbox = async (client, canonical) => {
65
+ const permissionsScript = [
66
+ "set -euo pipefail",
67
+ "if [ -d /home/sprite ]; then",
68
+ " sudo -n chown sprite:sprite /home/sprite || true",
69
+ " sudo -n chmod 755 /home/sprite || true",
70
+ "fi",
71
+ "if [ -d /home/sprite/.devbox ]; then",
72
+ " sudo -n chown -R sprite:sprite /home/sprite/.devbox || true",
73
+ "fi",
74
+ ].join("\n");
75
+ const permsResult = await execWithLog(client, canonical, permissionsScript, "bootstrap-permissions");
76
+ if (permsResult.exitCode !== 0) {
77
+ const details = permsResult.stderr || permsResult.stdout || "";
78
+ throw new Error(details
79
+ ? `devbox bootstrap failed: ${details}`
80
+ : `devbox bootstrap failed (exit ${permsResult.exitCode})`);
81
+ }
82
+ const ipv4PreferenceScript = [
83
+ "set -euo pipefail",
84
+ "if ! sudo -n grep -q \"ipv4first\" /etc/gai.conf 2>/dev/null; then",
85
+ " cat <<'EOF' | sudo -n tee -a /etc/gai.conf >/dev/null",
86
+ "# devbox: prefer IPv4 for localhost",
87
+ "precedence ::ffff:0:0/96 100",
88
+ "EOF",
89
+ "fi",
90
+ ].join("\n");
91
+ const ipv4Result = await execWithLog(client, canonical, ipv4PreferenceScript, "bootstrap-ipv4-preference");
92
+ if (ipv4Result.exitCode !== 0) {
93
+ const details = ipv4Result.stderr || ipv4Result.stdout || "";
94
+ throw new Error(details
95
+ ? `devbox bootstrap failed: ${details}`
96
+ : `devbox bootstrap failed (exit ${ipv4Result.exitCode})`);
97
+ }
98
+ await patchBashrc(client, canonical);
99
+ };
100
+ const buildWeztermMuxConfig = () => {
101
+ const lines = [
102
+ "local wezterm = require 'wezterm'",
103
+ "local config = {}",
104
+ "",
105
+ 'local devbox_bin = "/home/sprite/.devbox/bin"',
106
+ 'local path = os.getenv("PATH") or ""',
107
+ "if path == \"\" then",
108
+ " path = devbox_bin",
109
+ "elseif not string.find(path, devbox_bin, 1, true) then",
110
+ " path = devbox_bin .. \":\" .. path",
111
+ "end",
112
+ "config.set_environment_variables = {",
113
+ " PATH = path,",
114
+ "}",
115
+ "",
116
+ "config.unix_domains = {",
117
+ " {",
118
+ ' name = "sprite",',
119
+ ` socket_path = "${WEZTERM_MUX_SOCKET_PATH}",`,
120
+ " },",
121
+ "}",
122
+ "",
123
+ "config.daemon_options = {",
124
+ ` pid_file = "${WEZTERM_MUX_DIR}/pid",`,
125
+ ` stdout = "${WEZTERM_MUX_DIR}/stdout",`,
126
+ ` stderr = "${WEZTERM_MUX_DIR}/stderr",`,
127
+ "}",
128
+ "",
129
+ "return config",
130
+ "",
131
+ ];
132
+ return lines.join("\n");
133
+ };
134
+ const buildWeztermMuxRunner = () => [
135
+ "#!/usr/bin/env bash",
136
+ "set -euo pipefail",
137
+ "",
138
+ `config_path="${WEZTERM_MUX_CONFIG_PATH}"`,
139
+ `socket_path="${WEZTERM_MUX_SOCKET_PATH}"`,
140
+ `port="${WEZTERM_MUX_TCP_PORT}"`,
141
+ `env_path="${WEZTERM_MUX_ENV_PATH}"`,
142
+ `pid_file="${WEZTERM_MUX_DIR}/pid"`,
143
+ "",
144
+ "if ! command -v socat >/dev/null 2>&1; then",
145
+ ' echo "socat missing" >&2',
146
+ " exit 1",
147
+ "fi",
148
+ "",
149
+ "mux_bin=\"\"",
150
+ "if [ -f \"$env_path\" ]; then",
151
+ " # shellcheck source=/dev/null",
152
+ " source \"$env_path\" || true",
153
+ "fi",
154
+ "if [ -n \"${WEZTERM_MUX_BIN:-}\" ] && [ -x \"${WEZTERM_MUX_BIN}\" ]; then",
155
+ " mux_bin=\"$WEZTERM_MUX_BIN\"",
156
+ "elif command -v wezterm-mux-server >/dev/null 2>&1; then",
157
+ " mux_bin=\"$(command -v wezterm-mux-server)\"",
158
+ "fi",
159
+ "if [ -z \"$mux_bin\" ]; then",
160
+ ' echo "wezterm-mux-server missing" >&2',
161
+ " exit 1",
162
+ "fi",
163
+ "",
164
+ `mkdir -p "${WEZTERM_MUX_DIR}"`,
165
+ "mux_pid=\"\"",
166
+ "if [ -f \"$pid_file\" ]; then",
167
+ " mux_pid=\"$(cat \"$pid_file\" 2>/dev/null || true)\"",
168
+ " if [ -n \"$mux_pid\" ] && kill -0 \"$mux_pid\" 2>/dev/null; then",
169
+ " if ps -p \"$mux_pid\" -o comm= 2>/dev/null | grep -q \"wezterm-mux-server\"; then",
170
+ " mux_running=1",
171
+ " else",
172
+ " mux_pid=\"\"",
173
+ " rm -f \"$pid_file\"",
174
+ " fi",
175
+ " else",
176
+ " mux_pid=\"\"",
177
+ " rm -f \"$pid_file\"",
178
+ " fi",
179
+ "fi",
180
+ "",
181
+ "socket_check=0",
182
+ "socket_listening=0",
183
+ "if command -v ss >/dev/null 2>&1; then",
184
+ " socket_check=1",
185
+ " if ss -xl 2>/dev/null | grep -F \"$socket_path\" >/dev/null 2>&1; then",
186
+ " socket_listening=1",
187
+ " fi",
188
+ "fi",
189
+ "",
190
+ "if [ -n \"${mux_running:-}\" ] && [ \"$socket_check\" -eq 1 ] && [ \"$socket_listening\" -eq 0 ]; then",
191
+ " if [ -n \"$mux_pid\" ]; then",
192
+ " kill \"$mux_pid\" 2>/dev/null || true",
193
+ " fi",
194
+ " mux_running=\"\"",
195
+ " rm -f \"$pid_file\"",
196
+ "fi",
197
+ "",
198
+ 'if [ -n "${mux_running:-}" ] && [ ! -S "$socket_path" ]; then',
199
+ " if [ -n \"$mux_pid\" ]; then",
200
+ " kill \"$mux_pid\" 2>/dev/null || true",
201
+ " fi",
202
+ " mux_running=\"\"",
203
+ " rm -f \"$pid_file\"",
204
+ "fi",
205
+ "",
206
+ 'if [ -S "$socket_path" ] && [ -z "${mux_running:-}" ]; then',
207
+ ' rm -f "$socket_path"',
208
+ "fi",
209
+ 'if [ -z "${mux_running:-}" ]; then',
210
+ " if [ -n \"${WEZTERM_MUX_LIB_DIR:-}\" ]; then",
211
+ " export LD_LIBRARY_PATH=\"${WEZTERM_MUX_LIB_DIR}:${LD_LIBRARY_PATH:-}\"",
212
+ " fi",
213
+ ' "$mux_bin" --config-file "$config_path" --daemonize || true',
214
+ " for _ in $(seq 1 50); do",
215
+ ' [ -S "$socket_path" ] && break',
216
+ " sleep 0.1",
217
+ " done",
218
+ "fi",
219
+ "",
220
+ 'if [ ! -S "$socket_path" ]; then',
221
+ ' echo "wezterm mux socket missing" >&2',
222
+ " exit 1",
223
+ "fi",
224
+ "if command -v ss >/dev/null 2>&1; then",
225
+ " if ! ss -xl 2>/dev/null | grep -F \"$socket_path\" >/dev/null 2>&1; then",
226
+ ' echo "wezterm mux not listening" >&2',
227
+ " exit 1",
228
+ " fi",
229
+ "fi",
230
+ "",
231
+ 'exec socat "TCP-LISTEN:${port},bind=127.0.0.1,reuseaddr,fork" "UNIX-CONNECT:${socket_path}"',
232
+ "",
233
+ ].join("\n");
234
+ const patchBashrc = async (client, canonical) => {
235
+ const script = await loadInitScript("fix-bashrc.sh");
236
+ const remotePath = "/tmp/devbox-fix-bashrc.sh";
237
+ const uploadId = randomUUID();
238
+ logger.info("sprites_request", {
239
+ requestId: uploadId,
240
+ method: "writeFile",
241
+ path: remotePath,
242
+ box: canonical,
243
+ });
244
+ await client.writeFile(canonical, remotePath, Buffer.from(script, "utf8"));
245
+ logger.info("sprites_response", {
246
+ requestId: uploadId,
247
+ method: "writeFile",
248
+ path: remotePath,
249
+ status: "ok",
250
+ box: canonical,
251
+ });
252
+ const execId = randomUUID();
253
+ logger.info("sprites_request", {
254
+ requestId: execId,
255
+ method: "exec",
256
+ path: "/exec",
257
+ box: canonical,
258
+ });
259
+ const result = await client.exec(canonical, [
260
+ "/bin/bash",
261
+ "-lc",
262
+ [
263
+ "set -euo pipefail",
264
+ `chmod 700 ${remotePath}`,
265
+ `${remotePath}`,
266
+ `rm -f ${remotePath}`,
267
+ ].join("\n"),
268
+ ]);
269
+ logger.info("sprites_response", {
270
+ requestId: execId,
271
+ method: "exec",
272
+ path: "/exec",
273
+ status: result.exitCode === 0 ? "ok" : "error",
274
+ exitCode: result.exitCode,
275
+ box: canonical,
276
+ });
277
+ if (result.exitCode !== 0) {
278
+ const details = result.stderr || result.stdout || "";
279
+ throw new Error(details
280
+ ? `bashrc patch failed: ${details}`
281
+ : `bashrc patch failed (exit ${result.exitCode})`);
282
+ }
283
+ };
284
+ const writeRemoteCodexConfig = async (client, canonical, repoName) => {
285
+ const configPath = "/home/sprite/.codex/config.toml";
286
+ const content = buildCodexConfig(repoName);
287
+ const mkdirResult = await client.exec(canonical, [
288
+ "/bin/bash",
289
+ "-lc",
290
+ "set -euo pipefail\nmkdir -p /home/sprite/.codex",
291
+ ]);
292
+ if (mkdirResult.exitCode !== 0) {
293
+ const details = mkdirResult.stderr || mkdirResult.stdout || "";
294
+ throw new Error(details
295
+ ? `codex config mkdir failed: ${details}`
296
+ : `codex config mkdir failed (exit ${mkdirResult.exitCode})`);
297
+ }
298
+ await client.writeFile(canonical, configPath, Buffer.from(content, "utf8"));
299
+ };
300
+ const resolveDaemonUrl = (release) => release.url?.trim() ||
301
+ `${DEFAULT_DAEMON_BASE_URL}/sprite-daemon-${release.sha256}.tar.gz`;
302
+ const fetchDaemonBinary = async (release) => {
303
+ const url = resolveDaemonUrl(release);
304
+ const response = await fetch(url);
305
+ if (!response.ok) {
306
+ throw new Error(`Failed to download sprite daemon (${response.status} ${response.statusText}).`);
307
+ }
308
+ const buffer = new Uint8Array(await response.arrayBuffer());
309
+ return { buffer, url };
310
+ };
311
+ const buildDaemonConfig = (convexUrl, heartbeatToken) => new TextEncoder().encode(JSON.stringify({
312
+ convexUrl,
313
+ heartbeatToken,
314
+ heartbeatMs: DEFAULT_HEARTBEAT_MS,
315
+ sessionTraceDir: "/home/sprite/.devbox/daemon/session-traces",
316
+ }, null, 2));
317
+ const isSameArgs = (left, right) => {
318
+ if (!left)
319
+ return right.length === 0;
320
+ if (left.length !== right.length)
321
+ return false;
322
+ return left.every((value, index) => value === right[index]);
323
+ };
324
+ const ensureSpriteDaemonService = async ({ client, spriteName, }) => {
325
+ const expectedCmd = DAEMON_WRAPPER;
326
+ const expectedArgs = [];
327
+ const existing = await client.getService(spriteName, DAEMON_SERVICE_NAME);
328
+ const needsCreate = !existing ||
329
+ existing.cmd !== expectedCmd ||
330
+ !isSameArgs(existing.args, expectedArgs);
331
+ if (needsCreate) {
332
+ await client.createService(spriteName, DAEMON_SERVICE_NAME, {
333
+ cmd: expectedCmd,
334
+ args: expectedArgs,
335
+ });
336
+ }
337
+ const current = needsCreate
338
+ ? await client.getService(spriteName, DAEMON_SERVICE_NAME)
339
+ : existing;
340
+ const status = current?.state?.status ?? null;
341
+ if (status !== "running") {
342
+ await client.startService(spriteName, DAEMON_SERVICE_NAME, {
343
+ duration: "0",
344
+ });
345
+ }
346
+ const refreshed = await client.getService(spriteName, DAEMON_SERVICE_NAME);
347
+ if (refreshed?.state?.status !== "running") {
348
+ throw new Error("Sprite daemon service failed to start.");
349
+ }
350
+ };
351
+ const installWeztermMux = async ({ client, spriteName, assetUrl, assetName, version, }) => {
352
+ const archivePath = assetName
353
+ ? `${WEZTERM_MUX_DIR}/${assetName}`
354
+ : `${WEZTERM_MUX_DIR}/wezterm-archive`;
355
+ const installScript = [
356
+ "set -euo pipefail",
357
+ `mkdir -p ${WEZTERM_MUX_DIR}`,
358
+ `mkdir -p ${WEZTERM_MUX_BIN_DIR}`,
359
+ `mkdir -p ${WEZTERM_MUX_INSTALL_DIR}`,
360
+ "if ! command -v socat >/dev/null 2>&1; then",
361
+ " if command -v apt-get >/dev/null 2>&1; then",
362
+ " sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y socat >/dev/null 2>&1 || true",
363
+ " fi",
364
+ "fi",
365
+ "if ! command -v socat >/dev/null 2>&1; then",
366
+ ' echo "socat missing" >&2',
367
+ " exit 1",
368
+ "fi",
369
+ ...(assetUrl
370
+ ? [
371
+ `env_path=${shellQuote(WEZTERM_MUX_ENV_PATH)}`,
372
+ `version_tag=${shellQuote(version ?? "")}`,
373
+ "if [ -n \"$version_tag\" ] && [ -f \"$env_path\" ]; then",
374
+ " # shellcheck source=/dev/null",
375
+ " source \"$env_path\" || true",
376
+ " if grep -qx \"WEZTERM_MUX_VERSION=$version_tag\" \"$env_path\"; then",
377
+ " if [ -n \"${WEZTERM_MUX_BIN:-}\" ] && [ -x \"${WEZTERM_MUX_BIN}\" ]; then",
378
+ " if \"${WEZTERM_MUX_BIN}\" --version >/dev/null 2>&1; then",
379
+ " echo \"DEVBOX_WEZTERM_MUX=skip\" >&2",
380
+ " exit 0",
381
+ " fi",
382
+ " fi",
383
+ " fi",
384
+ "fi",
385
+ `archive=${shellQuote(archivePath)}`,
386
+ `url=${shellQuote(assetUrl)}`,
387
+ "if command -v curl >/dev/null 2>&1; then",
388
+ " curl -fL \"$url\" -o \"$archive\"",
389
+ "elif command -v wget >/dev/null 2>&1; then",
390
+ " wget -O \"$archive\" \"$url\"",
391
+ "else",
392
+ ' echo "curl or wget required to download wezterm" >&2',
393
+ " exit 1",
394
+ "fi",
395
+ `dest=${shellQuote(version ? `${WEZTERM_MUX_INSTALL_DIR}/${version}` : WEZTERM_MUX_INSTALL_DIR)}`,
396
+ "rm -rf \"$dest\"",
397
+ "mkdir -p \"$dest\"",
398
+ "case \"$archive\" in",
399
+ " *.tar.xz) tar -xJf \"$archive\" -C \"$dest\" ;;",
400
+ " *.tar.gz) tar -xzf \"$archive\" -C \"$dest\" ;;",
401
+ " *.tgz) tar -xzf \"$archive\" -C \"$dest\" ;;",
402
+ " *.zip)",
403
+ " if command -v unzip >/dev/null 2>&1; then",
404
+ " unzip -q \"$archive\" -d \"$dest\"",
405
+ " else",
406
+ ' echo "unzip missing" >&2',
407
+ " exit 1",
408
+ " fi",
409
+ " ;;",
410
+ " *.AppImage)",
411
+ " chmod +x \"$archive\"",
412
+ " (cd \"$dest\" && \"$archive\" --appimage-extract >/dev/null)",
413
+ " ;;",
414
+ " *)",
415
+ ' echo "unsupported archive format" >&2',
416
+ " exit 1",
417
+ " ;;",
418
+ "esac",
419
+ "mux_bin=$(find \"$dest\" -type f -name wezterm-mux-server -perm -u+x | head -n 1 || true)",
420
+ "if [ -z \"$mux_bin\" ]; then",
421
+ ' echo "wezterm-mux-server not found in archive" >&2',
422
+ " exit 1",
423
+ "fi",
424
+ "lib_dir=$(find \"$dest\" -maxdepth 4 -type d -name lib | head -n 1 || true)",
425
+ "printf 'WEZTERM_MUX_BIN=%s\\n' \"$mux_bin\" > \"$env_path\"",
426
+ "if [ -n \"$lib_dir\" ]; then",
427
+ " printf 'WEZTERM_MUX_LIB_DIR=%s\\n' \"$lib_dir\" >> \"$env_path\"",
428
+ "fi",
429
+ "if [ -n \"$version_tag\" ]; then",
430
+ " printf 'WEZTERM_MUX_VERSION=%s\\n' \"$version_tag\" >> \"$env_path\"",
431
+ "fi",
432
+ "echo \"DEVBOX_WEZTERM_MUX=installed\" >&2",
433
+ ]
434
+ : [
435
+ "if ! command -v wezterm-mux-server >/dev/null 2>&1; then",
436
+ " if command -v apt-get >/dev/null 2>&1; then",
437
+ " sudo -n DEBIAN_FRONTEND=noninteractive apt-get update -y >/dev/null 2>&1 || true",
438
+ " sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y wezterm >/dev/null 2>&1 || true",
439
+ " fi",
440
+ "fi",
441
+ "if ! command -v wezterm-mux-server >/dev/null 2>&1; then",
442
+ ' echo "wezterm-mux-server missing" >&2',
443
+ " exit 1",
444
+ "fi",
445
+ ]),
446
+ ].join("\n");
447
+ const result = await execWithLog(client, spriteName, installScript, "install-wezterm-mux");
448
+ if (result.exitCode !== 0) {
449
+ throw new Error(result.stderr || result.stdout || "WezTerm mux install failed.");
450
+ }
451
+ await writeRemoteFile(client, spriteName, WEZTERM_MUX_CONFIG_PATH, buildWeztermMuxConfig(), "install-wezterm-mux");
452
+ await writeRemoteFile(client, spriteName, WEZTERM_MUX_RUNNER_PATH, buildWeztermMuxRunner(), "install-wezterm-mux");
453
+ const chmodResult = await execWithLog(client, spriteName, `set -euo pipefail\nchmod 644 ${WEZTERM_MUX_CONFIG_PATH}\nchmod 755 ${WEZTERM_MUX_RUNNER_PATH}`, "install-wezterm-mux");
454
+ if (chmodResult.exitCode !== 0) {
455
+ throw new Error(chmodResult.stderr || chmodResult.stdout || "WezTerm mux chmod failed.");
456
+ }
457
+ const marker = result.stderr.includes("DEVBOX_WEZTERM_MUX=installed") ||
458
+ result.stdout.includes("DEVBOX_WEZTERM_MUX=installed");
459
+ return marker;
460
+ };
461
+ const ensureWeztermMuxService = async ({ client, spriteName, }) => {
462
+ const expectedCmd = WEZTERM_MUX_RUNNER_PATH;
463
+ const expectedArgs = [];
464
+ const existing = await client.getService(spriteName, WEZTERM_MUX_SERVICE_NAME);
465
+ const needsCreate = !existing ||
466
+ existing.cmd !== expectedCmd ||
467
+ !isSameArgs(existing.args, expectedArgs);
468
+ if (needsCreate) {
469
+ await client.createService(spriteName, WEZTERM_MUX_SERVICE_NAME, {
470
+ cmd: expectedCmd,
471
+ args: expectedArgs,
472
+ });
473
+ }
474
+ const current = needsCreate
475
+ ? await client.getService(spriteName, WEZTERM_MUX_SERVICE_NAME)
476
+ : existing;
477
+ const status = current?.state?.status ?? null;
478
+ if (status !== "running") {
479
+ await client.startService(spriteName, WEZTERM_MUX_SERVICE_NAME, {
480
+ duration: "0",
481
+ });
482
+ }
483
+ const refreshed = await client.getService(spriteName, WEZTERM_MUX_SERVICE_NAME);
484
+ if (refreshed?.state?.status !== "running") {
485
+ throw new Error("WezTerm mux service failed to start.");
486
+ }
487
+ };
488
+ const isWeztermMuxHealthy = async ({ client, spriteName, }) => {
489
+ const script = [
490
+ "set -euo pipefail",
491
+ `socket_path=${WEZTERM_MUX_SOCKET_PATH}`,
492
+ "mux_ok=0",
493
+ "if command -v pgrep >/dev/null 2>&1; then",
494
+ " if pgrep -f \"wezterm-mux-server\" >/dev/null 2>&1; then",
495
+ " mux_ok=1",
496
+ " fi",
497
+ "else",
498
+ " if ps -ef | grep -F \"wezterm-mux-server\" | grep -v grep >/dev/null 2>&1; then",
499
+ " mux_ok=1",
500
+ " fi",
501
+ "fi",
502
+ "sock_ok=0",
503
+ "if [ -S \"$socket_path\" ]; then",
504
+ " if command -v ss >/dev/null 2>&1; then",
505
+ " if ss -xl 2>/dev/null | grep -F \"$socket_path\" >/dev/null 2>&1; then",
506
+ " sock_ok=1",
507
+ " fi",
508
+ " else",
509
+ " sock_ok=1",
510
+ " fi",
511
+ "fi",
512
+ "if [ \"$mux_ok\" -eq 1 ] && [ \"$sock_ok\" -eq 1 ]; then",
513
+ " exit 0",
514
+ "fi",
515
+ "exit 1",
516
+ ].join("\n");
517
+ const result = await execWithLog(client, spriteName, script, "wezterm-mux-health");
518
+ return result.exitCode === 0;
519
+ };
520
+ const installSpriteDaemon = async ({ client, spriteName, release, convexUrl, heartbeatToken, }) => {
521
+ const { buffer } = await fetchDaemonBinary(release);
522
+ await client.writeFile(spriteName, DAEMON_TARBALL, buffer);
523
+ await client.writeFile(spriteName, DAEMON_CONFIG_FILE, Buffer.from(buildDaemonConfig(convexUrl, heartbeatToken)));
524
+ const result = await client.exec(spriteName, [
525
+ "/bin/bash",
526
+ "--noprofile",
527
+ "--norc",
528
+ "-e",
529
+ "-u",
530
+ "-o",
531
+ "pipefail",
532
+ "-c",
533
+ [
534
+ `mkdir -p ${DAEMON_DIR}`,
535
+ `rm -rf ${DAEMON_BUNDLE_DIR}`,
536
+ `mkdir -p ${DAEMON_BUNDLE_DIR}`,
537
+ `tar -xzf ${DAEMON_TARBALL} -C ${DAEMON_BUNDLE_DIR}`,
538
+ `chmod 755 ${DAEMON_ENTRY} || true`,
539
+ `chmod 755 ${DAEMON_BUNDLE_DIR}/bin/* || true`,
540
+ [
541
+ `${DAEMON_ENTRY} daemonctl install --json --timeout-ms 20000`,
542
+ `--tarball ${DAEMON_TARBALL}`,
543
+ `--release-sha ${release.sha256}`,
544
+ `--config-path ${DAEMON_CONFIG_FILE}`,
545
+ ].join(" "),
546
+ ].join("\n"),
547
+ ]);
548
+ if (result.exitCode !== 0) {
549
+ throw new Error(result.stderr || result.stdout || "Daemon install failed.");
550
+ }
551
+ await ensureSpriteDaemonService({ client, spriteName });
552
+ };
553
+ export { bootstrapDevbox, ensureSpriteDaemonService, expandHome, installWeztermMux, shellQuote, installSpriteDaemon, ensureWeztermMuxService, isWeztermMuxHealthy, writeRemoteCodexConfig, };
554
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../../src/devbox/commands/init/remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ declare const runCommand: (cwd: string, cmd: string, args: string[]) => Promise<string>;
2
+ declare const runCommandRaw: (cwd: string, cmd: string, args: string[]) => Promise<string>;
3
+ declare const findRepoRoot: (cwd: string) => Promise<string>;
4
+ declare const readRepoOrigin: (cwd: string) => Promise<string | null>;
5
+ declare const readRootCommit: (cwd: string) => Promise<string>;
6
+ declare const resolveGitCommonDir: (repoRoot: string) => Promise<{
7
+ gitDir: string;
8
+ commonDir: string;
9
+ }>;
10
+ declare const readHeadState: (repoRoot: string) => Promise<{
11
+ branch: string | null;
12
+ commit: string;
13
+ }>;
14
+ declare const readNullSeparatedPaths: (cwd: string, args: string[]) => Promise<string[]>;
15
+ declare const readWorktreeState: (repoRoot: string) => Promise<{
16
+ staged: string[];
17
+ unstaged: string[];
18
+ untracked: string[];
19
+ }>;
20
+ declare const confirmCopyWorktree: ({ staged, unstaged, untracked, }: {
21
+ staged: string[];
22
+ unstaged: string[];
23
+ untracked: string[];
24
+ }) => Promise<boolean>;
25
+ declare const readGlobalGitConfigFiles: (cwd: string) => Promise<string[]>;
26
+ declare const mapGlobalGitConfigDestinations: (sources: string[], homeDir: string) => {
27
+ source: string;
28
+ dest: string;
29
+ }[];
30
+ export { confirmCopyWorktree, findRepoRoot, mapGlobalGitConfigDestinations, readGlobalGitConfigFiles, readNullSeparatedPaths, readHeadState, readRepoOrigin, readRootCommit, readWorktreeState, resolveGitCommonDir, runCommand, runCommandRaw, };
31
+ //# sourceMappingURL=repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../../../src/devbox/commands/init/repo.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,UAAU,GAAU,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE,oBAmB9D,CAAC;AAEL,QAAA,MAAM,aAAa,GAAU,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE,oBAmBjE,CAAC;AAEL,QAAA,MAAM,YAAY,GAAU,KAAK,MAAM,oBACmB,CAAC;AAE3D,QAAA,MAAM,cAAc,GAAU,KAAK,MAAM,2BAMxC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAU,KAAK,MAAM,oBACwB,CAAC;AAElE,QAAA,MAAM,mBAAmB,GAAU,UAAU,MAAM;;;EAalD,CAAC;AAEF,QAAA,MAAM,aAAa,GAAU,UAAU,MAAM;;;EAc5C,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAU,KAAK,MAAM,EAAE,MAAM,MAAM,EAAE,sBAIhE,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAU,UAAU,MAAM;;;;EAWhD,CAAC;AAEF,QAAA,MAAM,mBAAmB,GAAU,kCAIhC;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,qBAqBA,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAAU,KAAK,MAAM,sBAoBlD,CAAC;AAEF,QAAA,MAAM,8BAA8B,GAClC,SAAS,MAAM,EAAE,EACjB,SAAS,MAAM;YAEe,MAAM;UAAQ,MAAM;GAUnD,CAAC;AAEF,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,8BAA8B,EAC9B,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,aAAa,GACd,CAAC"}