@miosa/cli 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 (294) hide show
  1. package/README.md +327 -0
  2. package/dist/bin/miosa.d.ts +3 -0
  3. package/dist/bin/miosa.d.ts.map +1 -0
  4. package/dist/bin/miosa.js +139 -0
  5. package/dist/bin/miosa.js.map +1 -0
  6. package/dist/client.d.ts +74 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +523 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/agent.d.ts +18 -0
  11. package/dist/commands/agent.d.ts.map +1 -0
  12. package/dist/commands/agent.js +468 -0
  13. package/dist/commands/agent.js.map +1 -0
  14. package/dist/commands/alerts.d.ts +3 -0
  15. package/dist/commands/alerts.d.ts.map +1 -0
  16. package/dist/commands/alerts.js +41 -0
  17. package/dist/commands/alerts.js.map +1 -0
  18. package/dist/commands/api-keys.d.ts +3 -0
  19. package/dist/commands/api-keys.d.ts.map +1 -0
  20. package/dist/commands/api-keys.js +119 -0
  21. package/dist/commands/api-keys.js.map +1 -0
  22. package/dist/commands/api-resource.d.ts +20 -0
  23. package/dist/commands/api-resource.d.ts.map +1 -0
  24. package/dist/commands/api-resource.js +120 -0
  25. package/dist/commands/api-resource.js.map +1 -0
  26. package/dist/commands/apps.d.ts +3 -0
  27. package/dist/commands/apps.d.ts.map +1 -0
  28. package/dist/commands/apps.js +218 -0
  29. package/dist/commands/apps.js.map +1 -0
  30. package/dist/commands/audit.d.ts +3 -0
  31. package/dist/commands/audit.d.ts.map +1 -0
  32. package/dist/commands/audit.js +25 -0
  33. package/dist/commands/audit.js.map +1 -0
  34. package/dist/commands/auth.d.ts +3 -0
  35. package/dist/commands/auth.d.ts.map +1 -0
  36. package/dist/commands/auth.js +363 -0
  37. package/dist/commands/auth.js.map +1 -0
  38. package/dist/commands/backups.d.ts +3 -0
  39. package/dist/commands/backups.d.ts.map +1 -0
  40. package/dist/commands/backups.js +23 -0
  41. package/dist/commands/backups.js.map +1 -0
  42. package/dist/commands/checkpoints.d.ts +3 -0
  43. package/dist/commands/checkpoints.d.ts.map +1 -0
  44. package/dist/commands/checkpoints.js +33 -0
  45. package/dist/commands/checkpoints.js.map +1 -0
  46. package/dist/commands/computers.d.ts +3 -0
  47. package/dist/commands/computers.d.ts.map +1 -0
  48. package/dist/commands/computers.js +118 -0
  49. package/dist/commands/computers.js.map +1 -0
  50. package/dist/commands/config.d.ts +3 -0
  51. package/dist/commands/config.d.ts.map +1 -0
  52. package/dist/commands/config.js +114 -0
  53. package/dist/commands/config.js.map +1 -0
  54. package/dist/commands/connect.d.ts +3 -0
  55. package/dist/commands/connect.d.ts.map +1 -0
  56. package/dist/commands/connect.js +96 -0
  57. package/dist/commands/connect.js.map +1 -0
  58. package/dist/commands/containers.d.ts +3 -0
  59. package/dist/commands/containers.d.ts.map +1 -0
  60. package/dist/commands/containers.js +20 -0
  61. package/dist/commands/containers.js.map +1 -0
  62. package/dist/commands/cp.d.ts +3 -0
  63. package/dist/commands/cp.d.ts.map +1 -0
  64. package/dist/commands/cp.js +102 -0
  65. package/dist/commands/cp.js.map +1 -0
  66. package/dist/commands/cron.d.ts +3 -0
  67. package/dist/commands/cron.d.ts.map +1 -0
  68. package/dist/commands/cron.js +65 -0
  69. package/dist/commands/cron.js.map +1 -0
  70. package/dist/commands/databases.d.ts +3 -0
  71. package/dist/commands/databases.d.ts.map +1 -0
  72. package/dist/commands/databases.js +222 -0
  73. package/dist/commands/databases.js.map +1 -0
  74. package/dist/commands/db.d.ts +3 -0
  75. package/dist/commands/db.d.ts.map +1 -0
  76. package/dist/commands/db.js +174 -0
  77. package/dist/commands/db.js.map +1 -0
  78. package/dist/commands/deploy.d.ts +3 -0
  79. package/dist/commands/deploy.d.ts.map +1 -0
  80. package/dist/commands/deploy.js +579 -0
  81. package/dist/commands/deploy.js.map +1 -0
  82. package/dist/commands/desktop.d.ts +3 -0
  83. package/dist/commands/desktop.d.ts.map +1 -0
  84. package/dist/commands/desktop.js +276 -0
  85. package/dist/commands/desktop.js.map +1 -0
  86. package/dist/commands/dev.d.ts +3 -0
  87. package/dist/commands/dev.d.ts.map +1 -0
  88. package/dist/commands/dev.js +246 -0
  89. package/dist/commands/dev.js.map +1 -0
  90. package/dist/commands/doctor.d.ts +3 -0
  91. package/dist/commands/doctor.d.ts.map +1 -0
  92. package/dist/commands/doctor.js +241 -0
  93. package/dist/commands/doctor.js.map +1 -0
  94. package/dist/commands/domains.d.ts +3 -0
  95. package/dist/commands/domains.d.ts.map +1 -0
  96. package/dist/commands/domains.js +31 -0
  97. package/dist/commands/domains.js.map +1 -0
  98. package/dist/commands/enterprise-util.d.ts +37 -0
  99. package/dist/commands/enterprise-util.d.ts.map +1 -0
  100. package/dist/commands/enterprise-util.js +185 -0
  101. package/dist/commands/enterprise-util.js.map +1 -0
  102. package/dist/commands/exec.d.ts +3 -0
  103. package/dist/commands/exec.d.ts.map +1 -0
  104. package/dist/commands/exec.js +68 -0
  105. package/dist/commands/exec.js.map +1 -0
  106. package/dist/commands/functions.d.ts +3 -0
  107. package/dist/commands/functions.d.ts.map +1 -0
  108. package/dist/commands/functions.js +47 -0
  109. package/dist/commands/functions.js.map +1 -0
  110. package/dist/commands/gha-runners.d.ts +3 -0
  111. package/dist/commands/gha-runners.d.ts.map +1 -0
  112. package/dist/commands/gha-runners.js +33 -0
  113. package/dist/commands/gha-runners.js.map +1 -0
  114. package/dist/commands/groups.d.ts +3 -0
  115. package/dist/commands/groups.d.ts.map +1 -0
  116. package/dist/commands/groups.js +38 -0
  117. package/dist/commands/groups.js.map +1 -0
  118. package/dist/commands/host.d.ts +3 -0
  119. package/dist/commands/host.d.ts.map +1 -0
  120. package/dist/commands/host.js +74 -0
  121. package/dist/commands/host.js.map +1 -0
  122. package/dist/commands/hosts.d.ts +3 -0
  123. package/dist/commands/hosts.d.ts.map +1 -0
  124. package/dist/commands/hosts.js +90 -0
  125. package/dist/commands/hosts.js.map +1 -0
  126. package/dist/commands/link.d.ts +8 -0
  127. package/dist/commands/link.d.ts.map +1 -0
  128. package/dist/commands/link.js +124 -0
  129. package/dist/commands/link.js.map +1 -0
  130. package/dist/commands/login.d.ts +3 -0
  131. package/dist/commands/login.d.ts.map +1 -0
  132. package/dist/commands/login.js +172 -0
  133. package/dist/commands/login.js.map +1 -0
  134. package/dist/commands/logout.d.ts +3 -0
  135. package/dist/commands/logout.d.ts.map +1 -0
  136. package/dist/commands/logout.js +17 -0
  137. package/dist/commands/logout.js.map +1 -0
  138. package/dist/commands/logs.d.ts +3 -0
  139. package/dist/commands/logs.d.ts.map +1 -0
  140. package/dist/commands/logs.js +94 -0
  141. package/dist/commands/logs.js.map +1 -0
  142. package/dist/commands/ls.d.ts +3 -0
  143. package/dist/commands/ls.d.ts.map +1 -0
  144. package/dist/commands/ls.js +67 -0
  145. package/dist/commands/ls.js.map +1 -0
  146. package/dist/commands/machines.d.ts +3 -0
  147. package/dist/commands/machines.d.ts.map +1 -0
  148. package/dist/commands/machines.js +29 -0
  149. package/dist/commands/machines.js.map +1 -0
  150. package/dist/commands/mcp.d.ts +21 -0
  151. package/dist/commands/mcp.d.ts.map +1 -0
  152. package/dist/commands/mcp.js +1021 -0
  153. package/dist/commands/mcp.js.map +1 -0
  154. package/dist/commands/meshes.d.ts +3 -0
  155. package/dist/commands/meshes.d.ts.map +1 -0
  156. package/dist/commands/meshes.js +27 -0
  157. package/dist/commands/meshes.js.map +1 -0
  158. package/dist/commands/network-policy.d.ts +3 -0
  159. package/dist/commands/network-policy.d.ts.map +1 -0
  160. package/dist/commands/network-policy.js +40 -0
  161. package/dist/commands/network-policy.js.map +1 -0
  162. package/dist/commands/project.d.ts +4 -0
  163. package/dist/commands/project.d.ts.map +1 -0
  164. package/dist/commands/project.js +25 -0
  165. package/dist/commands/project.js.map +1 -0
  166. package/dist/commands/pull.d.ts +3 -0
  167. package/dist/commands/pull.d.ts.map +1 -0
  168. package/dist/commands/pull.js +155 -0
  169. package/dist/commands/pull.js.map +1 -0
  170. package/dist/commands/regions.d.ts +3 -0
  171. package/dist/commands/regions.d.ts.map +1 -0
  172. package/dist/commands/regions.js +67 -0
  173. package/dist/commands/regions.js.map +1 -0
  174. package/dist/commands/releases.d.ts +3 -0
  175. package/dist/commands/releases.d.ts.map +1 -0
  176. package/dist/commands/releases.js +176 -0
  177. package/dist/commands/releases.js.map +1 -0
  178. package/dist/commands/rm.d.ts +3 -0
  179. package/dist/commands/rm.d.ts.map +1 -0
  180. package/dist/commands/rm.js +42 -0
  181. package/dist/commands/rm.js.map +1 -0
  182. package/dist/commands/run.d.ts +3 -0
  183. package/dist/commands/run.d.ts.map +1 -0
  184. package/dist/commands/run.js +131 -0
  185. package/dist/commands/run.js.map +1 -0
  186. package/dist/commands/sandbox.d.ts +3 -0
  187. package/dist/commands/sandbox.d.ts.map +1 -0
  188. package/dist/commands/sandbox.js +352 -0
  189. package/dist/commands/sandbox.js.map +1 -0
  190. package/dist/commands/schedules.d.ts +3 -0
  191. package/dist/commands/schedules.d.ts.map +1 -0
  192. package/dist/commands/schedules.js +37 -0
  193. package/dist/commands/schedules.js.map +1 -0
  194. package/dist/commands/secrets.d.ts +3 -0
  195. package/dist/commands/secrets.d.ts.map +1 -0
  196. package/dist/commands/secrets.js +194 -0
  197. package/dist/commands/secrets.js.map +1 -0
  198. package/dist/commands/services.d.ts +3 -0
  199. package/dist/commands/services.d.ts.map +1 -0
  200. package/dist/commands/services.js +70 -0
  201. package/dist/commands/services.js.map +1 -0
  202. package/dist/commands/shell.d.ts +16 -0
  203. package/dist/commands/shell.d.ts.map +1 -0
  204. package/dist/commands/shell.js +527 -0
  205. package/dist/commands/shell.js.map +1 -0
  206. package/dist/commands/snapshot.d.ts +10 -0
  207. package/dist/commands/snapshot.d.ts.map +1 -0
  208. package/dist/commands/snapshot.js +181 -0
  209. package/dist/commands/snapshot.js.map +1 -0
  210. package/dist/commands/ssh.d.ts +3 -0
  211. package/dist/commands/ssh.d.ts.map +1 -0
  212. package/dist/commands/ssh.js +37 -0
  213. package/dist/commands/ssh.js.map +1 -0
  214. package/dist/commands/status.d.ts +3 -0
  215. package/dist/commands/status.d.ts.map +1 -0
  216. package/dist/commands/status.js +300 -0
  217. package/dist/commands/status.js.map +1 -0
  218. package/dist/commands/storage.d.ts +3 -0
  219. package/dist/commands/storage.d.ts.map +1 -0
  220. package/dist/commands/storage.js +180 -0
  221. package/dist/commands/storage.js.map +1 -0
  222. package/dist/commands/tenant.d.ts +3 -0
  223. package/dist/commands/tenant.d.ts.map +1 -0
  224. package/dist/commands/tenant.js +87 -0
  225. package/dist/commands/tenant.js.map +1 -0
  226. package/dist/commands/tunnel.d.ts +3 -0
  227. package/dist/commands/tunnel.d.ts.map +1 -0
  228. package/dist/commands/tunnel.js +418 -0
  229. package/dist/commands/tunnel.js.map +1 -0
  230. package/dist/commands/up.d.ts +14 -0
  231. package/dist/commands/up.d.ts.map +1 -0
  232. package/dist/commands/up.js +703 -0
  233. package/dist/commands/up.js.map +1 -0
  234. package/dist/commands/util.d.ts +19 -0
  235. package/dist/commands/util.d.ts.map +1 -0
  236. package/dist/commands/util.js +116 -0
  237. package/dist/commands/util.js.map +1 -0
  238. package/dist/commands/volumes.d.ts +3 -0
  239. package/dist/commands/volumes.d.ts.map +1 -0
  240. package/dist/commands/volumes.js +196 -0
  241. package/dist/commands/volumes.js.map +1 -0
  242. package/dist/commands/watch.d.ts +3 -0
  243. package/dist/commands/watch.d.ts.map +1 -0
  244. package/dist/commands/watch.js +398 -0
  245. package/dist/commands/watch.js.map +1 -0
  246. package/dist/commands/webhooks.d.ts +3 -0
  247. package/dist/commands/webhooks.d.ts.map +1 -0
  248. package/dist/commands/webhooks.js +23 -0
  249. package/dist/commands/webhooks.js.map +1 -0
  250. package/dist/commands/whoami.d.ts +3 -0
  251. package/dist/commands/whoami.d.ts.map +1 -0
  252. package/dist/commands/whoami.js +84 -0
  253. package/dist/commands/whoami.js.map +1 -0
  254. package/dist/commands/workspaces.d.ts +3 -0
  255. package/dist/commands/workspaces.d.ts.map +1 -0
  256. package/dist/commands/workspaces.js +87 -0
  257. package/dist/commands/workspaces.js.map +1 -0
  258. package/dist/config.d.ts +28 -0
  259. package/dist/config.d.ts.map +1 -0
  260. package/dist/config.js +129 -0
  261. package/dist/config.js.map +1 -0
  262. package/dist/errors.d.ts +22 -0
  263. package/dist/errors.d.ts.map +1 -0
  264. package/dist/errors.js +62 -0
  265. package/dist/errors.js.map +1 -0
  266. package/dist/framework-detector.d.ts +22 -0
  267. package/dist/framework-detector.d.ts.map +1 -0
  268. package/dist/framework-detector.js +373 -0
  269. package/dist/framework-detector.js.map +1 -0
  270. package/dist/pty/raw-mode.d.ts +7 -0
  271. package/dist/pty/raw-mode.d.ts.map +1 -0
  272. package/dist/pty/raw-mode.js +22 -0
  273. package/dist/pty/raw-mode.js.map +1 -0
  274. package/dist/pty/ws-pty-client.d.ts +12 -0
  275. package/dist/pty/ws-pty-client.d.ts.map +1 -0
  276. package/dist/pty/ws-pty-client.js +69 -0
  277. package/dist/pty/ws-pty-client.js.map +1 -0
  278. package/dist/types.d.ts +326 -0
  279. package/dist/types.d.ts.map +1 -0
  280. package/dist/types.js +16 -0
  281. package/dist/types.js.map +1 -0
  282. package/dist/ui/progress.d.ts +10 -0
  283. package/dist/ui/progress.d.ts.map +1 -0
  284. package/dist/ui/progress.js +36 -0
  285. package/dist/ui/progress.js.map +1 -0
  286. package/dist/ui/spinner.d.ts +4 -0
  287. package/dist/ui/spinner.d.ts.map +1 -0
  288. package/dist/ui/spinner.js +7 -0
  289. package/dist/ui/spinner.js.map +1 -0
  290. package/dist/ui/table.d.ts +8 -0
  291. package/dist/ui/table.d.ts.map +1 -0
  292. package/dist/ui/table.js +46 -0
  293. package/dist/ui/table.js.map +1 -0
  294. package/package.json +53 -0
@@ -0,0 +1,579 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { execSync } from "node:child_process";
4
+ import chalk from "chalk";
5
+ import { loadConfig } from "../config.js";
6
+ import { MiosaClient, parseSse } from "../client.js";
7
+ import { handleError } from "./util.js";
8
+ import { spin } from "../ui/spinner.js";
9
+ import { renderTable } from "../ui/table.js";
10
+ import { detectFramework, FRAMEWORK_LABELS, } from "../framework-detector.js";
11
+ import { UserError } from "../errors.js";
12
+ import { toDeploymentId } from "../types.js";
13
+ // ── .miosa.json helpers ───────────────────────────────────────────────────────
14
+ const PROJECT_CONFIG_FILE = ".miosa.json";
15
+ function loadProjectConfig(dir) {
16
+ const p = path.join(dir, PROJECT_CONFIG_FILE);
17
+ if (!fs.existsSync(p))
18
+ return null;
19
+ try {
20
+ return JSON.parse(fs.readFileSync(p, "utf8"));
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ function saveProjectConfig(dir, cfg) {
27
+ const p = path.join(dir, PROJECT_CONFIG_FILE);
28
+ fs.writeFileSync(p, JSON.stringify(cfg, null, 2) + "\n");
29
+ }
30
+ function getGitInfo(dir) {
31
+ try {
32
+ execSync("git rev-parse --git-dir", { cwd: dir, stdio: "ignore" });
33
+ }
34
+ catch {
35
+ throw new UserError("Not a git repository.", "Run `git init && git remote add origin <url>` first, then `miosa deploy`.");
36
+ }
37
+ let repoUrl;
38
+ try {
39
+ repoUrl = execSync("git remote get-url origin", {
40
+ cwd: dir,
41
+ encoding: "utf8",
42
+ }).trim();
43
+ }
44
+ catch {
45
+ throw new UserError("No git remote named 'origin' found.", "Add one with: git remote add origin https://github.com/you/your-repo");
46
+ }
47
+ // Normalize SSH remote → HTTPS
48
+ if (repoUrl.startsWith("git@github.com:")) {
49
+ repoUrl = repoUrl
50
+ .replace("git@github.com:", "https://github.com/")
51
+ .replace(/\.git$/, "");
52
+ }
53
+ repoUrl = repoUrl.replace(/\.git$/, "");
54
+ let currentBranch = "main";
55
+ try {
56
+ currentBranch = execSync("git rev-parse --abbrev-ref HEAD", {
57
+ cwd: dir,
58
+ encoding: "utf8",
59
+ }).trim();
60
+ }
61
+ catch {
62
+ // default to main
63
+ }
64
+ return { repoUrl, currentBranch };
65
+ }
66
+ // ── URL helpers ───────────────────────────────────────────────────────────────
67
+ function deploymentUrl(slug, tenantSlug) {
68
+ return `https://${slug}.${tenantSlug}.miosa.app`;
69
+ }
70
+ // ── Deployment ID resolution ──────────────────────────────────────────────────
71
+ function resolveDeploymentId(idArg, cwd) {
72
+ if (idArg)
73
+ return toDeploymentId(idArg);
74
+ const proj = loadProjectConfig(cwd);
75
+ if (proj)
76
+ return proj.deploymentId;
77
+ throw new UserError("No deployment ID provided and no .miosa.json found in current directory.", "Pass a deployment ID or run from a project with .miosa.json");
78
+ }
79
+ // ── Log stream renderer ───────────────────────────────────────────────────────
80
+ async function streamLogs(client, deploymentId) {
81
+ const res = await client.streamDeploymentLogs(deploymentId);
82
+ let lastState = "success";
83
+ for await (const event of parseSse(res.body)) {
84
+ switch (event.type) {
85
+ case "stdout": {
86
+ process.stdout.write(chalk.dim(" ") + event.data);
87
+ break;
88
+ }
89
+ case "stderr": {
90
+ process.stderr.write(chalk.red(" ") + event.data);
91
+ break;
92
+ }
93
+ case "error": {
94
+ console.error(chalk.red(` [error] ${event.message}`));
95
+ lastState = "failure";
96
+ break;
97
+ }
98
+ case "done": {
99
+ // done event may carry build state
100
+ if (event.result && typeof event.result === "object") {
101
+ const r = event.result;
102
+ if (r["state"] === "failed")
103
+ lastState = "failure";
104
+ }
105
+ return lastState;
106
+ }
107
+ case "unknown": {
108
+ // Try to parse log_line events from the deployment SSE format
109
+ // event: log_line data: {"stream":"stdout","line":"...","ts":"..."}
110
+ try {
111
+ const parsed = JSON.parse(event.raw);
112
+ if (typeof parsed["line"] === "string") {
113
+ const stream = parsed["stream"] ?? "stdout";
114
+ const line = parsed["line"];
115
+ if (stream === "stderr") {
116
+ process.stderr.write(chalk.red(" ") + line + "\n");
117
+ }
118
+ else {
119
+ process.stdout.write(chalk.dim(" ") + line + "\n");
120
+ }
121
+ }
122
+ }
123
+ catch {
124
+ // ignore unparseable frames
125
+ }
126
+ break;
127
+ }
128
+ default:
129
+ break;
130
+ }
131
+ }
132
+ return lastState;
133
+ }
134
+ // ── Sub-command helpers ───────────────────────────────────────────────────────
135
+ function fmtBuildState(state) {
136
+ switch (state) {
137
+ case "succeeded":
138
+ return chalk.green(state);
139
+ case "failed":
140
+ return chalk.red(state);
141
+ case "building":
142
+ return chalk.yellow(state);
143
+ case "queued":
144
+ return chalk.dim(state);
145
+ case "cancelled":
146
+ return chalk.dim(state);
147
+ }
148
+ }
149
+ function fmtDeployState(state) {
150
+ switch (state) {
151
+ case "running":
152
+ return chalk.green(state);
153
+ case "failed":
154
+ return chalk.red(state);
155
+ case "building":
156
+ return chalk.yellow(state);
157
+ case "stopped":
158
+ return chalk.dim(state);
159
+ case "pending":
160
+ return chalk.dim(state);
161
+ }
162
+ }
163
+ // ── register ──────────────────────────────────────────────────────────────────
164
+ export function register(program) {
165
+ const deploy = program
166
+ .command("deploy")
167
+ .alias("launch")
168
+ .description("Deploy a GitHub repo to MIOSA Deploy")
169
+ .addHelpText("after", `
170
+ Examples:
171
+ miosa deploy Deploy current directory (auto-detects framework)
172
+ miosa deploy list List all deployments
173
+ miosa deploy logs Tail build logs for this project
174
+ miosa deploy redeploy Trigger a new build
175
+ miosa deploy env set NODE_ENV=production
176
+ miosa deploy env list
177
+ miosa deploy domain add example.com
178
+ miosa deploy destroy Tear down this deployment
179
+ `)
180
+ .action(async () => {
181
+ // Default action: interactive deploy flow
182
+ try {
183
+ const cwd = process.cwd();
184
+ const config = loadConfig();
185
+ const client = new MiosaClient(config);
186
+ // ── Check for existing .miosa.json first (skip git for redeploys) ──
187
+ let projectCfg = loadProjectConfig(cwd);
188
+ let deploymentId;
189
+ if (projectCfg) {
190
+ // ── Re-deploy from existing .miosa.json ──────────────────────
191
+ console.log();
192
+ console.log(chalk.dim(" Found .miosa.json — redeploying existing deployment"));
193
+ console.log(` ${chalk.bold("Project")} ${projectCfg.name} (${projectCfg.framework})`);
194
+ console.log(` ${chalk.bold("Branch")} ${projectCfg.branch}`);
195
+ console.log();
196
+ deploymentId = projectCfg.deploymentId;
197
+ const buildSpinner = spin("Queuing build...");
198
+ try {
199
+ await client.redeployDeployment(deploymentId);
200
+ buildSpinner.succeed("Build queued");
201
+ }
202
+ catch (err) {
203
+ buildSpinner.fail("Failed to queue build");
204
+ handleError(err);
205
+ }
206
+ }
207
+ else {
208
+ // ── First deploy: verify git repo + remote, then detect ───────
209
+ const { repoUrl, currentBranch } = getGitInfo(cwd);
210
+ console.log();
211
+ const detection = detectFramework(cwd);
212
+ let framework = "unknown";
213
+ let buildCommand = "npm run build";
214
+ let runCommand = "npm start";
215
+ if (detection) {
216
+ const label = FRAMEWORK_LABELS[detection.framework] ??
217
+ detection.framework;
218
+ console.log(` Detected: ${chalk.cyan(label)} (confidence ${detection.confidence}%)`);
219
+ framework = detection.framework;
220
+ buildCommand = detection.buildCommand;
221
+ runCommand = detection.runCommand;
222
+ }
223
+ else {
224
+ console.log(chalk.yellow(" Could not auto-detect framework. You can set build/run commands manually."));
225
+ }
226
+ console.log(` Repo: ${chalk.dim(repoUrl)}`);
227
+ console.log(` Branch: ${chalk.dim(currentBranch)}`);
228
+ console.log();
229
+ // ── Interactive prompts ──────────────────────────────────────
230
+ const { default: inquirer } = await import("inquirer");
231
+ const projectName = path.basename(cwd).replace(/[^a-z0-9-]/gi, "-");
232
+ const answers = await inquirer.prompt([
233
+ {
234
+ type: "input",
235
+ name: "name",
236
+ message: "Deployment name:",
237
+ default: projectName,
238
+ validate: (v) => v.length > 0 ? true : "Name is required",
239
+ },
240
+ {
241
+ type: "input",
242
+ name: "branch",
243
+ message: "Branch to deploy:",
244
+ default: currentBranch,
245
+ },
246
+ {
247
+ type: "input",
248
+ name: "buildCommand",
249
+ message: "Build command:",
250
+ default: buildCommand,
251
+ },
252
+ {
253
+ type: "input",
254
+ name: "runCommand",
255
+ message: "Run command:",
256
+ default: runCommand,
257
+ },
258
+ {
259
+ type: "confirm",
260
+ name: "confirm",
261
+ message: "Create deployment?",
262
+ default: true,
263
+ },
264
+ ]);
265
+ if (!answers.confirm) {
266
+ console.log(chalk.dim(" Cancelled."));
267
+ process.exit(0);
268
+ }
269
+ // ── Step 3: POST /api/v1/deployments ─────────────────────────
270
+ const createSpinner = spin(`Creating deployment "${answers.name}"...`);
271
+ let webhookSecret;
272
+ let deployment;
273
+ try {
274
+ const result = await client.createDeployment({
275
+ name: answers.name,
276
+ repo_url: repoUrl,
277
+ branch: answers.branch,
278
+ build_command: answers.buildCommand || undefined,
279
+ run_command: answers.runCommand || undefined,
280
+ auto_deploy: true,
281
+ });
282
+ deployment = result.data;
283
+ webhookSecret = result.webhook_secret;
284
+ createSpinner.succeed(`Deployment "${deployment.name}" created (slug: ${deployment.slug})`);
285
+ }
286
+ catch (err) {
287
+ createSpinner.fail("Failed to create deployment");
288
+ handleError(err);
289
+ }
290
+ deploymentId = deployment.id;
291
+ framework = framework !== "unknown" ? framework : "unknown";
292
+ // ── Step 4: Save .miosa.json ──────────────────────────────────
293
+ projectCfg = {
294
+ version: 1,
295
+ deploymentId: deployment.id,
296
+ name: deployment.name,
297
+ framework,
298
+ buildCommand: answers.buildCommand,
299
+ runCommand: answers.runCommand,
300
+ branch: answers.branch,
301
+ };
302
+ saveProjectConfig(cwd, projectCfg);
303
+ console.log(chalk.dim(` Saved .miosa.json`));
304
+ // ── Step 4b: Print webhook secret (one-time) ─────────────────
305
+ console.log();
306
+ console.log(chalk.bold.yellow(" ACTION REQUIRED — GitHub Webhook"));
307
+ console.log(chalk.dim(" The webhook secret below is shown ONCE. Store it now."));
308
+ console.log();
309
+ console.log(` ${chalk.bold("Webhook URL:")} https://api.miosa.ai/api/v1/integrations/github/webhook`);
310
+ console.log(` ${chalk.bold("Content type:")} application/json`);
311
+ console.log(` ${chalk.bold("Secret:")} ${chalk.green(webhookSecret)}`);
312
+ console.log(` ${chalk.bold("Events:")} push`);
313
+ console.log();
314
+ console.log(chalk.dim(" Add this at: " + repoUrl + "/settings/hooks/new"));
315
+ console.log();
316
+ // ── Step 5: Trigger initial build ─────────────────────────────
317
+ const buildSpinner = spin("Queuing initial build...");
318
+ try {
319
+ await client.redeployDeployment(deploymentId);
320
+ buildSpinner.succeed("Initial build queued");
321
+ }
322
+ catch (err) {
323
+ buildSpinner.fail("Failed to queue build");
324
+ handleError(err);
325
+ }
326
+ }
327
+ // ── Step 6: Stream build logs ─────────────────────────────────────
328
+ console.log();
329
+ console.log(chalk.bold(" Build log:"));
330
+ console.log(chalk.dim(" " + "─".repeat(60)));
331
+ const buildResult = await streamLogs(client, deploymentId);
332
+ console.log(chalk.dim(" " + "─".repeat(60)));
333
+ console.log();
334
+ // ── Step 7: Final status ──────────────────────────────────────────
335
+ if (buildResult === "success") {
336
+ // Fetch the deployment to get the slug + tenant slug
337
+ const spinner = spin("Fetching deployment info...");
338
+ try {
339
+ const dep = await client.getDeployment(deploymentId);
340
+ const tenant = await client.getTenant();
341
+ spinner.stop();
342
+ const url = deploymentUrl(dep.slug, tenant.slug);
343
+ console.log(chalk.green(" Deployed"));
344
+ console.log();
345
+ console.log(` ${chalk.bold("URL:")} ${chalk.cyan(url)}`);
346
+ console.log();
347
+ console.log(chalk.dim(" Next steps:"));
348
+ console.log(chalk.dim(` miosa deploy logs — tail logs`));
349
+ console.log(chalk.dim(` miosa deploy domain add example.com — add custom domain`));
350
+ console.log(chalk.dim(` miosa deploy env set KEY=VALUE — set env var`));
351
+ }
352
+ catch {
353
+ spinner.stop();
354
+ console.log(chalk.green(" Deployed"));
355
+ }
356
+ }
357
+ else {
358
+ console.log(chalk.red(" Build failed."));
359
+ console.log();
360
+ console.log(chalk.dim(" View full logs: miosa deploy logs"));
361
+ console.log(chalk.dim(` Dashboard: https://app.miosa.ai/deploy/${deploymentId}`));
362
+ process.exit(1);
363
+ }
364
+ }
365
+ catch (err) {
366
+ handleError(err);
367
+ }
368
+ });
369
+ // ── deploy list ─────────────────────────────────────────────────────────────
370
+ deploy
371
+ .command("list")
372
+ .description("List all deployments for this tenant")
373
+ .option("--json", "Output raw JSON")
374
+ .action(async (opts) => {
375
+ try {
376
+ const config = loadConfig();
377
+ const client = new MiosaClient(config);
378
+ const spinner = spin("Fetching deployments...");
379
+ const deployments = await client.listDeployments();
380
+ spinner.stop();
381
+ if (opts.json) {
382
+ console.log(JSON.stringify(deployments, null, 2));
383
+ return;
384
+ }
385
+ renderTable(deployments, [
386
+ { header: "ID", key: (d) => d.id.slice(0, 8), width: 10 },
387
+ { header: "NAME", key: "name", width: 24 },
388
+ { header: "SLUG", key: "slug", width: 24 },
389
+ { header: "BRANCH", key: "branch", width: 12 },
390
+ {
391
+ header: "STATE",
392
+ key: (d) => fmtDeployState(d.state),
393
+ width: 10,
394
+ },
395
+ {
396
+ header: "UPDATED",
397
+ key: (d) => new Date(d.updated_at).toLocaleString(),
398
+ width: 20,
399
+ },
400
+ ]);
401
+ }
402
+ catch (err) {
403
+ handleError(err);
404
+ }
405
+ });
406
+ // ── deploy logs ─────────────────────────────────────────────────────────────
407
+ deploy
408
+ .command("logs [id]")
409
+ .description("Tail live build logs for a deployment (auto-detected from .miosa.json)")
410
+ .action(async (id) => {
411
+ try {
412
+ const cwd = process.cwd();
413
+ const config = loadConfig();
414
+ const client = new MiosaClient(config);
415
+ const deploymentId = resolveDeploymentId(id, cwd);
416
+ console.log(chalk.dim(` Streaming logs for ${deploymentId}...`));
417
+ console.log(chalk.dim(" " + "─".repeat(60)));
418
+ await streamLogs(client, deploymentId);
419
+ console.log(chalk.dim(" " + "─".repeat(60)));
420
+ }
421
+ catch (err) {
422
+ handleError(err);
423
+ }
424
+ });
425
+ // ── deploy redeploy ──────────────────────────────────────────────────────────
426
+ deploy
427
+ .command("redeploy [id]")
428
+ .description("Trigger a manual rebuild (auto-detected from .miosa.json)")
429
+ .option("--no-follow", "Queue the build without tailing logs")
430
+ .action(async (id, opts) => {
431
+ try {
432
+ const cwd = process.cwd();
433
+ const config = loadConfig();
434
+ const client = new MiosaClient(config);
435
+ const deploymentId = resolveDeploymentId(id, cwd);
436
+ const spinner = spin("Queuing build...");
437
+ const build = await client.redeployDeployment(deploymentId);
438
+ spinner.succeed(`Build queued (id: ${build.id.slice(0, 8)})`);
439
+ if (opts?.follow !== false) {
440
+ console.log();
441
+ console.log(chalk.bold(" Build log:"));
442
+ console.log(chalk.dim(" " + "─".repeat(60)));
443
+ await streamLogs(client, deploymentId);
444
+ console.log(chalk.dim(" " + "─".repeat(60)));
445
+ }
446
+ }
447
+ catch (err) {
448
+ handleError(err);
449
+ }
450
+ });
451
+ // ── deploy env ───────────────────────────────────────────────────────────────
452
+ const envCmd = deploy
453
+ .command("env")
454
+ .description("Manage environment variables for a deployment");
455
+ envCmd
456
+ .command("set <pairs...>")
457
+ .description("Set one or more env vars (KEY=VALUE)")
458
+ .option("--id <id>", "Deployment ID (overrides .miosa.json)")
459
+ .action(async (pairs, opts) => {
460
+ try {
461
+ const cwd = process.cwd();
462
+ const config = loadConfig();
463
+ const client = new MiosaClient(config);
464
+ const deploymentId = resolveDeploymentId(opts.id, cwd);
465
+ const env = {};
466
+ for (const pair of pairs) {
467
+ const eq = pair.indexOf("=");
468
+ if (eq === -1) {
469
+ env[pair] = "";
470
+ }
471
+ else {
472
+ env[pair.slice(0, eq)] = pair.slice(eq + 1);
473
+ }
474
+ }
475
+ const spinner = spin("Setting env vars...");
476
+ const vars = await client.setDeploymentEnv(deploymentId, env);
477
+ spinner.succeed(`Set ${vars.length} env var(s)`);
478
+ for (const v of vars) {
479
+ console.log(` ${chalk.bold(v.name)} ${chalk.dim(v.preview)}`);
480
+ }
481
+ }
482
+ catch (err) {
483
+ handleError(err);
484
+ }
485
+ });
486
+ envCmd
487
+ .command("list [id]")
488
+ .description("List env var names and masked previews")
489
+ .action(async (id) => {
490
+ try {
491
+ const cwd = process.cwd();
492
+ const config = loadConfig();
493
+ const client = new MiosaClient(config);
494
+ const deploymentId = resolveDeploymentId(id, cwd);
495
+ const spinner = spin("Fetching env vars...");
496
+ const vars = await client.getDeploymentEnv(deploymentId);
497
+ spinner.stop();
498
+ if (vars.length === 0) {
499
+ console.log(chalk.dim(" No env vars set."));
500
+ return;
501
+ }
502
+ renderTable(vars, [
503
+ { header: "NAME", key: "name", width: 32 },
504
+ { header: "VALUE", key: (v) => chalk.dim(v.preview), width: 20 },
505
+ {
506
+ header: "UPDATED",
507
+ key: (v) => new Date(v.updated_at).toLocaleString(),
508
+ width: 20,
509
+ },
510
+ ]);
511
+ }
512
+ catch (err) {
513
+ handleError(err);
514
+ }
515
+ });
516
+ // ── deploy domain ────────────────────────────────────────────────────────────
517
+ const domainCmd = deploy
518
+ .command("domain")
519
+ .description("Manage custom domains for a deployment");
520
+ domainCmd
521
+ .command("add <domain> [id]")
522
+ .description("Add a custom domain to a deployment")
523
+ .action(async (domain, id) => {
524
+ try {
525
+ const cwd = process.cwd();
526
+ resolveDeploymentId(id, cwd); // validate — actual domain API is v2
527
+ // Domain management endpoints are in the next sprint.
528
+ // Point the user to the dashboard in the interim.
529
+ console.log();
530
+ console.log(chalk.yellow(` Custom domain management is not yet available via the CLI.`));
531
+ console.log(chalk.dim(` Configure "${domain}" at: https://app.miosa.ai/deploy`));
532
+ console.log();
533
+ }
534
+ catch (err) {
535
+ handleError(err);
536
+ }
537
+ });
538
+ // ── deploy destroy ───────────────────────────────────────────────────────────
539
+ deploy
540
+ .command("destroy [id]")
541
+ .description("Permanently delete a deployment and all build history")
542
+ .option("-f, --force", "Skip confirmation prompt")
543
+ .action(async (id, opts) => {
544
+ try {
545
+ const cwd = process.cwd();
546
+ const config = loadConfig();
547
+ const client = new MiosaClient(config);
548
+ const deploymentId = resolveDeploymentId(id, cwd);
549
+ if (!opts?.force) {
550
+ const { default: inquirer } = await import("inquirer");
551
+ const { ok } = await inquirer.prompt([
552
+ {
553
+ type: "confirm",
554
+ name: "ok",
555
+ message: chalk.red(`Destroy deployment ${deploymentId.slice(0, 8)}? This is irreversible.`),
556
+ default: false,
557
+ },
558
+ ]);
559
+ if (!ok) {
560
+ console.log(chalk.dim(" Cancelled."));
561
+ process.exit(0);
562
+ }
563
+ }
564
+ const spinner = spin("Destroying deployment...");
565
+ await client.deleteDeployment(deploymentId);
566
+ spinner.succeed("Deployment destroyed");
567
+ // Remove local .miosa.json if it references this deployment
568
+ const proj = loadProjectConfig(cwd);
569
+ if (proj?.deploymentId === deploymentId) {
570
+ fs.unlinkSync(path.join(cwd, PROJECT_CONFIG_FILE));
571
+ console.log(chalk.dim(" Removed .miosa.json"));
572
+ }
573
+ }
574
+ catch (err) {
575
+ handleError(err);
576
+ }
577
+ });
578
+ }
579
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerDesktopCommands(computers: Command): void;
3
+ //# sourceMappingURL=desktop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../src/commands/desktop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgFzC,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAuVhE"}