@hubspot/cli 8.2.0 → 8.2.1-experimental.1

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 (768) hide show
  1. package/api/migrate.js +8 -4
  2. package/api/releases.d.ts +36 -0
  3. package/api/releases.js +41 -0
  4. package/bin/cli.js +12 -6
  5. package/commands/account/auth.d.ts +3 -1
  6. package/commands/account/auth.js +25 -7
  7. package/commands/account/clean.js +7 -6
  8. package/commands/account/createOverride.js +10 -7
  9. package/commands/account/info.js +36 -17
  10. package/commands/account/link.d.ts +4 -0
  11. package/commands/account/link.js +87 -0
  12. package/commands/account/list.js +32 -76
  13. package/commands/account/remove.js +4 -3
  14. package/commands/account/removeOverride.js +11 -10
  15. package/commands/account/rename.js +5 -6
  16. package/commands/account/unlink.d.ts +4 -0
  17. package/commands/account/unlink.js +68 -0
  18. package/commands/account/use.js +75 -6
  19. package/commands/account.js +4 -0
  20. package/commands/api.d.ts +13 -0
  21. package/commands/api.js +161 -0
  22. package/commands/app/logDetails.d.ts +9 -0
  23. package/commands/app/logDetails.js +86 -0
  24. package/commands/app/logs.d.ts +13 -0
  25. package/commands/app/logs.js +126 -0
  26. package/commands/app/migrate.js +13 -13
  27. package/commands/app/secret/add.js +6 -7
  28. package/commands/app/secret/delete.js +9 -10
  29. package/commands/app/secret/list.js +6 -7
  30. package/commands/app/secret/update.js +8 -9
  31. package/commands/app.js +8 -1
  32. package/commands/auth.js +20 -16
  33. package/commands/cms/app/create.js +9 -5
  34. package/commands/cms/convertFields.js +8 -8
  35. package/commands/cms/delete.js +2 -3
  36. package/commands/cms/fetch.js +7 -7
  37. package/commands/cms/function/create.js +9 -5
  38. package/commands/cms/function/deploy.js +2 -3
  39. package/commands/cms/function/list.js +11 -7
  40. package/commands/cms/function/logs.js +17 -23
  41. package/commands/cms/function/server.js +16 -10
  42. package/commands/cms/getReactModule.js +7 -8
  43. package/commands/cms/lighthouseScore.js +25 -24
  44. package/commands/cms/lint.js +4 -5
  45. package/commands/cms/list.js +5 -6
  46. package/commands/cms/module/create.js +15 -5
  47. package/commands/cms/module/marketplace-validate.js +7 -8
  48. package/commands/cms/mv.js +2 -3
  49. package/commands/cms/template/create.js +10 -6
  50. package/commands/cms/theme/create.js +5 -5
  51. package/commands/cms/theme/generate-selectors.js +5 -4
  52. package/commands/cms/theme/marketplace-validate.js +8 -9
  53. package/commands/cms/theme/preview.js +24 -9
  54. package/commands/cms/upload.js +15 -12
  55. package/commands/cms/watch.js +5 -5
  56. package/commands/cms/webpack/create.js +5 -5
  57. package/commands/completion.js +3 -5
  58. package/commands/config/migrate.js +6 -7
  59. package/commands/config/set.js +29 -11
  60. package/commands/customObject/create.js +4 -5
  61. package/commands/customObject/createSchema.js +6 -8
  62. package/commands/customObject/deleteSchema.js +4 -5
  63. package/commands/customObject/fetchAllSchemas.js +2 -3
  64. package/commands/customObject/fetchSchema.js +2 -3
  65. package/commands/customObject/listSchemas.js +2 -3
  66. package/commands/customObject/updateSchema.js +6 -8
  67. package/commands/doctor.js +8 -8
  68. package/commands/feedback.js +6 -4
  69. package/commands/filemanager/fetch.js +5 -6
  70. package/commands/filemanager/upload.js +5 -5
  71. package/commands/getStarted.js +34 -38
  72. package/commands/hubdb/clear.js +6 -3
  73. package/commands/hubdb/create.js +4 -5
  74. package/commands/hubdb/delete.js +9 -6
  75. package/commands/hubdb/fetch.js +6 -3
  76. package/commands/hubdb/list.d.ts +1 -1
  77. package/commands/hubdb/list.js +23 -22
  78. package/commands/init.js +18 -15
  79. package/commands/mcp/setup.d.ts +2 -0
  80. package/commands/mcp/setup.js +35 -8
  81. package/commands/mcp/start.js +2 -3
  82. package/commands/open.js +4 -5
  83. package/commands/project/add.js +19 -13
  84. package/commands/project/appInstallStatus.d.ts +5 -0
  85. package/commands/project/appInstallStatus.js +139 -0
  86. package/commands/project/create.js +37 -22
  87. package/commands/project/delete.d.ts +7 -0
  88. package/commands/project/delete.js +74 -0
  89. package/commands/project/deploy.d.ts +2 -1
  90. package/commands/project/deploy.js +72 -50
  91. package/commands/project/dev/index.d.ts +3 -3
  92. package/commands/project/dev/index.js +40 -73
  93. package/commands/project/dev/unifiedFlow.js +81 -22
  94. package/commands/project/download.js +15 -12
  95. package/commands/project/info.d.ts +5 -0
  96. package/commands/project/info.js +73 -0
  97. package/commands/project/installApp.d.ts +8 -0
  98. package/commands/project/installApp.js +185 -0
  99. package/commands/project/installDeps.js +17 -11
  100. package/commands/project/lint.js +57 -19
  101. package/commands/project/list.d.ts +2 -2
  102. package/commands/project/list.js +15 -14
  103. package/commands/project/listBuilds.d.ts +3 -2
  104. package/commands/project/listBuilds.js +50 -19
  105. package/commands/project/logs.js +7 -10
  106. package/commands/project/migrate.js +30 -28
  107. package/commands/project/open.js +20 -13
  108. package/commands/project/profile/add.d.ts +2 -1
  109. package/commands/project/profile/add.js +42 -13
  110. package/commands/project/profile/delete.d.ts +1 -1
  111. package/commands/project/profile/delete.js +23 -15
  112. package/commands/project/release/create.d.ts +8 -0
  113. package/commands/project/release/create.js +156 -0
  114. package/commands/project/release/info.d.ts +7 -0
  115. package/commands/project/release/info.js +148 -0
  116. package/commands/project/release/list.d.ts +7 -0
  117. package/commands/project/release/list.js +119 -0
  118. package/commands/project/release.d.ts +3 -0
  119. package/commands/project/release.js +20 -0
  120. package/commands/project/updateDeps.js +15 -11
  121. package/commands/project/upload.d.ts +7 -1
  122. package/commands/project/upload.js +159 -35
  123. package/commands/project/validate.d.ts +1 -1
  124. package/commands/project/validate.js +23 -106
  125. package/commands/project/watch.js +27 -29
  126. package/commands/project.js +17 -4
  127. package/commands/sandbox/create.js +18 -45
  128. package/commands/sandbox/delete.js +15 -17
  129. package/commands/secret/addSecret.js +6 -7
  130. package/commands/secret/deleteSecret.js +5 -6
  131. package/commands/secret/listSecret.js +2 -3
  132. package/commands/secret/updateSecret.js +4 -5
  133. package/commands/testAccount/create.d.ts +3 -2
  134. package/commands/testAccount/create.js +30 -22
  135. package/commands/testAccount/createConfig.js +7 -8
  136. package/commands/testAccount/delete.js +27 -18
  137. package/commands/testAccount/importData.d.ts +1 -1
  138. package/commands/testAccount/importData.js +6 -7
  139. package/commands/upgrade.js +11 -10
  140. package/lang/en.d.ts +573 -54
  141. package/lang/en.js +614 -79
  142. package/lib/CLIWebSocketServer.d.ts +5 -3
  143. package/lib/CLIWebSocketServer.js +31 -4
  144. package/lib/accountAuth.d.ts +3 -1
  145. package/lib/accountAuth.js +47 -17
  146. package/lib/accountTargetDiscovery.d.ts +15 -0
  147. package/lib/accountTargetDiscovery.js +175 -0
  148. package/lib/api/usageTracking.d.ts +30 -0
  149. package/lib/api/usageTracking.js +11 -0
  150. package/lib/app/install.d.ts +22 -0
  151. package/lib/app/install.js +42 -0
  152. package/lib/app/logs.d.ts +38 -0
  153. package/lib/app/logs.js +225 -0
  154. package/lib/app/migrate.js +23 -12
  155. package/lib/app/urls.d.ts +2 -0
  156. package/lib/app/urls.js +7 -1
  157. package/lib/auth/awaitPersonalAccessKeyOverWebsocket.d.ts +4 -0
  158. package/lib/auth/awaitPersonalAccessKeyOverWebsocket.js +146 -0
  159. package/lib/buildAccount.d.ts +1 -6
  160. package/lib/buildAccount.js +10 -43
  161. package/lib/cms/serverlessDevRuntime.d.ts +1 -0
  162. package/lib/cms/serverlessDevRuntime.js +72 -0
  163. package/lib/commonOpts.js +6 -2
  164. package/lib/configOptions.d.ts +10 -10
  165. package/lib/configOptions.js +10 -11
  166. package/lib/constants.d.ts +14 -3
  167. package/lib/constants.js +16 -3
  168. package/lib/dependencyManagement.js +10 -17
  169. package/lib/doctor/Diagnosis.js +5 -5
  170. package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -2
  171. package/lib/doctor/DiagnosticInfoBuilder.js +8 -8
  172. package/lib/doctor/Doctor.d.ts +1 -0
  173. package/lib/doctor/Doctor.js +40 -16
  174. package/lib/errorHandlers/index.js +4 -3
  175. package/lib/errorHandlers/suppressError.js +4 -0
  176. package/lib/errors/ProjectErrors.d.ts +0 -6
  177. package/lib/errors/ProjectErrors.js +0 -12
  178. package/lib/errors/ProjectValidationError.d.ts +2 -1
  179. package/lib/errors/ProjectValidationError.js +3 -1
  180. package/lib/errors/PromptExitError.d.ts +6 -0
  181. package/lib/errors/PromptExitError.js +11 -0
  182. package/lib/getStartedV2Actions.js +19 -22
  183. package/lib/hasFeature.js +1 -2
  184. package/lib/importData.js +3 -4
  185. package/lib/jsonOutput.d.ts +195 -0
  186. package/lib/jsonOutput.js +171 -0
  187. package/lib/link/accountTableUtils.d.ts +10 -0
  188. package/lib/link/accountTableUtils.js +39 -0
  189. package/lib/link/index.d.ts +18 -0
  190. package/lib/link/index.js +185 -0
  191. package/lib/link/linkUtils.d.ts +5 -0
  192. package/lib/link/linkUtils.js +49 -0
  193. package/lib/link/prompts.d.ts +7 -0
  194. package/lib/link/prompts.js +126 -0
  195. package/lib/link/renderLinkedAccountsTable.d.ts +2 -0
  196. package/lib/link/renderLinkedAccountsTable.js +14 -0
  197. package/lib/link/warnIfLinkedDirectory.d.ts +1 -0
  198. package/lib/link/warnIfLinkedDirectory.js +9 -0
  199. package/lib/links.js +6 -5
  200. package/lib/mcp/clients.d.ts +13 -0
  201. package/lib/mcp/clients.js +62 -0
  202. package/lib/mcp/promotion.d.ts +3 -0
  203. package/lib/mcp/promotion.js +109 -0
  204. package/lib/mcp/setup.d.ts +8 -2
  205. package/lib/mcp/setup.js +123 -38
  206. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  207. package/lib/middleware/commandTargetingUtils.js +1 -0
  208. package/lib/npm/npmCli.d.ts +1 -0
  209. package/lib/npm/npmCli.js +13 -0
  210. package/lib/npm/packageJson.js +1 -1
  211. package/lib/process.d.ts +1 -1
  212. package/lib/process.js +10 -3
  213. package/lib/projects/ProjectLogsManager.js +7 -7
  214. package/lib/projects/builds.d.ts +2 -0
  215. package/lib/projects/builds.js +22 -0
  216. package/lib/projects/components.js +15 -4
  217. package/lib/projects/config.d.ts +6 -5
  218. package/lib/projects/config.js +7 -38
  219. package/lib/projects/create/index.js +2 -2
  220. package/lib/projects/create/legacy.js +2 -2
  221. package/lib/projects/create/v2.js +5 -5
  222. package/lib/projects/delete.d.ts +13 -0
  223. package/lib/projects/delete.js +193 -0
  224. package/lib/projects/deploy.d.ts +1 -1
  225. package/lib/projects/deploy.js +2 -2
  226. package/lib/projects/installApp.d.ts +58 -0
  227. package/lib/projects/installApp.js +283 -0
  228. package/lib/projects/localDev/AppDevModeInterface.d.ts +0 -3
  229. package/lib/projects/localDev/AppDevModeInterface.js +35 -53
  230. package/lib/projects/localDev/DevSessionManager.d.ts +8 -5
  231. package/lib/projects/localDev/DevSessionManager.js +35 -49
  232. package/lib/projects/localDev/LocalDevLogger.d.ts +4 -0
  233. package/lib/projects/localDev/LocalDevLogger.js +18 -0
  234. package/lib/projects/localDev/LocalDevProcess.d.ts +11 -1
  235. package/lib/projects/localDev/LocalDevProcess.js +104 -19
  236. package/lib/projects/localDev/LocalDevState.d.ts +9 -2
  237. package/lib/projects/localDev/LocalDevState.js +21 -1
  238. package/lib/projects/localDev/LocalDevWatcher.js +1 -1
  239. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +1 -0
  240. package/lib/projects/localDev/LocalDevWebsocketServer.js +24 -2
  241. package/lib/projects/localDev/UIExtensionsDevModeInterface.js +2 -0
  242. package/lib/projects/localDev/helpers/account.d.ts +1 -7
  243. package/lib/projects/localDev/helpers/account.js +12 -100
  244. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  245. package/lib/projects/localDev/helpers/process.js +4 -10
  246. package/lib/projects/localDev/helpers/project.d.ts +8 -6
  247. package/lib/projects/localDev/helpers/project.js +80 -29
  248. package/lib/projects/localDev/localDevWebsocketServerUtils.d.ts +2 -1
  249. package/lib/projects/localDev/localDevWebsocketServerUtils.js +3 -0
  250. package/lib/projects/npmAuditOnUpload.d.ts +10 -0
  251. package/lib/projects/npmAuditOnUpload.js +73 -0
  252. package/lib/projects/pollProjectBuildAndDeploy.d.ts +5 -1
  253. package/lib/projects/pollProjectBuildAndDeploy.js +3 -2
  254. package/lib/projects/preview.d.ts +7 -0
  255. package/lib/projects/preview.js +48 -0
  256. package/lib/projects/projectInfo.d.ts +5 -0
  257. package/lib/projects/projectInfo.js +82 -0
  258. package/lib/projects/projectProfiles.d.ts +2 -3
  259. package/lib/projects/projectProfiles.js +5 -20
  260. package/lib/projects/release.d.ts +4 -0
  261. package/lib/projects/release.js +90 -0
  262. package/lib/projects/ui.d.ts +1 -0
  263. package/lib/projects/ui.js +14 -0
  264. package/lib/projects/uieLinting.d.ts +21 -3
  265. package/lib/projects/uieLinting.js +129 -28
  266. package/lib/projects/upload.d.ts +12 -2
  267. package/lib/projects/upload.js +59 -13
  268. package/lib/projects/urls.d.ts +0 -1
  269. package/lib/projects/urls.js +6 -13
  270. package/lib/projects/validate.d.ts +9 -0
  271. package/lib/projects/validate.js +96 -0
  272. package/lib/projects/validateLintConfigOnUpload.d.ts +9 -0
  273. package/lib/projects/validateLintConfigOnUpload.js +45 -0
  274. package/lib/projects/workspaces.d.ts +60 -0
  275. package/lib/projects/workspaces.js +411 -0
  276. package/lib/prompts/createApiSamplePrompt.js +4 -0
  277. package/lib/prompts/downloadProjectPrompt.js +11 -10
  278. package/lib/prompts/installAppPrompt.js +3 -2
  279. package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -5
  280. package/lib/prompts/personalAccessKeyPrompt.js +10 -7
  281. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -0
  282. package/lib/prompts/projectDevTargetAccountPrompt.js +26 -18
  283. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  284. package/lib/prompts/projectProfilePrompt.js +46 -0
  285. package/lib/prompts/projectsLogsPrompt.js +3 -0
  286. package/lib/prompts/promptUtils.js +4 -2
  287. package/lib/prompts/selectAppPrompt.js +1 -0
  288. package/lib/prompts/selectHubDBTablePrompt.js +8 -4
  289. package/lib/prompts/selectPublicAppForMigrationPrompt.js +12 -6
  290. package/lib/prompts/setAsDefaultAccountPrompt.js +2 -1
  291. package/lib/sandboxes.d.ts +1 -9
  292. package/lib/sandboxes.js +0 -21
  293. package/lib/serverlessLogs.js +2 -2
  294. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  295. package/lib/theme/cmsDevServerProcess.js +8 -7
  296. package/lib/theme/migrate.d.ts +1 -1
  297. package/lib/theme/migrate.js +2 -9
  298. package/lib/ui/SpinniesManager.d.ts +1 -0
  299. package/lib/ui/SpinniesManager.js +22 -6
  300. package/lib/ui/accountTable.d.ts +8 -0
  301. package/lib/ui/accountTable.js +67 -0
  302. package/lib/ui/appLogs.d.ts +32 -0
  303. package/lib/ui/appLogs.js +175 -0
  304. package/lib/ui/spinniesUtils.d.ts +0 -1
  305. package/lib/ui/spinniesUtils.js +6 -16
  306. package/lib/usageTracking.d.ts +10 -20
  307. package/lib/usageTracking.js +77 -30
  308. package/lib/yargs/makeWrappedYargsHandler.d.ts +7 -0
  309. package/lib/yargs/makeWrappedYargsHandler.js +179 -0
  310. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  311. package/lib/yargs/makeYargsBuilder.js +33 -0
  312. package/lib/yargs/parseYargsOrExit.d.ts +4 -0
  313. package/lib/yargs/parseYargsOrExit.js +25 -0
  314. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  315. package/lib/yargs/strictEnforceBoolean.js +13 -0
  316. package/lib/yargsUtils.d.ts +3 -16
  317. package/lib/yargsUtils.js +3 -48
  318. package/mcp-server/Tool.d.ts +20 -0
  319. package/mcp-server/Tool.js +79 -0
  320. package/mcp-server/server.js +47 -3
  321. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +5 -3
  322. package/mcp-server/tools/cms/HsCreateFunctionTool.js +18 -23
  323. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +5 -3
  324. package/mcp-server/tools/cms/HsCreateModuleTool.js +21 -26
  325. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +5 -3
  326. package/mcp-server/tools/cms/HsCreateTemplateTool.js +16 -16
  327. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +5 -3
  328. package/mcp-server/tools/cms/HsFunctionLogsTool.js +16 -15
  329. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +5 -3
  330. package/mcp-server/tools/cms/HsListFunctionsTool.js +14 -13
  331. package/mcp-server/tools/cms/HsListTool.d.ts +5 -3
  332. package/mcp-server/tools/cms/HsListTool.js +14 -16
  333. package/mcp-server/tools/index.d.ts +3 -2
  334. package/mcp-server/tools/index.js +26 -22
  335. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +8 -4
  336. package/mcp-server/tools/project/AddFeatureToProjectTool.js +16 -15
  337. package/mcp-server/tools/project/AuthAccountTool.d.ts +18 -0
  338. package/mcp-server/tools/project/AuthAccountTool.js +78 -0
  339. package/mcp-server/tools/project/CreateProjectTool.d.ts +8 -4
  340. package/mcp-server/tools/project/CreateProjectTool.js +21 -17
  341. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +5 -3
  342. package/mcp-server/tools/project/CreateTestAccountTool.js +35 -24
  343. package/mcp-server/tools/project/DeployProjectTool.d.ts +5 -3
  344. package/mcp-server/tools/project/DeployProjectTool.js +14 -16
  345. package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
  346. package/mcp-server/tools/project/DocFetchTool.js +8 -6
  347. package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
  348. package/mcp-server/tools/project/DocsSearchTool.js +39 -15
  349. package/mcp-server/tools/project/FindProjectsTool.d.ts +15 -0
  350. package/mcp-server/tools/project/FindProjectsTool.js +60 -0
  351. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +6 -3
  352. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +16 -13
  353. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +6 -3
  354. package/mcp-server/tools/project/GetApplicationInfoTool.js +19 -14
  355. package/mcp-server/tools/project/GetBuildLogsTool.d.ts +4 -2
  356. package/mcp-server/tools/project/GetBuildLogsTool.js +19 -14
  357. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +4 -2
  358. package/mcp-server/tools/project/GetBuildStatusTool.js +19 -14
  359. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +6 -3
  360. package/mcp-server/tools/project/GetConfigValuesTool.js +20 -13
  361. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +4 -2
  362. package/mcp-server/tools/project/GuidedWalkthroughTool.js +4 -6
  363. package/mcp-server/tools/project/UploadProjectTools.d.ts +5 -3
  364. package/mcp-server/tools/project/UploadProjectTools.js +21 -20
  365. package/mcp-server/tools/project/ValidateProjectTool.d.ts +5 -3
  366. package/mcp-server/tools/project/ValidateProjectTool.js +13 -10
  367. package/mcp-server/tools/project/constants.d.ts +3 -1
  368. package/mcp-server/tools/project/constants.js +3 -1
  369. package/mcp-server/types.d.ts +0 -7
  370. package/mcp-server/types.js +1 -13
  371. package/mcp-server/utils/command.d.ts +25 -2
  372. package/mcp-server/utils/command.js +68 -16
  373. package/mcp-server/utils/config.js +6 -0
  374. package/mcp-server/utils/logger.d.ts +13 -0
  375. package/mcp-server/utils/logger.js +59 -0
  376. package/mcp-server/utils/toolUsageTracking.js +28 -11
  377. package/package.json +25 -17
  378. package/types/AccountTargets.d.ts +37 -0
  379. package/types/AccountTargets.js +12 -0
  380. package/types/Link.d.ts +32 -0
  381. package/types/Link.js +5 -0
  382. package/types/LocalDev.d.ts +15 -2
  383. package/types/PackageJson.d.ts +1 -0
  384. package/types/ProjectComponents.d.ts +2 -1
  385. package/types/Projects.d.ts +25 -5
  386. package/types/Prompts.d.ts +1 -0
  387. package/types/Yargs.d.ts +23 -2
  388. package/ui/components/ActionSection.d.ts +1 -1
  389. package/ui/components/InputField.d.ts +1 -1
  390. package/ui/components/SelectInput.d.ts +1 -1
  391. package/ui/components/StatusIcon.d.ts +1 -1
  392. package/ui/components/Table.d.ts +5 -5
  393. package/ui/components/getStarted/GetStartedFlow.d.ts +1 -1
  394. package/ui/components/getStarted/screens/InstallationScreen.d.ts +1 -1
  395. package/ui/components/getStarted/screens/ProjectSetupScreen.d.ts +1 -1
  396. package/ui/components/getStarted/screens/UploadScreen.d.ts +1 -1
  397. package/api/__tests__/migrate.test.d.ts +0 -1
  398. package/api/__tests__/migrate.test.js +0 -199
  399. package/commands/__tests__/account.test.d.ts +0 -1
  400. package/commands/__tests__/account.test.js +0 -69
  401. package/commands/__tests__/auth.test.d.ts +0 -1
  402. package/commands/__tests__/auth.test.js +0 -43
  403. package/commands/__tests__/cms.test.d.ts +0 -1
  404. package/commands/__tests__/cms.test.js +0 -87
  405. package/commands/__tests__/config.test.d.ts +0 -1
  406. package/commands/__tests__/config.test.js +0 -44
  407. package/commands/__tests__/customObject.test.d.ts +0 -1
  408. package/commands/__tests__/customObject.test.js +0 -68
  409. package/commands/__tests__/doctor.test.d.ts +0 -1
  410. package/commands/__tests__/doctor.test.js +0 -132
  411. package/commands/__tests__/feedback.test.d.ts +0 -1
  412. package/commands/__tests__/feedback.test.js +0 -24
  413. package/commands/__tests__/filemanager.test.d.ts +0 -1
  414. package/commands/__tests__/filemanager.test.js +0 -45
  415. package/commands/__tests__/getStarted.test.d.ts +0 -1
  416. package/commands/__tests__/getStarted.test.js +0 -173
  417. package/commands/__tests__/hubdb.test.d.ts +0 -1
  418. package/commands/__tests__/hubdb.test.js +0 -50
  419. package/commands/__tests__/init.test.d.ts +0 -1
  420. package/commands/__tests__/init.test.js +0 -42
  421. package/commands/__tests__/mcp.test.d.ts +0 -1
  422. package/commands/__tests__/mcp.test.js +0 -46
  423. package/commands/__tests__/open.test.d.ts +0 -1
  424. package/commands/__tests__/open.test.js +0 -58
  425. package/commands/__tests__/project.test.d.ts +0 -1
  426. package/commands/__tests__/project.test.js +0 -125
  427. package/commands/__tests__/sandbox.test.d.ts +0 -1
  428. package/commands/__tests__/sandbox.test.js +0 -44
  429. package/commands/__tests__/secret.test.d.ts +0 -1
  430. package/commands/__tests__/secret.test.js +0 -49
  431. package/commands/__tests__/testAccount.test.d.ts +0 -1
  432. package/commands/__tests__/testAccount.test.js +0 -57
  433. package/commands/__tests__/upgrade.test.d.ts +0 -1
  434. package/commands/__tests__/upgrade.test.js +0 -309
  435. package/commands/account/__tests__/auth.test.d.ts +0 -1
  436. package/commands/account/__tests__/auth.test.js +0 -206
  437. package/commands/account/__tests__/clean.test.d.ts +0 -1
  438. package/commands/account/__tests__/clean.test.js +0 -28
  439. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  440. package/commands/account/__tests__/createOverride.test.js +0 -32
  441. package/commands/account/__tests__/info.test.d.ts +0 -1
  442. package/commands/account/__tests__/info.test.js +0 -28
  443. package/commands/account/__tests__/list.test.d.ts +0 -1
  444. package/commands/account/__tests__/list.test.js +0 -153
  445. package/commands/account/__tests__/remove.test.d.ts +0 -1
  446. package/commands/account/__tests__/remove.test.js +0 -36
  447. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  448. package/commands/account/__tests__/removeOverride.js +0 -25
  449. package/commands/account/__tests__/rename.test.d.ts +0 -1
  450. package/commands/account/__tests__/rename.test.js +0 -82
  451. package/commands/account/__tests__/use.test.d.ts +0 -1
  452. package/commands/account/__tests__/use.test.js +0 -170
  453. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  454. package/commands/app/__tests__/migrate.test.js +0 -111
  455. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  456. package/commands/app/secret/__tests__/add.test.js +0 -140
  457. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  458. package/commands/app/secret/__tests__/delete.test.js +0 -28
  459. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  460. package/commands/app/secret/__tests__/list.test.js +0 -25
  461. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  462. package/commands/app/secret/__tests__/update.test.js +0 -28
  463. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  464. package/commands/cms/__tests__/delete.test.js +0 -39
  465. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  466. package/commands/cms/__tests__/fetch.test.js +0 -156
  467. package/commands/cms/__tests__/function.test.d.ts +0 -1
  468. package/commands/cms/__tests__/function.test.js +0 -50
  469. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  470. package/commands/cms/__tests__/lint.test.js +0 -33
  471. package/commands/cms/__tests__/list.test.d.ts +0 -1
  472. package/commands/cms/__tests__/list.test.js +0 -42
  473. package/commands/cms/__tests__/module.test.d.ts +0 -1
  474. package/commands/cms/__tests__/module.test.js +0 -45
  475. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  476. package/commands/cms/__tests__/mv.test.js +0 -46
  477. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  478. package/commands/cms/__tests__/theme.test.js +0 -54
  479. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  480. package/commands/cms/__tests__/upload.test.js +0 -308
  481. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  482. package/commands/cms/__tests__/watch.test.js +0 -204
  483. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  484. package/commands/cms/function/__tests__/logs.test.js +0 -70
  485. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  486. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  487. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  488. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  489. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  490. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  491. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  492. package/commands/customObject/__tests__/create.test.js +0 -40
  493. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  494. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  495. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  496. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  497. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  498. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  499. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  500. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  501. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  502. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  503. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  504. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  505. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  506. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  507. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  508. package/commands/filemanager/__tests__/upload.test.js +0 -191
  509. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  510. package/commands/hubdb/__tests__/clear.test.js +0 -28
  511. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  512. package/commands/hubdb/__tests__/create.test.js +0 -28
  513. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  514. package/commands/hubdb/__tests__/delete.test.js +0 -28
  515. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  516. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  517. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  518. package/commands/hubdb/__tests__/list.test.js +0 -88
  519. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  520. package/commands/mcp/__tests__/setup.test.js +0 -26
  521. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  522. package/commands/mcp/__tests__/start.test.js +0 -144
  523. package/commands/project/__tests__/add.test.d.ts +0 -1
  524. package/commands/project/__tests__/add.test.js +0 -107
  525. package/commands/project/__tests__/create.test.d.ts +0 -1
  526. package/commands/project/__tests__/create.test.js +0 -97
  527. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  528. package/commands/project/__tests__/deploy.test.js +0 -307
  529. package/commands/project/__tests__/dev.test.d.ts +0 -1
  530. package/commands/project/__tests__/dev.test.js +0 -273
  531. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  532. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  533. package/commands/project/__tests__/download.test.d.ts +0 -1
  534. package/commands/project/__tests__/download.test.js +0 -39
  535. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  536. package/commands/project/__tests__/installDeps.test.js +0 -140
  537. package/commands/project/__tests__/lint.test.d.ts +0 -1
  538. package/commands/project/__tests__/lint.test.js +0 -704
  539. package/commands/project/__tests__/list.test.d.ts +0 -1
  540. package/commands/project/__tests__/list.test.js +0 -31
  541. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  542. package/commands/project/__tests__/listBuilds.test.js +0 -38
  543. package/commands/project/__tests__/logs.test.d.ts +0 -1
  544. package/commands/project/__tests__/logs.test.js +0 -202
  545. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  546. package/commands/project/__tests__/migrate.test.js +0 -106
  547. package/commands/project/__tests__/open.test.d.ts +0 -1
  548. package/commands/project/__tests__/open.test.js +0 -39
  549. package/commands/project/__tests__/profile.test.d.ts +0 -1
  550. package/commands/project/__tests__/profile.test.js +0 -42
  551. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  552. package/commands/project/__tests__/updateDeps.test.js +0 -140
  553. package/commands/project/__tests__/upload.test.d.ts +0 -1
  554. package/commands/project/__tests__/upload.test.js +0 -234
  555. package/commands/project/__tests__/validate.test.d.ts +0 -1
  556. package/commands/project/__tests__/validate.test.js +0 -381
  557. package/commands/project/__tests__/watch.test.d.ts +0 -1
  558. package/commands/project/__tests__/watch.test.js +0 -35
  559. package/commands/project/dev/deprecatedFlow.d.ts +0 -11
  560. package/commands/project/dev/deprecatedFlow.js +0 -135
  561. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  562. package/commands/sandbox/__tests__/create.test.js +0 -245
  563. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  564. package/commands/sandbox/__tests__/delete.test.js +0 -31
  565. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  566. package/commands/secret/__tests__/addSecret.test.js +0 -162
  567. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  568. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  569. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  570. package/commands/secret/__tests__/listSecret.test.js +0 -29
  571. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  572. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  573. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  574. package/commands/testAccount/__tests__/create.test.js +0 -106
  575. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  576. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  577. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  578. package/commands/testAccount/__tests__/delete.test.js +0 -29
  579. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  580. package/commands/testAccount/__tests__/importData.test.js +0 -92
  581. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  582. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  583. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  584. package/lib/__tests__/accountAuth.test.js +0 -258
  585. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  586. package/lib/__tests__/accountTypes.test.js +0 -98
  587. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  588. package/lib/__tests__/buildAccount.test.js +0 -262
  589. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  590. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  591. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  592. package/lib/__tests__/commandSuggestion.test.js +0 -121
  593. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  594. package/lib/__tests__/commonOpts.test.js +0 -80
  595. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  596. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  597. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  598. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  599. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  600. package/lib/__tests__/hasFeature.test.js +0 -167
  601. package/lib/__tests__/http.test.d.ts +0 -1
  602. package/lib/__tests__/http.test.js +0 -40
  603. package/lib/__tests__/importData.test.d.ts +0 -1
  604. package/lib/__tests__/importData.test.js +0 -98
  605. package/lib/__tests__/npmCli.test.d.ts +0 -1
  606. package/lib/__tests__/npmCli.test.js +0 -84
  607. package/lib/__tests__/oauth.test.d.ts +0 -1
  608. package/lib/__tests__/oauth.test.js +0 -109
  609. package/lib/__tests__/parsing.test.d.ts +0 -1
  610. package/lib/__tests__/parsing.test.js +0 -34
  611. package/lib/__tests__/polling.test.d.ts +0 -1
  612. package/lib/__tests__/polling.test.js +0 -76
  613. package/lib/__tests__/process.test.d.ts +0 -1
  614. package/lib/__tests__/process.test.js +0 -89
  615. package/lib/__tests__/sandboxSync.test.d.ts +0 -1
  616. package/lib/__tests__/sandboxSync.test.js +0 -147
  617. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  618. package/lib/__tests__/sandboxes.test.js +0 -156
  619. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  620. package/lib/__tests__/serverlessLogs.test.js +0 -163
  621. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  622. package/lib/__tests__/usageTracking.test.js +0 -197
  623. package/lib/__tests__/validation.test.d.ts +0 -1
  624. package/lib/__tests__/validation.test.js +0 -143
  625. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  626. package/lib/__tests__/yargsUtils.test.js +0 -124
  627. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  628. package/lib/app/__tests__/migrate.test.js +0 -638
  629. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  630. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  631. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  632. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  633. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  634. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  635. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  636. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  637. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  638. package/lib/mcp/__tests__/setup.test.js +0 -523
  639. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  640. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  641. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  642. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  643. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  644. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  645. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  646. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  647. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  648. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  649. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  650. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  651. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  652. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  653. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  654. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  655. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  656. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  657. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  658. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  659. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  660. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  661. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  662. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  663. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  664. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  665. package/lib/projects/__tests__/components.test.d.ts +0 -1
  666. package/lib/projects/__tests__/components.test.js +0 -426
  667. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  668. package/lib/projects/__tests__/deploy.test.js +0 -231
  669. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  670. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  671. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  672. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  673. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  674. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  675. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  676. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  677. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  678. package/lib/projects/__tests__/projects.test.js +0 -58
  679. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  680. package/lib/projects/__tests__/structure.test.js +0 -210
  681. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  682. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  683. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  684. package/lib/projects/__tests__/upload.test.js +0 -183
  685. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  686. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  687. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  688. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  689. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  690. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  691. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  692. package/lib/projects/create/__tests__/v2.test.js +0 -257
  693. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +0 -40
  694. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +0 -128
  695. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +0 -59
  696. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +0 -383
  697. package/lib/projects/platformVersion.d.ts +0 -9
  698. package/lib/projects/platformVersion.js +0 -39
  699. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  700. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  701. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  702. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  703. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  704. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  705. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  706. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  707. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  708. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  709. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  710. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  711. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  712. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  713. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  714. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  715. package/lib/sandboxSync.d.ts +0 -4
  716. package/lib/sandboxSync.js +0 -102
  717. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  718. package/lib/theme/__tests__/migrate.test.js +0 -256
  719. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  720. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  721. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  722. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  723. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  724. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  725. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  726. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  727. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  728. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  729. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  730. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  731. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  732. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  733. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  734. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  735. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  736. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  737. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  738. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -132
  739. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  740. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  741. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  742. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  743. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  744. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  745. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  746. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  747. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  748. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  749. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  750. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  751. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  752. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  753. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  754. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  755. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  756. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  757. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  758. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  759. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  760. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  761. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  762. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  763. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  764. package/mcp-server/utils/__tests__/command.test.js +0 -275
  765. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  766. package/mcp-server/utils/__tests__/content.test.js +0 -164
  767. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  768. package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
package/lang/en.js CHANGED
@@ -1,12 +1,12 @@
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 { APP_AUTH_TYPES, APP_DISTRIBUTION_TYPES, LEGACY_PUBLIC_APP_FILE, LOCAL_DEV_DEFAULT_PORT, PROJECT_CONFIG_FILE, PROJECT_WITH_APP, } 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, uiDeprecatedTag, 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
10
  export const commands = {
11
11
  generalErrors: {
12
12
  srcIsProject: (src, command) => `"${src}" is in a project folder. Did you mean "hs project ${command}"?`,
@@ -123,6 +123,9 @@ export const commands = {
123
123
  options: {
124
124
  account: 'HubSpot account to authenticate',
125
125
  personalAccessKey: 'Enter existing personal access key',
126
+ default: 'Set the authenticated account as the default account',
127
+ name: 'Set a name for the account in the CLI config',
128
+ useDefaultName: 'Use the account name derived from the HubSpot portal name',
126
129
  },
127
130
  errors: {
128
131
  invalidAccountIdProvided: `--account must be a number.`,
@@ -137,8 +140,12 @@ export const commands = {
137
140
  },
138
141
  list: {
139
142
  accounts: `${chalk.bold('Accounts')}:`,
143
+ allAccounts: `${chalk.bold('All Accounts')}:`,
144
+ linkedAccounts: `${chalk.bold('Linked Accounts')}:`,
140
145
  defaultAccountTitle: `${chalk.bold('Default Account')}`,
146
+ linkedDefaultTitle: `${chalk.bold('Linked Default Account')}`,
141
147
  currentResolvedDefaultAccount: (accountId) => `Account: ${uiAccountDescription(accountId)}`,
148
+ directory: (dir) => `Directory: ${dir}`,
142
149
  describe: 'List names of accounts defined in config.',
143
150
  configPath: (configPath) => `Source: ${configPath}`,
144
151
  overrideFilePathTitle: `${chalk.bold('Default Account Override')}`,
@@ -185,6 +192,70 @@ export const commands = {
185
192
  success: {
186
193
  defaultAccountUpdated: (accountName) => `Default account updated to "${accountName}"`,
187
194
  },
195
+ linked: {
196
+ editingLinkedDefault: (dir) => `Editing the default linked account for this directory (not the global default):\n${indent(1)}${dir}`,
197
+ alreadyDefault: (accountId) => `${uiAccountDescription(accountId)} is the only linked account and is already the default.`,
198
+ setLinkedDefault: (account) => `Linked default set to ${chalk.cyan(account)}`,
199
+ accountNotLinked: (account) => `${account} is not linked to this directory.`,
200
+ promptToLink: (account) => `Would you like to link ${account} to this directory?`,
201
+ settingGlobalDefault: 'Setting global default instead.',
202
+ nonInteractiveNotLinked: (account) => `${account} is not linked to this directory. Setting global default instead.`,
203
+ },
204
+ },
205
+ link: {
206
+ describe: 'Link authenticated HubSpot accounts to the current directory',
207
+ 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.`,
208
+ shared: {
209
+ noLinkedAccounts: 'No HubSpot accounts are linked in this directory.',
210
+ globalAccountsAvailable: (count) => `You have ${chalk.cyan(count.toString())} ${count === 1 ? 'account' : 'accounts'} in your global config.`,
211
+ configurePrompt: `To configure this directory, run:\n${indent(1)}${uiCommandReference('hs account link')}`,
212
+ deprecatedConfigNotSupported: (command) => `${uiCommandReference(command)} does not support deprecated config. Run ${uiCommandReference('hs config migrate')} to migrate to global config. Then re-run ${uiCommandReference(command)}`,
213
+ writeSettingsFailed: (path, err) => `Failed to write to ${path}: ${err}`,
214
+ savedToSettings: (path) => `Saved to ${path}`,
215
+ 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')}.`,
216
+ accountAutoLinked: (accountId) => `Automatically linked ${uiAccountDescription(accountId)} to this directory.`,
217
+ accountAutoLinkFailed: (accountId) => `Could not automatically link ${uiAccountDescription(accountId)} to this directory. Run ${uiCommandReference('hs account link')} to link it manually.`,
218
+ },
219
+ linkingDirectory: (dir) => `Linking HubSpot account(s) for directory:\n${indent(1)}${dir}`,
220
+ managingLinkedAccounts: (dir) => `Managing linked accounts for:\n${indent(1)}${dir}`,
221
+ settingsInfo: (path) => `\u2139 Accounts linked here are saved in ${path}`,
222
+ success: {
223
+ 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).`,
224
+ },
225
+ errors: {
226
+ authFailed: `Authentication failed to complete`,
227
+ },
228
+ events: {
229
+ accountsLinked: (count) => `Linked ${count} account${count !== 1 ? 's' : ''}`,
230
+ accountsUnlinked: (count) => `Unlinked ${count} account${count !== 1 ? 's' : ''}`,
231
+ overrideAccountDetected: (accountId) => `\nCurrent default account (from .hsaccount):\n${indent(1)}${uiAccountDescription(accountId)}`,
232
+ defaultAccountSet: (accountId) => `Linked default account set to ${chalk.cyan(uiAccountDescription(accountId))}`,
233
+ defaultAccountRemoved: (isSelectionRequired) => `The linked default account was removed. ${isSelectionRequired ? 'A linked default account is required.\n' : ''}`,
234
+ defaultAccountRemains: (accountId) => `Linked default account remains ${chalk.cyan(uiAccountDescription(accountId))}`,
235
+ updatedLinkedAccounts: 'Updated linked accounts',
236
+ 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.`,
237
+ overrideFileRemoved: '.hsaccount file removed',
238
+ invalidDefaultAccount: (accountId) => `Default account ${uiAccountDescription(accountId)} is not in the linked accounts list and has been reset. Please select a new default.`,
239
+ },
240
+ prompts: {
241
+ howToProceed: 'How would you like to link an account?',
242
+ whatToDo: 'Which action would you like to perform?',
243
+ linkExisting: 'Link existing authenticated account(s)',
244
+ authenticateNew: 'Authenticate and link a new account',
245
+ cancel: 'Cancel',
246
+ selectDefault: 'Select a linked default account',
247
+ selectToLink: 'Select authenticated account(s) to link:',
248
+ selectToUnlink: 'Select account(s) to unlink',
249
+ alreadyLinked: '- Already linked',
250
+ fromHsAccount: '(from .hsaccount)',
251
+ newlyAuthenticated: '(just authenticated)',
252
+ mustSelectOne: 'You must select at least one account to link',
253
+ keepAsDefault: 'Keep this as the default?',
254
+ },
255
+ },
256
+ unlink: {
257
+ describe: 'Unlink HubSpot account(s) from the current directory',
258
+ 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.`,
188
259
  },
189
260
  remove: {
190
261
  describe: 'Remove an account from the config.',
@@ -253,6 +324,9 @@ export const commands = {
253
324
  },
254
325
  name: (name) => `${chalk.bold('Account name')}: ${name}`,
255
326
  scopeGroups: `${chalk.bold('Scopes available')}:`,
327
+ linkedDefaultTitle: `${chalk.bold('Linked Default Account')}`,
328
+ settingsPath: (path) => `Source: ${path}`,
329
+ linkedDefault: (account) => `Account: ${account}`,
256
330
  },
257
331
  clean: {
258
332
  describe: 'Check for inactive accounts and removes them from the CLI config.',
@@ -1251,22 +1325,34 @@ export const commands = {
1251
1325
  },
1252
1326
  mcp: {
1253
1327
  describe: 'Commands for managing HubSpot MCP servers.',
1328
+ promotion: {
1329
+ activeNudge: `${chalk.bold('Tip:')} Work faster with AI coding tools. Run ${uiCommandReference('hs mcp setup')} to connect HubSpot developer context to supported clients.`,
1330
+ },
1254
1331
  setup: {
1255
- describe: 'Setup the HubSpot development MCP servers.',
1332
+ describe: `Run ${uiCommandReference('hs mcp setup')} to connect the HubSpot Dev MCP and work faster with your AI coding tools.`,
1256
1333
  installingDocSearch: 'Adding the docs-search mcp server',
1257
1334
  codex: 'Codex CLI',
1258
1335
  claudeCode: 'Claude Code',
1259
1336
  cursor: 'Cursor',
1337
+ devin: 'Devin',
1260
1338
  gemini: 'Gemini CLI',
1261
- windsurf: 'Windsurf',
1339
+ opencode: 'OpenCode',
1262
1340
  vsCode: 'VSCode',
1341
+ other: 'Other (manual setup)',
1263
1342
  args: {
1264
1343
  client: 'Target apps to configure',
1344
+ standalone: 'Use npx for all of the hs commands run by the MCP server. This allows you to use the MCP server without having the CLI globally installed.',
1345
+ cliVersion: 'Pin a specific CLI version for standalone mode',
1265
1346
  docsSearch: 'Should the docs search mcp server be installed',
1266
1347
  },
1348
+ examples: {
1349
+ nonInteractive: 'Configure Claude Code without prompts',
1350
+ standalone: 'Configure Cursor in standalone mode with a pinned CLI version',
1351
+ },
1267
1352
  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
1353
  errors: {
1269
1354
  errorParsingJsonFIle: (filename, errorMessage) => `Unable to update ${chalk.bold(filename)} due to invalid JSON: ${errorMessage}`,
1355
+ cliVersionRequiresStandalone: '`--cli-version` requires `--standalone`. Pass `--standalone` to use a specific CLI version.',
1270
1356
  },
1271
1357
  spinners: {
1272
1358
  failedToConfigure: 'Failed to configure the HubSpot mcp server.',
@@ -1291,17 +1377,28 @@ export const commands = {
1291
1377
  geminiNotFound: "Gemini CLI is not installed (missing 'gemini' command). Install it and re-run hs mcp setup.",
1292
1378
  geminiInstallFailed: 'Failed to configure Gemini CLI',
1293
1379
  alreadyInstalled: 'HubSpot CLI mcp server already installed, reinstalling',
1294
- // Windsurf
1295
- configuringWindsurf: 'Configuring Windsurf...',
1296
- windsurfNotFound: 'Windsurf is not installed. Install it and re-run hs mcp setup.',
1297
- failedToConfigureWindsurf: 'Failed to configure Windsurf',
1298
- configuredWindsurf: 'Configured Windsurf',
1380
+ // Devin
1381
+ configuringDevin: 'Configuring Devin...',
1382
+ devinNotFound: 'Devin is not installed. Install it and re-run hs mcp setup.',
1383
+ failedToConfigureDevin: 'Failed to configure Devin',
1384
+ configuredDevin: 'Configured Devin',
1385
+ // OpenCode
1386
+ configuringOpenCode: 'Configuring OpenCode...',
1387
+ openCodeNotFound: "OpenCode is not installed (missing 'opencode' command). Install it and re-run hs mcp setup.",
1388
+ openCodeInstallFailed: 'Failed to configure OpenCode',
1389
+ configuredOpenCode: 'Configured OpenCode',
1299
1390
  // VS Code
1300
1391
  configuringVsCode: 'Configuring VSCode...',
1301
1392
  failedToConfigureVsCode: 'Failed to configure VSCode',
1302
1393
  configuredVsCode: 'Configured VSCode',
1303
1394
  vsCodeNotFound: "VSCode CLI is not installed (missing 'code' command). Install it and re-run hs mcp setup.",
1304
1395
  },
1396
+ otherInstructions: {
1397
+ header: 'To connect the HubSpot MCP server to another tool, add the following MCP server configuration.',
1398
+ docsNote: "Each tool handles MCP setup differently. Check your tool's documentation for how to add an MCP server using a command or JSON config.",
1399
+ commandLabel: 'Command:',
1400
+ jsonLabel: 'JSON configuration (for tools that use a config file):',
1401
+ },
1305
1402
  prompts: {
1306
1403
  targets: '[--client] Which tools would you like to add the HubSpot CLI MCP server to?',
1307
1404
  targetsRequired: 'Must choose at least one app to configure.',
@@ -1320,6 +1417,30 @@ export const commands = {
1320
1417
  shuttingDown: 'Shutting down MCP server...',
1321
1418
  },
1322
1419
  },
1420
+ api: {
1421
+ describe: 'Make an authenticated HTTP request to any HubSpot API endpoint that supports PAKs.',
1422
+ 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')}`,
1423
+ positionals: {
1424
+ endpoint: {
1425
+ describe: 'API endpoint path (e.g. /crm/v3/objects/contacts)',
1426
+ },
1427
+ },
1428
+ options: {
1429
+ method: {
1430
+ describe: 'HTTP method to use. Defaults to GET, or POST if --data is provided',
1431
+ },
1432
+ data: {
1433
+ describe: 'JSON-formatted request body for POST, PUT, and PATCH requests',
1434
+ },
1435
+ },
1436
+ requestLog: (method, url) => `${chalk.bold(method)} ${url}`,
1437
+ requestBodyLog: (body) => `Request body: ${body}`,
1438
+ responseLog: 'Response:',
1439
+ errors: {
1440
+ invalidJson: 'The value passed to --data is not valid JSON. Please provide a valid JSON string.',
1441
+ statusLine: (status, statusText) => `${chalk.red(`${status} ${statusText}`)}`,
1442
+ },
1443
+ },
1323
1444
  open: {
1324
1445
  describe: 'Open a HubSpot page in your browser.',
1325
1446
  options: {
@@ -1343,6 +1464,7 @@ export const commands = {
1343
1464
  describe: 'Add a new project profile',
1344
1465
  verboseDescribe: `Add a new project profile\n\nProfiles enable you to reference variables in your component configuration files. Use the syntax ${chalk.bold('\${VARIABLE_NAME}')} to reference profile variables in your component configuration files. Then target the profile using the ${uiCommandReference('--profile')} flag when you upload your project.`,
1345
1466
  example: 'Add a new project profile named hsprofile.qa.json',
1467
+ exampleCopyFrom: 'Add a profile and copy variables from the staging profile',
1346
1468
  logs: {
1347
1469
  copyExistingProfile: (profileName) => `Found an existing profile. We can copy the variables from ${chalk.bold(profileName)} into your new profile.`,
1348
1470
  copyExistingProfiles: 'We can copy the variables from one of your existing profiles into your new profile.',
@@ -1360,11 +1482,12 @@ export const commands = {
1360
1482
  duplicateTargetAccount: (targetAccountId) => `The account ${uiAccountDescription(targetAccountId)} is being used in an existing profile. Make sure to edit your project's name between uploads if you do not want to overwrite the existing project in this account.`,
1361
1483
  },
1362
1484
  errors: {
1363
- noProjectConfig: 'No project config found. Please run this command from a project directory.',
1485
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1364
1486
  profileExists: (profileName) => `Profile ${chalk.bold(profileName)} already exists. Please choose a different name.`,
1365
1487
  invalidTargetAccount: 'Target account is not configured in the CLI',
1366
1488
  noAccountsConfigured: 'No accounts configured in the CLI',
1367
1489
  failedToLoadProfile: (profileName) => `Unable to copy variables. Failed to load profile ${chalk.bold(profileName)}`,
1490
+ copyFromProfileNotFound: (profileName) => `Profile ${chalk.bold(profileName)} does not exist. Available profiles can be found in your project source directory.`,
1368
1491
  failedToCreateProfile: 'Failed to create profile',
1369
1492
  },
1370
1493
  positionals: {
@@ -1372,6 +1495,7 @@ export const commands = {
1372
1495
  },
1373
1496
  options: {
1374
1497
  targetAccount: 'The target account ID for this profile',
1498
+ copyFrom: 'Copy variables from an existing profile',
1375
1499
  },
1376
1500
  },
1377
1501
  delete: {
@@ -1390,7 +1514,7 @@ export const commands = {
1390
1514
  deleteProjectPrompt: (accountId) => `Would you like to delete this project from ${uiAccountDescription(accountId)}?`,
1391
1515
  },
1392
1516
  errors: {
1393
- noProjectConfig: 'No project config found. Please run this command from a project directory.',
1517
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1394
1518
  noProfileFound: (profileName) => `No profile with filename ${chalk.bold(profileName)} found in your project.`,
1395
1519
  noProfilesFound: 'No profiles found in your project.',
1396
1520
  failedToDeleteProfile: (profileName) => `Unable to delete profile ${chalk.bold(profileName)}. Please try again.`,
@@ -1405,27 +1529,20 @@ export const commands = {
1405
1529
  describe: 'Start local dev for the current project.',
1406
1530
  logs: {
1407
1531
  header: 'HubSpot projects local development',
1408
- placeholderAccountSelection: 'Using default account as target account (for now)',
1409
- accountTypeInformation: 'Testing in a developer test account is strongly recommended, but you can use a sandbox account if your plan allows you to create one.',
1410
1532
  learnMoreMessageV2: `Learn more about ${uiLink('HubSpot projects local dev', 'https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/project-commands#start-a-local-development-server')} | ${uiLink('HubSpot account types', 'https://developers.hubspot.com/docs/getting-started/account-types')}`,
1411
- learnMoreMessageLegacy: uiLink('Learn more about the projects local dev server', 'https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/project-commands#start-a-local-development-server'),
1412
1533
  profileProjectAccountExplanation: (accountId, profileName) => `Using account ${uiAccountDescription(accountId)} from profile ${chalk.bold(profileName)} for project upload`,
1413
1534
  defaultProjectAccountExplanation: (accountId) => `Using default account ${uiAccountDescription(accountId)} for project upload`,
1414
1535
  projectAccountFlagExplanation: (accountId) => `Using account ${uiAccountDescription(accountId)} provided by the --project-account flag for project upload`,
1415
- accountFlagExplanation: (accountId) => `Using account ${uiAccountDescription(accountId)} provided by the --account flag for project upload`,
1416
1536
  defaultSandboxOrDevTestTestingAccountExplanation: (accountId) => `Using default account ${uiAccountDescription(accountId)} for testing`,
1417
1537
  testingAccountFlagExplanation: (accountId) => `Using account ${uiAccountDescription(accountId)} provided by the --testing-account flag for testing`,
1418
1538
  },
1419
1539
  errors: {
1420
- noProjectConfig: 'No project detected. Please run this command again from a project directory.',
1421
1540
  noAccount: (accountId) => `An error occurred while reading account ${uiAccountDescription(accountId)} from your config. Run ${uiAuthCommandReference()} to re-auth this account.`,
1422
- noAccountsInConfig: `No accounts found in your config. Run ${uiAuthCommandReference()} to configure a HubSpot account with the CLI.`,
1423
- invalidProjectComponents: 'Projects cannot contain both private and public apps. Move your apps to separate projects before attempting local development.',
1541
+ unsupportedPlatformVersion: (platformVersion) => `Local development is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
1424
1542
  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.`,
1425
1543
  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')}.`,
1426
- unsupportedAccountFlagLegacy: 'The --project-account and --testing-account flags are not supported for projects with platform versions earlier than 2025.2.',
1427
- 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',
1428
1544
  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')}.`,
1545
+ autoUploadRequiresAutoDeploy: `${uiCommandReference('hs project dev --auto-upload')} requires auto-deploy to be enabled for this project, since auto-upload deploys every change. Enable auto-deploy in your project settings, or run ${uiCommandReference('hs project dev')} without it.`,
1429
1546
  },
1430
1547
  examples: {
1431
1548
  default: 'Start local dev for the current project',
@@ -1435,9 +1552,10 @@ export const commands = {
1435
1552
  },
1436
1553
  options: {
1437
1554
  profile: 'The profile to target during local dev',
1438
- 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.',
1439
- 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.',
1440
- account: 'The id of the account to upload your project to. Unsupported on platform versions 2025.2 and newer.',
1555
+ projectAccount: 'The id of the account to upload your project to. Must be used with --testing-account.',
1556
+ testingAccount: 'The id of the account to install apps and test on. Must be used with --project-account.',
1557
+ port: `The port for the local dev server. Defaults to ${LOCAL_DEV_DEFAULT_PORT}.`,
1558
+ autoUpload: 'Automatically upload local changes to HubSpot as you edit files, instead of uploading manually from the Local Dev Panel.',
1441
1559
  },
1442
1560
  },
1443
1561
  create: {
@@ -1448,6 +1566,9 @@ export const commands = {
1448
1566
  failedToFetchProjectList: 'Failed to fetch the list of available project templates. Please try again later.',
1449
1567
  cannotNestProjects: (projectDir) => `A project already exists at ${projectDir}. Projects cannot be nested within other projects. Please choose a different destination and try again.`,
1450
1568
  },
1569
+ warnings: {
1570
+ 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'))}`,
1571
+ },
1451
1572
  logs: {
1452
1573
  success: (projectName, projectDest) => `Project ${chalk.bold(projectName)} was successfully created in ${projectDest}`,
1453
1574
  },
@@ -1510,7 +1631,6 @@ export const commands = {
1510
1631
  },
1511
1632
  },
1512
1633
  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')}`,
1513
- 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.`,
1514
1634
  migrationStatus: {
1515
1635
  inProgress: () => `Converting app configuration to ${chalk.bold(LEGACY_PUBLIC_APP_FILE)} component definition ...`,
1516
1636
  success: () => `${chalk.bold('Your app was converted and build #1 is deployed')}`,
@@ -1615,13 +1735,16 @@ export const commands = {
1615
1735
  deploy: {
1616
1736
  describe: 'Deploy a project build.',
1617
1737
  deployBuildIdPrompt: '[--build] Deploy which build?',
1738
+ profileMessage: (profileName, accountId) => `Deploying with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
1618
1739
  debug: {
1619
1740
  deploying: (path) => `Deploying project at path: ${path}`,
1620
1741
  },
1621
1742
  errors: {
1622
1743
  deploy: 'Deploy error: an unknown error occurred.',
1623
1744
  noBuilds: 'Deploy error: no builds for this project were found.',
1745
+ noSuccessfulBuilds: 'Deploy error: no successful builds for this project were found.',
1624
1746
  noBuildId: 'You must specify a build to deploy',
1747
+ notSupportedForBuildVersion: `This build's platform version does not support deploy. Run ${uiCommandReference('hs project release create')} to create a release instead.`,
1625
1748
  projectNotFound: (accountId, projectName) => `The project ${chalk.bold(projectName)} does not exist in account ${uiAccountDescription(accountId)}. Run ${uiCommandReference('hs project upload')} to upload your project files to HubSpot.`,
1626
1749
  buildIdDoesNotExist: (accountId, buildId, projectName) => `Build ${buildId} does not exist for project ${chalk.bold(projectName)}. Run ${uiCommandReference('hs project list-builds')} to view existing builds for this project.`,
1627
1750
  buildAlreadyDeployed: (accountId, buildId, projectName) => `Build ${buildId} is already deployed. ${uiLink('View project builds in HubSpot', getProjectDetailUrl(projectName, accountId))}`,
@@ -1632,7 +1755,7 @@ export const commands = {
1632
1755
  deployIssueComponentWarning: (uid, componentTypeName, message) => `- [${mapToUserFriendlyName(componentTypeName)}] ${chalk.bold('(' + uid + ')')} ${message}`,
1633
1756
  },
1634
1757
  examples: {
1635
- default: 'Deploy the latest build of the current project',
1758
+ default: 'Deploy the last successful build of the current project',
1636
1759
  withOptions: 'Deploy build 5 of the project my-project',
1637
1760
  withProfile: 'Deploy using the provided profile',
1638
1761
  },
@@ -1641,7 +1764,77 @@ export const commands = {
1641
1764
  project: 'Project name',
1642
1765
  profile: 'The profile to target with this deploy',
1643
1766
  force: 'Skip warnings and force deploy. Use this carefully as it will bypass warnings for destructive actions.',
1644
- deployLatestBuild: 'Deploy the latest build of the current project',
1767
+ deployLatestBuild: 'Deploy the last successful build of the current project',
1768
+ },
1769
+ },
1770
+ release: {
1771
+ describe: 'Manage project releases.',
1772
+ create: {
1773
+ describe: 'Create a release for a project build.',
1774
+ verboseDescribe: `Create a release for a project build\n\nReleases mark an uploaded build with an auto-generated semantic version tag (e.g. v1.0.0).\n\nBy default, the latest build is used. Use ${uiCommandReference('--build')} to specify a different build ID.`,
1775
+ confirmPrompt: (projectName, buildId) => `Create a release for project ${chalk.bold(projectName)} using build ${chalk.bold(String(buildId))}?`,
1776
+ success: (releaseTag, buildId) => `Release ${chalk.bold(releaseTag)} created for build ${chalk.bold(String(buildId))}.`,
1777
+ cancelled: 'Release creation cancelled.',
1778
+ buildIdPrompt: '[--build] Select a successful build to release:',
1779
+ noUploadMessage: 'No upload message',
1780
+ buildStatus: {
1781
+ BUILDING: 'Build in progress',
1782
+ FAILURE: 'Build failed',
1783
+ PENDING: 'Pending',
1784
+ PREPARING: 'Preparing',
1785
+ },
1786
+ uploadPrompt: (projectName) => `No successful builds for project ${chalk.bold(projectName)}. Would you like to upload it?`,
1787
+ errors: {
1788
+ projectNotFound: (accountId, projectName) => `The project ${chalk.bold(projectName)} does not exist in account ${uiAccountDescription(accountId)}. Run ${uiCommandReference('hs project upload')} to upload your project files to HubSpot.`,
1789
+ buildNotFound: (buildId, projectName) => `Build ${chalk.bold(String(buildId))} was not found for project ${chalk.bold(projectName)}. Run ${uiCommandReference('hs project list-builds')} to view existing builds or ${uiCommandReference('hs project upload')} to upload a build first.`,
1790
+ noSuccessfulBuilds: (projectName) => `No successful builds found for project ${chalk.bold(projectName)}. Run ${uiCommandReference('hs project upload')} to create a new build.`,
1791
+ incompatibleBuildVersion: `This build's platform version does not support releases. Upgrade your project to a newer platform version to use releases.`,
1792
+ },
1793
+ options: {
1794
+ build: 'Build ID to release. Defaults to the latest build.',
1795
+ force: 'Skip all confirmation prompts, including automatic upload when no build exists.',
1796
+ },
1797
+ examples: {
1798
+ default: 'Create a release for the latest build',
1799
+ withBuild: 'Create a release for a specific build',
1800
+ },
1801
+ },
1802
+ list: {
1803
+ describe: 'List releases for the current project.',
1804
+ verboseDescribe: `List releases for the current project\n\nDisplays all releases in sorted order, newest first. Includes the version tag, build ID, and creation date. Use ${uiCommandReference('--limit')} to control how many results are shown.`,
1805
+ noReleases: 'No releases found for this project.',
1806
+ showingReleases: (count, projectName) => `Showing ${count} release${count === 1 ? '' : 's'} for ${chalk.bold(projectName)}:`,
1807
+ continueOrExitPrompt: 'Press <enter> to load more, or ctrl+c to exit',
1808
+ errors: {
1809
+ projectNotFound: (accountId, projectName) => `The project ${chalk.bold(projectName)} does not exist in account ${uiAccountDescription(accountId)}. Run ${uiCommandReference('hs project upload')} to upload your project files to HubSpot.`,
1810
+ },
1811
+ options: {
1812
+ limit: 'Number of releases to show',
1813
+ },
1814
+ examples: {
1815
+ default: 'List releases for the current project',
1816
+ withLimit: 'Show only the 5 most recent releases',
1817
+ },
1818
+ },
1819
+ info: {
1820
+ describe: 'Show details about a specific release.',
1821
+ verboseDescribe: `Show details about a specific release\n\nDisplays the release tag, build ID, creation date, and list of components included in the release. Use ${uiCommandReference('--json')} for machine-readable output.`,
1822
+ releaseDetails: (releaseTag, projectName) => `Release ${chalk.bold(releaseTag)} for ${chalk.bold(projectName)}:`,
1823
+ components: 'Components:',
1824
+ noComponents: 'No components found for this release.',
1825
+ moreReleasesHint: `Not all releases are shown. Use ${uiCommandReference('--tag')} to look up an older release directly.`,
1826
+ selectRelease: (projectName) => `Select a release for ${chalk.bold(projectName)}`,
1827
+ errors: {
1828
+ releaseNotFound: (releaseTag, projectName) => `Release ${chalk.bold(releaseTag)} was not found for project ${chalk.bold(projectName)}. Verify the project has been uploaded and the release tag exists. Run ${uiCommandReference('hs project release list')} to view existing releases.`,
1829
+ noReleases: 'No releases found for this project.',
1830
+ },
1831
+ options: {
1832
+ tag: 'Release tag to look up (e.g. v1.0.0)',
1833
+ },
1834
+ examples: {
1835
+ default: 'Show details about a specific release',
1836
+ json: 'Output release details as JSON',
1837
+ },
1645
1838
  },
1646
1839
  },
1647
1840
  listBuilds: {
@@ -1664,6 +1857,8 @@ export const commands = {
1664
1857
  },
1665
1858
  examples: {
1666
1859
  default: 'List the builds for the current project',
1860
+ withLimit: 'List the five most recent builds for the current project',
1861
+ json: 'Output the builds for the current project as JSON',
1667
1862
  },
1668
1863
  },
1669
1864
  logs: {
@@ -1674,6 +1869,7 @@ export const commands = {
1674
1869
  noFunctionsLinkText: 'Visit developer docs',
1675
1870
  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`,
1676
1871
  noFunctionWithName: (name) => `No function with name "${name}"`,
1872
+ functionNameRequired: `A function name is required. Pass ${uiCommandReference('--function=<name>')} or run without it to select one interactively.`,
1677
1873
  functionNotDeployed: (name) => `The function with name "${name}" is not deployed`,
1678
1874
  projectLogsManagerNotInitialized: 'Function called on ProjectLogsManager before initialization',
1679
1875
  noDeployedBuild: 'This project has not been deployed yet. Deploy the project first, then try again.',
@@ -1719,19 +1915,31 @@ export const commands = {
1719
1915
  examples: {
1720
1916
  default: 'Upload a project into your HubSpot account',
1721
1917
  withProfile: 'Upload a project into your HubSpot account when using profiles',
1918
+ withPreview: 'Upload and preview the build on a target portal',
1722
1919
  },
1723
1920
  logs: {
1921
+ forceCreateDeprecated: `The ${uiCommandReference('--force-create')} flag is deprecated. Use ${uiCommandReference('--force')} instead.`,
1724
1922
  buildSucceeded: (buildId) => `Build #${buildId} succeeded\n`,
1725
1923
  readyToGoLive: '🚀 Ready to take your project live?',
1726
1924
  runCommand: (command) => `Run \`${uiCommandReference(command)}\``,
1727
1925
  autoDeployDisabled: (deployCommand) => `Automatic deploys are disabled for this project. Run ${uiCommandReference(deployCommand)} to deploy this build.`,
1926
+ autoDeploySkipped: (deployCommand) => `Auto-deploy was skipped for this build. Run ${uiCommandReference(deployCommand)} to deploy this build.`,
1927
+ releaseManagementRequired: (releaseCommand) => `Run ${uiCommandReference(releaseCommand)} to create a release for this build.`,
1928
+ uploadingWithProfile: (profileName, accountId) => `Initializing project upload with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
1929
+ uploadingToAccount: (accountId) => `Initializing project upload to account ${uiAccountDescription(accountId)}`,
1930
+ uploadedToAccount: (accountId) => `Project uploaded to ${uiAccountDescription(accountId)}`,
1728
1931
  },
1729
1932
  errors: {
1730
1933
  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.`,
1934
+ previewRequiresTarget: `${uiCommandReference('--preview')} requires ${uiCommandReference('--target=<portalId>')} to specify the portal to preview on.`,
1935
+ targetRequiresPreview: `${uiCommandReference('--target')} can only be used with ${uiCommandReference('--preview')}.`,
1731
1936
  },
1732
1937
  options: {
1938
+ force: {
1939
+ describe: 'Skip confirmation prompts and force the upload.',
1940
+ },
1733
1941
  forceCreate: {
1734
- describe: 'Automatically create project if it does not exist',
1942
+ describe: uiDeprecatedTag(`Automatically create project if it does not exist. Use ${uiCommandReference('--force')} instead.`, false),
1735
1943
  },
1736
1944
  message: {
1737
1945
  describe: 'Add a message when you upload your project and create a build',
@@ -1739,6 +1947,18 @@ export const commands = {
1739
1947
  profile: {
1740
1948
  describe: 'Profile to target for this upload',
1741
1949
  },
1950
+ skipNpmAudit: {
1951
+ describe: 'Skip the npm audit security check before uploading',
1952
+ },
1953
+ skipAutoDeploy: {
1954
+ describe: 'Skip automatic deployment after a successful build',
1955
+ },
1956
+ preview: {
1957
+ describe: 'Preview the build on a target portal after a successful upload',
1958
+ },
1959
+ target: {
1960
+ describe: 'Portal ID to preview the build on',
1961
+ },
1742
1962
  },
1743
1963
  },
1744
1964
  watch: {
@@ -1771,7 +1991,6 @@ export const commands = {
1771
1991
  fileAlreadyQueued: (filePath) => `File "${filePath}" is already queued for upload`,
1772
1992
  },
1773
1993
  errors: {
1774
- projectConfigNotFound: 'No project config found. Please ensure that you are in a project directory.',
1775
1994
  projectLockedError: `Your project is locked. This may mean that another user is running the ${chalk.bold(`hs project dev`)} command for this project. If this is you, unlock the project in Projects UI.`,
1776
1995
  uploadFailed: (remotePath, filePath) => `Failed to upload file "${filePath}" to "${remotePath}"`,
1777
1996
  deleteFileFailed: (remotePath) => `Failed to delete file "${remotePath}"`,
@@ -1838,7 +2057,6 @@ export const commands = {
1838
2057
  installationSuccessful: (directory) => `Installed dependencies in ${directory}`,
1839
2058
  addingDependenciesToLocation: (dependencies, directory) => `Installing ${dependencies} in ${directory}`,
1840
2059
  installingDependenciesFailed: (directory) => `Installing dependencies for ${directory} failed`,
1841
- noProjectConfig: 'No project detected. Run this command from a project directory.',
1842
2060
  noPackageJsonInProject: (projectName) => `No dependencies to install. The project ${projectName} folder might be missing component or subcomponent files. ${uiLink('Learn how to create a project from scratch', 'https://developers.hubspot.com/docs/apps/developer-platform/build-apps/create-an-app#customize-a-new-project-using-the-cli')}`,
1843
2061
  packageManagerNotInstalled: (packageManager) => `This command depends on ${packageManager}, install ${uiLink(packageManager, 'https://docs.npmjs.com/downloading-and-installing-node-js-and-npm')}`,
1844
2062
  },
@@ -1853,15 +2071,16 @@ export const commands = {
1853
2071
  loading: {
1854
2072
  checking: 'Checking lint packages and configuration…',
1855
2073
  creatingConfig: 'Creating ESLint configuration files…',
2074
+ addingLintScripts: 'Adding lint scripts to package.json files…',
1856
2075
  linting: 'Linting…',
1857
2076
  },
1858
- noProjectConfig: 'No project detected. Run this command from a project directory.',
1859
2077
  failedToReadPackageJson: (packageJsonPath) => `Failed to read package.json at ${packageJsonPath}`,
1860
2078
  installLintPackagesPrompt: (directories, missingPackages) => {
1861
2079
  const uniquePackages = Array.from(new Set(missingPackages)).sort();
1862
2080
  return `The dependencies required for linting are missing or outdated.\n\nDependencies:\n${uniquePackages.map(p => ` - ${p}`).join('\n')}\n\n${directories.length === 1 ? 'Directory' : 'Directories'}:\n${directories.map(d => ` - ${d}`).join('\n')}\n\nWould you like to install the required dependencies?`;
1863
2081
  },
1864
2082
  skippingDirectoriesWarning: (directories) => `Skipping linting for the following ${directories.length === 1 ? 'directory' : 'directories'}:\n${directories.map(d => ` - ${d}`).join('\n')}`,
2083
+ skippedDirectoriesError: (directoryCount) => `Linting could not run for ${directoryCount === 1 ? 'the directory' : 'the directories'} above because the required dependencies are missing. Run ${uiCommandReference('hs project lint --install-missing-deps')} to install them.`,
1865
2084
  deprecatedEslintConfigWarning: (details) => {
1866
2085
  const dirCount = details.length;
1867
2086
  const header = `Deprecated ESLint configuration file${dirCount === 1 ? '' : 's'} detected in the following ${dirCount === 1 ? 'directory' : 'directories'}:`;
@@ -1872,8 +2091,17 @@ export const commands = {
1872
2091
  },
1873
2092
  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?`,
1874
2093
  eslintConfigCreated: (configPath) => `ESLint configuration created at ${configPath}`,
2094
+ createEslintConfigRequiresV2Platform: (platformVersion) => {
2095
+ if (!platformVersion) {
2096
+ 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.';
2097
+ }
2098
+ return `Automatic ESLint configuration is not available for platform version ${platformVersion}. Use Developer Platform 2025.2 or later, or add eslint.config.js manually.`;
2099
+ },
2100
+ 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.`,
1875
2101
  failedToCreateEslintConfig: (configPath) => `Failed to create ESLint configuration at ${configPath}`,
1876
2102
  eslintConfigRequired: 'ESLint configuration is required to run the lint command. Run the command again to create the configuration.',
2103
+ lintScriptsAdded: (scriptNames, packageJsonPath) => `Added ${scriptNames.map(s => `"${s}"`).join(' and ')} to ${packageJsonPath}`,
2104
+ failedToAddLintScripts: (packageJsonPath) => `Failed to add lint scripts to ${packageJsonPath}`,
1877
2105
  },
1878
2106
  updateDeps: {
1879
2107
  help: {
@@ -1887,7 +2115,6 @@ export const commands = {
1887
2115
  updateSuccessful: (directory) => `Updated dependencies in ${directory}`,
1888
2116
  updatingDependenciesToLocation: (dependencies, directory) => `Updating ${dependencies} in ${directory}`,
1889
2117
  updatingDependenciesFailed: (directory) => `Updating dependencies for ${directory} failed`,
1890
- noProjectConfig: 'No project detected. Run this command from a project directory.',
1891
2118
  noPackageJsonInProject: (projectName) => `No dependencies to update. The project ${projectName} folder might be missing component or subcomponent files. ${uiLink('Learn how to create a project from scratch', 'https://developers.hubspot.com/docs/apps/developer-platform/build-apps/create-an-app#customize-a-new-project-using-the-cli')}`,
1892
2119
  packageManagerNotInstalled: (packageManager) => `This command depends on ${packageManager}, install ${uiLink(packageManager, 'https://docs.npmjs.com/downloading-and-installing-node-js-and-npm')}`,
1893
2120
  },
@@ -1928,6 +2155,137 @@ export const commands = {
1928
2155
  noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
1929
2156
  },
1930
2157
  },
2158
+ info: {
2159
+ describe: 'Display information about a project, its app, and its components',
2160
+ 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.`,
2161
+ project: {
2162
+ title: (name) => `Project: ${name}`,
2163
+ platformVersion: (version) => `Platform Version: ${version}`,
2164
+ id: (id) => `Project ID: ${id}`,
2165
+ deployedBuild: (buildId) => `Deployed Build: #${buildId}`,
2166
+ autoDeploy: (enabled) => `Auto-deploy: ${enabled ? 'Enabled' : 'Disabled'}`,
2167
+ },
2168
+ app: {
2169
+ title: 'App',
2170
+ name: (name) => `Name: ${name}`,
2171
+ id: (id) => `App ID: ${id}`,
2172
+ uid: (uid) => `UID: ${uid}`,
2173
+ authType: (authType) => `Auth Type: ${authType}`,
2174
+ distributionType: (distributionType) => `Distribution: ${distributionType}`,
2175
+ },
2176
+ examples: {
2177
+ default: 'Display project information',
2178
+ json: 'Output as JSON for scripting',
2179
+ },
2180
+ viewProjectLink: 'View project in HubSpot',
2181
+ componentsHeader: 'Components',
2182
+ labels: {
2183
+ type: 'Type',
2184
+ uid: 'UID',
2185
+ },
2186
+ errors: {
2187
+ projectNotFound: (projectName, accountId) => `Project "${projectName}" was not found in account ${uiAccountDescription(accountId)}. Make sure the project has been uploaded at least once.`,
2188
+ noDeployedBuild: `This project has not been deployed yet.\n\nRun ${uiCommandReference('hs project deploy')} to deploy your project.`,
2189
+ unsupportedPlatformVersion: (platformVersion) => `This command is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
2190
+ },
2191
+ },
2192
+ delete: {
2193
+ describe: 'Delete a project from the current target account',
2194
+ 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.`,
2195
+ warnings: {
2196
+ irreversibleTitle: 'Warning: This will permanently delete your project',
2197
+ 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.',
2198
+ },
2199
+ prompts: {
2200
+ selectProject: (accountId) => `Select a project to delete in ${uiAccountDescription(accountId)}`,
2201
+ confirmDelete: (projectName, accountId) => `[--force] Delete ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}? This cannot be undone.`,
2202
+ validation: {
2203
+ projectRequired: 'Please select a project to delete',
2204
+ },
2205
+ },
2206
+ logs: {
2207
+ deleting: (projectName) => `Deleting project ${chalk.bold(projectName)}...`,
2208
+ deleted: (projectName, accountId) => `Deleted project ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}`,
2209
+ cancelled: 'Deletion cancelled',
2210
+ componentsToDeleteUnified: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c.componentId)} (${mapToUserFriendlyName(c.componentType)})`).join('\n')}`,
2211
+ componentsToDeleteLegacy: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c)}`).join('\n')}`,
2212
+ deletingComponents: (projectName) => `Deleting deployed components from ${chalk.bold(projectName)}...`,
2213
+ componentsDeleted: (projectName) => `Deleted deployed components from ${chalk.bold(projectName)}`,
2214
+ unableToDetermineIfComponentsWereDeleted: (projectName) => `Unable to determine if components were successfully deleted from ${chalk.bold(projectName)}. Please try again.`,
2215
+ installWarning: (installCount) => `This project has ${chalk.bold(String(installCount))} active app ${installCount === 1 ? 'installation' : 'installations'} that will be deleted.`,
2216
+ installCountUnknown: 'Unable to determine the number of active app installations for this project.',
2217
+ },
2218
+ errors: {
2219
+ noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
2220
+ projectNotFound: (projectName, accountId) => `Project ${chalk.bold(projectName)} not found in ${uiAccountDescription(accountId)}`,
2221
+ deleteFailed: (projectName) => `Failed to delete project ${chalk.bold(projectName)}. Run with --debug for details or try again.`,
2222
+ cannotDelete: (projectName, reason) => `Cannot delete project ${chalk.bold(projectName)}: ${reason}`,
2223
+ noPlatformVersion: 'Unable to determine platform version for project',
2224
+ componentDeletionFailed: (projectName) => `Failed to delete deployed components from ${chalk.bold(projectName)}. The project was not deleted.`,
2225
+ },
2226
+ options: {
2227
+ project: 'name of the project to delete',
2228
+ force: 'skip confirmation prompt',
2229
+ },
2230
+ },
2231
+ installApp: {
2232
+ describe: 'Install a static auth app from the current project into the target account',
2233
+ verboseDescribe: `Install a static auth app from the current project into the target account.\n\nRun this command from within the project directory. The project must contain a privately distributed static auth app and must already be uploaded to the target account.`,
2234
+ examples: {
2235
+ default: 'Install the static auth app from the current project',
2236
+ withAccount: 'Install the app into a specific account',
2237
+ withProfile: 'Install the app into the account targeted by a profile',
2238
+ json: 'Output install result as JSON',
2239
+ },
2240
+ options: {
2241
+ force: 'Skip confirmation prompts',
2242
+ profile: 'The profile to target with this install',
2243
+ },
2244
+ errors: {
2245
+ unsupportedPlatformVersion: (platformVersion) => `This command is only supported for projects on platform version 2025.2 or later (detected: ${platformVersion}).`,
2246
+ failedToParseProject: 'Failed to parse the project. Check your project configuration is valid and try again.',
2247
+ noAppInProject: 'No app was found in the local project. This command requires a project that contains an app.',
2248
+ unsupportedAuthType: (authType) => `This command only supports static auth apps. Detected auth type: ${authType}.`,
2249
+ unsupportedDistribution: (distribution) => `This command only supports privately distributed apps. Detected distribution: ${distribution}.`,
2250
+ invalidAppDeveloperAccount: (accountId) => `Static auth apps can't be installed into the app developer account ${uiAccountDescription(accountId)}. Switch to a standard, sandbox, or developer test account with ${uiCommandReference('hs account use')}, or pass ${uiCommandReference('--account')}.`,
2251
+ projectNotFound: (accountId, projectName) => `The project ${chalk.bold(projectName)} does not exist in ${uiAccountDescription(accountId)}. Run ${uiCommandReference('hs project upload')} to upload your project files to HubSpot.`,
2252
+ appNotDeployed: (appName, accountId) => `The app ${chalk.bold(appName)} has not been deployed to ${uiAccountDescription(accountId)}. Upload the project with ${uiCommandReference('hs project upload')} and ensure the build succeeds, then try again.`,
2253
+ automaticInstallUnavailable: (appName, accountId) => `${chalk.bold(appName)} could not be installed automatically in ${uiAccountDescription(accountId)}.`,
2254
+ installFailed: (appName, accountId) => `Failed to install ${chalk.bold(appName)} in ${uiAccountDescription(accountId)}.`,
2255
+ },
2256
+ jsonErrors: {
2257
+ automaticInstallUnavailable: 'Automatic install is unavailable for this account.',
2258
+ installFailed: (appName, accountId) => `Failed to install ${appName} in account ${accountId}.`,
2259
+ },
2260
+ profileMessage: (profileName, accountId) => `Installing with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
2261
+ appDeveloperAccountNotice: (accountId) => `${uiAccountDescription(accountId)} is an app developer account, which can't have apps installed into it.`,
2262
+ selectInstallAccountPrompt: 'Select an account to install the app into',
2263
+ uploadAndDeployPrompt: (accountId) => `The app isn't deployed to ${uiAccountDescription(accountId)} yet. Upload and deploy the project now?`,
2264
+ alreadyInstalled: (appName, accountId) => `${chalk.bold(appName)} is already installed in ${uiAccountDescription(accountId)}.`,
2265
+ outdatedScopes: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)} with outdated scopes.`,
2266
+ reinstallPrompt: 'Reinstall the app to grant the latest scopes?',
2267
+ installPrompt: (appName, accountId) => `Install ${chalk.bold(appName)} in ${uiAccountDescription(accountId)}?`,
2268
+ installFromBrowser: (installUrl) => `Install the app in HubSpot: ${uiLink('Open install page', installUrl)}`,
2269
+ success: (appName, accountId) => `${chalk.bold(appName)} installed in ${uiAccountDescription(accountId)}.`,
2270
+ },
2271
+ installStatus: {
2272
+ 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.',
2273
+ examples: {
2274
+ default: 'Check install status for the static auth app in the current project',
2275
+ json: 'Output install status as JSON',
2276
+ },
2277
+ errors: {
2278
+ unsupportedPlatformVersion: (platformVersion) => `This command is only supported for projects on platform version 2025.2 or later (detected: ${platformVersion}).`,
2279
+ failedToParseProject: 'Failed to parse the project. Check your project configuration is valid and try again.',
2280
+ noAppInProject: 'No app was found in the local project. Install status is only available for projects that contain an app.',
2281
+ unsupportedAuthType: (authType) => `This command only supports static auth apps. Detected auth type: ${authType}.`,
2282
+ },
2283
+ success: {
2284
+ installed: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)}.`,
2285
+ installedWithOutdatedScopes: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)} with outdated scopes. Reinstall the app to grant the latest scopes.`,
2286
+ },
2287
+ notInstalled: (appName, accountId) => `${chalk.bold(appName)} is not installed in ${uiAccountDescription(accountId)}.`,
2288
+ },
1931
2289
  },
1932
2290
  sandbox: {
1933
2291
  describe: 'Commands for managing sandboxes.',
@@ -2122,6 +2480,111 @@ export const commands = {
2122
2480
  },
2123
2481
  },
2124
2482
  },
2483
+ logs: {
2484
+ describe: 'View recent application logs.',
2485
+ verboseDescribe: `View recent application logs for a specific log type.\n\nFilter by time range with ${uiCommandReference('--since')} (e.g. 1h, 30m, 2d, or an ISO timestamp). Use ${uiCommandReference('--tail')} to follow logs in real-time, ${uiCommandReference('--compact')} for one-line-per-log output, or ${uiCommandReference('--json')} for machine-readable output.\n\nRun ${uiCommandReference('hs app log-details <logId>')} to inspect a specific log entry.`,
2486
+ options: {
2487
+ appId: 'App ID',
2488
+ type: 'Log type',
2489
+ json: 'Output logs as JSON',
2490
+ limit: 'Maximum number of logs to return',
2491
+ since: 'Filter logs by time ago (1h, 30m, 2d, or ISO timestamp)',
2492
+ tail: 'Follow logs in real-time',
2493
+ errorsOnly: 'Only show error logs',
2494
+ compact: 'Display logs in compact format (one line per log)',
2495
+ },
2496
+ errors: {
2497
+ noLogs: 'No logs found. Try a wider time range (--since) or remove --errors-only to see all logs.',
2498
+ noApps: `No apps found. Create an app with ${uiCommandReference('hs project create')}.`,
2499
+ },
2500
+ prompts: {
2501
+ selectType: '[--type] Select the type of logs to view:',
2502
+ },
2503
+ examples: {
2504
+ basic: 'Fetch webhook logs for app 123456',
2505
+ since: 'Fetch logs from the last hour',
2506
+ tail: 'Follow logs in real-time',
2507
+ json: 'Output logs as JSON',
2508
+ compact: 'Display logs in compact format',
2509
+ },
2510
+ outputMessages: {
2511
+ viewInHubSpot: (url) => uiLink('View in HubSpot', url),
2512
+ tableHeaders: {
2513
+ appId: 'App ID',
2514
+ type: 'Type',
2515
+ logsFound: 'Logs Found',
2516
+ },
2517
+ logDetails: {
2518
+ id: 'ID',
2519
+ duration: 'Duration',
2520
+ portal: 'Portal',
2521
+ trace: 'Trace',
2522
+ error: 'Error',
2523
+ viewDetails: (logId, appId, systemType) => `To view more details, run: ${uiCommandReference(`hs app log-details ${logId} --app=${appId} --type=${systemType}`)}`,
2524
+ viewInUI: (url) => uiLink('View details in UI', url),
2525
+ },
2526
+ tailMessages: {
2527
+ following: (appId) => `Following logs for app ${appId}`,
2528
+ stop: `> Press ${chalk.bold('q')} to stop following`,
2529
+ },
2530
+ },
2531
+ },
2532
+ logDetails: {
2533
+ describe: 'View details for a specific log entry.',
2534
+ verboseDescribe: `View full details for a specific app log entry, including request/response bodies, context information, and error details.\n\nUse ${uiCommandReference('--json')} for machine-readable output.`,
2535
+ positionals: {
2536
+ logId: 'The log ID to fetch details for',
2537
+ },
2538
+ options: {
2539
+ appId: 'App ID',
2540
+ type: 'Log type',
2541
+ json: 'Output details as JSON',
2542
+ },
2543
+ errors: {
2544
+ noApps: `No apps found. Create an app with ${uiCommandReference('hs project create')}.`,
2545
+ },
2546
+ prompts: {
2547
+ selectType: '[--type] Select the log type:',
2548
+ },
2549
+ examples: {
2550
+ basic: 'Fetch details for log abc-123',
2551
+ json: 'Output log details as JSON',
2552
+ },
2553
+ outputMessages: {
2554
+ viewInHubSpot: (url) => uiLink('View in HubSpot', url),
2555
+ logDetailsHeader: 'Log Details',
2556
+ basicInfo: {
2557
+ id: 'Log ID',
2558
+ timestamp: 'Timestamp',
2559
+ status: 'Status',
2560
+ duration: 'Duration',
2561
+ systemType: 'Type',
2562
+ },
2563
+ contextInfo: {
2564
+ header: 'Context',
2565
+ portalId: 'Portal ID',
2566
+ traceId: 'Trace ID',
2567
+ function: 'Function',
2568
+ location: 'Location',
2569
+ card: 'Card',
2570
+ userId: 'User ID',
2571
+ },
2572
+ requestResponse: {
2573
+ header: 'Request/Response',
2574
+ requestBody: 'Request Body',
2575
+ responseBody: 'Response Body',
2576
+ },
2577
+ errorInfo: {
2578
+ header: 'Error Details',
2579
+ errorType: 'Type',
2580
+ errorMessage: 'Message',
2581
+ stackTrace: 'Stack Trace',
2582
+ },
2583
+ additionalInfo: {
2584
+ header: 'Additional Information',
2585
+ },
2586
+ },
2587
+ },
2125
2588
  },
2126
2589
  },
2127
2590
  secret: {
@@ -2223,7 +2686,7 @@ export const commands = {
2223
2686
  configPathPrompt: '[--config-path] Enter the path to the test account config: ',
2224
2687
  createTestAccountFromConfigPrompt: 'How would you like to create your test account?',
2225
2688
  createFromConfigOption: 'Create test account from config file',
2226
- createFromScratchOption: 'Create test account from scratch',
2689
+ createFromScratchOption: 'Select hub tiers manually',
2227
2690
  errors: {
2228
2691
  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.`,
2229
2692
  configFileParseFailed: (configPath) => `Failed to parse test account config file at ${configPath}`,
@@ -2243,8 +2706,8 @@ export const commands = {
2243
2706
  opsLevel: 'Operations Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2244
2707
  serviceLevel: 'Service Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2245
2708
  salesLevel: 'Sales Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2246
- contentLevel: 'CMS Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2247
- commerceLevel: 'Commerce Hub tier. Options: FREE, PROFESSIONAL, ENTERPRISE',
2709
+ contentLevel: 'Content Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2710
+ commerceLevel: 'Revenue Hub tier. Options: FREE, PROFESSIONAL, ENTERPRISE',
2248
2711
  },
2249
2712
  example: (configPath) => `Create a test account from the config file at ${configPath}`,
2250
2713
  examples: {
@@ -2896,15 +3359,30 @@ export const commands = {
2896
3359
  },
2897
3360
  };
2898
3361
  export const lib = {
3362
+ linkedDirectory: {
3363
+ 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`,
3364
+ },
2899
3365
  parsing: {
2900
3366
  unableToParseStringToNumber: 'Unable to parse string to number',
2901
3367
  },
2902
3368
  configMiddleWare: {
2903
3369
  invalidAccountIdEnvironmentVariable: 'Unable to parse `HUBSPOT_ACCOUNT_ID` environment variable into a number',
2904
3370
  },
3371
+ accountTargetDiscovery: {
3372
+ errors: {
3373
+ explicitAccountNotFound: (account) => `Account ${chalk.bold(String(account))} was not found in your config. Run ${uiCommandReference('hs account list')} to see available accounts.`,
3374
+ },
3375
+ },
2905
3376
  process: {
2906
3377
  exitDebug: (signal) => `Attempting to gracefully exit. Triggered by ${signal}`,
2907
3378
  },
3379
+ handlerLogFile: {
3380
+ saved: (filePath) => `Debug logs can be viewed at ${filePath}`,
3381
+ },
3382
+ jsonSchema: {
3383
+ noSchemaForCommand: 'No schema defined for this command',
3384
+ validationFailed: 'JSON output may be missing or malformed fields. The output schema may be out of date.',
3385
+ },
2908
3386
  DevServerManager: {
2909
3387
  portConflict: (port) => `The port ${port} is already in use.`,
2910
3388
  notInitialized: 'The Dev Server Manager must be initialized before it is started.',
@@ -2919,6 +3397,7 @@ export const lib = {
2919
3397
  learnMoreLocalDevServer: uiLink('Learn more about the projects local dev server', 'https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/project-commands'),
2920
3398
  running: (projectName, accountIdentifier) => chalk.hex(UI_COLORS.SORBET)(`Running ${chalk.bold(projectName)} locally on ${accountIdentifier}, waiting for changes ...`),
2921
3399
  quitHelper: `Press ${chalk.bold('q')} to stop the local dev server`,
3400
+ autoUploadEnabled: `${chalk.bold('Auto-upload is on.')} Changes you make locally will be uploaded to HubSpot automatically.`,
2922
3401
  viewProjectLink: (name, accountId) => uiLink('View project in HubSpot', getProjectDetailUrl(name, accountId) || ''),
2923
3402
  viewLocalDevUILink: (accountId, showWelcomeScreen) => uiLink('View local dev session in HubSpot', getLocalDevUiUrl(accountId, showWelcomeScreen)),
2924
3403
  localDevUIAutoMessage: (accountId, showWelcomeScreen) => `Opening your ${uiLink('local dev session in HubSpot', getLocalDevUiUrl(accountId, showWelcomeScreen))}...`,
@@ -2987,6 +3466,13 @@ export const lib = {
2987
3466
  appDataNotFound: 'An error occurred while fetching data for your app.',
2988
3467
  oauthAppRedirectUrlError: (redirectUrl) => `${chalk.bold('No reponse from your OAuth service:')} ${redirectUrl}\nYour app needs a valid OAuth2 service to be installed for local dev. ${uiLink('Learn more', 'https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth')}`,
2989
3468
  },
3469
+ accountAuthWebsocket: {
3470
+ logs: {
3471
+ openingWebBrowser: (url) => `Opening ${uiLink('HubSpot', url)} in your web browser\n`,
3472
+ spinner: 'Waiting for HubSpot to send your personal access key... (press any key to enter it manually)',
3473
+ received: 'Personal access key received',
3474
+ },
3475
+ },
2990
3476
  CLIWebsocketServer: {
2991
3477
  errors: {
2992
3478
  portManagerNotRunning: (prefix) => `${prefix ? `${prefix} ` : ''}PortManagerServing must be running before starting WebsocketServer.`,
@@ -2994,6 +3480,7 @@ export const lib = {
2994
3480
  missingTypeField: (data) => `Unsupported message received. Missing type field: ${data}`,
2995
3481
  invalidJSON: (data) => `Unsupported message received. Invalid JSON: ${data}`,
2996
3482
  unknownMessageType: (type) => `Unsupported message received. Unknown message type: ${type}`,
3483
+ failedToBindEphemeralPort: (prefix) => `${prefix ? `${prefix} ` : ''}Failed to determine the assigned port for the WebsocketServer.`,
2997
3484
  },
2998
3485
  logs: {
2999
3486
  startup: (port) => `WebsocketServer running on port ${port}`,
@@ -3001,8 +3488,14 @@ export const lib = {
3001
3488
  },
3002
3489
  LocalDevProcess: {
3003
3490
  projectConfigMismatch: `Unable to upload project. The project config has been modified since starting ${uiCommandReference('hs project dev')}.`,
3004
- uploadInitiated: 'Project upload initiated from Local Dev UI.',
3005
- deployInitiated: 'Project deploy initiated from Local Dev UI.',
3491
+ uploadInitiated: 'Project upload initiated.',
3492
+ autoUploadScheduled: (filePath) => `Auto-upload: detected change to ${filePath}, upload scheduled.`,
3493
+ autoUploadTriggered: 'Auto-upload: debounce elapsed, uploading now.',
3494
+ autoUploadInProgress: 'Auto-upload: an upload is already running, will re-run after it finishes.',
3495
+ autoUploadToggled: (enabled) => enabled
3496
+ ? `${chalk.bold('Auto-upload turned on')} from the Local Dev Panel. Changes you make locally will be uploaded to HubSpot automatically.`
3497
+ : `${chalk.bold('Auto-upload turned off')} from the Local Dev Panel. Upload manually from the Local Dev Panel to push your changes.`,
3498
+ deployInitiated: 'Project deploy initiated from the Local Dev Panel.',
3006
3499
  uploadFailed: 'Project upload failed. To proceed with local development, fix any necessary errors, then re-upload your project.',
3007
3500
  deployFailed: 'Project deploy failed. To proceed with local development, fix any necessary errors, then re-deploy your project.',
3008
3501
  uploadSuccess: 'Project upload completed successfully. Resuming local dev...',
@@ -3017,7 +3510,21 @@ export const lib = {
3017
3510
  checking: 'Checking if your deployed build is up to date...',
3018
3511
  upToDate: 'Deployed build is up to date.',
3019
3512
  notUpToDate: `Your project contains undeployed local changes.`,
3513
+ changedFiles: (changed) => {
3514
+ const sections = [];
3515
+ if (changed.added.length > 0) {
3516
+ sections.push(`${chalk.bold('Features Added:')}\n${changed.added.map(f => ` - ${f}`).join('\n')}`);
3517
+ }
3518
+ if (changed.updated.length > 0) {
3519
+ sections.push(`${chalk.bold('Features Modified:')}\n${changed.updated.map(f => ` - ${f}`).join('\n')}`);
3520
+ }
3521
+ if (changed.removed.length > 0) {
3522
+ sections.push(`${chalk.bold('Features Removed:')}\n${changed.removed.map(f => ` - ${f}`).join('\n')}`);
3523
+ }
3524
+ return sections.join('\n\n');
3525
+ },
3020
3526
  notUpToDateExplanation: (profile) => `Run ${uiCommandReference(`hs project upload${profile ? ` --profile ${profile}` : ''}`)} to upload these changes to HubSpot, then re-run ${uiCommandReference(`hs project dev${profile ? ` --profile ${profile}` : ''}`)} to continue local development.`,
3527
+ unableToCompare: `Unable to check if local *-hsmeta.json files match the deployed build. Run ${uiCommandReference('hs project upload')} to upload any local changes before continuing.`,
3021
3528
  },
3022
3529
  createNewProjectForLocalDev: {
3023
3530
  projectMustExistExplanation: (projectName, accountId) => `The project ${projectName} does not exist in the target account ${uiAccountDescription(accountId)}. This command requires the project to exist in the target account.`,
@@ -3040,19 +3547,6 @@ export const lib = {
3040
3547
  },
3041
3548
  },
3042
3549
  account: {
3043
- checkIfDefaultAccountIsSupported: {
3044
- publicApp: `This project contains a public app. Local development of public apps is only supported on developer accounts and developer test accounts. Change your default account using ${uiCommandReference('hs account use')}, or link a new account with ${uiAuthCommandReference()}.`,
3045
- privateApp: `This project contains a private app. Local development of private apps is not supported in developer accounts. Change your default account using ${uiCommandReference('hs account use')}, or link a new account with ${uiAuthCommandReference()}.`,
3046
- },
3047
- validateAccountOption: {
3048
- invalidPublicAppAccount: `This project contains a public app. The "--account" flag must point to a developer test account to develop this project locally. Alternatively, change your default account to an app developer account using ${uiCommandReference('hs account use')} and run ${uiCommandReference('hs project dev')} to set up a new developer test account.`,
3049
- invalidPrivateAppAccount: `This project contains a private app. The account specified with the "--account" flag points to a developer account, which do not support the local development of private apps. Update the "--account" flag to point to a standard, sandbox, or developer test account, or change your default account by running ${uiCommandReference('hs account use')}.`,
3050
- nonSandboxWarning: `Testing in a sandbox is strongly recommended. To switch the target account, select an option below or run ${uiCommandReference('hs account use')} before running the command again.`,
3051
- publicAppNonDeveloperTestAccountWarning: `Local development of public apps is only supported in ${chalk.bold('developer test accounts')}.`,
3052
- },
3053
- checkIfParentAccountIsAuthed: {
3054
- notAuthedError: (parentAccountId, accountIdentifier) => `To develop this project locally, run ${uiAuthCommandReference({ accountId: parentAccountId })} to authenticate the App Developer Account ${parentAccountId} associated with ${accountIdentifier}.`,
3055
- },
3056
3550
  selectAccountTypePrompt: {
3057
3551
  message: 'Choose the type of account to test on',
3058
3552
  developerTestAccountOption: 'Test on a developer test account (recommended)',
@@ -3060,10 +3554,7 @@ export const lib = {
3060
3554
  sandboxAccountOptionDisabled: 'Disabled - requires access to sandbox accounts',
3061
3555
  productionAccountOption: (accountId) => `<${chalk.red('!')} Test on your project account: ${uiAccountDescription(accountId, false)} ${chalk.red('!')}>`,
3062
3556
  },
3063
- confirmDefaultAccountIsTarget: {
3064
- configError: `An error occurred while reading the default account from your config. Run ${uiAuthCommandReference()} to re-auth this account`,
3065
- declineDefaultAccountExplanation: `To develop on a different account, run ${uiCommandReference('hs account use')} to change your default account, then re-run ${uiCommandReference('hs project dev')}.`,
3066
- },
3557
+ declineDefaultAccountExplanation: `To develop on a different account, run ${uiCommandReference('hs account use')} to change your default account, then re-run ${uiCommandReference('hs project dev')}.`,
3067
3558
  },
3068
3559
  },
3069
3560
  middleware: {
@@ -3086,14 +3577,8 @@ export const lib = {
3086
3577
  profileTargetAccount: (accountId) => `Targeting ${uiAccountDescription(accountId)}`,
3087
3578
  profileVariables: 'Profile variables',
3088
3579
  },
3089
- exitIfUsingProfiles: {
3090
- errors: {
3091
- noProfileSpecified: `This project is configured to use profiles, but no profile was specified. Target a profile using the ${uiCommandReference('--profile')} flag.`,
3092
- },
3093
- },
3094
3580
  loadProfile: {
3095
3581
  errors: {
3096
- noProjectConfig: 'No project config found. Please run this command from a project directory.',
3097
3582
  profileNotFound: (profileName) => `Profile ${chalk.bold(profileName)} not found.`,
3098
3583
  missingAccountId: (profileName) => `Profile ${chalk.bold(profileName)} is missing an account id.`,
3099
3584
  listedAccountNotFound: (accountId, profileName) => `The account ${uiAccountDescription(accountId)} is defined in your profile ${chalk.bold(profileName)}, but is missing in your config file`,
@@ -3135,12 +3620,6 @@ export const lib = {
3135
3620
  },
3136
3621
  validateProjectConfig: {
3137
3622
  configNotFound: `Unable to locate a project configuration file. Try running again from a project directory, or run ${uiCommandReference('hs project create')} to create a new project.`,
3138
- configMissingFields: (missingFields) => `The project configuration file is missing required field${missingFields.length > 1 ? 's' : ''}: ${missingFields.map(f => chalk.bold(f)).join(', ')}`,
3139
- srcDirNotFound: (srcDir, projectDir) => `Project source directory ${chalk.bold(srcDir)} could not be found in ${chalk.bold(projectDir)}.`,
3140
- srcOutsideProjectDir: (projectConfig, srcDir) => `Invalid value for 'srcDir' in ${projectConfig}: ${chalk.bold(`srcDir: "${srcDir}"`)}\n\t'srcDir' must be a relative path to a folder under the project root, such as "." or "./src"`,
3141
- },
3142
- getProjectConfig: {
3143
- error: 'Could not read from project config',
3144
3623
  },
3145
3624
  platformVersion: {
3146
3625
  unsupported: (currentCliVersion, latestSupported, platformVersion) => `Platform version${platformVersion ? ' ' + chalk.bold(platformVersion) : ''} is not officially supported by this version of the CLI (${chalk.bold(currentCliVersion)}).\n\nUpdate your CLI to the latest version with ${uiCommandReference('hs upgrade')} or use a compatible platform version (${chalk.bold(latestSupported)} or earlier).`,
@@ -3158,6 +3637,11 @@ export const lib = {
3158
3637
  feedbackHeader: "We'd love to hear your feedback!",
3159
3638
  feedbackMessage: `How are you liking the new projects and developer tools? \n > Run ${uiCommandReference('hs feedback')} to let us know what you think!\n`,
3160
3639
  },
3640
+ skippedHsMetaFiles: {
3641
+ warning: (files) => `The following *-hsmeta.json files will be skipped.\nThis CLI version doesn't support the features they require:\n${files.map(f => ` ${chalk.bold(f)}`).join('\n')}\nRun ${uiCommandReference('hs upgrade')} to update the CLI, which may add support for these features.`,
3642
+ uploadWarning: (files) => `The following *-hsmeta.json files will be skipped during upload.\nThis CLI version doesn't support the features they require:\n${files.map(f => ` ${chalk.bold(f)}`).join('\n')}\nRun ${uiCommandReference('hs upgrade')} to update the CLI, which may add support for these features.`,
3643
+ prompt: '[--force] Continue anyway?',
3644
+ },
3161
3645
  components: {
3162
3646
  unableToGetUidFromHsmeta: 'Unable to get UID from hsmeta',
3163
3647
  buildSuccessMessage: {
@@ -3165,9 +3649,9 @@ export const lib = {
3165
3649
  docsUrl: 'https://developers.hubspot.com/docs/apps/developer-platform/build-apps/overview',
3166
3650
  headerCreated: (projectName, projectDest) => `${chalk.bold(projectName)} was successfully created in ${projectDest}`,
3167
3651
  headerAdded: (featureText, uid, plural) => `${featureText} ${plural ? 'were' : 'was'} successfully added to ${uid}:`,
3168
- docsDetails: (docsLink) => `📖 ${docsLink} for more details about building and testing these features.`,
3169
- uploadPrompt: `🚀 Run ${uiCommandReference('hs project upload')} when you're ready to deploy.`,
3170
- devPrompt: `🧪 Run ${uiCommandReference('hs project dev')} to start local development.`,
3652
+ docsDetails: (docsLink) => `${docsLink} for more details about building and testing these features.`,
3653
+ uploadPrompt: `Run ${uiCommandReference('hs project upload')} when you're ready to deploy.`,
3654
+ devPrompt: `Run ${uiCommandReference('hs project dev')} to start local development.`,
3171
3655
  },
3172
3656
  },
3173
3657
  },
@@ -3203,8 +3687,33 @@ export const lib = {
3203
3687
  fileFiltered: (filename) => `Ignore rule triggered for "${filename}"`,
3204
3688
  legacyFileDetected: (filename, platformVersion) => `The ${chalk.bold(filename)} file is not supported on platform version ${chalk.bold(platformVersion)} and will be ignored.`,
3205
3689
  projectDoesNotExist: (accountId) => `Upload cancelled. Run ${uiCommandReference('hs project upload')} again to create the project in ${uiAccountDescription(accountId)}.`,
3690
+ workspaceIncluded: (workspaceDir, archivePath) => `Including workspace: ${workspaceDir} → ${archivePath}`,
3691
+ fileDependencyIncluded: (packageName, localPath, archivePath) => `Including file: dependency ${packageName}: ${localPath} → ${archivePath}`,
3692
+ malformedPackageJson: (packageJsonPath, error) => `Skipping malformed package.json at ${packageJsonPath}: ${error}`,
3693
+ workspaceCollision: (archivePath, workspaceDir, existingWorkspace) => `Workspace collision: ${archivePath} from ${workspaceDir} and ${existingWorkspace}`,
3694
+ fileDependencyAlreadyIncluded: (packageName, archivePath) => `file: dependency ${packageName} already included as workspace: ${archivePath}`,
3695
+ updatingLockfile: (lockfilePath) => `Updating package-lock.json in archive: ${lockfilePath}`,
3696
+ updatingPackageJsonWorkspaces: (packageJsonPath) => `Updating package.json workspaces in archive: ${packageJsonPath}`,
3697
+ updatedWorkspaces: (workspaces) => ` Updated workspaces: ${workspaces}`,
3698
+ updatedFileDependency: (packageName, relativePath) => ` Updated dependencies.${packageName}: file:${relativePath}`,
3699
+ lintPackagesNotConfigured: (packageRoot) => `Project lint: lint packages not installed for ${chalk.bold(packageRoot)}. Run ${uiCommandReference('hs project lint')} to install them.`,
3700
+ lintConfigNotFound: (packageRoot) => `Project lint: ESLint configuration not found for ${chalk.bold(packageRoot)}. Run ${uiCommandReference('hs project lint')} to create an ESLint config.`,
3701
+ lintHubSpotRulesNotActive: (packageRoot) => `Project lint: HubSpot ESLint rules not active for ${chalk.bold(packageRoot)}. Configure ${chalk.bold('@hubspot/eslint-config-ui-extensions')} — see ${uiLink('setup instructions', 'https://www.npmjs.com/package/@hubspot/eslint-config-ui-extensions')}.`,
3702
+ npmAuditClean: (packageRoot) => `npm audit: No npm dependency issues found for ${chalk.bold(packageRoot)}`,
3703
+ npmAuditIssues: (packageRoot, details) => `npm audit: security issues found for ${chalk.bold(packageRoot)}: ${details}`,
3704
+ npmAuditNpmUnavailable: (packageRoot) => `npm audit: skipped for ${chalk.bold(packageRoot)} (npm not available in PATH)`,
3705
+ npmAuditNonZeroExit: (packageRoot, exitCode) => `npm audit: ${chalk.bold(packageRoot)} exited with code ${exitCode}`,
3206
3706
  },
3207
3707
  },
3708
+ projectPreview: {
3709
+ triggeringPreview: (buildId, targetPortalId) => `Previewing build #${buildId} on ${uiAccountDescription(targetPortalId)}`,
3710
+ pollingStatus: (releaseTag, targetPortalId) => `Previewing ${chalk.bold(releaseTag)} on ${uiAccountDescription(targetPortalId)}`,
3711
+ succeeded: (releaseTag, targetPortalId) => `Previewed ${chalk.bold(releaseTag)} on ${uiAccountDescription(targetPortalId)}`,
3712
+ triggerFailed: 'Failed to trigger preview',
3713
+ pollFailed: 'Failed to poll preview status',
3714
+ warning: 'The build succeeded but the preview failed. You can manually preview this build from the project UI.',
3715
+ missingProjectId: 'Unable to preview: could not resolve the project ID.',
3716
+ },
3208
3717
  importData: {
3209
3718
  errors: {
3210
3719
  incorrectAccountType: (derivedAccountId) => `The account ${uiAccountDescription(derivedAccountId)} is not a standard account, developer test account, or app developer account.`,
@@ -3313,6 +3822,9 @@ export const lib = {
3313
3822
  pakFailure: 'Failed to generate personal access key for developer test account',
3314
3823
  },
3315
3824
  },
3825
+ usageTracking: {
3826
+ 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`,
3827
+ },
3316
3828
  configOptions: {
3317
3829
  enableOrDisableBooleanFieldPrompt: {
3318
3830
  message: (fieldName) => `Choose to enable or disable ${fieldName}`,
@@ -3358,6 +3870,7 @@ export const lib = {
3358
3870
  qa: 'Run command in QA mode',
3359
3871
  useEnv: 'Use environment variable config',
3360
3872
  jsonOutput: 'Format output as JSON',
3873
+ jsonSchema: 'Print the JSON output schema and exit',
3361
3874
  debug: 'Set log level to debug',
3362
3875
  },
3363
3876
  },
@@ -3401,8 +3914,14 @@ export const lib = {
3401
3914
  promptUtils: {
3402
3915
  errors: {
3403
3916
  noSelectableChoices: 'Exiting prompt because no selectable choices are available',
3917
+ userCancelled: 'User cancelled prompt',
3404
3918
  },
3405
3919
  },
3920
+ projectProfilePrompt: {
3921
+ message: '[--profile] This project is configured to use profiles. Select a profile to use:',
3922
+ exitMessage: `This project is configured to use profiles, but no profile was specified. Try again using ${uiCommandReference('--profile')}`,
3923
+ noValidProfilesMessage: 'There are no valid profiles in this project. Ensure the accounts they are targeting are authenticated and try again.',
3924
+ },
3406
3925
  importDataFilePathPrompt: {
3407
3926
  promptContext: `To view the JSON schema for data imports, visit ${uiLink('the docs', 'https://developers.hubspot.com/docs/guides/api/crm/imports')}`,
3408
3927
  promptMessage: '[--file-path] Select the JSON file that will be used to import your data.',
@@ -3426,13 +3945,15 @@ export const lib = {
3426
3945
  developerTestAccountLimit: (limit) => `Your account reached the limit of ${limit} developer test accounts.`,
3427
3946
  confirmDefaultAccount: (accountName, accountType) => `Continue testing on ${chalk.bold(`${accountName} (${accountType})`)}? (Y/n)`,
3428
3947
  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.`,
3948
+ confirmLinkExistingDeveloperTestAccount: (accountName) => `${accountName} is not linked to this directory. Would you like to link it?`,
3429
3949
  noAccountId: 'No account ID found for the selected account. Please try again.',
3950
+ fetchDeveloperTestAccountsError: 'Unable to fetch developer test accounts. Please try again.',
3430
3951
  },
3431
3952
  projectLogsPrompt: {
3432
3953
  functionName: (projectName) => `[--function] Select function in ${chalk.bold(projectName)} project`,
3433
3954
  },
3434
3955
  setAsDefaultAccountPrompt: {
3435
- setAsDefaultAccountMessage: 'Set this account as the default?',
3956
+ setAsDefaultAccountMessage: (accountName) => `Set ${accountName} as your default account? [--default]`,
3436
3957
  setAsDefaultAccount: (accountName) => `Account "${accountName}" set as the default account`,
3437
3958
  keepingCurrentDefault: (accountName) => `Account "${accountName}" will continue to be the default account`,
3438
3959
  },
@@ -3497,6 +4018,7 @@ export const lib = {
3497
4018
  invalidOauthClientSecretCopy: 'Please copy the actual OAuth2 client secret rather than the asterisks that mask it.',
3498
4019
  invalidPersonalAccessKey: 'You did not enter a valid access key. Please try again.',
3499
4020
  invalidPersonalAccessKeyCopy: 'Please copy the actual access key rather than the bullets that mask it.',
4021
+ authCancelled: 'Authentication cancelled.',
3500
4022
  },
3501
4023
  },
3502
4024
  createTemplatePrompt: {
@@ -3830,6 +4352,11 @@ export const lib = {
3830
4352
  installed: (npmVersion) => `npm v${npmVersion} is installed`,
3831
4353
  unableToDetermine: 'Unable to determine if npm is installed',
3832
4354
  },
4355
+ mcpChecks: {
4356
+ configured: (clients) => `HubSpot MCP server configured in ${clients.join(', ')}`,
4357
+ notConfigured: (clients) => `HubSpot MCP server not configured in ${clients.join(', ')}`,
4358
+ notConfiguredSecondary: `Run ${uiCommandReference('hs mcp setup')} to connect AI coding tools to HubSpot developer context`,
4359
+ },
3833
4360
  hsChecks: {
3834
4361
  notLatest: (hsVersion) => `Version ${hsVersion} outdated`,
3835
4362
  notLatestSecondary: (command, hsVersion) => `Run ${uiCommandReference(command)} to upgrade to the latest version ${hsVersion}`,
@@ -3848,9 +4375,9 @@ export const lib = {
3848
4375
  validJson: 'JSON files valid',
3849
4376
  },
3850
4377
  port: {
3851
- inUse: (port) => `Port ${port} is in use`,
3852
- inUseSecondary: `Make sure it is available before running ${uiCommandReference('hs project dev')}`,
3853
- available: (port) => `Port ${port} available for local development`,
4378
+ inUse: (port) => `Default port ${port} is in use`,
4379
+ inUseSecondary: `Make sure it is available before running ${uiCommandReference('hs project dev')}, or use ${uiCommandReference('--port')} to specify a different port`,
4380
+ available: (port) => `Default port ${port} available for local development`,
3854
4381
  },
3855
4382
  projectValidation: {
3856
4383
  valid: 'Project configuration and structure is valid',
@@ -3939,11 +4466,12 @@ export const lib = {
3939
4466
  fileInvalidJson: (path) => `The file "${path}" contains invalid JSON`,
3940
4467
  },
3941
4468
  migrate: {
3942
- componentsToBeMigrated: (components) => `The following features will be migrated: ${components}`,
4469
+ componentsToBeMigrated: (components) => `${chalk.bold('The following features will be migrated:')} ${components}`,
3943
4470
  componentsThatWillNotBeMigrated: (components) => `[NOTE] These features are not yet supported for migration but will be available later: ${components}`,
4471
+ 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')}`,
3944
4472
  sourceContentsMoved: (newLocation) => `The contents of your old source directory have been moved to ${newLocation}, move any required files to the new source directory.`,
3945
- projectMigrationWarningTitle: 'Important: Migrating to platformVersion 2025.2 is irreversible',
3946
- 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),
4473
+ projectMigrationWarningTitle: (platformVersion) => `Important: Migrating to platformVersion ${platformVersion} is irreversible`,
4474
+ 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),
3947
4475
  exitWithoutMigrating: 'Exiting without migrating',
3948
4476
  success: {
3949
4477
  downloadedProject: (projectName, projectDest) => `Saved ${projectName} to ${projectDest}`,
@@ -3955,7 +4483,7 @@ export const lib = {
3955
4483
  doesNotExist: (account) => `Project does not exist in ${uiAccountDescription(account)}. Migrations are only supported for existing projects.`,
3956
4484
  themesAlreadyMigrated: 'This project has already been migrated to the latest platform version.',
3957
4485
  noProjectForThemesMigration: 'Theme migrations are only supported for projects. Please try again from a project directory.',
3958
- themesAndAppsNotAllowed: 'Support for migrating projects containing both themes and apps to the latest platform version is coming soon. Try again later.',
4486
+ 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.',
3959
4487
  multipleApps: 'Multiple apps found in project, this is not allowed in 2025.2',
3960
4488
  alreadyExists: (projectName) => `A project with name ${projectName} already exists. Please choose another name.`,
3961
4489
  failedToMigrateThemes: 'Failed to migrate project themes. Please verify that your themes are properly formatted before trying again.',
@@ -4000,6 +4528,13 @@ export const lib = {
4000
4528
  copyingProjectFilesFailed: 'Unable to copy migrated project files',
4001
4529
  },
4002
4530
  },
4531
+ cms: {
4532
+ serverlessDevRuntime: {
4533
+ installStarted: (targetVersion) => `Installing serverless-dev-runtime ${targetVersion}...`,
4534
+ installSucceeded: 'serverless-dev-runtime setup complete',
4535
+ installFailed: 'Failed to install serverless-dev-runtime',
4536
+ },
4537
+ },
4003
4538
  theme: {
4004
4539
  cmsDevServerProcess: {
4005
4540
  installStarted: (targetVersion) => `Installing cms-dev-server ${targetVersion}...`,