@sanity/cli 6.5.3 → 6.7.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 (188) hide show
  1. package/README.md +18 -5
  2. package/bin/run.js +3 -1
  3. package/dist/actions/auth/login/login.js +39 -13
  4. package/dist/actions/auth/login/login.js.map +1 -1
  5. package/dist/actions/auth/login/validateToken.js +39 -0
  6. package/dist/actions/auth/login/validateToken.js.map +1 -0
  7. package/dist/actions/build/buildApp.js +4 -5
  8. package/dist/actions/build/buildApp.js.map +1 -1
  9. package/dist/actions/build/buildStaticFiles.js +12 -4
  10. package/dist/actions/build/buildStaticFiles.js.map +1 -1
  11. package/dist/actions/build/buildStudio.js +6 -14
  12. package/dist/actions/build/buildStudio.js.map +1 -1
  13. package/dist/actions/build/{getStudioEnvironmentVariables.js → getEnvironmentVariables.js} +15 -19
  14. package/dist/actions/build/getEnvironmentVariables.js.map +1 -0
  15. package/dist/actions/deploy/deployStudio.js +1 -2
  16. package/dist/actions/deploy/deployStudio.js.map +1 -1
  17. package/dist/actions/deploy/deployStudioSchemasAndManifests.js +1 -2
  18. package/dist/actions/deploy/deployStudioSchemasAndManifests.js.map +1 -1
  19. package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js +1 -1
  20. package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js.map +1 -1
  21. package/dist/actions/dev/startStudioDevServer.js +1 -1
  22. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  23. package/dist/actions/documents/validateDocuments.worker.js +1 -2
  24. package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
  25. package/dist/actions/graphql/SchemaError.js +1 -1
  26. package/dist/actions/graphql/SchemaError.js.map +1 -1
  27. package/dist/actions/init/initAction.js +32 -1
  28. package/dist/actions/init/initAction.js.map +1 -1
  29. package/dist/actions/init/scaffoldTemplate.js +32 -18
  30. package/dist/actions/init/scaffoldTemplate.js.map +1 -1
  31. package/dist/actions/init/templates/index.js +2 -0
  32. package/dist/actions/init/templates/index.js.map +1 -1
  33. package/dist/actions/init/templates/pageBuilder.js +32 -0
  34. package/dist/actions/init/templates/pageBuilder.js.map +1 -0
  35. package/dist/actions/init/types.js +2 -1
  36. package/dist/actions/init/types.js.map +1 -1
  37. package/dist/actions/manifest/extractManifest.js +1 -1
  38. package/dist/actions/manifest/extractManifest.js.map +1 -1
  39. package/dist/actions/manifest/extractManifest.worker.js +1 -1
  40. package/dist/actions/manifest/extractManifest.worker.js.map +1 -1
  41. package/dist/actions/mcp/editorConfigs.js +51 -11
  42. package/dist/actions/mcp/editorConfigs.js.map +1 -1
  43. package/dist/actions/mcp/promptForMCPSetup.js +16 -11
  44. package/dist/actions/mcp/promptForMCPSetup.js.map +1 -1
  45. package/dist/actions/mcp/setupMCP.js +180 -61
  46. package/dist/actions/mcp/setupMCP.js.map +1 -1
  47. package/dist/actions/mcp/types.js.map +1 -1
  48. package/dist/actions/schema/deploySchemas.js +1 -1
  49. package/dist/actions/schema/deploySchemas.js.map +1 -1
  50. package/dist/actions/schema/extractSanityWorkspace.worker.js +1 -1
  51. package/dist/actions/schema/extractSanityWorkspace.worker.js.map +1 -1
  52. package/dist/actions/schema/extractSchema.js +1 -4
  53. package/dist/actions/schema/extractSchema.js.map +1 -1
  54. package/dist/actions/schema/extractSchemaWatcher.js +1 -4
  55. package/dist/actions/schema/extractSchemaWatcher.js.map +1 -1
  56. package/dist/actions/schema/getExtractOptions.js +8 -18
  57. package/dist/actions/schema/getExtractOptions.js.map +1 -1
  58. package/dist/actions/schema/types.js +0 -6
  59. package/dist/actions/schema/types.js.map +1 -1
  60. package/dist/actions/schema/validateAction.js +1 -1
  61. package/dist/actions/schema/validateAction.js.map +1 -1
  62. package/dist/actions/schema/validateSchema.worker.js +1 -2
  63. package/dist/actions/schema/validateSchema.worker.js.map +1 -1
  64. package/dist/actions/schema/watchExtractSchema.js +1 -1
  65. package/dist/actions/schema/watchExtractSchema.js.map +1 -1
  66. package/dist/actions/skills/readSkillState.js +54 -0
  67. package/dist/actions/skills/readSkillState.js.map +1 -0
  68. package/dist/actions/skills/setupSkills.js +73 -0
  69. package/dist/actions/skills/setupSkills.js.map +1 -0
  70. package/dist/commands/build.js +9 -22
  71. package/dist/commands/build.js.map +1 -1
  72. package/dist/commands/cors/add.js +5 -5
  73. package/dist/commands/cors/add.js.map +1 -1
  74. package/dist/commands/datasets/export.js +9 -0
  75. package/dist/commands/datasets/export.js.map +1 -1
  76. package/dist/commands/docs/read.js +33 -12
  77. package/dist/commands/docs/read.js.map +1 -1
  78. package/dist/commands/init.js +12 -1
  79. package/dist/commands/init.js.map +1 -1
  80. package/dist/commands/login.js +28 -5
  81. package/dist/commands/login.js.map +1 -1
  82. package/dist/commands/manifest/extract.js +1 -2
  83. package/dist/commands/manifest/extract.js.map +1 -1
  84. package/dist/commands/mcp/configure.js +2 -1
  85. package/dist/commands/mcp/configure.js.map +1 -1
  86. package/dist/commands/schemas/deploy.js +1 -2
  87. package/dist/commands/schemas/deploy.js.map +1 -1
  88. package/dist/exports/_internal.d.ts +2 -1
  89. package/dist/exports/_internal.js +1 -1
  90. package/dist/exports/_internal.js.map +1 -1
  91. package/dist/server/devServer.js +25 -4
  92. package/dist/server/devServer.js.map +1 -1
  93. package/dist/server/previewServer.js +1 -1
  94. package/dist/server/previewServer.js.map +1 -1
  95. package/dist/services/mcp.js +1 -1
  96. package/dist/services/mcp.js.map +1 -1
  97. package/dist/telemetry/init.telemetry.js.map +1 -1
  98. package/oclif.manifest.json +237 -205
  99. package/package.json +15 -16
  100. package/templates/page-builder/README.md +9 -0
  101. package/templates/page-builder/schemaTypes/hero.js +31 -0
  102. package/templates/page-builder/schemaTypes/index.js +19 -0
  103. package/templates/page-builder/static/.gitkeep +0 -0
  104. package/dist/actions/build/buildDebug.js +0 -4
  105. package/dist/actions/build/buildDebug.js.map +0 -1
  106. package/dist/actions/build/buildVendorDependencies.js +0 -149
  107. package/dist/actions/build/buildVendorDependencies.js.map +0 -1
  108. package/dist/actions/build/checkStudioDependencyVersions.js +0 -155
  109. package/dist/actions/build/checkStudioDependencyVersions.js.map +0 -1
  110. package/dist/actions/build/createExternalFromImportMap.js +0 -11
  111. package/dist/actions/build/createExternalFromImportMap.js.map +0 -1
  112. package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js +0 -13
  113. package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.js.map +0 -1
  114. package/dist/actions/build/decorateIndexWithBridgeScript.js +0 -17
  115. package/dist/actions/build/decorateIndexWithBridgeScript.js.map +0 -1
  116. package/dist/actions/build/decorateIndexWithStagingScript.js +0 -16
  117. package/dist/actions/build/decorateIndexWithStagingScript.js.map +0 -1
  118. package/dist/actions/build/getAppEnvVars.js +0 -9
  119. package/dist/actions/build/getAppEnvVars.js.map +0 -1
  120. package/dist/actions/build/getEntryModule.js +0 -46
  121. package/dist/actions/build/getEntryModule.js.map +0 -1
  122. package/dist/actions/build/getPossibleDocumentComponentLocations.js +0 -11
  123. package/dist/actions/build/getPossibleDocumentComponentLocations.js.map +0 -1
  124. package/dist/actions/build/getStudioEnvVars.js +0 -9
  125. package/dist/actions/build/getStudioEnvVars.js.map +0 -1
  126. package/dist/actions/build/getStudioEnvironmentVariables.js.map +0 -1
  127. package/dist/actions/build/getViteConfig.js +0 -219
  128. package/dist/actions/build/getViteConfig.js.map +0 -1
  129. package/dist/actions/build/normalizeBasePath.js +0 -9
  130. package/dist/actions/build/normalizeBasePath.js.map +0 -1
  131. package/dist/actions/build/renderDocument.js +0 -50
  132. package/dist/actions/build/renderDocument.js.map +0 -1
  133. package/dist/actions/build/renderDocument.worker.js +0 -9
  134. package/dist/actions/build/renderDocument.worker.js.map +0 -1
  135. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js +0 -79
  136. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.js.map +0 -1
  137. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +0 -61
  138. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +0 -1
  139. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +0 -165
  140. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +0 -1
  141. package/dist/actions/build/renderDocumentWorker/components/Favicons.js +0 -28
  142. package/dist/actions/build/renderDocumentWorker/components/Favicons.js.map +0 -1
  143. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +0 -178
  144. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +0 -1
  145. package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js +0 -51
  146. package/dist/actions/build/renderDocumentWorker/components/NoJavascript.js.map +0 -1
  147. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +0 -41
  148. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +0 -1
  149. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js +0 -55
  150. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.js.map +0 -1
  151. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +0 -31
  152. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +0 -1
  153. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +0 -30
  154. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +0 -1
  155. package/dist/actions/build/renderDocumentWorker/types.js +0 -5
  156. package/dist/actions/build/renderDocumentWorker/types.js.map +0 -1
  157. package/dist/actions/build/writeSanityRuntime.js +0 -64
  158. package/dist/actions/build/writeSanityRuntime.js.map +0 -1
  159. package/dist/actions/docs/normalizeDocsPath.js +0 -15
  160. package/dist/actions/docs/normalizeDocsPath.js.map +0 -1
  161. package/dist/actions/schema/extractSanitySchema.worker.js +0 -33
  162. package/dist/actions/schema/extractSanitySchema.worker.js.map +0 -1
  163. package/dist/actions/schema/formatSchemaValidation.js +0 -78
  164. package/dist/actions/schema/formatSchemaValidation.js.map +0 -1
  165. package/dist/actions/schema/matchSchemaPattern.js +0 -22
  166. package/dist/actions/schema/matchSchemaPattern.js.map +0 -1
  167. package/dist/actions/schema/runSchemaExtraction.js +0 -39
  168. package/dist/actions/schema/runSchemaExtraction.js.map +0 -1
  169. package/dist/actions/schema/utils/SchemaExtractionError.js +0 -10
  170. package/dist/actions/schema/utils/SchemaExtractionError.js.map +0 -1
  171. package/dist/actions/schema/utils/extractValidationFromSchemaError.js +0 -12
  172. package/dist/actions/schema/utils/extractValidationFromSchemaError.js.map +0 -1
  173. package/dist/constants.js +0 -8
  174. package/dist/constants.js.map +0 -1
  175. package/dist/server/vite/plugin-sanity-build-entries.js +0 -67
  176. package/dist/server/vite/plugin-sanity-build-entries.js.map +0 -1
  177. package/dist/server/vite/plugin-sanity-favicons.js +0 -72
  178. package/dist/server/vite/plugin-sanity-favicons.js.map +0 -1
  179. package/dist/server/vite/plugin-sanity-runtime-rewrite.js +0 -18
  180. package/dist/server/vite/plugin-sanity-runtime-rewrite.js.map +0 -1
  181. package/dist/server/vite/plugin-schema-extraction.js +0 -201
  182. package/dist/server/vite/plugin-schema-extraction.js.map +0 -1
  183. package/dist/telemetry/build.telemetry.js +0 -13
  184. package/dist/telemetry/build.telemetry.js.map +0 -1
  185. package/dist/telemetry/extractSchema.telemetry.js +0 -18
  186. package/dist/telemetry/extractSchema.telemetry.js.map +0 -1
  187. package/dist/util/getWorkspace.js +0 -18
  188. package/dist/util/getWorkspace.js.map +0 -1
@@ -11,7 +11,9 @@ import { getProjectDefaults } from '../../util/getProjectDefaults.js';
11
11
  import { validateSession } from '../auth/ensureAuthenticated.js';
12
12
  import { getProviderName } from '../auth/getProviderName.js';
13
13
  import { login } from '../auth/login/login.js';
14
+ import { detectAvailableEditors } from '../mcp/detectAvailableEditors.js';
14
15
  import { setupMCP } from '../mcp/setupMCP.js';
16
+ import { setupSkills } from '../skills/setupSkills.js';
15
17
  import { checkNextJsReactCompatibility } from './checkNextJsReactCompatibility.js';
16
18
  import { determineAppTemplate } from './determineAppTemplate.js';
17
19
  import { createOrAppendEnvVars } from './env/createOrAppendEnvVars.js';
@@ -147,8 +149,13 @@ export async function initAction(options, context) {
147
149
  useEnv: Boolean(options.env),
148
150
  workDir
149
151
  });
152
+ // Detect editors once, then share the result with MCP and skills setup so
153
+ // we don't pay the detection cost (filesystem probes + CLI execa calls) twice.
154
+ const detectedEditors = options.mcpMode === 'skip' && options.skillsMode === 'skip' ? [] : await detectAvailableEditors();
150
155
  const mcpResult = await setupMCP({
151
- mode: options.mcpMode
156
+ editors: detectedEditors,
157
+ mode: options.mcpMode,
158
+ skillsMode: options.skillsMode
152
159
  });
153
160
  trace.log({
154
161
  configuredEditors: mcpResult.configuredEditors,
@@ -160,6 +167,27 @@ export async function initAction(options, context) {
160
167
  trace.error(mcpResult.error);
161
168
  }
162
169
  const mcpConfigured = mcpResult.configuredEditors;
170
+ async function installSkills() {
171
+ if (mcpResult.skillsToInstall.length === 0) return;
172
+ try {
173
+ const skillsResult = await setupSkills({
174
+ agents: mcpResult.skillsToInstall
175
+ });
176
+ trace.log({
177
+ installedAgents: skillsResult.installedAgents,
178
+ skipped: skillsResult.skipped,
179
+ step: 'skillsSetup'
180
+ });
181
+ if (skillsResult.error) {
182
+ trace.error(skillsResult.error);
183
+ }
184
+ } catch (error) {
185
+ const err = error instanceof Error ? error : new Error(String(error));
186
+ debug('Unexpected error from setupSkills %O', err);
187
+ output.warn(`Could not install Sanity agent skills: ${err.message}`);
188
+ trace.error(err);
189
+ }
190
+ }
163
191
  const { alreadyConfiguredEditors } = mcpResult;
164
192
  if (alreadyConfiguredEditors.length > 0) {
165
193
  const label = alreadyConfiguredEditors.length === 1 ? `${alreadyConfiguredEditors[0]} already configured for Sanity MCP` : `${alreadyConfiguredEditors.length} editors already configured for Sanity MCP`;
@@ -184,6 +212,7 @@ export async function initAction(options, context) {
184
212
  trace,
185
213
  workDir
186
214
  });
215
+ await installSkills();
187
216
  trace.complete();
188
217
  return;
189
218
  }
@@ -200,6 +229,7 @@ export async function initAction(options, context) {
200
229
  outputPath
201
230
  });
202
231
  await writeStagingEnvIfNeeded(output, outputPath);
232
+ await installSkills();
203
233
  trace.complete();
204
234
  return;
205
235
  }
@@ -226,6 +256,7 @@ export async function initAction(options, context) {
226
256
  isFirstProject,
227
257
  projectId
228
258
  }));
259
+ await installSkills();
229
260
  trace.complete();
230
261
  }
231
262
  function checkFlagsInUnattendedMode(options, { isAppTemplate, isNextJs }) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/init/initAction.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {type SanityOrgUser, subdebug, type TelemetryUserProperties} from '@sanity/cli-core'\nimport {logSymbols, spinner} from '@sanity/cli-core/ux'\nimport {type TelemetryTrace} from '@sanity/telemetry'\nimport {type Framework, frameworks} from '@vercel/frameworks'\nimport deburr from 'lodash-es/deburr.js'\n\nimport {promptForConfigFiles} from '../../prompts/init/nextjs.js'\nimport {getCliUser} from '../../services/user.js'\nimport {CLIInitStepCompleted, type InitStepResult} from '../../telemetry/init.telemetry.js'\nimport {detectFrameworkRecord} from '../../util/detectFramework.js'\nimport {getProjectDefaults} from '../../util/getProjectDefaults.js'\nimport {validateSession} from '../auth/ensureAuthenticated.js'\nimport {getProviderName} from '../auth/getProviderName.js'\nimport {login} from '../auth/login/login.js'\nimport {setupMCP} from '../mcp/setupMCP.js'\nimport {checkNextJsReactCompatibility} from './checkNextJsReactCompatibility.js'\nimport {determineAppTemplate} from './determineAppTemplate.js'\nimport {createOrAppendEnvVars} from './env/createOrAppendEnvVars.js'\nimport {initApp} from './initApp.js'\nimport {InitError} from './initError.js'\nimport {flagOrDefault, shouldPrompt, writeStagingEnvIfNeeded} from './initHelpers.js'\nimport {initNextJs} from './initNextJs.js'\nimport {initStudio} from './initStudio.js'\nimport {getPlan} from './plan/getPlan.js'\nimport {createProjectFromName} from './project/createProjectFromName.js'\nimport {getProjectDetails} from './project/getProjectDetails.js'\nimport {getProjectOutputPath} from './project/getProjectOutputPath.js'\nimport {checkIsRemoteTemplate, getGitHubRepoInfo, type RepoInfo} from './remoteTemplate.js'\nimport {type InitContext, type InitOptions} from './types.js'\n\nconst debug = subdebug('init')\n\nexport async function initAction(options: InitOptions, context: InitContext): Promise<void> {\n const {output, workDir} = context\n\n if (options.argType) {\n throw new InitError(\n options.argType === 'plugin'\n ? 'Initializing plugins through the CLI is no longer supported'\n : `Unknown init type \"${options.argType}\"`,\n 1,\n )\n }\n\n const trace = context.telemetry.trace(CLIInitStepCompleted)\n\n if (options.reconfigure) {\n throw new InitError('--reconfigure is deprecated - manual configuration is now required', 1)\n }\n\n if (options.project && options.organization) {\n throw new InitError(\n 'You have specified both a project and an organization. To move a project to an organization please visit https://www.sanity.io/manage',\n 1,\n )\n }\n\n const defaultConfig = options.datasetDefault\n let showDefaultConfigPrompt = !defaultConfig\n if (options.dataset || options.visibility || options.datasetDefault || options.unattended) {\n showDefaultConfigPrompt = false\n }\n\n const detectedFramework = await detectFrameworkRecord({\n frameworkList: frameworks as readonly Framework[],\n rootPath: workDir,\n })\n const isNextJs = detectedFramework?.slug === 'nextjs'\n\n let remoteTemplateInfo: RepoInfo | undefined\n if (options.template && checkIsRemoteTemplate(options.template)) {\n remoteTemplateInfo = await getGitHubRepoInfo(options.template, options.templateToken)\n }\n\n if (detectedFramework && detectedFramework.slug !== 'sanity' && remoteTemplateInfo) {\n throw new InitError(\n `A remote template cannot be used with a detected framework. Detected: ${detectedFramework.name}`,\n 1,\n )\n }\n\n const isAppTemplate = options.template ? determineAppTemplate(options.template) : false\n\n if (options.unattended) {\n checkFlagsInUnattendedMode(options, {isAppTemplate, isNextJs})\n }\n\n trace.start()\n trace.log({\n flags: {\n bare: options.bare,\n coupon: options.coupon,\n defaultConfig,\n env: options.env,\n git: typeof options.git === 'string' ? options.git : undefined,\n plan: options.projectPlan,\n reconfigure: options.reconfigure,\n unattended: options.unattended,\n },\n step: 'start',\n })\n\n const planId = await getPlan(options, output, trace)\n\n let envFilenameDefault = '.env'\n if (detectedFramework && detectedFramework.slug === 'nextjs') {\n envFilenameDefault = '.env.local'\n }\n const envFilename = typeof options.env === 'string' ? options.env : envFilenameDefault\n\n const {user} = await ensureAuthenticated(options, output, trace)\n if (!isAppTemplate) {\n output.log(`${logSymbols.success} Fetching existing projects`)\n output.log('')\n }\n\n let newProject: string | undefined\n if (options.projectName) {\n newProject = await createProjectFromName({\n coupon: options.coupon,\n createProjectName: options.projectName,\n dataset: options.dataset,\n organization: options.organization,\n planId,\n user,\n visibility: options.visibility,\n })\n }\n\n const {datasetName, displayName, isFirstProject, organizationId, projectId} =\n await getProjectDetails({\n coupon: options.coupon,\n dataset: options.dataset,\n datasetDefault: options.datasetDefault,\n isAppTemplate,\n newProject,\n organization: options.organization,\n output,\n planId,\n project: options.project,\n showDefaultConfigPrompt,\n trace,\n unattended: options.unattended,\n user,\n visibility: options.visibility,\n })\n\n if (options.bare) {\n output.log(`${logSymbols.success} Below are your project details`)\n output.log('')\n output.log(`Project ID: ${styleText('cyan', projectId)}`)\n output.log(`Dataset: ${styleText('cyan', datasetName)}`)\n output.log(\n `\\nYou can find your project on Sanity Manage — https://www.sanity.io/manage/project/${projectId}\\n`,\n )\n trace.complete()\n return\n }\n\n let initNext = flagOrDefault(options.nextjsAddConfigFiles, false)\n if (isNextJs && shouldPrompt(options.unattended, options.nextjsAddConfigFiles)) {\n initNext = await promptForConfigFiles()\n }\n\n trace.log({\n detectedFramework: detectedFramework?.name,\n selectedOption: initNext ? 'yes' : 'no',\n step: 'useDetectedFramework',\n })\n\n const sluggedName = deburr(displayName.toLowerCase())\n .replaceAll(/\\s+/g, '-')\n .replaceAll(/[^a-z0-9-]/g, '')\n\n const initFramework = initNext\n\n const defaults = await getProjectDefaults({isPlugin: false, workDir})\n\n const outputPath = await getProjectOutputPath({\n initFramework,\n outputPath: options.outputPath,\n sluggedName,\n unattended: options.unattended,\n useEnv: Boolean(options.env),\n workDir,\n })\n\n const mcpResult = await setupMCP({mode: options.mcpMode})\n\n trace.log({\n configuredEditors: mcpResult.configuredEditors,\n detectedEditors: mcpResult.detectedEditors,\n skipped: mcpResult.skipped,\n step: 'mcpSetup',\n })\n if (mcpResult.error) {\n trace.error(mcpResult.error)\n }\n const mcpConfigured = mcpResult.configuredEditors\n\n const {alreadyConfiguredEditors} = mcpResult\n if (alreadyConfiguredEditors.length > 0) {\n const label =\n alreadyConfiguredEditors.length === 1\n ? `${alreadyConfiguredEditors[0]} already configured for Sanity MCP`\n : `${alreadyConfiguredEditors.length} editors already configured for Sanity MCP`\n spinner(label).start().succeed()\n }\n\n if (isNextJs) {\n await checkNextJsReactCompatibility({\n detectedFramework,\n output,\n outputPath,\n })\n }\n\n if (initNext) {\n await initNextJs({\n datasetName,\n detectedFramework,\n envFilename,\n mcpConfigured,\n options,\n output,\n projectId,\n trace,\n workDir,\n })\n trace.complete()\n return\n }\n\n if (options.env) {\n await createOrAppendEnvVars({\n envVars: {\n DATASET: datasetName,\n PROJECT_ID: projectId,\n },\n filename: envFilename,\n framework: detectedFramework,\n log: false,\n output,\n outputPath,\n })\n await writeStagingEnvIfNeeded(output, outputPath)\n trace.complete()\n return\n }\n\n const sharedParams = {\n defaults,\n mcpConfigured,\n options,\n organizationId,\n output,\n outputPath,\n remoteTemplateInfo,\n sluggedName,\n trace,\n workDir,\n }\n\n await (isAppTemplate\n ? initApp({...sharedParams, datasetName, projectId})\n : initStudio({\n ...sharedParams,\n datasetName,\n displayName,\n isFirstProject,\n projectId,\n }))\n\n trace.complete()\n}\n\nfunction checkFlagsInUnattendedMode(\n options: InitOptions,\n {isAppTemplate, isNextJs}: {isAppTemplate: boolean; isNextJs: boolean},\n): void {\n debug('Unattended mode, validating required options')\n\n if (options.projectName && !options.organization) {\n throw new InitError('`--project-name` requires `--organization <id>` in unattended mode', 1)\n }\n\n if (isAppTemplate) {\n if (!options.outputPath) {\n throw new InitError('`--output-path` must be specified in unattended mode', 1)\n }\n\n const hasProjectFlag = Boolean(options.project || options.projectName)\n\n if (!hasProjectFlag && !options.organization) {\n throw new InitError(\n 'The --organization flag is required for app templates in unattended mode. ' +\n 'Use --organization <id>, or pass --project <id> / --project-name <name>.',\n 1,\n )\n }\n\n return\n }\n\n if (!isNextJs && !options.bare && !options.outputPath) {\n throw new InitError('`--output-path` must be specified in unattended mode', 1)\n }\n\n if (!options.project && !options.projectName) {\n throw new InitError(\n '`--project <id>` or `--project-name <name>` must be specified in unattended mode',\n 1,\n )\n }\n}\n\nasync function ensureAuthenticated(\n options: InitOptions,\n output: InitContext['output'],\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>,\n): Promise<{user: SanityOrgUser}> {\n const user = await validateSession()\n\n if (user) {\n trace.log({alreadyLoggedIn: true, step: 'login'})\n output.log(\n `${logSymbols.success} You are logged in as ${user.email} using ${getProviderName(user.provider)}`,\n )\n return {user}\n }\n\n if (options.unattended) {\n throw new InitError(\n 'Must be logged in to run this command in unattended mode, run `sanity login`',\n 1,\n )\n }\n\n trace.log({step: 'login'})\n\n try {\n await login({\n output,\n telemetry: trace.newContext('login'),\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new InitError(`Login failed: ${message}`, 1)\n }\n\n const loggedInUser = await getCliUser()\n\n output.log(\n `${logSymbols.success} You are logged in as ${loggedInUser.email} using ${getProviderName(loggedInUser.provider)}`,\n )\n return {user: loggedInUser}\n}\n"],"names":["styleText","subdebug","logSymbols","spinner","frameworks","deburr","promptForConfigFiles","getCliUser","CLIInitStepCompleted","detectFrameworkRecord","getProjectDefaults","validateSession","getProviderName","login","setupMCP","checkNextJsReactCompatibility","determineAppTemplate","createOrAppendEnvVars","initApp","InitError","flagOrDefault","shouldPrompt","writeStagingEnvIfNeeded","initNextJs","initStudio","getPlan","createProjectFromName","getProjectDetails","getProjectOutputPath","checkIsRemoteTemplate","getGitHubRepoInfo","debug","initAction","options","context","output","workDir","argType","trace","telemetry","reconfigure","project","organization","defaultConfig","datasetDefault","showDefaultConfigPrompt","dataset","visibility","unattended","detectedFramework","frameworkList","rootPath","isNextJs","slug","remoteTemplateInfo","template","templateToken","name","isAppTemplate","checkFlagsInUnattendedMode","start","log","flags","bare","coupon","env","git","undefined","plan","projectPlan","step","planId","envFilenameDefault","envFilename","user","ensureAuthenticated","success","newProject","projectName","createProjectName","datasetName","displayName","isFirstProject","organizationId","projectId","complete","initNext","nextjsAddConfigFiles","selectedOption","sluggedName","toLowerCase","replaceAll","initFramework","defaults","isPlugin","outputPath","useEnv","Boolean","mcpResult","mode","mcpMode","configuredEditors","detectedEditors","skipped","error","mcpConfigured","alreadyConfiguredEditors","length","label","succeed","envVars","DATASET","PROJECT_ID","filename","framework","sharedParams","hasProjectFlag","alreadyLoggedIn","email","provider","newContext","message","Error","String","loggedInUser"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/init/initAction.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {type SanityOrgUser, subdebug, type TelemetryUserProperties} from '@sanity/cli-core'\nimport {logSymbols, spinner} from '@sanity/cli-core/ux'\nimport {type TelemetryTrace} from '@sanity/telemetry'\nimport {type Framework, frameworks} from '@vercel/frameworks'\nimport deburr from 'lodash-es/deburr.js'\n\nimport {promptForConfigFiles} from '../../prompts/init/nextjs.js'\nimport {getCliUser} from '../../services/user.js'\nimport {CLIInitStepCompleted, type InitStepResult} from '../../telemetry/init.telemetry.js'\nimport {detectFrameworkRecord} from '../../util/detectFramework.js'\nimport {getProjectDefaults} from '../../util/getProjectDefaults.js'\nimport {validateSession} from '../auth/ensureAuthenticated.js'\nimport {getProviderName} from '../auth/getProviderName.js'\nimport {login} from '../auth/login/login.js'\nimport {detectAvailableEditors} from '../mcp/detectAvailableEditors.js'\nimport {setupMCP} from '../mcp/setupMCP.js'\nimport {setupSkills} from '../skills/setupSkills.js'\nimport {checkNextJsReactCompatibility} from './checkNextJsReactCompatibility.js'\nimport {determineAppTemplate} from './determineAppTemplate.js'\nimport {createOrAppendEnvVars} from './env/createOrAppendEnvVars.js'\nimport {initApp} from './initApp.js'\nimport {InitError} from './initError.js'\nimport {flagOrDefault, shouldPrompt, writeStagingEnvIfNeeded} from './initHelpers.js'\nimport {initNextJs} from './initNextJs.js'\nimport {initStudio} from './initStudio.js'\nimport {getPlan} from './plan/getPlan.js'\nimport {createProjectFromName} from './project/createProjectFromName.js'\nimport {getProjectDetails} from './project/getProjectDetails.js'\nimport {getProjectOutputPath} from './project/getProjectOutputPath.js'\nimport {checkIsRemoteTemplate, getGitHubRepoInfo, type RepoInfo} from './remoteTemplate.js'\nimport {type InitContext, type InitOptions} from './types.js'\n\nconst debug = subdebug('init')\n\nexport async function initAction(options: InitOptions, context: InitContext): Promise<void> {\n const {output, workDir} = context\n\n if (options.argType) {\n throw new InitError(\n options.argType === 'plugin'\n ? 'Initializing plugins through the CLI is no longer supported'\n : `Unknown init type \"${options.argType}\"`,\n 1,\n )\n }\n\n const trace = context.telemetry.trace(CLIInitStepCompleted)\n\n if (options.reconfigure) {\n throw new InitError('--reconfigure is deprecated - manual configuration is now required', 1)\n }\n\n if (options.project && options.organization) {\n throw new InitError(\n 'You have specified both a project and an organization. To move a project to an organization please visit https://www.sanity.io/manage',\n 1,\n )\n }\n\n const defaultConfig = options.datasetDefault\n let showDefaultConfigPrompt = !defaultConfig\n if (options.dataset || options.visibility || options.datasetDefault || options.unattended) {\n showDefaultConfigPrompt = false\n }\n\n const detectedFramework = await detectFrameworkRecord({\n frameworkList: frameworks as readonly Framework[],\n rootPath: workDir,\n })\n const isNextJs = detectedFramework?.slug === 'nextjs'\n\n let remoteTemplateInfo: RepoInfo | undefined\n if (options.template && checkIsRemoteTemplate(options.template)) {\n remoteTemplateInfo = await getGitHubRepoInfo(options.template, options.templateToken)\n }\n\n if (detectedFramework && detectedFramework.slug !== 'sanity' && remoteTemplateInfo) {\n throw new InitError(\n `A remote template cannot be used with a detected framework. Detected: ${detectedFramework.name}`,\n 1,\n )\n }\n\n const isAppTemplate = options.template ? determineAppTemplate(options.template) : false\n\n if (options.unattended) {\n checkFlagsInUnattendedMode(options, {isAppTemplate, isNextJs})\n }\n\n trace.start()\n trace.log({\n flags: {\n bare: options.bare,\n coupon: options.coupon,\n defaultConfig,\n env: options.env,\n git: typeof options.git === 'string' ? options.git : undefined,\n plan: options.projectPlan,\n reconfigure: options.reconfigure,\n unattended: options.unattended,\n },\n step: 'start',\n })\n\n const planId = await getPlan(options, output, trace)\n\n let envFilenameDefault = '.env'\n if (detectedFramework && detectedFramework.slug === 'nextjs') {\n envFilenameDefault = '.env.local'\n }\n const envFilename = typeof options.env === 'string' ? options.env : envFilenameDefault\n\n const {user} = await ensureAuthenticated(options, output, trace)\n if (!isAppTemplate) {\n output.log(`${logSymbols.success} Fetching existing projects`)\n output.log('')\n }\n\n let newProject: string | undefined\n if (options.projectName) {\n newProject = await createProjectFromName({\n coupon: options.coupon,\n createProjectName: options.projectName,\n dataset: options.dataset,\n organization: options.organization,\n planId,\n user,\n visibility: options.visibility,\n })\n }\n\n const {datasetName, displayName, isFirstProject, organizationId, projectId} =\n await getProjectDetails({\n coupon: options.coupon,\n dataset: options.dataset,\n datasetDefault: options.datasetDefault,\n isAppTemplate,\n newProject,\n organization: options.organization,\n output,\n planId,\n project: options.project,\n showDefaultConfigPrompt,\n trace,\n unattended: options.unattended,\n user,\n visibility: options.visibility,\n })\n\n if (options.bare) {\n output.log(`${logSymbols.success} Below are your project details`)\n output.log('')\n output.log(`Project ID: ${styleText('cyan', projectId)}`)\n output.log(`Dataset: ${styleText('cyan', datasetName)}`)\n output.log(\n `\\nYou can find your project on Sanity Manage — https://www.sanity.io/manage/project/${projectId}\\n`,\n )\n trace.complete()\n return\n }\n\n let initNext = flagOrDefault(options.nextjsAddConfigFiles, false)\n if (isNextJs && shouldPrompt(options.unattended, options.nextjsAddConfigFiles)) {\n initNext = await promptForConfigFiles()\n }\n\n trace.log({\n detectedFramework: detectedFramework?.name,\n selectedOption: initNext ? 'yes' : 'no',\n step: 'useDetectedFramework',\n })\n\n const sluggedName = deburr(displayName.toLowerCase())\n .replaceAll(/\\s+/g, '-')\n .replaceAll(/[^a-z0-9-]/g, '')\n\n const initFramework = initNext\n\n const defaults = await getProjectDefaults({isPlugin: false, workDir})\n\n const outputPath = await getProjectOutputPath({\n initFramework,\n outputPath: options.outputPath,\n sluggedName,\n unattended: options.unattended,\n useEnv: Boolean(options.env),\n workDir,\n })\n\n // Detect editors once, then share the result with MCP and skills setup so\n // we don't pay the detection cost (filesystem probes + CLI execa calls) twice.\n const detectedEditors =\n options.mcpMode === 'skip' && options.skillsMode === 'skip'\n ? []\n : await detectAvailableEditors()\n\n const mcpResult = await setupMCP({\n editors: detectedEditors,\n mode: options.mcpMode,\n skillsMode: options.skillsMode,\n })\n\n trace.log({\n configuredEditors: mcpResult.configuredEditors,\n detectedEditors: mcpResult.detectedEditors,\n skipped: mcpResult.skipped,\n step: 'mcpSetup',\n })\n if (mcpResult.error) {\n trace.error(mcpResult.error)\n }\n const mcpConfigured = mcpResult.configuredEditors\n\n async function installSkills(): Promise<void> {\n if (mcpResult.skillsToInstall.length === 0) return\n try {\n const skillsResult = await setupSkills({agents: mcpResult.skillsToInstall})\n trace.log({\n installedAgents: skillsResult.installedAgents,\n skipped: skillsResult.skipped,\n step: 'skillsSetup',\n })\n if (skillsResult.error) {\n trace.error(skillsResult.error)\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n debug('Unexpected error from setupSkills %O', err)\n output.warn(`Could not install Sanity agent skills: ${err.message}`)\n trace.error(err)\n }\n }\n\n const {alreadyConfiguredEditors} = mcpResult\n if (alreadyConfiguredEditors.length > 0) {\n const label =\n alreadyConfiguredEditors.length === 1\n ? `${alreadyConfiguredEditors[0]} already configured for Sanity MCP`\n : `${alreadyConfiguredEditors.length} editors already configured for Sanity MCP`\n spinner(label).start().succeed()\n }\n\n if (isNextJs) {\n await checkNextJsReactCompatibility({\n detectedFramework,\n output,\n outputPath,\n })\n }\n\n if (initNext) {\n await initNextJs({\n datasetName,\n detectedFramework,\n envFilename,\n mcpConfigured,\n options,\n output,\n projectId,\n trace,\n workDir,\n })\n await installSkills()\n trace.complete()\n return\n }\n\n if (options.env) {\n await createOrAppendEnvVars({\n envVars: {\n DATASET: datasetName,\n PROJECT_ID: projectId,\n },\n filename: envFilename,\n framework: detectedFramework,\n log: false,\n output,\n outputPath,\n })\n await writeStagingEnvIfNeeded(output, outputPath)\n await installSkills()\n trace.complete()\n return\n }\n\n const sharedParams = {\n defaults,\n mcpConfigured,\n options,\n organizationId,\n output,\n outputPath,\n remoteTemplateInfo,\n sluggedName,\n trace,\n workDir,\n }\n\n await (isAppTemplate\n ? initApp({...sharedParams, datasetName, projectId})\n : initStudio({\n ...sharedParams,\n datasetName,\n displayName,\n isFirstProject,\n projectId,\n }))\n\n await installSkills()\n\n trace.complete()\n}\n\nfunction checkFlagsInUnattendedMode(\n options: InitOptions,\n {isAppTemplate, isNextJs}: {isAppTemplate: boolean; isNextJs: boolean},\n): void {\n debug('Unattended mode, validating required options')\n\n if (options.projectName && !options.organization) {\n throw new InitError('`--project-name` requires `--organization <id>` in unattended mode', 1)\n }\n\n if (isAppTemplate) {\n if (!options.outputPath) {\n throw new InitError('`--output-path` must be specified in unattended mode', 1)\n }\n\n const hasProjectFlag = Boolean(options.project || options.projectName)\n\n if (!hasProjectFlag && !options.organization) {\n throw new InitError(\n 'The --organization flag is required for app templates in unattended mode. ' +\n 'Use --organization <id>, or pass --project <id> / --project-name <name>.',\n 1,\n )\n }\n\n return\n }\n\n if (!isNextJs && !options.bare && !options.outputPath) {\n throw new InitError('`--output-path` must be specified in unattended mode', 1)\n }\n\n if (!options.project && !options.projectName) {\n throw new InitError(\n '`--project <id>` or `--project-name <name>` must be specified in unattended mode',\n 1,\n )\n }\n}\n\nasync function ensureAuthenticated(\n options: InitOptions,\n output: InitContext['output'],\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>,\n): Promise<{user: SanityOrgUser}> {\n const user = await validateSession()\n\n if (user) {\n trace.log({alreadyLoggedIn: true, step: 'login'})\n output.log(\n `${logSymbols.success} You are logged in as ${user.email} using ${getProviderName(user.provider)}`,\n )\n return {user}\n }\n\n if (options.unattended) {\n throw new InitError(\n 'Must be logged in to run this command in unattended mode, run `sanity login`',\n 1,\n )\n }\n\n trace.log({step: 'login'})\n\n try {\n await login({\n output,\n telemetry: trace.newContext('login'),\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new InitError(`Login failed: ${message}`, 1)\n }\n\n const loggedInUser = await getCliUser()\n\n output.log(\n `${logSymbols.success} You are logged in as ${loggedInUser.email} using ${getProviderName(loggedInUser.provider)}`,\n )\n return {user: loggedInUser}\n}\n"],"names":["styleText","subdebug","logSymbols","spinner","frameworks","deburr","promptForConfigFiles","getCliUser","CLIInitStepCompleted","detectFrameworkRecord","getProjectDefaults","validateSession","getProviderName","login","detectAvailableEditors","setupMCP","setupSkills","checkNextJsReactCompatibility","determineAppTemplate","createOrAppendEnvVars","initApp","InitError","flagOrDefault","shouldPrompt","writeStagingEnvIfNeeded","initNextJs","initStudio","getPlan","createProjectFromName","getProjectDetails","getProjectOutputPath","checkIsRemoteTemplate","getGitHubRepoInfo","debug","initAction","options","context","output","workDir","argType","trace","telemetry","reconfigure","project","organization","defaultConfig","datasetDefault","showDefaultConfigPrompt","dataset","visibility","unattended","detectedFramework","frameworkList","rootPath","isNextJs","slug","remoteTemplateInfo","template","templateToken","name","isAppTemplate","checkFlagsInUnattendedMode","start","log","flags","bare","coupon","env","git","undefined","plan","projectPlan","step","planId","envFilenameDefault","envFilename","user","ensureAuthenticated","success","newProject","projectName","createProjectName","datasetName","displayName","isFirstProject","organizationId","projectId","complete","initNext","nextjsAddConfigFiles","selectedOption","sluggedName","toLowerCase","replaceAll","initFramework","defaults","isPlugin","outputPath","useEnv","Boolean","detectedEditors","mcpMode","skillsMode","mcpResult","editors","mode","configuredEditors","skipped","error","mcpConfigured","installSkills","skillsToInstall","length","skillsResult","agents","installedAgents","err","Error","String","warn","message","alreadyConfiguredEditors","label","succeed","envVars","DATASET","PROJECT_ID","filename","framework","sharedParams","hasProjectFlag","alreadyLoggedIn","email","provider","newContext","loggedInUser"],"mappings":"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"}
@@ -1,35 +1,49 @@
1
1
  import { select } from '@sanity/cli-core/ux';
2
2
  import { promptForTypeScript } from '../../prompts/init/promptForTypescript.js';
3
+ import { getSanityEnv } from '../../util/getSanityEnv.js';
3
4
  import { installDeclaredPackages } from '../../util/packageManager/installPackages.js';
4
5
  import { bootstrapTemplate } from './bootstrapTemplate.js';
5
6
  import { tryGitInit } from './git.js';
6
7
  import { flagOrDefault, shouldPrompt, writeStagingEnvIfNeeded } from './initHelpers.js';
7
8
  import { resolvePackageManager } from './resolvePackageManager.js';
8
9
  import templates from './templates/index.js';
10
+ const baseTemplateChoices = [
11
+ {
12
+ name: 'Clean project with no predefined schema types',
13
+ value: 'clean'
14
+ },
15
+ {
16
+ name: 'Blog (schema)',
17
+ value: 'blog'
18
+ },
19
+ {
20
+ name: 'E-commerce (Shopify)',
21
+ value: 'shopify'
22
+ },
23
+ {
24
+ name: 'Movie project (schema + sample data)',
25
+ value: 'moviedb'
26
+ }
27
+ ];
28
+ const stagingTemplateChoices = [
29
+ {
30
+ name: 'Page Builder (presets)',
31
+ value: 'page-builder'
32
+ }
33
+ ];
34
+ export function getTemplateChoices(env) {
35
+ return env === 'production' ? baseTemplateChoices : [
36
+ ...baseTemplateChoices,
37
+ ...stagingTemplateChoices
38
+ ];
39
+ }
9
40
  async function promptForTemplate(params) {
10
41
  const defaultTemplate = params.unattended || params.template ? params.template || 'clean' : null;
11
42
  if (defaultTemplate) {
12
43
  return defaultTemplate;
13
44
  }
14
45
  return select({
15
- choices: [
16
- {
17
- name: 'Clean project with no predefined schema types',
18
- value: 'clean'
19
- },
20
- {
21
- name: 'Blog (schema)',
22
- value: 'blog'
23
- },
24
- {
25
- name: 'E-commerce (Shopify)',
26
- value: 'shopify'
27
- },
28
- {
29
- name: 'Movie project (schema + sample data)',
30
- value: 'moviedb'
31
- }
32
- ],
46
+ choices: getTemplateChoices(getSanityEnv()),
33
47
  message: 'Select project template'
34
48
  });
35
49
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/init/scaffoldTemplate.ts"],"sourcesContent":["import {type Output, type TelemetryUserProperties} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {type TelemetryTrace} from '@sanity/telemetry'\n\nimport {promptForTypeScript} from '../../prompts/init/promptForTypescript.js'\nimport {type InitStepResult} from '../../telemetry/init.telemetry.js'\nimport {installDeclaredPackages} from '../../util/packageManager/installPackages.js'\nimport {type PackageManager} from '../../util/packageManager/packageManagerChoice.js'\nimport {bootstrapTemplate} from './bootstrapTemplate.js'\nimport {tryGitInit} from './git.js'\nimport {flagOrDefault, shouldPrompt, writeStagingEnvIfNeeded} from './initHelpers.js'\nimport {type RepoInfo} from './remoteTemplate.js'\nimport {resolvePackageManager} from './resolvePackageManager.js'\nimport templates from './templates/index.js'\nimport {type InitOptions, type ProjectTemplate} from './types.js'\n\ninterface SelectedTemplate {\n template: ProjectTemplate | undefined\n templateName: string\n useTypeScript: boolean\n}\n\nasync function promptForTemplate(params: {\n template?: string\n unattended: boolean\n}): Promise<string> {\n const defaultTemplate = params.unattended || params.template ? params.template || 'clean' : null\n if (defaultTemplate) {\n return defaultTemplate\n }\n\n return select({\n choices: [\n {\n name: 'Clean project with no predefined schema types',\n value: 'clean',\n },\n {\n name: 'Blog (schema)',\n value: 'blog',\n },\n {\n name: 'E-commerce (Shopify)',\n value: 'shopify',\n },\n {\n name: 'Movie project (schema + sample data)',\n value: 'moviedb',\n },\n ],\n message: 'Select project template',\n })\n}\n\nexport async function selectTemplate({\n options,\n remoteTemplateInfo,\n trace,\n}: {\n options: InitOptions\n remoteTemplateInfo: RepoInfo | undefined\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n}): Promise<SelectedTemplate> {\n const {template, typescript, unattended} = options\n const templateName = await promptForTemplate({template, unattended})\n trace.log({\n selectedOption: templateName,\n step: 'selectProjectTemplate',\n })\n\n const resolvedTemplate = templates[templateName]\n\n let useTypeScript = flagOrDefault(typescript, true)\n if (!remoteTemplateInfo && resolvedTemplate && resolvedTemplate.typescriptOnly === true) {\n useTypeScript = true\n } else if (shouldPrompt(unattended, typescript)) {\n useTypeScript = await promptForTypeScript()\n trace.log({\n selectedOption: useTypeScript ? 'yes' : 'no',\n step: 'useTypeScript',\n })\n }\n\n return {\n template: resolvedTemplate,\n templateName,\n useTypeScript,\n }\n}\n\nexport async function scaffoldAndInstall({\n datasetName,\n defaults,\n displayName,\n options,\n organizationId,\n output,\n outputPath,\n projectId,\n remoteTemplateInfo,\n sluggedName,\n templateName,\n trace,\n useTypeScript,\n workDir,\n}: {\n datasetName: string\n defaults: {projectName: string}\n displayName: string\n options: InitOptions\n organizationId: string | undefined\n output: Output\n outputPath: string\n projectId: string\n remoteTemplateInfo: RepoInfo | undefined\n sluggedName: string\n templateName: string\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n useTypeScript: boolean\n workDir: string\n}): Promise<{pkgManager: PackageManager}> {\n const {autoUpdates, git, overwriteFiles, packageManager, templateToken, unattended} = options\n const noGit = typeof git === 'boolean' && !git ? true : undefined\n\n await bootstrapTemplate({\n autoUpdates,\n bearerToken: templateToken,\n dataset: datasetName,\n organizationId,\n output,\n outputPath,\n overwriteFiles,\n packageName: sluggedName,\n projectId,\n projectName: displayName || defaults.projectName,\n remoteTemplateInfo,\n templateName,\n useTypeScript,\n })\n\n const pkgManager = await resolvePackageManager({\n interactive: !unattended,\n output,\n packageManager: packageManager as PackageManager,\n targetDir: outputPath,\n })\n\n trace.log({\n selectedOption: pkgManager,\n step: 'selectPackageManager',\n })\n\n // Now for the slow part... installing dependencies\n await installDeclaredPackages(outputPath, pkgManager, {\n output,\n workDir,\n })\n\n const useGit = !noGit && (git === undefined || Boolean(git))\n const commitMessage = git\n await writeStagingEnvIfNeeded(output, outputPath)\n\n // Try initializing a git repository\n if (useGit) {\n tryGitInit(outputPath, typeof commitMessage === 'string' ? commitMessage : undefined)\n }\n\n return {pkgManager}\n}\n"],"names":["select","promptForTypeScript","installDeclaredPackages","bootstrapTemplate","tryGitInit","flagOrDefault","shouldPrompt","writeStagingEnvIfNeeded","resolvePackageManager","templates","promptForTemplate","params","defaultTemplate","unattended","template","choices","name","value","message","selectTemplate","options","remoteTemplateInfo","trace","typescript","templateName","log","selectedOption","step","resolvedTemplate","useTypeScript","typescriptOnly","scaffoldAndInstall","datasetName","defaults","displayName","organizationId","output","outputPath","projectId","sluggedName","workDir","autoUpdates","git","overwriteFiles","packageManager","templateToken","noGit","undefined","bearerToken","dataset","packageName","projectName","pkgManager","interactive","targetDir","useGit","Boolean","commitMessage"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/init/scaffoldTemplate.ts"],"sourcesContent":["import {type Output, type TelemetryUserProperties} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {type TelemetryTrace} from '@sanity/telemetry'\n\nimport {promptForTypeScript} from '../../prompts/init/promptForTypescript.js'\nimport {type InitStepResult} from '../../telemetry/init.telemetry.js'\nimport {getSanityEnv} from '../../util/getSanityEnv.js'\nimport {installDeclaredPackages} from '../../util/packageManager/installPackages.js'\nimport {type PackageManager} from '../../util/packageManager/packageManagerChoice.js'\nimport {bootstrapTemplate} from './bootstrapTemplate.js'\nimport {tryGitInit} from './git.js'\nimport {flagOrDefault, shouldPrompt, writeStagingEnvIfNeeded} from './initHelpers.js'\nimport {type RepoInfo} from './remoteTemplate.js'\nimport {resolvePackageManager} from './resolvePackageManager.js'\nimport templates from './templates/index.js'\nimport {type InitOptions, type ProjectTemplate} from './types.js'\n\ninterface SelectedTemplate {\n template: ProjectTemplate | undefined\n templateName: string\n useTypeScript: boolean\n}\n\ninterface TemplateChoice {\n name: string\n value: string\n}\n\nconst baseTemplateChoices: TemplateChoice[] = [\n {name: 'Clean project with no predefined schema types', value: 'clean'},\n {name: 'Blog (schema)', value: 'blog'},\n {name: 'E-commerce (Shopify)', value: 'shopify'},\n {name: 'Movie project (schema + sample data)', value: 'moviedb'},\n]\n\nconst stagingTemplateChoices: TemplateChoice[] = [\n {name: 'Page Builder (presets)', value: 'page-builder'},\n]\n\nexport function getTemplateChoices(env: string): TemplateChoice[] {\n return env === 'production'\n ? baseTemplateChoices\n : [...baseTemplateChoices, ...stagingTemplateChoices]\n}\n\nasync function promptForTemplate(params: {\n template?: string\n unattended: boolean\n}): Promise<string> {\n const defaultTemplate = params.unattended || params.template ? params.template || 'clean' : null\n if (defaultTemplate) {\n return defaultTemplate\n }\n\n return select({\n choices: getTemplateChoices(getSanityEnv()),\n message: 'Select project template',\n })\n}\n\nexport async function selectTemplate({\n options,\n remoteTemplateInfo,\n trace,\n}: {\n options: InitOptions\n remoteTemplateInfo: RepoInfo | undefined\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n}): Promise<SelectedTemplate> {\n const {template, typescript, unattended} = options\n const templateName = await promptForTemplate({template, unattended})\n trace.log({\n selectedOption: templateName,\n step: 'selectProjectTemplate',\n })\n\n const resolvedTemplate = templates[templateName]\n\n let useTypeScript = flagOrDefault(typescript, true)\n if (!remoteTemplateInfo && resolvedTemplate && resolvedTemplate.typescriptOnly === true) {\n useTypeScript = true\n } else if (shouldPrompt(unattended, typescript)) {\n useTypeScript = await promptForTypeScript()\n trace.log({\n selectedOption: useTypeScript ? 'yes' : 'no',\n step: 'useTypeScript',\n })\n }\n\n return {\n template: resolvedTemplate,\n templateName,\n useTypeScript,\n }\n}\n\nexport async function scaffoldAndInstall({\n datasetName,\n defaults,\n displayName,\n options,\n organizationId,\n output,\n outputPath,\n projectId,\n remoteTemplateInfo,\n sluggedName,\n templateName,\n trace,\n useTypeScript,\n workDir,\n}: {\n datasetName: string\n defaults: {projectName: string}\n displayName: string\n options: InitOptions\n organizationId: string | undefined\n output: Output\n outputPath: string\n projectId: string\n remoteTemplateInfo: RepoInfo | undefined\n sluggedName: string\n templateName: string\n trace: TelemetryTrace<TelemetryUserProperties, InitStepResult>\n useTypeScript: boolean\n workDir: string\n}): Promise<{pkgManager: PackageManager}> {\n const {autoUpdates, git, overwriteFiles, packageManager, templateToken, unattended} = options\n const noGit = typeof git === 'boolean' && !git ? true : undefined\n\n await bootstrapTemplate({\n autoUpdates,\n bearerToken: templateToken,\n dataset: datasetName,\n organizationId,\n output,\n outputPath,\n overwriteFiles,\n packageName: sluggedName,\n projectId,\n projectName: displayName || defaults.projectName,\n remoteTemplateInfo,\n templateName,\n useTypeScript,\n })\n\n const pkgManager = await resolvePackageManager({\n interactive: !unattended,\n output,\n packageManager: packageManager as PackageManager,\n targetDir: outputPath,\n })\n\n trace.log({\n selectedOption: pkgManager,\n step: 'selectPackageManager',\n })\n\n // Now for the slow part... installing dependencies\n await installDeclaredPackages(outputPath, pkgManager, {\n output,\n workDir,\n })\n\n const useGit = !noGit && (git === undefined || Boolean(git))\n const commitMessage = git\n await writeStagingEnvIfNeeded(output, outputPath)\n\n // Try initializing a git repository\n if (useGit) {\n tryGitInit(outputPath, typeof commitMessage === 'string' ? commitMessage : undefined)\n }\n\n return {pkgManager}\n}\n"],"names":["select","promptForTypeScript","getSanityEnv","installDeclaredPackages","bootstrapTemplate","tryGitInit","flagOrDefault","shouldPrompt","writeStagingEnvIfNeeded","resolvePackageManager","templates","baseTemplateChoices","name","value","stagingTemplateChoices","getTemplateChoices","env","promptForTemplate","params","defaultTemplate","unattended","template","choices","message","selectTemplate","options","remoteTemplateInfo","trace","typescript","templateName","log","selectedOption","step","resolvedTemplate","useTypeScript","typescriptOnly","scaffoldAndInstall","datasetName","defaults","displayName","organizationId","output","outputPath","projectId","sluggedName","workDir","autoUpdates","git","overwriteFiles","packageManager","templateToken","noGit","undefined","bearerToken","dataset","packageName","projectName","pkgManager","interactive","targetDir","useGit","Boolean","commitMessage"],"mappings":"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"}
@@ -4,6 +4,7 @@ import blog from './blog.js';
4
4
  import clean from './clean.js';
5
5
  import getStartedTemplate from './getStarted.js';
6
6
  import moviedb from './moviedb.js';
7
+ import pageBuilder from './pageBuilder.js';
7
8
  import quickstart from './quickstart.js';
8
9
  import shopify from './shopify.js';
9
10
  import shopifyOnline from './shopifyOnline.js';
@@ -14,6 +15,7 @@ const templates = {
14
15
  clean,
15
16
  'get-started': getStartedTemplate,
16
17
  moviedb,
18
+ 'page-builder': pageBuilder,
17
19
  quickstart,
18
20
  shopify,
19
21
  'shopify-online-storefront': shopifyOnline
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/init/templates/index.ts"],"sourcesContent":["import {type ProjectTemplate} from '../types.js'\nimport appTemplate from './appQuickstart.js'\nimport appSanityUiTemplate from './appSanityUi.js'\nimport blog from './blog.js'\nimport clean from './clean.js'\nimport getStartedTemplate from './getStarted.js'\nimport moviedb from './moviedb.js'\nimport quickstart from './quickstart.js'\nimport shopify from './shopify.js'\nimport shopifyOnline from './shopifyOnline.js'\n\nconst templates: Record<string, ProjectTemplate | undefined> = {\n 'app-quickstart': appTemplate,\n 'app-sanity-ui': appSanityUiTemplate,\n blog,\n clean,\n 'get-started': getStartedTemplate,\n moviedb,\n quickstart, // empty project that dynamically imports its own schema\n shopify,\n 'shopify-online-storefront': shopifyOnline,\n}\n\nexport default templates\n"],"names":["appTemplate","appSanityUiTemplate","blog","clean","getStartedTemplate","moviedb","quickstart","shopify","shopifyOnline","templates"],"mappings":"AACA,OAAOA,iBAAiB,qBAAoB;AAC5C,OAAOC,yBAAyB,mBAAkB;AAClD,OAAOC,UAAU,YAAW;AAC5B,OAAOC,WAAW,aAAY;AAC9B,OAAOC,wBAAwB,kBAAiB;AAChD,OAAOC,aAAa,eAAc;AAClC,OAAOC,gBAAgB,kBAAiB;AACxC,OAAOC,aAAa,eAAc;AAClC,OAAOC,mBAAmB,qBAAoB;AAE9C,MAAMC,YAAyD;IAC7D,kBAAkBT;IAClB,iBAAiBC;IACjBC;IACAC;IACA,eAAeC;IACfC;IACAC;IACAC;IACA,6BAA6BC;AAC/B;AAEA,eAAeC,UAAS"}
1
+ {"version":3,"sources":["../../../../src/actions/init/templates/index.ts"],"sourcesContent":["import {type ProjectTemplate} from '../types.js'\nimport appTemplate from './appQuickstart.js'\nimport appSanityUiTemplate from './appSanityUi.js'\nimport blog from './blog.js'\nimport clean from './clean.js'\nimport getStartedTemplate from './getStarted.js'\nimport moviedb from './moviedb.js'\nimport pageBuilder from './pageBuilder.js'\nimport quickstart from './quickstart.js'\nimport shopify from './shopify.js'\nimport shopifyOnline from './shopifyOnline.js'\n\nconst templates: Record<string, ProjectTemplate | undefined> = {\n 'app-quickstart': appTemplate,\n 'app-sanity-ui': appSanityUiTemplate,\n blog,\n clean,\n 'get-started': getStartedTemplate,\n moviedb,\n 'page-builder': pageBuilder,\n quickstart, // empty project that dynamically imports its own schema\n shopify,\n 'shopify-online-storefront': shopifyOnline,\n}\n\nexport default templates\n"],"names":["appTemplate","appSanityUiTemplate","blog","clean","getStartedTemplate","moviedb","pageBuilder","quickstart","shopify","shopifyOnline","templates"],"mappings":"AACA,OAAOA,iBAAiB,qBAAoB;AAC5C,OAAOC,yBAAyB,mBAAkB;AAClD,OAAOC,UAAU,YAAW;AAC5B,OAAOC,WAAW,aAAY;AAC9B,OAAOC,wBAAwB,kBAAiB;AAChD,OAAOC,aAAa,eAAc;AAClC,OAAOC,iBAAiB,mBAAkB;AAC1C,OAAOC,gBAAgB,kBAAiB;AACxC,OAAOC,aAAa,eAAc;AAClC,OAAOC,mBAAmB,qBAAoB;AAE9C,MAAMC,YAAyD;IAC7D,kBAAkBV;IAClB,iBAAiBC;IACjBC;IACAC;IACA,eAAeC;IACfC;IACA,gBAAgBC;IAChBC;IACAC;IACA,6BAA6BC;AAC/B;AAEA,eAAeC,UAAS"}
@@ -0,0 +1,32 @@
1
+ const configTemplate = `
2
+ import {defineConfig} from 'sanity'
3
+ import {structureTool} from 'sanity/structure'
4
+ import {visionTool} from '@sanity/vision'
5
+ import {schemaTypes} from './schemaTypes'
6
+
7
+ export default defineConfig({
8
+ name: '%sourceName%',
9
+ title: '%projectName%',
10
+
11
+ projectId: '%projectId%',
12
+ dataset: '%dataset%',
13
+
14
+ plugins: [
15
+ structureTool(),
16
+ visionTool(),
17
+ ],
18
+
19
+ schema: {
20
+ types: schemaTypes,
21
+ },
22
+ })
23
+ `;
24
+ const pageBuilderTemplate = {
25
+ configTemplate,
26
+ dependencies: {
27
+ '@sanity/presets': '^0.4.1'
28
+ }
29
+ };
30
+ export default pageBuilderTemplate;
31
+
32
+ //# sourceMappingURL=pageBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/actions/init/templates/pageBuilder.ts"],"sourcesContent":["import {type ProjectTemplate} from '../types.js'\n\nconst configTemplate = `\nimport {defineConfig} from 'sanity'\nimport {structureTool} from 'sanity/structure'\nimport {visionTool} from '@sanity/vision'\nimport {schemaTypes} from './schemaTypes'\n\nexport default defineConfig({\n name: '%sourceName%',\n title: '%projectName%',\n\n projectId: '%projectId%',\n dataset: '%dataset%',\n\n plugins: [\n structureTool(),\n visionTool(),\n ],\n\n schema: {\n types: schemaTypes,\n },\n})\n`\n\nconst pageBuilderTemplate: ProjectTemplate = {\n configTemplate,\n dependencies: {\n '@sanity/presets': '^0.4.1',\n },\n}\n\nexport default pageBuilderTemplate\n"],"names":["configTemplate","pageBuilderTemplate","dependencies"],"mappings":"AAEA,MAAMA,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;AAsBxB,CAAC;AAED,MAAMC,sBAAuC;IAC3CD;IACAE,cAAc;QACZ,mBAAmB;IACrB;AACF;AAEA,eAAeD,oBAAmB"}
@@ -13,7 +13,7 @@ const VALID_VISIBILITIES = new Set([
13
13
  function narrowVisibility(value) {
14
14
  return value !== undefined && VALID_VISIBILITIES.has(value) ? value : undefined;
15
15
  }
16
- export function flagsToInitOptions(flags, isUnattended, args, mcpMode) {
16
+ export function flagsToInitOptions(flags, isUnattended, args, mcpMode, skillsMode) {
17
17
  return {
18
18
  argType: args?.type,
19
19
  autoUpdates: flags['auto-updates'],
@@ -38,6 +38,7 @@ export function flagsToInitOptions(flags, isUnattended, args, mcpMode) {
38
38
  projectPlan: flags['project-plan'],
39
39
  provider: flags.provider,
40
40
  reconfigure: flags.reconfigure,
41
+ skillsMode,
41
42
  template: flags.template,
42
43
  templateToken: flags['template-token'],
43
44
  typescript: flags.typescript,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/init/types.ts"],"sourcesContent":["import {type CLITelemetryStore, type Output} from '@sanity/cli-core'\nimport {type Framework} from '@vercel/frameworks'\n\nimport {type GenerateConfigOptions} from './createStudioConfig.js'\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 type?: 'commonjs' | 'module'\n typescriptOnly?: boolean\n}\n\nexport interface InitOptions {\n autoUpdates: boolean\n bare: boolean\n datasetDefault: boolean\n fromCreate: boolean\n mcpMode: 'auto' | 'prompt' | 'skip'\n unattended: boolean\n\n argType?: string\n coupon?: string\n dataset?: string\n env?: string\n git?: boolean | string\n importDataset?: boolean\n nextjsAddConfigFiles?: boolean\n nextjsAppendEnv?: boolean\n nextjsEmbedStudio?: boolean\n organization?: string\n outputPath?: string\n overwriteFiles?: boolean\n packageManager?: 'npm' | 'pnpm' | 'yarn'\n project?: string\n projectName?: string\n projectPlan?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n templateToken?: string\n typescript?: boolean\n visibility?: 'private' | 'public'\n}\n\nexport interface InitContext {\n output: Output\n telemetry: CLITelemetryStore\n workDir: string\n}\n\ninterface InitCommandFlags {\n 'auto-updates': boolean\n bare: boolean\n 'dataset-default': boolean\n 'from-create': boolean\n mcp: boolean\n 'no-git': boolean\n\n coupon?: string\n 'create-project'?: string\n dataset?: string\n env?: string\n git?: string\n 'import-dataset'?: boolean\n 'nextjs-add-config-files'?: boolean\n 'nextjs-append-env'?: boolean\n 'nextjs-embed-studio'?: boolean\n organization?: string\n 'output-path'?: string\n 'overwrite-files'?: boolean\n 'package-manager'?: string\n project?: string\n 'project-name'?: string\n 'project-plan'?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n 'template-token'?: string\n typescript?: boolean\n visibility?: string\n}\n\ninterface InitCommandArgs {\n type?: string\n}\n\nconst VALID_PACKAGE_MANAGERS = new Set<string>(['npm', 'pnpm', 'yarn'])\nfunction narrowPackageManager(value: string | undefined): InitOptions['packageManager'] {\n return value !== undefined && VALID_PACKAGE_MANAGERS.has(value)\n ? (value as InitOptions['packageManager'])\n : undefined\n}\n\nconst VALID_VISIBILITIES = new Set<string>(['private', 'public'])\nfunction narrowVisibility(value: string | undefined): InitOptions['visibility'] {\n return value !== undefined && VALID_VISIBILITIES.has(value)\n ? (value as InitOptions['visibility'])\n : undefined\n}\n\nexport function flagsToInitOptions(\n flags: InitCommandFlags,\n isUnattended: boolean,\n args: InitCommandArgs | undefined,\n mcpMode: InitOptions['mcpMode'],\n): InitOptions {\n return {\n argType: args?.type,\n autoUpdates: flags['auto-updates'],\n bare: flags.bare,\n coupon: flags.coupon,\n dataset: flags.dataset,\n datasetDefault: flags['dataset-default'],\n env: flags.env,\n fromCreate: flags['from-create'],\n git: flags['no-git'] ? false : flags.git,\n importDataset: flags['import-dataset'],\n mcpMode,\n nextjsAddConfigFiles: flags['nextjs-add-config-files'],\n nextjsAppendEnv: flags['nextjs-append-env'],\n nextjsEmbedStudio: flags['nextjs-embed-studio'],\n organization: flags.organization,\n outputPath: flags['output-path'],\n overwriteFiles: flags['overwrite-files'],\n packageManager: narrowPackageManager(flags['package-manager']),\n project: flags.project,\n projectName: flags['project-name'] ?? flags['create-project'],\n projectPlan: flags['project-plan'],\n provider: flags.provider,\n reconfigure: flags.reconfigure,\n template: flags.template,\n templateToken: flags['template-token'],\n typescript: flags.typescript,\n unattended: isUnattended,\n visibility: narrowVisibility(flags.visibility),\n }\n}\n"],"names":["VALID_PACKAGE_MANAGERS","Set","narrowPackageManager","value","undefined","has","VALID_VISIBILITIES","narrowVisibility","flagsToInitOptions","flags","isUnattended","args","mcpMode","argType","type","autoUpdates","bare","coupon","dataset","datasetDefault","env","fromCreate","git","importDataset","nextjsAddConfigFiles","nextjsAppendEnv","nextjsEmbedStudio","organization","outputPath","overwriteFiles","packageManager","project","projectName","projectPlan","provider","reconfigure","template","templateToken","typescript","unattended","visibility"],"mappings":"AA+FA,MAAMA,yBAAyB,IAAIC,IAAY;IAAC;IAAO;IAAQ;CAAO;AACtE,SAASC,qBAAqBC,KAAyB;IACrD,OAAOA,UAAUC,aAAaJ,uBAAuBK,GAAG,CAACF,SACpDA,QACDC;AACN;AAEA,MAAME,qBAAqB,IAAIL,IAAY;IAAC;IAAW;CAAS;AAChE,SAASM,iBAAiBJ,KAAyB;IACjD,OAAOA,UAAUC,aAAaE,mBAAmBD,GAAG,CAACF,SAChDA,QACDC;AACN;AAEA,OAAO,SAASI,mBACdC,KAAuB,EACvBC,YAAqB,EACrBC,IAAiC,EACjCC,OAA+B;IAE/B,OAAO;QACLC,SAASF,MAAMG;QACfC,aAAaN,KAAK,CAAC,eAAe;QAClCO,MAAMP,MAAMO,IAAI;QAChBC,QAAQR,MAAMQ,MAAM;QACpBC,SAAST,MAAMS,OAAO;QACtBC,gBAAgBV,KAAK,CAAC,kBAAkB;QACxCW,KAAKX,MAAMW,GAAG;QACdC,YAAYZ,KAAK,CAAC,cAAc;QAChCa,KAAKb,KAAK,CAAC,SAAS,GAAG,QAAQA,MAAMa,GAAG;QACxCC,eAAed,KAAK,CAAC,iBAAiB;QACtCG;QACAY,sBAAsBf,KAAK,CAAC,0BAA0B;QACtDgB,iBAAiBhB,KAAK,CAAC,oBAAoB;QAC3CiB,mBAAmBjB,KAAK,CAAC,sBAAsB;QAC/CkB,cAAclB,MAAMkB,YAAY;QAChCC,YAAYnB,KAAK,CAAC,cAAc;QAChCoB,gBAAgBpB,KAAK,CAAC,kBAAkB;QACxCqB,gBAAgB5B,qBAAqBO,KAAK,CAAC,kBAAkB;QAC7DsB,SAAStB,MAAMsB,OAAO;QACtBC,aAAavB,KAAK,CAAC,eAAe,IAAIA,KAAK,CAAC,iBAAiB;QAC7DwB,aAAaxB,KAAK,CAAC,eAAe;QAClCyB,UAAUzB,MAAMyB,QAAQ;QACxBC,aAAa1B,MAAM0B,WAAW;QAC9BC,UAAU3B,MAAM2B,QAAQ;QACxBC,eAAe5B,KAAK,CAAC,iBAAiB;QACtC6B,YAAY7B,MAAM6B,UAAU;QAC5BC,YAAY7B;QACZ8B,YAAYjC,iBAAiBE,MAAM+B,UAAU;IAC/C;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/init/types.ts"],"sourcesContent":["import {type CLITelemetryStore, type Output} from '@sanity/cli-core'\nimport {type Framework} from '@vercel/frameworks'\n\nimport {type GenerateConfigOptions} from './createStudioConfig.js'\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 type?: 'commonjs' | 'module'\n typescriptOnly?: boolean\n}\n\nexport interface InitOptions {\n autoUpdates: boolean\n bare: boolean\n datasetDefault: boolean\n fromCreate: boolean\n mcpMode: 'auto' | 'prompt' | 'skip'\n skillsMode: 'auto' | 'prompt' | 'skip'\n unattended: boolean\n\n argType?: string\n coupon?: string\n dataset?: string\n env?: string\n git?: boolean | string\n importDataset?: boolean\n nextjsAddConfigFiles?: boolean\n nextjsAppendEnv?: boolean\n nextjsEmbedStudio?: boolean\n organization?: string\n outputPath?: string\n overwriteFiles?: boolean\n packageManager?: 'npm' | 'pnpm' | 'yarn'\n project?: string\n projectName?: string\n projectPlan?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n templateToken?: string\n typescript?: boolean\n visibility?: 'private' | 'public'\n}\n\nexport interface InitContext {\n output: Output\n telemetry: CLITelemetryStore\n workDir: string\n}\n\ninterface InitCommandFlags {\n 'auto-updates': boolean\n bare: boolean\n 'dataset-default': boolean\n 'from-create': boolean\n mcp: boolean\n 'no-git': boolean\n skills: boolean\n\n coupon?: string\n 'create-project'?: string\n dataset?: string\n env?: string\n git?: string\n 'import-dataset'?: boolean\n 'nextjs-add-config-files'?: boolean\n 'nextjs-append-env'?: boolean\n 'nextjs-embed-studio'?: boolean\n organization?: string\n 'output-path'?: string\n 'overwrite-files'?: boolean\n 'package-manager'?: string\n project?: string\n 'project-name'?: string\n 'project-plan'?: string\n provider?: string\n reconfigure?: boolean\n template?: string\n 'template-token'?: string\n typescript?: boolean\n visibility?: string\n}\n\ninterface InitCommandArgs {\n type?: string\n}\n\nconst VALID_PACKAGE_MANAGERS = new Set<string>(['npm', 'pnpm', 'yarn'])\nfunction narrowPackageManager(value: string | undefined): InitOptions['packageManager'] {\n return value !== undefined && VALID_PACKAGE_MANAGERS.has(value)\n ? (value as InitOptions['packageManager'])\n : undefined\n}\n\nconst VALID_VISIBILITIES = new Set<string>(['private', 'public'])\nfunction narrowVisibility(value: string | undefined): InitOptions['visibility'] {\n return value !== undefined && VALID_VISIBILITIES.has(value)\n ? (value as InitOptions['visibility'])\n : undefined\n}\n\nexport function flagsToInitOptions(\n flags: InitCommandFlags,\n isUnattended: boolean,\n args: InitCommandArgs | undefined,\n mcpMode: InitOptions['mcpMode'],\n skillsMode: InitOptions['skillsMode'],\n): InitOptions {\n return {\n argType: args?.type,\n autoUpdates: flags['auto-updates'],\n bare: flags.bare,\n coupon: flags.coupon,\n dataset: flags.dataset,\n datasetDefault: flags['dataset-default'],\n env: flags.env,\n fromCreate: flags['from-create'],\n git: flags['no-git'] ? false : flags.git,\n importDataset: flags['import-dataset'],\n mcpMode,\n nextjsAddConfigFiles: flags['nextjs-add-config-files'],\n nextjsAppendEnv: flags['nextjs-append-env'],\n nextjsEmbedStudio: flags['nextjs-embed-studio'],\n organization: flags.organization,\n outputPath: flags['output-path'],\n overwriteFiles: flags['overwrite-files'],\n packageManager: narrowPackageManager(flags['package-manager']),\n project: flags.project,\n projectName: flags['project-name'] ?? flags['create-project'],\n projectPlan: flags['project-plan'],\n provider: flags.provider,\n reconfigure: flags.reconfigure,\n skillsMode,\n template: flags.template,\n templateToken: flags['template-token'],\n typescript: flags.typescript,\n unattended: isUnattended,\n visibility: narrowVisibility(flags.visibility),\n }\n}\n"],"names":["VALID_PACKAGE_MANAGERS","Set","narrowPackageManager","value","undefined","has","VALID_VISIBILITIES","narrowVisibility","flagsToInitOptions","flags","isUnattended","args","mcpMode","skillsMode","argType","type","autoUpdates","bare","coupon","dataset","datasetDefault","env","fromCreate","git","importDataset","nextjsAddConfigFiles","nextjsAppendEnv","nextjsEmbedStudio","organization","outputPath","overwriteFiles","packageManager","project","projectName","projectPlan","provider","reconfigure","template","templateToken","typescript","unattended","visibility"],"mappings":"AAiGA,MAAMA,yBAAyB,IAAIC,IAAY;IAAC;IAAO;IAAQ;CAAO;AACtE,SAASC,qBAAqBC,KAAyB;IACrD,OAAOA,UAAUC,aAAaJ,uBAAuBK,GAAG,CAACF,SACpDA,QACDC;AACN;AAEA,MAAME,qBAAqB,IAAIL,IAAY;IAAC;IAAW;CAAS;AAChE,SAASM,iBAAiBJ,KAAyB;IACjD,OAAOA,UAAUC,aAAaE,mBAAmBD,GAAG,CAACF,SAChDA,QACDC;AACN;AAEA,OAAO,SAASI,mBACdC,KAAuB,EACvBC,YAAqB,EACrBC,IAAiC,EACjCC,OAA+B,EAC/BC,UAAqC;IAErC,OAAO;QACLC,SAASH,MAAMI;QACfC,aAAaP,KAAK,CAAC,eAAe;QAClCQ,MAAMR,MAAMQ,IAAI;QAChBC,QAAQT,MAAMS,MAAM;QACpBC,SAASV,MAAMU,OAAO;QACtBC,gBAAgBX,KAAK,CAAC,kBAAkB;QACxCY,KAAKZ,MAAMY,GAAG;QACdC,YAAYb,KAAK,CAAC,cAAc;QAChCc,KAAKd,KAAK,CAAC,SAAS,GAAG,QAAQA,MAAMc,GAAG;QACxCC,eAAef,KAAK,CAAC,iBAAiB;QACtCG;QACAa,sBAAsBhB,KAAK,CAAC,0BAA0B;QACtDiB,iBAAiBjB,KAAK,CAAC,oBAAoB;QAC3CkB,mBAAmBlB,KAAK,CAAC,sBAAsB;QAC/CmB,cAAcnB,MAAMmB,YAAY;QAChCC,YAAYpB,KAAK,CAAC,cAAc;QAChCqB,gBAAgBrB,KAAK,CAAC,kBAAkB;QACxCsB,gBAAgB7B,qBAAqBO,KAAK,CAAC,kBAAkB;QAC7DuB,SAASvB,MAAMuB,OAAO;QACtBC,aAAaxB,KAAK,CAAC,eAAe,IAAIA,KAAK,CAAC,iBAAiB;QAC7DyB,aAAazB,KAAK,CAAC,eAAe;QAClC0B,UAAU1B,MAAM0B,QAAQ;QACxBC,aAAa3B,MAAM2B,WAAW;QAC9BvB;QACAwB,UAAU5B,MAAM4B,QAAQ;QACxBC,eAAe7B,KAAK,CAAC,iBAAiB;QACtC8B,YAAY9B,MAAM8B,UAAU;QAC5BC,YAAY9B;QACZ+B,YAAYlC,iBAAiBE,MAAMgC,UAAU;IAC/C;AACF"}
@@ -1,6 +1,6 @@
1
+ import { SchemaExtractionError } from '@sanity/cli-build/_internal/extract';
1
2
  import { findProjectRoot, getTimer, studioWorkerTask } from '@sanity/cli-core';
2
3
  import { spinner } from '@sanity/cli-core/ux';
3
- import { SchemaExtractionError } from '../schema/utils/SchemaExtractionError.js';
4
4
  import { manifestDebug } from './debug.js';
5
5
  import { writeManifestFile } from './writeManifestFile.js';
6
6
  const CREATE_TIMER = 'create-manifest';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/manifest/extractManifest.ts"],"sourcesContent":["import {findProjectRoot, getTimer, studioWorkerTask} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\n\nimport {type ExtractSchemaWorkerError} from '../schema/types.js'\nimport {SchemaExtractionError} from '../schema/utils/SchemaExtractionError.js'\nimport {manifestDebug} from './debug.js'\nimport {type CreateWorkspaceManifest, type ExtractManifestWorkerData} from './types'\nimport {writeManifestFile} from './writeManifestFile.js'\n\nconst CREATE_TIMER = 'create-manifest'\n\ninterface ExtractManifestWorkerResult {\n type: 'success'\n workspaceManifests: CreateWorkspaceManifest[]\n}\n\ntype ExtractManifestWorkerMessage = ExtractManifestWorkerResult | ExtractSchemaWorkerError\n\nexport async function extractManifest(outPath: string): Promise<void> {\n const projectRoot = await findProjectRoot(process.cwd())\n\n manifestDebug('Project root %o', projectRoot)\n\n const workDir = projectRoot.directory\n const configPath = projectRoot.path\n\n const timer = getTimer()\n timer.start(CREATE_TIMER)\n const spin = spinner('Extracting manifest').start()\n\n try {\n const result = await studioWorkerTask<ExtractManifestWorkerMessage>(\n new URL('extractManifest.worker.js', import.meta.url),\n {\n name: 'extractManifest',\n studioRootPath: workDir,\n workerData: {configPath, workDir} satisfies ExtractManifestWorkerData,\n },\n )\n\n manifestDebug('Result %o', result)\n\n if (result.type === 'error') {\n throw new SchemaExtractionError(result.error, result.validation)\n }\n\n await writeManifestFile({\n outPath,\n workDir,\n workspaceManifests: result.workspaceManifests,\n })\n\n const manifestDuration = timer.end(CREATE_TIMER)\n\n spin.succeed(`Extracted manifest (${manifestDuration.toFixed(0)}ms)`)\n } catch (err) {\n manifestDebug('Error extracting manifest', err)\n spin.fail()\n\n throw err\n }\n}\n"],"names":["findProjectRoot","getTimer","studioWorkerTask","spinner","SchemaExtractionError","manifestDebug","writeManifestFile","CREATE_TIMER","extractManifest","outPath","projectRoot","process","cwd","workDir","directory","configPath","path","timer","start","spin","result","URL","url","name","studioRootPath","workerData","type","error","validation","workspaceManifests","manifestDuration","end","succeed","toFixed","err","fail"],"mappings":"AAAA,SAAQA,eAAe,EAAEC,QAAQ,EAAEC,gBAAgB,QAAO,mBAAkB;AAC5E,SAAQC,OAAO,QAAO,sBAAqB;AAG3C,SAAQC,qBAAqB,QAAO,2CAA0C;AAC9E,SAAQC,aAAa,QAAO,aAAY;AAExC,SAAQC,iBAAiB,QAAO,yBAAwB;AAExD,MAAMC,eAAe;AASrB,OAAO,eAAeC,gBAAgBC,OAAe;IACnD,MAAMC,cAAc,MAAMV,gBAAgBW,QAAQC,GAAG;IAErDP,cAAc,mBAAmBK;IAEjC,MAAMG,UAAUH,YAAYI,SAAS;IACrC,MAAMC,aAAaL,YAAYM,IAAI;IAEnC,MAAMC,QAAQhB;IACdgB,MAAMC,KAAK,CAACX;IACZ,MAAMY,OAAOhB,QAAQ,uBAAuBe,KAAK;IAEjD,IAAI;QACF,MAAME,SAAS,MAAMlB,iBACnB,IAAImB,IAAI,6BAA6B,YAAYC,GAAG,GACpD;YACEC,MAAM;YACNC,gBAAgBX;YAChBY,YAAY;gBAACV;gBAAYF;YAAO;QAClC;QAGFR,cAAc,aAAae;QAE3B,IAAIA,OAAOM,IAAI,KAAK,SAAS;YAC3B,MAAM,IAAItB,sBAAsBgB,OAAOO,KAAK,EAAEP,OAAOQ,UAAU;QACjE;QAEA,MAAMtB,kBAAkB;YACtBG;YACAI;YACAgB,oBAAoBT,OAAOS,kBAAkB;QAC/C;QAEA,MAAMC,mBAAmBb,MAAMc,GAAG,CAACxB;QAEnCY,KAAKa,OAAO,CAAC,CAAC,oBAAoB,EAAEF,iBAAiBG,OAAO,CAAC,GAAG,GAAG,CAAC;IACtE,EAAE,OAAOC,KAAK;QACZ7B,cAAc,6BAA6B6B;QAC3Cf,KAAKgB,IAAI;QAET,MAAMD;IACR;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/manifest/extractManifest.ts"],"sourcesContent":["import {\n type ExtractSchemaWorkerError,\n SchemaExtractionError,\n} from '@sanity/cli-build/_internal/extract'\nimport {findProjectRoot, getTimer, studioWorkerTask} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\n\nimport {manifestDebug} from './debug.js'\nimport {type CreateWorkspaceManifest, type ExtractManifestWorkerData} from './types'\nimport {writeManifestFile} from './writeManifestFile.js'\n\nconst CREATE_TIMER = 'create-manifest'\n\ninterface ExtractManifestWorkerResult {\n type: 'success'\n workspaceManifests: CreateWorkspaceManifest[]\n}\n\ntype ExtractManifestWorkerMessage = ExtractManifestWorkerResult | ExtractSchemaWorkerError\n\nexport async function extractManifest(outPath: string): Promise<void> {\n const projectRoot = await findProjectRoot(process.cwd())\n\n manifestDebug('Project root %o', projectRoot)\n\n const workDir = projectRoot.directory\n const configPath = projectRoot.path\n\n const timer = getTimer()\n timer.start(CREATE_TIMER)\n const spin = spinner('Extracting manifest').start()\n\n try {\n const result = await studioWorkerTask<ExtractManifestWorkerMessage>(\n new URL('extractManifest.worker.js', import.meta.url),\n {\n name: 'extractManifest',\n studioRootPath: workDir,\n workerData: {configPath, workDir} satisfies ExtractManifestWorkerData,\n },\n )\n\n manifestDebug('Result %o', result)\n\n if (result.type === 'error') {\n throw new SchemaExtractionError(result.error, result.validation)\n }\n\n await writeManifestFile({\n outPath,\n workDir,\n workspaceManifests: result.workspaceManifests,\n })\n\n const manifestDuration = timer.end(CREATE_TIMER)\n\n spin.succeed(`Extracted manifest (${manifestDuration.toFixed(0)}ms)`)\n } catch (err) {\n manifestDebug('Error extracting manifest', err)\n spin.fail()\n\n throw err\n }\n}\n"],"names":["SchemaExtractionError","findProjectRoot","getTimer","studioWorkerTask","spinner","manifestDebug","writeManifestFile","CREATE_TIMER","extractManifest","outPath","projectRoot","process","cwd","workDir","directory","configPath","path","timer","start","spin","result","URL","url","name","studioRootPath","workerData","type","error","validation","workspaceManifests","manifestDuration","end","succeed","toFixed","err","fail"],"mappings":"AAAA,SAEEA,qBAAqB,QAChB,sCAAqC;AAC5C,SAAQC,eAAe,EAAEC,QAAQ,EAAEC,gBAAgB,QAAO,mBAAkB;AAC5E,SAAQC,OAAO,QAAO,sBAAqB;AAE3C,SAAQC,aAAa,QAAO,aAAY;AAExC,SAAQC,iBAAiB,QAAO,yBAAwB;AAExD,MAAMC,eAAe;AASrB,OAAO,eAAeC,gBAAgBC,OAAe;IACnD,MAAMC,cAAc,MAAMT,gBAAgBU,QAAQC,GAAG;IAErDP,cAAc,mBAAmBK;IAEjC,MAAMG,UAAUH,YAAYI,SAAS;IACrC,MAAMC,aAAaL,YAAYM,IAAI;IAEnC,MAAMC,QAAQf;IACde,MAAMC,KAAK,CAACX;IACZ,MAAMY,OAAOf,QAAQ,uBAAuBc,KAAK;IAEjD,IAAI;QACF,MAAME,SAAS,MAAMjB,iBACnB,IAAIkB,IAAI,6BAA6B,YAAYC,GAAG,GACpD;YACEC,MAAM;YACNC,gBAAgBX;YAChBY,YAAY;gBAACV;gBAAYF;YAAO;QAClC;QAGFR,cAAc,aAAae;QAE3B,IAAIA,OAAOM,IAAI,KAAK,SAAS;YAC3B,MAAM,IAAI1B,sBAAsBoB,OAAOO,KAAK,EAAEP,OAAOQ,UAAU;QACjE;QAEA,MAAMtB,kBAAkB;YACtBG;YACAI;YACAgB,oBAAoBT,OAAOS,kBAAkB;QAC/C;QAEA,MAAMC,mBAAmBb,MAAMc,GAAG,CAACxB;QAEnCY,KAAKa,OAAO,CAAC,CAAC,oBAAoB,EAAEF,iBAAiBG,OAAO,CAAC,GAAG,GAAG,CAAC;IACtE,EAAE,OAAOC,KAAK;QACZ7B,cAAc,6BAA6B6B;QAC3Cf,KAAKgB,IAAI;QAET,MAAMD;IACR;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { isMainThread, parentPort, workerData } from 'node:worker_threads';
2
+ import { extractValidationFromSchemaError } from '@sanity/cli-build/_internal/extract';
2
3
  import { getStudioWorkspaces, subdebug } from '@sanity/cli-core';
3
- import { extractValidationFromSchemaError } from '../schema/utils/extractValidationFromSchemaError.js';
4
4
  import { extractWorkspaceManifest } from './extractWorkspaceManifest.js';
5
5
  import { extractManifestWorkerData } from './types.js';
6
6
  if (isMainThread || !parentPort) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/manifest/extractManifest.worker.ts"],"sourcesContent":["import {isMainThread, parentPort, workerData} from 'node:worker_threads'\n\nimport {getStudioWorkspaces, subdebug} from '@sanity/cli-core'\n\nimport {extractValidationFromSchemaError} from '../schema/utils/extractValidationFromSchemaError.js'\nimport {extractWorkspaceManifest} from './extractWorkspaceManifest.js'\nimport {extractManifestWorkerData} from './types.js'\n\nif (isMainThread || !parentPort) {\n throw new Error('Should only be run in a worker!')\n}\n\nconst debug = subdebug('extractManifest.worker')\n\nconst {configPath, workDir} = extractManifestWorkerData.parse(workerData)\n\ntry {\n debug('Extracting workspace manifests from config path %s', configPath)\n const workspaces = await getStudioWorkspaces(configPath)\n debug('Workspaces %o', workspaces)\n const workspaceManifests = await extractWorkspaceManifest(workspaces, workDir)\n\n parentPort.postMessage({\n type: 'success',\n workspaceManifests,\n })\n} catch (error) {\n debug('Error extracting workspace manifests', error)\n const validation = await extractValidationFromSchemaError(error, workDir)\n parentPort.postMessage({\n error: error instanceof Error ? error.message : String(error),\n type: 'error',\n validation,\n })\n}\n"],"names":["isMainThread","parentPort","workerData","getStudioWorkspaces","subdebug","extractValidationFromSchemaError","extractWorkspaceManifest","extractManifestWorkerData","Error","debug","configPath","workDir","parse","workspaces","workspaceManifests","postMessage","type","error","validation","message","String"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,UAAU,EAAEC,UAAU,QAAO,sBAAqB;AAExE,SAAQC,mBAAmB,EAAEC,QAAQ,QAAO,mBAAkB;AAE9D,SAAQC,gCAAgC,QAAO,sDAAqD;AACpG,SAAQC,wBAAwB,QAAO,gCAA+B;AACtE,SAAQC,yBAAyB,QAAO,aAAY;AAEpD,IAAIP,gBAAgB,CAACC,YAAY;IAC/B,MAAM,IAAIO,MAAM;AAClB;AAEA,MAAMC,QAAQL,SAAS;AAEvB,MAAM,EAACM,UAAU,EAAEC,OAAO,EAAC,GAAGJ,0BAA0BK,KAAK,CAACV;AAE9D,IAAI;IACFO,MAAM,sDAAsDC;IAC5D,MAAMG,aAAa,MAAMV,oBAAoBO;IAC7CD,MAAM,iBAAiBI;IACvB,MAAMC,qBAAqB,MAAMR,yBAAyBO,YAAYF;IAEtEV,WAAWc,WAAW,CAAC;QACrBC,MAAM;QACNF;IACF;AACF,EAAE,OAAOG,OAAO;IACdR,MAAM,wCAAwCQ;IAC9C,MAAMC,aAAa,MAAMb,iCAAiCY,OAAON;IACjEV,WAAWc,WAAW,CAAC;QACrBE,OAAOA,iBAAiBT,QAAQS,MAAME,OAAO,GAAGC,OAAOH;QACvDD,MAAM;QACNE;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/manifest/extractManifest.worker.ts"],"sourcesContent":["import {isMainThread, parentPort, workerData} from 'node:worker_threads'\n\nimport {extractValidationFromSchemaError} from '@sanity/cli-build/_internal/extract'\nimport {getStudioWorkspaces, subdebug} from '@sanity/cli-core'\n\nimport {extractWorkspaceManifest} from './extractWorkspaceManifest.js'\nimport {extractManifestWorkerData} from './types.js'\n\nif (isMainThread || !parentPort) {\n throw new Error('Should only be run in a worker!')\n}\n\nconst debug = subdebug('extractManifest.worker')\n\nconst {configPath, workDir} = extractManifestWorkerData.parse(workerData)\n\ntry {\n debug('Extracting workspace manifests from config path %s', configPath)\n const workspaces = await getStudioWorkspaces(configPath)\n debug('Workspaces %o', workspaces)\n const workspaceManifests = await extractWorkspaceManifest(workspaces, workDir)\n\n parentPort.postMessage({\n type: 'success',\n workspaceManifests,\n })\n} catch (error) {\n debug('Error extracting workspace manifests', error)\n const validation = await extractValidationFromSchemaError(error, workDir)\n parentPort.postMessage({\n error: error instanceof Error ? error.message : String(error),\n type: 'error',\n validation,\n })\n}\n"],"names":["isMainThread","parentPort","workerData","extractValidationFromSchemaError","getStudioWorkspaces","subdebug","extractWorkspaceManifest","extractManifestWorkerData","Error","debug","configPath","workDir","parse","workspaces","workspaceManifests","postMessage","type","error","validation","message","String"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,UAAU,EAAEC,UAAU,QAAO,sBAAqB;AAExE,SAAQC,gCAAgC,QAAO,sCAAqC;AACpF,SAAQC,mBAAmB,EAAEC,QAAQ,QAAO,mBAAkB;AAE9D,SAAQC,wBAAwB,QAAO,gCAA+B;AACtE,SAAQC,yBAAyB,QAAO,aAAY;AAEpD,IAAIP,gBAAgB,CAACC,YAAY;IAC/B,MAAM,IAAIO,MAAM;AAClB;AAEA,MAAMC,QAAQJ,SAAS;AAEvB,MAAM,EAACK,UAAU,EAAEC,OAAO,EAAC,GAAGJ,0BAA0BK,KAAK,CAACV;AAE9D,IAAI;IACFO,MAAM,sDAAsDC;IAC5D,MAAMG,aAAa,MAAMT,oBAAoBM;IAC7CD,MAAM,iBAAiBI;IACvB,MAAMC,qBAAqB,MAAMR,yBAAyBO,YAAYF;IAEtEV,WAAWc,WAAW,CAAC;QACrBC,MAAM;QACNF;IACF;AACF,EAAE,OAAOG,OAAO;IACdR,MAAM,wCAAwCQ;IAC9C,MAAMC,aAAa,MAAMf,iCAAiCc,OAAON;IACjEV,WAAWc,WAAW,CAAC;QACrBE,OAAOA,iBAAiBT,QAAQS,MAAME,OAAO,GAAGC,OAAOH;QACvDD,MAAM;QACNE;IACF;AACF"}
@@ -236,27 +236,32 @@ function buildZedServerConfig(token) {
236
236
  Antigravity: {
237
237
  ...EDITOR_DEFAULTS,
238
238
  buildServerConfig: buildAntigravityServerConfig,
239
- detect: detectAntigravity
239
+ detect: detectAntigravity,
240
+ skillsCliAgent: 'antigravity'
240
241
  },
241
242
  // Doc: https://docs.anthropic.com/en/docs/claude-code/mcp
242
243
  // Path: ~/.claude.json Key: mcpServers
243
244
  'Claude Code': {
244
245
  ...EDITOR_DEFAULTS,
245
- detect: detectClaudeCode
246
+ detect: detectClaudeCode,
247
+ oauthOnly: true,
248
+ skillsCliAgent: 'claude-code'
246
249
  },
247
250
  // Doc: https://github.com/cline/cline — VS Code extension (saoudrizwan.claude-dev)
248
251
  // Path: <VS Code User>/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
249
252
  Cline: {
250
253
  ...EDITOR_DEFAULTS,
251
254
  buildServerConfig: buildClineServerConfig,
252
- detect: detectCline
255
+ detect: detectCline,
256
+ skillsCliAgent: 'cline'
253
257
  },
254
258
  // Doc: https://github.com/cline/cline — standalone CLI mode
255
259
  // Path: $CLINE_DIR || ~/.cline/data/settings/cline_mcp_settings.json
256
260
  'Cline CLI': {
257
261
  ...EDITOR_DEFAULTS,
258
262
  buildServerConfig: buildClineServerConfig,
259
- detect: detectClineCli
263
+ detect: detectClineCli,
264
+ skillsCliAgent: 'cline'
260
265
  },
261
266
  // Doc: https://platform.openai.com/docs/guides/tools-remote-mcp#codex-cli
262
267
  // Path: $CODEX_HOME || ~/.codex/config.toml Key: mcp_servers Format: TOML
@@ -266,27 +271,31 @@ function buildZedServerConfig(token) {
266
271
  configKey: 'mcp_servers',
267
272
  detect: detectCodexCli,
268
273
  format: 'toml',
269
- readToken: readTokenFromHttpHeaders
274
+ readToken: readTokenFromHttpHeaders,
275
+ skillsCliAgent: 'codex'
270
276
  },
271
277
  // Doc: https://docs.cursor.com/context/model-context-protocol
272
278
  // Path: ~/.cursor/mcp.json Key: mcpServers
273
279
  Cursor: {
274
280
  ...EDITOR_DEFAULTS,
275
281
  detect: detectCursor,
276
- oauthOnly: true
282
+ oauthOnly: true,
283
+ skillsCliAgent: 'cursor'
277
284
  },
278
285
  // Doc: https://googlegemini.wiki/gemini-cli/mcp-servers
279
286
  // Path: ~/.gemini/settings.json Key: mcpServers
280
287
  'Gemini CLI': {
281
288
  ...EDITOR_DEFAULTS,
282
- detect: detectGeminiCli
289
+ detect: detectGeminiCli,
290
+ skillsCliAgent: 'gemini-cli'
283
291
  },
284
292
  // Doc: https://docs.github.com/en/copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp
285
293
  // Path: ~/.copilot/mcp-config.json (or $XDG_CONFIG_HOME/copilot on Linux) Key: mcpServers
286
294
  'GitHub Copilot CLI': {
287
295
  ...EDITOR_DEFAULTS,
288
296
  buildServerConfig: buildGitHubCopilotCliServerConfig,
289
- detect: detectGitHubCopilotCli
297
+ detect: detectGitHubCopilotCli,
298
+ skillsCliAgent: 'github-copilot'
290
299
  },
291
300
  // Doc: https://github.com/nicobailon/mcporter
292
301
  // Path: ~/.mcporter/mcporter.{json,jsonc} Key: mcpServers
@@ -300,24 +309,30 @@ function buildZedServerConfig(token) {
300
309
  ...EDITOR_DEFAULTS,
301
310
  buildServerConfig: buildOpenCodeServerConfig,
302
311
  configKey: 'mcp',
303
- detect: detectOpenCode
312
+ detect: detectOpenCode,
313
+ skillsCliAgent: 'opencode'
304
314
  },
305
315
  // Doc: https://code.visualstudio.com/docs/copilot/chat/mcp-servers
306
316
  // Path: <VS Code User dir>/mcp.json Key: servers
317
+ // VS Code uses GitHub Copilot for AI features; skills are installed via the
318
+ // `github-copilot` agent (see https://code.visualstudio.com/docs/copilot/customization/agent-skills).
307
319
  'VS Code': {
308
320
  ...EDITOR_DEFAULTS,
309
321
  configKey: 'servers',
310
- detect: detectVSCode
322
+ detect: detectVSCode,
323
+ skillsCliAgent: 'github-copilot'
311
324
  },
312
325
  // Doc: https://code.visualstudio.com/docs/copilot/chat/mcp-servers
313
326
  // Path: <VS Code Insiders User dir>/mcp.json Key: servers
314
327
  'VS Code Insiders': {
315
328
  ...EDITOR_DEFAULTS,
316
329
  configKey: 'servers',
317
- detect: detectVSCodeInsiders
330
+ detect: detectVSCodeInsiders,
331
+ skillsCliAgent: 'github-copilot'
318
332
  },
319
333
  // Doc: https://zed.dev/docs/assistant/model-context-protocol
320
334
  // Path: ~/.config/zed/settings.json (or $APPDATA/Zed on Windows) Key: context_servers
335
+ // Zed doesn't support agent skills - https://github.com/zed-industries/zed/issues/49057
321
336
  Zed: {
322
337
  ...EDITOR_DEFAULTS,
323
338
  buildServerConfig: buildZedServerConfig,
@@ -325,5 +340,30 @@ function buildZedServerConfig(token) {
325
340
  detect: detectZed
326
341
  }
327
342
  };
343
+ export function getSkillsCliAgent(editorName) {
344
+ if (editorName in EDITOR_CONFIGS) {
345
+ const config = EDITOR_CONFIGS[editorName];
346
+ return 'skillsCliAgent' in config ? config.skillsCliAgent : undefined;
347
+ }
348
+ }
349
+ /**
350
+ * Skills-CLI agent ID → display name. Mirrors `displayName` from
351
+ * `~/git/skills/src/agents.ts` for the subset of agents we install for. Used
352
+ * to match `skills list --json` output (which keys by display name) against
353
+ * our editors.
354
+ */ const SKILLS_CLI_AGENT_DISPLAY_NAMES = {
355
+ antigravity: 'Antigravity',
356
+ 'claude-code': 'Claude Code',
357
+ cline: 'Cline',
358
+ codex: 'Codex',
359
+ cursor: 'Cursor',
360
+ 'gemini-cli': 'Gemini CLI',
361
+ 'github-copilot': 'GitHub Copilot',
362
+ opencode: 'OpenCode'
363
+ };
364
+ /** Display name used by the skills CLI for the given editor, if it has a mapping. */ export function getSkillsCliAgentDisplayName(editorName) {
365
+ const agent = getSkillsCliAgent(editorName);
366
+ return agent ? SKILLS_CLI_AGENT_DISPLAY_NAMES[agent] : undefined;
367
+ }
328
368
 
329
369
  //# sourceMappingURL=editorConfigs.js.map