@hubspot/cli 7.6.0-beta.0 → 7.6.0-beta.10

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 (764) hide show
  1. package/README.md +0 -4
  2. package/api/__tests__/migrate.test.d.ts +1 -0
  3. package/api/__tests__/migrate.test.js +181 -0
  4. package/api/migrate.d.ts +10 -4
  5. package/api/migrate.js +14 -22
  6. package/bin/cli.js +96 -97
  7. package/bin/hs +2 -2
  8. package/bin/hscms +2 -2
  9. package/bin/silenceErrors.js +1 -2
  10. package/commands/__tests__/account.test.d.ts +1 -0
  11. package/commands/__tests__/account.test.js +69 -0
  12. package/commands/__tests__/auth.test.d.ts +1 -0
  13. package/commands/__tests__/auth.test.js +38 -0
  14. package/commands/__tests__/cms.test.d.ts +1 -0
  15. package/commands/__tests__/cms.test.js +44 -0
  16. package/commands/__tests__/config.test.d.ts +1 -0
  17. package/commands/__tests__/config.test.js +44 -0
  18. package/commands/__tests__/create.test.d.ts +1 -0
  19. package/commands/__tests__/create.test.js +53 -0
  20. package/commands/__tests__/customObject.test.d.ts +1 -0
  21. package/commands/__tests__/customObject.test.js +49 -0
  22. package/commands/__tests__/doctor.test.d.ts +1 -0
  23. package/commands/__tests__/doctor.test.js +134 -0
  24. package/commands/__tests__/feedback.test.d.ts +1 -0
  25. package/commands/__tests__/feedback.test.js +24 -0
  26. package/commands/__tests__/fetch.test.d.ts +1 -0
  27. package/commands/__tests__/fetch.test.js +57 -0
  28. package/commands/__tests__/filemanager.test.d.ts +1 -0
  29. package/commands/__tests__/filemanager.test.js +45 -0
  30. package/commands/__tests__/function.test.d.ts +1 -0
  31. package/commands/__tests__/function.test.js +46 -0
  32. package/commands/__tests__/getStarted.test.d.ts +1 -0
  33. package/commands/__tests__/getStarted.test.js +155 -0
  34. package/commands/__tests__/hubdb.test.d.ts +1 -0
  35. package/commands/__tests__/hubdb.test.js +50 -0
  36. package/commands/__tests__/init.test.d.ts +1 -0
  37. package/commands/__tests__/init.test.js +42 -0
  38. package/commands/__tests__/lint.test.d.ts +1 -0
  39. package/commands/__tests__/lint.test.js +33 -0
  40. package/commands/__tests__/list.test.d.ts +1 -0
  41. package/commands/__tests__/list.test.js +42 -0
  42. package/commands/__tests__/logs.test.d.ts +1 -0
  43. package/commands/__tests__/logs.test.js +71 -0
  44. package/commands/__tests__/mcp.test.d.ts +1 -0
  45. package/commands/__tests__/mcp.test.js +46 -0
  46. package/commands/__tests__/mv.test.d.ts +1 -0
  47. package/commands/__tests__/mv.test.js +46 -0
  48. package/commands/__tests__/open.test.d.ts +1 -0
  49. package/commands/__tests__/open.test.js +58 -0
  50. package/commands/__tests__/project.test.d.ts +1 -0
  51. package/commands/__tests__/project.test.js +95 -0
  52. package/commands/__tests__/remove.test.d.ts +1 -0
  53. package/commands/__tests__/remove.test.js +39 -0
  54. package/commands/__tests__/sandbox.test.d.ts +1 -0
  55. package/commands/__tests__/sandbox.test.js +44 -0
  56. package/commands/__tests__/secret.test.d.ts +1 -0
  57. package/commands/__tests__/secret.test.js +49 -0
  58. package/commands/__tests__/testAccount.test.d.ts +1 -0
  59. package/commands/__tests__/testAccount.test.js +57 -0
  60. package/commands/__tests__/theme.test.d.ts +1 -0
  61. package/commands/__tests__/theme.test.js +47 -0
  62. package/commands/account/__tests__/auth.test.d.ts +1 -0
  63. package/commands/account/__tests__/auth.test.js +26 -0
  64. package/commands/account/__tests__/clean.test.d.ts +1 -0
  65. package/commands/account/__tests__/clean.test.js +28 -0
  66. package/commands/account/__tests__/createOverride.test.d.ts +1 -0
  67. package/commands/account/__tests__/createOverride.test.js +32 -0
  68. package/commands/account/__tests__/info.test.d.ts +1 -0
  69. package/commands/account/__tests__/info.test.js +28 -0
  70. package/commands/account/__tests__/list.test.d.ts +1 -0
  71. package/commands/account/__tests__/list.test.js +28 -0
  72. package/commands/account/__tests__/remove.test.d.ts +1 -0
  73. package/commands/account/__tests__/remove.test.js +36 -0
  74. package/commands/account/__tests__/removeOverride.d.ts +1 -0
  75. package/commands/account/__tests__/removeOverride.js +25 -0
  76. package/commands/account/__tests__/rename.test.d.ts +1 -0
  77. package/commands/account/__tests__/rename.test.js +42 -0
  78. package/commands/account/__tests__/use.test.d.ts +1 -0
  79. package/commands/account/__tests__/use.test.js +32 -0
  80. package/commands/account/auth.d.ts +1 -1
  81. package/commands/account/auth.js +78 -69
  82. package/commands/account/clean.d.ts +1 -1
  83. package/commands/account/clean.js +55 -60
  84. package/commands/account/createOverride.d.ts +1 -1
  85. package/commands/account/createOverride.js +52 -57
  86. package/commands/account/info.d.ts +1 -1
  87. package/commands/account/info.js +33 -35
  88. package/commands/account/list.d.ts +1 -1
  89. package/commands/account/list.js +43 -45
  90. package/commands/account/remove.d.ts +1 -1
  91. package/commands/account/remove.js +37 -42
  92. package/commands/account/removeOverride.d.ts +1 -1
  93. package/commands/account/removeOverride.js +38 -43
  94. package/commands/account/rename.d.ts +1 -1
  95. package/commands/account/rename.js +18 -20
  96. package/commands/account/use.d.ts +1 -1
  97. package/commands/account/use.js +29 -31
  98. package/commands/account.d.ts +1 -1
  99. package/commands/account.js +23 -28
  100. package/commands/app/__tests__/migrate.test.d.ts +1 -0
  101. package/commands/app/__tests__/migrate.test.js +124 -0
  102. package/commands/app/migrate.d.ts +2 -2
  103. package/commands/app/migrate.js +40 -43
  104. package/commands/app/secret/__tests__/add.test.d.ts +1 -0
  105. package/commands/app/secret/__tests__/add.test.js +28 -0
  106. package/commands/app/secret/__tests__/delete.test.d.ts +1 -0
  107. package/commands/app/secret/__tests__/delete.test.js +28 -0
  108. package/commands/app/secret/__tests__/list.test.d.ts +1 -0
  109. package/commands/app/secret/__tests__/list.test.js +25 -0
  110. package/commands/app/secret/__tests__/update.test.d.ts +1 -0
  111. package/commands/app/secret/__tests__/update.test.js +28 -0
  112. package/commands/app/secret/add.d.ts +1 -1
  113. package/commands/app/secret/add.js +28 -30
  114. package/commands/app/secret/delete.d.ts +1 -1
  115. package/commands/app/secret/delete.js +34 -36
  116. package/commands/app/secret/list.d.ts +1 -1
  117. package/commands/app/secret/list.js +25 -27
  118. package/commands/app/secret/update.d.ts +1 -1
  119. package/commands/app/secret/update.js +32 -34
  120. package/commands/app/secret.d.ts +1 -1
  121. package/commands/app/secret.js +12 -17
  122. package/commands/app.d.ts +1 -1
  123. package/commands/app.js +6 -11
  124. package/commands/auth.d.ts +1 -1
  125. package/commands/auth.js +79 -83
  126. package/commands/cms/convertFields.d.ts +1 -1
  127. package/commands/cms/convertFields.js +34 -39
  128. package/commands/cms/getReactModule.d.ts +1 -1
  129. package/commands/cms/getReactModule.js +32 -37
  130. package/commands/cms/lighthouseScore.d.ts +1 -1
  131. package/commands/cms/lighthouseScore.js +67 -72
  132. package/commands/cms.d.ts +1 -1
  133. package/commands/cms.js +11 -16
  134. package/commands/completion.d.ts +1 -1
  135. package/commands/completion.js +10 -15
  136. package/commands/config/migrate.d.ts +1 -1
  137. package/commands/config/migrate.js +27 -32
  138. package/commands/config/set.d.ts +2 -1
  139. package/commands/config/set.js +40 -32
  140. package/commands/config.d.ts +1 -1
  141. package/commands/config.js +8 -13
  142. package/commands/create/api-sample.d.ts +1 -1
  143. package/commands/create/api-sample.js +28 -33
  144. package/commands/create/app.d.ts +1 -1
  145. package/commands/create/app.js +3 -5
  146. package/commands/create/function.d.ts +1 -1
  147. package/commands/create/function.js +10 -12
  148. package/commands/create/index.d.ts +1 -1
  149. package/commands/create/index.js +19 -24
  150. package/commands/create/module.d.ts +1 -1
  151. package/commands/create/module.js +13 -15
  152. package/commands/create/react-app.d.ts +1 -1
  153. package/commands/create/react-app.js +3 -5
  154. package/commands/create/template.d.ts +1 -1
  155. package/commands/create/template.js +13 -15
  156. package/commands/create/vue-app.d.ts +1 -1
  157. package/commands/create/vue-app.js +3 -5
  158. package/commands/create/webpack-serverless.d.ts +1 -1
  159. package/commands/create/webpack-serverless.js +3 -5
  160. package/commands/create/website-theme.d.ts +1 -1
  161. package/commands/create/website-theme.js +5 -7
  162. package/commands/create.d.ts +2 -2
  163. package/commands/create.js +77 -35
  164. package/commands/customObject/__tests__/create.test.d.ts +1 -0
  165. package/commands/customObject/__tests__/create.test.js +40 -0
  166. package/commands/customObject/__tests__/schema.test.d.ts +1 -0
  167. package/commands/customObject/__tests__/schema.test.js +53 -0
  168. package/commands/customObject/create.d.ts +1 -1
  169. package/commands/customObject/create.js +28 -30
  170. package/commands/customObject/schema/__tests__/create.test.d.ts +1 -0
  171. package/commands/customObject/schema/__tests__/create.test.js +28 -0
  172. package/commands/customObject/schema/__tests__/delete.test.d.ts +1 -0
  173. package/commands/customObject/schema/__tests__/delete.test.js +42 -0
  174. package/commands/customObject/schema/__tests__/fetch-all.test.d.ts +1 -0
  175. package/commands/customObject/schema/__tests__/fetch-all.test.js +41 -0
  176. package/commands/customObject/schema/__tests__/fetch.test.d.ts +1 -0
  177. package/commands/customObject/schema/__tests__/fetch.test.js +45 -0
  178. package/commands/customObject/schema/__tests__/list.test.d.ts +1 -0
  179. package/commands/customObject/schema/__tests__/list.test.js +29 -0
  180. package/commands/customObject/schema/__tests__/update.test.d.ts +1 -0
  181. package/commands/customObject/schema/__tests__/update.test.js +40 -0
  182. package/commands/customObject/schema/create.d.ts +1 -1
  183. package/commands/customObject/schema/create.js +28 -30
  184. package/commands/customObject/schema/delete.d.ts +1 -1
  185. package/commands/customObject/schema/delete.js +24 -26
  186. package/commands/customObject/schema/fetch-all.d.ts +1 -1
  187. package/commands/customObject/schema/fetch-all.js +22 -24
  188. package/commands/customObject/schema/fetch.d.ts +1 -1
  189. package/commands/customObject/schema/fetch.js +24 -26
  190. package/commands/customObject/schema/list.d.ts +1 -1
  191. package/commands/customObject/schema/list.js +13 -15
  192. package/commands/customObject/schema/update.d.ts +1 -1
  193. package/commands/customObject/schema/update.js +32 -34
  194. package/commands/customObject/schema.d.ts +1 -1
  195. package/commands/customObject/schema.js +17 -22
  196. package/commands/customObject.d.ts +1 -1
  197. package/commands/customObject.js +13 -18
  198. package/commands/doctor.d.ts +1 -1
  199. package/commands/doctor.js +28 -33
  200. package/commands/feedback.d.ts +1 -1
  201. package/commands/feedback.js +19 -24
  202. package/commands/fetch.d.ts +1 -1
  203. package/commands/fetch.js +28 -31
  204. package/commands/filemanager/__tests__/fetch.test.d.ts +1 -0
  205. package/commands/filemanager/__tests__/fetch.test.js +32 -0
  206. package/commands/filemanager/__tests__/upload.test.d.ts +1 -0
  207. package/commands/filemanager/__tests__/upload.test.js +30 -0
  208. package/commands/filemanager/fetch.d.ts +1 -1
  209. package/commands/filemanager/fetch.js +23 -25
  210. package/commands/filemanager/upload.d.ts +1 -1
  211. package/commands/filemanager/upload.js +39 -44
  212. package/commands/filemanager.d.ts +1 -1
  213. package/commands/filemanager.js +8 -13
  214. package/commands/function/deploy.d.ts +1 -1
  215. package/commands/function/deploy.js +35 -40
  216. package/commands/function/list.d.ts +1 -1
  217. package/commands/function/list.js +24 -29
  218. package/commands/function/server.d.ts +1 -1
  219. package/commands/function/server.js +15 -17
  220. package/commands/function.d.ts +1 -1
  221. package/commands/function.js +12 -18
  222. package/commands/getStarted.d.ts +1 -1
  223. package/commands/getStarted.js +133 -112
  224. package/commands/hubdb/__tests__/clear.test.d.ts +1 -0
  225. package/commands/hubdb/__tests__/clear.test.js +28 -0
  226. package/commands/hubdb/__tests__/create.test.d.ts +1 -0
  227. package/commands/hubdb/__tests__/create.test.js +28 -0
  228. package/commands/hubdb/__tests__/delete.test.d.ts +1 -0
  229. package/commands/hubdb/__tests__/delete.test.js +28 -0
  230. package/commands/hubdb/__tests__/fetch.test.d.ts +1 -0
  231. package/commands/hubdb/__tests__/fetch.test.js +28 -0
  232. package/commands/hubdb/__tests__/list.test.d.ts +1 -0
  233. package/commands/hubdb/__tests__/list.test.js +96 -0
  234. package/commands/hubdb/clear.d.ts +1 -1
  235. package/commands/hubdb/clear.js +20 -22
  236. package/commands/hubdb/create.d.ts +1 -1
  237. package/commands/hubdb/create.js +30 -35
  238. package/commands/hubdb/delete.d.ts +1 -1
  239. package/commands/hubdb/delete.js +24 -26
  240. package/commands/hubdb/fetch.d.ts +1 -1
  241. package/commands/hubdb/fetch.js +17 -19
  242. package/commands/hubdb/list.d.ts +1 -1
  243. package/commands/hubdb/list.js +33 -35
  244. package/commands/hubdb.d.ts +1 -1
  245. package/commands/hubdb.js +18 -24
  246. package/commands/init.d.ts +1 -1
  247. package/commands/init.js +92 -99
  248. package/commands/lint.d.ts +1 -1
  249. package/commands/lint.js +24 -26
  250. package/commands/list.d.ts +1 -1
  251. package/commands/list.js +32 -37
  252. package/commands/logs.d.ts +1 -1
  253. package/commands/logs.js +35 -38
  254. package/commands/mcp/__tests__/setup.test.d.ts +1 -0
  255. package/commands/mcp/__tests__/setup.test.js +26 -0
  256. package/commands/mcp/__tests__/start.test.d.ts +1 -0
  257. package/commands/mcp/__tests__/start.test.js +27 -0
  258. package/commands/mcp/setup.d.ts +1 -1
  259. package/commands/mcp/setup.js +18 -19
  260. package/commands/mcp/start.d.ts +5 -2
  261. package/commands/mcp/start.js +39 -36
  262. package/commands/mcp.d.ts +1 -1
  263. package/commands/mcp.js +7 -12
  264. package/commands/module/marketplace-validate.d.ts +1 -1
  265. package/commands/module/marketplace-validate.js +21 -26
  266. package/commands/module.d.ts +1 -1
  267. package/commands/module.js +7 -13
  268. package/commands/mv.d.ts +1 -1
  269. package/commands/mv.js +20 -22
  270. package/commands/open.d.ts +1 -1
  271. package/commands/open.js +29 -29
  272. package/commands/project/__tests__/add.test.d.ts +1 -0
  273. package/commands/project/__tests__/add.test.js +43 -0
  274. package/commands/project/__tests__/create.test.d.ts +1 -0
  275. package/commands/project/__tests__/create.test.js +40 -0
  276. package/commands/project/__tests__/deploy.test.d.ts +1 -0
  277. package/commands/project/__tests__/deploy.test.js +308 -0
  278. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +1 -0
  279. package/commands/project/__tests__/devUnifiedFlow.test.js +396 -0
  280. package/commands/project/__tests__/download.test.d.ts +1 -0
  281. package/commands/project/__tests__/download.test.js +39 -0
  282. package/commands/project/__tests__/fixtures/exampleProject.json +33 -0
  283. package/commands/project/__tests__/installDeps.test.d.ts +1 -0
  284. package/commands/project/__tests__/installDeps.test.js +142 -0
  285. package/commands/project/__tests__/listBuilds.test.d.ts +1 -0
  286. package/commands/project/__tests__/listBuilds.test.js +38 -0
  287. package/commands/project/__tests__/logs.test.d.ts +1 -0
  288. package/commands/project/__tests__/logs.test.js +208 -0
  289. package/commands/project/__tests__/migrate.test.d.ts +1 -0
  290. package/commands/project/__tests__/migrate.test.js +111 -0
  291. package/commands/project/__tests__/migrateApp.test.d.ts +1 -0
  292. package/commands/project/__tests__/migrateApp.test.js +82 -0
  293. package/commands/project/__tests__/open.test.d.ts +1 -0
  294. package/commands/project/__tests__/open.test.js +39 -0
  295. package/commands/project/__tests__/profile.test.d.ts +1 -0
  296. package/commands/project/__tests__/profile.test.js +42 -0
  297. package/commands/project/__tests__/upload.test.d.ts +1 -0
  298. package/commands/project/__tests__/upload.test.js +43 -0
  299. package/commands/project/__tests__/watch.test.d.ts +1 -0
  300. package/commands/project/__tests__/watch.test.js +35 -0
  301. package/commands/project/add.d.ts +1 -1
  302. package/commands/project/add.js +34 -36
  303. package/commands/project/cloneApp.d.ts +1 -1
  304. package/commands/project/cloneApp.js +69 -74
  305. package/commands/project/create.d.ts +2 -2
  306. package/commands/project/create.js +70 -75
  307. package/commands/project/deploy.d.ts +3 -2
  308. package/commands/project/deploy.js +130 -96
  309. package/commands/project/dev/deprecatedFlow.d.ts +2 -2
  310. package/commands/project/dev/deprecatedFlow.js +57 -62
  311. package/commands/project/dev/index.d.ts +1 -1
  312. package/commands/project/dev/index.js +49 -52
  313. package/commands/project/dev/unifiedFlow.d.ts +4 -4
  314. package/commands/project/dev/unifiedFlow.js +76 -77
  315. package/commands/project/download.d.ts +1 -1
  316. package/commands/project/download.js +35 -40
  317. package/commands/project/installDeps.d.ts +1 -1
  318. package/commands/project/installDeps.js +29 -34
  319. package/commands/project/listBuilds.d.ts +1 -1
  320. package/commands/project/listBuilds.js +40 -45
  321. package/commands/project/logs.d.ts +1 -1
  322. package/commands/project/logs.js +52 -54
  323. package/commands/project/migrate.d.ts +1 -1
  324. package/commands/project/migrate.js +24 -26
  325. package/commands/project/migrateApp.d.ts +2 -2
  326. package/commands/project/migrateApp.js +18 -20
  327. package/commands/project/open.d.ts +1 -1
  328. package/commands/project/open.js +25 -30
  329. package/commands/project/profile/add.d.ts +1 -1
  330. package/commands/project/profile/add.js +68 -73
  331. package/commands/project/profile/delete.d.ts +1 -1
  332. package/commands/project/profile/delete.js +68 -61
  333. package/commands/project/profile.d.ts +1 -1
  334. package/commands/project/profile.js +9 -14
  335. package/commands/project/upload.d.ts +2 -2
  336. package/commands/project/upload.js +61 -55
  337. package/commands/project/validate.d.ts +1 -1
  338. package/commands/project/validate.js +36 -40
  339. package/commands/project/watch.d.ts +1 -1
  340. package/commands/project/watch.js +59 -61
  341. package/commands/project.d.ts +1 -1
  342. package/commands/project.js +38 -43
  343. package/commands/remove.d.ts +1 -1
  344. package/commands/remove.js +15 -17
  345. package/commands/sandbox/__tests__/create.test.d.ts +1 -0
  346. package/commands/sandbox/__tests__/create.test.js +238 -0
  347. package/commands/sandbox/__tests__/delete.test.d.ts +1 -0
  348. package/commands/sandbox/__tests__/delete.test.js +31 -0
  349. package/commands/sandbox/create.d.ts +2 -2
  350. package/commands/sandbox/create.js +92 -79
  351. package/commands/sandbox/delete.d.ts +1 -1
  352. package/commands/sandbox/delete.js +97 -99
  353. package/commands/sandbox.d.ts +1 -1
  354. package/commands/sandbox.js +9 -14
  355. package/commands/secret/__tests__/addSecret.test.d.ts +1 -0
  356. package/commands/secret/__tests__/addSecret.test.js +29 -0
  357. package/commands/secret/__tests__/deleteSecret.test.d.ts +1 -0
  358. package/commands/secret/__tests__/deleteSecret.test.js +41 -0
  359. package/commands/secret/__tests__/listSecret.test.d.ts +1 -0
  360. package/commands/secret/__tests__/listSecret.test.js +29 -0
  361. package/commands/secret/__tests__/updateSecret.test.d.ts +1 -0
  362. package/commands/secret/__tests__/updateSecret.test.js +29 -0
  363. package/commands/secret/addSecret.d.ts +1 -1
  364. package/commands/secret/addSecret.js +26 -28
  365. package/commands/secret/deleteSecret.d.ts +1 -1
  366. package/commands/secret/deleteSecret.js +27 -29
  367. package/commands/secret/listSecret.d.ts +1 -1
  368. package/commands/secret/listSecret.js +19 -21
  369. package/commands/secret/updateSecret.d.ts +1 -1
  370. package/commands/secret/updateSecret.js +25 -27
  371. package/commands/secret.d.ts +1 -1
  372. package/commands/secret.js +13 -18
  373. package/commands/testAccount/__tests__/create.test.d.ts +1 -0
  374. package/commands/testAccount/__tests__/create.test.js +33 -0
  375. package/commands/testAccount/__tests__/createConfig.test.d.ts +1 -0
  376. package/commands/testAccount/__tests__/createConfig.test.js +32 -0
  377. package/commands/testAccount/__tests__/delete.test.d.ts +1 -0
  378. package/commands/testAccount/__tests__/delete.test.js +31 -0
  379. package/commands/testAccount/__tests__/importData.test.d.ts +1 -0
  380. package/commands/testAccount/__tests__/importData.test.js +93 -0
  381. package/commands/testAccount/create.d.ts +2 -2
  382. package/commands/testAccount/create.js +72 -42
  383. package/commands/testAccount/createConfig.d.ts +1 -3
  384. package/commands/testAccount/createConfig.js +41 -47
  385. package/commands/testAccount/delete.d.ts +1 -1
  386. package/commands/testAccount/delete.js +17 -19
  387. package/commands/testAccount/importData.d.ts +9 -0
  388. package/commands/testAccount/importData.js +61 -0
  389. package/commands/testAccount.d.ts +1 -1
  390. package/commands/testAccount.js +12 -15
  391. package/commands/theme/__tests__/generate-selectors.test.d.ts +1 -0
  392. package/commands/theme/__tests__/generate-selectors.test.js +28 -0
  393. package/commands/theme/__tests__/marketplace-validate.test.d.ts +1 -0
  394. package/commands/theme/__tests__/marketplace-validate.test.js +36 -0
  395. package/commands/theme/__tests__/preview.test.d.ts +1 -0
  396. package/commands/theme/__tests__/preview.test.js +60 -0
  397. package/commands/theme/generate-selectors.d.ts +1 -1
  398. package/commands/theme/generate-selectors.js +23 -28
  399. package/commands/theme/marketplace-validate.d.ts +1 -1
  400. package/commands/theme/marketplace-validate.js +19 -24
  401. package/commands/theme/preview.d.ts +1 -1
  402. package/commands/theme/preview.js +60 -65
  403. package/commands/theme.d.ts +1 -1
  404. package/commands/theme.js +11 -16
  405. package/commands/upload.d.ts +1 -1
  406. package/commands/upload.js +77 -82
  407. package/commands/watch.d.ts +1 -1
  408. package/commands/watch.js +45 -51
  409. package/lang/en.d.ts +245 -103
  410. package/lang/en.js +590 -450
  411. package/lang/en.lyaml +29 -30
  412. package/lib/__tests__/accountTypes.test.d.ts +1 -0
  413. package/lib/__tests__/accountTypes.test.js +98 -0
  414. package/lib/__tests__/buildAccount.test.d.ts +1 -0
  415. package/lib/__tests__/buildAccount.test.js +282 -0
  416. package/lib/__tests__/commonOpts.test.d.ts +1 -0
  417. package/lib/__tests__/commonOpts.test.js +85 -0
  418. package/lib/__tests__/dependencyManagement.test.d.ts +1 -0
  419. package/lib/__tests__/dependencyManagement.test.js +175 -0
  420. package/lib/__tests__/developerTestAccounts.test.d.ts +1 -0
  421. package/lib/__tests__/developerTestAccounts.test.js +145 -0
  422. package/lib/__tests__/hasFeature.test.d.ts +1 -0
  423. package/lib/__tests__/hasFeature.test.js +35 -0
  424. package/lib/__tests__/importData.test.d.ts +1 -0
  425. package/lib/__tests__/importData.test.js +89 -0
  426. package/lib/__tests__/npm.test.d.ts +1 -0
  427. package/lib/__tests__/npm.test.js +57 -0
  428. package/lib/__tests__/oauth.test.d.ts +1 -0
  429. package/lib/__tests__/oauth.test.js +108 -0
  430. package/lib/__tests__/parsing.test.d.ts +1 -0
  431. package/lib/__tests__/parsing.test.js +34 -0
  432. package/lib/__tests__/polling.test.d.ts +1 -0
  433. package/lib/__tests__/polling.test.js +76 -0
  434. package/lib/__tests__/process.test.d.ts +1 -0
  435. package/lib/__tests__/process.test.js +85 -0
  436. package/lib/__tests__/projectProfiles.test.d.ts +1 -0
  437. package/lib/__tests__/projectProfiles.test.js +129 -0
  438. package/lib/__tests__/sandboxSync.test.d.ts +1 -0
  439. package/lib/__tests__/sandboxSync.test.js +126 -0
  440. package/lib/__tests__/sandboxes.test.d.ts +1 -0
  441. package/lib/__tests__/sandboxes.test.js +146 -0
  442. package/lib/__tests__/serverlessLogs.test.d.ts +1 -0
  443. package/lib/__tests__/serverlessLogs.test.js +149 -0
  444. package/lib/__tests__/usageTracking.test.d.ts +1 -0
  445. package/lib/__tests__/usageTracking.test.js +164 -0
  446. package/lib/__tests__/validation.test.d.ts +1 -0
  447. package/lib/__tests__/validation.test.js +143 -0
  448. package/lib/__tests__/yargsUtils.test.d.ts +1 -0
  449. package/lib/__tests__/yargsUtils.test.js +50 -0
  450. package/lib/accountTypes.d.ts +1 -0
  451. package/lib/accountTypes.js +31 -31
  452. package/lib/app/__tests__/migrate.test.d.ts +1 -0
  453. package/lib/app/__tests__/migrate.test.js +535 -0
  454. package/lib/app/__tests__/migrate_legacy.test.d.ts +1 -0
  455. package/lib/app/__tests__/migrate_legacy.test.js +134 -0
  456. package/lib/app/migrate.d.ts +19 -6
  457. package/lib/app/migrate.js +212 -156
  458. package/lib/app/migrate_legacy.d.ts +1 -1
  459. package/lib/app/migrate_legacy.js +72 -79
  460. package/lib/app/urls.d.ts +1 -1
  461. package/lib/app/urls.js +5 -9
  462. package/lib/buildAccount.d.ts +12 -3
  463. package/lib/buildAccount.js +165 -69
  464. package/lib/commonOpts.d.ts +3 -1
  465. package/lib/commonOpts.js +77 -57
  466. package/lib/configMigrate.js +34 -38
  467. package/lib/configOptions.d.ts +5 -0
  468. package/lib/configOptions.js +44 -40
  469. package/lib/constants.d.ts +9 -0
  470. package/lib/constants.js +40 -34
  471. package/lib/customObject.js +2 -6
  472. package/lib/dependencyManagement.d.ts +1 -1
  473. package/lib/dependencyManagement.js +37 -45
  474. package/lib/developerTestAccounts.d.ts +1 -1
  475. package/lib/developerTestAccounts.js +34 -39
  476. package/lib/doctor/Diagnosis.d.ts +1 -1
  477. package/lib/doctor/Diagnosis.js +15 -19
  478. package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
  479. package/lib/doctor/DiagnosticInfoBuilder.js +30 -37
  480. package/lib/doctor/Doctor.d.ts +1 -1
  481. package/lib/doctor/Doctor.js +56 -63
  482. package/lib/doctor/__tests__/Diagnosis.test.d.ts +1 -0
  483. package/lib/doctor/__tests__/Diagnosis.test.js +82 -0
  484. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +1 -0
  485. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +167 -0
  486. package/lib/doctor/__tests__/Doctor.test.d.ts +1 -0
  487. package/lib/doctor/__tests__/Doctor.test.js +396 -0
  488. package/lib/enums/exitCodes.js +1 -4
  489. package/lib/errorHandlers/index.js +33 -44
  490. package/lib/errorHandlers/suppressError.d.ts +1 -1
  491. package/lib/errorHandlers/suppressError.js +28 -31
  492. package/lib/errors/ProjectValidationError.d.ts +4 -0
  493. package/lib/errors/ProjectValidationError.js +9 -0
  494. package/lib/filesystem.js +8 -15
  495. package/lib/generateSelectors.js +18 -29
  496. package/lib/hasFeature.d.ts +2 -1
  497. package/lib/hasFeature.js +10 -6
  498. package/lib/importData.d.ts +3 -0
  499. package/lib/importData.js +50 -0
  500. package/lib/interpolation.js +11 -18
  501. package/lib/lang.d.ts +1 -1
  502. package/lib/lang.js +22 -27
  503. package/lib/links.js +16 -24
  504. package/lib/marketplaceValidate.js +29 -39
  505. package/lib/mcp/setup.d.ts +4 -0
  506. package/lib/mcp/setup.js +129 -84
  507. package/lib/middleware/__test__/configMiddleware.test.js +34 -69
  508. package/lib/middleware/__test__/gitMiddleware.test.js +11 -46
  509. package/lib/middleware/__test__/notificationsMiddleware.test.js +1 -3
  510. package/lib/middleware/__test__/requestMiddleware.test.js +8 -13
  511. package/lib/middleware/__test__/utils.test.js +9 -11
  512. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +16 -51
  513. package/lib/middleware/autoUpdateMiddleware.js +33 -40
  514. package/lib/middleware/configMiddleware.js +41 -39
  515. package/lib/middleware/fireAlarmMiddleware.js +12 -18
  516. package/lib/middleware/gitMiddleware.js +5 -8
  517. package/lib/middleware/notificationsMiddleware.js +7 -11
  518. package/lib/middleware/requestMiddleware.js +4 -10
  519. package/lib/middleware/utils.js +1 -4
  520. package/lib/middleware/yargsChecksMiddleware.js +10 -13
  521. package/lib/npm.js +14 -23
  522. package/lib/oauth.js +29 -35
  523. package/lib/parsing.d.ts +1 -0
  524. package/lib/parsing.js +8 -0
  525. package/lib/polling.d.ts +1 -1
  526. package/lib/polling.js +19 -13
  527. package/lib/process.js +26 -23
  528. package/lib/projectProfiles.d.ts +2 -2
  529. package/lib/projectProfiles.js +32 -42
  530. package/lib/projects/ProjectLogsManager.js +18 -21
  531. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +1 -0
  532. package/lib/projects/__tests__/AppDevModeInterface.test.js +511 -0
  533. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +1 -0
  534. package/lib/projects/__tests__/LocalDevProcess.test.js +254 -0
  535. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +1 -0
  536. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +339 -0
  537. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +1 -0
  538. package/lib/projects/__tests__/ProjectLogsManager.test.js +189 -0
  539. package/lib/projects/__tests__/buildAndDeploy.test.d.ts +1 -0
  540. package/lib/projects/__tests__/buildAndDeploy.test.js +23 -0
  541. package/lib/projects/__tests__/components.test.d.ts +1 -0
  542. package/lib/projects/__tests__/components.test.js +181 -0
  543. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +1 -0
  544. package/lib/projects/__tests__/localDevProjectHelpers.test.js +118 -0
  545. package/lib/projects/__tests__/projects.test.d.ts +1 -0
  546. package/lib/projects/__tests__/projects.test.js +84 -0
  547. package/lib/projects/__tests__/structure.test.d.ts +1 -0
  548. package/lib/projects/__tests__/structure.test.js +211 -0
  549. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +1 -0
  550. package/lib/projects/add/__tests__/legacyAddComponent.test.js +204 -0
  551. package/lib/projects/add/__tests__/v3AddComponent.test.d.ts +1 -0
  552. package/lib/projects/add/__tests__/v3AddComponent.test.js +185 -0
  553. package/lib/projects/add/legacyAddComponent.d.ts +1 -1
  554. package/lib/projects/add/legacyAddComponent.js +24 -30
  555. package/lib/projects/add/v3AddComponent.d.ts +1 -1
  556. package/lib/projects/add/v3AddComponent.js +40 -41
  557. package/lib/projects/buildAndDeploy.d.ts +1 -1
  558. package/lib/projects/buildAndDeploy.js +88 -97
  559. package/lib/projects/components.js +19 -25
  560. package/lib/projects/config.d.ts +1 -1
  561. package/lib/projects/config.js +32 -41
  562. package/lib/projects/create/__tests__/legacy.test.d.ts +1 -0
  563. package/lib/projects/create/__tests__/legacy.test.js +91 -0
  564. package/lib/projects/create/__tests__/v3.test.d.ts +1 -0
  565. package/lib/projects/create/__tests__/v3.test.js +78 -0
  566. package/lib/projects/create/index.d.ts +5 -4
  567. package/lib/projects/create/index.js +25 -22
  568. package/lib/projects/create/legacy.d.ts +1 -1
  569. package/lib/projects/create/legacy.js +25 -31
  570. package/lib/projects/create/v3.d.ts +8 -9
  571. package/lib/projects/create/v3.js +48 -60
  572. package/lib/projects/ensureProjectExists.js +31 -37
  573. package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -3
  574. package/lib/projects/localDev/AppDevModeInterface.js +59 -61
  575. package/lib/projects/localDev/DevServerManager.d.ts +1 -1
  576. package/lib/projects/localDev/DevServerManager.js +22 -27
  577. package/lib/projects/localDev/DevServerManagerV2.d.ts +2 -2
  578. package/lib/projects/localDev/DevServerManagerV2.js +15 -22
  579. package/lib/projects/localDev/LocalDevLogger.d.ts +1 -5
  580. package/lib/projects/localDev/LocalDevLogger.js +66 -79
  581. package/lib/projects/localDev/LocalDevManager.d.ts +1 -1
  582. package/lib/projects/localDev/LocalDevManager.js +106 -111
  583. package/lib/projects/localDev/LocalDevProcess.d.ts +10 -8
  584. package/lib/projects/localDev/LocalDevProcess.js +55 -64
  585. package/lib/projects/localDev/LocalDevState.d.ts +19 -14
  586. package/lib/projects/localDev/LocalDevState.js +39 -37
  587. package/lib/projects/localDev/LocalDevWatcher.d.ts +1 -1
  588. package/lib/projects/localDev/LocalDevWatcher.js +7 -12
  589. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +4 -3
  590. package/lib/projects/localDev/LocalDevWebsocketServer.js +78 -55
  591. package/lib/projects/localDev/{helpers.d.ts → helpers/account.d.ts} +3 -9
  592. package/lib/projects/localDev/helpers/account.js +233 -0
  593. package/lib/projects/localDev/helpers/project.d.ts +12 -0
  594. package/lib/projects/localDev/helpers/project.js +174 -0
  595. package/lib/projects/structure.d.ts +3 -3
  596. package/lib/projects/structure.js +32 -78
  597. package/lib/projects/ui.js +10 -13
  598. package/lib/projects/upload.d.ts +1 -1
  599. package/lib/projects/upload.js +57 -73
  600. package/lib/projects/urls.d.ts +2 -1
  601. package/lib/projects/urls.js +19 -25
  602. package/lib/projects/watch.d.ts +1 -1
  603. package/lib/projects/watch.js +48 -54
  604. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +1 -0
  605. package/lib/prompts/__tests__/createFunctionPrompt.test.js +129 -0
  606. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +1 -0
  607. package/lib/prompts/__tests__/createModulePrompt.test.js +187 -0
  608. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +1 -0
  609. package/lib/prompts/__tests__/createTemplatePrompt.test.js +102 -0
  610. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +1 -0
  611. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +28 -0
  612. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +1 -0
  613. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +37 -0
  614. package/lib/prompts/accountNamePrompt.d.ts +1 -1
  615. package/lib/prompts/accountNamePrompt.js +26 -31
  616. package/lib/prompts/accountsPrompt.js +12 -15
  617. package/lib/prompts/cmsFieldPrompt.js +13 -19
  618. package/lib/prompts/confirmImportDataPrompt.d.ts +1 -0
  619. package/lib/prompts/confirmImportDataPrompt.js +12 -0
  620. package/lib/prompts/createApiSamplePrompt.d.ts +1 -1
  621. package/lib/prompts/createApiSamplePrompt.js +9 -12
  622. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +11 -10
  623. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +85 -45
  624. package/lib/prompts/createFunctionPrompt.d.ts +2 -1
  625. package/lib/prompts/createFunctionPrompt.js +51 -25
  626. package/lib/prompts/createModulePrompt.d.ts +2 -1
  627. package/lib/prompts/createModulePrompt.js +60 -17
  628. package/lib/prompts/createTemplatePrompt.d.ts +3 -24
  629. package/lib/prompts/createTemplatePrompt.js +13 -8
  630. package/lib/prompts/downloadProjectPrompt.js +17 -20
  631. package/lib/prompts/importDataFilePathPrompt.d.ts +1 -0
  632. package/lib/prompts/importDataFilePathPrompt.js +24 -0
  633. package/lib/prompts/importDataTestAccountSelectPrompt.d.ts +3 -0
  634. package/lib/prompts/importDataTestAccountSelectPrompt.js +29 -0
  635. package/lib/prompts/installAppPrompt.js +19 -26
  636. package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -2
  637. package/lib/prompts/personalAccessKeyPrompt.js +41 -48
  638. package/lib/prompts/previewPrompt.js +15 -22
  639. package/lib/prompts/projectAddPrompt.d.ts +3 -2
  640. package/lib/prompts/projectAddPrompt.js +14 -17
  641. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -1
  642. package/lib/prompts/projectDevTargetAccountPrompt.js +48 -54
  643. package/lib/prompts/projectNameAndDestPrompt.d.ts +3 -0
  644. package/lib/prompts/projectNameAndDestPrompt.js +53 -0
  645. package/lib/prompts/projectNamePrompt.js +11 -14
  646. package/lib/prompts/projectsLogsPrompt.js +5 -8
  647. package/lib/prompts/promptUtils.d.ts +3 -3
  648. package/lib/prompts/promptUtils.js +176 -47
  649. package/lib/prompts/sandboxesPrompt.d.ts +1 -1
  650. package/lib/prompts/sandboxesPrompt.js +26 -30
  651. package/lib/prompts/secretPrompt.js +10 -15
  652. package/lib/prompts/selectAppPrompt.js +11 -14
  653. package/lib/prompts/selectHubDBTablePrompt.js +24 -30
  654. package/lib/prompts/selectProjectTemplatePrompt.d.ts +27 -0
  655. package/lib/prompts/selectProjectTemplatePrompt.js +69 -0
  656. package/lib/prompts/selectPublicAppForMigrationPrompt.js +22 -25
  657. package/lib/prompts/setAsDefaultAccountPrompt.js +13 -16
  658. package/lib/prompts/uploadPrompt.js +11 -17
  659. package/lib/sandboxSync.d.ts +1 -1
  660. package/lib/sandboxSync.js +58 -65
  661. package/lib/sandboxes.d.ts +5 -1
  662. package/lib/sandboxes.js +72 -76
  663. package/lib/schema.js +16 -19
  664. package/lib/serverlessLogs.js +45 -52
  665. package/lib/testUtils.js +5 -10
  666. package/lib/ui/SpinniesManager.d.ts +1 -1
  667. package/lib/ui/SpinniesManager.js +29 -35
  668. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +1 -0
  669. package/lib/ui/__tests__/removeAnsiCodes.test.js +84 -0
  670. package/lib/ui/boxen.js +11 -14
  671. package/lib/ui/git.js +14 -20
  672. package/lib/ui/index.d.ts +6 -0
  673. package/lib/ui/index.js +57 -77
  674. package/lib/ui/logger.d.ts +1 -0
  675. package/lib/ui/logger.js +11 -13
  676. package/lib/ui/removeAnsiCodes.d.ts +1 -0
  677. package/lib/ui/removeAnsiCodes.js +4 -0
  678. package/lib/ui/serverlessFunctionLogs.js +14 -20
  679. package/lib/ui/spinniesUtils.js +24 -39
  680. package/lib/ui/supportHyperlinks.js +3 -6
  681. package/lib/ui/supportsColor.js +11 -17
  682. package/lib/ui/table.js +6 -13
  683. package/lib/upload.js +15 -21
  684. package/lib/usageTracking.d.ts +11 -0
  685. package/lib/usageTracking.js +88 -103
  686. package/lib/utils/hasFlag.d.ts +1 -0
  687. package/lib/utils/hasFlag.js +9 -0
  688. package/lib/validation.d.ts +1 -1
  689. package/lib/validation.js +50 -89
  690. package/lib/yargsUtils.d.ts +4 -1
  691. package/lib/yargsUtils.js +21 -25
  692. package/mcp-server/server.js +6 -8
  693. package/mcp-server/tools/index.js +19 -16
  694. package/mcp-server/tools/project/{AddFeatureToProject.d.ts → AddFeatureToProjectTool.d.ts} +5 -5
  695. package/mcp-server/tools/project/AddFeatureToProjectTool.js +76 -0
  696. package/mcp-server/tools/project/CreateProjectTool.d.ts +6 -6
  697. package/mcp-server/tools/project/CreateProjectTool.js +42 -53
  698. package/mcp-server/tools/project/{DeployProject.d.ts → DeployProjectTool.d.ts} +2 -2
  699. package/mcp-server/tools/project/DeployProjectTool.js +49 -0
  700. package/mcp-server/tools/project/DocFetchTool.d.ts +17 -0
  701. package/mcp-server/tools/project/DocFetchTool.js +49 -0
  702. package/mcp-server/tools/project/DocsSearchTool.d.ts +26 -0
  703. package/mcp-server/tools/project/DocsSearchTool.js +62 -0
  704. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +20 -0
  705. package/mcp-server/tools/project/GetConfigValuesTool.js +52 -0
  706. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
  707. package/mcp-server/tools/project/GuidedWalkthroughTool.js +23 -24
  708. package/mcp-server/tools/project/UploadProjectTools.d.ts +1 -1
  709. package/mcp-server/tools/project/UploadProjectTools.js +14 -18
  710. package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
  711. package/mcp-server/tools/project/ValidateProjectTool.js +15 -16
  712. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +1 -0
  713. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +151 -0
  714. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +1 -0
  715. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +127 -0
  716. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +1 -0
  717. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +119 -0
  718. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +1 -0
  719. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +117 -0
  720. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +1 -0
  721. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +190 -0
  722. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +1 -0
  723. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +198 -0
  724. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +1 -0
  725. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +126 -0
  726. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +1 -0
  727. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +107 -0
  728. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +1 -0
  729. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +110 -0
  730. package/mcp-server/tools/project/constants.d.ts +3 -0
  731. package/mcp-server/tools/project/constants.js +20 -9
  732. package/mcp-server/types.js +1 -5
  733. package/mcp-server/utils/__tests__/command.test.d.ts +1 -0
  734. package/mcp-server/utils/__tests__/command.test.js +45 -0
  735. package/mcp-server/utils/__tests__/project.test.d.ts +1 -0
  736. package/mcp-server/utils/__tests__/project.test.js +79 -0
  737. package/mcp-server/utils/command.d.ts +1 -1
  738. package/mcp-server/utils/command.js +4 -11
  739. package/mcp-server/utils/content.d.ts +1 -1
  740. package/mcp-server/utils/content.js +2 -6
  741. package/mcp-server/utils/project.js +11 -14
  742. package/mcp-server/utils/toolUsageTracking.d.ts +3 -0
  743. package/mcp-server/utils/toolUsageTracking.js +23 -0
  744. package/package.json +28 -21
  745. package/types/Cms.d.ts +17 -1
  746. package/types/Cms.js +25 -2
  747. package/types/LocalDev.d.ts +5 -7
  748. package/types/LocalDev.js +1 -2
  749. package/types/ProjectComponents.d.ts +2 -2
  750. package/types/ProjectComponents.js +1 -2
  751. package/types/Projects.d.ts +1 -1
  752. package/types/Projects.js +2 -5
  753. package/types/Prompts.d.ts +4 -2
  754. package/types/Prompts.js +1 -2
  755. package/types/Sandboxes.js +1 -2
  756. package/types/Yargs.d.ts +5 -1
  757. package/types/Yargs.js +1 -2
  758. package/ui/index.d.ts +1 -0
  759. package/ui/index.js +6 -0
  760. package/lib/projects/localDev/helpers.js +0 -351
  761. package/lib/prompts/createProjectPrompt.d.ts +0 -28
  762. package/lib/prompts/createProjectPrompt.js +0 -120
  763. package/mcp-server/tools/project/AddFeatureToProject.js +0 -85
  764. package/mcp-server/tools/project/DeployProject.js +0 -50
@@ -1,10 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GuidedWalkthroughTool = void 0;
4
- const types_1 = require("../../types");
5
- const zod_1 = require("zod");
6
- const command_1 = require("../../utils/command");
7
- const content_1 = require("../../utils/content");
1
+ import { Tool } from '../../types.js';
2
+ import { z } from 'zod';
3
+ import { execAsync } from '../../utils/command.js';
4
+ import { formatTextContents } from '../../utils/content.js';
5
+ import { trackToolUsage } from '../../utils/toolUsageTracking.js';
8
6
  const nextCommands = {
9
7
  'hs init': 'hs auth',
10
8
  'hs auth': 'hs project create',
@@ -12,42 +10,44 @@ const nextCommands = {
12
10
  'hs project upload': 'hs project dev',
13
11
  };
14
12
  const inputSchema = {
15
- command: zod_1.z
13
+ command: z
16
14
  .union([
17
- zod_1.z.literal('hs init'),
18
- zod_1.z.literal('hs auth'),
19
- zod_1.z.literal('hs project create'),
20
- zod_1.z.literal('hs project upload'),
15
+ z.literal('hs init'),
16
+ z.literal('hs auth'),
17
+ z.literal('hs project create'),
18
+ z.literal('hs project upload'),
21
19
  ])
22
20
  .describe('The command to learn more about. Start with `hs init`')
23
21
  .optional(),
24
22
  };
25
23
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
- const inputSchemaZodObject = zod_1.z.object({
24
+ const inputSchemaZodObject = z.object({
27
25
  ...inputSchema,
28
26
  });
29
- class GuidedWalkthroughTool extends types_1.Tool {
27
+ const toolName = 'guided-walkthrough-hubspot-cli';
28
+ export class GuidedWalkthroughTool extends Tool {
30
29
  constructor(mcpServer) {
31
30
  super(mcpServer);
32
31
  }
33
32
  async handler({ command }) {
33
+ await trackToolUsage(toolName);
34
34
  if (command) {
35
- const { stdout } = await (0, command_1.execAsync)(`${command} --help`);
36
- return (0, content_1.formatTextContents)(`Display this help output for the user amd wait for them to acknowledge: ${stdout}. ${nextCommands[command] ? `Once they are ready, A good command to look at next is ${nextCommands[command]}` : ''}`);
35
+ const { stdout } = await execAsync(`${command} --help`);
36
+ return formatTextContents(`Display this help output for the user amd wait for them to acknowledge: ${stdout}. ${nextCommands[command] ? `Once they are ready, A good command to look at next is ${nextCommands[command]}` : ''}`);
37
37
  }
38
- return (0, content_1.formatTextContents)('Is there another command you would like to learn more about?');
38
+ return formatTextContents('Is there another command you would like to learn more about?');
39
39
  }
40
40
  register() {
41
- return this.mcpServer.registerTool('guided-walkthrough-hubspot-cli', {
41
+ return this.mcpServer.registerTool(toolName, {
42
42
  title: 'Guided walkthrough of the CLI',
43
43
  description: 'Give the user a guided walkthrough of the HubSpot CLI.',
44
44
  inputSchema: {
45
- command: zod_1.z
45
+ command: z
46
46
  .union([
47
- zod_1.z.literal('hs init'),
48
- zod_1.z.literal('hs auth'),
49
- zod_1.z.literal('hs project create'),
50
- zod_1.z.literal('hs project upload'),
47
+ z.literal('hs init'),
48
+ z.literal('hs auth'),
49
+ z.literal('hs project create'),
50
+ z.literal('hs project upload'),
51
51
  ])
52
52
  .describe('The command to learn more about. Start with `hs init`')
53
53
  .optional(),
@@ -55,4 +55,3 @@ class GuidedWalkthroughTool extends types_1.Tool {
55
55
  }, this.handler);
56
56
  }
57
57
  }
58
- exports.GuidedWalkthroughTool = GuidedWalkthroughTool;
@@ -1,4 +1,4 @@
1
- import { TextContentResponse, Tool } from '../../types';
1
+ import { TextContentResponse, Tool } from '../../types.js';
2
2
  import { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import z from 'zod';
4
4
  declare const inputSchemaZodObject: z.ZodObject<{
@@ -1,35 +1,31 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.UploadProjectTools = void 0;
7
- const types_1 = require("../../types");
8
- const project_1 = require("../../utils/project");
9
- const constants_1 = require("./constants");
10
- const zod_1 = __importDefault(require("zod"));
11
- const content_1 = require("../../utils/content");
1
+ import { Tool } from '../../types.js';
2
+ import { runCommandInDir } from '../../utils/project.js';
3
+ import { absoluteProjectPath } from './constants.js';
4
+ import z from 'zod';
5
+ import { formatTextContents } from '../../utils/content.js';
6
+ import { trackToolUsage } from '../../utils/toolUsageTracking.js';
12
7
  const inputSchema = {
13
- absoluteProjectPath: constants_1.absoluteProjectPath,
8
+ absoluteProjectPath,
14
9
  };
15
10
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
- const inputSchemaZodObject = zod_1.default.object({
11
+ const inputSchemaZodObject = z.object({
17
12
  ...inputSchema,
18
13
  });
19
- class UploadProjectTools extends types_1.Tool {
14
+ const toolName = 'upload-hubspot-project';
15
+ export class UploadProjectTools extends Tool {
20
16
  constructor(mcpServer) {
21
17
  super(mcpServer);
22
18
  }
23
19
  async handler({ absoluteProjectPath, }) {
24
- const { stdout, stderr } = await (0, project_1.runCommandInDir)(absoluteProjectPath, `hs project upload --force-create`);
25
- return (0, content_1.formatTextContents)(stdout, stderr);
20
+ await trackToolUsage(toolName);
21
+ const { stdout, stderr } = await runCommandInDir(absoluteProjectPath, `hs project upload --force-create`);
22
+ return formatTextContents(stdout, stderr);
26
23
  }
27
24
  register() {
28
- return this.mcpServer.registerTool('upload-hubspot-project', {
25
+ return this.mcpServer.registerTool(toolName, {
29
26
  title: 'Upload HubSpot Project',
30
27
  description: 'Uploads the HubSpot project in current working directory. If the project does not exist, it will be created. MUST be ran from within the project directory. DO NOT run this tool unless the user specifies they would like to upload the project, it is potentially destructive',
31
28
  inputSchema,
32
29
  }, this.handler);
33
30
  }
34
31
  }
35
- exports.UploadProjectTools = UploadProjectTools;
@@ -1,4 +1,4 @@
1
- import { TextContentResponse, Tool } from '../../types';
1
+ import { TextContentResponse, Tool } from '../../types.js';
2
2
  import { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { z } from 'zod';
4
4
  declare const inputSchemaZodObject: z.ZodObject<{
@@ -1,35 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ValidateProjectTool = void 0;
4
- const types_1 = require("../../types");
5
- const zod_1 = require("zod");
6
- const constants_1 = require("./constants");
7
- const project_1 = require("../../utils/project");
8
- const content_1 = require("../../utils/content");
1
+ import { Tool } from '../../types.js';
2
+ import { z } from 'zod';
3
+ import { absoluteProjectPath } from './constants.js';
4
+ import { runCommandInDir } from '../../utils/project.js';
5
+ import { formatTextContents } from '../../utils/content.js';
6
+ import { trackToolUsage } from '../../utils/toolUsageTracking.js';
9
7
  const inputSchema = {
10
- absoluteProjectPath: constants_1.absoluteProjectPath,
8
+ absoluteProjectPath,
11
9
  };
12
10
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
13
- const inputSchemaZodObject = zod_1.z.object({ ...inputSchema });
14
- class ValidateProjectTool extends types_1.Tool {
11
+ const inputSchemaZodObject = z.object({ ...inputSchema });
12
+ const toolName = 'validate-hubspot-project';
13
+ export class ValidateProjectTool extends Tool {
15
14
  constructor(mcpServer) {
16
15
  super(mcpServer);
17
16
  }
18
17
  async handler({ absoluteProjectPath, }) {
18
+ await trackToolUsage(toolName);
19
19
  try {
20
- const { stdout, stderr } = await (0, project_1.runCommandInDir)(absoluteProjectPath, 'hs project validate');
21
- return (0, content_1.formatTextContents)(stdout, stderr);
20
+ const { stdout, stderr } = await runCommandInDir(absoluteProjectPath, 'hs project validate');
21
+ return formatTextContents(stdout, stderr);
22
22
  }
23
23
  catch (error) {
24
- return (0, content_1.formatTextContents)(error instanceof Error ? error.message : `${error}`);
24
+ return formatTextContents(error instanceof Error ? error.message : `${error}`);
25
25
  }
26
26
  }
27
27
  register() {
28
- return this.mcpServer.registerTool('validate-hubspot-project', {
28
+ return this.mcpServer.registerTool(toolName, {
29
29
  title: 'Validate HubSpot Project',
30
30
  description: 'Validates the HubSpot project and its configuration files. This tool does not need to be ran before uploading the project',
31
31
  inputSchema,
32
32
  }, this.handler);
33
33
  }
34
34
  }
35
- exports.ValidateProjectTool = ValidateProjectTool;
@@ -0,0 +1,151 @@
1
+ import { AddFeatureToProjectTool, } from '../AddFeatureToProjectTool.js';
2
+ import { runCommandInDir } from '../../../utils/project.js';
3
+ import { addFlag } from '../../../utils/command.js';
4
+ import { APP_AUTH_TYPES, APP_DISTRIBUTION_TYPES, } from '../../../../lib/constants.js';
5
+ vi.mock('@modelcontextprotocol/sdk/server/mcp.js');
6
+ vi.mock('../../../utils/project');
7
+ vi.mock('../../../utils/command');
8
+ vi.mock('../../../../lib/constants');
9
+ vi.mock('../../../utils/toolUsageTracking');
10
+ const mockRunCommandInDir = runCommandInDir;
11
+ const mockAddFlag = addFlag;
12
+ describe('mcp-server/tools/project/AddFeatureToProject', () => {
13
+ let mockMcpServer;
14
+ let tool;
15
+ let mockRegisteredTool;
16
+ beforeEach(() => {
17
+ vi.clearAllMocks();
18
+ // @ts-expect-error Not mocking the whole server
19
+ mockMcpServer = {
20
+ registerTool: vi.fn(),
21
+ };
22
+ mockRegisteredTool = {};
23
+ mockMcpServer.registerTool.mockReturnValue(mockRegisteredTool);
24
+ tool = new AddFeatureToProjectTool(mockMcpServer);
25
+ // Mock addFlag to simulate command building
26
+ mockAddFlag.mockImplementation((command, flag, value) => `${command} --${flag} "${value}"`);
27
+ });
28
+ describe('register', () => {
29
+ it('should register tool with correct parameters', () => {
30
+ const result = tool.register();
31
+ expect(mockMcpServer.registerTool).toHaveBeenCalledWith('add-feature-to-hubspot-project', expect.objectContaining({
32
+ title: 'Add feature to HubSpot Project',
33
+ description: expect.stringContaining('Adds a feature to an existing HubSpot project'),
34
+ inputSchema: expect.any(Object),
35
+ }), tool.handler);
36
+ expect(result).toBe(mockRegisteredTool);
37
+ });
38
+ });
39
+ describe('handler', () => {
40
+ const baseInput = {
41
+ absoluteProjectPath: '/test/project',
42
+ addApp: false,
43
+ };
44
+ it('should handle successful command execution without app', async () => {
45
+ mockRunCommandInDir.mockResolvedValue({
46
+ stdout: 'Feature added successfully',
47
+ stderr: '',
48
+ });
49
+ const result = await tool.handler(baseInput);
50
+ expect(mockAddFlag).toHaveBeenCalledWith('hs project add', 'features', []);
51
+ expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/project', expect.any(String));
52
+ expect(result).toEqual({
53
+ content: [
54
+ { type: 'text', text: 'Feature added successfully' },
55
+ { type: 'text', text: '' },
56
+ ],
57
+ });
58
+ });
59
+ it('should handle successful command execution with features', async () => {
60
+ mockRunCommandInDir.mockResolvedValue({
61
+ stdout: 'Features added successfully',
62
+ stderr: '',
63
+ });
64
+ const input = {
65
+ ...baseInput,
66
+ features: ['card', 'settings'],
67
+ };
68
+ await tool.handler(input);
69
+ expect(mockAddFlag).toHaveBeenCalledWith('hs project add', 'features', [
70
+ 'card',
71
+ 'settings',
72
+ ]);
73
+ });
74
+ it('should prompt for distribution and auth when adding app without both', async () => {
75
+ const input = {
76
+ ...baseInput,
77
+ addApp: true,
78
+ };
79
+ const result = await tool.handler(input);
80
+ expect(result.content).toEqual([
81
+ {
82
+ type: 'text',
83
+ text: expect.stringContaining('Ask the user how they would you like to distribute the application'),
84
+ },
85
+ {
86
+ type: 'text',
87
+ text: expect.stringContaining('Ask the user which auth type they would like to use'),
88
+ },
89
+ ]);
90
+ });
91
+ it('should prompt for auth when adding app without auth', async () => {
92
+ const input = {
93
+ ...baseInput,
94
+ addApp: true,
95
+ distribution: APP_DISTRIBUTION_TYPES.PRIVATE,
96
+ };
97
+ const result = await tool.handler(input);
98
+ expect(result.content).toEqual([
99
+ {
100
+ type: 'text',
101
+ text: expect.stringContaining('Ask the user which auth type they would like to use'),
102
+ },
103
+ ]);
104
+ });
105
+ it('should add distribution and auth flags when provided', async () => {
106
+ mockRunCommandInDir.mockResolvedValue({
107
+ stdout: 'App feature added',
108
+ stderr: '',
109
+ });
110
+ const input = {
111
+ ...baseInput,
112
+ addApp: true,
113
+ distribution: APP_DISTRIBUTION_TYPES.MARKETPLACE,
114
+ auth: APP_AUTH_TYPES.OAUTH,
115
+ features: ['webhooks'],
116
+ };
117
+ await tool.handler(input);
118
+ expect(mockAddFlag).toHaveBeenCalledWith('hs project add', 'distribution', APP_DISTRIBUTION_TYPES.MARKETPLACE);
119
+ expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'auth', APP_AUTH_TYPES.OAUTH);
120
+ expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'features', [
121
+ 'webhooks',
122
+ ]);
123
+ });
124
+ it('should handle command execution error', async () => {
125
+ const error = new Error('Command failed');
126
+ mockRunCommandInDir.mockRejectedValue(error);
127
+ const result = await tool.handler(baseInput);
128
+ expect(result).toEqual({
129
+ content: [{ type: 'text', text: 'Command failed' }],
130
+ });
131
+ });
132
+ it('should handle non-Error rejection', async () => {
133
+ mockRunCommandInDir.mockRejectedValue('String error');
134
+ const result = await tool.handler(baseInput);
135
+ expect(result).toEqual({
136
+ content: [{ type: 'text', text: 'String error' }],
137
+ });
138
+ });
139
+ it('should handle stderr in results', async () => {
140
+ mockRunCommandInDir.mockResolvedValue({
141
+ stdout: 'Success with warnings',
142
+ stderr: 'Warning: something happened',
143
+ });
144
+ const result = await tool.handler(baseInput);
145
+ expect(result.content).toEqual([
146
+ { type: 'text', text: 'Success with warnings' },
147
+ { type: 'text', text: 'Warning: something happened' },
148
+ ]);
149
+ });
150
+ });
151
+ });
@@ -0,0 +1,127 @@
1
+ import { CreateProjectTool, } from '../CreateProjectTool.js';
2
+ import { runCommandInDir } from '../../../utils/project.js';
3
+ import { addFlag } from '../../../utils/command.js';
4
+ import { APP_DISTRIBUTION_TYPES, EMPTY_PROJECT, PROJECT_WITH_APP, } from '../../../../lib/constants.js';
5
+ vi.mock('@modelcontextprotocol/sdk/server/mcp.js');
6
+ vi.mock('../../../utils/project');
7
+ vi.mock('../../../utils/command');
8
+ vi.mock('../../../../lib/constants');
9
+ vi.mock('../../../../lib/projects/create/v3');
10
+ vi.mock('../../../utils/toolUsageTracking');
11
+ const mockRunCommandInDir = runCommandInDir;
12
+ const mockAddFlag = addFlag;
13
+ describe('mcp-server/tools/project/CreateProjectTool', () => {
14
+ let mockMcpServer;
15
+ let tool;
16
+ let mockRegisteredTool;
17
+ beforeEach(() => {
18
+ vi.clearAllMocks();
19
+ // @ts-expect-error Not mocking the whole thing
20
+ mockMcpServer = {
21
+ registerTool: vi.fn(),
22
+ };
23
+ mockRegisteredTool = {};
24
+ mockMcpServer.registerTool.mockReturnValue(mockRegisteredTool);
25
+ tool = new CreateProjectTool(mockMcpServer);
26
+ // Mock addFlag to simulate command building
27
+ mockAddFlag.mockImplementation((command, flag, value) => `${command} --${flag} "${value}"`);
28
+ });
29
+ describe('register', () => {
30
+ it('should register tool with correct parameters', () => {
31
+ const result = tool.register();
32
+ expect(mockMcpServer.registerTool).toHaveBeenCalledWith('create-hubspot-project', {
33
+ title: 'Create HubSpot Project',
34
+ description: 'Creates a HubSpot project with the provided name and outputs it in the provided destination',
35
+ inputSchema: expect.any(Object),
36
+ }, tool.handler);
37
+ expect(result).toBe(mockRegisteredTool);
38
+ });
39
+ });
40
+ describe('handler', () => {
41
+ const baseInput = {
42
+ absoluteCurrentWorkingDirectory: '/test/workspace',
43
+ name: 'test-project',
44
+ destination: './test-dest',
45
+ projectBase: EMPTY_PROJECT,
46
+ };
47
+ it('should handle successful command execution', async () => {
48
+ mockRunCommandInDir.mockResolvedValue({
49
+ stdout: 'Project created successfully',
50
+ stderr: '',
51
+ });
52
+ const result = await tool.handler(baseInput);
53
+ expect(mockAddFlag).toHaveBeenCalledWith('hs project create', 'platform-version', '2025.2');
54
+ expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'name', 'test-project');
55
+ expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'dest', './test-dest');
56
+ expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'project-base', EMPTY_PROJECT);
57
+ expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/workspace', expect.any(String));
58
+ expect(result).toEqual({
59
+ content: [
60
+ { type: 'text', text: 'Project created successfully' },
61
+ { type: 'text', text: '' },
62
+ ],
63
+ });
64
+ });
65
+ it('should handle command execution error', async () => {
66
+ const error = new Error('Command failed');
67
+ mockRunCommandInDir.mockRejectedValue(error);
68
+ const result = await tool.handler(baseInput);
69
+ expect(result).toEqual({
70
+ content: [{ type: 'text', text: 'Command failed' }],
71
+ });
72
+ });
73
+ it('should prompt for distribution and auth when creating app project without both', async () => {
74
+ const input = {
75
+ ...baseInput,
76
+ projectBase: PROJECT_WITH_APP,
77
+ };
78
+ const result = await tool.handler(input);
79
+ expect(result.content).toEqual([
80
+ {
81
+ type: 'text',
82
+ text: expect.stringContaining('Ask the user how they would you like to distribute the application?'),
83
+ },
84
+ {
85
+ type: 'text',
86
+ text: expect.stringContaining('Ask the user which auth type they would like to use?'),
87
+ },
88
+ ]);
89
+ });
90
+ it('should prompt for auth when creating app project without auth', async () => {
91
+ const input = {
92
+ ...baseInput,
93
+ projectBase: PROJECT_WITH_APP,
94
+ distribution: APP_DISTRIBUTION_TYPES.PRIVATE,
95
+ };
96
+ const result = await tool.handler(input);
97
+ expect(result.content).toEqual([
98
+ {
99
+ type: 'text',
100
+ text: expect.stringContaining('Ask the user which auth type they would like to use?'),
101
+ },
102
+ ]);
103
+ });
104
+ it('should add features flag when features are provided', async () => {
105
+ mockRunCommandInDir.mockResolvedValue({
106
+ stdout: 'Project created',
107
+ stderr: '',
108
+ });
109
+ const input = {
110
+ ...baseInput,
111
+ features: ['card', 'settings'],
112
+ };
113
+ await tool.handler(input);
114
+ expect(mockAddFlag).toHaveBeenCalledWith(expect.any(String), 'features', [
115
+ 'card',
116
+ 'settings',
117
+ ]);
118
+ });
119
+ it('should handle non-Error rejection', async () => {
120
+ mockRunCommandInDir.mockRejectedValue('String error');
121
+ const result = await tool.handler(baseInput);
122
+ expect(result).toEqual({
123
+ content: [{ type: 'text', text: 'String error' }],
124
+ });
125
+ });
126
+ });
127
+ });
@@ -0,0 +1,119 @@
1
+ import { DeployProjectTool } from '../DeployProjectTool.js';
2
+ import { runCommandInDir } from '../../../utils/project.js';
3
+ import { addFlag } from '../../../utils/command.js';
4
+ vi.mock('@modelcontextprotocol/sdk/server/mcp.js');
5
+ vi.mock('../../../utils/project');
6
+ vi.mock('../../../utils/command');
7
+ vi.mock('../../../utils/toolUsageTracking');
8
+ const mockRunCommandInDir = runCommandInDir;
9
+ const mockAddFlag = addFlag;
10
+ describe('mcp-server/tools/project/DeployProject', () => {
11
+ let mockMcpServer;
12
+ let tool;
13
+ let mockRegisteredTool;
14
+ beforeEach(() => {
15
+ vi.clearAllMocks();
16
+ // @ts-expect-error Not mocking the whole server
17
+ mockMcpServer = {
18
+ registerTool: vi.fn(),
19
+ };
20
+ mockRegisteredTool = {};
21
+ mockMcpServer.registerTool.mockReturnValue(mockRegisteredTool);
22
+ tool = new DeployProjectTool(mockMcpServer);
23
+ // Mock addFlag to simulate command building
24
+ mockAddFlag.mockImplementation((command, flag, value) => `${command} --${flag} "${value}"`);
25
+ });
26
+ describe('register', () => {
27
+ it('should register tool with correct parameters', () => {
28
+ const result = tool.register();
29
+ expect(mockMcpServer.registerTool).toHaveBeenCalledWith('deploy-hubspot-project', {
30
+ title: 'Deploy a build of HubSpot Project',
31
+ description: expect.stringContaining('Takes a build number and a project name and deploys that build of the project'),
32
+ inputSchema: expect.any(Object),
33
+ }, tool.handler);
34
+ expect(result).toBe(mockRegisteredTool);
35
+ });
36
+ });
37
+ describe('handler', () => {
38
+ const baseInput = {
39
+ absoluteProjectPath: '/test/project',
40
+ };
41
+ it('should deploy project with specified build number', async () => {
42
+ mockRunCommandInDir.mockResolvedValue({
43
+ stdout: 'Project deployed successfully',
44
+ stderr: '',
45
+ });
46
+ const input = {
47
+ ...baseInput,
48
+ buildNumber: 123,
49
+ };
50
+ const result = await tool.handler(input);
51
+ expect(mockAddFlag).toHaveBeenCalledWith('hs project deploy', 'build', 123);
52
+ expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/project', expect.stringContaining('--build "123"'));
53
+ expect(result).toEqual({
54
+ content: [
55
+ { type: 'text', text: 'Project deployed successfully' },
56
+ { type: 'text', text: '' },
57
+ ],
58
+ });
59
+ });
60
+ it('should prompt for build number when not provided', async () => {
61
+ mockRunCommandInDir.mockResolvedValue({
62
+ stdout: 'Build 1: Created 2023-01-01\nBuild 2: Created 2023-01-02',
63
+ stderr: '',
64
+ });
65
+ const result = await tool.handler(baseInput);
66
+ expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/project', 'hs project list-builds --limit 100');
67
+ expect(result.content).toEqual([
68
+ {
69
+ type: 'text',
70
+ text: expect.stringContaining('Ask the user which build number they would like to deploy?'),
71
+ },
72
+ ]);
73
+ expect(result.content[0].text).toContain('Build 1: Created 2023-01-01');
74
+ });
75
+ it('should handle deployment with stderr', async () => {
76
+ mockRunCommandInDir.mockResolvedValue({
77
+ stdout: 'Deployed successfully',
78
+ stderr: 'Warning: deprecated feature used',
79
+ });
80
+ const input = {
81
+ ...baseInput,
82
+ buildNumber: 456,
83
+ };
84
+ const result = await tool.handler(input);
85
+ expect(result.content).toEqual([
86
+ { type: 'text', text: 'Deployed successfully' },
87
+ { type: 'text', text: 'Warning: deprecated feature used' },
88
+ ]);
89
+ });
90
+ it('should handle errors during list-builds command', async () => {
91
+ const error = new Error('Failed to list builds');
92
+ mockRunCommandInDir.mockRejectedValue(error);
93
+ // The error would be thrown and caught by the calling code
94
+ await expect(tool.handler(baseInput)).rejects.toThrow('Failed to list builds');
95
+ });
96
+ it('should handle errors during deploy command', async () => {
97
+ const error = new Error('Deployment failed');
98
+ mockRunCommandInDir.mockRejectedValue(error);
99
+ const input = {
100
+ ...baseInput,
101
+ buildNumber: 789,
102
+ };
103
+ await expect(tool.handler(input)).rejects.toThrow('Deployment failed');
104
+ });
105
+ it('should prompt for build when buildNumber is 0 (falsy)', async () => {
106
+ mockRunCommandInDir.mockResolvedValue({
107
+ stdout: 'Build 0: Initial build\nBuild 1: Latest build',
108
+ stderr: '',
109
+ });
110
+ const input = {
111
+ ...baseInput,
112
+ buildNumber: 0, // This is falsy, so it will prompt
113
+ };
114
+ const result = await tool.handler(input);
115
+ expect(mockRunCommandInDir).toHaveBeenCalledWith('/test/project', 'hs project list-builds --limit 100');
116
+ expect(result.content[0].text).toContain('Ask the user which build number they would like to deploy?');
117
+ });
118
+ });
119
+ });