@sanity/cli 6.0.0-alpha.7 → 6.0.0-alpha.9

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 (758) hide show
  1. package/README.md +240 -114
  2. package/dist/actions/auth/login/login.js +13 -5
  3. package/dist/actions/auth/login/login.js.map +1 -1
  4. package/dist/actions/build/buildApp.js +12 -12
  5. package/dist/actions/build/buildApp.js.map +1 -1
  6. package/dist/actions/build/buildStudio.js +12 -12
  7. package/dist/actions/build/buildStudio.js.map +1 -1
  8. package/dist/actions/build/getStudioEnvironmentVariables.js +1 -1
  9. package/dist/actions/build/getStudioEnvironmentVariables.js.map +1 -1
  10. package/dist/actions/build/getViteConfig.js +1 -1
  11. package/dist/actions/build/getViteConfig.js.map +1 -1
  12. package/dist/actions/build/renderDocument.js +3 -3
  13. package/dist/actions/build/renderDocument.js.map +1 -1
  14. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +2 -1
  15. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +1 -1
  16. package/dist/actions/build/shouldAutoUpdate.js +3 -3
  17. package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
  18. package/dist/actions/build/writeSanityRuntime.js +2 -2
  19. package/dist/actions/build/writeSanityRuntime.js.map +1 -1
  20. package/dist/actions/dataset/create.js +3 -5
  21. package/dist/actions/dataset/create.js.map +1 -1
  22. package/dist/actions/deploy/deployApp.js +11 -7
  23. package/dist/actions/deploy/deployApp.js.map +1 -1
  24. package/dist/actions/deploy/deployStudio.js +5 -4
  25. package/dist/actions/deploy/deployStudio.js.map +1 -1
  26. package/dist/actions/dev/startAppDevServer.js +5 -2
  27. package/dist/actions/dev/startAppDevServer.js.map +1 -1
  28. package/dist/actions/dev/startStudioDevServer.js +10 -6
  29. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  30. package/dist/actions/documents/types.js.map +1 -1
  31. package/dist/actions/documents/validate.js +4 -15
  32. package/dist/actions/documents/validate.js.map +1 -1
  33. package/dist/{threads/validateDocuments.js → actions/documents/validateDocuments.worker.js} +35 -35
  34. package/dist/actions/documents/validateDocuments.worker.js.map +1 -0
  35. package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
  36. package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
  37. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +8 -7
  38. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -1
  39. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js.map +1 -1
  40. package/dist/{threads/configClient.js → actions/exec/configClient.worker.js} +2 -2
  41. package/dist/actions/exec/configClient.worker.js.map +1 -0
  42. package/dist/actions/exec/execScript.js +29 -25
  43. package/dist/actions/exec/execScript.js.map +1 -1
  44. package/dist/{threads/registerBrowserEnv.js → actions/exec/registerBrowserEnv.worker.js} +1 -1
  45. package/dist/actions/exec/registerBrowserEnv.worker.js.map +1 -0
  46. package/dist/actions/graphql/SchemaError.js +37 -0
  47. package/dist/actions/graphql/SchemaError.js.map +1 -0
  48. package/dist/actions/graphql/extractFromSanitySchema.js +659 -0
  49. package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -0
  50. package/dist/actions/graphql/gen1/generateTypeFilters.js +226 -0
  51. package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -0
  52. package/dist/actions/graphql/gen1/generateTypeQueries.js +85 -0
  53. package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -0
  54. package/dist/actions/graphql/gen1/index.js +19 -0
  55. package/dist/actions/graphql/gen1/index.js.map +1 -0
  56. package/dist/actions/graphql/gen2/filters/booleanFilters.js +26 -0
  57. package/dist/actions/graphql/gen2/filters/booleanFilters.js.map +1 -0
  58. package/dist/actions/graphql/gen2/filters/dateFilters.js +46 -0
  59. package/dist/actions/graphql/gen2/filters/dateFilters.js.map +1 -0
  60. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js +46 -0
  61. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js.map +1 -0
  62. package/dist/actions/graphql/gen2/filters/documentFilters.js +21 -0
  63. package/dist/actions/graphql/gen2/filters/documentFilters.js.map +1 -0
  64. package/dist/actions/graphql/gen2/filters/floatFilters.js +46 -0
  65. package/dist/actions/graphql/gen2/filters/floatFilters.js.map +1 -0
  66. package/dist/actions/graphql/gen2/filters/idFilters.js +44 -0
  67. package/dist/actions/graphql/gen2/filters/idFilters.js.map +1 -0
  68. package/dist/actions/graphql/gen2/filters/integerFilters.js +46 -0
  69. package/dist/actions/graphql/gen2/filters/integerFilters.js.map +1 -0
  70. package/dist/actions/graphql/gen2/filters/stringFilters.js +49 -0
  71. package/dist/actions/graphql/gen2/filters/stringFilters.js.map +1 -0
  72. package/dist/actions/graphql/gen2/generateTypeFilters.js +85 -0
  73. package/dist/actions/graphql/gen2/generateTypeFilters.js.map +1 -0
  74. package/dist/actions/graphql/gen2/generateTypeQueries.js +107 -0
  75. package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -0
  76. package/dist/actions/graphql/gen2/generateTypeSortings.js +70 -0
  77. package/dist/actions/graphql/gen2/generateTypeSortings.js.map +1 -0
  78. package/dist/actions/graphql/gen2/index.js +22 -0
  79. package/dist/actions/graphql/gen2/index.js.map +1 -0
  80. package/dist/actions/graphql/gen3/filters/documentFilters.js +21 -0
  81. package/dist/actions/graphql/gen3/filters/documentFilters.js.map +1 -0
  82. package/dist/actions/graphql/gen3/generateTypeFilters.js +101 -0
  83. package/dist/actions/graphql/gen3/generateTypeFilters.js.map +1 -0
  84. package/dist/actions/graphql/gen3/generateTypeQueries.js +104 -0
  85. package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -0
  86. package/dist/actions/graphql/gen3/generateTypeSortings.js +70 -0
  87. package/dist/actions/graphql/gen3/generateTypeSortings.js.map +1 -0
  88. package/dist/actions/graphql/gen3/index.js +31 -0
  89. package/dist/actions/graphql/gen3/index.js.map +1 -0
  90. package/dist/actions/graphql/gen3/utils.js +12 -0
  91. package/dist/actions/graphql/gen3/utils.js.map +1 -0
  92. package/dist/actions/graphql/getGraphQLAPIs.worker.js +1 -1
  93. package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
  94. package/dist/actions/graphql/graphqlDebug.js +4 -0
  95. package/dist/actions/graphql/graphqlDebug.js.map +1 -0
  96. package/dist/actions/graphql/helpUrls.js +3 -0
  97. package/dist/actions/graphql/helpUrls.js.map +1 -0
  98. package/dist/actions/graphql/helpers.js +11 -0
  99. package/dist/actions/graphql/helpers.js.map +1 -0
  100. package/dist/actions/graphql/resolveApiGeneration.js +43 -0
  101. package/dist/actions/graphql/resolveApiGeneration.js.map +1 -0
  102. package/dist/actions/graphql/types.js +1 -1
  103. package/dist/actions/graphql/types.js.map +1 -1
  104. package/dist/actions/init/bootstrapLocalTemplate.js +137 -0
  105. package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -0
  106. package/dist/actions/init/bootstrapRemoteTemplate.js +109 -0
  107. package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -0
  108. package/dist/actions/init/bootstrapTemplate.js +32 -0
  109. package/dist/actions/init/bootstrapTemplate.js.map +1 -0
  110. package/dist/actions/init/checkNextJsReactCompatibility.js +21 -0
  111. package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -0
  112. package/dist/actions/init/countNestedFolders.js +6 -0
  113. package/dist/actions/init/countNestedFolders.js.map +1 -0
  114. package/dist/actions/init/createAppCliConfig.js +19 -0
  115. package/dist/actions/init/createAppCliConfig.js.map +1 -0
  116. package/dist/actions/init/createCliConfig.js +27 -0
  117. package/dist/actions/init/createCliConfig.js.map +1 -0
  118. package/dist/actions/init/createPackageManifest.js +86 -0
  119. package/dist/actions/init/createPackageManifest.js.map +1 -0
  120. package/dist/actions/init/createStudioConfig.js +41 -0
  121. package/dist/actions/init/createStudioConfig.js.map +1 -0
  122. package/dist/actions/init/env/createOrAppendEnvVars.js +25 -0
  123. package/dist/actions/init/env/createOrAppendEnvVars.js.map +1 -0
  124. package/dist/actions/init/env/parseAndUpdateEnvVars.js +42 -0
  125. package/dist/actions/init/env/parseAndUpdateEnvVars.js.map +1 -0
  126. package/dist/actions/init/env/writeEnvVarsToFile.js +49 -0
  127. package/dist/actions/init/env/writeEnvVarsToFile.js.map +1 -0
  128. package/dist/actions/init/fetchPostInitPrompt.js +30 -0
  129. package/dist/actions/init/fetchPostInitPrompt.js.map +1 -0
  130. package/dist/actions/init/git.js +65 -0
  131. package/dist/actions/init/git.js.map +1 -0
  132. package/dist/actions/init/processTemplate.js +56 -0
  133. package/dist/actions/init/processTemplate.js.map +1 -0
  134. package/dist/actions/init/remoteTemplate.js +2 -40
  135. package/dist/actions/init/remoteTemplate.js.map +1 -1
  136. package/dist/actions/init/resolvePackageManager.js +20 -0
  137. package/dist/actions/init/resolvePackageManager.js.map +1 -0
  138. package/dist/actions/init/templates/appQuickstart.js +28 -0
  139. package/dist/actions/init/templates/appQuickstart.js.map +1 -0
  140. package/dist/actions/init/templates/appSanityUi.js +30 -0
  141. package/dist/actions/init/templates/appSanityUi.js.map +1 -0
  142. package/dist/actions/init/templates/blog.js +4 -0
  143. package/dist/actions/init/templates/blog.js.map +1 -0
  144. package/dist/actions/init/templates/clean.js +4 -0
  145. package/dist/actions/init/templates/clean.js.map +1 -0
  146. package/dist/actions/init/templates/getStarted.js +35 -0
  147. package/dist/actions/init/templates/getStarted.js.map +1 -0
  148. package/dist/actions/init/templates/index.js +23 -0
  149. package/dist/actions/init/templates/index.js.map +1 -0
  150. package/dist/actions/init/templates/moviedb.js +34 -0
  151. package/dist/actions/init/templates/moviedb.js.map +1 -0
  152. package/dist/actions/init/templates/nextjs/index.js +213 -0
  153. package/dist/actions/init/templates/nextjs/index.js.map +1 -0
  154. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js +247 -0
  155. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js.map +1 -0
  156. package/dist/actions/init/templates/quickstart.js +4 -0
  157. package/dist/actions/init/templates/quickstart.js.map +1 -0
  158. package/dist/actions/init/templates/shopify.js +77 -0
  159. package/dist/actions/init/templates/shopify.js.map +1 -0
  160. package/dist/actions/init/templates/shopifyOnline.js +49 -0
  161. package/dist/actions/init/templates/shopifyOnline.js.map +1 -0
  162. package/dist/actions/init/types.js.map +1 -0
  163. package/dist/actions/init/updateInitialTemplateMetadata.js +17 -0
  164. package/dist/actions/init/updateInitialTemplateMetadata.js.map +1 -0
  165. package/dist/actions/mcp/detectAvailableEditors.js +64 -59
  166. package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
  167. package/dist/actions/mcp/editorConfigs.js +147 -0
  168. package/dist/actions/mcp/editorConfigs.js.map +1 -0
  169. package/dist/actions/mcp/promptForMCPSetup.js +24 -0
  170. package/dist/actions/mcp/promptForMCPSetup.js.map +1 -0
  171. package/dist/actions/mcp/setupMCP.js +88 -0
  172. package/dist/actions/mcp/setupMCP.js.map +1 -0
  173. package/dist/actions/mcp/types.js +3 -0
  174. package/dist/actions/mcp/types.js.map +1 -0
  175. package/dist/actions/mcp/writeMCPConfig.js +24 -29
  176. package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
  177. package/dist/actions/media/importMedia.js +2 -2
  178. package/dist/actions/media/importMedia.js.map +1 -1
  179. package/dist/actions/organizations/getOrganization.js +67 -0
  180. package/dist/actions/organizations/getOrganization.js.map +1 -0
  181. package/dist/actions/organizations/hasProjectAttachGrant.js +1 -1
  182. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -1
  183. package/dist/actions/organizations/validateOrganizationName.js +10 -0
  184. package/dist/actions/organizations/validateOrganizationName.js.map +1 -0
  185. package/dist/actions/preview/previewAction.js +2 -1
  186. package/dist/actions/preview/previewAction.js.map +1 -1
  187. package/dist/actions/projects/getManageUrl.js +7 -0
  188. package/dist/actions/projects/getManageUrl.js.map +1 -0
  189. package/dist/actions/projects/validateProjectName.js +11 -0
  190. package/dist/actions/projects/validateProjectName.js.map +1 -0
  191. package/dist/actions/schema/deleteSchemaAction.js +2 -2
  192. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  193. package/dist/actions/schema/deploySchemas.js +5 -5
  194. package/dist/actions/schema/deploySchemas.js.map +1 -1
  195. package/dist/actions/schema/extractSanitySchema.worker.js +38 -0
  196. package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -0
  197. package/dist/actions/schema/extractSchema.js +77 -0
  198. package/dist/actions/schema/extractSchema.js.map +1 -0
  199. package/dist/actions/schema/formatSchemaValidation.js +17 -5
  200. package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
  201. package/dist/actions/schema/listSchemas.js +4 -4
  202. package/dist/actions/schema/listSchemas.js.map +1 -1
  203. package/dist/actions/schema/metafile.js.map +1 -1
  204. package/dist/actions/schema/types.js +9 -0
  205. package/dist/actions/schema/types.js.map +1 -0
  206. package/dist/actions/schema/utils/debug.js +1 -0
  207. package/dist/actions/schema/utils/debug.js.map +1 -1
  208. package/dist/actions/schema/utils/extractValidationFromSchemaError.js +12 -0
  209. package/dist/actions/schema/utils/extractValidationFromSchemaError.js.map +1 -0
  210. package/dist/actions/schema/utils/manifestExtractor.js +2 -2
  211. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  212. package/dist/actions/schema/utils/manifestReader.js +2 -2
  213. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  214. package/dist/actions/schema/validateAction.js +7 -17
  215. package/dist/actions/schema/validateAction.js.map +1 -1
  216. package/dist/{threads/validateSchema.js → actions/schema/validateSchema.worker.js} +35 -26
  217. package/dist/actions/schema/validateSchema.worker.js.map +1 -0
  218. package/dist/actions/telemetry/getLearnMoreMessage.js.map +1 -1
  219. package/dist/actions/telemetry/getStatusDisplay.js.map +1 -1
  220. package/dist/actions/telemetry/getStatusMessage.js.map +1 -1
  221. package/dist/actions/telemetry/resolveConsent.js +1 -2
  222. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  223. package/dist/actions/telemetry/setConsent.js +1 -1
  224. package/dist/actions/telemetry/setConsent.js.map +1 -1
  225. package/dist/actions/telemetry/telemetryDisclosure.js +3 -3
  226. package/dist/actions/telemetry/telemetryDisclosure.js.map +1 -1
  227. package/dist/actions/versions/getFormatters.js +2 -2
  228. package/dist/actions/versions/getFormatters.js.map +1 -1
  229. package/dist/commands/backup/disable.js +4 -3
  230. package/dist/commands/backup/disable.js.map +1 -1
  231. package/dist/commands/backup/download.js +7 -7
  232. package/dist/commands/backup/download.js.map +1 -1
  233. package/dist/commands/backup/enable.js +3 -3
  234. package/dist/commands/backup/enable.js.map +1 -1
  235. package/dist/commands/cors/add.js +13 -9
  236. package/dist/commands/cors/add.js.map +1 -1
  237. package/dist/commands/dataset/copy.js +6 -5
  238. package/dist/commands/dataset/copy.js.map +1 -1
  239. package/dist/commands/dataset/create.js +14 -7
  240. package/dist/commands/dataset/create.js.map +1 -1
  241. package/dist/commands/dataset/delete.js +12 -2
  242. package/dist/commands/dataset/delete.js.map +1 -1
  243. package/dist/commands/dataset/export.js +1 -2
  244. package/dist/commands/dataset/export.js.map +1 -1
  245. package/dist/commands/debug.js +5 -5
  246. package/dist/commands/debug.js.map +1 -1
  247. package/dist/commands/dev.js +5 -2
  248. package/dist/commands/dev.js.map +1 -1
  249. package/dist/commands/docs/search.js +3 -2
  250. package/dist/commands/docs/search.js.map +1 -1
  251. package/dist/commands/documents/validate.js +44 -40
  252. package/dist/commands/documents/validate.js.map +1 -1
  253. package/dist/commands/graphql/deploy.js +429 -0
  254. package/dist/commands/graphql/deploy.js.map +1 -0
  255. package/dist/commands/graphql/list.js +6 -6
  256. package/dist/commands/graphql/list.js.map +1 -1
  257. package/dist/commands/hook/logs.js +4 -4
  258. package/dist/commands/hook/logs.js.map +1 -1
  259. package/dist/commands/init.js +607 -86
  260. package/dist/commands/init.js.map +1 -1
  261. package/dist/commands/login.js +2 -2
  262. package/dist/commands/login.js.map +1 -1
  263. package/dist/commands/manage.js +2 -1
  264. package/dist/commands/manage.js.map +1 -1
  265. package/dist/commands/mcp/configure.js +13 -74
  266. package/dist/commands/mcp/configure.js.map +1 -1
  267. package/dist/commands/media/create-aspect.js +7 -6
  268. package/dist/commands/media/create-aspect.js.map +1 -1
  269. package/dist/commands/media/delete-aspect.js +5 -4
  270. package/dist/commands/media/delete-aspect.js.map +1 -1
  271. package/dist/commands/media/deploy-aspect.js +9 -8
  272. package/dist/commands/media/deploy-aspect.js.map +1 -1
  273. package/dist/commands/media/export.js +1 -2
  274. package/dist/commands/media/export.js.map +1 -1
  275. package/dist/commands/media/import.js +4 -4
  276. package/dist/commands/media/import.js.map +1 -1
  277. package/dist/commands/preview.js +10 -24
  278. package/dist/commands/preview.js.map +1 -1
  279. package/dist/commands/projects/create.js +181 -0
  280. package/dist/commands/projects/create.js.map +1 -0
  281. package/dist/commands/projects/list.js +2 -2
  282. package/dist/commands/projects/list.js.map +1 -1
  283. package/dist/commands/schema/extract.js +7 -12
  284. package/dist/commands/schema/extract.js.map +1 -1
  285. package/dist/commands/schema/validate.js +10 -2
  286. package/dist/commands/schema/validate.js.map +1 -1
  287. package/dist/commands/undeploy.js +9 -8
  288. package/dist/commands/undeploy.js.map +1 -1
  289. package/dist/commands/users/list.js +3 -3
  290. package/dist/commands/users/list.js.map +1 -1
  291. package/dist/commands/versions.js +2 -2
  292. package/dist/commands/versions.js.map +1 -1
  293. package/dist/config/createCliConfig.js +1 -0
  294. package/dist/config/createCliConfig.js.map +1 -1
  295. package/dist/hooks/prerun/flushTelemetry.worker.js +1 -1
  296. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -1
  297. package/dist/hooks/prerun/injectEnvVariables.js +31 -0
  298. package/dist/hooks/prerun/injectEnvVariables.js.map +1 -0
  299. package/dist/hooks/prerun/setupTelemetry.js +6 -5
  300. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  301. package/dist/hooks/prerun/warnings.js +6 -0
  302. package/dist/hooks/prerun/warnings.js.map +1 -0
  303. package/dist/index.d.ts +2326 -6
  304. package/dist/index.js +0 -1
  305. package/dist/index.js.map +1 -1
  306. package/dist/prompts/init/nextjs.js +56 -0
  307. package/dist/prompts/init/nextjs.js.map +1 -0
  308. package/dist/prompts/init/promptForTypescript.js +0 -6
  309. package/dist/prompts/init/promptForTypescript.js.map +1 -1
  310. package/dist/prompts/promptForDefaultConfig.js +12 -0
  311. package/dist/prompts/promptForDefaultConfig.js.map +1 -0
  312. package/dist/prompts/promptForOrganizationName.js +11 -0
  313. package/dist/prompts/promptForOrganizationName.js.map +1 -0
  314. package/dist/prompts/promptForProjectName.js +11 -0
  315. package/dist/prompts/promptForProjectName.js.map +1 -0
  316. package/dist/server/previewServer.js +15 -9
  317. package/dist/server/previewServer.js.map +1 -1
  318. package/dist/services/documents.js +56 -0
  319. package/dist/services/documents.js.map +1 -0
  320. package/dist/services/getUrlHeaders.js +36 -0
  321. package/dist/services/getUrlHeaders.js.map +1 -0
  322. package/dist/services/graphql.js +64 -0
  323. package/dist/services/graphql.js.map +1 -1
  324. package/dist/services/mcp.js +16 -0
  325. package/dist/services/mcp.js.map +1 -1
  326. package/dist/services/organizations.js +1 -1
  327. package/dist/services/organizations.js.map +1 -1
  328. package/dist/services/projects.js +37 -0
  329. package/dist/services/projects.js.map +1 -1
  330. package/dist/services/telemetry.js +62 -2
  331. package/dist/services/telemetry.js.map +1 -1
  332. package/dist/studioDependencies.js +24 -0
  333. package/dist/studioDependencies.js.map +1 -0
  334. package/dist/telemetry/build.telemetry.js +13 -0
  335. package/dist/telemetry/build.telemetry.js.map +1 -0
  336. package/dist/telemetry/extractSchema.telemetry.js +8 -0
  337. package/dist/telemetry/extractSchema.telemetry.js.map +1 -0
  338. package/dist/telemetry/init.telemetry.js +8 -0
  339. package/dist/telemetry/init.telemetry.js.map +1 -0
  340. package/dist/telemetry/login.telemetry.js +8 -0
  341. package/dist/telemetry/login.telemetry.js.map +1 -0
  342. package/dist/telemetry/mcp.telemetry.js +8 -0
  343. package/dist/telemetry/mcp.telemetry.js.map +1 -0
  344. package/dist/types.js +3 -1
  345. package/dist/types.js.map +1 -1
  346. package/dist/typings/deepSortObject.d.js +2 -0
  347. package/dist/typings/deepSortObject.d.js.map +1 -0
  348. package/dist/util/appId.js +5 -5
  349. package/dist/util/appId.js.map +1 -1
  350. package/dist/util/cliClient.js +8 -7
  351. package/dist/util/cliClient.js.map +1 -1
  352. package/dist/util/copy.js +37 -0
  353. package/dist/util/copy.js.map +1 -0
  354. package/dist/util/formatSize.js +2 -2
  355. package/dist/util/formatSize.js.map +1 -1
  356. package/dist/util/frameworkPort.js +61 -0
  357. package/dist/util/frameworkPort.js.map +1 -0
  358. package/dist/util/fsUtils.js +34 -0
  359. package/dist/util/fsUtils.js.map +1 -0
  360. package/dist/util/getProjectDefaults.js +77 -0
  361. package/dist/util/getProjectDefaults.js.map +1 -0
  362. package/dist/util/getSanityEnv.js +3 -0
  363. package/dist/util/getSanityEnv.js.map +1 -0
  364. package/dist/util/importStudioConfig.js +0 -3
  365. package/dist/util/importStudioConfig.js.map +1 -1
  366. package/dist/util/loadEnv.js +1 -6
  367. package/dist/util/loadEnv.js.map +1 -1
  368. package/dist/util/packageManager/packageManagerChoice.js +8 -0
  369. package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
  370. package/dist/util/readPackageJson.js +3 -1
  371. package/dist/util/readPackageJson.js.map +1 -1
  372. package/dist/util/readdirRecursive.js +24 -0
  373. package/dist/util/readdirRecursive.js.map +1 -0
  374. package/dist/util/resolveLatestVersions.js +21 -0
  375. package/dist/util/resolveLatestVersions.js.map +1 -0
  376. package/dist/util/warnAboutMissingAppId.js +6 -2
  377. package/dist/util/warnAboutMissingAppId.js.map +1 -1
  378. package/dist/util/warnOnNonProductionEnvironment.js +18 -0
  379. package/dist/util/warnOnNonProductionEnvironment.js.map +1 -0
  380. package/oclif.config.js +6 -1
  381. package/oclif.manifest.json +200 -3
  382. package/package.json +48 -35
  383. package/dist/SanityHelp.d.ts +0 -4
  384. package/dist/actions/auth/authServer.d.ts +0 -33
  385. package/dist/actions/auth/getProviderName.d.ts +0 -8
  386. package/dist/actions/auth/login/getProvider.d.ts +0 -15
  387. package/dist/actions/auth/login/getSSOProvider.d.ts +0 -13
  388. package/dist/actions/auth/login/login.d.ts +0 -20
  389. package/dist/actions/auth/login/promptProviders.d.ts +0 -10
  390. package/dist/actions/auth/login/samlProviderToLoginProvider.d.ts +0 -9
  391. package/dist/actions/auth/types.d.ts +0 -26
  392. package/dist/actions/backup/archiveDir.d.ts +0 -10
  393. package/dist/actions/backup/assertDatasetExist.d.ts +0 -8
  394. package/dist/actions/backup/backupDownloadDebug.d.ts +0 -1
  395. package/dist/actions/backup/cleanupTmpDir.d.ts +0 -6
  396. package/dist/actions/backup/constants.d.ts +0 -1
  397. package/dist/actions/backup/downloadAsset.d.ts +0 -9
  398. package/dist/actions/backup/downloadDocument.d.ts +0 -7
  399. package/dist/actions/backup/fetchNextBackupPage.d.ts +0 -23
  400. package/dist/actions/backup/progressSpinner.d.ts +0 -14
  401. package/dist/actions/build/buildApp.d.ts +0 -7
  402. package/dist/actions/build/buildDebug.d.ts +0 -1
  403. package/dist/actions/build/buildStaticFiles.d.ts +0 -35
  404. package/dist/actions/build/buildStudio.d.ts +0 -7
  405. package/dist/actions/build/buildVendorDependencies.d.ts +0 -11
  406. package/dist/actions/build/checkRequiredDependencies.d.ts +0 -22
  407. package/dist/actions/build/checkStudioDependencyVersions.d.ts +0 -2
  408. package/dist/actions/build/createExternalFromImportMap.d.ts +0 -11
  409. package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.d.ts +0 -6
  410. package/dist/actions/build/decorateIndexWithBridgeScript.d.ts +0 -8
  411. package/dist/actions/build/determineBasePath.d.ts +0 -7
  412. package/dist/actions/build/generateWebManifest.d.ts +0 -15
  413. package/dist/actions/build/getAppEnvVars.d.ts +0 -6
  414. package/dist/actions/build/getAutoUpdatesImportMap.d.ts +0 -21
  415. package/dist/actions/build/getEntryModule.d.ts +0 -7
  416. package/dist/actions/build/getPossibleDocumentComponentLocations.d.ts +0 -4
  417. package/dist/actions/build/getStudioEnvVars.d.ts +0 -6
  418. package/dist/actions/build/getStudioEnvironmentVariables.d.ts +0 -52
  419. package/dist/actions/build/getViteConfig.d.ts +0 -66
  420. package/dist/actions/build/normalizeBasePath.d.ts +0 -6
  421. package/dist/actions/build/renderDocument.d.ts +0 -15
  422. package/dist/actions/build/renderDocument.worker.d.ts +0 -1
  423. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.d.ts +0 -6
  424. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.d.ts +0 -19
  425. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.d.ts +0 -13
  426. package/dist/actions/build/renderDocumentWorker/components/Favicons.d.ts +0 -2
  427. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.d.ts +0 -3
  428. package/dist/actions/build/renderDocumentWorker/components/NoJavascript.d.ts +0 -3
  429. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.d.ts +0 -5
  430. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.d.ts +0 -8
  431. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.d.ts +0 -21
  432. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.d.ts +0 -8
  433. package/dist/actions/build/renderDocumentWorker/types.d.ts +0 -8
  434. package/dist/actions/build/shouldAutoUpdate.d.ts +0 -16
  435. package/dist/actions/build/types.d.ts +0 -13
  436. package/dist/actions/build/writeFavicons.d.ts +0 -1
  437. package/dist/actions/build/writeSanityRuntime.d.ts +0 -19
  438. package/dist/actions/build/writeWebManifest.d.ts +0 -4
  439. package/dist/actions/codemods/deskRename.d.ts +0 -2
  440. package/dist/actions/codemods/index.d.ts +0 -5
  441. package/dist/actions/codemods/partsTypeDirective.d.ts +0 -2
  442. package/dist/actions/codemods/reactIconsV3.d.ts +0 -2
  443. package/dist/actions/codemods/types.d.ts +0 -8
  444. package/dist/actions/cors/filterAndValidateOrigin.d.ts +0 -7
  445. package/dist/actions/dataset/create.d.ts +0 -49
  446. package/dist/actions/dataset/determineDatasetAclMode.d.ts +0 -37
  447. package/dist/actions/dataset/processAliasName.d.ts +0 -9
  448. package/dist/actions/dataset/validateDatasetAliasName.d.ts +0 -1
  449. package/dist/actions/dataset/validateDatasetName.d.ts +0 -13
  450. package/dist/actions/debug/gatherDebugInfo.d.ts +0 -2
  451. package/dist/actions/debug/getGlobalConfigLocation.d.ts +0 -1
  452. package/dist/actions/debug/types.d.ts +0 -30
  453. package/dist/actions/deploy/checkDir.d.ts +0 -8
  454. package/dist/actions/deploy/createStudioUserApplication.d.ts +0 -2
  455. package/dist/actions/deploy/createUserApplicationForApp.d.ts +0 -2
  456. package/dist/actions/deploy/deployApp.d.ts +0 -7
  457. package/dist/actions/deploy/deployDebug.d.ts +0 -1
  458. package/dist/actions/deploy/deployStudio.d.ts +0 -2
  459. package/dist/actions/deploy/findUserApplicationForApp.d.ts +0 -15
  460. package/dist/actions/deploy/findUserApplicationForStudio.d.ts +0 -13
  461. package/dist/actions/deploy/types.d.ts +0 -11
  462. package/dist/actions/dev/devAction.d.ts +0 -4
  463. package/dist/actions/dev/devDebug.d.ts +0 -1
  464. package/dist/actions/dev/getCoreAppUrl.d.ts +0 -5
  465. package/dist/actions/dev/getDevServerConfig.d.ts +0 -9
  466. package/dist/actions/dev/startAppDevServer.d.ts +0 -4
  467. package/dist/actions/dev/startStudioDevServer.d.ts +0 -4
  468. package/dist/actions/dev/types.d.ts +0 -10
  469. package/dist/actions/docs/normalizeDocsPath.d.ts +0 -8
  470. package/dist/actions/documents/constants.d.ts +0 -1
  471. package/dist/actions/documents/editor.d.ts +0 -11
  472. package/dist/actions/documents/types.d.ts +0 -2
  473. package/dist/actions/documents/validate.d.ts +0 -26
  474. package/dist/actions/documents/validation/reporters/index.d.ts +0 -5
  475. package/dist/actions/documents/validation/reporters/jsonReporter.d.ts +0 -2
  476. package/dist/actions/documents/validation/reporters/ndjsonReporter.d.ts +0 -2
  477. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.d.ts +0 -10
  478. package/dist/actions/documents/validation/reporters/prettyReporter/index.d.ts +0 -1
  479. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.d.ts +0 -5
  480. package/dist/actions/documents/validation/reporters/prettyReporter/util.d.ts +0 -53
  481. package/dist/actions/exec/execScript.d.ts +0 -11
  482. package/dist/actions/graphql/getGraphQLAPIs.d.ts +0 -2
  483. package/dist/actions/graphql/getGraphQLAPIs.worker.d.ts +0 -1
  484. package/dist/actions/graphql/types.d.ts +0 -68
  485. package/dist/actions/hook/constants.d.ts +0 -1
  486. package/dist/actions/hook/formatFailure.d.ts +0 -4
  487. package/dist/actions/hook/types.d.ts +0 -78
  488. package/dist/actions/init/constants.d.ts +0 -1
  489. package/dist/actions/init/determineAppTemplate.d.ts +0 -9
  490. package/dist/actions/init/remoteTemplate.d.ts +0 -23
  491. package/dist/actions/manifest/SchemaIcon.d.ts +0 -9
  492. package/dist/actions/manifest/extractAppManifest.d.ts +0 -20
  493. package/dist/actions/manifest/extractManifest.d.ts +0 -14
  494. package/dist/actions/manifest/extractWorkspaceManifest.d.ts +0 -3
  495. package/dist/actions/manifest/purifyConfig.d.ts +0 -10
  496. package/dist/actions/manifest/schemaTypeHelpers.d.ts +0 -17
  497. package/dist/actions/manifest/types.d.ts +0 -119
  498. package/dist/actions/mcp/detectAvailableEditors.d.ts +0 -8
  499. package/dist/actions/mcp/getEditorsWithExistingConfig.d.ts +0 -8
  500. package/dist/actions/mcp/getEditorsWithExistingConfig.js +0 -29
  501. package/dist/actions/mcp/getEditorsWithExistingConfig.js.map +0 -1
  502. package/dist/actions/mcp/writeMCPConfig.d.ts +0 -9
  503. package/dist/actions/media/getMediaLibraryConfig.d.ts +0 -2
  504. package/dist/actions/media/importAspects.d.ts +0 -52
  505. package/dist/actions/media/importMedia.d.ts +0 -55
  506. package/dist/actions/media/importMediaDebug.d.ts +0 -1
  507. package/dist/actions/organizations/getOrganizationChoices.d.ts +0 -6
  508. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +0 -2
  509. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +0 -1
  510. package/dist/actions/preview/getPreviewServerConfig.d.ts +0 -15
  511. package/dist/actions/preview/previewAction.d.ts +0 -10
  512. package/dist/actions/preview/types.d.ts +0 -2
  513. package/dist/actions/schema/deleteSchemaAction.d.ts +0 -23
  514. package/dist/actions/schema/deploySchemas.d.ts +0 -15
  515. package/dist/actions/schema/extract.d.ts +0 -7
  516. package/dist/actions/schema/extract.js +0 -38
  517. package/dist/actions/schema/extract.js.map +0 -1
  518. package/dist/actions/schema/formatSchemaValidation.d.ts +0 -3
  519. package/dist/actions/schema/listSchemas.d.ts +0 -12
  520. package/dist/actions/schema/metafile.d.ts +0 -21
  521. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -18
  522. package/dist/actions/schema/utils/debug.d.ts +0 -2
  523. package/dist/actions/schema/utils/manifestExtractor.d.ts +0 -9
  524. package/dist/actions/schema/utils/manifestReader.d.ts +0 -17
  525. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -2
  526. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +0 -29
  527. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +0 -14
  528. package/dist/actions/schema/utils/workspaceSchemaId.d.ts +0 -8
  529. package/dist/actions/schema/validateAction.d.ts +0 -11
  530. package/dist/actions/telemetry/fetchTelemetryConsent.d.ts +0 -11
  531. package/dist/actions/telemetry/fetchTelemetryConsent.js +0 -38
  532. package/dist/actions/telemetry/fetchTelemetryConsent.js.map +0 -1
  533. package/dist/actions/telemetry/getLearnMoreMessage.d.ts +0 -2
  534. package/dist/actions/telemetry/getStatusDisplay.d.ts +0 -2
  535. package/dist/actions/telemetry/getStatusMessage.d.ts +0 -2
  536. package/dist/actions/telemetry/isValidApiConsentStatus.d.ts +0 -20
  537. package/dist/actions/telemetry/isValidApiConsentStatus.js +0 -25
  538. package/dist/actions/telemetry/isValidApiConsentStatus.js.map +0 -1
  539. package/dist/actions/telemetry/resolveConsent.d.ts +0 -2
  540. package/dist/actions/telemetry/setConsent.d.ts +0 -13
  541. package/dist/actions/telemetry/telemetryDebug.d.ts +0 -1
  542. package/dist/actions/telemetry/telemetryDisclosure.d.ts +0 -1
  543. package/dist/actions/telemetry/telemetryLearnMoreMessage.d.ts +0 -2
  544. package/dist/actions/telemetry/types.d.ts +0 -14
  545. package/dist/actions/telemetry/types.js.map +0 -1
  546. package/dist/actions/tokens/constants.d.ts +0 -4
  547. package/dist/actions/tokens/types.d.ts +0 -32
  548. package/dist/actions/tokens/validateRole.d.ts +0 -9
  549. package/dist/actions/undeploy/getStudioOrAppUserApplication.d.ts +0 -9
  550. package/dist/actions/users/getMembersForProject.d.ts +0 -24
  551. package/dist/actions/users/getPendingInvitations.d.ts +0 -13
  552. package/dist/actions/users/types.d.ts +0 -39
  553. package/dist/actions/users/usersDebug.d.ts +0 -1
  554. package/dist/actions/users/validateEmail.d.ts +0 -1
  555. package/dist/actions/versions/buildPackageArray.d.ts +0 -18
  556. package/dist/actions/versions/filterSanityModules.d.ts +0 -8
  557. package/dist/actions/versions/findSanityModulesVersions.d.ts +0 -14
  558. package/dist/actions/versions/getFormatters.d.ts +0 -17
  559. package/dist/actions/versions/tryFindLatestVersion.d.ts +0 -8
  560. package/dist/actions/versions/types.d.ts +0 -14
  561. package/dist/actions/versions/versionsDebug.d.ts +0 -1
  562. package/dist/commands/backup/disable.d.ts +0 -13
  563. package/dist/commands/backup/download.d.ts +0 -21
  564. package/dist/commands/backup/enable.d.ts +0 -12
  565. package/dist/commands/backup/list.d.ts +0 -19
  566. package/dist/commands/build.d.ts +0 -18
  567. package/dist/commands/codemod.d.ts +0 -19
  568. package/dist/commands/cors/add.d.ts +0 -29
  569. package/dist/commands/cors/delete.d.ts +0 -13
  570. package/dist/commands/cors/list.d.ts +0 -9
  571. package/dist/commands/dataset/alias/create.d.ts +0 -13
  572. package/dist/commands/dataset/alias/delete.d.ts +0 -16
  573. package/dist/commands/dataset/alias/link.d.ts +0 -17
  574. package/dist/commands/dataset/alias/unlink.d.ts +0 -16
  575. package/dist/commands/dataset/copy.d.ts +0 -27
  576. package/dist/commands/dataset/create.d.ts +0 -15
  577. package/dist/commands/dataset/delete.d.ts +0 -15
  578. package/dist/commands/dataset/export.d.ts +0 -26
  579. package/dist/commands/dataset/import.d.ts +0 -1
  580. package/dist/commands/dataset/list.d.ts +0 -9
  581. package/dist/commands/dataset/visibility/get.d.ts +0 -12
  582. package/dist/commands/dataset/visibility/set.d.ts +0 -13
  583. package/dist/commands/debug.d.ts +0 -9
  584. package/dist/commands/deploy.d.ts +0 -23
  585. package/dist/commands/dev.d.ts +0 -14
  586. package/dist/commands/docs/browse.d.ts +0 -6
  587. package/dist/commands/docs/read.d.ts +0 -15
  588. package/dist/commands/docs/search.d.ts +0 -15
  589. package/dist/commands/documents/create.d.ts +0 -39
  590. package/dist/commands/documents/delete.d.ts +0 -17
  591. package/dist/commands/documents/get.d.ts +0 -16
  592. package/dist/commands/documents/query.d.ts +0 -19
  593. package/dist/commands/documents/validate.d.ts +0 -29
  594. package/dist/commands/exec.d.ts +0 -19
  595. package/dist/commands/graphql/list.d.ts +0 -9
  596. package/dist/commands/graphql/undeploy.d.ts +0 -16
  597. package/dist/commands/hook/attempt.d.ts +0 -13
  598. package/dist/commands/hook/create.d.ts +0 -9
  599. package/dist/commands/hook/delete.d.ts +0 -13
  600. package/dist/commands/hook/list.d.ts +0 -9
  601. package/dist/commands/hook/logs.d.ts +0 -19
  602. package/dist/commands/init.d.ts +0 -55
  603. package/dist/commands/install.d.ts +0 -10
  604. package/dist/commands/learn.d.ts +0 -6
  605. package/dist/commands/login.d.ts +0 -13
  606. package/dist/commands/logout.d.ts +0 -6
  607. package/dist/commands/manage.d.ts +0 -6
  608. package/dist/commands/manifest/extract.d.ts +0 -12
  609. package/dist/commands/mcp/configure.d.ts +0 -9
  610. package/dist/commands/media/create-aspect.d.ts +0 -9
  611. package/dist/commands/media/delete-aspect.d.ts +0 -16
  612. package/dist/commands/media/deploy-aspect.d.ts +0 -20
  613. package/dist/commands/media/export.d.ts +0 -21
  614. package/dist/commands/media/import.d.ts +0 -18
  615. package/dist/commands/openapi/get.d.ts +0 -17
  616. package/dist/commands/openapi/list.d.ts +0 -14
  617. package/dist/commands/preview.d.ts +0 -17
  618. package/dist/commands/projects/list.d.ts +0 -13
  619. package/dist/commands/schema/delete.d.ts +0 -16
  620. package/dist/commands/schema/deploy.d.ts +0 -16
  621. package/dist/commands/schema/extract.d.ts +0 -15
  622. package/dist/commands/schema/list.d.ts +0 -15
  623. package/dist/commands/schema/validate.d.ts +0 -15
  624. package/dist/commands/telemetry/disable.d.ts +0 -8
  625. package/dist/commands/telemetry/enable.d.ts +0 -8
  626. package/dist/commands/telemetry/status.d.ts +0 -8
  627. package/dist/commands/tokens/add.d.ts +0 -19
  628. package/dist/commands/tokens/delete.d.ts +0 -17
  629. package/dist/commands/tokens/list.d.ts +0 -12
  630. package/dist/commands/undeploy.d.ts +0 -8
  631. package/dist/commands/users/invite.d.ts +0 -17
  632. package/dist/commands/users/list.d.ts +0 -16
  633. package/dist/commands/versions.d.ts +0 -6
  634. package/dist/config/createCliConfig.d.ts +0 -73
  635. package/dist/config/defineCliConfig.d.ts +0 -3
  636. package/dist/hooks/prerun/flushTelemetry.worker.d.ts +0 -2
  637. package/dist/hooks/prerun/setupTelemetry.d.ts +0 -2
  638. package/dist/prompts/init/promptForTypescript.d.ts +0 -2
  639. package/dist/prompts/promptForDataset.d.ts +0 -17
  640. package/dist/prompts/promptForDatasetAclMode.d.ts +0 -9
  641. package/dist/prompts/promptForDatasetAliasName.d.ts +0 -4
  642. package/dist/prompts/promptForDatasetName.d.ts +0 -4
  643. package/dist/prompts/promptForMediaLibrary.d.ts +0 -15
  644. package/dist/prompts/selectDataset.d.ts +0 -3
  645. package/dist/prompts/selectMediaLibrary.d.ts +0 -5
  646. package/dist/server/devServer.d.ts +0 -24
  647. package/dist/server/gracefulServerDeath.d.ts +0 -3
  648. package/dist/server/previewServer.d.ts +0 -19
  649. package/dist/server/serverDebug.d.ts +0 -1
  650. package/dist/server/vite/plugin-sanity-basepath-redirect.d.ts +0 -2
  651. package/dist/server/vite/plugin-sanity-build-entries.d.ts +0 -9
  652. package/dist/server/vite/plugin-sanity-favicons.d.ts +0 -17
  653. package/dist/server/vite/plugin-sanity-runtime-rewrite.d.ts +0 -2
  654. package/dist/services/auth.d.ts +0 -2
  655. package/dist/services/backup.d.ts +0 -37
  656. package/dist/services/cors.d.ts +0 -23
  657. package/dist/services/datasetAliases.d.ts +0 -31
  658. package/dist/services/datasets.d.ts +0 -64
  659. package/dist/services/docs.d.ts +0 -15
  660. package/dist/services/getProjectFeatures.d.ts +0 -5
  661. package/dist/services/graphql.d.ts +0 -23
  662. package/dist/services/hooks.d.ts +0 -16
  663. package/dist/services/mcp.d.ts +0 -29
  664. package/dist/services/mediaLibraries.d.ts +0 -52
  665. package/dist/services/organizations.d.ts +0 -42
  666. package/dist/services/plans.d.ts +0 -2
  667. package/dist/services/projects.d.ts +0 -33
  668. package/dist/services/schemas.d.ts +0 -4
  669. package/dist/services/telemetry.d.ts +0 -2
  670. package/dist/services/tokens.d.ts +0 -43
  671. package/dist/services/user.d.ts +0 -15
  672. package/dist/services/userApplications.d.ts +0 -77
  673. package/dist/telemetry/cli.telemetry.d.ts +0 -20
  674. package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +0 -5
  675. package/dist/telemetry/store/cleanupOldTelemetryFiles.js +0 -30
  676. package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +0 -1
  677. package/dist/telemetry/store/createTelemetryStore.d.ts +0 -39
  678. package/dist/telemetry/store/createTelemetryStore.js +0 -95
  679. package/dist/telemetry/store/createTelemetryStore.js.map +0 -1
  680. package/dist/telemetry/store/createTraceId.d.ts +0 -10
  681. package/dist/telemetry/store/createTraceId.js +0 -10
  682. package/dist/telemetry/store/createTraceId.js.map +0 -1
  683. package/dist/telemetry/store/debug.d.ts +0 -5
  684. package/dist/telemetry/store/debug.js +0 -7
  685. package/dist/telemetry/store/debug.js.map +0 -1
  686. package/dist/telemetry/store/findTelemetryFiles.d.ts +0 -13
  687. package/dist/telemetry/store/findTelemetryFiles.js +0 -34
  688. package/dist/telemetry/store/findTelemetryFiles.js.map +0 -1
  689. package/dist/telemetry/store/flushTelemetryFiles.d.ts +0 -20
  690. package/dist/telemetry/store/flushTelemetryFiles.js +0 -107
  691. package/dist/telemetry/store/flushTelemetryFiles.js.map +0 -1
  692. package/dist/telemetry/store/generateTelemetryFilePath.d.ts +0 -17
  693. package/dist/telemetry/store/generateTelemetryFilePath.js +0 -30
  694. package/dist/telemetry/store/generateTelemetryFilePath.js.map +0 -1
  695. package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +0 -27
  696. package/dist/telemetry/store/getTelemetryBaseInfo.js +0 -34
  697. package/dist/telemetry/store/getTelemetryBaseInfo.js.map +0 -1
  698. package/dist/telemetry/store/logger.d.ts +0 -6
  699. package/dist/telemetry/store/logger.js +0 -54
  700. package/dist/telemetry/store/logger.js.map +0 -1
  701. package/dist/telemetry/store/trace.d.ts +0 -6
  702. package/dist/telemetry/store/trace.js +0 -150
  703. package/dist/telemetry/store/trace.js.map +0 -1
  704. package/dist/telemetry/utils/readNDJSON.d.ts +0 -10
  705. package/dist/telemetry/utils/readNDJSON.js +0 -18
  706. package/dist/telemetry/utils/readNDJSON.js.map +0 -1
  707. package/dist/threads/configClient.d.ts +0 -1
  708. package/dist/threads/configClient.js.map +0 -1
  709. package/dist/threads/registerBrowserEnv.d.ts +0 -1
  710. package/dist/threads/registerBrowserEnv.js.map +0 -1
  711. package/dist/threads/validateDocuments.d.ts +0 -45
  712. package/dist/threads/validateDocuments.js.map +0 -1
  713. package/dist/threads/validateSchema.d.ts +0 -35
  714. package/dist/threads/validateSchema.js.map +0 -1
  715. package/dist/types.d.ts +0 -16
  716. package/dist/util/absolutify.d.ts +0 -6
  717. package/dist/util/appId.d.ts +0 -18
  718. package/dist/util/canLaunchBrowser.d.ts +0 -1
  719. package/dist/util/cliClient.d.ts +0 -13
  720. package/dist/util/compareDependencyVersions.d.ts +0 -35
  721. package/dist/util/copyDir.d.ts +0 -20
  722. package/dist/util/detectRuntime.d.ts +0 -8
  723. package/dist/util/determineIsApp.d.ts +0 -7
  724. package/dist/util/dirIsEmptyOrNonExistent.d.ts +0 -1
  725. package/dist/util/ensureTrailingSlash.d.ts +0 -9
  726. package/dist/util/errorMessages.d.ts +0 -4
  727. package/dist/util/extractDocumentsFromNdjsonOrTarball.d.ts +0 -6
  728. package/dist/util/findNdjsonEntry.d.ts +0 -7
  729. package/dist/util/formatSize.d.ts +0 -6
  730. package/dist/util/getCliVersion.d.ts +0 -7
  731. package/dist/util/getErrorMessage.d.ts +0 -8
  732. package/dist/util/getLocalPackageVersion.d.ts +0 -9
  733. package/dist/util/getSharedServerConfig.d.ts +0 -30
  734. package/dist/util/getWorkspace.d.ts +0 -3
  735. package/dist/util/humanFileSize.d.ts +0 -1
  736. package/dist/util/importStudioConfig.d.ts +0 -1
  737. package/dist/util/isPathDirName.d.ts +0 -1
  738. package/dist/util/isSanityDocumentish.d.ts +0 -19
  739. package/dist/util/isStaging.d.ts +0 -7
  740. package/dist/util/isStaging.js +0 -10
  741. package/dist/util/isStaging.js.map +0 -1
  742. package/dist/util/loadEnv.d.ts +0 -1
  743. package/dist/util/moduleFormatUtils.d.ts +0 -3
  744. package/dist/util/packageManager/installPackages.d.ts +0 -18
  745. package/dist/util/packageManager/packageManagerChoice.d.ts +0 -29
  746. package/dist/util/packageManager/upgradePackages.d.ts +0 -17
  747. package/dist/util/parseArguments.d.ts +0 -35
  748. package/dist/util/pluralize.d.ts +0 -8
  749. package/dist/util/readModuleVersion.d.ts +0 -8
  750. package/dist/util/readPackageJson.d.ts +0 -31
  751. package/dist/util/readPackageManifest.d.ts +0 -21
  752. package/dist/util/toInt.d.ts +0 -1
  753. package/dist/util/trimHashFromVersion.d.ts +0 -5
  754. package/dist/util/uniqBy.d.ts +0 -1
  755. package/dist/util/validation/validateDocumentsUtils.d.ts +0 -12
  756. package/dist/util/warnAboutMissingAppId.d.ts +0 -7
  757. package/dist/util/workerChannels.d.ts +0 -59
  758. /package/dist/actions/{telemetry → init}/types.js +0 -0
@@ -0,0 +1,49 @@
1
+ const configTemplate = `
2
+ import {shopifyAssets} from 'sanity-plugin-shopify-assets'
3
+ import {defineConfig, isDev} from 'sanity'
4
+ import {structureTool} from 'sanity/structure'
5
+ import {visionTool} from '@sanity/vision'
6
+ import {shopifyDocumentActions} from './plugins/shopifyDocumentActions'
7
+ import {schemaTypes} from './schemaTypes'
8
+ import {structure} from './structure'
9
+ import {SHOPIFY_STORE_ID} from './constants'
10
+
11
+ const devOnlyPlugins = [visionTool()]
12
+
13
+ export default defineConfig({
14
+ name: '%sourceName%',
15
+ title: '%projectName%',
16
+
17
+ projectId: '%projectId%',
18
+ dataset: '%dataset%',
19
+
20
+ plugins: [
21
+ structureTool({structure}),
22
+ shopifyDocumentActions(),
23
+ shopifyAssets({
24
+ shopifyDomain: SHOPIFY_STORE_ID,
25
+ }),
26
+ ...(isDev ? devOnlyPlugins : []),
27
+ ],
28
+
29
+ schema: {
30
+ types: schemaTypes,
31
+ },
32
+ })
33
+ `;
34
+ const shopifyTemplate = {
35
+ configTemplate,
36
+ dependencies: {
37
+ '@portabletext/toolkit': '^2.0.1',
38
+ '@sanity/icons': '^2.11.0',
39
+ '@sanity/ui': '^2.0.0',
40
+ '@types/lodash.get': '^4.4.7',
41
+ 'lodash.get': '^4.4.2',
42
+ 'pluralize-esm': '^9.0.4',
43
+ 'sanity-plugin-shopify-assets': '^1.1.0'
44
+ },
45
+ typescriptOnly: true
46
+ };
47
+ export default shopifyTemplate;
48
+
49
+ //# sourceMappingURL=shopifyOnline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/actions/init/templates/shopifyOnline.ts"],"sourcesContent":["import {type ProjectTemplate} from '../types.js'\n\nconst configTemplate = `\nimport {shopifyAssets} from 'sanity-plugin-shopify-assets'\nimport {defineConfig, isDev} from 'sanity'\nimport {structureTool} from 'sanity/structure'\nimport {visionTool} from '@sanity/vision'\nimport {shopifyDocumentActions} from './plugins/shopifyDocumentActions'\nimport {schemaTypes} from './schemaTypes'\nimport {structure} from './structure'\nimport {SHOPIFY_STORE_ID} from './constants'\n\nconst devOnlyPlugins = [visionTool()]\n\nexport default defineConfig({\n name: '%sourceName%',\n title: '%projectName%',\n\n projectId: '%projectId%',\n dataset: '%dataset%',\n\n plugins: [\n structureTool({structure}),\n shopifyDocumentActions(),\n shopifyAssets({\n shopifyDomain: SHOPIFY_STORE_ID,\n }),\n ...(isDev ? devOnlyPlugins : []),\n ],\n\n schema: {\n types: schemaTypes,\n },\n})\n`\n\nconst shopifyTemplate: ProjectTemplate = {\n configTemplate,\n dependencies: {\n '@portabletext/toolkit': '^2.0.1',\n '@sanity/icons': '^2.11.0',\n '@sanity/ui': '^2.0.0',\n '@types/lodash.get': '^4.4.7',\n 'lodash.get': '^4.4.2',\n 'pluralize-esm': '^9.0.4',\n 'sanity-plugin-shopify-assets': '^1.1.0',\n },\n typescriptOnly: true,\n}\nexport default shopifyTemplate\n"],"names":["configTemplate","shopifyTemplate","dependencies","typescriptOnly"],"mappings":"AAEA,MAAMA,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCxB,CAAC;AAED,MAAMC,kBAAmC;IACvCD;IACAE,cAAc;QACZ,yBAAyB;QACzB,iBAAiB;QACjB,cAAc;QACd,qBAAqB;QACrB,cAAc;QACd,iBAAiB;QACjB,gCAAgC;IAClC;IACAC,gBAAgB;AAClB;AACA,eAAeF,gBAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/init/types.ts"],"sourcesContent":["import {Framework} from '@vercel/frameworks'\n\nimport {GenerateConfigOptions} from './createStudioConfig'\n\nexport type VersionedFramework = Framework & {\n detectedVersion?: string\n}\n\nexport interface ProjectTemplate {\n configTemplate?: ((variables: GenerateConfigOptions['variables']) => string) | string\n datasetUrl?: string\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n entry?: string\n importPrompt?: string\n scripts?: Record<string, string>\n typescriptOnly?: boolean\n}\n"],"names":[],"mappings":"AAQA,WASC"}
@@ -0,0 +1,17 @@
1
+ import { subdebug } from '@sanity/cli-core';
2
+ import { updateProjectInitalTemplate } from '../../services/projects.js';
3
+ const debug = subdebug('init:updateInitialTemplateMetadata');
4
+ export async function updateInitialTemplateMetadata(projectId, templateName) {
5
+ try {
6
+ await updateProjectInitalTemplate(projectId, templateName);
7
+ } catch (err) {
8
+ // Non-critical that we update this metadata, and user does not need to be aware
9
+ let message = typeof err === 'string' ? err : '<unknown error>';
10
+ if (err instanceof Error) {
11
+ message = err.message;
12
+ }
13
+ debug('Failed to update initial template metadata for project: %s', message);
14
+ }
15
+ }
16
+
17
+ //# sourceMappingURL=updateInitialTemplateMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/init/updateInitialTemplateMetadata.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\n\nimport {updateProjectInitalTemplate} from '../../services/projects.js'\n\nconst debug = subdebug('init:updateInitialTemplateMetadata')\n\nexport async function updateInitialTemplateMetadata(\n projectId: string,\n templateName: string,\n): Promise<void> {\n try {\n await updateProjectInitalTemplate(projectId, templateName)\n } catch (err: unknown) {\n // Non-critical that we update this metadata, and user does not need to be aware\n let message = typeof err === 'string' ? err : '<unknown error>'\n if (err instanceof Error) {\n message = err.message\n }\n\n debug('Failed to update initial template metadata for project: %s', message)\n }\n}\n"],"names":["subdebug","updateProjectInitalTemplate","debug","updateInitialTemplateMetadata","projectId","templateName","err","message","Error"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AAEzC,SAAQC,2BAA2B,QAAO,6BAA4B;AAEtE,MAAMC,QAAQF,SAAS;AAEvB,OAAO,eAAeG,8BACpBC,SAAiB,EACjBC,YAAoB;IAEpB,IAAI;QACF,MAAMJ,4BAA4BG,WAAWC;IAC/C,EAAE,OAAOC,KAAc;QACrB,gFAAgF;QAChF,IAAIC,UAAU,OAAOD,QAAQ,WAAWA,MAAM;QAC9C,IAAIA,eAAeE,OAAO;YACxBD,UAAUD,IAAIC,OAAO;QACvB;QAEAL,MAAM,8DAA8DK;IACtE;AACF"}
@@ -1,68 +1,73 @@
1
1
  import { existsSync } from 'node:fs';
2
- import os from 'node:os';
3
- import path from 'node:path';
4
- import { execa } from 'execa';
2
+ import fs from 'node:fs/promises';
3
+ import { subdebug } from '@sanity/cli-core';
4
+ import { parse as parseJsonc } from 'jsonc-parser';
5
+ import { EDITOR_CONFIGS } from './editorConfigs.js';
6
+ const debug = subdebug('mcp:detectAvailableEditors');
5
7
  /**
6
- * Detect which AI editors are installed on the user's machine
7
- * Checks for Cursor, VS Code, and Claude Code
8
- *
9
- * @returns Array of detected editors with their config paths
10
- */ export async function detectAvailableEditors() {
11
- const editors = [];
12
- const homeDir = os.homedir();
13
- // Cursor detection
14
- const cursorDir = path.join(homeDir, '.cursor');
15
- if (existsSync(cursorDir)) {
16
- editors.push({
17
- configKey: 'mcpServers',
18
- configPath: path.join(cursorDir, 'mcp.json'),
19
- name: 'Cursor'
20
- });
8
+ * Safely parse JSON/JSONC config file content
9
+ * Returns parsed config or null if unparseable
10
+ */ function parseConfig(content) {
11
+ const trimmed = content.trim();
12
+ if (trimmed === '') {
13
+ return {} // Empty file - safe to write, treat as empty config
14
+ ;
21
15
  }
22
- // VS Code detection (platform-specific)
23
- let vscodeConfigDir = null;
24
- switch(process.platform){
25
- case 'darwin':
26
- {
27
- vscodeConfigDir = path.join(homeDir, 'Library/Application Support/Code/User');
28
- break;
29
- }
30
- case 'win32':
31
- {
32
- // APPDATA is required on Windows for VS Code config path
33
- if (process.env.APPDATA) {
34
- vscodeConfigDir = path.join(process.env.APPDATA, 'Code/User');
35
- }
36
- break;
37
- }
38
- default:
39
- {
40
- // linux
41
- vscodeConfigDir = path.join(homeDir, '.config/Code/User');
42
- }
16
+ const errors = [];
17
+ const parsed = parseJsonc(content, errors, {
18
+ allowTrailingComma: true
19
+ });
20
+ if (errors.length > 0 || typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
21
+ return null // Parse failed
22
+ ;
43
23
  }
44
- if (vscodeConfigDir && existsSync(vscodeConfigDir)) {
45
- editors.push({
46
- configKey: 'servers',
47
- configPath: path.join(vscodeConfigDir, 'mcp.json'),
48
- name: 'VS Code'
49
- });
24
+ return parsed;
25
+ }
26
+ /**
27
+ * Check if an editor's config is usable and whether Sanity MCP is already configured.
28
+ * Returns null only if config exists but can't be parsed (to avoid data loss).
29
+ */ async function checkEditorConfig(name, configPath) {
30
+ const { configKey } = EDITOR_CONFIGS[name];
31
+ // Config file doesn't exist - can create it
32
+ if (!existsSync(configPath)) {
33
+ return {
34
+ configPath,
35
+ configured: false,
36
+ name
37
+ };
50
38
  }
51
- // Claude Code detection
39
+ // Config exists - try to parse it
52
40
  try {
53
- await execa('claude', [
54
- '--version'
55
- ], {
56
- stdio: 'pipe',
57
- timeout: 5000
58
- });
59
- editors.push({
60
- configKey: 'mcpServers',
61
- configPath: path.join(homeDir, '.claude.json'),
62
- name: 'Claude Code'
63
- });
64
- } catch {
65
- // Not installed or timed out
41
+ const content = await fs.readFile(configPath, 'utf8');
42
+ const config = parseConfig(content);
43
+ if (config === null) {
44
+ debug('Skipping %s: could not parse %s', name, configPath);
45
+ return null // Can't parse - skip this editor
46
+ ;
47
+ }
48
+ // Check if Sanity MCP is already configured
49
+ const configured = Boolean(config[configKey]?.Sanity);
50
+ return {
51
+ configPath,
52
+ configured,
53
+ name
54
+ };
55
+ } catch (err) {
56
+ debug('Skipping %s: could not read %s: %s', name, configPath, err);
57
+ return null;
58
+ }
59
+ }
60
+ /**
61
+ * Detect which editors are installed and have parseable configs.
62
+ * Editors with unparseable configs are skipped to avoid data loss.
63
+ */ export async function detectAvailableEditors() {
64
+ const editors = [];
65
+ for (const [name, config] of Object.entries(EDITOR_CONFIGS)){
66
+ const configPath = await config.detect();
67
+ if (configPath) {
68
+ const editor = await checkEditorConfig(name, configPath);
69
+ if (editor) editors.push(editor);
70
+ }
66
71
  }
67
72
  return editors;
68
73
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/mcp/detectAvailableEditors.ts"],"sourcesContent":["import {existsSync} from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {execa} from 'execa'\n\nimport {type Editor} from '../../services/mcp.js'\n\n/**\n * Detect which AI editors are installed on the user's machine\n * Checks for Cursor, VS Code, and Claude Code\n *\n * @returns Array of detected editors with their config paths\n */\nexport async function detectAvailableEditors(): Promise<Editor[]> {\n const editors: Editor[] = []\n const homeDir = os.homedir()\n\n // Cursor detection\n const cursorDir = path.join(homeDir, '.cursor')\n if (existsSync(cursorDir)) {\n editors.push({\n configKey: 'mcpServers',\n configPath: path.join(cursorDir, 'mcp.json'),\n name: 'Cursor',\n })\n }\n\n // VS Code detection (platform-specific)\n let vscodeConfigDir: string | null = null\n switch (process.platform) {\n case 'darwin': {\n vscodeConfigDir = path.join(homeDir, 'Library/Application Support/Code/User')\n break\n }\n case 'win32': {\n // APPDATA is required on Windows for VS Code config path\n if (process.env.APPDATA) {\n vscodeConfigDir = path.join(process.env.APPDATA, 'Code/User')\n }\n break\n }\n default: {\n // linux\n vscodeConfigDir = path.join(homeDir, '.config/Code/User')\n }\n }\n\n if (vscodeConfigDir && existsSync(vscodeConfigDir)) {\n editors.push({\n configKey: 'servers',\n configPath: path.join(vscodeConfigDir, 'mcp.json'),\n name: 'VS Code',\n })\n }\n\n // Claude Code detection\n try {\n await execa('claude', ['--version'], {stdio: 'pipe', timeout: 5000})\n editors.push({\n configKey: 'mcpServers',\n configPath: path.join(homeDir, '.claude.json'),\n name: 'Claude Code',\n })\n } catch {\n // Not installed or timed out\n }\n\n return editors\n}\n"],"names":["existsSync","os","path","execa","detectAvailableEditors","editors","homeDir","homedir","cursorDir","join","push","configKey","configPath","name","vscodeConfigDir","process","platform","env","APPDATA","stdio","timeout"],"mappings":"AAAA,SAAQA,UAAU,QAAO,UAAS;AAClC,OAAOC,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAE5B,SAAQC,KAAK,QAAO,QAAO;AAI3B;;;;;CAKC,GACD,OAAO,eAAeC;IACpB,MAAMC,UAAoB,EAAE;IAC5B,MAAMC,UAAUL,GAAGM,OAAO;IAE1B,mBAAmB;IACnB,MAAMC,YAAYN,KAAKO,IAAI,CAACH,SAAS;IACrC,IAAIN,WAAWQ,YAAY;QACzBH,QAAQK,IAAI,CAAC;YACXC,WAAW;YACXC,YAAYV,KAAKO,IAAI,CAACD,WAAW;YACjCK,MAAM;QACR;IACF;IAEA,wCAAwC;IACxC,IAAIC,kBAAiC;IACrC,OAAQC,QAAQC,QAAQ;QACtB,KAAK;YAAU;gBACbF,kBAAkBZ,KAAKO,IAAI,CAACH,SAAS;gBACrC;YACF;QACA,KAAK;YAAS;gBACZ,yDAAyD;gBACzD,IAAIS,QAAQE,GAAG,CAACC,OAAO,EAAE;oBACvBJ,kBAAkBZ,KAAKO,IAAI,CAACM,QAAQE,GAAG,CAACC,OAAO,EAAE;gBACnD;gBACA;YACF;QACA;YAAS;gBACP,QAAQ;gBACRJ,kBAAkBZ,KAAKO,IAAI,CAACH,SAAS;YACvC;IACF;IAEA,IAAIQ,mBAAmBd,WAAWc,kBAAkB;QAClDT,QAAQK,IAAI,CAAC;YACXC,WAAW;YACXC,YAAYV,KAAKO,IAAI,CAACK,iBAAiB;YACvCD,MAAM;QACR;IACF;IAEA,wBAAwB;IACxB,IAAI;QACF,MAAMV,MAAM,UAAU;YAAC;SAAY,EAAE;YAACgB,OAAO;YAAQC,SAAS;QAAI;QAClEf,QAAQK,IAAI,CAAC;YACXC,WAAW;YACXC,YAAYV,KAAKO,IAAI,CAACH,SAAS;YAC/BO,MAAM;QACR;IACF,EAAE,OAAM;IACN,6BAA6B;IAC/B;IAEA,OAAOR;AACT"}
1
+ {"version":3,"sources":["../../../src/actions/mcp/detectAvailableEditors.ts"],"sourcesContent":["import {existsSync} from 'node:fs'\nimport fs from 'node:fs/promises'\n\nimport {subdebug} from '@sanity/cli-core'\nimport {type ParseError, parse as parseJsonc} from 'jsonc-parser'\n\nimport {EDITOR_CONFIGS, type EditorName} from './editorConfigs.js'\n\nconst debug = subdebug('mcp:detectAvailableEditors')\n\nexport interface Editor {\n configPath: string\n /** Whether Sanity MCP is already configured for this editor */\n configured: boolean\n name: EditorName\n}\n\ninterface MCPConfig {\n [key: string]: Record<string, unknown> | undefined\n}\n\n/**\n * Safely parse JSON/JSONC config file content\n * Returns parsed config or null if unparseable\n */\nfunction parseConfig(content: string): MCPConfig | null {\n const trimmed = content.trim()\n if (trimmed === '') {\n return {} // Empty file - safe to write, treat as empty config\n }\n\n const errors: ParseError[] = []\n const parsed = parseJsonc(content, errors, {allowTrailingComma: true})\n\n if (errors.length > 0 || typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n return null // Parse failed\n }\n\n return parsed as MCPConfig\n}\n\n/**\n * Check if an editor's config is usable and whether Sanity MCP is already configured.\n * Returns null only if config exists but can't be parsed (to avoid data loss).\n */\nasync function checkEditorConfig(name: EditorName, configPath: string): Promise<Editor | null> {\n const {configKey} = EDITOR_CONFIGS[name]\n\n // Config file doesn't exist - can create it\n if (!existsSync(configPath)) {\n return {configPath, configured: false, name}\n }\n\n // Config exists - try to parse it\n try {\n const content = await fs.readFile(configPath, 'utf8')\n const config = parseConfig(content)\n\n if (config === null) {\n debug('Skipping %s: could not parse %s', name, configPath)\n return null // Can't parse - skip this editor\n }\n\n // Check if Sanity MCP is already configured\n const configured = Boolean(config[configKey]?.Sanity)\n\n return {configPath, configured, name}\n } catch (err) {\n debug('Skipping %s: could not read %s: %s', name, configPath, err)\n return null\n }\n}\n\n/**\n * Detect which editors are installed and have parseable configs.\n * Editors with unparseable configs are skipped to avoid data loss.\n */\nexport async function detectAvailableEditors(): Promise<Editor[]> {\n const editors: Editor[] = []\n\n for (const [name, config] of Object.entries(EDITOR_CONFIGS)) {\n const configPath = await config.detect()\n if (configPath) {\n const editor = await checkEditorConfig(name as EditorName, configPath)\n if (editor) editors.push(editor)\n }\n }\n\n return editors\n}\n"],"names":["existsSync","fs","subdebug","parse","parseJsonc","EDITOR_CONFIGS","debug","parseConfig","content","trimmed","trim","errors","parsed","allowTrailingComma","length","Array","isArray","checkEditorConfig","name","configPath","configKey","configured","readFile","config","Boolean","Sanity","err","detectAvailableEditors","editors","Object","entries","detect","editor","push"],"mappings":"AAAA,SAAQA,UAAU,QAAO,UAAS;AAClC,OAAOC,QAAQ,mBAAkB;AAEjC,SAAQC,QAAQ,QAAO,mBAAkB;AACzC,SAAyBC,SAASC,UAAU,QAAO,eAAc;AAEjE,SAAQC,cAAc,QAAwB,qBAAoB;AAElE,MAAMC,QAAQJ,SAAS;AAavB;;;CAGC,GACD,SAASK,YAAYC,OAAe;IAClC,MAAMC,UAAUD,QAAQE,IAAI;IAC5B,IAAID,YAAY,IAAI;QAClB,OAAO,CAAC,EAAE,oDAAoD;;IAChE;IAEA,MAAME,SAAuB,EAAE;IAC/B,MAAMC,SAASR,WAAWI,SAASG,QAAQ;QAACE,oBAAoB;IAAI;IAEpE,IAAIF,OAAOG,MAAM,GAAG,KAAK,OAAOF,WAAW,YAAYA,WAAW,QAAQG,MAAMC,OAAO,CAACJ,SAAS;QAC/F,OAAO,KAAK,eAAe;;IAC7B;IAEA,OAAOA;AACT;AAEA;;;CAGC,GACD,eAAeK,kBAAkBC,IAAgB,EAAEC,UAAkB;IACnE,MAAM,EAACC,SAAS,EAAC,GAAGf,cAAc,CAACa,KAAK;IAExC,4CAA4C;IAC5C,IAAI,CAAClB,WAAWmB,aAAa;QAC3B,OAAO;YAACA;YAAYE,YAAY;YAAOH;QAAI;IAC7C;IAEA,kCAAkC;IAClC,IAAI;QACF,MAAMV,UAAU,MAAMP,GAAGqB,QAAQ,CAACH,YAAY;QAC9C,MAAMI,SAAShB,YAAYC;QAE3B,IAAIe,WAAW,MAAM;YACnBjB,MAAM,mCAAmCY,MAAMC;YAC/C,OAAO,KAAK,iCAAiC;;QAC/C;QAEA,4CAA4C;QAC5C,MAAME,aAAaG,QAAQD,MAAM,CAACH,UAAU,EAAEK;QAE9C,OAAO;YAACN;YAAYE;YAAYH;QAAI;IACtC,EAAE,OAAOQ,KAAK;QACZpB,MAAM,sCAAsCY,MAAMC,YAAYO;QAC9D,OAAO;IACT;AACF;AAEA;;;CAGC,GACD,OAAO,eAAeC;IACpB,MAAMC,UAAoB,EAAE;IAE5B,KAAK,MAAM,CAACV,MAAMK,OAAO,IAAIM,OAAOC,OAAO,CAACzB,gBAAiB;QAC3D,MAAMc,aAAa,MAAMI,OAAOQ,MAAM;QACtC,IAAIZ,YAAY;YACd,MAAMa,SAAS,MAAMf,kBAAkBC,MAAoBC;YAC3D,IAAIa,QAAQJ,QAAQK,IAAI,CAACD;QAC3B;IACF;IAEA,OAAOJ;AACT"}
@@ -0,0 +1,147 @@
1
+ import { existsSync } from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { execa } from 'execa';
5
+ import { MCP_SERVER_URL } from '../../services/mcp.js';
6
+ const defaultHttpConfig = (token)=>({
7
+ headers: {
8
+ Authorization: `Bearer ${token}`
9
+ },
10
+ type: 'http',
11
+ url: MCP_SERVER_URL
12
+ });
13
+ const homeDir = os.homedir();
14
+ /**
15
+ * Centralized editor configuration including detection logic.
16
+ * To add a new editor: add an entry here - EditorName type is derived automatically.
17
+ */ export const EDITOR_CONFIGS = {
18
+ 'Claude Code': {
19
+ buildServerConfig: defaultHttpConfig,
20
+ configKey: 'mcpServers',
21
+ detect: async ()=>{
22
+ try {
23
+ await execa('claude', [
24
+ '--version'
25
+ ], {
26
+ stdio: 'pipe',
27
+ timeout: 5000
28
+ });
29
+ return path.join(homeDir, '.claude.json');
30
+ } catch {
31
+ return null;
32
+ }
33
+ }
34
+ },
35
+ Cursor: {
36
+ buildServerConfig: defaultHttpConfig,
37
+ configKey: 'mcpServers',
38
+ detect: async ()=>{
39
+ const cursorDir = path.join(homeDir, '.cursor');
40
+ return existsSync(cursorDir) ? path.join(cursorDir, 'mcp.json') : null;
41
+ }
42
+ },
43
+ OpenCode: {
44
+ buildServerConfig: (token)=>({
45
+ headers: {
46
+ Authorization: `Bearer ${token}`
47
+ },
48
+ type: 'remote',
49
+ url: MCP_SERVER_URL
50
+ }),
51
+ configKey: 'mcp',
52
+ detect: async ()=>{
53
+ try {
54
+ await execa('opencode', [
55
+ '--version'
56
+ ], {
57
+ stdio: 'pipe',
58
+ timeout: 5000
59
+ });
60
+ return path.join(homeDir, '.config/opencode/opencode.json');
61
+ } catch {
62
+ return null;
63
+ }
64
+ }
65
+ },
66
+ 'VS Code': {
67
+ buildServerConfig: defaultHttpConfig,
68
+ configKey: 'servers',
69
+ detect: async ()=>{
70
+ let configDir = null;
71
+ switch(process.platform){
72
+ case 'darwin':
73
+ {
74
+ configDir = path.join(homeDir, 'Library/Application Support/Code/User');
75
+ break;
76
+ }
77
+ case 'win32':
78
+ {
79
+ if (process.env.APPDATA) {
80
+ configDir = path.join(process.env.APPDATA, 'Code/User');
81
+ }
82
+ break;
83
+ }
84
+ default:
85
+ {
86
+ configDir = path.join(homeDir, '.config/Code/User');
87
+ }
88
+ }
89
+ return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null;
90
+ }
91
+ },
92
+ 'VS Code Insiders': {
93
+ buildServerConfig: defaultHttpConfig,
94
+ configKey: 'servers',
95
+ detect: async ()=>{
96
+ let configDir = null;
97
+ switch(process.platform){
98
+ case 'darwin':
99
+ {
100
+ configDir = path.join(homeDir, 'Library/Application Support/Code - Insiders/User');
101
+ break;
102
+ }
103
+ case 'win32':
104
+ {
105
+ if (process.env.APPDATA) {
106
+ configDir = path.join(process.env.APPDATA, 'Code - Insiders/User');
107
+ }
108
+ break;
109
+ }
110
+ default:
111
+ {
112
+ configDir = path.join(homeDir, '.config/Code - Insiders/User');
113
+ }
114
+ }
115
+ return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null;
116
+ }
117
+ },
118
+ Zed: {
119
+ buildServerConfig: (token)=>({
120
+ headers: {
121
+ Authorization: `Bearer ${token}`
122
+ },
123
+ settings: {},
124
+ url: MCP_SERVER_URL
125
+ }),
126
+ configKey: 'context_servers',
127
+ detect: async ()=>{
128
+ let configDir = null;
129
+ switch(process.platform){
130
+ case 'win32':
131
+ {
132
+ if (process.env.APPDATA) {
133
+ configDir = path.join(process.env.APPDATA, 'Zed');
134
+ }
135
+ break;
136
+ }
137
+ default:
138
+ {
139
+ configDir = path.join(homeDir, '.config/zed');
140
+ }
141
+ }
142
+ return configDir && existsSync(configDir) ? path.join(configDir, 'settings.json') : null;
143
+ }
144
+ }
145
+ };
146
+
147
+ //# sourceMappingURL=editorConfigs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/mcp/editorConfigs.ts"],"sourcesContent":["import {existsSync} from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {execa} from 'execa'\n\nimport {MCP_SERVER_URL} from '../../services/mcp.js'\n\ninterface EditorConfig {\n buildServerConfig: (token: string) => Record<string, unknown>\n configKey: string\n /** Returns the config file path if editor is detected, null otherwise */\n detect: () => Promise<string | null>\n}\n\nconst defaultHttpConfig = (token: string) => ({\n headers: {Authorization: `Bearer ${token}`},\n type: 'http',\n url: MCP_SERVER_URL,\n})\n\nconst homeDir = os.homedir()\n\n/**\n * Centralized editor configuration including detection logic.\n * To add a new editor: add an entry here - EditorName type is derived automatically.\n */\nexport const EDITOR_CONFIGS = {\n 'Claude Code': {\n buildServerConfig: defaultHttpConfig,\n configKey: 'mcpServers',\n detect: async () => {\n try {\n await execa('claude', ['--version'], {stdio: 'pipe', timeout: 5000})\n return path.join(homeDir, '.claude.json')\n } catch {\n return null\n }\n },\n },\n Cursor: {\n buildServerConfig: defaultHttpConfig,\n configKey: 'mcpServers',\n detect: async () => {\n const cursorDir = path.join(homeDir, '.cursor')\n return existsSync(cursorDir) ? path.join(cursorDir, 'mcp.json') : null\n },\n },\n OpenCode: {\n buildServerConfig: (token) => ({\n headers: {Authorization: `Bearer ${token}`},\n type: 'remote',\n url: MCP_SERVER_URL,\n }),\n configKey: 'mcp',\n detect: async () => {\n try {\n await execa('opencode', ['--version'], {stdio: 'pipe', timeout: 5000})\n return path.join(homeDir, '.config/opencode/opencode.json')\n } catch {\n return null\n }\n },\n },\n 'VS Code': {\n buildServerConfig: defaultHttpConfig,\n configKey: 'servers',\n detect: async () => {\n let configDir: string | null = null\n switch (process.platform) {\n case 'darwin': {\n configDir = path.join(homeDir, 'Library/Application Support/Code/User')\n break\n }\n case 'win32': {\n if (process.env.APPDATA) {\n configDir = path.join(process.env.APPDATA, 'Code/User')\n }\n break\n }\n default: {\n configDir = path.join(homeDir, '.config/Code/User')\n }\n }\n return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n },\n },\n 'VS Code Insiders': {\n buildServerConfig: defaultHttpConfig,\n configKey: 'servers',\n detect: async () => {\n let configDir: string | null = null\n switch (process.platform) {\n case 'darwin': {\n configDir = path.join(homeDir, 'Library/Application Support/Code - Insiders/User')\n break\n }\n case 'win32': {\n if (process.env.APPDATA) {\n configDir = path.join(process.env.APPDATA, 'Code - Insiders/User')\n }\n break\n }\n default: {\n configDir = path.join(homeDir, '.config/Code - Insiders/User')\n }\n }\n return configDir && existsSync(configDir) ? path.join(configDir, 'mcp.json') : null\n },\n },\n Zed: {\n buildServerConfig: (token) => ({\n headers: {Authorization: `Bearer ${token}`},\n settings: {},\n url: MCP_SERVER_URL,\n }),\n configKey: 'context_servers',\n detect: async () => {\n let configDir: string | null = null\n switch (process.platform) {\n case 'win32': {\n if (process.env.APPDATA) {\n configDir = path.join(process.env.APPDATA, 'Zed')\n }\n break\n }\n default: {\n configDir = path.join(homeDir, '.config/zed')\n }\n }\n return configDir && existsSync(configDir) ? path.join(configDir, 'settings.json') : null\n },\n },\n} satisfies Record<string, EditorConfig>\n\n/** Derived from EDITOR_CONFIGS keys - add a new editor there and this updates automatically */\nexport type EditorName = keyof typeof EDITOR_CONFIGS\n"],"names":["existsSync","os","path","execa","MCP_SERVER_URL","defaultHttpConfig","token","headers","Authorization","type","url","homeDir","homedir","EDITOR_CONFIGS","buildServerConfig","configKey","detect","stdio","timeout","join","Cursor","cursorDir","OpenCode","configDir","process","platform","env","APPDATA","Zed","settings"],"mappings":"AAAA,SAAQA,UAAU,QAAO,UAAS;AAClC,OAAOC,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAE5B,SAAQC,KAAK,QAAO,QAAO;AAE3B,SAAQC,cAAc,QAAO,wBAAuB;AASpD,MAAMC,oBAAoB,CAACC,QAAmB,CAAA;QAC5CC,SAAS;YAACC,eAAe,CAAC,OAAO,EAAEF,OAAO;QAAA;QAC1CG,MAAM;QACNC,KAAKN;IACP,CAAA;AAEA,MAAMO,UAAUV,GAAGW,OAAO;AAE1B;;;CAGC,GACD,OAAO,MAAMC,iBAAiB;IAC5B,eAAe;QACbC,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,IAAI;gBACF,MAAMb,MAAM,UAAU;oBAAC;iBAAY,EAAE;oBAACc,OAAO;oBAAQC,SAAS;gBAAI;gBAClE,OAAOhB,KAAKiB,IAAI,CAACR,SAAS;YAC5B,EAAE,OAAM;gBACN,OAAO;YACT;QACF;IACF;IACAS,QAAQ;QACNN,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,MAAMK,YAAYnB,KAAKiB,IAAI,CAACR,SAAS;YACrC,OAAOX,WAAWqB,aAAanB,KAAKiB,IAAI,CAACE,WAAW,cAAc;QACpE;IACF;IACAC,UAAU;QACRR,mBAAmB,CAACR,QAAW,CAAA;gBAC7BC,SAAS;oBAACC,eAAe,CAAC,OAAO,EAAEF,OAAO;gBAAA;gBAC1CG,MAAM;gBACNC,KAAKN;YACP,CAAA;QACAW,WAAW;QACXC,QAAQ;YACN,IAAI;gBACF,MAAMb,MAAM,YAAY;oBAAC;iBAAY,EAAE;oBAACc,OAAO;oBAAQC,SAAS;gBAAI;gBACpE,OAAOhB,KAAKiB,IAAI,CAACR,SAAS;YAC5B,EAAE,OAAM;gBACN,OAAO;YACT;QACF;IACF;IACA,WAAW;QACTG,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,IAAIO,YAA2B;YAC/B,OAAQC,QAAQC,QAAQ;gBACtB,KAAK;oBAAU;wBACbF,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;wBAC/B;oBACF;gBACA,KAAK;oBAAS;wBACZ,IAAIa,QAAQE,GAAG,CAACC,OAAO,EAAE;4BACvBJ,YAAYrB,KAAKiB,IAAI,CAACK,QAAQE,GAAG,CAACC,OAAO,EAAE;wBAC7C;wBACA;oBACF;gBACA;oBAAS;wBACPJ,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;oBACjC;YACF;YACA,OAAOY,aAAavB,WAAWuB,aAAarB,KAAKiB,IAAI,CAACI,WAAW,cAAc;QACjF;IACF;IACA,oBAAoB;QAClBT,mBAAmBT;QACnBU,WAAW;QACXC,QAAQ;YACN,IAAIO,YAA2B;YAC/B,OAAQC,QAAQC,QAAQ;gBACtB,KAAK;oBAAU;wBACbF,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;wBAC/B;oBACF;gBACA,KAAK;oBAAS;wBACZ,IAAIa,QAAQE,GAAG,CAACC,OAAO,EAAE;4BACvBJ,YAAYrB,KAAKiB,IAAI,CAACK,QAAQE,GAAG,CAACC,OAAO,EAAE;wBAC7C;wBACA;oBACF;gBACA;oBAAS;wBACPJ,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;oBACjC;YACF;YACA,OAAOY,aAAavB,WAAWuB,aAAarB,KAAKiB,IAAI,CAACI,WAAW,cAAc;QACjF;IACF;IACAK,KAAK;QACHd,mBAAmB,CAACR,QAAW,CAAA;gBAC7BC,SAAS;oBAACC,eAAe,CAAC,OAAO,EAAEF,OAAO;gBAAA;gBAC1CuB,UAAU,CAAC;gBACXnB,KAAKN;YACP,CAAA;QACAW,WAAW;QACXC,QAAQ;YACN,IAAIO,YAA2B;YAC/B,OAAQC,QAAQC,QAAQ;gBACtB,KAAK;oBAAS;wBACZ,IAAID,QAAQE,GAAG,CAACC,OAAO,EAAE;4BACvBJ,YAAYrB,KAAKiB,IAAI,CAACK,QAAQE,GAAG,CAACC,OAAO,EAAE;wBAC7C;wBACA;oBACF;gBACA;oBAAS;wBACPJ,YAAYrB,KAAKiB,IAAI,CAACR,SAAS;oBACjC;YACF;YACA,OAAOY,aAAavB,WAAWuB,aAAarB,KAAKiB,IAAI,CAACI,WAAW,mBAAmB;QACtF;IACF;AACF,EAAwC"}
@@ -0,0 +1,24 @@
1
+ import { checkbox } from '@sanity/cli-core/ux';
2
+ /**
3
+ * Prompt user to select which editors to configure
4
+ * Shows existing config status - unconfigured editors are pre-selected,
5
+ * configured editors show "(already installed)" and are not pre-selected
6
+ */ export async function promptForMCPSetup(editors) {
7
+ const editorChoices = editors.map((e)=>({
8
+ checked: !e.configured,
9
+ name: e.configured ? `${e.name} (already installed)` : e.name,
10
+ value: e.name
11
+ }));
12
+ const result = await checkbox({
13
+ choices: editorChoices,
14
+ message: 'Configure Sanity MCP server?'
15
+ });
16
+ const selectedNames = result;
17
+ // User can deselect all to skip
18
+ if (!selectedNames || selectedNames.length === 0) {
19
+ return null;
20
+ }
21
+ return editors.filter((e)=>selectedNames.includes(e.name));
22
+ }
23
+
24
+ //# sourceMappingURL=promptForMCPSetup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/mcp/promptForMCPSetup.ts"],"sourcesContent":["import {checkbox} from '@sanity/cli-core/ux'\n\nimport {type Editor} from './types.js'\n\n/**\n * Prompt user to select which editors to configure\n * Shows existing config status - unconfigured editors are pre-selected,\n * configured editors show \"(already installed)\" and are not pre-selected\n */\nexport async function promptForMCPSetup(editors: Editor[]): Promise<Editor[] | null> {\n const editorChoices = editors.map((e) => ({\n checked: !e.configured, // Only pre-select if NOT already configured\n name: e.configured ? `${e.name} (already installed)` : e.name,\n value: e.name,\n }))\n\n const result = await checkbox({\n choices: editorChoices,\n message: 'Configure Sanity MCP server?',\n })\n\n const selectedNames = result\n\n // User can deselect all to skip\n if (!selectedNames || selectedNames.length === 0) {\n return null\n }\n\n return editors.filter((e) => selectedNames.includes(e.name))\n}\n"],"names":["checkbox","promptForMCPSetup","editors","editorChoices","map","e","checked","configured","name","value","result","choices","message","selectedNames","length","filter","includes"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,sBAAqB;AAI5C;;;;CAIC,GACD,OAAO,eAAeC,kBAAkBC,OAAiB;IACvD,MAAMC,gBAAgBD,QAAQE,GAAG,CAAC,CAACC,IAAO,CAAA;YACxCC,SAAS,CAACD,EAAEE,UAAU;YACtBC,MAAMH,EAAEE,UAAU,GAAG,GAAGF,EAAEG,IAAI,CAAC,oBAAoB,CAAC,GAAGH,EAAEG,IAAI;YAC7DC,OAAOJ,EAAEG,IAAI;QACf,CAAA;IAEA,MAAME,SAAS,MAAMV,SAAS;QAC5BW,SAASR;QACTS,SAAS;IACX;IAEA,MAAMC,gBAAgBH;IAEtB,gCAAgC;IAChC,IAAI,CAACG,iBAAiBA,cAAcC,MAAM,KAAK,GAAG;QAChD,OAAO;IACT;IAEA,OAAOZ,QAAQa,MAAM,CAAC,CAACV,IAAMQ,cAAcG,QAAQ,CAACX,EAAEG,IAAI;AAC5D"}
@@ -0,0 +1,88 @@
1
+ import { ux } from '@oclif/core';
2
+ import { subdebug } from '@sanity/cli-core';
3
+ import { logSymbols } from '@sanity/cli-core/ux';
4
+ import { createMCPToken, MCP_SERVER_URL } from '../../services/mcp.js';
5
+ import { detectAvailableEditors } from './detectAvailableEditors.js';
6
+ import { promptForMCPSetup } from './promptForMCPSetup.js';
7
+ import { writeMCPConfig } from './writeMCPConfig.js';
8
+ const mcpDebug = subdebug('mcp:setup');
9
+ const NO_EDITORS_DETECTED_MESSAGE = `Couldn't auto-configure Sanity MCP server for your editor. Visit ${MCP_SERVER_URL} for setup instructions.`;
10
+ /**
11
+ * Main MCP setup orchestration
12
+ * Opt-out by default: runs automatically unless skipMcp flag is set
13
+ */ export async function setupMCP(mcp) {
14
+ // 1. Check for explicit opt-out
15
+ if (mcp === false) {
16
+ ux.warn('Skipping MCP configuration due to --no-mcp flag');
17
+ return {
18
+ configuredEditors: [],
19
+ detectedEditors: [],
20
+ skipped: true
21
+ };
22
+ }
23
+ // 2. Detect available editors (filters out unparseable configs)
24
+ const editors = await detectAvailableEditors();
25
+ const detectedEditors = editors.map((e)=>e.name);
26
+ mcpDebug('Detected %d editors: %s', detectedEditors.length, detectedEditors);
27
+ if (editors.length === 0) {
28
+ ux.warn(NO_EDITORS_DETECTED_MESSAGE);
29
+ return {
30
+ configuredEditors: [],
31
+ detectedEditors,
32
+ skipped: true
33
+ };
34
+ }
35
+ // 3. Prompt user (shows existing config status, only pre-selects unconfigured editors)
36
+ const selected = await promptForMCPSetup(editors);
37
+ if (!selected || selected.length === 0) {
38
+ // User deselected all editors
39
+ ux.stdout('MCP configuration skipped');
40
+ return {
41
+ configuredEditors: [],
42
+ detectedEditors,
43
+ skipped: true
44
+ };
45
+ }
46
+ // 4. Create child token for MCP
47
+ let token;
48
+ try {
49
+ token = await createMCPToken();
50
+ } catch (error) {
51
+ const err = error instanceof Error ? error : new Error(String(error));
52
+ mcpDebug('Error creating MCP token', error);
53
+ ux.warn(`Could not configure MCP: ${err.message}`);
54
+ ux.warn('You can set up MCP manually later using https://mcp.sanity.io');
55
+ return {
56
+ configuredEditors: [],
57
+ detectedEditors,
58
+ error: err,
59
+ skipped: false
60
+ };
61
+ }
62
+ // 5. Write configs for each selected editor
63
+ try {
64
+ for (const editor of selected){
65
+ await writeMCPConfig(editor, token);
66
+ }
67
+ } catch (error) {
68
+ const err = error instanceof Error ? error : new Error(String(error));
69
+ mcpDebug('Error writing MCP config', error);
70
+ ux.warn(`Could not configure MCP: ${err.message}`);
71
+ ux.warn('You can set up MCP manually later using https://mcp.sanity.io');
72
+ return {
73
+ configuredEditors: [],
74
+ detectedEditors,
75
+ error: err,
76
+ skipped: false
77
+ };
78
+ }
79
+ const configuredEditors = selected.map((e)=>e.name);
80
+ ux.stdout(`${logSymbols.success} MCP configured for ${configuredEditors.join(', ')}`);
81
+ return {
82
+ configuredEditors,
83
+ detectedEditors,
84
+ skipped: false
85
+ };
86
+ }
87
+
88
+ //# sourceMappingURL=setupMCP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/mcp/setupMCP.ts"],"sourcesContent":["import {ux} from '@oclif/core'\nimport {subdebug} from '@sanity/cli-core'\nimport {logSymbols} from '@sanity/cli-core/ux'\n\nimport {createMCPToken, MCP_SERVER_URL} from '../../services/mcp.js'\nimport {detectAvailableEditors} from './detectAvailableEditors.js'\nimport {type EditorName} from './editorConfigs.js'\nimport {promptForMCPSetup} from './promptForMCPSetup.js'\nimport {writeMCPConfig} from './writeMCPConfig.js'\n\nconst mcpDebug = subdebug('mcp:setup')\n\nconst NO_EDITORS_DETECTED_MESSAGE = `Couldn't auto-configure Sanity MCP server for your editor. Visit ${MCP_SERVER_URL} for setup instructions.`\n\nexport interface MCPSetupResult {\n configuredEditors: EditorName[]\n detectedEditors: EditorName[]\n skipped: boolean\n\n error?: Error\n}\n\n/**\n * Main MCP setup orchestration\n * Opt-out by default: runs automatically unless skipMcp flag is set\n */\nexport async function setupMCP(mcp?: boolean): Promise<MCPSetupResult> {\n // 1. Check for explicit opt-out\n if (mcp === false) {\n ux.warn('Skipping MCP configuration due to --no-mcp flag')\n return {\n configuredEditors: [],\n detectedEditors: [],\n skipped: true,\n }\n }\n\n // 2. Detect available editors (filters out unparseable configs)\n const editors = await detectAvailableEditors()\n const detectedEditors = editors.map((e) => e.name)\n\n mcpDebug('Detected %d editors: %s', detectedEditors.length, detectedEditors)\n\n if (editors.length === 0) {\n ux.warn(NO_EDITORS_DETECTED_MESSAGE)\n return {\n configuredEditors: [],\n detectedEditors,\n skipped: true,\n }\n }\n\n // 3. Prompt user (shows existing config status, only pre-selects unconfigured editors)\n const selected = await promptForMCPSetup(editors)\n\n if (!selected || selected.length === 0) {\n // User deselected all editors\n ux.stdout('MCP configuration skipped')\n return {\n configuredEditors: [],\n detectedEditors,\n skipped: true,\n }\n }\n\n // 4. Create child token for MCP\n let token: string\n try {\n token = await createMCPToken()\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n mcpDebug('Error creating MCP token', error)\n ux.warn(`Could not configure MCP: ${err.message}`)\n ux.warn('You can set up MCP manually later using https://mcp.sanity.io')\n return {\n configuredEditors: [],\n detectedEditors,\n error: err,\n skipped: false,\n }\n }\n\n // 5. Write configs for each selected editor\n try {\n for (const editor of selected) {\n await writeMCPConfig(editor, token)\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n mcpDebug('Error writing MCP config', error)\n ux.warn(`Could not configure MCP: ${err.message}`)\n ux.warn('You can set up MCP manually later using https://mcp.sanity.io')\n return {\n configuredEditors: [],\n detectedEditors,\n error: err,\n skipped: false,\n }\n }\n\n const configuredEditors = selected.map((e) => e.name)\n ux.stdout(`${logSymbols.success} MCP configured for ${configuredEditors.join(', ')}`)\n\n return {\n configuredEditors,\n detectedEditors,\n skipped: false,\n }\n}\n"],"names":["ux","subdebug","logSymbols","createMCPToken","MCP_SERVER_URL","detectAvailableEditors","promptForMCPSetup","writeMCPConfig","mcpDebug","NO_EDITORS_DETECTED_MESSAGE","setupMCP","mcp","warn","configuredEditors","detectedEditors","skipped","editors","map","e","name","length","selected","stdout","token","error","err","Error","String","message","editor","success","join"],"mappings":"AAAA,SAAQA,EAAE,QAAO,cAAa;AAC9B,SAAQC,QAAQ,QAAO,mBAAkB;AACzC,SAAQC,UAAU,QAAO,sBAAqB;AAE9C,SAAQC,cAAc,EAAEC,cAAc,QAAO,wBAAuB;AACpE,SAAQC,sBAAsB,QAAO,8BAA6B;AAElE,SAAQC,iBAAiB,QAAO,yBAAwB;AACxD,SAAQC,cAAc,QAAO,sBAAqB;AAElD,MAAMC,WAAWP,SAAS;AAE1B,MAAMQ,8BAA8B,CAAC,iEAAiE,EAAEL,eAAe,wBAAwB,CAAC;AAUhJ;;;CAGC,GACD,OAAO,eAAeM,SAASC,GAAa;IAC1C,gCAAgC;IAChC,IAAIA,QAAQ,OAAO;QACjBX,GAAGY,IAAI,CAAC;QACR,OAAO;YACLC,mBAAmB,EAAE;YACrBC,iBAAiB,EAAE;YACnBC,SAAS;QACX;IACF;IAEA,gEAAgE;IAChE,MAAMC,UAAU,MAAMX;IACtB,MAAMS,kBAAkBE,QAAQC,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI;IAEjDX,SAAS,2BAA2BM,gBAAgBM,MAAM,EAAEN;IAE5D,IAAIE,QAAQI,MAAM,KAAK,GAAG;QACxBpB,GAAGY,IAAI,CAACH;QACR,OAAO;YACLI,mBAAmB,EAAE;YACrBC;YACAC,SAAS;QACX;IACF;IAEA,uFAAuF;IACvF,MAAMM,WAAW,MAAMf,kBAAkBU;IAEzC,IAAI,CAACK,YAAYA,SAASD,MAAM,KAAK,GAAG;QACtC,8BAA8B;QAC9BpB,GAAGsB,MAAM,CAAC;QACV,OAAO;YACLT,mBAAmB,EAAE;YACrBC;YACAC,SAAS;QACX;IACF;IAEA,gCAAgC;IAChC,IAAIQ;IACJ,IAAI;QACFA,QAAQ,MAAMpB;IAChB,EAAE,OAAOqB,OAAO;QACd,MAAMC,MAAMD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAC9DhB,SAAS,4BAA4BgB;QACrCxB,GAAGY,IAAI,CAAC,CAAC,yBAAyB,EAAEa,IAAIG,OAAO,EAAE;QACjD5B,GAAGY,IAAI,CAAC;QACR,OAAO;YACLC,mBAAmB,EAAE;YACrBC;YACAU,OAAOC;YACPV,SAAS;QACX;IACF;IAEA,4CAA4C;IAC5C,IAAI;QACF,KAAK,MAAMc,UAAUR,SAAU;YAC7B,MAAMd,eAAesB,QAAQN;QAC/B;IACF,EAAE,OAAOC,OAAO;QACd,MAAMC,MAAMD,iBAAiBE,QAAQF,QAAQ,IAAIE,MAAMC,OAAOH;QAC9DhB,SAAS,4BAA4BgB;QACrCxB,GAAGY,IAAI,CAAC,CAAC,yBAAyB,EAAEa,IAAIG,OAAO,EAAE;QACjD5B,GAAGY,IAAI,CAAC;QACR,OAAO;YACLC,mBAAmB,EAAE;YACrBC;YACAU,OAAOC;YACPV,SAAS;QACX;IACF;IAEA,MAAMF,oBAAoBQ,SAASJ,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI;IACpDnB,GAAGsB,MAAM,CAAC,GAAGpB,WAAW4B,OAAO,CAAC,oBAAoB,EAAEjB,kBAAkBkB,IAAI,CAAC,OAAO;IAEpF,OAAO;QACLlB;QACAC;QACAC,SAAS;IACX;AACF"}
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/mcp/types.ts"],"sourcesContent":["import {type EditorName} from './editorConfigs.js'\n\nexport interface Editor {\n configPath: string\n /** Whether Sanity MCP is already configured for this editor */\n configured: boolean\n name: EditorName\n}\n"],"names":[],"mappings":"AAEA,WAKC"}
@@ -1,46 +1,41 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import fs from 'node:fs/promises';
3
3
  import path from 'node:path';
4
- import { subdebug } from '@sanity/cli-core';
5
- import { MCP_SERVER_URL } from '../../services/mcp.js';
6
- const debug = subdebug('mcp:writeMCPConfig');
4
+ import { applyEdits, modify } from 'jsonc-parser';
5
+ import { EDITOR_CONFIGS } from './editorConfigs.js';
7
6
  /**
8
7
  * Write MCP configuration to editor config file
9
- * Merges with existing config if present
8
+ * Uses jsonc-parser's modify/applyEdits to preserve comments
10
9
  *
11
- * @param editor - Editor to configure
12
- * @param token - MCP authentication token
10
+ * Note: Config parseability is already validated in detectAvailableEditors()
13
11
  */ export async function writeMCPConfig(editor, token) {
14
12
  const configPath = editor.configPath;
15
- // 1. Read existing config (if exists)
16
- let existingConfig = {};
13
+ const { buildServerConfig, configKey } = EDITOR_CONFIGS[editor.name];
14
+ // Read existing content or start with empty object
15
+ let content = '{}';
17
16
  if (existsSync(configPath)) {
18
- try {
19
- const content = await fs.readFile(configPath, 'utf8');
20
- existingConfig = JSON.parse(content);
21
- } catch {
22
- debug(`Warning: Could not parse ${configPath}. Creating new config.`);
23
- // Use empty config (will overwrite)
17
+ const fileContent = await fs.readFile(configPath, 'utf8');
18
+ if (fileContent.trim()) {
19
+ content = fileContent;
24
20
  }
25
21
  }
26
- // 2. Create/update Sanity server entry
27
- const serverKey = editor.configKey;
28
- if (!existingConfig[serverKey]) {
29
- existingConfig[serverKey] = {};
30
- }
31
- existingConfig[serverKey].Sanity = {
32
- headers: {
33
- Authorization: `Bearer ${token}`
34
- },
35
- type: 'http',
36
- url: MCP_SERVER_URL
37
- };
38
- // 3. Ensure parent directory exists
22
+ // Modify using jsonc-parser - preserves comments
23
+ // Setting a nested path automatically creates intermediate objects
24
+ const edits = modify(content, [
25
+ configKey,
26
+ 'Sanity'
27
+ ], buildServerConfig(token), {
28
+ formattingOptions: {
29
+ insertSpaces: true,
30
+ tabSize: 2
31
+ }
32
+ });
33
+ content = applyEdits(content, edits);
34
+ // Ensure parent directory exists and write
39
35
  await fs.mkdir(path.dirname(configPath), {
40
36
  recursive: true
41
37
  });
42
- // 4. Write config
43
- await fs.writeFile(configPath, JSON.stringify(existingConfig, null, 2), 'utf8');
38
+ await fs.writeFile(configPath, content, 'utf8');
44
39
  }
45
40
 
46
41
  //# sourceMappingURL=writeMCPConfig.js.map