@hubspot/cli 8.1.0-beta.0 → 8.1.0-experimental.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 (670) hide show
  1. package/api/migrate.js +8 -4
  2. package/bin/cli.js +12 -6
  3. package/commands/account/auth.js +7 -7
  4. package/commands/account/clean.js +7 -6
  5. package/commands/account/createOverride.js +10 -7
  6. package/commands/account/info.js +36 -17
  7. package/commands/account/link.d.ts +4 -0
  8. package/commands/account/link.js +89 -0
  9. package/commands/account/list.js +32 -76
  10. package/commands/account/remove.js +4 -3
  11. package/commands/account/removeOverride.js +11 -10
  12. package/commands/account/rename.js +5 -6
  13. package/commands/account/unlink.d.ts +4 -0
  14. package/commands/account/unlink.js +70 -0
  15. package/commands/account/use.js +75 -6
  16. package/commands/account.js +4 -0
  17. package/commands/api.d.ts +10 -0
  18. package/commands/api.js +164 -0
  19. package/commands/app/migrate.js +13 -13
  20. package/commands/app/secret/add.js +6 -7
  21. package/commands/app/secret/delete.js +9 -10
  22. package/commands/app/secret/list.js +6 -7
  23. package/commands/app/secret/update.js +8 -9
  24. package/commands/auth.js +19 -15
  25. package/commands/cms/app/create.js +9 -5
  26. package/commands/cms/convertFields.js +8 -8
  27. package/commands/cms/delete.js +2 -3
  28. package/commands/cms/fetch.js +7 -7
  29. package/commands/cms/function/create.js +9 -5
  30. package/commands/cms/function/deploy.js +2 -3
  31. package/commands/cms/function/list.js +11 -7
  32. package/commands/cms/function/logs.js +17 -22
  33. package/commands/cms/function/server.js +2 -3
  34. package/commands/cms/getReactModule.js +7 -8
  35. package/commands/cms/lighthouseScore.js +25 -24
  36. package/commands/cms/lint.js +4 -5
  37. package/commands/cms/list.js +5 -6
  38. package/commands/cms/module/create.js +9 -5
  39. package/commands/cms/module/marketplace-validate.js +7 -8
  40. package/commands/cms/mv.js +2 -3
  41. package/commands/cms/template/create.js +10 -6
  42. package/commands/cms/theme/create.js +5 -5
  43. package/commands/cms/theme/generate-selectors.js +5 -4
  44. package/commands/cms/theme/marketplace-validate.js +8 -9
  45. package/commands/cms/theme/preview.js +23 -70
  46. package/commands/cms/upload.js +15 -12
  47. package/commands/cms/watch.d.ts +0 -1
  48. package/commands/cms/watch.js +6 -12
  49. package/commands/cms/webpack/create.js +5 -5
  50. package/commands/completion.js +3 -5
  51. package/commands/config/migrate.js +6 -7
  52. package/commands/config/set.js +5 -6
  53. package/commands/customObject/create.js +4 -5
  54. package/commands/customObject/createSchema.js +4 -5
  55. package/commands/customObject/deleteSchema.js +4 -5
  56. package/commands/customObject/fetchAllSchemas.js +2 -3
  57. package/commands/customObject/fetchSchema.js +2 -3
  58. package/commands/customObject/listSchemas.js +2 -3
  59. package/commands/customObject/updateSchema.js +4 -5
  60. package/commands/doctor.js +8 -8
  61. package/commands/feedback.js +7 -5
  62. package/commands/filemanager/fetch.js +5 -6
  63. package/commands/filemanager/upload.js +5 -5
  64. package/commands/getStarted.js +17 -19
  65. package/commands/hubdb/clear.js +6 -3
  66. package/commands/hubdb/create.js +4 -5
  67. package/commands/hubdb/delete.js +9 -6
  68. package/commands/hubdb/fetch.js +6 -3
  69. package/commands/hubdb/list.js +16 -14
  70. package/commands/init.js +15 -14
  71. package/commands/mcp/setup.js +5 -14
  72. package/commands/mcp/start.js +2 -4
  73. package/commands/open.js +4 -5
  74. package/commands/project/add.js +13 -8
  75. package/commands/project/appInstallStatus.d.ts +4 -0
  76. package/commands/project/appInstallStatus.js +132 -0
  77. package/commands/project/create.js +28 -17
  78. package/commands/project/delete.d.ts +7 -0
  79. package/commands/project/delete.js +74 -0
  80. package/commands/project/deploy.js +39 -36
  81. package/commands/project/dev/deprecatedFlow.js +62 -17
  82. package/commands/project/dev/index.d.ts +3 -3
  83. package/commands/project/dev/index.js +59 -48
  84. package/commands/project/dev/unifiedFlow.js +70 -21
  85. package/commands/project/download.js +12 -9
  86. package/commands/project/info.d.ts +4 -0
  87. package/commands/project/info.js +67 -0
  88. package/commands/project/installDeps.js +9 -6
  89. package/commands/project/lint.js +31 -10
  90. package/commands/project/list.js +14 -14
  91. package/commands/project/listBuilds.js +8 -6
  92. package/commands/project/logs.js +5 -6
  93. package/commands/project/migrate.js +18 -18
  94. package/commands/project/open.js +5 -6
  95. package/commands/project/profile/add.js +12 -8
  96. package/commands/project/profile/delete.js +15 -11
  97. package/commands/project/updateDeps.js +9 -6
  98. package/commands/project/upload.js +33 -19
  99. package/commands/project/validate.js +12 -12
  100. package/commands/project/watch.js +32 -19
  101. package/commands/project.js +12 -3
  102. package/commands/sandbox/create.js +18 -45
  103. package/commands/sandbox/delete.js +13 -14
  104. package/commands/secret/addSecret.js +6 -7
  105. package/commands/secret/deleteSecret.js +5 -6
  106. package/commands/secret/listSecret.js +2 -3
  107. package/commands/secret/updateSecret.js +4 -5
  108. package/commands/testAccount/create.d.ts +1 -1
  109. package/commands/testAccount/create.js +25 -17
  110. package/commands/testAccount/createConfig.js +7 -8
  111. package/commands/testAccount/delete.js +27 -18
  112. package/commands/testAccount/importData.js +6 -7
  113. package/commands/upgrade.js +9 -10
  114. package/lang/en.d.ts +248 -14
  115. package/lang/en.js +265 -28
  116. package/lib/accountAuth.js +4 -0
  117. package/lib/app/migrate.js +18 -5
  118. package/lib/buildAccount.d.ts +1 -6
  119. package/lib/buildAccount.js +9 -42
  120. package/lib/commandSuggestion.js +1 -7
  121. package/lib/constants.d.ts +2 -4
  122. package/lib/constants.js +4 -4
  123. package/lib/doctor/Diagnosis.js +5 -5
  124. package/lib/doctor/Doctor.js +7 -7
  125. package/lib/errorHandlers/index.js +4 -3
  126. package/lib/errorHandlers/suppressError.js +4 -0
  127. package/lib/errors/PromptExitError.d.ts +6 -0
  128. package/lib/errors/PromptExitError.js +11 -0
  129. package/lib/generateSelectors.js +1 -2
  130. package/lib/getStartedV2Actions.d.ts +13 -0
  131. package/lib/getStartedV2Actions.js +56 -3
  132. package/lib/hasFeature.js +1 -2
  133. package/lib/link/accountTableUtils.d.ts +10 -0
  134. package/lib/link/accountTableUtils.js +39 -0
  135. package/lib/link/index.d.ts +18 -0
  136. package/lib/link/index.js +185 -0
  137. package/lib/link/linkUtils.d.ts +5 -0
  138. package/lib/link/linkUtils.js +49 -0
  139. package/lib/link/prompts.d.ts +7 -0
  140. package/lib/link/prompts.js +126 -0
  141. package/lib/link/renderLinkedAccountsTable.d.ts +2 -0
  142. package/lib/link/renderLinkedAccountsTable.js +14 -0
  143. package/lib/link/warnIfLinkedDirectory.d.ts +1 -0
  144. package/lib/link/warnIfLinkedDirectory.js +9 -0
  145. package/lib/mcp/setup.d.ts +1 -0
  146. package/lib/mcp/setup.js +77 -30
  147. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  148. package/lib/process.d.ts +1 -1
  149. package/lib/process.js +10 -3
  150. package/lib/projects/ProjectLogsManager.js +6 -3
  151. package/lib/projects/components.js +15 -4
  152. package/lib/projects/create/index.js +3 -6
  153. package/lib/projects/create/legacy.js +5 -10
  154. package/lib/projects/create/v2.js +5 -14
  155. package/lib/projects/delete.d.ts +13 -0
  156. package/lib/projects/delete.js +193 -0
  157. package/lib/projects/deploy.d.ts +1 -1
  158. package/lib/projects/deploy.js +2 -2
  159. package/lib/projects/ensureProjectExists.js +1 -2
  160. package/lib/projects/localDev/AppDevModeInterface.js +13 -9
  161. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +4 -1
  162. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +3 -3
  163. package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
  164. package/lib/projects/localDev/DevSessionManager.js +31 -19
  165. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +5 -0
  166. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +21 -10
  167. package/lib/projects/localDev/LocalDevProcess.js +6 -5
  168. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  169. package/lib/projects/localDev/LocalDevState.js +3 -1
  170. package/lib/projects/localDev/helpers/account.d.ts +4 -3
  171. package/lib/projects/localDev/helpers/account.js +21 -30
  172. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  173. package/lib/projects/localDev/helpers/process.js +4 -10
  174. package/lib/projects/localDev/helpers/project.d.ts +4 -3
  175. package/lib/projects/localDev/helpers/project.js +31 -15
  176. package/lib/projects/pollProjectBuildAndDeploy.js +90 -85
  177. package/lib/projects/projectInfo.d.ts +5 -0
  178. package/lib/projects/projectInfo.js +82 -0
  179. package/lib/projects/projectProfiles.d.ts +1 -2
  180. package/lib/projects/projectProfiles.js +5 -17
  181. package/lib/projects/uieLinting.d.ts +17 -3
  182. package/lib/projects/uieLinting.js +93 -28
  183. package/lib/projects/upload.d.ts +1 -0
  184. package/lib/projects/upload.js +59 -49
  185. package/lib/projects/watch.d.ts +2 -1
  186. package/lib/projects/watch.js +32 -24
  187. package/lib/projects/workspaces.d.ts +52 -0
  188. package/lib/projects/workspaces.js +365 -0
  189. package/lib/prompts/createApiSamplePrompt.js +4 -0
  190. package/lib/prompts/downloadProjectPrompt.js +11 -10
  191. package/lib/prompts/installAppPrompt.js +3 -2
  192. package/lib/prompts/personalAccessKeyPrompt.js +3 -2
  193. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -0
  194. package/lib/prompts/projectDevTargetAccountPrompt.js +23 -16
  195. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  196. package/lib/prompts/projectProfilePrompt.js +46 -0
  197. package/lib/prompts/projectsLogsPrompt.js +3 -0
  198. package/lib/prompts/promptUtils.js +4 -2
  199. package/lib/prompts/selectHubDBTablePrompt.js +8 -4
  200. package/lib/prompts/selectPublicAppForMigrationPrompt.js +12 -6
  201. package/lib/sandboxes.d.ts +1 -9
  202. package/lib/sandboxes.js +0 -21
  203. package/lib/serverlessLogs.js +50 -44
  204. package/lib/theme/cmsDevServerProcess.d.ts +14 -0
  205. package/lib/theme/cmsDevServerProcess.js +149 -0
  206. package/lib/theme/cmsDevServerRunner.d.ts +14 -0
  207. package/lib/theme/cmsDevServerRunner.js +90 -0
  208. package/lib/theme/migrate.d.ts +1 -1
  209. package/lib/theme/migrate.js +1 -5
  210. package/lib/ui/SpinniesManager.d.ts +1 -0
  211. package/lib/ui/SpinniesManager.js +22 -6
  212. package/lib/ui/accountTable.d.ts +8 -0
  213. package/lib/ui/accountTable.js +67 -0
  214. package/lib/ui/spinniesUtils.d.ts +0 -1
  215. package/lib/ui/spinniesUtils.js +6 -16
  216. package/lib/usageTracking.d.ts +3 -4
  217. package/lib/usageTracking.js +9 -6
  218. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  219. package/lib/yargs/makeYargsBuilder.js +33 -0
  220. package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
  221. package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
  222. package/lib/yargs/parseYargsOrExit.d.ts +4 -0
  223. package/lib/yargs/parseYargsOrExit.js +25 -0
  224. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  225. package/lib/yargs/strictEnforceBoolean.js +13 -0
  226. package/lib/yargsUtils.d.ts +3 -16
  227. package/lib/yargsUtils.js +3 -48
  228. package/mcp-server/Tool.d.ts +15 -0
  229. package/mcp-server/Tool.js +53 -0
  230. package/mcp-server/server.js +43 -3
  231. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +4 -2
  232. package/mcp-server/tools/cms/HsCreateFunctionTool.js +9 -7
  233. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -2
  234. package/mcp-server/tools/cms/HsCreateModuleTool.js +9 -7
  235. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +4 -2
  236. package/mcp-server/tools/cms/HsCreateTemplateTool.js +9 -7
  237. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -2
  238. package/mcp-server/tools/cms/HsFunctionLogsTool.js +9 -7
  239. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +4 -2
  240. package/mcp-server/tools/cms/HsListFunctionsTool.js +9 -7
  241. package/mcp-server/tools/cms/HsListTool.d.ts +4 -2
  242. package/mcp-server/tools/cms/HsListTool.js +9 -7
  243. package/mcp-server/tools/index.d.ts +3 -2
  244. package/mcp-server/tools/index.js +24 -22
  245. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +25 -5
  246. package/mcp-server/tools/project/AddFeatureToProjectTool.js +16 -18
  247. package/mcp-server/tools/project/CreateProjectTool.d.ts +29 -6
  248. package/mcp-server/tools/project/CreateProjectTool.js +16 -18
  249. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +4 -2
  250. package/mcp-server/tools/project/CreateTestAccountTool.js +22 -10
  251. package/mcp-server/tools/project/DeployProjectTool.d.ts +4 -2
  252. package/mcp-server/tools/project/DeployProjectTool.js +6 -8
  253. package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
  254. package/mcp-server/tools/project/DocFetchTool.js +8 -6
  255. package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
  256. package/mcp-server/tools/project/DocsSearchTool.js +32 -9
  257. package/mcp-server/tools/project/FindProjectsTool.d.ts +15 -0
  258. package/mcp-server/tools/project/FindProjectsTool.js +60 -0
  259. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +4 -2
  260. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +13 -14
  261. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +4 -2
  262. package/mcp-server/tools/project/GetApplicationInfoTool.js +8 -6
  263. package/mcp-server/tools/project/GetBuildLogsTool.d.ts +6 -4
  264. package/mcp-server/tools/project/GetBuildLogsTool.js +15 -14
  265. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +5 -3
  266. package/mcp-server/tools/project/GetBuildStatusTool.js +12 -11
  267. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -2
  268. package/mcp-server/tools/project/GetConfigValuesTool.js +12 -7
  269. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +10 -3
  270. package/mcp-server/tools/project/GuidedWalkthroughTool.js +5 -12
  271. package/mcp-server/tools/project/UploadProjectTools.d.ts +4 -2
  272. package/mcp-server/tools/project/UploadProjectTools.js +11 -9
  273. package/mcp-server/tools/project/ValidateProjectTool.d.ts +4 -2
  274. package/mcp-server/tools/project/ValidateProjectTool.js +10 -8
  275. package/mcp-server/tools/project/constants.d.ts +13 -1
  276. package/mcp-server/tools/project/constants.js +13 -16
  277. package/mcp-server/types.d.ts +0 -7
  278. package/mcp-server/types.js +1 -13
  279. package/mcp-server/utils/command.d.ts +5 -0
  280. package/mcp-server/utils/command.js +24 -0
  281. package/mcp-server/utils/feedbackTracking.js +2 -17
  282. package/mcp-server/utils/logger.d.ts +10 -0
  283. package/mcp-server/utils/logger.js +29 -0
  284. package/mcp-server/utils/toolUsageTracking.js +0 -2
  285. package/package.json +15 -11
  286. package/types/Link.d.ts +32 -0
  287. package/types/Link.js +5 -0
  288. package/types/LocalDev.d.ts +5 -0
  289. package/types/PackageJson.d.ts +1 -0
  290. package/types/Projects.d.ts +19 -0
  291. package/types/Prompts.d.ts +1 -0
  292. package/types/Yargs.d.ts +19 -1
  293. package/ui/components/getStarted/GetStartedFlow.js +79 -2
  294. package/ui/components/getStarted/reducer.d.ts +20 -0
  295. package/ui/components/getStarted/reducer.js +36 -0
  296. package/ui/components/getStarted/screens/InstallationScreen.d.ts +7 -0
  297. package/ui/components/getStarted/screens/InstallationScreen.js +16 -0
  298. package/ui/components/getStarted/screens/ProjectSetupScreen.js +2 -1
  299. package/ui/lib/constants.d.ts +1 -0
  300. package/ui/lib/constants.js +1 -0
  301. package/api/__tests__/migrate.test.d.ts +0 -1
  302. package/api/__tests__/migrate.test.js +0 -199
  303. package/commands/__tests__/account.test.d.ts +0 -1
  304. package/commands/__tests__/account.test.js +0 -69
  305. package/commands/__tests__/auth.test.d.ts +0 -1
  306. package/commands/__tests__/auth.test.js +0 -43
  307. package/commands/__tests__/cms.test.d.ts +0 -1
  308. package/commands/__tests__/cms.test.js +0 -87
  309. package/commands/__tests__/config.test.d.ts +0 -1
  310. package/commands/__tests__/config.test.js +0 -44
  311. package/commands/__tests__/customObject.test.d.ts +0 -1
  312. package/commands/__tests__/customObject.test.js +0 -68
  313. package/commands/__tests__/doctor.test.d.ts +0 -1
  314. package/commands/__tests__/doctor.test.js +0 -132
  315. package/commands/__tests__/feedback.test.d.ts +0 -1
  316. package/commands/__tests__/feedback.test.js +0 -24
  317. package/commands/__tests__/filemanager.test.d.ts +0 -1
  318. package/commands/__tests__/filemanager.test.js +0 -45
  319. package/commands/__tests__/getStarted.test.d.ts +0 -1
  320. package/commands/__tests__/getStarted.test.js +0 -173
  321. package/commands/__tests__/hubdb.test.d.ts +0 -1
  322. package/commands/__tests__/hubdb.test.js +0 -50
  323. package/commands/__tests__/init.test.d.ts +0 -1
  324. package/commands/__tests__/init.test.js +0 -42
  325. package/commands/__tests__/mcp.test.d.ts +0 -1
  326. package/commands/__tests__/mcp.test.js +0 -46
  327. package/commands/__tests__/open.test.d.ts +0 -1
  328. package/commands/__tests__/open.test.js +0 -58
  329. package/commands/__tests__/project.test.d.ts +0 -1
  330. package/commands/__tests__/project.test.js +0 -125
  331. package/commands/__tests__/sandbox.test.d.ts +0 -1
  332. package/commands/__tests__/sandbox.test.js +0 -44
  333. package/commands/__tests__/secret.test.d.ts +0 -1
  334. package/commands/__tests__/secret.test.js +0 -49
  335. package/commands/__tests__/testAccount.test.d.ts +0 -1
  336. package/commands/__tests__/testAccount.test.js +0 -57
  337. package/commands/__tests__/upgrade.test.d.ts +0 -1
  338. package/commands/__tests__/upgrade.test.js +0 -309
  339. package/commands/account/__tests__/auth.test.d.ts +0 -1
  340. package/commands/account/__tests__/auth.test.js +0 -206
  341. package/commands/account/__tests__/clean.test.d.ts +0 -1
  342. package/commands/account/__tests__/clean.test.js +0 -28
  343. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  344. package/commands/account/__tests__/createOverride.test.js +0 -32
  345. package/commands/account/__tests__/info.test.d.ts +0 -1
  346. package/commands/account/__tests__/info.test.js +0 -28
  347. package/commands/account/__tests__/list.test.d.ts +0 -1
  348. package/commands/account/__tests__/list.test.js +0 -153
  349. package/commands/account/__tests__/remove.test.d.ts +0 -1
  350. package/commands/account/__tests__/remove.test.js +0 -36
  351. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  352. package/commands/account/__tests__/removeOverride.js +0 -25
  353. package/commands/account/__tests__/rename.test.d.ts +0 -1
  354. package/commands/account/__tests__/rename.test.js +0 -82
  355. package/commands/account/__tests__/use.test.d.ts +0 -1
  356. package/commands/account/__tests__/use.test.js +0 -170
  357. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  358. package/commands/app/__tests__/migrate.test.js +0 -111
  359. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  360. package/commands/app/secret/__tests__/add.test.js +0 -140
  361. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  362. package/commands/app/secret/__tests__/delete.test.js +0 -28
  363. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  364. package/commands/app/secret/__tests__/list.test.js +0 -25
  365. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  366. package/commands/app/secret/__tests__/update.test.js +0 -28
  367. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  368. package/commands/cms/__tests__/delete.test.js +0 -39
  369. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  370. package/commands/cms/__tests__/fetch.test.js +0 -156
  371. package/commands/cms/__tests__/function.test.d.ts +0 -1
  372. package/commands/cms/__tests__/function.test.js +0 -50
  373. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  374. package/commands/cms/__tests__/lint.test.js +0 -33
  375. package/commands/cms/__tests__/list.test.d.ts +0 -1
  376. package/commands/cms/__tests__/list.test.js +0 -42
  377. package/commands/cms/__tests__/module.test.d.ts +0 -1
  378. package/commands/cms/__tests__/module.test.js +0 -45
  379. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  380. package/commands/cms/__tests__/mv.test.js +0 -46
  381. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  382. package/commands/cms/__tests__/theme.test.js +0 -54
  383. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  384. package/commands/cms/__tests__/upload.test.js +0 -308
  385. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  386. package/commands/cms/__tests__/watch.test.js +0 -212
  387. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  388. package/commands/cms/function/__tests__/logs.test.js +0 -70
  389. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  390. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  391. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  392. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  393. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  394. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  395. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  396. package/commands/customObject/__tests__/create.test.js +0 -40
  397. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  398. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  399. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  400. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  401. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  402. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  403. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  404. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  405. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  406. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  407. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  408. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  409. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  410. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  411. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  412. package/commands/filemanager/__tests__/upload.test.js +0 -191
  413. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  414. package/commands/hubdb/__tests__/clear.test.js +0 -28
  415. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  416. package/commands/hubdb/__tests__/create.test.js +0 -28
  417. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  418. package/commands/hubdb/__tests__/delete.test.js +0 -28
  419. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  420. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  421. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  422. package/commands/hubdb/__tests__/list.test.js +0 -88
  423. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  424. package/commands/mcp/__tests__/setup.test.js +0 -26
  425. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  426. package/commands/mcp/__tests__/start.test.js +0 -137
  427. package/commands/project/__tests__/add.test.d.ts +0 -1
  428. package/commands/project/__tests__/add.test.js +0 -107
  429. package/commands/project/__tests__/create.test.d.ts +0 -1
  430. package/commands/project/__tests__/create.test.js +0 -97
  431. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  432. package/commands/project/__tests__/deploy.test.js +0 -307
  433. package/commands/project/__tests__/dev.test.d.ts +0 -1
  434. package/commands/project/__tests__/dev.test.js +0 -273
  435. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  436. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  437. package/commands/project/__tests__/download.test.d.ts +0 -1
  438. package/commands/project/__tests__/download.test.js +0 -39
  439. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  440. package/commands/project/__tests__/installDeps.test.js +0 -140
  441. package/commands/project/__tests__/lint.test.d.ts +0 -1
  442. package/commands/project/__tests__/lint.test.js +0 -704
  443. package/commands/project/__tests__/list.test.d.ts +0 -1
  444. package/commands/project/__tests__/list.test.js +0 -31
  445. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  446. package/commands/project/__tests__/listBuilds.test.js +0 -38
  447. package/commands/project/__tests__/logs.test.d.ts +0 -1
  448. package/commands/project/__tests__/logs.test.js +0 -202
  449. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  450. package/commands/project/__tests__/migrate.test.js +0 -106
  451. package/commands/project/__tests__/open.test.d.ts +0 -1
  452. package/commands/project/__tests__/open.test.js +0 -39
  453. package/commands/project/__tests__/profile.test.d.ts +0 -1
  454. package/commands/project/__tests__/profile.test.js +0 -42
  455. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  456. package/commands/project/__tests__/updateDeps.test.js +0 -140
  457. package/commands/project/__tests__/upload.test.d.ts +0 -1
  458. package/commands/project/__tests__/upload.test.js +0 -234
  459. package/commands/project/__tests__/validate.test.d.ts +0 -1
  460. package/commands/project/__tests__/validate.test.js +0 -381
  461. package/commands/project/__tests__/watch.test.d.ts +0 -1
  462. package/commands/project/__tests__/watch.test.js +0 -35
  463. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  464. package/commands/sandbox/__tests__/create.test.js +0 -245
  465. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  466. package/commands/sandbox/__tests__/delete.test.js +0 -31
  467. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  468. package/commands/secret/__tests__/addSecret.test.js +0 -162
  469. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  470. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  471. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  472. package/commands/secret/__tests__/listSecret.test.js +0 -29
  473. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  474. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  475. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  476. package/commands/testAccount/__tests__/create.test.js +0 -106
  477. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  478. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  479. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  480. package/commands/testAccount/__tests__/delete.test.js +0 -29
  481. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  482. package/commands/testAccount/__tests__/importData.test.js +0 -92
  483. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  484. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  485. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  486. package/lib/__tests__/accountAuth.test.js +0 -258
  487. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  488. package/lib/__tests__/accountTypes.test.js +0 -98
  489. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  490. package/lib/__tests__/buildAccount.test.js +0 -262
  491. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  492. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  493. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  494. package/lib/__tests__/commandSuggestion.test.js +0 -119
  495. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  496. package/lib/__tests__/commonOpts.test.js +0 -80
  497. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  498. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  499. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  500. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  501. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  502. package/lib/__tests__/hasFeature.test.js +0 -167
  503. package/lib/__tests__/http.test.d.ts +0 -1
  504. package/lib/__tests__/http.test.js +0 -40
  505. package/lib/__tests__/importData.test.d.ts +0 -1
  506. package/lib/__tests__/importData.test.js +0 -98
  507. package/lib/__tests__/npmCli.test.d.ts +0 -1
  508. package/lib/__tests__/npmCli.test.js +0 -84
  509. package/lib/__tests__/oauth.test.d.ts +0 -1
  510. package/lib/__tests__/oauth.test.js +0 -109
  511. package/lib/__tests__/parsing.test.d.ts +0 -1
  512. package/lib/__tests__/parsing.test.js +0 -34
  513. package/lib/__tests__/polling.test.d.ts +0 -1
  514. package/lib/__tests__/polling.test.js +0 -76
  515. package/lib/__tests__/process.test.d.ts +0 -1
  516. package/lib/__tests__/process.test.js +0 -89
  517. package/lib/__tests__/sandboxSync.test.d.ts +0 -1
  518. package/lib/__tests__/sandboxSync.test.js +0 -147
  519. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  520. package/lib/__tests__/sandboxes.test.js +0 -156
  521. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  522. package/lib/__tests__/serverlessLogs.test.js +0 -148
  523. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  524. package/lib/__tests__/usageTracking.test.js +0 -197
  525. package/lib/__tests__/validation.test.d.ts +0 -1
  526. package/lib/__tests__/validation.test.js +0 -143
  527. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  528. package/lib/__tests__/yargsUtils.test.js +0 -124
  529. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  530. package/lib/app/__tests__/migrate.test.js +0 -638
  531. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  532. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  533. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  534. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  535. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  536. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  537. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  538. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  539. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  540. package/lib/mcp/__tests__/setup.test.js +0 -194
  541. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  542. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  543. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  544. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  545. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  546. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  547. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  548. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  549. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  550. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  551. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  552. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  553. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  554. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  555. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  556. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  557. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  558. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  559. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  560. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  561. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  562. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  563. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  564. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  565. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  566. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  567. package/lib/projects/__tests__/components.test.d.ts +0 -1
  568. package/lib/projects/__tests__/components.test.js +0 -426
  569. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  570. package/lib/projects/__tests__/deploy.test.js +0 -231
  571. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  572. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  573. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  574. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  575. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  576. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  577. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  578. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  579. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  580. package/lib/projects/__tests__/projects.test.js +0 -58
  581. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  582. package/lib/projects/__tests__/structure.test.js +0 -210
  583. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  584. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  585. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  586. package/lib/projects/__tests__/upload.test.js +0 -183
  587. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  588. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  589. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  590. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  591. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  592. package/lib/projects/create/__tests__/legacy.test.js +0 -90
  593. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  594. package/lib/projects/create/__tests__/v2.test.js +0 -257
  595. package/lib/projects/platformVersion.d.ts +0 -9
  596. package/lib/projects/platformVersion.js +0 -39
  597. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  598. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  599. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  600. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  601. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  602. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  603. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  604. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  605. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  606. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  607. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  608. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  609. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  610. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  611. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  612. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  613. package/lib/sandboxSync.d.ts +0 -4
  614. package/lib/sandboxSync.js +0 -102
  615. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  616. package/lib/theme/__tests__/migrate.test.js +0 -256
  617. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  618. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  619. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  620. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  621. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  622. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -255
  623. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  624. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -228
  625. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  626. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -209
  627. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  628. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -187
  629. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  630. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -125
  631. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  632. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -125
  633. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  634. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -158
  635. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  636. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -133
  637. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  638. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -462
  639. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  640. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -126
  641. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  642. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  643. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  644. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  645. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  646. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -178
  647. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  648. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  649. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  650. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  651. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  652. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  653. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  654. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  655. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  656. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  657. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  658. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -179
  659. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  660. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  661. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  662. package/mcp-server/utils/__tests__/command.test.js +0 -45
  663. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  664. package/mcp-server/utils/__tests__/content.test.js +0 -164
  665. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  666. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -124
  667. package/mcp-server/utils/__tests__/project.test.d.ts +0 -1
  668. package/mcp-server/utils/__tests__/project.test.js +0 -140
  669. package/mcp-server/utils/project.d.ts +0 -5
  670. package/mcp-server/utils/project.js +0 -18
package/lang/en.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import chalk from 'chalk';
2
2
  import { mapToUserFriendlyName } from '@hubspot/project-parsing-lib/transform';
3
- import { PLATFORM_VERSIONS } from '@hubspot/local-dev-lib/constants/projects';
3
+ import { PLATFORM_VERSIONS } from '@hubspot/project-parsing-lib/constants';
4
4
  import { PERSONAL_ACCESS_KEY_AUTH_METHOD } from '@hubspot/local-dev-lib/constants/auth';
5
- import { ARCHIVED_HUBSPOT_CONFIG_YAML_FILE_NAME, GLOBAL_CONFIG_PATH, DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME, } from '@hubspot/local-dev-lib/constants/config';
6
- import { uiAccountDescription, uiBetaTag, uiCommandReference, uiLink, UI_COLORS, uiAuthCommandReference, } from '../lib/ui/index.js';
7
- import { getProjectDetailUrl, getProjectSettingsUrl, getLocalDevUiUrl, } from '../lib/projects/urls.js';
5
+ import { LOCAL_DEV_DEFAULT_PORT } from '../lib/constants.js';
6
+ import { ARCHIVED_HUBSPOT_CONFIG_YAML_FILE_NAME, DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME, GLOBAL_CONFIG_PATH, } from '@hubspot/local-dev-lib/constants/config';
7
+ import { indent, UI_COLORS, uiAccountDescription, uiAuthCommandReference, uiBetaTag, uiCommandReference, uiLink, } from '../lib/ui/index.js';
8
+ import { getLocalDevUiUrl, getProjectDetailUrl, getProjectSettingsUrl, } from '../lib/projects/urls.js';
8
9
  import { getProductUpdatesUrl } from '../lib/links.js';
9
- import { APP_DISTRIBUTION_TYPES, APP_AUTH_TYPES, PROJECT_CONFIG_FILE, PROJECT_WITH_APP, LEGACY_PUBLIC_APP_FILE, } from '../lib/constants.js';
10
+ import { APP_AUTH_TYPES, APP_DISTRIBUTION_TYPES, LEGACY_PUBLIC_APP_FILE, PROJECT_CONFIG_FILE, PROJECT_WITH_APP, } from '../lib/constants.js';
10
11
  export const commands = {
11
12
  generalErrors: {
12
13
  srcIsProject: (src, command) => `"${src}" is in a project folder. Did you mean "hs project ${command}"?`,
@@ -51,6 +52,11 @@ export const commands = {
51
52
  checkOutConfig: (configPath) => `Check out ${chalk.cyan(configPath)} for the full configuration.`,
52
53
  pressEnterToInstall: (accountName) => `? Press ${chalk.bold('<enter>')} to continue installing and previewing this app in ${chalk.bold(accountName)}`,
53
54
  pressKeyToExit: `Press any key to exit...`,
55
+ installingApp: (appName, accountName) => `Installing ${chalk.bold(appName)} in ${chalk.bold(accountName)}...`,
56
+ installInstructions: `We'll take you to your HubSpot account and walk you through installing your app.`,
57
+ browserFailedToOpen: (url) => `⚠️ Failed to open browser automatically. Please open this URL manually:\n${chalk.cyan(url)}`,
58
+ pollingTimeout: (minutes) => `⚠️ Installation polling timed out after ${minutes} minutes. The app may still be installing in the background.`,
59
+ pressEnterToContinueSetup: `Press ${chalk.bold('<enter>')} to continue with card setup...`,
54
60
  prompts: {
55
61
  selectOptionV2: 'Choose a component type to get started',
56
62
  options: {
@@ -132,8 +138,12 @@ export const commands = {
132
138
  },
133
139
  list: {
134
140
  accounts: `${chalk.bold('Accounts')}:`,
141
+ allAccounts: `${chalk.bold('All Accounts')}:`,
142
+ linkedAccounts: `${chalk.bold('Linked Accounts')}:`,
135
143
  defaultAccountTitle: `${chalk.bold('Default Account')}`,
144
+ linkedDefaultTitle: `${chalk.bold('Linked Default Account')}`,
136
145
  currentResolvedDefaultAccount: (accountId) => `Account: ${uiAccountDescription(accountId)}`,
146
+ directory: (dir) => `Directory: ${dir}`,
137
147
  describe: 'List names of accounts defined in config.',
138
148
  configPath: (configPath) => `Source: ${configPath}`,
139
149
  overrideFilePathTitle: `${chalk.bold('Default Account Override')}`,
@@ -180,6 +190,70 @@ export const commands = {
180
190
  success: {
181
191
  defaultAccountUpdated: (accountName) => `Default account updated to "${accountName}"`,
182
192
  },
193
+ linked: {
194
+ editingLinkedDefault: (dir) => `Editing the default linked account for this directory (not the global default):\n${indent(1)}${dir}`,
195
+ alreadyDefault: (accountId) => `${uiAccountDescription(accountId)} is the only linked account and is already the default.`,
196
+ setLinkedDefault: (account) => `Linked default set to ${chalk.cyan(account)}`,
197
+ accountNotLinked: (account) => `${account} is not linked to this directory.`,
198
+ promptToLink: (account) => `Would you like to link ${account} to this directory?`,
199
+ settingGlobalDefault: 'Setting global default instead.',
200
+ nonInteractiveNotLinked: (account) => `${account} is not linked to this directory. Setting global default instead.`,
201
+ },
202
+ },
203
+ link: {
204
+ describe: 'Link authenticated HubSpot accounts to the current directory',
205
+ verboseDescribe: `Link one or more authenticated HubSpot accounts to the current directory. Linked accounts are saved in a local ${chalk.bold('.hs/settings.json')} file (added to .gitignore automatically).\n\nThis lets the CLI know which account to use when you run commands from this directory, without changing the global default. Run ${uiCommandReference('hs account current')} to see the active configuration.`,
206
+ shared: {
207
+ noLinkedAccounts: 'No HubSpot accounts are linked in this directory.',
208
+ globalAccountsAvailable: (count) => `You have ${chalk.cyan(count.toString())} ${count === 1 ? 'account' : 'accounts'} in your global config.`,
209
+ configurePrompt: `To configure this directory, run:\n${indent(1)}${uiCommandReference('hs account link')}`,
210
+ deprecatedConfigNotSupported: (command) => `${uiCommandReference(command)} does not support deprecated config. Run ${uiCommandReference('hs config migrate')} to migrate to global config. Then re-run ${uiCommandReference(command)}`,
211
+ writeSettingsFailed: (path, err) => `Failed to write to ${path}: ${err}`,
212
+ savedToSettings: (path) => `Saved to ${path}`,
213
+ usingLinkedAccounts: (settingsPath) => `This directory has linked accounts via ${settingsPath}. Only linked accounts will be available for this command. To manage linked accounts, run ${uiCommandReference('hs account link')}.`,
214
+ accountAutoLinked: (accountId) => `Automatically linked ${uiAccountDescription(accountId)} to this directory.`,
215
+ accountAutoLinkFailed: (accountId) => `Could not automatically link ${uiAccountDescription(accountId)} to this directory. Run ${uiCommandReference('hs account link')} to link it manually.`,
216
+ },
217
+ linkingDirectory: (dir) => `Linking HubSpot account(s) for directory:\n${indent(1)}${dir}`,
218
+ managingLinkedAccounts: (dir) => `Managing linked accounts for:\n${indent(1)}${dir}`,
219
+ settingsInfo: (path) => `\u2139 Accounts linked here are saved in ${path}`,
220
+ success: {
221
+ created: (path) => `Linked to ${path} (created .hs and added to .gitignore).\n${indent(1)}Now when you work within this directory, the CLI will use the linked account(s).`,
222
+ },
223
+ errors: {
224
+ authFailed: `Authentication failed to complete`,
225
+ },
226
+ events: {
227
+ accountsLinked: (count) => `Linked ${count} account${count !== 1 ? 's' : ''}`,
228
+ accountsUnlinked: (count) => `Unlinked ${count} account${count !== 1 ? 's' : ''}`,
229
+ overrideAccountDetected: (accountId) => `\nCurrent default account (from .hsaccount):\n${indent(1)}${uiAccountDescription(accountId)}`,
230
+ defaultAccountSet: (accountId) => `Linked default account set to ${chalk.cyan(uiAccountDescription(accountId))}`,
231
+ defaultAccountRemoved: (isSelectionRequired) => `The linked default account was removed. ${isSelectionRequired ? 'A linked default account is required.\n' : ''}`,
232
+ defaultAccountRemains: (accountId) => `Linked default account remains ${chalk.cyan(uiAccountDescription(accountId))}`,
233
+ updatedLinkedAccounts: 'Updated linked accounts',
234
+ noAccountsLinked: `All accounts have been unlinked. Your global config accounts will be used.\n${indent(1)}The ${chalk.bold('.hs')} directory is no longer needed and can be safely deleted.`,
235
+ overrideFileRemoved: '.hsaccount file removed',
236
+ invalidDefaultAccount: (accountId) => `Default account ${uiAccountDescription(accountId)} is not in the linked accounts list and has been reset. Please select a new default.`,
237
+ },
238
+ prompts: {
239
+ howToProceed: 'How would you like to link an account?',
240
+ whatToDo: 'Which action would you like to perform?',
241
+ linkExisting: 'Link existing authenticated account(s)',
242
+ authenticateNew: 'Authenticate and link a new account',
243
+ cancel: 'Cancel',
244
+ selectDefault: 'Select a linked default account',
245
+ selectToLink: 'Select authenticated account(s) to link:',
246
+ selectToUnlink: 'Select account(s) to unlink',
247
+ alreadyLinked: '- Already linked',
248
+ fromHsAccount: '(from .hsaccount)',
249
+ newlyAuthenticated: '(just authenticated)',
250
+ mustSelectOne: 'You must select at least one account to link',
251
+ keepAsDefault: 'Keep this as the default?',
252
+ },
253
+ },
254
+ unlink: {
255
+ describe: 'Unlink HubSpot account(s) from the current directory',
256
+ verboseDescribe: `Remove one or more linked accounts from this directory's ${chalk.bold('.hs/settings.json')}. If the default account is removed, you will be prompted to select a new one.\n\nThis does not delete the account from the global config - it only removes the local association.`,
183
257
  },
184
258
  remove: {
185
259
  describe: 'Remove an account from the config.',
@@ -248,6 +322,9 @@ export const commands = {
248
322
  },
249
323
  name: (name) => `${chalk.bold('Account name')}: ${name}`,
250
324
  scopeGroups: `${chalk.bold('Scopes available')}:`,
325
+ linkedDefaultTitle: `${chalk.bold('Linked Default Account')}`,
326
+ settingsPath: (path) => `Source: ${path}`,
327
+ linkedDefault: (account) => `Account: ${account}`,
251
328
  },
252
329
  clean: {
253
330
  describe: 'Check for inactive accounts and removes them from the CLI config.',
@@ -604,11 +681,6 @@ export const commands = {
604
681
  src: 'Path to the local directory your files are in, relative to your current working directory',
605
682
  dest: 'Path in HubSpot Design Tools. Can be a net new path',
606
683
  },
607
- warnings: {
608
- disableInitial: `Passing the "${chalk.bold('--disable-initial')}" option is no longer necessary. Running "${uiCommandReference('hs watch')}" no longer uploads the watched directory by default.`,
609
- initialUpload: `To upload the directory run "${uiCommandReference('hs upload')}" beforehand or add the "${chalk.bold('--initial-upload')}" option when running "${uiCommandReference('hs watch')}".`,
610
- notUploaded: (path) => `The "${uiCommandReference('hs watch')}" command no longer uploads the watched directory when started. The directory "${path}" was not uploaded.`,
611
- },
612
684
  },
613
685
  fetch: {
614
686
  describe: 'Fetch a file, directory or module from HubSpot and write to a path on your computer.',
@@ -1266,7 +1338,6 @@ export const commands = {
1266
1338
  },
1267
1339
  success: (derivedTargets) => `You can now use the HubSpot CLI MCP Server in ${derivedTargets.join(', ')}. ${chalk.bold('You may need to restart these tools to apply the changes')}.`,
1268
1340
  errors: {
1269
- needsMcpAccess: (accountId) => `You must opt in to the developer MCP beta to use this feature on ${uiAccountDescription(accountId)}. Try again with a different account or ${uiLink('join the beta now', getProductUpdatesUrl('239890', accountId))}`,
1270
1341
  errorParsingJsonFIle: (filename, errorMessage) => `Unable to update ${chalk.bold(filename)} due to invalid JSON: ${errorMessage}`,
1271
1342
  },
1272
1343
  spinners: {
@@ -1306,6 +1377,8 @@ export const commands = {
1306
1377
  prompts: {
1307
1378
  targets: '[--client] Which tools would you like to add the HubSpot CLI MCP server to?',
1308
1379
  targetsRequired: 'Must choose at least one app to configure.',
1380
+ standaloneMode: 'Do you want to run in standalone mode? (This will use npx @hubspot/cli instead of the installed hs command)',
1381
+ cliVersion: 'Specify a CLI version to pin (leave blank for latest):',
1309
1382
  },
1310
1383
  },
1311
1384
  start: {
@@ -1319,6 +1392,30 @@ export const commands = {
1319
1392
  shuttingDown: 'Shutting down MCP server...',
1320
1393
  },
1321
1394
  },
1395
+ api: {
1396
+ describe: 'Make an authenticated HTTP request to any HubSpot API endpoint that supports PAKs.',
1397
+ verboseDescribe: `Make an authenticated HTTP request to any HubSpot API that supports PAKs using your CLI authentication.\n\nThis command is intended for testing and exploration of HubSpot APIs. It uses the authentication credentials configured in the CLI to make requests on your behalf.\n\nThe endpoint should be the API path, e.g. ${chalk.bold('/crm/v3/objects/contacts')}. The request will be authenticated using the account specified by ${uiCommandReference('--account')} or the default account.\n\nNote: The available endpoints depend on the scopes granted to your personal access key. If you receive a 403 error, check that your key includes the required scopes for the endpoint you are trying to reach. ${uiLink('Learn more about the HubSpot API', 'https://developers.hubspot.com/docs/api-reference/latest/overview')}`,
1398
+ positionals: {
1399
+ endpoint: {
1400
+ describe: 'API endpoint path (e.g. /crm/v3/objects/contacts)',
1401
+ },
1402
+ },
1403
+ options: {
1404
+ method: {
1405
+ describe: 'HTTP method to use. Defaults to GET, or POST if --data is provided',
1406
+ },
1407
+ data: {
1408
+ describe: 'JSON-formatted request body for POST, PUT, and PATCH requests',
1409
+ },
1410
+ },
1411
+ requestLog: (method, url) => `${chalk.bold(method)} ${url}`,
1412
+ requestBodyLog: (body) => `Request body: ${body}`,
1413
+ responseLog: 'Response:',
1414
+ errors: {
1415
+ invalidJson: 'The value passed to --data is not valid JSON. Please provide a valid JSON string.',
1416
+ statusLine: (status, statusText) => `${chalk.red(`${status} ${statusText}`)}`,
1417
+ },
1418
+ },
1322
1419
  open: {
1323
1420
  describe: 'Open a HubSpot page in your browser.',
1324
1421
  options: {
@@ -1360,6 +1457,7 @@ export const commands = {
1360
1457
  },
1361
1458
  errors: {
1362
1459
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
1460
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1363
1461
  profileExists: (profileName) => `Profile ${chalk.bold(profileName)} already exists. Please choose a different name.`,
1364
1462
  invalidTargetAccount: 'Target account is not configured in the CLI',
1365
1463
  noAccountsConfigured: 'No accounts configured in the CLI',
@@ -1390,6 +1488,7 @@ export const commands = {
1390
1488
  },
1391
1489
  errors: {
1392
1490
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
1491
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1393
1492
  noProfileFound: (profileName) => `No profile with filename ${chalk.bold(profileName)} found in your project.`,
1394
1493
  noProfilesFound: 'No profiles found in your project.',
1395
1494
  failedToDeleteProfile: (profileName) => `Unable to delete profile ${chalk.bold(profileName)}. Please try again.`,
@@ -1423,7 +1522,7 @@ export const commands = {
1423
1522
  noRunnableComponents: `No supported components were found in this project. Run ${uiCommandReference('hs project add')} to see a list of available components and add one to your project.`,
1424
1523
  accountNotCombined: `\nLocal development of unified apps is currently only compatible with accounts that are opted into the unified apps beta. Make sure that this account is opted in or switch accounts using ${uiCommandReference('hs account use')}.`,
1425
1524
  unsupportedAccountFlagLegacy: 'The --project-account and --testing-account flags are not supported for projects with platform versions earlier than 2025.2.',
1426
- unsupportedAccountFlagV2: 'The --account flag is is not supported supported for projects with platform versions 2025.2 and newer. Use --testing-account and --project-account flags to specify accounts to use for local dev',
1525
+ unsupportedAccountFlagV2: 'The --account flag is not supported for projects with platform versions 2025.2 and newer. Use --testing-account and --project-account flags to specify accounts to use for local dev',
1427
1526
  localDevAlreadyRunning: `Another ${uiCommandReference('hs project dev')} process is already running. To proceed with local development of this project, stop the existing process and re-run ${uiCommandReference('hs project dev')}.`,
1428
1527
  },
1429
1528
  examples: {
@@ -1437,6 +1536,7 @@ export const commands = {
1437
1536
  projectAccount: 'The id of the account to upload your project to. Must be used with --testing-account. Supported on platform versions 2025.2 and newer.',
1438
1537
  testingAccount: 'The id of the account to install apps and test on. Must be used with --project-account. Supported on platform versions 2025.2 and newer.',
1439
1538
  account: 'The id of the account to upload your project to. Unsupported on platform versions 2025.2 and newer.',
1539
+ port: `The port for the local dev server. Defaults to ${LOCAL_DEV_DEFAULT_PORT}.`,
1440
1540
  },
1441
1541
  },
1442
1542
  create: {
@@ -1447,6 +1547,9 @@ export const commands = {
1447
1547
  failedToFetchProjectList: 'Failed to fetch the list of available project templates. Please try again later.',
1448
1548
  cannotNestProjects: (projectDir) => `A project already exists at ${projectDir}. Projects cannot be nested within other projects. Please choose a different destination and try again.`,
1449
1549
  },
1550
+ warnings: {
1551
+ betaPlatformVersion: (platformVersion) => `Your portal must be enrolled in the beta to use platform version ${platformVersion}. If you are not enrolled in the beta, your upload will fail. ${uiLink('Enroll in the beta', getProductUpdatesUrl('286886'))}`,
1552
+ },
1450
1553
  logs: {
1451
1554
  success: (projectName, projectDest) => `Project ${chalk.bold(projectName)} was successfully created in ${projectDest}`,
1452
1555
  },
@@ -1509,7 +1612,6 @@ export const commands = {
1509
1612
  },
1510
1613
  },
1511
1614
  header: `This command will migrate an app to the projects framework. It will walk you through the fields required to complete the migration and download the project source code into a directory of your choosing.\n${uiLink('Learn more about migrating apps to the projects framework', 'https://developers.hubspot.com/docs/platform/migrate-a-public-app-to-projects')}`,
1512
- deprecationWarning: (platformVersion) => `The ${uiCommandReference('hs project migrate-app')} command is deprecated and will be removed. Use ${uiCommandReference(`hs app migrate --platform-version=${platformVersion}`)} going forward.`,
1513
1615
  migrationStatus: {
1514
1616
  inProgress: () => `Converting app configuration to ${chalk.bold(LEGACY_PUBLIC_APP_FILE)} component definition ...`,
1515
1617
  success: () => `${chalk.bold('Your app was converted and build #1 is deployed')}`,
@@ -1614,6 +1716,7 @@ export const commands = {
1614
1716
  deploy: {
1615
1717
  describe: 'Deploy a project build.',
1616
1718
  deployBuildIdPrompt: '[--build] Deploy which build?',
1719
+ profileMessage: (profileName, accountId) => `Deploying with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
1617
1720
  debug: {
1618
1721
  deploying: (path) => `Deploying project at path: ${path}`,
1619
1722
  },
@@ -1673,6 +1776,7 @@ export const commands = {
1673
1776
  noFunctionsLinkText: 'Visit developer docs',
1674
1777
  noFunctionsInProject: `There aren't any functions in this project\n\t- Run ${uiCommandReference('hs project logs --help')} to learn more about logs\n\t- ${uiLink('Visit developer docs', 'https://developers.hubspot.com/docs/platform/serverless-functions')} to learn more about serverless functions`,
1675
1778
  noFunctionWithName: (name) => `No function with name "${name}"`,
1779
+ functionNameRequired: `A function name is required. Pass ${uiCommandReference('--function=<name>')} or run without it to select one interactively.`,
1676
1780
  functionNotDeployed: (name) => `The function with name "${name}" is not deployed`,
1677
1781
  projectLogsManagerNotInitialized: 'Function called on ProjectLogsManager before initialization',
1678
1782
  noDeployedBuild: 'This project has not been deployed yet. Deploy the project first, then try again.',
@@ -1726,6 +1830,7 @@ export const commands = {
1726
1830
  autoDeployDisabled: (deployCommand) => `Automatic deploys are disabled for this project. Run ${uiCommandReference(deployCommand)} to deploy this build.`,
1727
1831
  },
1728
1832
  errors: {
1833
+ noProjectConfig: 'No project detected. Run this command from a project directory.',
1729
1834
  projectLockedError: `Your project is locked. This may mean that another user is running the ${uiCommandReference('hs project dev')} command for this project. If this is you, unlock the project in Projects UI.`,
1730
1835
  },
1731
1836
  options: {
@@ -1852,6 +1957,7 @@ export const commands = {
1852
1957
  loading: {
1853
1958
  checking: 'Checking lint packages and configuration…',
1854
1959
  creatingConfig: 'Creating ESLint configuration files…',
1960
+ addingLintScripts: 'Adding lint scripts to package.json files…',
1855
1961
  linting: 'Linting…',
1856
1962
  },
1857
1963
  noProjectConfig: 'No project detected. Run this command from a project directory.',
@@ -1871,8 +1977,17 @@ export const commands = {
1871
1977
  },
1872
1978
  createEslintConfigPrompt: (directories) => `ESLint configuration file not found in the following ${directories.length === 1 ? 'directory' : 'directories'}:\n${directories.map(d => ` - ${d}`).join('\n')}\n\nWould you like to set up the required ESLint configuration?`,
1873
1979
  eslintConfigCreated: (configPath) => `ESLint configuration created at ${configPath}`,
1980
+ createEslintConfigRequiresV2Platform: (platformVersion) => {
1981
+ if (!platformVersion) {
1982
+ return 'Automatic ESLint configuration requires a Developer Platform project (2025.2 or later) with platformVersion set in hsproject.json. Add an eslint.config.js file manually, or set platformVersion and try again.';
1983
+ }
1984
+ return `Automatic ESLint configuration is not available for platform version ${platformVersion}. Use Developer Platform 2025.2 or later, or add eslint.config.js manually.`;
1985
+ },
1986
+ failedToFetchRemoteEslintConfig: (platformVersion) => `Could not download the ESLint config from HubSpot project components for platform version ${platformVersion}. Check your network connection and try again, or add eslint.config.js manually.`,
1874
1987
  failedToCreateEslintConfig: (configPath) => `Failed to create ESLint configuration at ${configPath}`,
1875
1988
  eslintConfigRequired: 'ESLint configuration is required to run the lint command. Run the command again to create the configuration.',
1989
+ lintScriptsAdded: (scriptNames, packageJsonPath) => `Added ${scriptNames.map(s => `"${s}"`).join(' and ')} to ${packageJsonPath}`,
1990
+ failedToAddLintScripts: (packageJsonPath) => `Failed to add lint scripts to ${packageJsonPath}`,
1876
1991
  },
1877
1992
  updateDeps: {
1878
1993
  help: {
@@ -1927,6 +2042,99 @@ export const commands = {
1927
2042
  noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
1928
2043
  },
1929
2044
  },
2045
+ info: {
2046
+ describe: 'Display information about a project, its app, and its components',
2047
+ verboseDescribe: `Display information about a project, its app, and its components\n\nShows the project's platform version, deployed build ID, auto-deploy status, app metadata, and a list of components.\n\nRun ${uiCommandReference('hs project info --json')} to output the result as JSON for scripting.`,
2048
+ project: {
2049
+ title: (name) => `Project: ${name}`,
2050
+ platformVersion: (version) => `Platform Version: ${version}`,
2051
+ id: (id) => `Project ID: ${id}`,
2052
+ deployedBuild: (buildId) => `Deployed Build: #${buildId}`,
2053
+ autoDeploy: (enabled) => `Auto-deploy: ${enabled ? 'Enabled' : 'Disabled'}`,
2054
+ },
2055
+ app: {
2056
+ title: 'App',
2057
+ name: (name) => `Name: ${name}`,
2058
+ id: (id) => `App ID: ${id}`,
2059
+ uid: (uid) => `UID: ${uid}`,
2060
+ authType: (authType) => `Auth Type: ${authType}`,
2061
+ distributionType: (distributionType) => `Distribution: ${distributionType}`,
2062
+ },
2063
+ examples: {
2064
+ default: 'Display project information',
2065
+ json: 'Output as JSON for scripting',
2066
+ },
2067
+ viewProjectLink: 'View project in HubSpot',
2068
+ componentsHeader: 'Components',
2069
+ labels: {
2070
+ type: 'Type',
2071
+ uid: 'UID',
2072
+ },
2073
+ errors: {
2074
+ noProjectConfig: `No project found in this directory.\n\nRun ${uiCommandReference('hs project create')} to start a new project, or change to a directory containing hsproject.json.`,
2075
+ projectNotFound: (projectName, accountId) => `Project "${projectName}" was not found in account ${uiAccountDescription(accountId)}. Make sure the project has been uploaded at least once.`,
2076
+ noDeployedBuild: `This project has not been deployed yet.\n\nRun ${uiCommandReference('hs project deploy')} to deploy your project.`,
2077
+ unsupportedPlatformVersion: (platformVersion) => `This command is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
2078
+ },
2079
+ },
2080
+ delete: {
2081
+ describe: 'Delete a project from the current target account',
2082
+ verboseDescribe: `Delete a project from the current target account\n\nThis will permanently delete the project, all deployed components, and any app installations associated with it. Your local project files will not be affected.`,
2083
+ warnings: {
2084
+ irreversibleTitle: 'Warning: This will permanently delete your project',
2085
+ irreversible: 'Deleting this project will also delete all deployed components and app installations. This action cannot be undone. Your local project files will not be affected.',
2086
+ },
2087
+ prompts: {
2088
+ selectProject: (accountId) => `Select a project to delete in ${uiAccountDescription(accountId)}`,
2089
+ confirmDelete: (projectName, accountId) => `[--force] Delete ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}? This cannot be undone.`,
2090
+ validation: {
2091
+ projectRequired: 'Please select a project to delete',
2092
+ },
2093
+ },
2094
+ logs: {
2095
+ deleting: (projectName) => `Deleting project ${chalk.bold(projectName)}...`,
2096
+ deleted: (projectName, accountId) => `Deleted project ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}`,
2097
+ cancelled: 'Deletion cancelled',
2098
+ componentsToDeleteUnified: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c.componentId)} (${mapToUserFriendlyName(c.componentType)})`).join('\n')}`,
2099
+ componentsToDeleteLegacy: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c)}`).join('\n')}`,
2100
+ deletingComponents: (projectName) => `Deleting deployed components from ${chalk.bold(projectName)}...`,
2101
+ componentsDeleted: (projectName) => `Deleted deployed components from ${chalk.bold(projectName)}`,
2102
+ unableToDetermineIfComponentsWereDeleted: (projectName) => `Unable to determine if components were successfully deleted from ${chalk.bold(projectName)}. Please try again.`,
2103
+ installWarning: (installCount) => `This project has ${chalk.bold(String(installCount))} active app ${installCount === 1 ? 'installation' : 'installations'} that will be deleted.`,
2104
+ installCountUnknown: 'Unable to determine the number of active app installations for this project.',
2105
+ },
2106
+ errors: {
2107
+ noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
2108
+ projectNotFound: (projectName, accountId) => `Project ${chalk.bold(projectName)} not found in ${uiAccountDescription(accountId)}`,
2109
+ deleteFailed: (projectName) => `Failed to delete project ${chalk.bold(projectName)}. Run with --debug for details or try again.`,
2110
+ cannotDelete: (projectName, reason) => `Cannot delete project ${chalk.bold(projectName)}: ${reason}`,
2111
+ noPlatformVersion: 'Unable to determine platform version for project',
2112
+ componentDeletionFailed: (projectName) => `Failed to delete deployed components from ${chalk.bold(projectName)}. The project was not deleted.`,
2113
+ },
2114
+ options: {
2115
+ project: 'name of the project to delete',
2116
+ force: 'skip confirmation prompt',
2117
+ },
2118
+ },
2119
+ installStatus: {
2120
+ describe: 'Check whether a static auth app in the current project is installed in the target account. This command must be run from within a HubSpot project directory.',
2121
+ examples: {
2122
+ default: 'Check install status for the static auth app in the current project',
2123
+ json: 'Output install status as JSON',
2124
+ },
2125
+ errors: {
2126
+ noProjectConfig: `No project config found. Run this command from within a HubSpot project directory, or use ${uiCommandReference('hs project create')} to create a new one.`,
2127
+ unsupportedPlatformVersion: (platformVersion) => `This command is only supported for projects on platform version 2025.2 or later (detected: ${platformVersion}).`,
2128
+ failedToParseProject: 'Failed to parse the project. Check your project configuration is valid and try again.',
2129
+ noAppInProject: 'No app was found in the local project. Install status is only available for projects that contain an app.',
2130
+ unsupportedAuthType: (authType) => `This command only supports static auth apps. Detected auth type: ${authType}.`,
2131
+ },
2132
+ success: {
2133
+ installed: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)}.`,
2134
+ installedWithOutdatedScopes: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)} with outdated scopes. Reinstall the app to grant the latest scopes.`,
2135
+ },
2136
+ notInstalled: (appName, accountId) => `${chalk.bold(appName)} is not installed in ${uiAccountDescription(accountId)}.`,
2137
+ },
1930
2138
  },
1931
2139
  sandbox: {
1932
2140
  describe: 'Commands for managing sandboxes.',
@@ -2222,7 +2430,7 @@ export const commands = {
2222
2430
  configPathPrompt: '[--config-path] Enter the path to the test account config: ',
2223
2431
  createTestAccountFromConfigPrompt: 'How would you like to create your test account?',
2224
2432
  createFromConfigOption: 'Create test account from config file',
2225
- createFromScratchOption: 'Create test account from scratch',
2433
+ createFromScratchOption: 'Select hub tiers manually',
2226
2434
  errors: {
2227
2435
  configFileNotFound: (configPath) => `No test account config file exists at ${configPath}. Create a test account config file with the ${uiCommandReference('hs test-account create-config')} command.`,
2228
2436
  configFileParseFailed: (configPath) => `Failed to parse test account config file at ${configPath}`,
@@ -2242,7 +2450,7 @@ export const commands = {
2242
2450
  opsLevel: 'Operations Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2243
2451
  serviceLevel: 'Service Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2244
2452
  salesLevel: 'Sales Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2245
- contentLevel: 'CMS Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2453
+ contentLevel: 'Content Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2246
2454
  commerceLevel: 'Commerce Hub tier. Options: FREE, PROFESSIONAL, ENTERPRISE',
2247
2455
  },
2248
2456
  example: (configPath) => `Create a test account from the config file at ${configPath}`,
@@ -2895,6 +3103,9 @@ export const commands = {
2895
3103
  },
2896
3104
  };
2897
3105
  export const lib = {
3106
+ linkedDirectory: {
3107
+ warning: (action, settingsPath) => `This directory has linked accounts via ${settingsPath}. ${uiCommandReference(action)} modifies your global config, not the linked directory settings. Use ${uiCommandReference('hs account link')} to manage linked accounts.\n`,
3108
+ },
2898
3109
  parsing: {
2899
3110
  unableToParseStringToNumber: 'Unable to parse string to number',
2900
3111
  },
@@ -3076,7 +3287,7 @@ export const lib = {
3076
3287
  updateSucceeded: (latestVersion) => `Successfully updated HubSpot CLI to version ${chalk.bold(latestVersion)}`,
3077
3288
  notInstalledGlobally: 'Cannot auto-update the HubSpot CLI because NPM is not installed globally',
3078
3289
  updateFailed: (latestVersion) => `Failed to update HubSpot CLI to version ${chalk.bold(latestVersion)}`,
3079
- enableAutoUpdatesMessage: `The HubSpot CLI can automatically keep itself up to date.\n\nThis helps ensure compatibility with the HubSpot platform. You can change this later at any time.\n\nRun${uiCommandReference('hs config set --allow-auto-updates=true')}`,
3290
+ enableAutoUpdatesMessage: `The HubSpot CLI can automatically keep itself up to date.\n\nThis helps ensure compatibility with the HubSpot platform. You can change this later at any time.\n\nRun ${uiCommandReference('hs config set --allow-auto-updates=true')}`,
3080
3291
  },
3081
3292
  },
3082
3293
  projectProfiles: {
@@ -3085,11 +3296,6 @@ export const lib = {
3085
3296
  profileTargetAccount: (accountId) => `Targeting ${uiAccountDescription(accountId)}`,
3086
3297
  profileVariables: 'Profile variables',
3087
3298
  },
3088
- exitIfUsingProfiles: {
3089
- errors: {
3090
- noProfileSpecified: `This project is configured to use profiles, but no profile was specified. Target a profile using the ${uiCommandReference('--profile')} flag.`,
3091
- },
3092
- },
3093
3299
  loadProfile: {
3094
3300
  errors: {
3095
3301
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
@@ -3202,6 +3408,15 @@ export const lib = {
3202
3408
  fileFiltered: (filename) => `Ignore rule triggered for "${filename}"`,
3203
3409
  legacyFileDetected: (filename, platformVersion) => `The ${chalk.bold(filename)} file is not supported on platform version ${chalk.bold(platformVersion)} and will be ignored.`,
3204
3410
  projectDoesNotExist: (accountId) => `Upload cancelled. Run ${uiCommandReference('hs project upload')} again to create the project in ${uiAccountDescription(accountId)}.`,
3411
+ workspaceIncluded: (workspaceDir, archivePath) => `Including workspace: ${workspaceDir} → ${archivePath}`,
3412
+ fileDependencyIncluded: (packageName, localPath, archivePath) => `Including file: dependency ${packageName}: ${localPath} → ${archivePath}`,
3413
+ malformedPackageJson: (packageJsonPath, error) => `Skipping malformed package.json at ${packageJsonPath}: ${error}`,
3414
+ workspaceCollision: (archivePath, workspaceDir, existingWorkspace) => `Workspace collision: ${archivePath} from ${workspaceDir} and ${existingWorkspace}`,
3415
+ fileDependencyAlreadyIncluded: (packageName, archivePath) => `file: dependency ${packageName} already included as workspace: ${archivePath}`,
3416
+ updatingLockfile: (lockfilePath) => `Updating package-lock.json in archive: ${lockfilePath}`,
3417
+ updatingPackageJsonWorkspaces: (packageJsonPath) => `Updating package.json workspaces in archive: ${packageJsonPath}`,
3418
+ updatedWorkspaces: (workspaces) => ` Updated workspaces: ${workspaces}`,
3419
+ updatedFileDependency: (packageName, relativePath) => ` Updated dependencies.${packageName}: file:${relativePath}`,
3205
3420
  },
3206
3421
  },
3207
3422
  importData: {
@@ -3312,6 +3527,9 @@ export const lib = {
3312
3527
  pakFailure: 'Failed to generate personal access key for developer test account',
3313
3528
  },
3314
3529
  },
3530
+ usageTracking: {
3531
+ transparencyMessage: `HubSpot CLI collects anonymous usage data to improve the product. Run ${uiCommandReference('hs config set --enable-usage-tracking=false', false)} to opt out.\n`,
3532
+ },
3315
3533
  configOptions: {
3316
3534
  enableOrDisableBooleanFieldPrompt: {
3317
3535
  message: (fieldName) => `Choose to enable or disable ${fieldName}`,
@@ -3400,8 +3618,14 @@ export const lib = {
3400
3618
  promptUtils: {
3401
3619
  errors: {
3402
3620
  noSelectableChoices: 'Exiting prompt because no selectable choices are available',
3621
+ userCancelled: 'User cancelled prompt',
3403
3622
  },
3404
3623
  },
3624
+ projectProfilePrompt: {
3625
+ message: '[--profile] This project is configured to use profiles. Select a profile to use:',
3626
+ exitMessage: `This project is configured to use profiles, but no profile was specified. Try again using ${uiCommandReference('--profile')}`,
3627
+ noValidProfilesMessage: 'There are no valid profiles in this project. Ensure the accounts they are targeting are authenticated and try again.',
3628
+ },
3405
3629
  importDataFilePathPrompt: {
3406
3630
  promptContext: `To view the JSON schema for data imports, visit ${uiLink('the docs', 'https://developers.hubspot.com/docs/guides/api/crm/imports')}`,
3407
3631
  promptMessage: '[--file-path] Select the JSON file that will be used to import your data.',
@@ -3425,6 +3649,7 @@ export const lib = {
3425
3649
  developerTestAccountLimit: (limit) => `Your account reached the limit of ${limit} developer test accounts.`,
3426
3650
  confirmDefaultAccount: (accountName, accountType) => `Continue testing on ${chalk.bold(`${accountName} (${accountType})`)}? (Y/n)`,
3427
3651
  confirmUseExistingDeveloperTestAccount: (accountName) => `Continue with ${accountName}? This account isn't currently connected to the HubSpot CLI. By continuing, you'll be prompted to generate a personal access key and connect it.`,
3652
+ confirmLinkExistingDeveloperTestAccount: (accountName) => `${accountName} is not linked to this directory. Would you like to link it?`,
3428
3653
  noAccountId: 'No account ID found for the selected account. Please try again.',
3429
3654
  },
3430
3655
  projectLogsPrompt: {
@@ -3496,6 +3721,7 @@ export const lib = {
3496
3721
  invalidOauthClientSecretCopy: 'Please copy the actual OAuth2 client secret rather than the asterisks that mask it.',
3497
3722
  invalidPersonalAccessKey: 'You did not enter a valid access key. Please try again.',
3498
3723
  invalidPersonalAccessKeyCopy: 'Please copy the actual access key rather than the bullets that mask it.',
3724
+ authCancelled: 'Authentication cancelled.',
3499
3725
  },
3500
3726
  },
3501
3727
  createTemplatePrompt: {
@@ -3847,9 +4073,9 @@ export const lib = {
3847
4073
  validJson: 'JSON files valid',
3848
4074
  },
3849
4075
  port: {
3850
- inUse: (port) => `Port ${port} is in use`,
3851
- inUseSecondary: `Make sure it is available before running ${uiCommandReference('hs project dev')}`,
3852
- available: (port) => `Port ${port} available for local development`,
4076
+ inUse: (port) => `Default port ${port} is in use`,
4077
+ inUseSecondary: `Make sure it is available before running ${uiCommandReference('hs project dev')}, or use ${uiCommandReference('--port')} to specify a different port`,
4078
+ available: (port) => `Default port ${port} available for local development`,
3853
4079
  },
3854
4080
  projectValidation: {
3855
4081
  valid: 'Project configuration and structure is valid',
@@ -3938,11 +4164,12 @@ export const lib = {
3938
4164
  fileInvalidJson: (path) => `The file "${path}" contains invalid JSON`,
3939
4165
  },
3940
4166
  migrate: {
3941
- componentsToBeMigrated: (components) => `The following features will be migrated: ${components}`,
4167
+ componentsToBeMigrated: (components) => `${chalk.bold('The following features will be migrated:')} ${components}`,
3942
4168
  componentsThatWillNotBeMigrated: (components) => `[NOTE] These features are not yet supported for migration but will be available later: ${components}`,
4169
+ legacyCrmCardMigrationDocs: () => `For more information on migrating legacy-crm-card components, follow ${uiLink('these docs', 'https://developers.hubspot.com/docs/apps/developer-platform/build-apps/migrate-an-app/migrate-legacy-crm-cards-to-app-cards')}`,
3943
4170
  sourceContentsMoved: (newLocation) => `The contents of your old source directory have been moved to ${newLocation}, move any required files to the new source directory.`,
3944
- projectMigrationWarningTitle: 'Important: Migrating to platformVersion 2025.2 is irreversible',
3945
- projectMigrationWarning: uiBetaTag(`Running the ${uiCommandReference('hs project migrate')} command will permanently upgrade your project to platformVersion 2025.2. This action cannot be undone. To ensure you have access to your original files, they will be copied to a new directory (archive) for safekeeping.\n\nThis command will guide you through the process, prompting you to enter the required fields and will download the new project source code into your project source directory.`, false),
4171
+ projectMigrationWarningTitle: (platformVersion) => `Important: Migrating to platformVersion ${platformVersion} is irreversible`,
4172
+ projectMigrationWarning: (platformVersion) => uiBetaTag(`Running the ${uiCommandReference('hs project migrate')} command will permanently upgrade your project to platformVersion ${platformVersion}. This action cannot be undone. To ensure you have access to your original files, they will be copied to a new directory (archive) for safekeeping.\n\nThis command will guide you through the process, prompting you to enter the required fields and will download the new project source code into your project source directory.`, false),
3946
4173
  exitWithoutMigrating: 'Exiting without migrating',
3947
4174
  success: {
3948
4175
  downloadedProject: (projectName, projectDest) => `Saved ${projectName} to ${projectDest}`,
@@ -3954,7 +4181,7 @@ export const lib = {
3954
4181
  doesNotExist: (account) => `Project does not exist in ${uiAccountDescription(account)}. Migrations are only supported for existing projects.`,
3955
4182
  themesAlreadyMigrated: 'This project has already been migrated to the latest platform version.',
3956
4183
  noProjectForThemesMigration: 'Theme migrations are only supported for projects. Please try again from a project directory.',
3957
- themesAndAppsNotAllowed: 'Support for migrating projects containing both themes and apps to the latest platform version is coming soon. Try again later.',
4184
+ themesAndAppsNotAllowed: 'Projects containing both themes and apps cannot be migrated together. To migrate, split the project into separate theme-only and app-only projects, then run migrate on each individually.',
3958
4185
  multipleApps: 'Multiple apps found in project, this is not allowed in 2025.2',
3959
4186
  alreadyExists: (projectName) => `A project with name ${projectName} already exists. Please choose another name.`,
3960
4187
  failedToMigrateThemes: 'Failed to migrate project themes. Please verify that your themes are properly formatted before trying again.',
@@ -3999,4 +4226,14 @@ export const lib = {
3999
4226
  copyingProjectFilesFailed: 'Unable to copy migrated project files',
4000
4227
  },
4001
4228
  },
4229
+ theme: {
4230
+ cmsDevServerProcess: {
4231
+ installStarted: (targetVersion) => `Installing cms-dev-server ${targetVersion}...`,
4232
+ installSucceeded: 'cms-dev-server setup complete',
4233
+ installFailed: 'Failed to install cms-dev-server',
4234
+ serverStartError: (error) => `Failed to start dev server: ${error}`,
4235
+ serverExit: (code) => `Dev server exited with code ${code}`,
4236
+ serverKill: (signal) => `Dev server killed with signal ${signal}`,
4237
+ },
4238
+ },
4002
4239
  };
@@ -3,6 +3,7 @@ import { getAccessToken, updateConfigWithAccessToken, } from '@hubspot/local-dev
3
3
  import { toKebabCase } from '@hubspot/local-dev-lib/text';
4
4
  import { handleMerge, handleMigration } from './configMigrate.js';
5
5
  import { debugError, logError } from './errorHandlers/index.js';
6
+ import { isPromptExitError } from './errors/PromptExitError.js';
6
7
  import { personalAccessKeyPrompt } from './prompts/personalAccessKeyPrompt.js';
7
8
  import { cliAccountNamePrompt } from './prompts/accountNamePrompt.js';
8
9
  import { setAsDefaultAccountPrompt } from './prompts/setAsDefaultAccountPrompt.js';
@@ -36,6 +37,9 @@ async function updateConfigWithNewAccount(env, configAlreadyExists, providedPers
36
37
  return updatedConfig;
37
38
  }
38
39
  catch (e) {
40
+ if (isPromptExitError(e)) {
41
+ throw e;
42
+ }
39
43
  debugError(e);
40
44
  return null;
41
45
  }
@@ -5,6 +5,7 @@ import chalk from 'chalk';
5
5
  import { validateUid } from '@hubspot/project-parsing-lib/uid';
6
6
  import { UNMIGRATABLE_REASONS } from '@hubspot/local-dev-lib/constants/projects';
7
7
  import { mapToUserFacingType } from '@hubspot/project-parsing-lib/transform';
8
+ import { AUTO_GENERATED_COMPONENT_TYPES } from '@hubspot/project-parsing-lib/constants';
8
9
  import { MIGRATION_STATUS } from '@hubspot/local-dev-lib/types/Migration';
9
10
  import { downloadProject, fetchProjectComponentsMetadata, } from '@hubspot/local-dev-lib/api/projects';
10
11
  import { Separator } from '@inquirer/prompts';
@@ -123,12 +124,21 @@ export async function selectAppToMigrate(allApps, derivedAccountId, appId) {
123
124
  const selectedApp = allApps.find(app => app.appId === appIdToMigrate);
124
125
  const migratableComponents = new Set();
125
126
  const unmigratableComponents = new Set();
127
+ let hasLegacyCrmCards = false;
126
128
  selectedApp?.migrationComponents.forEach(component => {
127
- if (component.isSupported) {
128
- migratableComponents.add(mapToUserFacingType(component.componentType));
129
+ const userFacingComponentType = mapToUserFacingType(component.componentType);
130
+ if (component.componentType === 'LEGACY_CRM_CARD' &&
131
+ !component.isSupported) {
132
+ hasLegacyCrmCards = true;
129
133
  }
130
- else {
131
- unmigratableComponents.add(mapToUserFacingType(component.componentType));
134
+ const shouldDisplayComponent = !AUTO_GENERATED_COMPONENT_TYPES.includes(userFacingComponentType);
135
+ if (shouldDisplayComponent) {
136
+ if (component.isSupported) {
137
+ migratableComponents.add(userFacingComponentType);
138
+ }
139
+ else {
140
+ unmigratableComponents.add(userFacingComponentType);
141
+ }
132
142
  }
133
143
  });
134
144
  if (migratableComponents.size !== 0) {
@@ -137,6 +147,9 @@ export async function selectAppToMigrate(allApps, derivedAccountId, appId) {
137
147
  if (unmigratableComponents.size !== 0) {
138
148
  uiLogger.log(lib.migrate.componentsThatWillNotBeMigrated(`\n - ${[...unmigratableComponents].join('\n - ')}`));
139
149
  }
150
+ if (hasLegacyCrmCards) {
151
+ uiLogger.info(lib.migrate.legacyCrmCardMigrationDocs());
152
+ }
140
153
  uiLogger.log('');
141
154
  const proceed = await confirmPrompt(lib.migrate.prompt.proceed, {
142
155
  defaultAnswer: false,
@@ -255,7 +268,7 @@ export async function pollMigrationStatus(derivedAccountId, migrationId, success
255
268
  return poll(() => checkMigrationStatusV2(derivedAccountId, migrationId), {
256
269
  successStates: [...successStates],
257
270
  errorStates: [...DEFAULT_POLLING_STATUS_LOOKUP.errorStates],
258
- });
271
+ }, 300_000);
259
272
  }
260
273
  export async function finalizeAppMigration(derivedAccountId, migrationId, uidMap, projectName) {
261
274
  let pollResponse;