@miosa/cli 1.3.4 → 2.1.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 (489) hide show
  1. package/README.md +20 -835
  2. package/bin/miosa.js +75 -0
  3. package/lib/archive.js +88 -0
  4. package/lib/checksums.js +29 -0
  5. package/lib/platforms.js +31 -0
  6. package/lib/resolve.js +47 -0
  7. package/package.json +26 -41
  8. package/scripts/postinstall.js +68 -0
  9. package/CHANGELOG.md +0 -110
  10. package/dist/action-authority.d.ts +0 -106
  11. package/dist/action-authority.d.ts.map +0 -1
  12. package/dist/action-authority.js +0 -116
  13. package/dist/action-authority.js.map +0 -1
  14. package/dist/app-advisor.d.ts +0 -80
  15. package/dist/app-advisor.d.ts.map +0 -1
  16. package/dist/app-advisor.js +0 -486
  17. package/dist/app-advisor.js.map +0 -1
  18. package/dist/app-contract.d.ts +0 -92
  19. package/dist/app-contract.d.ts.map +0 -1
  20. package/dist/app-contract.js +0 -218
  21. package/dist/app-contract.js.map +0 -1
  22. package/dist/app-document.d.ts +0 -23
  23. package/dist/app-document.d.ts.map +0 -1
  24. package/dist/app-document.js +0 -180
  25. package/dist/app-document.js.map +0 -1
  26. package/dist/app-manifest.d.ts +0 -140
  27. package/dist/app-manifest.d.ts.map +0 -1
  28. package/dist/app-manifest.js +0 -377
  29. package/dist/app-manifest.js.map +0 -1
  30. package/dist/app-operation.d.ts +0 -23
  31. package/dist/app-operation.d.ts.map +0 -1
  32. package/dist/app-operation.js +0 -49
  33. package/dist/app-operation.js.map +0 -1
  34. package/dist/app-release.d.ts +0 -132
  35. package/dist/app-release.d.ts.map +0 -1
  36. package/dist/app-release.js +0 -294
  37. package/dist/app-release.js.map +0 -1
  38. package/dist/bin/miosa.d.ts +0 -3
  39. package/dist/bin/miosa.d.ts.map +0 -1
  40. package/dist/bin/miosa.js +0 -288
  41. package/dist/bin/miosa.js.map +0 -1
  42. package/dist/cli-env.d.ts +0 -12
  43. package/dist/cli-env.d.ts.map +0 -1
  44. package/dist/cli-env.js +0 -34
  45. package/dist/cli-env.js.map +0 -1
  46. package/dist/client.d.ts +0 -155
  47. package/dist/client.d.ts.map +0 -1
  48. package/dist/client.js +0 -865
  49. package/dist/client.js.map +0 -1
  50. package/dist/commands/actions.d.ts +0 -3
  51. package/dist/commands/actions.d.ts.map +0 -1
  52. package/dist/commands/actions.js +0 -222
  53. package/dist/commands/actions.js.map +0 -1
  54. package/dist/commands/agent-runtime-profiles.d.ts +0 -3
  55. package/dist/commands/agent-runtime-profiles.d.ts.map +0 -1
  56. package/dist/commands/agent-runtime-profiles.js +0 -198
  57. package/dist/commands/agent-runtime-profiles.js.map +0 -1
  58. package/dist/commands/agent.d.ts +0 -18
  59. package/dist/commands/agent.d.ts.map +0 -1
  60. package/dist/commands/agent.js +0 -737
  61. package/dist/commands/agent.js.map +0 -1
  62. package/dist/commands/alerts.d.ts +0 -3
  63. package/dist/commands/alerts.d.ts.map +0 -1
  64. package/dist/commands/alerts.js +0 -41
  65. package/dist/commands/alerts.js.map +0 -1
  66. package/dist/commands/api-keys.d.ts +0 -3
  67. package/dist/commands/api-keys.d.ts.map +0 -1
  68. package/dist/commands/api-keys.js +0 -160
  69. package/dist/commands/api-keys.js.map +0 -1
  70. package/dist/commands/api-resource.d.ts +0 -20
  71. package/dist/commands/api-resource.d.ts.map +0 -1
  72. package/dist/commands/api-resource.js +0 -120
  73. package/dist/commands/api-resource.js.map +0 -1
  74. package/dist/commands/app.d.ts +0 -38
  75. package/dist/commands/app.d.ts.map +0 -1
  76. package/dist/commands/app.js +0 -1182
  77. package/dist/commands/app.js.map +0 -1
  78. package/dist/commands/apps.d.ts +0 -3
  79. package/dist/commands/apps.d.ts.map +0 -1
  80. package/dist/commands/apps.js +0 -218
  81. package/dist/commands/apps.js.map +0 -1
  82. package/dist/commands/audit.d.ts +0 -3
  83. package/dist/commands/audit.d.ts.map +0 -1
  84. package/dist/commands/audit.js +0 -25
  85. package/dist/commands/audit.js.map +0 -1
  86. package/dist/commands/auth.d.ts +0 -3
  87. package/dist/commands/auth.d.ts.map +0 -1
  88. package/dist/commands/auth.js +0 -282
  89. package/dist/commands/auth.js.map +0 -1
  90. package/dist/commands/backups.d.ts +0 -3
  91. package/dist/commands/backups.d.ts.map +0 -1
  92. package/dist/commands/backups.js +0 -23
  93. package/dist/commands/backups.js.map +0 -1
  94. package/dist/commands/billing.d.ts +0 -3
  95. package/dist/commands/billing.d.ts.map +0 -1
  96. package/dist/commands/billing.js +0 -208
  97. package/dist/commands/billing.js.map +0 -1
  98. package/dist/commands/builds.d.ts +0 -3
  99. package/dist/commands/builds.d.ts.map +0 -1
  100. package/dist/commands/builds.js +0 -198
  101. package/dist/commands/builds.js.map +0 -1
  102. package/dist/commands/capabilities.d.ts +0 -3
  103. package/dist/commands/capabilities.d.ts.map +0 -1
  104. package/dist/commands/capabilities.js +0 -1002
  105. package/dist/commands/capabilities.js.map +0 -1
  106. package/dist/commands/checkpoints.d.ts +0 -3
  107. package/dist/commands/checkpoints.d.ts.map +0 -1
  108. package/dist/commands/checkpoints.js +0 -193
  109. package/dist/commands/checkpoints.js.map +0 -1
  110. package/dist/commands/cleanup.d.ts +0 -3
  111. package/dist/commands/cleanup.d.ts.map +0 -1
  112. package/dist/commands/cleanup.js +0 -65
  113. package/dist/commands/cleanup.js.map +0 -1
  114. package/dist/commands/cloud.d.ts +0 -3
  115. package/dist/commands/cloud.d.ts.map +0 -1
  116. package/dist/commands/cloud.js +0 -192
  117. package/dist/commands/cloud.js.map +0 -1
  118. package/dist/commands/command-overview.d.ts +0 -13
  119. package/dist/commands/command-overview.d.ts.map +0 -1
  120. package/dist/commands/command-overview.js +0 -50
  121. package/dist/commands/command-overview.js.map +0 -1
  122. package/dist/commands/completion.d.ts +0 -3
  123. package/dist/commands/completion.d.ts.map +0 -1
  124. package/dist/commands/completion.js +0 -183
  125. package/dist/commands/completion.js.map +0 -1
  126. package/dist/commands/computers.d.ts +0 -3
  127. package/dist/commands/computers.d.ts.map +0 -1
  128. package/dist/commands/computers.js +0 -706
  129. package/dist/commands/computers.js.map +0 -1
  130. package/dist/commands/config.d.ts +0 -3
  131. package/dist/commands/config.d.ts.map +0 -1
  132. package/dist/commands/config.js +0 -114
  133. package/dist/commands/config.js.map +0 -1
  134. package/dist/commands/connect.d.ts +0 -6
  135. package/dist/commands/connect.d.ts.map +0 -1
  136. package/dist/commands/connect.js +0 -127
  137. package/dist/commands/connect.js.map +0 -1
  138. package/dist/commands/connectors.d.ts +0 -3
  139. package/dist/commands/connectors.d.ts.map +0 -1
  140. package/dist/commands/connectors.js +0 -172
  141. package/dist/commands/connectors.js.map +0 -1
  142. package/dist/commands/containers.d.ts +0 -3
  143. package/dist/commands/containers.d.ts.map +0 -1
  144. package/dist/commands/containers.js +0 -20
  145. package/dist/commands/containers.js.map +0 -1
  146. package/dist/commands/context.d.ts +0 -3
  147. package/dist/commands/context.d.ts.map +0 -1
  148. package/dist/commands/context.js +0 -233
  149. package/dist/commands/context.js.map +0 -1
  150. package/dist/commands/cp.d.ts +0 -3
  151. package/dist/commands/cp.d.ts.map +0 -1
  152. package/dist/commands/cp.js +0 -319
  153. package/dist/commands/cp.js.map +0 -1
  154. package/dist/commands/cron.d.ts +0 -3
  155. package/dist/commands/cron.d.ts.map +0 -1
  156. package/dist/commands/cron.js +0 -65
  157. package/dist/commands/cron.js.map +0 -1
  158. package/dist/commands/dashboard.d.ts +0 -13
  159. package/dist/commands/dashboard.d.ts.map +0 -1
  160. package/dist/commands/dashboard.js +0 -54
  161. package/dist/commands/dashboard.js.map +0 -1
  162. package/dist/commands/databases.d.ts +0 -3
  163. package/dist/commands/databases.d.ts.map +0 -1
  164. package/dist/commands/databases.js +0 -714
  165. package/dist/commands/databases.js.map +0 -1
  166. package/dist/commands/db.d.ts +0 -3
  167. package/dist/commands/db.d.ts.map +0 -1
  168. package/dist/commands/db.js +0 -385
  169. package/dist/commands/db.js.map +0 -1
  170. package/dist/commands/deploy.d.ts +0 -3
  171. package/dist/commands/deploy.d.ts.map +0 -1
  172. package/dist/commands/deploy.js +0 -1234
  173. package/dist/commands/deploy.js.map +0 -1
  174. package/dist/commands/desktop.d.ts +0 -3
  175. package/dist/commands/desktop.d.ts.map +0 -1
  176. package/dist/commands/desktop.js +0 -277
  177. package/dist/commands/desktop.js.map +0 -1
  178. package/dist/commands/dev.d.ts +0 -3
  179. package/dist/commands/dev.d.ts.map +0 -1
  180. package/dist/commands/dev.js +0 -245
  181. package/dist/commands/dev.js.map +0 -1
  182. package/dist/commands/devices.d.ts +0 -3
  183. package/dist/commands/devices.d.ts.map +0 -1
  184. package/dist/commands/devices.js +0 -279
  185. package/dist/commands/devices.js.map +0 -1
  186. package/dist/commands/docker-deploy.d.ts +0 -3
  187. package/dist/commands/docker-deploy.d.ts.map +0 -1
  188. package/dist/commands/docker-deploy.js +0 -659
  189. package/dist/commands/docker-deploy.js.map +0 -1
  190. package/dist/commands/doctor.d.ts +0 -69
  191. package/dist/commands/doctor.d.ts.map +0 -1
  192. package/dist/commands/doctor.js +0 -596
  193. package/dist/commands/doctor.js.map +0 -1
  194. package/dist/commands/domains.d.ts +0 -3
  195. package/dist/commands/domains.d.ts.map +0 -1
  196. package/dist/commands/domains.js +0 -307
  197. package/dist/commands/domains.js.map +0 -1
  198. package/dist/commands/enterprise-util.d.ts +0 -39
  199. package/dist/commands/enterprise-util.d.ts.map +0 -1
  200. package/dist/commands/enterprise-util.js +0 -217
  201. package/dist/commands/enterprise-util.js.map +0 -1
  202. package/dist/commands/env-input.d.ts +0 -26
  203. package/dist/commands/env-input.d.ts.map +0 -1
  204. package/dist/commands/env-input.js +0 -68
  205. package/dist/commands/env-input.js.map +0 -1
  206. package/dist/commands/env.d.ts +0 -3
  207. package/dist/commands/env.d.ts.map +0 -1
  208. package/dist/commands/env.js +0 -189
  209. package/dist/commands/env.js.map +0 -1
  210. package/dist/commands/exec.d.ts +0 -3
  211. package/dist/commands/exec.d.ts.map +0 -1
  212. package/dist/commands/exec.js +0 -110
  213. package/dist/commands/exec.js.map +0 -1
  214. package/dist/commands/forge.d.ts +0 -3
  215. package/dist/commands/forge.d.ts.map +0 -1
  216. package/dist/commands/forge.js +0 -254
  217. package/dist/commands/forge.js.map +0 -1
  218. package/dist/commands/functions.d.ts +0 -3
  219. package/dist/commands/functions.d.ts.map +0 -1
  220. package/dist/commands/functions.js +0 -47
  221. package/dist/commands/functions.js.map +0 -1
  222. package/dist/commands/gha-runners.d.ts +0 -3
  223. package/dist/commands/gha-runners.d.ts.map +0 -1
  224. package/dist/commands/gha-runners.js +0 -33
  225. package/dist/commands/gha-runners.js.map +0 -1
  226. package/dist/commands/groups.d.ts +0 -3
  227. package/dist/commands/groups.d.ts.map +0 -1
  228. package/dist/commands/groups.js +0 -38
  229. package/dist/commands/groups.js.map +0 -1
  230. package/dist/commands/host.d.ts +0 -3
  231. package/dist/commands/host.d.ts.map +0 -1
  232. package/dist/commands/host.js +0 -74
  233. package/dist/commands/host.js.map +0 -1
  234. package/dist/commands/hosts.d.ts +0 -7
  235. package/dist/commands/hosts.d.ts.map +0 -1
  236. package/dist/commands/hosts.js +0 -91
  237. package/dist/commands/hosts.js.map +0 -1
  238. package/dist/commands/link.d.ts +0 -8
  239. package/dist/commands/link.d.ts.map +0 -1
  240. package/dist/commands/link.js +0 -124
  241. package/dist/commands/link.js.map +0 -1
  242. package/dist/commands/login.d.ts +0 -10
  243. package/dist/commands/login.d.ts.map +0 -1
  244. package/dist/commands/login.js +0 -263
  245. package/dist/commands/login.js.map +0 -1
  246. package/dist/commands/logout.d.ts +0 -3
  247. package/dist/commands/logout.d.ts.map +0 -1
  248. package/dist/commands/logout.js +0 -43
  249. package/dist/commands/logout.js.map +0 -1
  250. package/dist/commands/logs.d.ts +0 -3
  251. package/dist/commands/logs.d.ts.map +0 -1
  252. package/dist/commands/logs.js +0 -401
  253. package/dist/commands/logs.js.map +0 -1
  254. package/dist/commands/ls.d.ts +0 -3
  255. package/dist/commands/ls.d.ts.map +0 -1
  256. package/dist/commands/ls.js +0 -121
  257. package/dist/commands/ls.js.map +0 -1
  258. package/dist/commands/mcp.d.ts +0 -46
  259. package/dist/commands/mcp.d.ts.map +0 -1
  260. package/dist/commands/mcp.js +0 -3413
  261. package/dist/commands/mcp.js.map +0 -1
  262. package/dist/commands/menu.d.ts +0 -29
  263. package/dist/commands/menu.d.ts.map +0 -1
  264. package/dist/commands/menu.js +0 -147
  265. package/dist/commands/menu.js.map +0 -1
  266. package/dist/commands/meshes.d.ts +0 -3
  267. package/dist/commands/meshes.d.ts.map +0 -1
  268. package/dist/commands/meshes.js +0 -27
  269. package/dist/commands/meshes.js.map +0 -1
  270. package/dist/commands/network-policy.d.ts +0 -3
  271. package/dist/commands/network-policy.d.ts.map +0 -1
  272. package/dist/commands/network-policy.js +0 -155
  273. package/dist/commands/network-policy.js.map +0 -1
  274. package/dist/commands/new.d.ts +0 -3
  275. package/dist/commands/new.d.ts.map +0 -1
  276. package/dist/commands/new.js +0 -296
  277. package/dist/commands/new.js.map +0 -1
  278. package/dist/commands/opencomputers.d.ts +0 -10
  279. package/dist/commands/opencomputers.d.ts.map +0 -1
  280. package/dist/commands/opencomputers.js +0 -25
  281. package/dist/commands/opencomputers.js.map +0 -1
  282. package/dist/commands/operating-contract.d.ts +0 -3
  283. package/dist/commands/operating-contract.d.ts.map +0 -1
  284. package/dist/commands/operating-contract.js +0 -651
  285. package/dist/commands/operating-contract.js.map +0 -1
  286. package/dist/commands/project.d.ts +0 -4
  287. package/dist/commands/project.d.ts.map +0 -1
  288. package/dist/commands/project.js +0 -25
  289. package/dist/commands/project.js.map +0 -1
  290. package/dist/commands/pull.d.ts +0 -14
  291. package/dist/commands/pull.d.ts.map +0 -1
  292. package/dist/commands/pull.js +0 -156
  293. package/dist/commands/pull.js.map +0 -1
  294. package/dist/commands/regions.d.ts +0 -3
  295. package/dist/commands/regions.d.ts.map +0 -1
  296. package/dist/commands/regions.js +0 -103
  297. package/dist/commands/regions.js.map +0 -1
  298. package/dist/commands/releases.d.ts +0 -3
  299. package/dist/commands/releases.d.ts.map +0 -1
  300. package/dist/commands/releases.js +0 -365
  301. package/dist/commands/releases.js.map +0 -1
  302. package/dist/commands/rm.d.ts +0 -3
  303. package/dist/commands/rm.d.ts.map +0 -1
  304. package/dist/commands/rm.js +0 -42
  305. package/dist/commands/rm.js.map +0 -1
  306. package/dist/commands/rollback.d.ts +0 -3
  307. package/dist/commands/rollback.d.ts.map +0 -1
  308. package/dist/commands/rollback.js +0 -62
  309. package/dist/commands/rollback.js.map +0 -1
  310. package/dist/commands/run-groups.d.ts +0 -3
  311. package/dist/commands/run-groups.d.ts.map +0 -1
  312. package/dist/commands/run-groups.js +0 -364
  313. package/dist/commands/run-groups.js.map +0 -1
  314. package/dist/commands/run.d.ts +0 -3
  315. package/dist/commands/run.d.ts.map +0 -1
  316. package/dist/commands/run.js +0 -130
  317. package/dist/commands/run.js.map +0 -1
  318. package/dist/commands/runs.d.ts +0 -3
  319. package/dist/commands/runs.d.ts.map +0 -1
  320. package/dist/commands/runs.js +0 -365
  321. package/dist/commands/runs.js.map +0 -1
  322. package/dist/commands/runtime-env.d.ts +0 -3
  323. package/dist/commands/runtime-env.d.ts.map +0 -1
  324. package/dist/commands/runtime-env.js +0 -114
  325. package/dist/commands/runtime-env.js.map +0 -1
  326. package/dist/commands/sandbox-delete-guard.d.ts +0 -4
  327. package/dist/commands/sandbox-delete-guard.d.ts.map +0 -1
  328. package/dist/commands/sandbox-delete-guard.js +0 -32
  329. package/dist/commands/sandbox-delete-guard.js.map +0 -1
  330. package/dist/commands/sandbox-dev.d.ts +0 -20
  331. package/dist/commands/sandbox-dev.d.ts.map +0 -1
  332. package/dist/commands/sandbox-dev.js +0 -583
  333. package/dist/commands/sandbox-dev.js.map +0 -1
  334. package/dist/commands/sandbox.d.ts +0 -36
  335. package/dist/commands/sandbox.d.ts.map +0 -1
  336. package/dist/commands/sandbox.js +0 -3796
  337. package/dist/commands/sandbox.js.map +0 -1
  338. package/dist/commands/scale.d.ts +0 -3
  339. package/dist/commands/scale.d.ts.map +0 -1
  340. package/dist/commands/scale.js +0 -61
  341. package/dist/commands/scale.js.map +0 -1
  342. package/dist/commands/schedules.d.ts +0 -3
  343. package/dist/commands/schedules.d.ts.map +0 -1
  344. package/dist/commands/schedules.js +0 -37
  345. package/dist/commands/schedules.js.map +0 -1
  346. package/dist/commands/secrets.d.ts +0 -3
  347. package/dist/commands/secrets.d.ts.map +0 -1
  348. package/dist/commands/secrets.js +0 -200
  349. package/dist/commands/secrets.js.map +0 -1
  350. package/dist/commands/services.d.ts +0 -3
  351. package/dist/commands/services.d.ts.map +0 -1
  352. package/dist/commands/services.js +0 -70
  353. package/dist/commands/services.js.map +0 -1
  354. package/dist/commands/shell.d.ts +0 -16
  355. package/dist/commands/shell.d.ts.map +0 -1
  356. package/dist/commands/shell.js +0 -555
  357. package/dist/commands/shell.js.map +0 -1
  358. package/dist/commands/snapshot.d.ts +0 -10
  359. package/dist/commands/snapshot.d.ts.map +0 -1
  360. package/dist/commands/snapshot.js +0 -181
  361. package/dist/commands/snapshot.js.map +0 -1
  362. package/dist/commands/ssh.d.ts +0 -3
  363. package/dist/commands/ssh.d.ts.map +0 -1
  364. package/dist/commands/ssh.js +0 -93
  365. package/dist/commands/ssh.js.map +0 -1
  366. package/dist/commands/status.d.ts +0 -3
  367. package/dist/commands/status.d.ts.map +0 -1
  368. package/dist/commands/status.js +0 -302
  369. package/dist/commands/status.js.map +0 -1
  370. package/dist/commands/storage.d.ts +0 -3
  371. package/dist/commands/storage.d.ts.map +0 -1
  372. package/dist/commands/storage.js +0 -456
  373. package/dist/commands/storage.js.map +0 -1
  374. package/dist/commands/teams.d.ts +0 -3
  375. package/dist/commands/teams.d.ts.map +0 -1
  376. package/dist/commands/teams.js +0 -169
  377. package/dist/commands/teams.js.map +0 -1
  378. package/dist/commands/templates.d.ts +0 -3
  379. package/dist/commands/templates.d.ts.map +0 -1
  380. package/dist/commands/templates.js +0 -690
  381. package/dist/commands/templates.js.map +0 -1
  382. package/dist/commands/tenant.d.ts +0 -3
  383. package/dist/commands/tenant.d.ts.map +0 -1
  384. package/dist/commands/tenant.js +0 -95
  385. package/dist/commands/tenant.js.map +0 -1
  386. package/dist/commands/tunnel.d.ts +0 -3
  387. package/dist/commands/tunnel.d.ts.map +0 -1
  388. package/dist/commands/tunnel.js +0 -418
  389. package/dist/commands/tunnel.js.map +0 -1
  390. package/dist/commands/up.d.ts +0 -14
  391. package/dist/commands/up.d.ts.map +0 -1
  392. package/dist/commands/up.js +0 -720
  393. package/dist/commands/up.js.map +0 -1
  394. package/dist/commands/update.d.ts +0 -3
  395. package/dist/commands/update.d.ts.map +0 -1
  396. package/dist/commands/update.js +0 -166
  397. package/dist/commands/update.js.map +0 -1
  398. package/dist/commands/util.d.ts +0 -25
  399. package/dist/commands/util.d.ts.map +0 -1
  400. package/dist/commands/util.js +0 -199
  401. package/dist/commands/util.js.map +0 -1
  402. package/dist/commands/volumes.d.ts +0 -3
  403. package/dist/commands/volumes.d.ts.map +0 -1
  404. package/dist/commands/volumes.js +0 -196
  405. package/dist/commands/volumes.js.map +0 -1
  406. package/dist/commands/watch.d.ts +0 -6
  407. package/dist/commands/watch.d.ts.map +0 -1
  408. package/dist/commands/watch.js +0 -414
  409. package/dist/commands/watch.js.map +0 -1
  410. package/dist/commands/webhooks.d.ts +0 -3
  411. package/dist/commands/webhooks.d.ts.map +0 -1
  412. package/dist/commands/webhooks.js +0 -23
  413. package/dist/commands/webhooks.js.map +0 -1
  414. package/dist/commands/whoami.d.ts +0 -3
  415. package/dist/commands/whoami.d.ts.map +0 -1
  416. package/dist/commands/whoami.js +0 -156
  417. package/dist/commands/whoami.js.map +0 -1
  418. package/dist/commands/workspaces.d.ts +0 -3
  419. package/dist/commands/workspaces.d.ts.map +0 -1
  420. package/dist/commands/workspaces.js +0 -147
  421. package/dist/commands/workspaces.js.map +0 -1
  422. package/dist/config.d.ts +0 -54
  423. package/dist/config.d.ts.map +0 -1
  424. package/dist/config.js +0 -275
  425. package/dist/config.js.map +0 -1
  426. package/dist/errors.d.ts +0 -30
  427. package/dist/errors.d.ts.map +0 -1
  428. package/dist/errors.js +0 -92
  429. package/dist/errors.js.map +0 -1
  430. package/dist/framework-detector.d.ts +0 -22
  431. package/dist/framework-detector.d.ts.map +0 -1
  432. package/dist/framework-detector.js +0 -373
  433. package/dist/framework-detector.js.map +0 -1
  434. package/dist/generated/action-capabilities.d.ts +0 -826
  435. package/dist/generated/action-capabilities.d.ts.map +0 -1
  436. package/dist/generated/action-capabilities.js +0 -1035
  437. package/dist/generated/action-capabilities.js.map +0 -1
  438. package/dist/net-diagnosis.d.ts +0 -87
  439. package/dist/net-diagnosis.d.ts.map +0 -1
  440. package/dist/net-diagnosis.js +0 -408
  441. package/dist/net-diagnosis.js.map +0 -1
  442. package/dist/pty/raw-mode.d.ts +0 -7
  443. package/dist/pty/raw-mode.d.ts.map +0 -1
  444. package/dist/pty/raw-mode.js +0 -22
  445. package/dist/pty/raw-mode.js.map +0 -1
  446. package/dist/pty/ws-pty-client.d.ts +0 -13
  447. package/dist/pty/ws-pty-client.d.ts.map +0 -1
  448. package/dist/pty/ws-pty-client.js +0 -73
  449. package/dist/pty/ws-pty-client.js.map +0 -1
  450. package/dist/tui/dashboard.d.ts +0 -35
  451. package/dist/tui/dashboard.d.ts.map +0 -1
  452. package/dist/tui/dashboard.js +0 -191
  453. package/dist/tui/dashboard.js.map +0 -1
  454. package/dist/tui/logs.d.ts +0 -26
  455. package/dist/tui/logs.d.ts.map +0 -1
  456. package/dist/tui/logs.js +0 -276
  457. package/dist/tui/logs.js.map +0 -1
  458. package/dist/types.d.ts +0 -362
  459. package/dist/types.d.ts.map +0 -1
  460. package/dist/types.js +0 -16
  461. package/dist/types.js.map +0 -1
  462. package/dist/ui/picker.d.ts +0 -41
  463. package/dist/ui/picker.d.ts.map +0 -1
  464. package/dist/ui/picker.js +0 -77
  465. package/dist/ui/picker.js.map +0 -1
  466. package/dist/ui/progress.d.ts +0 -10
  467. package/dist/ui/progress.d.ts.map +0 -1
  468. package/dist/ui/progress.js +0 -36
  469. package/dist/ui/progress.js.map +0 -1
  470. package/dist/ui/render.d.ts +0 -91
  471. package/dist/ui/render.d.ts.map +0 -1
  472. package/dist/ui/render.js +0 -138
  473. package/dist/ui/render.js.map +0 -1
  474. package/dist/ui/spinner.d.ts +0 -4
  475. package/dist/ui/spinner.d.ts.map +0 -1
  476. package/dist/ui/spinner.js +0 -7
  477. package/dist/ui/spinner.js.map +0 -1
  478. package/dist/ui/table.d.ts +0 -8
  479. package/dist/ui/table.d.ts.map +0 -1
  480. package/dist/ui/table.js +0 -46
  481. package/dist/ui/table.js.map +0 -1
  482. package/dist/update-check.d.ts +0 -13
  483. package/dist/update-check.d.ts.map +0 -1
  484. package/dist/update-check.js +0 -94
  485. package/dist/update-check.js.map +0 -1
  486. package/dist/version.d.ts +0 -3
  487. package/dist/version.d.ts.map +0 -1
  488. package/dist/version.js +0 -5
  489. package/dist/version.js.map +0 -1
@@ -1,720 +0,0 @@
1
- /**
2
- * `miosa up` — smart context-aware launch command.
3
- *
4
- * Detects what you're working with and does the right thing:
5
- * .miosa.json or miosa.json → redeploy existing project
6
- * Dockerfile → build and deploy as container (not yet live — falls through to deploy)
7
- * package.json / mix.exs / requirements.txt → detect framework, deploy
8
- * --computer flag → create a desktop computer
9
- * --sandbox flag → create a sandbox
10
- * nothing → interactive mode to pick an action
11
- */
12
- import fs from "node:fs";
13
- import path from "node:path";
14
- import { execSync } from "node:child_process";
15
- import chalk from "chalk";
16
- import { loadConfig } from "../config.js";
17
- import { MiosaClient, parseSse } from "../client.js";
18
- import { handleError } from "./util.js";
19
- import { detectFramework, FRAMEWORK_LABELS, } from "../framework-detector.js";
20
- import { UserError } from "../errors.js";
21
- import { toDeploymentId } from "../types.js";
22
- function deploymentUrl(deployment, tenantSlug) {
23
- if (deployment.public_url)
24
- return deployment.public_url;
25
- if (deployment.auto_subdomain)
26
- return deployment.auto_subdomain;
27
- if (tenantSlug && deployment.slug) {
28
- return `https://${deployment.slug}.${tenantSlug}.miosa.app`;
29
- }
30
- return null;
31
- }
32
- // ── .miosa.json helpers ───────────────────────────────────────────────────────
33
- const PROJECT_CONFIG_FILES = [".miosa.json", "miosa.json"];
34
- function loadProjectConfig(dir) {
35
- for (const filename of PROJECT_CONFIG_FILES) {
36
- const p = path.join(dir, filename);
37
- if (!fs.existsSync(p))
38
- continue;
39
- try {
40
- return JSON.parse(fs.readFileSync(p, "utf8"));
41
- }
42
- catch {
43
- return null;
44
- }
45
- }
46
- return null;
47
- }
48
- function saveProjectConfig(dir, cfg) {
49
- const p = path.join(dir, ".miosa.json");
50
- fs.writeFileSync(p, JSON.stringify(cfg, null, 2) + "\n");
51
- }
52
- // ── Signals ───────────────────────────────────────────────────────────────────
53
- /**
54
- * Write a single status line. In JSON mode output nothing (caller handles JSON).
55
- * Uses \r to overwrite the same line for streaming progress feel.
56
- */
57
- function line(msg, opts) {
58
- if (opts.json)
59
- return;
60
- process.stdout.write(msg + "\n");
61
- }
62
- function lineProgress(msg, opts) {
63
- if (opts.json)
64
- return;
65
- process.stdout.write(` ${msg}\n`);
66
- }
67
- function getGitInfo(dir) {
68
- try {
69
- execSync("git rev-parse --git-dir", { cwd: dir, stdio: "ignore" });
70
- }
71
- catch {
72
- throw new UserError("Not a git repository.", "Run `git init && git remote add origin <url>` first.");
73
- }
74
- let repoUrl;
75
- try {
76
- repoUrl = execSync("git remote get-url origin", {
77
- cwd: dir,
78
- encoding: "utf8",
79
- }).trim();
80
- }
81
- catch {
82
- throw new UserError("No git remote named 'origin' found.", "Add one with: git remote add origin https://github.com/you/repo");
83
- }
84
- // Normalize SSH → HTTPS
85
- if (repoUrl.startsWith("git@github.com:")) {
86
- repoUrl = repoUrl
87
- .replace("git@github.com:", "https://github.com/")
88
- .replace(/\.git$/, "");
89
- }
90
- repoUrl = repoUrl.replace(/\.git$/, "");
91
- let currentBranch = "main";
92
- try {
93
- currentBranch = execSync("git rev-parse --abbrev-ref HEAD", {
94
- cwd: dir,
95
- encoding: "utf8",
96
- }).trim();
97
- }
98
- catch {
99
- // default
100
- }
101
- return { repoUrl, currentBranch };
102
- }
103
- // ── Deploy log streaming ──────────────────────────────────────────────────────
104
- async function streamDeployLogs(client, deploymentId, opts) {
105
- const res = await client.streamDeploymentLogs(deploymentId);
106
- let lastState = "success";
107
- for await (const event of parseSse(res.body)) {
108
- switch (event.type) {
109
- case "stdout":
110
- if (!opts.json)
111
- process.stdout.write(chalk.dim(" ") + event.data);
112
- break;
113
- case "stderr":
114
- if (!opts.json)
115
- process.stderr.write(chalk.red(" ") + event.data);
116
- break;
117
- case "error":
118
- if (!opts.json)
119
- console.error(chalk.red(` [error] ${event.message}`));
120
- lastState = "failure";
121
- break;
122
- case "done": {
123
- if (event.result && typeof event.result === "object") {
124
- const r = event.result;
125
- if (r["state"] === "failed")
126
- lastState = "failure";
127
- }
128
- return lastState;
129
- }
130
- case "unknown": {
131
- try {
132
- const parsed = JSON.parse(event.raw);
133
- if (typeof parsed["line"] === "string" && !opts.json) {
134
- const stream = parsed["stream"] ?? "stdout";
135
- const logLine = parsed["line"];
136
- if (stream === "stderr") {
137
- process.stderr.write(chalk.red(" ") + logLine + "\n");
138
- }
139
- else {
140
- process.stdout.write(chalk.dim(" ") + logLine + "\n");
141
- }
142
- }
143
- }
144
- catch {
145
- // ignore unparseable frames
146
- }
147
- break;
148
- }
149
- default:
150
- break;
151
- }
152
- }
153
- return lastState;
154
- }
155
- // ── Mode: redeploy existing .miosa.json ──────────────────────────────────────
156
- async function runRedeploy(client, projectCfg, opts) {
157
- if (!opts.json) {
158
- console.log();
159
- line(` Detected: ${chalk.cyan(FRAMEWORK_LABELS[projectCfg.framework] ?? projectCfg.framework)}`, opts);
160
- line(` Found .miosa.json → redeploying ${chalk.bold(projectCfg.name)}`, opts);
161
- console.log();
162
- }
163
- lineProgress("Queuing build...", opts);
164
- try {
165
- await client.redeployDeployment(projectCfg.deploymentId);
166
- }
167
- catch (err) {
168
- handleError(err);
169
- }
170
- lineProgress("Build queued", opts);
171
- if (!opts.json) {
172
- console.log();
173
- line(` ${chalk.bold("Build log:")}`, opts);
174
- line(` ${"─".repeat(60)}`, opts);
175
- }
176
- const buildResult = await streamDeployLogs(client, projectCfg.deploymentId, opts);
177
- if (!opts.json) {
178
- line(` ${"─".repeat(60)}`, opts);
179
- console.log();
180
- }
181
- if (buildResult === "success") {
182
- try {
183
- const dep = await client.getDeployment(projectCfg.deploymentId);
184
- const tenant = await client.getTenant();
185
- const url = deploymentUrl(dep, tenant.slug);
186
- if (opts.json) {
187
- console.log(JSON.stringify({ id: dep.id, url, name: dep.name, state: dep.state }));
188
- }
189
- else {
190
- console.log(chalk.green(" Deployed"));
191
- console.log();
192
- console.log(` ${chalk.bold("URL:")} ${chalk.cyan(url ?? "—")}`);
193
- console.log();
194
- }
195
- }
196
- catch {
197
- if (opts.json) {
198
- console.log(JSON.stringify({ id: projectCfg.deploymentId, state: "running" }));
199
- }
200
- else {
201
- console.log(chalk.green(" Deployed"));
202
- }
203
- }
204
- }
205
- else {
206
- if (opts.json) {
207
- console.log(JSON.stringify({ id: projectCfg.deploymentId, state: "failed" }));
208
- }
209
- else {
210
- console.log(chalk.red(" Build failed."));
211
- console.log();
212
- console.log(chalk.dim(" View full logs: miosa deploy logs"));
213
- }
214
- process.exit(1);
215
- }
216
- }
217
- // ── Mode: first deploy ────────────────────────────────────────────────────────
218
- async function runFirstDeploy(cwd, client, opts) {
219
- const { repoUrl, currentBranch } = getGitInfo(cwd);
220
- const detection = detectFramework(cwd);
221
- const hasDockerfile = fs.existsSync(path.join(cwd, "Dockerfile"));
222
- let framework = "unknown";
223
- let buildCommand = "npm run build";
224
- let runCommand = "npm start";
225
- let frameworkLabel = "application";
226
- if (detection) {
227
- framework = detection.framework;
228
- buildCommand = detection.buildCommand;
229
- runCommand = detection.runCommand;
230
- frameworkLabel =
231
- FRAMEWORK_LABELS[detection.framework] ?? detection.framework;
232
- }
233
- else if (hasDockerfile) {
234
- frameworkLabel = "container (Dockerfile)";
235
- buildCommand = "";
236
- runCommand = "";
237
- }
238
- if (!opts.json) {
239
- console.log();
240
- if (detection) {
241
- line(` Detected: ${chalk.cyan(frameworkLabel)} (confidence ${detection.confidence}%)`, opts);
242
- }
243
- else if (hasDockerfile) {
244
- line(` Detected: ${chalk.cyan("Dockerfile")}`, opts);
245
- }
246
- else {
247
- line(chalk.yellow(" No framework detected — deploying as generic app"), opts);
248
- }
249
- line(` Repo: ${chalk.dim(repoUrl)}`, opts);
250
- line(` Branch: ${chalk.dim(currentBranch)}`, opts);
251
- console.log();
252
- }
253
- // ── Determine deploy parameters ──────────────────────────────────────────
254
- let deployName;
255
- let deployBranch;
256
- let deployBuild;
257
- let deployRun;
258
- const defaultName = path.basename(cwd).replace(/[^a-z0-9-]/gi, "-");
259
- if (opts.yes || opts.json) {
260
- // Non-interactive: use flags or defaults
261
- deployName = opts.name ?? defaultName;
262
- deployBranch = currentBranch;
263
- deployBuild = buildCommand;
264
- deployRun = runCommand;
265
- }
266
- else {
267
- // Interactive
268
- const { default: inquirer } = await import("inquirer");
269
- const answers = await inquirer.prompt([
270
- {
271
- type: "input",
272
- name: "name",
273
- message: "Name:",
274
- default: opts.name ?? defaultName,
275
- validate: (v) => (v.length > 0 ? true : "Name is required"),
276
- },
277
- {
278
- type: "input",
279
- name: "branch",
280
- message: "Branch:",
281
- default: currentBranch,
282
- },
283
- {
284
- type: "input",
285
- name: "buildCommand",
286
- message: "Build command:",
287
- default: buildCommand,
288
- },
289
- {
290
- type: "input",
291
- name: "runCommand",
292
- message: "Run command:",
293
- default: runCommand,
294
- },
295
- {
296
- type: "confirm",
297
- name: "confirm",
298
- message: "Deploy?",
299
- default: true,
300
- },
301
- ]);
302
- if (!answers.confirm) {
303
- line(chalk.dim(" Cancelled."), opts);
304
- process.exit(0);
305
- }
306
- deployName = answers.name;
307
- deployBranch = answers.branch;
308
- deployBuild = answers.buildCommand;
309
- deployRun = answers.runCommand;
310
- }
311
- // ── Create deployment ─────────────────────────────────────────────────────
312
- lineProgress(`Creating deployment "${deployName}"...`, opts);
313
- let deployment;
314
- let webhookSecret;
315
- try {
316
- const result = await client.createDeployment({
317
- name: deployName,
318
- repo_url: repoUrl,
319
- branch: deployBranch,
320
- build_command: deployBuild || undefined,
321
- run_command: deployRun || undefined,
322
- auto_deploy: true,
323
- });
324
- deployment = result.data;
325
- webhookSecret = result.webhook_secret;
326
- }
327
- catch (err) {
328
- handleError(err);
329
- }
330
- lineProgress(`Deployment "${deployment.name}" created`, opts);
331
- // ── Save .miosa.json ──────────────────────────────────────────────────────
332
- const projectCfg = {
333
- version: 1,
334
- deploymentId: toDeploymentId(deployment.id),
335
- name: deployment.name,
336
- framework,
337
- buildCommand: deployBuild,
338
- runCommand: deployRun,
339
- branch: deployBranch,
340
- };
341
- saveProjectConfig(cwd, projectCfg);
342
- if (!opts.json)
343
- lineProgress("Saved .miosa.json", opts);
344
- // ── Webhook notice (human-only — agents don't need this) ──────────────────
345
- if (!opts.json && !opts.yes) {
346
- console.log();
347
- console.log(chalk.bold.yellow(" ACTION REQUIRED — GitHub Webhook"));
348
- console.log(chalk.dim(" The webhook secret below is shown ONCE. Store it now."));
349
- console.log();
350
- console.log(` ${chalk.bold("Webhook URL:")} https://api.miosa.ai/api/v1/integrations/github/webhook`);
351
- console.log(` ${chalk.bold("Content type:")} application/json`);
352
- console.log(` ${chalk.bold("Secret:")} ${chalk.green(webhookSecret)}`);
353
- console.log(` ${chalk.bold("Events:")} push`);
354
- console.log();
355
- console.log(chalk.dim(" Add this at: " + repoUrl + "/settings/hooks/new"));
356
- console.log();
357
- }
358
- // ── Trigger initial build ─────────────────────────────────────────────────
359
- lineProgress("Queuing initial build...", opts);
360
- try {
361
- await client.redeployDeployment(projectCfg.deploymentId);
362
- }
363
- catch (err) {
364
- handleError(err);
365
- }
366
- lineProgress("Build queued", opts);
367
- // ── Stream logs ───────────────────────────────────────────────────────────
368
- if (!opts.json) {
369
- console.log();
370
- line(` ${chalk.bold("Build log:")}`, opts);
371
- line(` ${"─".repeat(60)}`, opts);
372
- }
373
- const buildResult = await streamDeployLogs(client, projectCfg.deploymentId, opts);
374
- if (!opts.json) {
375
- line(` ${"─".repeat(60)}`, opts);
376
- console.log();
377
- }
378
- if (buildResult === "success") {
379
- try {
380
- const dep = await client.getDeployment(projectCfg.deploymentId);
381
- const tenant = await client.getTenant();
382
- const url = deploymentUrl(dep, tenant.slug);
383
- if (opts.json) {
384
- console.log(JSON.stringify({ id: dep.id, url, name: dep.name, state: dep.state }));
385
- }
386
- else {
387
- console.log(chalk.green(" Deployed"));
388
- console.log();
389
- console.log(` ${chalk.bold("URL:")} ${chalk.cyan(url ?? "—")}`);
390
- console.log();
391
- console.log(chalk.dim(" Next steps:"));
392
- console.log(chalk.dim(" miosa deploy logs — tail logs"));
393
- console.log(chalk.dim(" miosa deploy domain add example.com — add custom domain"));
394
- console.log(chalk.dim(" miosa deploy env set KEY=VALUE — set env var"));
395
- }
396
- }
397
- catch {
398
- if (opts.json) {
399
- console.log(JSON.stringify({ id: deployment.id, state: "running" }));
400
- }
401
- else {
402
- console.log(chalk.green(" Deployed"));
403
- }
404
- }
405
- }
406
- else {
407
- if (opts.json) {
408
- console.log(JSON.stringify({ id: deployment.id, state: "failed" }));
409
- }
410
- else {
411
- console.log(chalk.red(" Build failed."));
412
- console.log();
413
- console.log(chalk.dim(" View full logs: miosa deploy logs"));
414
- }
415
- process.exit(1);
416
- }
417
- }
418
- function unwrapComputer(response) {
419
- return "data" in response ? response.data : response;
420
- }
421
- function computerState(computer) {
422
- return computer.status ?? computer.state ?? "unknown";
423
- }
424
- async function runComputerMode(client, opts) {
425
- let computerName;
426
- let computerOs;
427
- let computerSize;
428
- if (opts.yes || opts.json) {
429
- computerName = opts.name ?? `my-computer-${Date.now().toString(36)}`;
430
- computerOs = opts.os;
431
- computerSize = opts.size;
432
- }
433
- else {
434
- const { default: inquirer } = await import("inquirer");
435
- const answers = await inquirer.prompt([
436
- {
437
- type: "input",
438
- name: "name",
439
- message: "Computer name:",
440
- default: opts.name ?? "my-computer",
441
- },
442
- {
443
- type: "list",
444
- name: "os",
445
- message: "Operating system:",
446
- choices: [
447
- { name: "Ubuntu 22.04", value: "ubuntu" },
448
- { name: "Debian 12", value: "debian" },
449
- { name: "macOS (coming soon)", value: "macos", disabled: true },
450
- ],
451
- default: opts.os,
452
- },
453
- {
454
- type: "list",
455
- name: "size",
456
- message: "Size:",
457
- choices: [
458
- { name: "small (2 vCPU, 4 GB RAM)", value: "small" },
459
- { name: "medium (4 vCPU, 8 GB RAM)", value: "medium" },
460
- { name: "large (8 vCPU, 16 GB RAM)", value: "large" },
461
- ],
462
- default: opts.size,
463
- },
464
- ]);
465
- computerName = answers.name;
466
- computerOs = answers.os;
467
- computerSize = answers.size;
468
- }
469
- if (!opts.json) {
470
- console.log();
471
- lineProgress(`Creating computer "${computerName}"...`, opts);
472
- }
473
- let computer;
474
- try {
475
- const result = await client.apiPost("/api/v1/computers", {
476
- name: computerName,
477
- template_type: "miosa-desktop",
478
- os: computerOs,
479
- size: computerSize,
480
- desktop: true,
481
- });
482
- computer = unwrapComputer(result);
483
- }
484
- catch (err) {
485
- handleError(err);
486
- }
487
- // Poll until running or timeout (30s)
488
- lineProgress("Booting...", opts);
489
- const deadline = Date.now() + 30_000;
490
- let finalComputer = computer;
491
- while (Date.now() < deadline) {
492
- try {
493
- const polled = await client.apiGet(`/api/v1/computers/${encodeURIComponent(computer.id)}`);
494
- finalComputer = unwrapComputer(polled);
495
- if (computerState(finalComputer) === "running")
496
- break;
497
- }
498
- catch {
499
- // poll errors are transient — keep trying
500
- }
501
- await sleep(1_000);
502
- lineProgress(` state: ${computerState(finalComputer)}`, opts);
503
- }
504
- const desktopUrl = finalComputer.desktop_url ??
505
- `https://app.miosa.ai/computers/${finalComputer.id}`;
506
- if (opts.json) {
507
- console.log(JSON.stringify({
508
- id: finalComputer.id,
509
- name: finalComputer.name,
510
- state: computerState(finalComputer),
511
- url: desktopUrl,
512
- }));
513
- }
514
- else {
515
- console.log();
516
- console.log(chalk.green(" Ready"));
517
- console.log();
518
- console.log(` ${chalk.bold("Desktop:")} ${chalk.cyan(desktopUrl)}`);
519
- console.log(` ${chalk.bold("SSH:")} ${chalk.dim(`miosa ssh ${finalComputer.id}`)}`);
520
- console.log();
521
- }
522
- }
523
- async function runSandboxMode(client, opts) {
524
- let sandboxName;
525
- let sandboxImage;
526
- if (opts.yes || opts.json) {
527
- sandboxName = opts.name ?? `sandbox-${Date.now().toString(36)}`;
528
- sandboxImage = opts.image;
529
- }
530
- else {
531
- const { default: inquirer } = await import("inquirer");
532
- const answers = await inquirer.prompt([
533
- {
534
- type: "input",
535
- name: "name",
536
- message: "Sandbox name:",
537
- default: opts.name ?? "my-sandbox",
538
- },
539
- {
540
- type: "list",
541
- name: "image",
542
- message: "Image:",
543
- choices: [
544
- { name: "miosa-sandbox (default)", value: "miosa-sandbox" },
545
- { name: "python-3.12", value: "python-3.12" },
546
- { name: "node-20", value: "node-20" },
547
- { name: "ubuntu-22.04", value: "ubuntu-22.04" },
548
- ],
549
- default: opts.image,
550
- },
551
- ]);
552
- sandboxName = answers.name;
553
- sandboxImage = answers.image;
554
- }
555
- if (!opts.json) {
556
- console.log();
557
- lineProgress(`Creating sandbox "${sandboxName}"...`, opts);
558
- }
559
- const start = Date.now();
560
- let sandbox;
561
- try {
562
- const result = await client.apiPost("/api/v1/sandboxes", {
563
- name: sandboxName,
564
- template_id: sandboxImage,
565
- });
566
- sandbox = result.data;
567
- }
568
- catch (err) {
569
- handleError(err);
570
- }
571
- const elapsed = Date.now() - start;
572
- if (opts.json) {
573
- console.log(JSON.stringify({
574
- id: sandbox.id,
575
- name: sandbox.name,
576
- state: sandbox.state,
577
- }));
578
- }
579
- else {
580
- console.log(chalk.green(` Ready (${elapsed}ms)`));
581
- console.log();
582
- console.log(` ${chalk.bold("Exec:")} ${chalk.dim(`miosa sandbox exec ${sandbox.id} "python app.py"`)}`);
583
- console.log(` ${chalk.bold("SSH:")} ${chalk.dim(`miosa sandbox ssh ${sandbox.id}`)}`);
584
- console.log();
585
- }
586
- }
587
- // ── Mode: interactive disambiguation ─────────────────────────────────────────
588
- async function runInteractiveDisambiguate(cwd, client, opts) {
589
- const { default: inquirer } = await import("inquirer");
590
- console.log();
591
- console.log(` ${chalk.dim("No project detected in current directory. What would you like to create?")}`);
592
- console.log();
593
- const { action } = await inquirer.prompt([
594
- {
595
- type: "list",
596
- name: "action",
597
- message: "Action:",
598
- choices: [
599
- { name: "Deploy a GitHub repository", value: "deploy" },
600
- { name: "Create a desktop computer", value: "computer" },
601
- { name: "Create a sandbox", value: "sandbox" },
602
- ],
603
- },
604
- ]);
605
- switch (action) {
606
- case "deploy":
607
- await runFirstDeploy(cwd, client, opts);
608
- break;
609
- case "computer":
610
- await runComputerMode(client, opts);
611
- break;
612
- case "sandbox":
613
- await runSandboxMode(client, opts);
614
- break;
615
- }
616
- }
617
- // ── Context detection ─────────────────────────────────────────────────────────
618
- function detectMode(cwd, opts) {
619
- // Explicit flags override everything
620
- if (opts.computer)
621
- return "computer";
622
- if (opts.sandbox)
623
- return "sandbox";
624
- // Existing project config
625
- if (loadProjectConfig(cwd))
626
- return "redeploy";
627
- // Deployable source code present
628
- const hasPackageJson = fs.existsSync(path.join(cwd, "package.json"));
629
- const hasMixExs = fs.existsSync(path.join(cwd, "mix.exs"));
630
- const hasRequirements = fs.existsSync(path.join(cwd, "requirements.txt"));
631
- const hasDockerfile = fs.existsSync(path.join(cwd, "Dockerfile"));
632
- const hasGoMod = fs.existsSync(path.join(cwd, "go.mod"));
633
- const hasCargo = fs.existsSync(path.join(cwd, "Cargo.toml"));
634
- const hasGemfile = fs.existsSync(path.join(cwd, "Gemfile"));
635
- const hasIndexHtml = fs.existsSync(path.join(cwd, "index.html"));
636
- if (hasPackageJson ||
637
- hasMixExs ||
638
- hasRequirements ||
639
- hasDockerfile ||
640
- hasGoMod ||
641
- hasCargo ||
642
- hasGemfile ||
643
- hasIndexHtml) {
644
- return "deploy-new";
645
- }
646
- return "interactive";
647
- }
648
- // ── Helpers ───────────────────────────────────────────────────────────────────
649
- function sleep(ms) {
650
- return new Promise((resolve) => setTimeout(resolve, ms));
651
- }
652
- // ── register ──────────────────────────────────────────────────────────────────
653
- export function register(program) {
654
- program
655
- .command("up")
656
- .description("Smart launch: deploy app, create computer, or start sandbox — auto-detected from context")
657
- .addHelpText("after", `
658
- Context detection (evaluated in order):
659
- .miosa.json / miosa.json found → redeploy existing deployment
660
- --computer flag → create a desktop computer
661
- --sandbox flag → create a sandbox
662
- package.json / mix.exs / etc. → detect framework, deploy
663
- empty directory → interactive mode
664
-
665
- Examples:
666
- miosa up Auto-detect and deploy
667
- miosa up --yes --json --name my-app Scriptable deploy (no prompts)
668
- miosa up --computer --os ubuntu --size medium Create a desktop computer
669
- miosa up --sandbox --image python-3.12 Create a Python sandbox
670
- miosa up --computer --yes --json Scriptable computer creation
671
- `)
672
- .option("-y, --yes", "Skip all interactive prompts, use defaults", false)
673
- .option("--json", "Output machine-readable JSON (implies --yes)", false)
674
- .option("--name <name>", "Resource name (app, computer, or sandbox)")
675
- // computer options
676
- .option("--computer", "Create a desktop computer", false)
677
- .option("--os <os>", "Operating system for computer mode", "ubuntu")
678
- .option("--size <size>", "Size: small | medium | large", "small")
679
- // sandbox options
680
- .option("--sandbox", "Create a sandbox", false)
681
- .option("--image <image>", "Sandbox image/template", "miosa-sandbox")
682
- .action(async (rawOpts) => {
683
- // --json implies --yes
684
- const opts = { ...rawOpts, yes: rawOpts.yes || rawOpts.json };
685
- try {
686
- const cwd = process.cwd();
687
- const config = loadConfig();
688
- const client = new MiosaClient(config);
689
- const mode = detectMode(cwd, opts);
690
- switch (mode) {
691
- case "redeploy": {
692
- const projectCfg = loadProjectConfig(cwd);
693
- // projectCfg is guaranteed non-null when mode === "redeploy"
694
- await runRedeploy(client, projectCfg, opts);
695
- break;
696
- }
697
- case "deploy-new":
698
- await runFirstDeploy(cwd, client, opts);
699
- break;
700
- case "computer":
701
- await runComputerMode(client, opts);
702
- break;
703
- case "sandbox":
704
- await runSandboxMode(client, opts);
705
- break;
706
- case "interactive":
707
- if (opts.yes || opts.json) {
708
- // Non-interactive but no context — require explicit flag
709
- throw new UserError("Cannot determine what to create. Specify --computer, --sandbox, or run from a project directory.", "Examples:\n miosa up --computer\n miosa up --sandbox\n cd my-project && miosa up");
710
- }
711
- await runInteractiveDisambiguate(cwd, client, opts);
712
- break;
713
- }
714
- }
715
- catch (err) {
716
- handleError(err);
717
- }
718
- });
719
- }
720
- //# sourceMappingURL=up.js.map