@hubspot/cli 8.2.0 → 8.2.1-experimental.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (748) 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 +2 -3
  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 +16 -8
  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 +20 -19
  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 +13 -8
  84. package/commands/project/appInstallStatus.d.ts +5 -0
  85. package/commands/project/appInstallStatus.js +135 -0
  86. package/commands/project/create.js +29 -17
  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 +68 -48
  91. package/commands/project/dev/index.d.ts +3 -3
  92. package/commands/project/dev/index.js +33 -68
  93. package/commands/project/dev/unifiedFlow.js +73 -22
  94. package/commands/project/download.js +12 -9
  95. package/commands/project/info.d.ts +5 -0
  96. package/commands/project/info.js +70 -0
  97. package/commands/project/installApp.d.ts +8 -0
  98. package/commands/project/installApp.js +180 -0
  99. package/commands/project/installDeps.js +11 -6
  100. package/commands/project/lint.js +43 -12
  101. package/commands/project/list.d.ts +2 -2
  102. package/commands/project/list.js +15 -14
  103. package/commands/project/listBuilds.d.ts +1 -1
  104. package/commands/project/listBuilds.js +16 -12
  105. package/commands/project/logs.js +7 -10
  106. package/commands/project/migrate.js +18 -18
  107. package/commands/project/open.js +5 -6
  108. package/commands/project/profile/add.d.ts +2 -1
  109. package/commands/project/profile/add.js +34 -9
  110. package/commands/project/profile/delete.d.ts +1 -1
  111. package/commands/project/profile/delete.js +15 -11
  112. package/commands/project/release/create.d.ts +8 -0
  113. package/commands/project/release/create.js +158 -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 +9 -6
  121. package/commands/project/upload.d.ts +7 -1
  122. package/commands/project/upload.js +145 -32
  123. package/commands/project/validate.d.ts +1 -1
  124. package/commands/project/validate.js +12 -12
  125. package/commands/project/watch.js +23 -22
  126. package/commands/project.js +16 -3
  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 +558 -40
  141. package/lang/en.js +595 -63
  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 +18 -5
  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/commonOpts.js +6 -2
  162. package/lib/configOptions.d.ts +10 -10
  163. package/lib/configOptions.js +10 -11
  164. package/lib/constants.d.ts +12 -3
  165. package/lib/constants.js +14 -3
  166. package/lib/dependencyManagement.js +7 -7
  167. package/lib/doctor/Diagnosis.js +5 -5
  168. package/lib/doctor/Doctor.d.ts +1 -0
  169. package/lib/doctor/Doctor.js +33 -7
  170. package/lib/errorHandlers/index.js +4 -3
  171. package/lib/errorHandlers/suppressError.js +4 -0
  172. package/lib/errors/PromptExitError.d.ts +6 -0
  173. package/lib/errors/PromptExitError.js +11 -0
  174. package/lib/getStartedV2Actions.js +5 -4
  175. package/lib/hasFeature.js +1 -2
  176. package/lib/importData.js +3 -4
  177. package/lib/jsonOutput.d.ts +109 -0
  178. package/lib/jsonOutput.js +94 -0
  179. package/lib/link/accountTableUtils.d.ts +10 -0
  180. package/lib/link/accountTableUtils.js +39 -0
  181. package/lib/link/index.d.ts +18 -0
  182. package/lib/link/index.js +185 -0
  183. package/lib/link/linkUtils.d.ts +5 -0
  184. package/lib/link/linkUtils.js +49 -0
  185. package/lib/link/prompts.d.ts +7 -0
  186. package/lib/link/prompts.js +126 -0
  187. package/lib/link/renderLinkedAccountsTable.d.ts +2 -0
  188. package/lib/link/renderLinkedAccountsTable.js +14 -0
  189. package/lib/link/warnIfLinkedDirectory.d.ts +1 -0
  190. package/lib/link/warnIfLinkedDirectory.js +9 -0
  191. package/lib/links.js +6 -5
  192. package/lib/mcp/clients.d.ts +13 -0
  193. package/lib/mcp/clients.js +62 -0
  194. package/lib/mcp/promotion.d.ts +3 -0
  195. package/lib/mcp/promotion.js +109 -0
  196. package/lib/mcp/setup.d.ts +8 -2
  197. package/lib/mcp/setup.js +123 -38
  198. package/lib/middleware/autoUpdateMiddleware.js +6 -3
  199. package/lib/middleware/commandTargetingUtils.js +1 -0
  200. package/lib/npm/npmCli.d.ts +1 -0
  201. package/lib/npm/npmCli.js +13 -0
  202. package/lib/process.d.ts +1 -1
  203. package/lib/process.js +10 -3
  204. package/lib/projects/ProjectLogsManager.js +6 -3
  205. package/lib/projects/builds.d.ts +2 -0
  206. package/lib/projects/builds.js +22 -0
  207. package/lib/projects/components.js +15 -4
  208. package/lib/projects/create/index.js +2 -2
  209. package/lib/projects/create/legacy.js +2 -2
  210. package/lib/projects/create/v2.js +5 -5
  211. package/lib/projects/delete.d.ts +13 -0
  212. package/lib/projects/delete.js +193 -0
  213. package/lib/projects/deploy.d.ts +1 -1
  214. package/lib/projects/deploy.js +2 -2
  215. package/lib/projects/installApp.d.ts +58 -0
  216. package/lib/projects/installApp.js +283 -0
  217. package/lib/projects/localDev/AppDevModeInterface.d.ts +0 -3
  218. package/lib/projects/localDev/AppDevModeInterface.js +35 -53
  219. package/lib/projects/localDev/DevSessionManager.d.ts +8 -5
  220. package/lib/projects/localDev/DevSessionManager.js +35 -49
  221. package/lib/projects/localDev/LocalDevProcess.js +13 -10
  222. package/lib/projects/localDev/LocalDevState.d.ts +3 -2
  223. package/lib/projects/localDev/LocalDevState.js +3 -1
  224. package/lib/projects/localDev/LocalDevWebsocketServer.js +1 -1
  225. package/lib/projects/localDev/UIExtensionsDevModeInterface.js +2 -0
  226. package/lib/projects/localDev/helpers/account.d.ts +1 -7
  227. package/lib/projects/localDev/helpers/account.js +12 -100
  228. package/lib/projects/localDev/helpers/process.d.ts +1 -1
  229. package/lib/projects/localDev/helpers/process.js +4 -10
  230. package/lib/projects/localDev/helpers/project.d.ts +8 -6
  231. package/lib/projects/localDev/helpers/project.js +80 -29
  232. package/lib/projects/npmAuditOnUpload.d.ts +10 -0
  233. package/lib/projects/npmAuditOnUpload.js +73 -0
  234. package/lib/projects/pollProjectBuildAndDeploy.d.ts +5 -1
  235. package/lib/projects/pollProjectBuildAndDeploy.js +3 -2
  236. package/lib/projects/preview.d.ts +7 -0
  237. package/lib/projects/preview.js +48 -0
  238. package/lib/projects/projectInfo.d.ts +5 -0
  239. package/lib/projects/projectInfo.js +82 -0
  240. package/lib/projects/projectProfiles.d.ts +1 -2
  241. package/lib/projects/projectProfiles.js +5 -17
  242. package/lib/projects/release.d.ts +4 -0
  243. package/lib/projects/release.js +90 -0
  244. package/lib/projects/ui.d.ts +1 -0
  245. package/lib/projects/ui.js +14 -0
  246. package/lib/projects/uieLinting.d.ts +21 -3
  247. package/lib/projects/uieLinting.js +132 -28
  248. package/lib/projects/upload.d.ts +12 -2
  249. package/lib/projects/upload.js +59 -13
  250. package/lib/projects/urls.d.ts +0 -1
  251. package/lib/projects/urls.js +6 -13
  252. package/lib/projects/validateLintConfigOnUpload.d.ts +9 -0
  253. package/lib/projects/validateLintConfigOnUpload.js +45 -0
  254. package/lib/projects/workspaces.d.ts +60 -0
  255. package/lib/projects/workspaces.js +411 -0
  256. package/lib/prompts/createApiSamplePrompt.js +4 -0
  257. package/lib/prompts/downloadProjectPrompt.js +11 -10
  258. package/lib/prompts/installAppPrompt.js +3 -2
  259. package/lib/prompts/personalAccessKeyPrompt.d.ts +2 -5
  260. package/lib/prompts/personalAccessKeyPrompt.js +10 -7
  261. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +1 -0
  262. package/lib/prompts/projectDevTargetAccountPrompt.js +26 -18
  263. package/lib/prompts/projectProfilePrompt.d.ts +2 -0
  264. package/lib/prompts/projectProfilePrompt.js +46 -0
  265. package/lib/prompts/projectsLogsPrompt.js +3 -0
  266. package/lib/prompts/promptUtils.js +4 -2
  267. package/lib/prompts/selectAppPrompt.js +1 -0
  268. package/lib/prompts/selectHubDBTablePrompt.js +8 -4
  269. package/lib/prompts/selectPublicAppForMigrationPrompt.js +12 -6
  270. package/lib/prompts/setAsDefaultAccountPrompt.js +2 -1
  271. package/lib/sandboxes.d.ts +1 -9
  272. package/lib/sandboxes.js +0 -21
  273. package/lib/serverlessLogs.js +2 -2
  274. package/lib/theme/cmsDevServerProcess.d.ts +2 -0
  275. package/lib/theme/cmsDevServerProcess.js +8 -7
  276. package/lib/theme/migrate.d.ts +1 -1
  277. package/lib/theme/migrate.js +1 -5
  278. package/lib/ui/SpinniesManager.d.ts +1 -0
  279. package/lib/ui/SpinniesManager.js +22 -6
  280. package/lib/ui/accountTable.d.ts +8 -0
  281. package/lib/ui/accountTable.js +67 -0
  282. package/lib/ui/appLogs.d.ts +32 -0
  283. package/lib/ui/appLogs.js +175 -0
  284. package/lib/ui/spinniesUtils.d.ts +0 -1
  285. package/lib/ui/spinniesUtils.js +6 -16
  286. package/lib/usageTracking.d.ts +10 -20
  287. package/lib/usageTracking.js +77 -30
  288. package/lib/yargs/makeWrappedYargsHandler.d.ts +7 -0
  289. package/lib/yargs/makeWrappedYargsHandler.js +179 -0
  290. package/lib/yargs/makeYargsBuilder.d.ts +13 -0
  291. package/lib/yargs/makeYargsBuilder.js +33 -0
  292. package/lib/yargs/parseYargsOrExit.d.ts +4 -0
  293. package/lib/yargs/parseYargsOrExit.js +25 -0
  294. package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
  295. package/lib/yargs/strictEnforceBoolean.js +13 -0
  296. package/lib/yargsUtils.d.ts +3 -16
  297. package/lib/yargsUtils.js +3 -48
  298. package/mcp-server/Tool.d.ts +20 -0
  299. package/mcp-server/Tool.js +79 -0
  300. package/mcp-server/server.js +47 -3
  301. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +5 -3
  302. package/mcp-server/tools/cms/HsCreateFunctionTool.js +18 -23
  303. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +5 -3
  304. package/mcp-server/tools/cms/HsCreateModuleTool.js +21 -26
  305. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +5 -3
  306. package/mcp-server/tools/cms/HsCreateTemplateTool.js +16 -16
  307. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +5 -3
  308. package/mcp-server/tools/cms/HsFunctionLogsTool.js +16 -15
  309. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +5 -3
  310. package/mcp-server/tools/cms/HsListFunctionsTool.js +14 -13
  311. package/mcp-server/tools/cms/HsListTool.d.ts +5 -3
  312. package/mcp-server/tools/cms/HsListTool.js +14 -16
  313. package/mcp-server/tools/index.d.ts +3 -2
  314. package/mcp-server/tools/index.js +26 -22
  315. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +8 -4
  316. package/mcp-server/tools/project/AddFeatureToProjectTool.js +16 -15
  317. package/mcp-server/tools/project/AuthAccountTool.d.ts +18 -0
  318. package/mcp-server/tools/project/AuthAccountTool.js +78 -0
  319. package/mcp-server/tools/project/CreateProjectTool.d.ts +8 -4
  320. package/mcp-server/tools/project/CreateProjectTool.js +21 -17
  321. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +5 -3
  322. package/mcp-server/tools/project/CreateTestAccountTool.js +35 -24
  323. package/mcp-server/tools/project/DeployProjectTool.d.ts +5 -3
  324. package/mcp-server/tools/project/DeployProjectTool.js +14 -16
  325. package/mcp-server/tools/project/DocFetchTool.d.ts +4 -2
  326. package/mcp-server/tools/project/DocFetchTool.js +8 -6
  327. package/mcp-server/tools/project/DocsSearchTool.d.ts +9 -3
  328. package/mcp-server/tools/project/DocsSearchTool.js +39 -15
  329. package/mcp-server/tools/project/FindProjectsTool.d.ts +15 -0
  330. package/mcp-server/tools/project/FindProjectsTool.js +60 -0
  331. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +6 -3
  332. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +16 -13
  333. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +6 -3
  334. package/mcp-server/tools/project/GetApplicationInfoTool.js +19 -14
  335. package/mcp-server/tools/project/GetBuildLogsTool.d.ts +4 -2
  336. package/mcp-server/tools/project/GetBuildLogsTool.js +19 -13
  337. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +4 -2
  338. package/mcp-server/tools/project/GetBuildStatusTool.js +19 -13
  339. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +6 -3
  340. package/mcp-server/tools/project/GetConfigValuesTool.js +20 -13
  341. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +4 -2
  342. package/mcp-server/tools/project/GuidedWalkthroughTool.js +4 -6
  343. package/mcp-server/tools/project/UploadProjectTools.d.ts +5 -3
  344. package/mcp-server/tools/project/UploadProjectTools.js +18 -15
  345. package/mcp-server/tools/project/ValidateProjectTool.d.ts +5 -3
  346. package/mcp-server/tools/project/ValidateProjectTool.js +13 -10
  347. package/mcp-server/tools/project/constants.d.ts +3 -1
  348. package/mcp-server/tools/project/constants.js +3 -1
  349. package/mcp-server/types.d.ts +0 -7
  350. package/mcp-server/types.js +1 -13
  351. package/mcp-server/utils/command.d.ts +25 -2
  352. package/mcp-server/utils/command.js +68 -16
  353. package/mcp-server/utils/config.js +6 -0
  354. package/mcp-server/utils/logger.d.ts +13 -0
  355. package/mcp-server/utils/logger.js +59 -0
  356. package/mcp-server/utils/toolUsageTracking.js +28 -11
  357. package/package.json +22 -15
  358. package/types/AccountTargets.d.ts +37 -0
  359. package/types/AccountTargets.js +12 -0
  360. package/types/Link.d.ts +32 -0
  361. package/types/Link.js +5 -0
  362. package/types/LocalDev.d.ts +8 -2
  363. package/types/PackageJson.d.ts +1 -0
  364. package/types/ProjectComponents.d.ts +2 -1
  365. package/types/Projects.d.ts +24 -0
  366. package/types/Prompts.d.ts +1 -0
  367. package/types/Yargs.d.ts +22 -2
  368. package/ui/components/ActionSection.d.ts +1 -1
  369. package/ui/components/InputField.d.ts +1 -1
  370. package/ui/components/SelectInput.d.ts +1 -1
  371. package/ui/components/StatusIcon.d.ts +1 -1
  372. package/ui/components/Table.d.ts +5 -5
  373. package/ui/components/getStarted/GetStartedFlow.d.ts +1 -1
  374. package/ui/components/getStarted/screens/InstallationScreen.d.ts +1 -1
  375. package/ui/components/getStarted/screens/ProjectSetupScreen.d.ts +1 -1
  376. package/ui/components/getStarted/screens/UploadScreen.d.ts +1 -1
  377. package/api/__tests__/migrate.test.d.ts +0 -1
  378. package/api/__tests__/migrate.test.js +0 -199
  379. package/commands/__tests__/account.test.d.ts +0 -1
  380. package/commands/__tests__/account.test.js +0 -69
  381. package/commands/__tests__/auth.test.d.ts +0 -1
  382. package/commands/__tests__/auth.test.js +0 -43
  383. package/commands/__tests__/cms.test.d.ts +0 -1
  384. package/commands/__tests__/cms.test.js +0 -87
  385. package/commands/__tests__/config.test.d.ts +0 -1
  386. package/commands/__tests__/config.test.js +0 -44
  387. package/commands/__tests__/customObject.test.d.ts +0 -1
  388. package/commands/__tests__/customObject.test.js +0 -68
  389. package/commands/__tests__/doctor.test.d.ts +0 -1
  390. package/commands/__tests__/doctor.test.js +0 -132
  391. package/commands/__tests__/feedback.test.d.ts +0 -1
  392. package/commands/__tests__/feedback.test.js +0 -24
  393. package/commands/__tests__/filemanager.test.d.ts +0 -1
  394. package/commands/__tests__/filemanager.test.js +0 -45
  395. package/commands/__tests__/getStarted.test.d.ts +0 -1
  396. package/commands/__tests__/getStarted.test.js +0 -173
  397. package/commands/__tests__/hubdb.test.d.ts +0 -1
  398. package/commands/__tests__/hubdb.test.js +0 -50
  399. package/commands/__tests__/init.test.d.ts +0 -1
  400. package/commands/__tests__/init.test.js +0 -42
  401. package/commands/__tests__/mcp.test.d.ts +0 -1
  402. package/commands/__tests__/mcp.test.js +0 -46
  403. package/commands/__tests__/open.test.d.ts +0 -1
  404. package/commands/__tests__/open.test.js +0 -58
  405. package/commands/__tests__/project.test.d.ts +0 -1
  406. package/commands/__tests__/project.test.js +0 -125
  407. package/commands/__tests__/sandbox.test.d.ts +0 -1
  408. package/commands/__tests__/sandbox.test.js +0 -44
  409. package/commands/__tests__/secret.test.d.ts +0 -1
  410. package/commands/__tests__/secret.test.js +0 -49
  411. package/commands/__tests__/testAccount.test.d.ts +0 -1
  412. package/commands/__tests__/testAccount.test.js +0 -57
  413. package/commands/__tests__/upgrade.test.d.ts +0 -1
  414. package/commands/__tests__/upgrade.test.js +0 -309
  415. package/commands/account/__tests__/auth.test.d.ts +0 -1
  416. package/commands/account/__tests__/auth.test.js +0 -206
  417. package/commands/account/__tests__/clean.test.d.ts +0 -1
  418. package/commands/account/__tests__/clean.test.js +0 -28
  419. package/commands/account/__tests__/createOverride.test.d.ts +0 -1
  420. package/commands/account/__tests__/createOverride.test.js +0 -32
  421. package/commands/account/__tests__/info.test.d.ts +0 -1
  422. package/commands/account/__tests__/info.test.js +0 -28
  423. package/commands/account/__tests__/list.test.d.ts +0 -1
  424. package/commands/account/__tests__/list.test.js +0 -153
  425. package/commands/account/__tests__/remove.test.d.ts +0 -1
  426. package/commands/account/__tests__/remove.test.js +0 -36
  427. package/commands/account/__tests__/removeOverride.d.ts +0 -1
  428. package/commands/account/__tests__/removeOverride.js +0 -25
  429. package/commands/account/__tests__/rename.test.d.ts +0 -1
  430. package/commands/account/__tests__/rename.test.js +0 -82
  431. package/commands/account/__tests__/use.test.d.ts +0 -1
  432. package/commands/account/__tests__/use.test.js +0 -170
  433. package/commands/app/__tests__/migrate.test.d.ts +0 -1
  434. package/commands/app/__tests__/migrate.test.js +0 -111
  435. package/commands/app/secret/__tests__/add.test.d.ts +0 -1
  436. package/commands/app/secret/__tests__/add.test.js +0 -140
  437. package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
  438. package/commands/app/secret/__tests__/delete.test.js +0 -28
  439. package/commands/app/secret/__tests__/list.test.d.ts +0 -1
  440. package/commands/app/secret/__tests__/list.test.js +0 -25
  441. package/commands/app/secret/__tests__/update.test.d.ts +0 -1
  442. package/commands/app/secret/__tests__/update.test.js +0 -28
  443. package/commands/cms/__tests__/delete.test.d.ts +0 -1
  444. package/commands/cms/__tests__/delete.test.js +0 -39
  445. package/commands/cms/__tests__/fetch.test.d.ts +0 -1
  446. package/commands/cms/__tests__/fetch.test.js +0 -156
  447. package/commands/cms/__tests__/function.test.d.ts +0 -1
  448. package/commands/cms/__tests__/function.test.js +0 -50
  449. package/commands/cms/__tests__/lint.test.d.ts +0 -1
  450. package/commands/cms/__tests__/lint.test.js +0 -33
  451. package/commands/cms/__tests__/list.test.d.ts +0 -1
  452. package/commands/cms/__tests__/list.test.js +0 -42
  453. package/commands/cms/__tests__/module.test.d.ts +0 -1
  454. package/commands/cms/__tests__/module.test.js +0 -45
  455. package/commands/cms/__tests__/mv.test.d.ts +0 -1
  456. package/commands/cms/__tests__/mv.test.js +0 -46
  457. package/commands/cms/__tests__/theme.test.d.ts +0 -1
  458. package/commands/cms/__tests__/theme.test.js +0 -54
  459. package/commands/cms/__tests__/upload.test.d.ts +0 -1
  460. package/commands/cms/__tests__/upload.test.js +0 -308
  461. package/commands/cms/__tests__/watch.test.d.ts +0 -1
  462. package/commands/cms/__tests__/watch.test.js +0 -204
  463. package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
  464. package/commands/cms/function/__tests__/logs.test.js +0 -70
  465. package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
  466. package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
  467. package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
  468. package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
  469. package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
  470. package/commands/cms/theme/__tests__/preview.test.js +0 -54
  471. package/commands/customObject/__tests__/create.test.d.ts +0 -1
  472. package/commands/customObject/__tests__/create.test.js +0 -40
  473. package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
  474. package/commands/customObject/__tests__/createSchema.test.js +0 -28
  475. package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
  476. package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
  477. package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
  478. package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
  479. package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
  480. package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
  481. package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
  482. package/commands/customObject/__tests__/listSchemas.test.js +0 -29
  483. package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
  484. package/commands/customObject/__tests__/updateSchema.test.js +0 -40
  485. package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
  486. package/commands/filemanager/__tests__/fetch.test.js +0 -32
  487. package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
  488. package/commands/filemanager/__tests__/upload.test.js +0 -191
  489. package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
  490. package/commands/hubdb/__tests__/clear.test.js +0 -28
  491. package/commands/hubdb/__tests__/create.test.d.ts +0 -1
  492. package/commands/hubdb/__tests__/create.test.js +0 -28
  493. package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
  494. package/commands/hubdb/__tests__/delete.test.js +0 -28
  495. package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
  496. package/commands/hubdb/__tests__/fetch.test.js +0 -28
  497. package/commands/hubdb/__tests__/list.test.d.ts +0 -1
  498. package/commands/hubdb/__tests__/list.test.js +0 -88
  499. package/commands/mcp/__tests__/setup.test.d.ts +0 -1
  500. package/commands/mcp/__tests__/setup.test.js +0 -26
  501. package/commands/mcp/__tests__/start.test.d.ts +0 -1
  502. package/commands/mcp/__tests__/start.test.js +0 -144
  503. package/commands/project/__tests__/add.test.d.ts +0 -1
  504. package/commands/project/__tests__/add.test.js +0 -107
  505. package/commands/project/__tests__/create.test.d.ts +0 -1
  506. package/commands/project/__tests__/create.test.js +0 -97
  507. package/commands/project/__tests__/deploy.test.d.ts +0 -1
  508. package/commands/project/__tests__/deploy.test.js +0 -307
  509. package/commands/project/__tests__/dev.test.d.ts +0 -1
  510. package/commands/project/__tests__/dev.test.js +0 -273
  511. package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
  512. package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
  513. package/commands/project/__tests__/download.test.d.ts +0 -1
  514. package/commands/project/__tests__/download.test.js +0 -39
  515. package/commands/project/__tests__/installDeps.test.d.ts +0 -1
  516. package/commands/project/__tests__/installDeps.test.js +0 -140
  517. package/commands/project/__tests__/lint.test.d.ts +0 -1
  518. package/commands/project/__tests__/lint.test.js +0 -704
  519. package/commands/project/__tests__/list.test.d.ts +0 -1
  520. package/commands/project/__tests__/list.test.js +0 -31
  521. package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
  522. package/commands/project/__tests__/listBuilds.test.js +0 -38
  523. package/commands/project/__tests__/logs.test.d.ts +0 -1
  524. package/commands/project/__tests__/logs.test.js +0 -202
  525. package/commands/project/__tests__/migrate.test.d.ts +0 -1
  526. package/commands/project/__tests__/migrate.test.js +0 -106
  527. package/commands/project/__tests__/open.test.d.ts +0 -1
  528. package/commands/project/__tests__/open.test.js +0 -39
  529. package/commands/project/__tests__/profile.test.d.ts +0 -1
  530. package/commands/project/__tests__/profile.test.js +0 -42
  531. package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
  532. package/commands/project/__tests__/updateDeps.test.js +0 -140
  533. package/commands/project/__tests__/upload.test.d.ts +0 -1
  534. package/commands/project/__tests__/upload.test.js +0 -234
  535. package/commands/project/__tests__/validate.test.d.ts +0 -1
  536. package/commands/project/__tests__/validate.test.js +0 -381
  537. package/commands/project/__tests__/watch.test.d.ts +0 -1
  538. package/commands/project/__tests__/watch.test.js +0 -35
  539. package/commands/project/dev/deprecatedFlow.d.ts +0 -11
  540. package/commands/project/dev/deprecatedFlow.js +0 -135
  541. package/commands/sandbox/__tests__/create.test.d.ts +0 -1
  542. package/commands/sandbox/__tests__/create.test.js +0 -245
  543. package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
  544. package/commands/sandbox/__tests__/delete.test.js +0 -31
  545. package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
  546. package/commands/secret/__tests__/addSecret.test.js +0 -162
  547. package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
  548. package/commands/secret/__tests__/deleteSecret.test.js +0 -41
  549. package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
  550. package/commands/secret/__tests__/listSecret.test.js +0 -29
  551. package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
  552. package/commands/secret/__tests__/updateSecret.test.js +0 -29
  553. package/commands/testAccount/__tests__/create.test.d.ts +0 -1
  554. package/commands/testAccount/__tests__/create.test.js +0 -106
  555. package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
  556. package/commands/testAccount/__tests__/createConfig.test.js +0 -32
  557. package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
  558. package/commands/testAccount/__tests__/delete.test.js +0 -29
  559. package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
  560. package/commands/testAccount/__tests__/importData.test.js +0 -92
  561. package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
  562. package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
  563. package/lib/__tests__/accountAuth.test.d.ts +0 -1
  564. package/lib/__tests__/accountAuth.test.js +0 -258
  565. package/lib/__tests__/accountTypes.test.d.ts +0 -1
  566. package/lib/__tests__/accountTypes.test.js +0 -98
  567. package/lib/__tests__/buildAccount.test.d.ts +0 -1
  568. package/lib/__tests__/buildAccount.test.js +0 -262
  569. package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
  570. package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
  571. package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
  572. package/lib/__tests__/commandSuggestion.test.js +0 -121
  573. package/lib/__tests__/commonOpts.test.d.ts +0 -1
  574. package/lib/__tests__/commonOpts.test.js +0 -80
  575. package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
  576. package/lib/__tests__/dependencyManagement.test.js +0 -1067
  577. package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
  578. package/lib/__tests__/developerTestAccounts.test.js +0 -156
  579. package/lib/__tests__/hasFeature.test.d.ts +0 -1
  580. package/lib/__tests__/hasFeature.test.js +0 -167
  581. package/lib/__tests__/http.test.d.ts +0 -1
  582. package/lib/__tests__/http.test.js +0 -40
  583. package/lib/__tests__/importData.test.d.ts +0 -1
  584. package/lib/__tests__/importData.test.js +0 -98
  585. package/lib/__tests__/npmCli.test.d.ts +0 -1
  586. package/lib/__tests__/npmCli.test.js +0 -84
  587. package/lib/__tests__/oauth.test.d.ts +0 -1
  588. package/lib/__tests__/oauth.test.js +0 -109
  589. package/lib/__tests__/parsing.test.d.ts +0 -1
  590. package/lib/__tests__/parsing.test.js +0 -34
  591. package/lib/__tests__/polling.test.d.ts +0 -1
  592. package/lib/__tests__/polling.test.js +0 -76
  593. package/lib/__tests__/process.test.d.ts +0 -1
  594. package/lib/__tests__/process.test.js +0 -89
  595. package/lib/__tests__/sandboxSync.test.d.ts +0 -1
  596. package/lib/__tests__/sandboxSync.test.js +0 -147
  597. package/lib/__tests__/sandboxes.test.d.ts +0 -1
  598. package/lib/__tests__/sandboxes.test.js +0 -156
  599. package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
  600. package/lib/__tests__/serverlessLogs.test.js +0 -163
  601. package/lib/__tests__/usageTracking.test.d.ts +0 -1
  602. package/lib/__tests__/usageTracking.test.js +0 -197
  603. package/lib/__tests__/validation.test.d.ts +0 -1
  604. package/lib/__tests__/validation.test.js +0 -143
  605. package/lib/__tests__/yargsUtils.test.d.ts +0 -1
  606. package/lib/__tests__/yargsUtils.test.js +0 -124
  607. package/lib/app/__tests__/migrate.test.d.ts +0 -1
  608. package/lib/app/__tests__/migrate.test.js +0 -638
  609. package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
  610. package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
  611. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
  612. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
  613. package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
  614. package/lib/doctor/__tests__/Doctor.test.js +0 -560
  615. package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
  616. package/lib/errorHandlers/__tests__/index.test.js +0 -278
  617. package/lib/mcp/__tests__/setup.test.d.ts +0 -1
  618. package/lib/mcp/__tests__/setup.test.js +0 -523
  619. package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
  620. package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
  621. package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
  622. package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
  623. package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
  624. package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
  625. package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
  626. package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
  627. package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
  628. package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
  629. package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
  630. package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
  631. package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
  632. package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
  633. package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
  634. package/lib/projects/__tests__/DevServerManager.test.js +0 -185
  635. package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
  636. package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
  637. package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
  638. package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
  639. package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
  640. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
  641. package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
  642. package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
  643. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
  644. package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
  645. package/lib/projects/__tests__/components.test.d.ts +0 -1
  646. package/lib/projects/__tests__/components.test.js +0 -426
  647. package/lib/projects/__tests__/deploy.test.d.ts +0 -1
  648. package/lib/projects/__tests__/deploy.test.js +0 -231
  649. package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
  650. package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
  651. package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
  652. package/lib/projects/__tests__/platformVersion.test.js +0 -63
  653. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
  654. package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
  655. package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
  656. package/lib/projects/__tests__/projectProfiles.test.js +0 -441
  657. package/lib/projects/__tests__/projects.test.d.ts +0 -1
  658. package/lib/projects/__tests__/projects.test.js +0 -58
  659. package/lib/projects/__tests__/structure.test.d.ts +0 -1
  660. package/lib/projects/__tests__/structure.test.js +0 -210
  661. package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
  662. package/lib/projects/__tests__/uieLinting.test.js +0 -631
  663. package/lib/projects/__tests__/upload.test.d.ts +0 -1
  664. package/lib/projects/__tests__/upload.test.js +0 -183
  665. package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
  666. package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
  667. package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
  668. package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
  669. package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
  670. package/lib/projects/create/__tests__/legacy.test.js +0 -72
  671. package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
  672. package/lib/projects/create/__tests__/v2.test.js +0 -257
  673. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +0 -40
  674. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +0 -128
  675. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +0 -59
  676. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +0 -383
  677. package/lib/projects/platformVersion.d.ts +0 -9
  678. package/lib/projects/platformVersion.js +0 -39
  679. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
  680. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
  681. package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
  682. package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
  683. package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
  684. package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
  685. package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
  686. package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
  687. package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
  688. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
  689. package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
  690. package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
  691. package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
  692. package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
  693. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
  694. package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
  695. package/lib/sandboxSync.d.ts +0 -4
  696. package/lib/sandboxSync.js +0 -102
  697. package/lib/theme/__tests__/migrate.test.d.ts +0 -1
  698. package/lib/theme/__tests__/migrate.test.js +0 -256
  699. package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
  700. package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
  701. package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
  702. package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
  703. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
  704. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
  705. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
  706. package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
  707. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
  708. package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
  709. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
  710. package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
  711. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
  712. package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
  713. package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
  714. package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
  715. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
  716. package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
  717. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
  718. package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -132
  719. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
  720. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
  721. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
  722. package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
  723. package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
  724. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
  725. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
  726. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
  727. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
  728. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
  729. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
  730. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
  731. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
  732. package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
  733. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
  734. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
  735. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
  736. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
  737. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
  738. package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
  739. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
  740. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
  741. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
  742. package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
  743. package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
  744. package/mcp-server/utils/__tests__/command.test.js +0 -275
  745. package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
  746. package/mcp-server/utils/__tests__/content.test.js +0 -164
  747. package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
  748. 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.',
@@ -1361,10 +1483,12 @@ export const commands = {
1361
1483
  },
1362
1484
  errors: {
1363
1485
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
1486
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1364
1487
  profileExists: (profileName) => `Profile ${chalk.bold(profileName)} already exists. Please choose a different name.`,
1365
1488
  invalidTargetAccount: 'Target account is not configured in the CLI',
1366
1489
  noAccountsConfigured: 'No accounts configured in the CLI',
1367
1490
  failedToLoadProfile: (profileName) => `Unable to copy variables. Failed to load profile ${chalk.bold(profileName)}`,
1491
+ copyFromProfileNotFound: (profileName) => `Profile ${chalk.bold(profileName)} does not exist. Available profiles can be found in your project source directory.`,
1368
1492
  failedToCreateProfile: 'Failed to create profile',
1369
1493
  },
1370
1494
  positionals: {
@@ -1372,6 +1496,7 @@ export const commands = {
1372
1496
  },
1373
1497
  options: {
1374
1498
  targetAccount: 'The target account ID for this profile',
1499
+ copyFrom: 'Copy variables from an existing profile',
1375
1500
  },
1376
1501
  },
1377
1502
  delete: {
@@ -1391,6 +1516,7 @@ export const commands = {
1391
1516
  },
1392
1517
  errors: {
1393
1518
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
1519
+ unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
1394
1520
  noProfileFound: (profileName) => `No profile with filename ${chalk.bold(profileName)} found in your project.`,
1395
1521
  noProfilesFound: 'No profiles found in your project.',
1396
1522
  failedToDeleteProfile: (profileName) => `Unable to delete profile ${chalk.bold(profileName)}. Please try again.`,
@@ -1405,26 +1531,19 @@ export const commands = {
1405
1531
  describe: 'Start local dev for the current project.',
1406
1532
  logs: {
1407
1533
  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
1534
  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
1535
  profileProjectAccountExplanation: (accountId, profileName) => `Using account ${uiAccountDescription(accountId)} from profile ${chalk.bold(profileName)} for project upload`,
1413
1536
  defaultProjectAccountExplanation: (accountId) => `Using default account ${uiAccountDescription(accountId)} for project upload`,
1414
1537
  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
1538
  defaultSandboxOrDevTestTestingAccountExplanation: (accountId) => `Using default account ${uiAccountDescription(accountId)} for testing`,
1417
1539
  testingAccountFlagExplanation: (accountId) => `Using account ${uiAccountDescription(accountId)} provided by the --testing-account flag for testing`,
1418
1540
  },
1419
1541
  errors: {
1420
1542
  noProjectConfig: 'No project detected. Please run this command again from a project directory.',
1421
1543
  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.',
1544
+ unsupportedPlatformVersion: (platformVersion) => `Local development is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
1424
1545
  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
1546
  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
1547
  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')}.`,
1429
1548
  },
1430
1549
  examples: {
@@ -1435,9 +1554,9 @@ export const commands = {
1435
1554
  },
1436
1555
  options: {
1437
1556
  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.',
1557
+ projectAccount: 'The id of the account to upload your project to. Must be used with --testing-account.',
1558
+ testingAccount: 'The id of the account to install apps and test on. Must be used with --project-account.',
1559
+ port: `The port for the local dev server. Defaults to ${LOCAL_DEV_DEFAULT_PORT}.`,
1441
1560
  },
1442
1561
  },
1443
1562
  create: {
@@ -1448,6 +1567,9 @@ export const commands = {
1448
1567
  failedToFetchProjectList: 'Failed to fetch the list of available project templates. Please try again later.',
1449
1568
  cannotNestProjects: (projectDir) => `A project already exists at ${projectDir}. Projects cannot be nested within other projects. Please choose a different destination and try again.`,
1450
1569
  },
1570
+ warnings: {
1571
+ 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'))}`,
1572
+ },
1451
1573
  logs: {
1452
1574
  success: (projectName, projectDest) => `Project ${chalk.bold(projectName)} was successfully created in ${projectDest}`,
1453
1575
  },
@@ -1510,7 +1632,6 @@ export const commands = {
1510
1632
  },
1511
1633
  },
1512
1634
  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
1635
  migrationStatus: {
1515
1636
  inProgress: () => `Converting app configuration to ${chalk.bold(LEGACY_PUBLIC_APP_FILE)} component definition ...`,
1516
1637
  success: () => `${chalk.bold('Your app was converted and build #1 is deployed')}`,
@@ -1615,13 +1736,16 @@ export const commands = {
1615
1736
  deploy: {
1616
1737
  describe: 'Deploy a project build.',
1617
1738
  deployBuildIdPrompt: '[--build] Deploy which build?',
1739
+ profileMessage: (profileName, accountId) => `Deploying with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
1618
1740
  debug: {
1619
1741
  deploying: (path) => `Deploying project at path: ${path}`,
1620
1742
  },
1621
1743
  errors: {
1622
1744
  deploy: 'Deploy error: an unknown error occurred.',
1623
1745
  noBuilds: 'Deploy error: no builds for this project were found.',
1746
+ noSuccessfulBuilds: 'Deploy error: no successful builds for this project were found.',
1624
1747
  noBuildId: 'You must specify a build to deploy',
1748
+ notSupportedForBuildVersion: `This build's platform version does not support deploy. Run ${uiCommandReference('hs project release create')} to create a release instead.`,
1625
1749
  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
1750
  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
1751
  buildAlreadyDeployed: (accountId, buildId, projectName) => `Build ${buildId} is already deployed. ${uiLink('View project builds in HubSpot', getProjectDetailUrl(projectName, accountId))}`,
@@ -1632,7 +1756,7 @@ export const commands = {
1632
1756
  deployIssueComponentWarning: (uid, componentTypeName, message) => `- [${mapToUserFriendlyName(componentTypeName)}] ${chalk.bold('(' + uid + ')')} ${message}`,
1633
1757
  },
1634
1758
  examples: {
1635
- default: 'Deploy the latest build of the current project',
1759
+ default: 'Deploy the last successful build of the current project',
1636
1760
  withOptions: 'Deploy build 5 of the project my-project',
1637
1761
  withProfile: 'Deploy using the provided profile',
1638
1762
  },
@@ -1641,7 +1765,77 @@ export const commands = {
1641
1765
  project: 'Project name',
1642
1766
  profile: 'The profile to target with this deploy',
1643
1767
  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',
1768
+ deployLatestBuild: 'Deploy the last successful build of the current project',
1769
+ },
1770
+ },
1771
+ release: {
1772
+ describe: 'Manage project releases.',
1773
+ create: {
1774
+ describe: 'Create a release for a project build.',
1775
+ 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.`,
1776
+ confirmPrompt: (projectName, buildId) => `Create a release for project ${chalk.bold(projectName)} using build ${chalk.bold(String(buildId))}?`,
1777
+ success: (releaseTag, buildId) => `Release ${chalk.bold(releaseTag)} created for build ${chalk.bold(String(buildId))}.`,
1778
+ cancelled: 'Release creation cancelled.',
1779
+ buildIdPrompt: '[--build] Select a successful build to release:',
1780
+ noUploadMessage: 'No upload message',
1781
+ buildStatus: {
1782
+ BUILDING: 'Build in progress',
1783
+ FAILURE: 'Build failed',
1784
+ PENDING: 'Pending',
1785
+ PREPARING: 'Preparing',
1786
+ },
1787
+ uploadPrompt: (projectName) => `No successful builds for project ${chalk.bold(projectName)}. Would you like to upload it?`,
1788
+ errors: {
1789
+ 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.`,
1790
+ 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.`,
1791
+ noSuccessfulBuilds: (projectName) => `No successful builds found for project ${chalk.bold(projectName)}. Run ${uiCommandReference('hs project upload')} to create a new build.`,
1792
+ incompatibleBuildVersion: `This build's platform version does not support releases. Upgrade your project to a newer platform version to use releases.`,
1793
+ },
1794
+ options: {
1795
+ build: 'Build ID to release. Defaults to the latest build.',
1796
+ force: 'Skip all confirmation prompts, including automatic upload when no build exists.',
1797
+ },
1798
+ examples: {
1799
+ default: 'Create a release for the latest build',
1800
+ withBuild: 'Create a release for a specific build',
1801
+ },
1802
+ },
1803
+ list: {
1804
+ describe: 'List releases for the current project.',
1805
+ 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.`,
1806
+ noReleases: 'No releases found for this project.',
1807
+ showingReleases: (count, projectName) => `Showing ${count} release${count === 1 ? '' : 's'} for ${chalk.bold(projectName)}:`,
1808
+ continueOrExitPrompt: 'Press <enter> to load more, or ctrl+c to exit',
1809
+ errors: {
1810
+ 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.`,
1811
+ },
1812
+ options: {
1813
+ limit: 'Number of releases to show',
1814
+ },
1815
+ examples: {
1816
+ default: 'List releases for the current project',
1817
+ withLimit: 'Show only the 5 most recent releases',
1818
+ },
1819
+ },
1820
+ info: {
1821
+ describe: 'Show details about a specific release.',
1822
+ 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.`,
1823
+ releaseDetails: (releaseTag, projectName) => `Release ${chalk.bold(releaseTag)} for ${chalk.bold(projectName)}:`,
1824
+ components: 'Components:',
1825
+ noComponents: 'No components found for this release.',
1826
+ moreReleasesHint: `Not all releases are shown. Use ${uiCommandReference('--tag')} to look up an older release directly.`,
1827
+ selectRelease: (projectName) => `Select a release for ${chalk.bold(projectName)}`,
1828
+ errors: {
1829
+ 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.`,
1830
+ noReleases: 'No releases found for this project.',
1831
+ },
1832
+ options: {
1833
+ tag: 'Release tag to look up (e.g. v1.0.0)',
1834
+ },
1835
+ examples: {
1836
+ default: 'Show details about a specific release',
1837
+ json: 'Output release details as JSON',
1838
+ },
1645
1839
  },
1646
1840
  },
1647
1841
  listBuilds: {
@@ -1674,6 +1868,7 @@ export const commands = {
1674
1868
  noFunctionsLinkText: 'Visit developer docs',
1675
1869
  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
1870
  noFunctionWithName: (name) => `No function with name "${name}"`,
1871
+ functionNameRequired: `A function name is required. Pass ${uiCommandReference('--function=<name>')} or run without it to select one interactively.`,
1677
1872
  functionNotDeployed: (name) => `The function with name "${name}" is not deployed`,
1678
1873
  projectLogsManagerNotInitialized: 'Function called on ProjectLogsManager before initialization',
1679
1874
  noDeployedBuild: 'This project has not been deployed yet. Deploy the project first, then try again.',
@@ -1719,19 +1914,29 @@ export const commands = {
1719
1914
  examples: {
1720
1915
  default: 'Upload a project into your HubSpot account',
1721
1916
  withProfile: 'Upload a project into your HubSpot account when using profiles',
1917
+ withPreview: 'Upload and preview the build on a target portal',
1722
1918
  },
1723
1919
  logs: {
1920
+ forceCreateDeprecated: `The ${uiCommandReference('--force-create')} flag is deprecated. Use ${uiCommandReference('--force')} instead.`,
1724
1921
  buildSucceeded: (buildId) => `Build #${buildId} succeeded\n`,
1725
1922
  readyToGoLive: '🚀 Ready to take your project live?',
1726
1923
  runCommand: (command) => `Run \`${uiCommandReference(command)}\``,
1727
1924
  autoDeployDisabled: (deployCommand) => `Automatic deploys are disabled for this project. Run ${uiCommandReference(deployCommand)} to deploy this build.`,
1925
+ autoDeploySkipped: (deployCommand) => `Auto-deploy was skipped for this build. Run ${uiCommandReference(deployCommand)} to deploy this build.`,
1926
+ releaseManagementRequired: (releaseCommand) => `Run ${uiCommandReference(releaseCommand)} to create a release for this build.`,
1728
1927
  },
1729
1928
  errors: {
1929
+ noProjectConfig: 'No project detected. Run this command from a project directory.',
1730
1930
  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.`,
1931
+ previewRequiresTarget: `${uiCommandReference('--preview')} requires ${uiCommandReference('--target=<portalId>')} to specify the portal to preview on.`,
1932
+ targetRequiresPreview: `${uiCommandReference('--target')} can only be used with ${uiCommandReference('--preview')}.`,
1731
1933
  },
1732
1934
  options: {
1935
+ force: {
1936
+ describe: 'Skip confirmation prompts and force the upload.',
1937
+ },
1733
1938
  forceCreate: {
1734
- describe: 'Automatically create project if it does not exist',
1939
+ describe: uiDeprecatedTag(`Automatically create project if it does not exist. Use ${uiCommandReference('--force')} instead.`, false),
1735
1940
  },
1736
1941
  message: {
1737
1942
  describe: 'Add a message when you upload your project and create a build',
@@ -1739,6 +1944,18 @@ export const commands = {
1739
1944
  profile: {
1740
1945
  describe: 'Profile to target for this upload',
1741
1946
  },
1947
+ skipNpmAudit: {
1948
+ describe: 'Skip the npm audit security check before uploading',
1949
+ },
1950
+ skipAutoDeploy: {
1951
+ describe: 'Skip automatic deployment after a successful build',
1952
+ },
1953
+ preview: {
1954
+ describe: 'Preview the build on a target portal after a successful upload',
1955
+ },
1956
+ target: {
1957
+ describe: 'Portal ID to preview the build on',
1958
+ },
1742
1959
  },
1743
1960
  },
1744
1961
  watch: {
@@ -1853,6 +2070,7 @@ export const commands = {
1853
2070
  loading: {
1854
2071
  checking: 'Checking lint packages and configuration…',
1855
2072
  creatingConfig: 'Creating ESLint configuration files…',
2073
+ addingLintScripts: 'Adding lint scripts to package.json files…',
1856
2074
  linting: 'Linting…',
1857
2075
  },
1858
2076
  noProjectConfig: 'No project detected. Run this command from a project directory.',
@@ -1862,6 +2080,7 @@ export const commands = {
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: {
@@ -1928,6 +2156,140 @@ export const commands = {
1928
2156
  noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
1929
2157
  },
1930
2158
  },
2159
+ info: {
2160
+ describe: 'Display information about a project, its app, and its components',
2161
+ 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.`,
2162
+ project: {
2163
+ title: (name) => `Project: ${name}`,
2164
+ platformVersion: (version) => `Platform Version: ${version}`,
2165
+ id: (id) => `Project ID: ${id}`,
2166
+ deployedBuild: (buildId) => `Deployed Build: #${buildId}`,
2167
+ autoDeploy: (enabled) => `Auto-deploy: ${enabled ? 'Enabled' : 'Disabled'}`,
2168
+ },
2169
+ app: {
2170
+ title: 'App',
2171
+ name: (name) => `Name: ${name}`,
2172
+ id: (id) => `App ID: ${id}`,
2173
+ uid: (uid) => `UID: ${uid}`,
2174
+ authType: (authType) => `Auth Type: ${authType}`,
2175
+ distributionType: (distributionType) => `Distribution: ${distributionType}`,
2176
+ },
2177
+ examples: {
2178
+ default: 'Display project information',
2179
+ json: 'Output as JSON for scripting',
2180
+ },
2181
+ viewProjectLink: 'View project in HubSpot',
2182
+ componentsHeader: 'Components',
2183
+ labels: {
2184
+ type: 'Type',
2185
+ uid: 'UID',
2186
+ },
2187
+ errors: {
2188
+ noProjectConfig: `No project found in this directory.\n\nRun ${uiCommandReference('hs project create')} to start a new project, or change to a directory containing hsproject.json.`,
2189
+ projectNotFound: (projectName, accountId) => `Project "${projectName}" was not found in account ${uiAccountDescription(accountId)}. Make sure the project has been uploaded at least once.`,
2190
+ noDeployedBuild: `This project has not been deployed yet.\n\nRun ${uiCommandReference('hs project deploy')} to deploy your project.`,
2191
+ unsupportedPlatformVersion: (platformVersion) => `This command is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
2192
+ },
2193
+ },
2194
+ delete: {
2195
+ describe: 'Delete a project from the current target account',
2196
+ 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.`,
2197
+ warnings: {
2198
+ irreversibleTitle: 'Warning: This will permanently delete your project',
2199
+ 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.',
2200
+ },
2201
+ prompts: {
2202
+ selectProject: (accountId) => `Select a project to delete in ${uiAccountDescription(accountId)}`,
2203
+ confirmDelete: (projectName, accountId) => `[--force] Delete ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}? This cannot be undone.`,
2204
+ validation: {
2205
+ projectRequired: 'Please select a project to delete',
2206
+ },
2207
+ },
2208
+ logs: {
2209
+ deleting: (projectName) => `Deleting project ${chalk.bold(projectName)}...`,
2210
+ deleted: (projectName, accountId) => `Deleted project ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}`,
2211
+ cancelled: 'Deletion cancelled',
2212
+ componentsToDeleteUnified: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c.componentId)} (${mapToUserFriendlyName(c.componentType)})`).join('\n')}`,
2213
+ componentsToDeleteLegacy: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c)}`).join('\n')}`,
2214
+ deletingComponents: (projectName) => `Deleting deployed components from ${chalk.bold(projectName)}...`,
2215
+ componentsDeleted: (projectName) => `Deleted deployed components from ${chalk.bold(projectName)}`,
2216
+ unableToDetermineIfComponentsWereDeleted: (projectName) => `Unable to determine if components were successfully deleted from ${chalk.bold(projectName)}. Please try again.`,
2217
+ installWarning: (installCount) => `This project has ${chalk.bold(String(installCount))} active app ${installCount === 1 ? 'installation' : 'installations'} that will be deleted.`,
2218
+ installCountUnknown: 'Unable to determine the number of active app installations for this project.',
2219
+ },
2220
+ errors: {
2221
+ noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
2222
+ projectNotFound: (projectName, accountId) => `Project ${chalk.bold(projectName)} not found in ${uiAccountDescription(accountId)}`,
2223
+ deleteFailed: (projectName) => `Failed to delete project ${chalk.bold(projectName)}. Run with --debug for details or try again.`,
2224
+ cannotDelete: (projectName, reason) => `Cannot delete project ${chalk.bold(projectName)}: ${reason}`,
2225
+ noPlatformVersion: 'Unable to determine platform version for project',
2226
+ componentDeletionFailed: (projectName) => `Failed to delete deployed components from ${chalk.bold(projectName)}. The project was not deleted.`,
2227
+ },
2228
+ options: {
2229
+ project: 'name of the project to delete',
2230
+ force: 'skip confirmation prompt',
2231
+ },
2232
+ },
2233
+ installApp: {
2234
+ describe: 'Install a static auth app from the current project into the target account',
2235
+ 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.`,
2236
+ examples: {
2237
+ default: 'Install the static auth app from the current project',
2238
+ withAccount: 'Install the app into a specific account',
2239
+ withProfile: 'Install the app into the account targeted by a profile',
2240
+ json: 'Output install result as JSON',
2241
+ },
2242
+ options: {
2243
+ force: 'Skip confirmation prompts',
2244
+ profile: 'The profile to target with this install',
2245
+ },
2246
+ errors: {
2247
+ noProjectConfig: `No project config found. Run this command from within a HubSpot project directory, or use ${uiCommandReference('hs project create')} to create a new one.`,
2248
+ unsupportedPlatformVersion: (platformVersion) => `This command is only supported for projects on platform version 2025.2 or later (detected: ${platformVersion}).`,
2249
+ failedToParseProject: 'Failed to parse the project. Check your project configuration is valid and try again.',
2250
+ noAppInProject: 'No app was found in the local project. This command requires a project that contains an app.',
2251
+ unsupportedAuthType: (authType) => `This command only supports static auth apps. Detected auth type: ${authType}.`,
2252
+ unsupportedDistribution: (distribution) => `This command only supports privately distributed apps. Detected distribution: ${distribution}.`,
2253
+ 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')}.`,
2254
+ 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.`,
2255
+ 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.`,
2256
+ automaticInstallUnavailable: (appName, accountId) => `${chalk.bold(appName)} could not be installed automatically in ${uiAccountDescription(accountId)}.`,
2257
+ installFailed: (appName, accountId) => `Failed to install ${chalk.bold(appName)} in ${uiAccountDescription(accountId)}.`,
2258
+ },
2259
+ jsonErrors: {
2260
+ automaticInstallUnavailable: 'Automatic install is unavailable for this account.',
2261
+ installFailed: (appName, accountId) => `Failed to install ${appName} in account ${accountId}.`,
2262
+ },
2263
+ profileMessage: (profileName, accountId) => `Installing with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
2264
+ appDeveloperAccountNotice: (accountId) => `${uiAccountDescription(accountId)} is an app developer account, which can't have apps installed into it.`,
2265
+ selectInstallAccountPrompt: 'Select an account to install the app into',
2266
+ uploadAndDeployPrompt: (accountId) => `The app isn't deployed to ${uiAccountDescription(accountId)} yet. Upload and deploy the project now?`,
2267
+ alreadyInstalled: (appName, accountId) => `${chalk.bold(appName)} is already installed in ${uiAccountDescription(accountId)}.`,
2268
+ outdatedScopes: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)} with outdated scopes.`,
2269
+ reinstallPrompt: 'Reinstall the app to grant the latest scopes?',
2270
+ installPrompt: (appName, accountId) => `Install ${chalk.bold(appName)} in ${uiAccountDescription(accountId)}?`,
2271
+ installFromBrowser: (installUrl) => `Install the app in HubSpot: ${uiLink('Open install page', installUrl)}`,
2272
+ success: (appName, accountId) => `${chalk.bold(appName)} installed in ${uiAccountDescription(accountId)}.`,
2273
+ },
2274
+ installStatus: {
2275
+ 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.',
2276
+ examples: {
2277
+ default: 'Check install status for the static auth app in the current project',
2278
+ json: 'Output install status as JSON',
2279
+ },
2280
+ errors: {
2281
+ noProjectConfig: `No project config found. Run this command from within a HubSpot project directory, or use ${uiCommandReference('hs project create')} to create a new one.`,
2282
+ unsupportedPlatformVersion: (platformVersion) => `This command is only supported for projects on platform version 2025.2 or later (detected: ${platformVersion}).`,
2283
+ failedToParseProject: 'Failed to parse the project. Check your project configuration is valid and try again.',
2284
+ noAppInProject: 'No app was found in the local project. Install status is only available for projects that contain an app.',
2285
+ unsupportedAuthType: (authType) => `This command only supports static auth apps. Detected auth type: ${authType}.`,
2286
+ },
2287
+ success: {
2288
+ installed: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)}.`,
2289
+ installedWithOutdatedScopes: (appName, accountId) => `${chalk.bold(appName)} is installed in ${uiAccountDescription(accountId)} with outdated scopes. Reinstall the app to grant the latest scopes.`,
2290
+ },
2291
+ notInstalled: (appName, accountId) => `${chalk.bold(appName)} is not installed in ${uiAccountDescription(accountId)}.`,
2292
+ },
1931
2293
  },
1932
2294
  sandbox: {
1933
2295
  describe: 'Commands for managing sandboxes.',
@@ -2122,6 +2484,111 @@ export const commands = {
2122
2484
  },
2123
2485
  },
2124
2486
  },
2487
+ logs: {
2488
+ describe: 'View recent application logs.',
2489
+ 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.`,
2490
+ options: {
2491
+ appId: 'App ID',
2492
+ type: 'Log type',
2493
+ json: 'Output logs as JSON',
2494
+ limit: 'Maximum number of logs to return',
2495
+ since: 'Filter logs by time ago (1h, 30m, 2d, or ISO timestamp)',
2496
+ tail: 'Follow logs in real-time',
2497
+ errorsOnly: 'Only show error logs',
2498
+ compact: 'Display logs in compact format (one line per log)',
2499
+ },
2500
+ errors: {
2501
+ noLogs: 'No logs found. Try a wider time range (--since) or remove --errors-only to see all logs.',
2502
+ noApps: `No apps found. Create an app with ${uiCommandReference('hs project create')}.`,
2503
+ },
2504
+ prompts: {
2505
+ selectType: '[--type] Select the type of logs to view:',
2506
+ },
2507
+ examples: {
2508
+ basic: 'Fetch webhook logs for app 123456',
2509
+ since: 'Fetch logs from the last hour',
2510
+ tail: 'Follow logs in real-time',
2511
+ json: 'Output logs as JSON',
2512
+ compact: 'Display logs in compact format',
2513
+ },
2514
+ outputMessages: {
2515
+ viewInHubSpot: (url) => uiLink('View in HubSpot', url),
2516
+ tableHeaders: {
2517
+ appId: 'App ID',
2518
+ type: 'Type',
2519
+ logsFound: 'Logs Found',
2520
+ },
2521
+ logDetails: {
2522
+ id: 'ID',
2523
+ duration: 'Duration',
2524
+ portal: 'Portal',
2525
+ trace: 'Trace',
2526
+ error: 'Error',
2527
+ viewDetails: (logId, appId, systemType) => `To view more details, run: ${uiCommandReference(`hs app log-details ${logId} --app=${appId} --type=${systemType}`)}`,
2528
+ viewInUI: (url) => uiLink('View details in UI', url),
2529
+ },
2530
+ tailMessages: {
2531
+ following: (appId) => `Following logs for app ${appId}`,
2532
+ stop: `> Press ${chalk.bold('q')} to stop following`,
2533
+ },
2534
+ },
2535
+ },
2536
+ logDetails: {
2537
+ describe: 'View details for a specific log entry.',
2538
+ 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.`,
2539
+ positionals: {
2540
+ logId: 'The log ID to fetch details for',
2541
+ },
2542
+ options: {
2543
+ appId: 'App ID',
2544
+ type: 'Log type',
2545
+ json: 'Output details as JSON',
2546
+ },
2547
+ errors: {
2548
+ noApps: `No apps found. Create an app with ${uiCommandReference('hs project create')}.`,
2549
+ },
2550
+ prompts: {
2551
+ selectType: '[--type] Select the log type:',
2552
+ },
2553
+ examples: {
2554
+ basic: 'Fetch details for log abc-123',
2555
+ json: 'Output log details as JSON',
2556
+ },
2557
+ outputMessages: {
2558
+ viewInHubSpot: (url) => uiLink('View in HubSpot', url),
2559
+ logDetailsHeader: 'Log Details',
2560
+ basicInfo: {
2561
+ id: 'Log ID',
2562
+ timestamp: 'Timestamp',
2563
+ status: 'Status',
2564
+ duration: 'Duration',
2565
+ systemType: 'Type',
2566
+ },
2567
+ contextInfo: {
2568
+ header: 'Context',
2569
+ portalId: 'Portal ID',
2570
+ traceId: 'Trace ID',
2571
+ function: 'Function',
2572
+ location: 'Location',
2573
+ card: 'Card',
2574
+ userId: 'User ID',
2575
+ },
2576
+ requestResponse: {
2577
+ header: 'Request/Response',
2578
+ requestBody: 'Request Body',
2579
+ responseBody: 'Response Body',
2580
+ },
2581
+ errorInfo: {
2582
+ header: 'Error Details',
2583
+ errorType: 'Type',
2584
+ errorMessage: 'Message',
2585
+ stackTrace: 'Stack Trace',
2586
+ },
2587
+ additionalInfo: {
2588
+ header: 'Additional Information',
2589
+ },
2590
+ },
2591
+ },
2125
2592
  },
2126
2593
  },
2127
2594
  secret: {
@@ -2223,7 +2690,7 @@ export const commands = {
2223
2690
  configPathPrompt: '[--config-path] Enter the path to the test account config: ',
2224
2691
  createTestAccountFromConfigPrompt: 'How would you like to create your test account?',
2225
2692
  createFromConfigOption: 'Create test account from config file',
2226
- createFromScratchOption: 'Create test account from scratch',
2693
+ createFromScratchOption: 'Select hub tiers manually',
2227
2694
  errors: {
2228
2695
  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
2696
  configFileParseFailed: (configPath) => `Failed to parse test account config file at ${configPath}`,
@@ -2243,8 +2710,8 @@ export const commands = {
2243
2710
  opsLevel: 'Operations Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2244
2711
  serviceLevel: 'Service Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2245
2712
  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',
2713
+ contentLevel: 'Content Hub tier. Options: FREE, STARTER, PROFESSIONAL, ENTERPRISE',
2714
+ commerceLevel: 'Revenue Hub tier. Options: FREE, PROFESSIONAL, ENTERPRISE',
2248
2715
  },
2249
2716
  example: (configPath) => `Create a test account from the config file at ${configPath}`,
2250
2717
  examples: {
@@ -2896,15 +3363,30 @@ export const commands = {
2896
3363
  },
2897
3364
  };
2898
3365
  export const lib = {
3366
+ linkedDirectory: {
3367
+ 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`,
3368
+ },
2899
3369
  parsing: {
2900
3370
  unableToParseStringToNumber: 'Unable to parse string to number',
2901
3371
  },
2902
3372
  configMiddleWare: {
2903
3373
  invalidAccountIdEnvironmentVariable: 'Unable to parse `HUBSPOT_ACCOUNT_ID` environment variable into a number',
2904
3374
  },
3375
+ accountTargetDiscovery: {
3376
+ errors: {
3377
+ explicitAccountNotFound: (account) => `Account ${chalk.bold(String(account))} was not found in your config. Run ${uiCommandReference('hs account list')} to see available accounts.`,
3378
+ },
3379
+ },
2905
3380
  process: {
2906
3381
  exitDebug: (signal) => `Attempting to gracefully exit. Triggered by ${signal}`,
2907
3382
  },
3383
+ handlerLogFile: {
3384
+ saved: (filePath) => `Debug logs can be viewed at ${filePath}`,
3385
+ },
3386
+ jsonSchema: {
3387
+ noSchemaForCommand: 'No schema defined for this command',
3388
+ validationFailed: 'JSON output may be missing or malformed fields. The output schema may be out of date.',
3389
+ },
2908
3390
  DevServerManager: {
2909
3391
  portConflict: (port) => `The port ${port} is already in use.`,
2910
3392
  notInitialized: 'The Dev Server Manager must be initialized before it is started.',
@@ -2987,6 +3469,13 @@ export const lib = {
2987
3469
  appDataNotFound: 'An error occurred while fetching data for your app.',
2988
3470
  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
3471
  },
3472
+ accountAuthWebsocket: {
3473
+ logs: {
3474
+ openingWebBrowser: (url) => `Opening ${uiLink('HubSpot', url)} in your web browser\n`,
3475
+ spinner: 'Waiting for HubSpot to send your personal access key... (press any key to enter it manually)',
3476
+ received: 'Personal access key received',
3477
+ },
3478
+ },
2990
3479
  CLIWebsocketServer: {
2991
3480
  errors: {
2992
3481
  portManagerNotRunning: (prefix) => `${prefix ? `${prefix} ` : ''}PortManagerServing must be running before starting WebsocketServer.`,
@@ -2994,6 +3483,7 @@ export const lib = {
2994
3483
  missingTypeField: (data) => `Unsupported message received. Missing type field: ${data}`,
2995
3484
  invalidJSON: (data) => `Unsupported message received. Invalid JSON: ${data}`,
2996
3485
  unknownMessageType: (type) => `Unsupported message received. Unknown message type: ${type}`,
3486
+ failedToBindEphemeralPort: (prefix) => `${prefix ? `${prefix} ` : ''}Failed to determine the assigned port for the WebsocketServer.`,
2997
3487
  },
2998
3488
  logs: {
2999
3489
  startup: (port) => `WebsocketServer running on port ${port}`,
@@ -3017,7 +3507,21 @@ export const lib = {
3017
3507
  checking: 'Checking if your deployed build is up to date...',
3018
3508
  upToDate: 'Deployed build is up to date.',
3019
3509
  notUpToDate: `Your project contains undeployed local changes.`,
3510
+ changedFiles: (changed) => {
3511
+ const sections = [];
3512
+ if (changed.added.length > 0) {
3513
+ sections.push(`${chalk.bold('Features Added:')}\n${changed.added.map(f => ` - ${f}`).join('\n')}`);
3514
+ }
3515
+ if (changed.updated.length > 0) {
3516
+ sections.push(`${chalk.bold('Features Modified:')}\n${changed.updated.map(f => ` - ${f}`).join('\n')}`);
3517
+ }
3518
+ if (changed.removed.length > 0) {
3519
+ sections.push(`${chalk.bold('Features Removed:')}\n${changed.removed.map(f => ` - ${f}`).join('\n')}`);
3520
+ }
3521
+ return sections.join('\n\n');
3522
+ },
3020
3523
  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.`,
3524
+ 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
3525
  },
3022
3526
  createNewProjectForLocalDev: {
3023
3527
  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 +3544,6 @@ export const lib = {
3040
3544
  },
3041
3545
  },
3042
3546
  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
3547
  selectAccountTypePrompt: {
3057
3548
  message: 'Choose the type of account to test on',
3058
3549
  developerTestAccountOption: 'Test on a developer test account (recommended)',
@@ -3060,10 +3551,7 @@ export const lib = {
3060
3551
  sandboxAccountOptionDisabled: 'Disabled - requires access to sandbox accounts',
3061
3552
  productionAccountOption: (accountId) => `<${chalk.red('!')} Test on your project account: ${uiAccountDescription(accountId, false)} ${chalk.red('!')}>`,
3062
3553
  },
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
- },
3554
+ 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
3555
  },
3068
3556
  },
3069
3557
  middleware: {
@@ -3086,11 +3574,6 @@ export const lib = {
3086
3574
  profileTargetAccount: (accountId) => `Targeting ${uiAccountDescription(accountId)}`,
3087
3575
  profileVariables: 'Profile variables',
3088
3576
  },
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
3577
  loadProfile: {
3095
3578
  errors: {
3096
3579
  noProjectConfig: 'No project config found. Please run this command from a project directory.',
@@ -3158,6 +3641,11 @@ export const lib = {
3158
3641
  feedbackHeader: "We'd love to hear your feedback!",
3159
3642
  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
3643
  },
3644
+ skippedHsMetaFiles: {
3645
+ 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.`,
3646
+ 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.`,
3647
+ prompt: '[--force] Continue anyway?',
3648
+ },
3161
3649
  components: {
3162
3650
  unableToGetUidFromHsmeta: 'Unable to get UID from hsmeta',
3163
3651
  buildSuccessMessage: {
@@ -3165,9 +3653,9 @@ export const lib = {
3165
3653
  docsUrl: 'https://developers.hubspot.com/docs/apps/developer-platform/build-apps/overview',
3166
3654
  headerCreated: (projectName, projectDest) => `${chalk.bold(projectName)} was successfully created in ${projectDest}`,
3167
3655
  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.`,
3656
+ docsDetails: (docsLink) => `${docsLink} for more details about building and testing these features.`,
3657
+ uploadPrompt: `Run ${uiCommandReference('hs project upload')} when you're ready to deploy.`,
3658
+ devPrompt: `Run ${uiCommandReference('hs project dev')} to start local development.`,
3171
3659
  },
3172
3660
  },
3173
3661
  },
@@ -3203,8 +3691,33 @@ export const lib = {
3203
3691
  fileFiltered: (filename) => `Ignore rule triggered for "${filename}"`,
3204
3692
  legacyFileDetected: (filename, platformVersion) => `The ${chalk.bold(filename)} file is not supported on platform version ${chalk.bold(platformVersion)} and will be ignored.`,
3205
3693
  projectDoesNotExist: (accountId) => `Upload cancelled. Run ${uiCommandReference('hs project upload')} again to create the project in ${uiAccountDescription(accountId)}.`,
3694
+ workspaceIncluded: (workspaceDir, archivePath) => `Including workspace: ${workspaceDir} → ${archivePath}`,
3695
+ fileDependencyIncluded: (packageName, localPath, archivePath) => `Including file: dependency ${packageName}: ${localPath} → ${archivePath}`,
3696
+ malformedPackageJson: (packageJsonPath, error) => `Skipping malformed package.json at ${packageJsonPath}: ${error}`,
3697
+ workspaceCollision: (archivePath, workspaceDir, existingWorkspace) => `Workspace collision: ${archivePath} from ${workspaceDir} and ${existingWorkspace}`,
3698
+ fileDependencyAlreadyIncluded: (packageName, archivePath) => `file: dependency ${packageName} already included as workspace: ${archivePath}`,
3699
+ updatingLockfile: (lockfilePath) => `Updating package-lock.json in archive: ${lockfilePath}`,
3700
+ updatingPackageJsonWorkspaces: (packageJsonPath) => `Updating package.json workspaces in archive: ${packageJsonPath}`,
3701
+ updatedWorkspaces: (workspaces) => ` Updated workspaces: ${workspaces}`,
3702
+ updatedFileDependency: (packageName, relativePath) => ` Updated dependencies.${packageName}: file:${relativePath}`,
3703
+ lintPackagesNotConfigured: (packageRoot) => `Project lint: lint packages not installed for ${chalk.bold(packageRoot)}. Run ${uiCommandReference('hs project lint')} to install them.`,
3704
+ lintConfigNotFound: (packageRoot) => `Project lint: ESLint configuration not found for ${chalk.bold(packageRoot)}. Run ${uiCommandReference('hs project lint')} to create an ESLint config.`,
3705
+ 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')}.`,
3706
+ npmAuditClean: (packageRoot) => `npm audit: No npm dependency issues found for ${chalk.bold(packageRoot)}`,
3707
+ npmAuditIssues: (packageRoot, details) => `npm audit: security issues found for ${chalk.bold(packageRoot)}: ${details}`,
3708
+ npmAuditNpmUnavailable: (packageRoot) => `npm audit: skipped for ${chalk.bold(packageRoot)} (npm not available in PATH)`,
3709
+ npmAuditNonZeroExit: (packageRoot, exitCode) => `npm audit: ${chalk.bold(packageRoot)} exited with code ${exitCode}`,
3206
3710
  },
3207
3711
  },
3712
+ projectPreview: {
3713
+ triggeringPreview: (buildId, targetPortalId) => `Previewing build #${buildId} on ${uiAccountDescription(targetPortalId)}`,
3714
+ pollingStatus: (releaseTag, targetPortalId) => `Previewing ${chalk.bold(releaseTag)} on ${uiAccountDescription(targetPortalId)}`,
3715
+ succeeded: (releaseTag, targetPortalId) => `Previewed ${chalk.bold(releaseTag)} on ${uiAccountDescription(targetPortalId)}`,
3716
+ triggerFailed: 'Failed to trigger preview',
3717
+ pollFailed: 'Failed to poll preview status',
3718
+ warning: 'The build succeeded but the preview failed. You can manually preview this build from the project UI.',
3719
+ missingProjectId: 'Unable to preview: could not resolve the project ID.',
3720
+ },
3208
3721
  importData: {
3209
3722
  errors: {
3210
3723
  incorrectAccountType: (derivedAccountId) => `The account ${uiAccountDescription(derivedAccountId)} is not a standard account, developer test account, or app developer account.`,
@@ -3313,6 +3826,9 @@ export const lib = {
3313
3826
  pakFailure: 'Failed to generate personal access key for developer test account',
3314
3827
  },
3315
3828
  },
3829
+ usageTracking: {
3830
+ 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`,
3831
+ },
3316
3832
  configOptions: {
3317
3833
  enableOrDisableBooleanFieldPrompt: {
3318
3834
  message: (fieldName) => `Choose to enable or disable ${fieldName}`,
@@ -3358,6 +3874,7 @@ export const lib = {
3358
3874
  qa: 'Run command in QA mode',
3359
3875
  useEnv: 'Use environment variable config',
3360
3876
  jsonOutput: 'Format output as JSON',
3877
+ jsonSchema: 'Print the JSON output schema and exit',
3361
3878
  debug: 'Set log level to debug',
3362
3879
  },
3363
3880
  },
@@ -3401,8 +3918,14 @@ export const lib = {
3401
3918
  promptUtils: {
3402
3919
  errors: {
3403
3920
  noSelectableChoices: 'Exiting prompt because no selectable choices are available',
3921
+ userCancelled: 'User cancelled prompt',
3404
3922
  },
3405
3923
  },
3924
+ projectProfilePrompt: {
3925
+ message: '[--profile] This project is configured to use profiles. Select a profile to use:',
3926
+ exitMessage: `This project is configured to use profiles, but no profile was specified. Try again using ${uiCommandReference('--profile')}`,
3927
+ noValidProfilesMessage: 'There are no valid profiles in this project. Ensure the accounts they are targeting are authenticated and try again.',
3928
+ },
3406
3929
  importDataFilePathPrompt: {
3407
3930
  promptContext: `To view the JSON schema for data imports, visit ${uiLink('the docs', 'https://developers.hubspot.com/docs/guides/api/crm/imports')}`,
3408
3931
  promptMessage: '[--file-path] Select the JSON file that will be used to import your data.',
@@ -3426,13 +3949,15 @@ export const lib = {
3426
3949
  developerTestAccountLimit: (limit) => `Your account reached the limit of ${limit} developer test accounts.`,
3427
3950
  confirmDefaultAccount: (accountName, accountType) => `Continue testing on ${chalk.bold(`${accountName} (${accountType})`)}? (Y/n)`,
3428
3951
  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.`,
3952
+ confirmLinkExistingDeveloperTestAccount: (accountName) => `${accountName} is not linked to this directory. Would you like to link it?`,
3429
3953
  noAccountId: 'No account ID found for the selected account. Please try again.',
3954
+ fetchDeveloperTestAccountsError: 'Unable to fetch developer test accounts. Please try again.',
3430
3955
  },
3431
3956
  projectLogsPrompt: {
3432
3957
  functionName: (projectName) => `[--function] Select function in ${chalk.bold(projectName)} project`,
3433
3958
  },
3434
3959
  setAsDefaultAccountPrompt: {
3435
- setAsDefaultAccountMessage: 'Set this account as the default?',
3960
+ setAsDefaultAccountMessage: (accountName) => `Set ${accountName} as your default account? [--default]`,
3436
3961
  setAsDefaultAccount: (accountName) => `Account "${accountName}" set as the default account`,
3437
3962
  keepingCurrentDefault: (accountName) => `Account "${accountName}" will continue to be the default account`,
3438
3963
  },
@@ -3497,6 +4022,7 @@ export const lib = {
3497
4022
  invalidOauthClientSecretCopy: 'Please copy the actual OAuth2 client secret rather than the asterisks that mask it.',
3498
4023
  invalidPersonalAccessKey: 'You did not enter a valid access key. Please try again.',
3499
4024
  invalidPersonalAccessKeyCopy: 'Please copy the actual access key rather than the bullets that mask it.',
4025
+ authCancelled: 'Authentication cancelled.',
3500
4026
  },
3501
4027
  },
3502
4028
  createTemplatePrompt: {
@@ -3830,6 +4356,11 @@ export const lib = {
3830
4356
  installed: (npmVersion) => `npm v${npmVersion} is installed`,
3831
4357
  unableToDetermine: 'Unable to determine if npm is installed',
3832
4358
  },
4359
+ mcpChecks: {
4360
+ configured: (clients) => `HubSpot MCP server configured in ${clients.join(', ')}`,
4361
+ notConfigured: (clients) => `HubSpot MCP server not configured in ${clients.join(', ')}`,
4362
+ notConfiguredSecondary: `Run ${uiCommandReference('hs mcp setup')} to connect AI coding tools to HubSpot developer context`,
4363
+ },
3833
4364
  hsChecks: {
3834
4365
  notLatest: (hsVersion) => `Version ${hsVersion} outdated`,
3835
4366
  notLatestSecondary: (command, hsVersion) => `Run ${uiCommandReference(command)} to upgrade to the latest version ${hsVersion}`,
@@ -3848,9 +4379,9 @@ export const lib = {
3848
4379
  validJson: 'JSON files valid',
3849
4380
  },
3850
4381
  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`,
4382
+ inUse: (port) => `Default port ${port} is in use`,
4383
+ inUseSecondary: `Make sure it is available before running ${uiCommandReference('hs project dev')}, or use ${uiCommandReference('--port')} to specify a different port`,
4384
+ available: (port) => `Default port ${port} available for local development`,
3854
4385
  },
3855
4386
  projectValidation: {
3856
4387
  valid: 'Project configuration and structure is valid',
@@ -3939,11 +4470,12 @@ export const lib = {
3939
4470
  fileInvalidJson: (path) => `The file "${path}" contains invalid JSON`,
3940
4471
  },
3941
4472
  migrate: {
3942
- componentsToBeMigrated: (components) => `The following features will be migrated: ${components}`,
4473
+ componentsToBeMigrated: (components) => `${chalk.bold('The following features will be migrated:')} ${components}`,
3943
4474
  componentsThatWillNotBeMigrated: (components) => `[NOTE] These features are not yet supported for migration but will be available later: ${components}`,
4475
+ 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
4476
  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),
4477
+ projectMigrationWarningTitle: (platformVersion) => `Important: Migrating to platformVersion ${platformVersion} is irreversible`,
4478
+ 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
4479
  exitWithoutMigrating: 'Exiting without migrating',
3948
4480
  success: {
3949
4481
  downloadedProject: (projectName, projectDest) => `Saved ${projectName} to ${projectDest}`,
@@ -3955,7 +4487,7 @@ export const lib = {
3955
4487
  doesNotExist: (account) => `Project does not exist in ${uiAccountDescription(account)}. Migrations are only supported for existing projects.`,
3956
4488
  themesAlreadyMigrated: 'This project has already been migrated to the latest platform version.',
3957
4489
  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.',
4490
+ 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
4491
  multipleApps: 'Multiple apps found in project, this is not allowed in 2025.2',
3960
4492
  alreadyExists: (projectName) => `A project with name ${projectName} already exists. Please choose another name.`,
3961
4493
  failedToMigrateThemes: 'Failed to migrate project themes. Please verify that your themes are properly formatted before trying again.',